server.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. const fs = require('fs');
  2. const path = './swagger.txt';
  3. // 截取两个字符串之间的子字符串,返回所有
  4. function subStringMulti(text, begin, end) {
  5. let regex;
  6. if (end == '\\n') regex = new RegExp(begin + '(.+)', 'g');
  7. else regex = new RegExp(begin + '([\\s\\S]+?)' + end, 'g');
  8. try {
  9. let result;
  10. const blocks = [];
  11. while ((result = regex.exec(text)) != null) {
  12. blocks.push(result[1].trim());
  13. }
  14. return blocks;
  15. // return text.match(regex);
  16. } catch (err) {
  17. return null;
  18. }
  19. }
  20. fs.readFile(path, (err, data) => {
  21. if (err) {
  22. console.log('文件不存在!');
  23. } else {
  24. const oldValue = data.toString();
  25. let newValue;
  26. if (oldValue.indexOf('optional') === -1) {
  27. newValue =
  28. 'interface HttpRespone {code: number;msg: string;page: number;pagesize: number;total: number;}' +
  29. 'export interface Enum' +
  30. oldValue
  31. .replace(/\*/g, '')
  32. .replace(/number/g, ':number;\n//')
  33. .replace(/0/g, 'number;\n//')
  34. .replace(/integer/g, ':number;\n//')
  35. .replace(/string/g, ':string;\n//')
  36. .replace(/boolean/g, ':boolean;\n//')
  37. .replace(/"/g, '')
  38. .replace(/"/g, '')
  39. .replace(/\n\/\/\n/g, '//')
  40. .replace(/\n(\n)*( )*(\n)*\n/g, '\n')
  41. .trim() +
  42. '\n' +
  43. 'export interface QueryMarketGoodsRespone extends HttpRespone{data: Enum[];}';
  44. } else {
  45. const before = oldValue.split('{')[0].replace('message', 'export interface ') + '{';
  46. const between = subStringMulti(oldValue, '{', '}')[0];
  47. const semicolonAry = between.split(';');
  48. const newSemicolonAry = [];
  49. semicolonAry.forEach((item) => {
  50. if (item.indexOf('optional uint') !== -1) {
  51. item = item.replace(item.split('=')[1], 'Number').replace('=', '?:');
  52. } else if (item.indexOf('optional string') !== -1) {
  53. item = item.replace(item.split('=')[1], 'String').replace('=', '?:');
  54. } else if (item.indexOf('optional double') !== -1) {
  55. item = item.replace(item.split('=')[1], 'Number').replace('=', '?:');
  56. } else if (item.indexOf('optional int32') !== -1) {
  57. item = item.replace(item.split('=')[1], 'Number').replace('=', '?:');
  58. } else if (item.indexOf('required int32') !== -1) {
  59. item = item.replace(item.split('=')[1], 'Number').replace('=', ':');
  60. } else if (item.indexOf('required uint') !== -1) {
  61. item = item.replace(item.split('=')[1], 'Number').replace('=', ':');
  62. } else if (item.indexOf('required string') !== -1) {
  63. item = item.replace(item.split('=')[1], 'String').replace('=', ':');
  64. } else if (item.indexOf('required double') !== -1) {
  65. item = item.replace(item.split('=')[1], 'Number').replace('=', ':');
  66. }
  67. newSemicolonAry.push(item + ';');
  68. });
  69. const changeValue = newSemicolonAry.join(' ');
  70. newValue =
  71. before +
  72. changeValue
  73. .replace(/optional MessageHead Header = 1;/g, '')
  74. .replace(/required/g, 'optional')
  75. .replace(/optional int32/g, '')
  76. .replace(/optional uint32/g, '')
  77. .replace(/optional uint64/g, '')
  78. .replace(/optional string/g, '')
  79. .replace(/optional double/g, '')
  80. .replace(/=/g, ':')
  81. .trim() +
  82. '\n }';
  83. }
  84. console.log(newValue);
  85. fs.unlink('./swagger.ts', (err) => {
  86. !err && console.log('文件删除成功!');
  87. });
  88. fs.writeFile('./swagger.ts', newValue, { flag: 'a' }, (err) => {
  89. !err && console.log('写入文件成功!');
  90. });
  91. }
  92. });