server.js 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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 Name' +
  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. } else {
  44. const before = oldValue.split('{')[0].replace('message', 'export interface ') + '{';
  45. const between = subStringMulti(oldValue, '{', '}')[0];
  46. const semicolonAry = between.split(';');
  47. const newSemicolonAry = [];
  48. semicolonAry.forEach((item) => {
  49. if (item.indexOf('optional uint') !== -1) {
  50. item = item.replace(item.split('=')[1], 'Number').replace('=', '?:');
  51. } else if (item.indexOf('optional string') !== -1) {
  52. item = item.replace(item.split('=')[1], 'String').replace('=', '?:');
  53. } else if (item.indexOf('optional double') !== -1) {
  54. item = item.replace(item.split('=')[1], 'Number').replace('=', '?:');
  55. } else if (item.indexOf('optional int32') !== -1) {
  56. item = item.replace(item.split('=')[1], 'Number').replace('=', '?:');
  57. } else if (item.indexOf('required int32') !== -1) {
  58. item = item.replace(item.split('=')[1], 'Number').replace('=', ':');
  59. } else if (item.indexOf('required uint') !== -1) {
  60. item = item.replace(item.split('=')[1], 'Number').replace('=', ':');
  61. } else if (item.indexOf('required string') !== -1) {
  62. item = item.replace(item.split('=')[1], 'String').replace('=', ':');
  63. } else if (item.indexOf('required double') !== -1) {
  64. item = item.replace(item.split('=')[1], 'Number').replace('=', ':');
  65. }
  66. newSemicolonAry.push(item + ';');
  67. });
  68. const changeValue = newSemicolonAry.join(' ');
  69. newValue =
  70. before +
  71. changeValue
  72. .replace(/optional MessageHead Header = 1;/g, '')
  73. .replace(/required/g, 'optional')
  74. .replace(/optional int32/g, '')
  75. .replace(/optional uint32/g, '')
  76. .replace(/optional uint64/g, '')
  77. .replace(/optional string/g, '')
  78. .replace(/optional double/g, '')
  79. .replace(/=/g, ':')
  80. .trim() +
  81. '\n }';
  82. }
  83. console.log(newValue);
  84. fs.unlink('./swagger.ts', (err) => {
  85. !err && console.log('文件删除成功!');
  86. });
  87. fs.writeFile('./swagger.ts', newValue, { flag: 'a' }, (err) => {
  88. !err && console.log('写入文件成功!');
  89. });
  90. }
  91. });