@lsby/net-core 0.3.21 → 0.3.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/dist/bin/gen-list/bin.cjs +93 -47
  2. package/dist/bin/gen-list/index.cjs +93 -47
  3. package/dist/bin/gen-list/index.d.cts +1 -1
  4. package/dist/bin/gen-test/bin.cjs +90 -54
  5. package/dist/bin/gen-test/index.cjs +90 -54
  6. package/dist/bin/gen-test/index.d.cts +1 -1
  7. package/dist/bin/gen-type/bin.cjs +96 -93
  8. package/dist/bin/gen-type/index.cjs +96 -93
  9. package/dist/bin/gen-type/index.d.cts +1 -1
  10. package/dist/cjs/{interface/action → action}/action.cjs +1 -1
  11. package/dist/cjs/bin/gen-list/bin.cjs +93 -47
  12. package/dist/cjs/bin/gen-list/index.cjs +93 -47
  13. package/dist/cjs/bin/gen-list/index.d.cts +1 -1
  14. package/dist/cjs/bin/gen-test/bin.cjs +90 -54
  15. package/dist/cjs/bin/gen-test/index.cjs +90 -54
  16. package/dist/cjs/bin/gen-test/index.d.cts +1 -1
  17. package/dist/cjs/bin/gen-type/bin.cjs +96 -93
  18. package/dist/cjs/bin/gen-type/index.cjs +96 -93
  19. package/dist/cjs/bin/gen-type/index.d.cts +1 -1
  20. package/dist/cjs/index.cjs +62 -131
  21. package/dist/cjs/index.d.cts +12 -16
  22. package/dist/cjs/{extend/api-json-base.cjs → interface/extend/json-base.cjs} +54 -54
  23. package/dist/cjs/{extend/api-json-base.d.cts → interface/extend/json-base.d.cts} +8 -8
  24. package/dist/cjs/{extend/api-json-wrap.cjs → interface/extend/json-wrap.cjs} +79 -75
  25. package/dist/cjs/interface/extend/json-wrap.d.cts +26 -0
  26. package/dist/cjs/interface/{inst/interface-abstract.cjs → interface-inst.cjs} +9 -9
  27. package/dist/cjs/interface/interface-inst.d.cts +18 -0
  28. package/dist/cjs/{test/test-abstract.cjs → interface/interface-test.cjs} +7 -7
  29. package/dist/{esm/test/test-abstract.d.ts → cjs/interface/interface-test.d.cts} +2 -2
  30. package/dist/cjs/interface/{type/interface-type.cjs → interface-type.cjs} +2 -9
  31. package/dist/cjs/interface/interface-type.d.cts +28 -0
  32. package/dist/cjs/plugin/{chinese-path.cjs → extend/chinese-path.cjs} +3 -3
  33. package/dist/cjs/plugin/{chinese-path.d.cts → extend/chinese-path.d.cts} +1 -1
  34. package/dist/cjs/plugin/{custom-data.cjs → extend/custom-data.cjs} +3 -3
  35. package/dist/cjs/plugin/{custom-data.d.cts → extend/custom-data.d.cts} +1 -1
  36. package/dist/cjs/plugin/{json.cjs → extend/json.cjs} +4 -4
  37. package/dist/cjs/plugin/{json.d.cts → extend/json.d.cts} +4 -4
  38. package/dist/cjs/plugin/{urlencoded.cjs → extend/urlencoded.cjs} +4 -4
  39. package/dist/cjs/plugin/{urlencoded.d.cts → extend/urlencoded.d.cts} +1 -1
  40. package/dist/cjs/{interface → plugin}/plug.cjs +1 -1
  41. package/dist/cjs/{interface → plugin}/plug.d.cts +4 -3
  42. package/dist/cjs/server/server.d.cts +5 -5
  43. package/dist/esm/{interface/action → action}/action.js +1 -1
  44. package/dist/esm/bin/gen-list/bin.js +1 -1
  45. package/dist/esm/bin/gen-list/index.d.ts +1 -1
  46. package/dist/esm/bin/gen-list/index.js +1 -1
  47. package/dist/esm/bin/gen-test/bin.js +1 -1
  48. package/dist/esm/bin/gen-test/index.d.ts +1 -1
  49. package/dist/esm/bin/gen-test/index.js +1 -1
  50. package/dist/esm/bin/gen-type/bin.js +1 -2
  51. package/dist/esm/bin/gen-type/index.d.ts +1 -1
  52. package/dist/esm/bin/gen-type/index.js +1 -2
  53. package/dist/esm/{chunk-P6PGPAMW.js → chunk-2MN4G2DG.js} +2 -2
  54. package/dist/esm/chunk-3WT6TRYJ.js +37 -0
  55. package/dist/esm/chunk-B5W4H32C.js +112 -0
  56. package/dist/esm/chunk-IZ623QVE.js +11 -0
  57. package/dist/esm/{chunk-XG4VZZOX.js → chunk-KW3M3VXP.js} +2 -2
  58. package/dist/esm/chunk-MMAAGHJW.js +214 -0
  59. package/dist/esm/{chunk-KSZE2DTR.js → chunk-N4NY37XI.js} +1 -1
  60. package/dist/esm/{chunk-VJ4ORZR3.js → chunk-P4TLIJX4.js} +5 -5
  61. package/dist/esm/{chunk-S7GRYORG.js → chunk-P6ML63XI.js} +6 -6
  62. package/dist/esm/{chunk-CMHISRDG.js → chunk-SF5Z34AP.js} +2 -7
  63. package/dist/esm/{chunk-XRV64MDF.js → chunk-SFNQ5AWH.js} +3 -3
  64. package/dist/esm/chunk-TMRT3MBS.js +113 -0
  65. package/dist/esm/{chunk-N7G2H6GB.js → chunk-V3S5HDZD.js} +1 -1
  66. package/dist/esm/{chunk-5UUMGDDD.js → chunk-XTHURYQM.js} +3 -3
  67. package/dist/esm/index.d.ts +12 -16
  68. package/dist/esm/index.js +32 -50
  69. package/dist/esm/{extend/api-json-base.d.ts → interface/extend/json-base.d.ts} +8 -8
  70. package/dist/esm/interface/extend/json-base.js +10 -0
  71. package/dist/esm/interface/extend/json-wrap.d.ts +26 -0
  72. package/dist/esm/interface/extend/json-wrap.js +13 -0
  73. package/dist/esm/interface/interface-inst.d.ts +18 -0
  74. package/dist/esm/interface/interface-inst.js +7 -0
  75. package/dist/{cjs/test/test-abstract.d.cts → esm/interface/interface-test.d.ts} +2 -2
  76. package/dist/esm/interface/interface-test.js +6 -0
  77. package/dist/esm/interface/interface-type.d.ts +28 -0
  78. package/dist/esm/interface/interface-type.js +6 -0
  79. package/dist/esm/plugin/{chinese-path.d.ts → extend/chinese-path.d.ts} +1 -1
  80. package/dist/esm/plugin/{chinese-path.js → extend/chinese-path.js} +2 -2
  81. package/dist/esm/plugin/{custom-data.d.ts → extend/custom-data.d.ts} +1 -1
  82. package/dist/esm/plugin/{custom-data.js → extend/custom-data.js} +2 -2
  83. package/dist/esm/plugin/{json.d.ts → extend/json.d.ts} +4 -4
  84. package/dist/esm/plugin/extend/json.js +8 -0
  85. package/dist/esm/plugin/{urlencoded.d.ts → extend/urlencoded.d.ts} +1 -1
  86. package/dist/esm/plugin/{urlencoded.js → extend/urlencoded.js} +2 -2
  87. package/dist/esm/{interface → plugin}/plug.d.ts +4 -3
  88. package/dist/esm/{interface → plugin}/plug.js +1 -1
  89. package/dist/esm/server/server.d.ts +5 -5
  90. package/package.json +4 -2
  91. package/dist/bin/gen-type/calc-code.cjs +0 -53
  92. package/dist/bin/gen-type/calc-code.d.cts +0 -3
  93. package/dist/cjs/bin/gen-type/calc-code.cjs +0 -53
  94. package/dist/cjs/bin/gen-type/calc-code.d.cts +0 -3
  95. package/dist/cjs/extend/api-json-action-wrap.cjs +0 -214
  96. package/dist/cjs/extend/api-json-action-wrap.d.cts +0 -16
  97. package/dist/cjs/extend/api-json-wrap.d.cts +0 -55
  98. package/dist/cjs/interface/inst/interface-abstract.d.cts +0 -18
  99. package/dist/cjs/interface/inst/interface.cjs +0 -167
  100. package/dist/cjs/interface/inst/interface.d.cts +0 -18
  101. package/dist/cjs/interface/type/interface-type-abstract.cjs +0 -31
  102. package/dist/cjs/interface/type/interface-type-abstract.d.cts +0 -21
  103. package/dist/cjs/interface/type/interface-type.d.cts +0 -22
  104. package/dist/cjs/test/test.cjs +0 -60
  105. package/dist/cjs/test/test.d.cts +0 -19
  106. package/dist/esm/bin/gen-type/calc-code.d.ts +0 -3
  107. package/dist/esm/bin/gen-type/calc-code.js +0 -6
  108. package/dist/esm/chunk-34QVQSKM.js +0 -20
  109. package/dist/esm/chunk-4KSHDKSP.js +0 -11
  110. package/dist/esm/chunk-CSZNLNB5.js +0 -76
  111. package/dist/esm/chunk-DMQXYTFQ.js +0 -7
  112. package/dist/esm/chunk-DQX4L6GK.js +0 -187
  113. package/dist/esm/chunk-FLIKJZGI.js +0 -29
  114. package/dist/esm/chunk-LSG6UGUR.js +0 -54
  115. package/dist/esm/chunk-PIYVLQLM.js +0 -27
  116. package/dist/esm/chunk-XS44IBUJ.js +0 -14
  117. package/dist/esm/chunk-YYOST4AX.js +0 -67
  118. package/dist/esm/extend/api-json-action-wrap.d.ts +0 -16
  119. package/dist/esm/extend/api-json-action-wrap.js +0 -11
  120. package/dist/esm/extend/api-json-base.js +0 -10
  121. package/dist/esm/extend/api-json-wrap.d.ts +0 -55
  122. package/dist/esm/extend/api-json-wrap.js +0 -15
  123. package/dist/esm/interface/inst/interface-abstract.d.ts +0 -18
  124. package/dist/esm/interface/inst/interface-abstract.js +0 -7
  125. package/dist/esm/interface/inst/interface.d.ts +0 -18
  126. package/dist/esm/interface/inst/interface.js +0 -8
  127. package/dist/esm/interface/type/interface-type-abstract.d.ts +0 -21
  128. package/dist/esm/interface/type/interface-type-abstract.js +0 -6
  129. package/dist/esm/interface/type/interface-type.d.ts +0 -22
  130. package/dist/esm/interface/type/interface-type.js +0 -7
  131. package/dist/esm/plugin/json.js +0 -8
  132. package/dist/esm/test/test-abstract.js +0 -6
  133. package/dist/esm/test/test.d.ts +0 -19
  134. package/dist/esm/test/test.js +0 -7
  135. /package/dist/cjs/{interface/action → action}/action.d.cts +0 -0
  136. /package/dist/esm/{interface/action → action}/action.d.ts +0 -0
@@ -33,76 +33,112 @@ __export(gen_test_exports, {
33
33
  main: () => main
34
34
  });
35
35
  module.exports = __toCommonJS(gen_test_exports);
36
+ var import_node_crypto = require("crypto");
36
37
  var import_node_fs = __toESM(require("fs"), 1);
37
38
  var import_node_path = __toESM(require("path"), 1);
39
+ var import_lodash = __toESM(require("lodash"), 1);
38
40
  var import_typescript = __toESM(require("typescript"), 1);
39
41
  var import_ts_log = require("@lsby/ts-log");
40
- async function main(tsconfigPath, interfaceFolderPath, outFilePath, filter) {
41
- var log = new import_ts_log.Log("@lsby:net-core").extend("gen-test");
42
- await log.debug("\u51C6\u5907\u751F\u6210\u6D4B\u8BD5\u6587\u4EF6...");
43
- const projectRootPath = import_node_path.default.dirname(tsconfigPath);
44
- const tsconfigJson = import_typescript.default.parseConfigFileTextToJson(tsconfigPath, import_node_fs.default.readFileSync(tsconfigPath, "utf8"));
45
- if (tsconfigJson.error) {
42
+ function \u63D0\u53D6\u9876\u7EA7\u5BFC\u51FA\u7C7B\u8282\u70B9(\u6E90\u6587\u4EF6) {
43
+ const \u7C7B\u8282\u70B9\u6570\u7EC4 = [];
44
+ const visit = (\u8282\u70B9) => {
45
+ if (import_typescript.default.isClassDeclaration(\u8282\u70B9) && import_typescript.default.getModifiers(\u8282\u70B9)?.some((modifier) => modifier.kind === import_typescript.default.SyntaxKind.ExportKeyword)) {
46
+ \u7C7B\u8282\u70B9\u6570\u7EC4.push(\u8282\u70B9);
47
+ }
48
+ import_typescript.default.forEachChild(\u8282\u70B9, visit);
49
+ };
50
+ import_typescript.default.forEachChild(\u6E90\u6587\u4EF6, visit);
51
+ return \u7C7B\u8282\u70B9\u6570\u7EC4;
52
+ }
53
+ function \u66FF\u6362\u975E\u6CD5\u5B57\u7B26(\u5B57\u7B26\u4E32) {
54
+ return "_" + \u5B57\u7B26\u4E32.replace(/[ !\-!@#$%^&*()\[\]{}\\|;:'",.\/?]/g, "_");
55
+ }
56
+ function \u8BA1\u7B97\u5B8C\u6574\u540D\u79F0(tsconfig\u8DEF\u5F84, a) {
57
+ return \u66FF\u6362\u975E\u6CD5\u5B57\u7B26(import_node_path.default.relative(import_node_path.default.dirname(tsconfig\u8DEF\u5F84), a.\u6587\u4EF6.fileName) + "_" + a.\u7C7B\u8282\u70B9.name?.text);
58
+ }
59
+ function \u8BA1\u7B97\u5F15\u5165\u8DEF\u5F84(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, a) {
60
+ return import_node_path.default.relative(import_node_path.default.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84), a["\u6587\u4EF6"].fileName).replaceAll("\\", "/").replaceAll(".ts", "");
61
+ }
62
+ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, \u6587\u4EF6\u8FC7\u6EE4\u8868\u8FBE\u5F0F) {
63
+ var \u65E5\u5FD7 = new import_ts_log.Log("@lsby:net-core").extend("gen-test");
64
+ await \u65E5\u5FD7.debug("\u51C6\u5907\u751F\u6210\u63A5\u53E3\u6D4B\u8BD5...");
65
+ const tsconfig\u5185\u5BB9 = import_typescript.default.parseConfigFileTextToJson(tsconfig\u8DEF\u5F84, import_node_fs.default.readFileSync(tsconfig\u8DEF\u5F84, "utf8"));
66
+ if (tsconfig\u5185\u5BB9.error) {
46
67
  throw new Error("\u65E0\u6CD5\u89E3\u6790 tsconfig.json");
47
68
  }
48
- const parsedTsconfig = import_typescript.default.parseJsonConfigFileContent(tsconfigJson.config, import_typescript.default.sys, import_node_path.default.resolve(tsconfigPath, ".."));
49
- await log.debug("\u6210\u529F\u89E3\u6790 tsconfig \u6587\u4EF6...");
50
- const projectHost = import_typescript.default.createCompilerHost(parsedTsconfig.options);
51
- const project = import_typescript.default.createProgram(parsedTsconfig.fileNames, parsedTsconfig.options, projectHost);
52
- await log.debug("\u6210\u529F\u8BFB\u53D6\u9879\u76EE...");
53
- const _check = project.getTypeChecker();
54
- const allSourceFiles = project.getSourceFiles();
55
- const typeSourceFiles = allSourceFiles.filter((sourceFile) => {
56
- return new RegExp(`${interfaceFolderPath.replaceAll("\\", "\\\\")}.*type.ts`).test(
57
- import_node_path.default.resolve(sourceFile.fileName)
58
- );
69
+ const \u89E3\u6790\u540E\u7684tsconfig = import_typescript.default.parseJsonConfigFileContent(tsconfig\u5185\u5BB9.config, import_typescript.default.sys, import_node_path.default.resolve(tsconfig\u8DEF\u5F84, ".."));
70
+ await \u65E5\u5FD7.debug("\u6210\u529F\u89E3\u6790 tsconfig \u6587\u4EF6...");
71
+ const \u9879\u76EE\u4E3B\u673A = import_typescript.default.createCompilerHost(\u89E3\u6790\u540E\u7684tsconfig.options);
72
+ const \u9879\u76EE = import_typescript.default.createProgram(\u89E3\u6790\u540E\u7684tsconfig.fileNames, \u89E3\u6790\u540E\u7684tsconfig.options, \u9879\u76EE\u4E3B\u673A);
73
+ await \u65E5\u5FD7.debug("\u6210\u529F\u8BFB\u53D6\u9879\u76EE...");
74
+ var \u6240\u6709\u6E90\u6587\u4EF6 = \u9879\u76EE.getSourceFiles();
75
+ var \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC = \u6240\u6709\u6E90\u6587\u4EF6.filter((\u6E90\u6587\u4EF62) => {
76
+ var \u6E90\u6587\u4EF6\u8DEF\u5F84 = import_node_path.default.normalize(\u6E90\u6587\u4EF62.fileName);
77
+ return \u6E90\u6587\u4EF6\u8DEF\u5F84.includes(\u76EE\u6807\u8DEF\u5F84) && new RegExp(\u6587\u4EF6\u8FC7\u6EE4\u8868\u8FBE\u5F0F || ".*").test(\u6E90\u6587\u4EF6\u8DEF\u5F84);
59
78
  });
60
- const testSourceFiles = allSourceFiles.filter((sourceFile) => {
61
- return new RegExp(`${interfaceFolderPath.replaceAll("\\", "\\\\")}.*.test.ts`).test(
62
- import_node_path.default.resolve(sourceFile.fileName)
79
+ const \u76F8\u5173\u7C7B\u8282\u70B9\u4EEC = \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.flatMap(
80
+ (a) => \u63D0\u53D6\u9876\u7EA7\u5BFC\u51FA\u7C7B\u8282\u70B9(a).map((x) => ({
81
+ \u6587\u4EF6: a,
82
+ \u7C7B\u8282\u70B9: x
83
+ }))
84
+ );
85
+ var \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC = \u76F8\u5173\u7C7B\u8282\u70B9\u4EEC.map((a) => {
86
+ var \u7C7B\u540D\u5B57 = a.\u7C7B\u8282\u70B9.name?.text;
87
+ var \u4EE3\u7801 = [
88
+ `import { \u63A5\u53E3\u6D4B\u8BD5 } from '@lsby/net-core'`,
89
+ `import {${\u7C7B\u540D\u5B57}} from "./${a.\u6587\u4EF6.fileName.split("/").at(-1)?.replaceAll(".ts", "")}"`,
90
+ `type \u8BA1\u7B97\u7ED3\u679C = ${\u7C7B\u540D\u5B57} extends \u63A5\u53E3\u6D4B\u8BD5 ? true : false`
91
+ ];
92
+ return import_typescript.default.createSourceFile(
93
+ a.\u6587\u4EF6.fileName.replaceAll(".ts", "-" + (0, import_node_crypto.randomUUID)() + ".ts"),
94
+ \u4EE3\u7801.join("\n"),
95
+ import_typescript.default.ScriptTarget.Latest
63
96
  );
64
97
  });
65
- const testSourceFilesFilter = testSourceFiles.filter((sourceFile) => {
66
- return new RegExp(filter).test(import_node_path.default.resolve(sourceFile.fileName));
98
+ const \u65B0\u9879\u76EE = import_typescript.default.createProgram({
99
+ rootNames: [...\u9879\u76EE.getSourceFiles().map((a) => a.fileName), ...\u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.map((a) => a.fileName)],
100
+ options: \u89E3\u6790\u540E\u7684tsconfig.options,
101
+ host: {
102
+ ...\u9879\u76EE\u4E3B\u673A,
103
+ getSourceFile: (filename) => {
104
+ const \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 = \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.find((a) => a.fileName == filename);
105
+ if (\u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 != null)
106
+ return \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6;
107
+ return \u9879\u76EE.getSourceFile(filename);
108
+ }
109
+ },
110
+ oldProgram: \u9879\u76EE
67
111
  });
68
- await log.debug(
69
- "\u627E\u5230 %o \u4E2A\u63A5\u53E3\uFF0C\u5176\u4E2D\u6709 %o \u4E2A\u6D4B\u8BD5\uFF0C\u7B5B\u9009\u540E\u8FD8\u5269 %o \u4E2A...",
70
- typeSourceFiles.length,
71
- testSourceFiles.length,
72
- testSourceFilesFilter.length
73
- );
74
- const importCode = [];
75
- const testCode = [];
76
- for (var index = 0; index < testSourceFilesFilter.length; index++) {
77
- var testSourceFile = testSourceFilesFilter[index];
78
- if (testSourceFile == null)
79
- throw new Error("\u975E\u9884\u671F\u7684\u6570\u7EC4\u8D8A\u754C");
80
- const filenameRelativeToApiFolder = import_node_path.default.relative(interfaceFolderPath, testSourceFile.fileName).replaceAll("\\", "/");
81
- const importName = filenameRelativeToApiFolder.replaceAll("/", "_").replaceAll(".test.ts", "").replaceAll("./", "").replaceAll("-", "_");
82
- const filenameRelativeToProjectRoot = import_node_path.default.relative(projectRootPath, testSourceFile.fileName).replaceAll("\\", "/").replaceAll(".ts", "");
83
- const outputFolderRelativeToProjectRoot = import_node_path.default.relative(import_node_path.default.dirname(outFilePath), projectRootPath).replaceAll("\\", "/");
84
- const importPath = import_node_path.default.join(outputFolderRelativeToProjectRoot, filenameRelativeToProjectRoot).replaceAll("\\", "/");
85
- await log.info(`\u5904\u7406\uFF08${index + 1} / ${testSourceFilesFilter.length}\uFF09\uFF1A${filenameRelativeToApiFolder}`);
86
- importCode.push(`import ${importName} from '${importPath}'`);
87
- testCode.push(generateTestCode(importName, importName));
112
+ var \u7C7B\u578B\u68C0\u67E5\u5668 = \u65B0\u9879\u76EE.getTypeChecker();
113
+ var \u68C0\u67E5\u7ED3\u679C = [];
114
+ for (var \u6E90\u6587\u4EF6 of \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC) {
115
+ var \u7ED3\u679C = false;
116
+ import_typescript.default.forEachChild(\u6E90\u6587\u4EF6, (node) => {
117
+ if (import_typescript.default.isTypeAliasDeclaration(node) && node.name.text === "\u8BA1\u7B97\u7ED3\u679C") {
118
+ const type = \u7C7B\u578B\u68C0\u67E5\u5668.getTypeAtLocation(node);
119
+ var \u6587\u672C\u7ED3\u679C = \u7C7B\u578B\u68C0\u67E5\u5668.typeToString(type);
120
+ if (\u6587\u672C\u7ED3\u679C == "true")
121
+ \u7ED3\u679C = true;
122
+ }
123
+ });
124
+ \u68C0\u67E5\u7ED3\u679C.push(\u7ED3\u679C);
88
125
  }
89
- const finalTestFile = [
126
+ var \u6700\u7EC8\u7ED3\u679C = import_lodash.default.zip(\u76F8\u5173\u7C7B\u8282\u70B9\u4EEC, \u68C0\u67E5\u7ED3\u679C).filter((a) => a[1] == true).map((a) => a[0]).filter((a) => a != null);
127
+ var \u6700\u7EC8\u4EE3\u7801 = [
90
128
  "import { test } from 'vitest'",
91
129
  "import './unit-test-prefix'",
92
130
  "",
93
- ...importCode,
131
+ ...\u6700\u7EC8\u7ED3\u679C.map(
132
+ (a) => `import {${a.\u7C7B\u8282\u70B9.name?.text} as ${\u8BA1\u7B97\u5B8C\u6574\u540D\u79F0(tsconfig\u8DEF\u5F84, a)}} from '${\u8BA1\u7B97\u5F15\u5165\u8DEF\u5F84(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, a)}'`
133
+ ),
94
134
  "",
95
- ...testCode,
135
+ ...\u6700\u7EC8\u7ED3\u679C.map((a) => \u8BA1\u7B97\u5B8C\u6574\u540D\u79F0(tsconfig\u8DEF\u5F84, a)).map((a) => `test('${a}', async () => await new ${a}().\u8FD0\u884C())`),
96
136
  ""
97
- ].join("\n");
98
- var outDir = import_node_path.default.dirname(outFilePath);
99
- if (!(0, import_node_fs.existsSync)(outDir)) {
100
- (0, import_node_fs.mkdirSync)(outDir, { recursive: true });
101
- }
102
- (0, import_node_fs.writeFileSync)(outFilePath, finalTestFile);
103
- }
104
- function generateTestCode(testCaseName, importName) {
105
- return `test('${testCaseName}', async () => await ${importName}.\u8FD0\u884C())`;
137
+ ];
138
+ var \u8F93\u51FA\u6587\u4EF6\u5939 = import_node_path.default.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84);
139
+ if (!import_node_fs.default.existsSync(\u8F93\u51FA\u6587\u4EF6\u5939))
140
+ import_node_fs.default.mkdirSync(\u8F93\u51FA\u6587\u4EF6\u5939, { recursive: true });
141
+ import_node_fs.default.writeFileSync(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, \u6700\u7EC8\u4EE3\u7801.join("\n"));
106
142
  }
107
143
  // Annotate the CommonJS export names for ESM import in node:
108
144
  0 && (module.exports = {
@@ -1,3 +1,3 @@
1
- declare function main(tsconfigPath: string, interfaceFolderPath: string, outFilePath: string, filter: string): Promise<void>;
1
+ declare function main(tsconfig路径: string, 目标路径: string, 输出文件路径: string, 文件过滤表达式: string): Promise<void>;
2
2
 
3
3
  export { main };
@@ -33,111 +33,112 @@ var import_node_fs = __toESM(require("fs"), 1);
33
33
  var import_node_path = __toESM(require("path"), 1);
34
34
  var import_typescript = __toESM(require("typescript"), 1);
35
35
  var import_ts_log = require("@lsby/ts-log");
36
-
37
- // src/bin/gen-type/calc-code.ts
38
- var calcCode = `
39
- import type { z } from 'zod'
40
- import type { \u5408\u5E76JSON\u63D2\u4EF6\u7ED3\u679C, \u63A5\u53E3\u7C7B\u578B\u62BD\u8C61\u7C7B } from '@lsby/net-core'
41
- import exportedApiSchema from './type'
42
-
43
- type Api =
44
- typeof exportedApiSchema extends \u63A5\u53E3\u7C7B\u578B\u62BD\u8C61\u7C7B<
45
- infer Path,
46
- infer Method,
47
- infer PreApis,
48
- infer SuccessSchema,
49
- infer ErrorSchema
50
- >
51
- ? {
52
- path: Path
53
- method: Method
54
- input: \u5408\u5E76JSON\u63D2\u4EF6\u7ED3\u679C<PreApis>
55
- successOutput: z.infer<SuccessSchema>
56
- errorOutput: z.infer<ErrorSchema>
57
- }
58
- : never
59
-
60
- export default Api
61
- `;
62
-
63
- // src/bin/gen-type/index.ts
64
- async function main(tsconfigPath, apiFolderPath, outputPath) {
65
- var log = new import_ts_log.Log("@lsby:net-core").extend("gen-type");
66
- await log.debug("\u51C6\u5907\u751F\u6210\u7C7B\u578B\u6587\u4EF6...");
67
- const tsconfigJson = import_typescript.default.parseConfigFileTextToJson(tsconfigPath, import_node_fs.default.readFileSync(tsconfigPath, "utf8"));
68
- if (tsconfigJson.error) {
36
+ function \u63D0\u53D6\u53D8\u91CF\u8282\u70B9(\u6E90\u6587\u4EF6) {
37
+ const \u53D8\u91CF\u8282\u70B9\u6570\u7EC4 = [];
38
+ const \u8BBF\u95EE\u8282\u70B9 = (\u8282\u70B9) => {
39
+ if (import_typescript.default.isVariableStatement(\u8282\u70B9)) {
40
+ \u8282\u70B9.declarationList.declarations.forEach((\u53D8\u91CF\u58F0\u660E) => {
41
+ if (import_typescript.default.isVariableDeclaration(\u53D8\u91CF\u58F0\u660E)) {
42
+ \u53D8\u91CF\u8282\u70B9\u6570\u7EC4.push(\u53D8\u91CF\u58F0\u660E);
43
+ }
44
+ });
45
+ }
46
+ import_typescript.default.forEachChild(\u8282\u70B9, \u8BBF\u95EE\u8282\u70B9);
47
+ };
48
+ import_typescript.default.forEachChild(\u6E90\u6587\u4EF6, \u8BBF\u95EE\u8282\u70B9);
49
+ return \u53D8\u91CF\u8282\u70B9\u6570\u7EC4;
50
+ }
51
+ function \u66FF\u6362\u975E\u6CD5\u5B57\u7B26(\u5B57\u7B26\u4E32) {
52
+ return "_" + \u5B57\u7B26\u4E32.replace(/[ !\-!@#$%^&*()\[\]{}\\|;:'",.\/?]/g, "_");
53
+ }
54
+ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84) {
55
+ var \u65E5\u5FD7 = new import_ts_log.Log("@lsby:net-core").extend("gen-type");
56
+ await \u65E5\u5FD7.debug("\u51C6\u5907\u751F\u6210\u63A5\u53E3\u7C7B\u578B...");
57
+ const tsconfig\u5185\u5BB9 = import_typescript.default.parseConfigFileTextToJson(tsconfig\u8DEF\u5F84, import_node_fs.default.readFileSync(tsconfig\u8DEF\u5F84, "utf8"));
58
+ if (tsconfig\u5185\u5BB9.error) {
69
59
  throw new Error("\u65E0\u6CD5\u89E3\u6790 tsconfig.json");
70
60
  }
71
- const parsedTsconfig = import_typescript.default.parseJsonConfigFileContent(tsconfigJson.config, import_typescript.default.sys, import_node_path.default.resolve(tsconfigPath, ".."));
72
- await log.debug("\u6210\u529F\u89E3\u6790 tsconfig \u6587\u4EF6...");
73
- const projectHost = import_typescript.default.createCompilerHost(parsedTsconfig.options);
74
- const project = import_typescript.default.createProgram(parsedTsconfig.fileNames, parsedTsconfig.options, projectHost);
75
- await log.debug("\u6210\u529F\u8BFB\u53D6\u9879\u76EE...");
76
- const allSourceFiles = project.getSourceFiles();
77
- const apiSourceFiles = allSourceFiles.filter((sourceFile) => {
78
- return new RegExp(`${apiFolderPath.replaceAll("\\", "\\\\")}.*type.ts`).test(import_node_path.default.resolve(sourceFile.fileName));
61
+ const \u89E3\u6790\u540E\u7684tsconfig = import_typescript.default.parseJsonConfigFileContent(tsconfig\u5185\u5BB9.config, import_typescript.default.sys, import_node_path.default.resolve(tsconfig\u8DEF\u5F84, ".."));
62
+ await \u65E5\u5FD7.debug("\u6210\u529F\u89E3\u6790 tsconfig \u6587\u4EF6...");
63
+ const \u9879\u76EE\u4E3B\u673A = import_typescript.default.createCompilerHost(\u89E3\u6790\u540E\u7684tsconfig.options);
64
+ const \u9879\u76EE = import_typescript.default.createProgram(\u89E3\u6790\u540E\u7684tsconfig.fileNames, \u89E3\u6790\u540E\u7684tsconfig.options, \u9879\u76EE\u4E3B\u673A);
65
+ await \u65E5\u5FD7.debug("\u6210\u529F\u8BFB\u53D6\u9879\u76EE...");
66
+ var \u6240\u6709\u6E90\u6587\u4EF6 = \u9879\u76EE.getSourceFiles();
67
+ var \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC = \u6240\u6709\u6E90\u6587\u4EF6.filter((\u6E90\u6587\u4EF62) => {
68
+ var \u6E90\u6587\u4EF6\u8DEF\u5F84 = import_node_path.default.normalize(\u6E90\u6587\u4EF62.fileName);
69
+ return \u6E90\u6587\u4EF6\u8DEF\u5F84.includes(\u76EE\u6807\u8DEF\u5F84);
79
70
  });
80
- await log.debug("\u627E\u5230 %o \u4E2A\u63A5\u53E3...", apiSourceFiles.length);
81
- const apiTypeCalcFileNames = apiSourceFiles.map(
82
- (sourceFile) => sourceFile.fileName.replace("type.ts", `type-calculate-${(0, import_node_crypto.randomUUID)()}.ts`)
71
+ const \u76F8\u5173\u53D8\u91CF\u8282\u70B9\u4EEC = \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.flatMap(
72
+ (a) => \u63D0\u53D6\u53D8\u91CF\u8282\u70B9(a).map((x) => ({
73
+ \u6587\u4EF6: a,
74
+ \u53D8\u91CF\u8282\u70B9: x,
75
+ \u8BA1\u7B97\u8282\u70B9\u540D\u79F0: \u66FF\u6362\u975E\u6CD5\u5B57\u7B26((0, import_node_crypto.randomUUID)())
76
+ }))
83
77
  );
84
- const apiTypeCalcFiles = apiTypeCalcFileNames.map((filename) => {
78
+ var \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC = \u76F8\u5173\u53D8\u91CF\u8282\u70B9\u4EEC.map((a) => {
79
+ var \u4EE3\u7801 = [];
80
+ if (a.\u53D8\u91CF\u8282\u70B9.name.kind != import_typescript.default.SyntaxKind.Identifier) {
81
+ \u4EE3\u7801 = [];
82
+ } else {
83
+ var \u53D8\u91CF\u540D\u79F0 = a.\u53D8\u91CF\u8282\u70B9.name.text;
84
+ var netcore\u5F15\u5165 = a.\u8BA1\u7B97\u8282\u70B9\u540D\u79F0 + "netcore";
85
+ var zod\u5F15\u5165 = a.\u8BA1\u7B97\u8282\u70B9\u540D\u79F0 + "zod";
86
+ \u4EE3\u7801 = [
87
+ a.\u6587\u4EF6.getFullText(),
88
+ `import * as ${netcore\u5F15\u5165} from '@lsby/net-core'`,
89
+ `import { z as ${zod\u5F15\u5165} } from 'zod'`,
90
+ `
91
+ type ${a.\u8BA1\u7B97\u8282\u70B9\u540D\u79F0} = typeof ${\u53D8\u91CF\u540D\u79F0} extends ${netcore\u5F15\u5165}.\u63A5\u53E3\u7C7B\u578B<infer Path, infer Method, infer PreApis, infer SuccessSchema, infer ErrorSchema>
92
+ ? {
93
+ path: Path
94
+ method: Method
95
+ input: ${netcore\u5F15\u5165}.\u5408\u5E76JSON\u63D2\u4EF6\u7ED3\u679C<PreApis>
96
+ successOutput: ${zod\u5F15\u5165}.infer<SuccessSchema>
97
+ errorOutput: ${zod\u5F15\u5165}.infer<ErrorSchema>
98
+ }
99
+ : never
100
+ `
101
+ ];
102
+ }
85
103
  return {
86
- name: filename,
87
- sourceFile: import_typescript.default.createSourceFile(filename, calcCode, import_typescript.default.ScriptTarget.Latest)
104
+ ...a,
105
+ \u6587\u4EF6: import_typescript.default.createSourceFile(
106
+ a.\u6587\u4EF6.fileName.replaceAll(".ts", "-" + (0, import_node_crypto.randomUUID)() + ".ts"),
107
+ \u4EE3\u7801.join("\n"),
108
+ import_typescript.default.ScriptTarget.Latest
109
+ )
88
110
  };
89
111
  });
90
- await log.debug("\u6210\u529F\u751F\u6210\u865A\u62DF\u8BA1\u7B97\u6587\u4EF6...");
91
- const newProject = import_typescript.default.createProgram({
92
- rootNames: [...parsedTsconfig.fileNames, ...apiTypeCalcFileNames],
93
- options: parsedTsconfig.options,
112
+ const \u65B0\u9879\u76EE = import_typescript.default.createProgram({
113
+ rootNames: [...\u9879\u76EE.getSourceFiles().map((a) => a.fileName), ...\u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.map((a) => a.\u6587\u4EF6.fileName)],
114
+ options: \u89E3\u6790\u540E\u7684tsconfig.options,
94
115
  host: {
95
- ...projectHost,
116
+ ...\u9879\u76EE\u4E3B\u673A,
96
117
  getSourceFile: (filename) => {
97
- const apiTypeCalcSourceFile = apiTypeCalcFiles.find(
98
- (apiTypeCalcSourceFile2) => apiTypeCalcSourceFile2.name === filename
99
- );
100
- if (apiTypeCalcSourceFile !== void 0) {
101
- return apiTypeCalcSourceFile.sourceFile;
102
- }
103
- return project.getSourceFile(filename);
118
+ const \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 = \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.find((a) => a.\u6587\u4EF6.fileName == filename)?.\u6587\u4EF6;
119
+ if (\u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 != null)
120
+ return \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6;
121
+ return \u9879\u76EE.getSourceFile(filename);
104
122
  }
105
123
  },
106
- oldProgram: project
124
+ oldProgram: \u9879\u76EE
107
125
  });
108
- await log.debug("\u6210\u529F\u751F\u6210\u865A\u62DF\u9879\u76EE...");
109
- const check = newProject.getTypeChecker();
110
- await log.debug("\u6210\u529F\u751F\u6210\u865A\u62DF\u9879\u76EE\u7C7B\u578B\u68C0\u67E5\u5668...");
111
- const result = [];
112
- for (var index = 0; index < apiSourceFiles.length; index++) {
113
- var apiSourceFile = apiSourceFiles[index];
114
- if (apiSourceFile == null)
115
- throw new Error("\u975E\u9884\u671F\u7684\u6570\u7EC4\u8D8A\u754C");
116
- await log.info(`\u5904\u7406\uFF08${index + 1} / ${apiSourceFiles.length}\uFF09\uFF1A${apiSourceFile.fileName}`);
117
- const apiCalcSourceFile = apiTypeCalcFiles[index]?.sourceFile;
118
- if (apiCalcSourceFile === void 0) {
119
- throw new Error("\u975E\u9884\u671F\u7684\u6570\u7EC4\u8D8A\u754C");
120
- }
121
- for (const node of apiCalcSourceFile.statements) {
122
- if (import_typescript.default.isExportAssignment(node) && node.isExportEquals === void 0) {
123
- const apiType = check.getTypeAtLocation(node.expression);
124
- const typeString = check.typeToString(
125
- apiType,
126
- void 0,
127
- import_typescript.default.TypeFormatFlags.NoTruncation | import_typescript.default.TypeFormatFlags.AllowUniqueESSymbolType | import_typescript.default.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope
128
- );
129
- result.push(typeString);
126
+ var \u7C7B\u578B\u68C0\u67E5\u5668 = \u65B0\u9879\u76EE.getTypeChecker();
127
+ var \u68C0\u67E5\u7ED3\u679C = [];
128
+ for (var \u6E90\u6587\u4EF6 of \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC) {
129
+ var \u7ED3\u679C = "";
130
+ import_typescript.default.forEachChild(\u6E90\u6587\u4EF6.\u6587\u4EF6, (node) => {
131
+ if (import_typescript.default.isTypeAliasDeclaration(node) && node.name.text === \u6E90\u6587\u4EF6.\u8BA1\u7B97\u8282\u70B9\u540D\u79F0) {
132
+ const type = \u7C7B\u578B\u68C0\u67E5\u5668.getTypeAtLocation(node);
133
+ var \u6587\u672C\u7ED3\u679C = \u7C7B\u578B\u68C0\u67E5\u5668.typeToString(type);
134
+ \u7ED3\u679C = \u6587\u672C\u7ED3\u679C;
130
135
  }
131
- }
132
- }
133
- await log.debug("\u6210\u529F\u5904\u7406\u6240\u6709\u63A5\u53E3...");
134
- const outputPathAbs = import_node_path.default.resolve(outputPath);
135
- var outDir = import_node_path.default.dirname(outputPathAbs);
136
- if (!(0, import_node_fs.existsSync)(outDir)) {
137
- (0, import_node_fs.mkdirSync)(outDir, { recursive: true });
136
+ });
137
+ \u68C0\u67E5\u7ED3\u679C.push(\u7ED3\u679C);
138
138
  }
139
- var code = [
140
- `export type InterfaceType = [${result.join(",")}]`,
139
+ var \u6700\u7EC8\u7ED3\u679C = Array.from(new Set(\u68C0\u67E5\u7ED3\u679C.filter((a) => a != "any")));
140
+ var \u6700\u7EC8\u4EE3\u7801 = [
141
+ `export type InterfaceType = [${\u6700\u7EC8\u7ED3\u679C.join(",")}]`,
141
142
  "",
142
143
  `type \u5143\u7EC4\u8F6C\u8054\u5408<T> = T extends any[] ? T[number] : never`,
143
144
  "",
@@ -231,8 +232,10 @@ async function main(tsconfigPath, apiFolderPath, outputPath) {
231
232
  `) => Promise<\u4ECE\u8DEF\u5F84\u83B7\u5F97\u6B63\u786E\u8FD4\u56DE<\u8DEF\u5F84> | \u4ECE\u8DEF\u5F84\u83B7\u5F97\u9519\u8BEF\u8FD4\u56DE<\u8DEF\u5F84>>`,
232
233
  ""
233
234
  ];
234
- import_node_fs.default.writeFileSync(outputPathAbs, code.join("\n"));
235
- await log.debug("\u751F\u6210\u6210\u529F\uFF1A%o", outputPathAbs);
235
+ var \u8F93\u51FA\u6587\u4EF6\u5939 = import_node_path.default.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84);
236
+ if (!import_node_fs.default.existsSync(\u8F93\u51FA\u6587\u4EF6\u5939))
237
+ import_node_fs.default.mkdirSync(\u8F93\u51FA\u6587\u4EF6\u5939, { recursive: true });
238
+ import_node_fs.default.writeFileSync(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, \u6700\u7EC8\u4EE3\u7801.join("\n"));
236
239
  }
237
240
 
238
241
  // src/bin/gen-type/bin.ts
@@ -38,111 +38,112 @@ var import_node_fs = __toESM(require("fs"), 1);
38
38
  var import_node_path = __toESM(require("path"), 1);
39
39
  var import_typescript = __toESM(require("typescript"), 1);
40
40
  var import_ts_log = require("@lsby/ts-log");
41
-
42
- // src/bin/gen-type/calc-code.ts
43
- var calcCode = `
44
- import type { z } from 'zod'
45
- import type { \u5408\u5E76JSON\u63D2\u4EF6\u7ED3\u679C, \u63A5\u53E3\u7C7B\u578B\u62BD\u8C61\u7C7B } from '@lsby/net-core'
46
- import exportedApiSchema from './type'
47
-
48
- type Api =
49
- typeof exportedApiSchema extends \u63A5\u53E3\u7C7B\u578B\u62BD\u8C61\u7C7B<
50
- infer Path,
51
- infer Method,
52
- infer PreApis,
53
- infer SuccessSchema,
54
- infer ErrorSchema
55
- >
56
- ? {
57
- path: Path
58
- method: Method
59
- input: \u5408\u5E76JSON\u63D2\u4EF6\u7ED3\u679C<PreApis>
60
- successOutput: z.infer<SuccessSchema>
61
- errorOutput: z.infer<ErrorSchema>
62
- }
63
- : never
64
-
65
- export default Api
66
- `;
67
-
68
- // src/bin/gen-type/index.ts
69
- async function main(tsconfigPath, apiFolderPath, outputPath) {
70
- var log = new import_ts_log.Log("@lsby:net-core").extend("gen-type");
71
- await log.debug("\u51C6\u5907\u751F\u6210\u7C7B\u578B\u6587\u4EF6...");
72
- const tsconfigJson = import_typescript.default.parseConfigFileTextToJson(tsconfigPath, import_node_fs.default.readFileSync(tsconfigPath, "utf8"));
73
- if (tsconfigJson.error) {
41
+ function \u63D0\u53D6\u53D8\u91CF\u8282\u70B9(\u6E90\u6587\u4EF6) {
42
+ const \u53D8\u91CF\u8282\u70B9\u6570\u7EC4 = [];
43
+ const \u8BBF\u95EE\u8282\u70B9 = (\u8282\u70B9) => {
44
+ if (import_typescript.default.isVariableStatement(\u8282\u70B9)) {
45
+ \u8282\u70B9.declarationList.declarations.forEach((\u53D8\u91CF\u58F0\u660E) => {
46
+ if (import_typescript.default.isVariableDeclaration(\u53D8\u91CF\u58F0\u660E)) {
47
+ \u53D8\u91CF\u8282\u70B9\u6570\u7EC4.push(\u53D8\u91CF\u58F0\u660E);
48
+ }
49
+ });
50
+ }
51
+ import_typescript.default.forEachChild(\u8282\u70B9, \u8BBF\u95EE\u8282\u70B9);
52
+ };
53
+ import_typescript.default.forEachChild(\u6E90\u6587\u4EF6, \u8BBF\u95EE\u8282\u70B9);
54
+ return \u53D8\u91CF\u8282\u70B9\u6570\u7EC4;
55
+ }
56
+ function \u66FF\u6362\u975E\u6CD5\u5B57\u7B26(\u5B57\u7B26\u4E32) {
57
+ return "_" + \u5B57\u7B26\u4E32.replace(/[ !\-!@#$%^&*()\[\]{}\\|;:'",.\/?]/g, "_");
58
+ }
59
+ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84) {
60
+ var \u65E5\u5FD7 = new import_ts_log.Log("@lsby:net-core").extend("gen-type");
61
+ await \u65E5\u5FD7.debug("\u51C6\u5907\u751F\u6210\u63A5\u53E3\u7C7B\u578B...");
62
+ const tsconfig\u5185\u5BB9 = import_typescript.default.parseConfigFileTextToJson(tsconfig\u8DEF\u5F84, import_node_fs.default.readFileSync(tsconfig\u8DEF\u5F84, "utf8"));
63
+ if (tsconfig\u5185\u5BB9.error) {
74
64
  throw new Error("\u65E0\u6CD5\u89E3\u6790 tsconfig.json");
75
65
  }
76
- const parsedTsconfig = import_typescript.default.parseJsonConfigFileContent(tsconfigJson.config, import_typescript.default.sys, import_node_path.default.resolve(tsconfigPath, ".."));
77
- await log.debug("\u6210\u529F\u89E3\u6790 tsconfig \u6587\u4EF6...");
78
- const projectHost = import_typescript.default.createCompilerHost(parsedTsconfig.options);
79
- const project = import_typescript.default.createProgram(parsedTsconfig.fileNames, parsedTsconfig.options, projectHost);
80
- await log.debug("\u6210\u529F\u8BFB\u53D6\u9879\u76EE...");
81
- const allSourceFiles = project.getSourceFiles();
82
- const apiSourceFiles = allSourceFiles.filter((sourceFile) => {
83
- return new RegExp(`${apiFolderPath.replaceAll("\\", "\\\\")}.*type.ts`).test(import_node_path.default.resolve(sourceFile.fileName));
66
+ const \u89E3\u6790\u540E\u7684tsconfig = import_typescript.default.parseJsonConfigFileContent(tsconfig\u5185\u5BB9.config, import_typescript.default.sys, import_node_path.default.resolve(tsconfig\u8DEF\u5F84, ".."));
67
+ await \u65E5\u5FD7.debug("\u6210\u529F\u89E3\u6790 tsconfig \u6587\u4EF6...");
68
+ const \u9879\u76EE\u4E3B\u673A = import_typescript.default.createCompilerHost(\u89E3\u6790\u540E\u7684tsconfig.options);
69
+ const \u9879\u76EE = import_typescript.default.createProgram(\u89E3\u6790\u540E\u7684tsconfig.fileNames, \u89E3\u6790\u540E\u7684tsconfig.options, \u9879\u76EE\u4E3B\u673A);
70
+ await \u65E5\u5FD7.debug("\u6210\u529F\u8BFB\u53D6\u9879\u76EE...");
71
+ var \u6240\u6709\u6E90\u6587\u4EF6 = \u9879\u76EE.getSourceFiles();
72
+ var \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC = \u6240\u6709\u6E90\u6587\u4EF6.filter((\u6E90\u6587\u4EF62) => {
73
+ var \u6E90\u6587\u4EF6\u8DEF\u5F84 = import_node_path.default.normalize(\u6E90\u6587\u4EF62.fileName);
74
+ return \u6E90\u6587\u4EF6\u8DEF\u5F84.includes(\u76EE\u6807\u8DEF\u5F84);
84
75
  });
85
- await log.debug("\u627E\u5230 %o \u4E2A\u63A5\u53E3...", apiSourceFiles.length);
86
- const apiTypeCalcFileNames = apiSourceFiles.map(
87
- (sourceFile) => sourceFile.fileName.replace("type.ts", `type-calculate-${(0, import_node_crypto.randomUUID)()}.ts`)
76
+ const \u76F8\u5173\u53D8\u91CF\u8282\u70B9\u4EEC = \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.flatMap(
77
+ (a) => \u63D0\u53D6\u53D8\u91CF\u8282\u70B9(a).map((x) => ({
78
+ \u6587\u4EF6: a,
79
+ \u53D8\u91CF\u8282\u70B9: x,
80
+ \u8BA1\u7B97\u8282\u70B9\u540D\u79F0: \u66FF\u6362\u975E\u6CD5\u5B57\u7B26((0, import_node_crypto.randomUUID)())
81
+ }))
88
82
  );
89
- const apiTypeCalcFiles = apiTypeCalcFileNames.map((filename) => {
83
+ var \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC = \u76F8\u5173\u53D8\u91CF\u8282\u70B9\u4EEC.map((a) => {
84
+ var \u4EE3\u7801 = [];
85
+ if (a.\u53D8\u91CF\u8282\u70B9.name.kind != import_typescript.default.SyntaxKind.Identifier) {
86
+ \u4EE3\u7801 = [];
87
+ } else {
88
+ var \u53D8\u91CF\u540D\u79F0 = a.\u53D8\u91CF\u8282\u70B9.name.text;
89
+ var netcore\u5F15\u5165 = a.\u8BA1\u7B97\u8282\u70B9\u540D\u79F0 + "netcore";
90
+ var zod\u5F15\u5165 = a.\u8BA1\u7B97\u8282\u70B9\u540D\u79F0 + "zod";
91
+ \u4EE3\u7801 = [
92
+ a.\u6587\u4EF6.getFullText(),
93
+ `import * as ${netcore\u5F15\u5165} from '@lsby/net-core'`,
94
+ `import { z as ${zod\u5F15\u5165} } from 'zod'`,
95
+ `
96
+ type ${a.\u8BA1\u7B97\u8282\u70B9\u540D\u79F0} = typeof ${\u53D8\u91CF\u540D\u79F0} extends ${netcore\u5F15\u5165}.\u63A5\u53E3\u7C7B\u578B<infer Path, infer Method, infer PreApis, infer SuccessSchema, infer ErrorSchema>
97
+ ? {
98
+ path: Path
99
+ method: Method
100
+ input: ${netcore\u5F15\u5165}.\u5408\u5E76JSON\u63D2\u4EF6\u7ED3\u679C<PreApis>
101
+ successOutput: ${zod\u5F15\u5165}.infer<SuccessSchema>
102
+ errorOutput: ${zod\u5F15\u5165}.infer<ErrorSchema>
103
+ }
104
+ : never
105
+ `
106
+ ];
107
+ }
90
108
  return {
91
- name: filename,
92
- sourceFile: import_typescript.default.createSourceFile(filename, calcCode, import_typescript.default.ScriptTarget.Latest)
109
+ ...a,
110
+ \u6587\u4EF6: import_typescript.default.createSourceFile(
111
+ a.\u6587\u4EF6.fileName.replaceAll(".ts", "-" + (0, import_node_crypto.randomUUID)() + ".ts"),
112
+ \u4EE3\u7801.join("\n"),
113
+ import_typescript.default.ScriptTarget.Latest
114
+ )
93
115
  };
94
116
  });
95
- await log.debug("\u6210\u529F\u751F\u6210\u865A\u62DF\u8BA1\u7B97\u6587\u4EF6...");
96
- const newProject = import_typescript.default.createProgram({
97
- rootNames: [...parsedTsconfig.fileNames, ...apiTypeCalcFileNames],
98
- options: parsedTsconfig.options,
117
+ const \u65B0\u9879\u76EE = import_typescript.default.createProgram({
118
+ rootNames: [...\u9879\u76EE.getSourceFiles().map((a) => a.fileName), ...\u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.map((a) => a.\u6587\u4EF6.fileName)],
119
+ options: \u89E3\u6790\u540E\u7684tsconfig.options,
99
120
  host: {
100
- ...projectHost,
121
+ ...\u9879\u76EE\u4E3B\u673A,
101
122
  getSourceFile: (filename) => {
102
- const apiTypeCalcSourceFile = apiTypeCalcFiles.find(
103
- (apiTypeCalcSourceFile2) => apiTypeCalcSourceFile2.name === filename
104
- );
105
- if (apiTypeCalcSourceFile !== void 0) {
106
- return apiTypeCalcSourceFile.sourceFile;
107
- }
108
- return project.getSourceFile(filename);
123
+ const \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 = \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.find((a) => a.\u6587\u4EF6.fileName == filename)?.\u6587\u4EF6;
124
+ if (\u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 != null)
125
+ return \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6;
126
+ return \u9879\u76EE.getSourceFile(filename);
109
127
  }
110
128
  },
111
- oldProgram: project
129
+ oldProgram: \u9879\u76EE
112
130
  });
113
- await log.debug("\u6210\u529F\u751F\u6210\u865A\u62DF\u9879\u76EE...");
114
- const check = newProject.getTypeChecker();
115
- await log.debug("\u6210\u529F\u751F\u6210\u865A\u62DF\u9879\u76EE\u7C7B\u578B\u68C0\u67E5\u5668...");
116
- const result = [];
117
- for (var index = 0; index < apiSourceFiles.length; index++) {
118
- var apiSourceFile = apiSourceFiles[index];
119
- if (apiSourceFile == null)
120
- throw new Error("\u975E\u9884\u671F\u7684\u6570\u7EC4\u8D8A\u754C");
121
- await log.info(`\u5904\u7406\uFF08${index + 1} / ${apiSourceFiles.length}\uFF09\uFF1A${apiSourceFile.fileName}`);
122
- const apiCalcSourceFile = apiTypeCalcFiles[index]?.sourceFile;
123
- if (apiCalcSourceFile === void 0) {
124
- throw new Error("\u975E\u9884\u671F\u7684\u6570\u7EC4\u8D8A\u754C");
125
- }
126
- for (const node of apiCalcSourceFile.statements) {
127
- if (import_typescript.default.isExportAssignment(node) && node.isExportEquals === void 0) {
128
- const apiType = check.getTypeAtLocation(node.expression);
129
- const typeString = check.typeToString(
130
- apiType,
131
- void 0,
132
- import_typescript.default.TypeFormatFlags.NoTruncation | import_typescript.default.TypeFormatFlags.AllowUniqueESSymbolType | import_typescript.default.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope
133
- );
134
- result.push(typeString);
131
+ var \u7C7B\u578B\u68C0\u67E5\u5668 = \u65B0\u9879\u76EE.getTypeChecker();
132
+ var \u68C0\u67E5\u7ED3\u679C = [];
133
+ for (var \u6E90\u6587\u4EF6 of \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC) {
134
+ var \u7ED3\u679C = "";
135
+ import_typescript.default.forEachChild(\u6E90\u6587\u4EF6.\u6587\u4EF6, (node) => {
136
+ if (import_typescript.default.isTypeAliasDeclaration(node) && node.name.text === \u6E90\u6587\u4EF6.\u8BA1\u7B97\u8282\u70B9\u540D\u79F0) {
137
+ const type = \u7C7B\u578B\u68C0\u67E5\u5668.getTypeAtLocation(node);
138
+ var \u6587\u672C\u7ED3\u679C = \u7C7B\u578B\u68C0\u67E5\u5668.typeToString(type);
139
+ \u7ED3\u679C = \u6587\u672C\u7ED3\u679C;
135
140
  }
136
- }
137
- }
138
- await log.debug("\u6210\u529F\u5904\u7406\u6240\u6709\u63A5\u53E3...");
139
- const outputPathAbs = import_node_path.default.resolve(outputPath);
140
- var outDir = import_node_path.default.dirname(outputPathAbs);
141
- if (!(0, import_node_fs.existsSync)(outDir)) {
142
- (0, import_node_fs.mkdirSync)(outDir, { recursive: true });
141
+ });
142
+ \u68C0\u67E5\u7ED3\u679C.push(\u7ED3\u679C);
143
143
  }
144
- var code = [
145
- `export type InterfaceType = [${result.join(",")}]`,
144
+ var \u6700\u7EC8\u7ED3\u679C = Array.from(new Set(\u68C0\u67E5\u7ED3\u679C.filter((a) => a != "any")));
145
+ var \u6700\u7EC8\u4EE3\u7801 = [
146
+ `export type InterfaceType = [${\u6700\u7EC8\u7ED3\u679C.join(",")}]`,
146
147
  "",
147
148
  `type \u5143\u7EC4\u8F6C\u8054\u5408<T> = T extends any[] ? T[number] : never`,
148
149
  "",
@@ -236,8 +237,10 @@ async function main(tsconfigPath, apiFolderPath, outputPath) {
236
237
  `) => Promise<\u4ECE\u8DEF\u5F84\u83B7\u5F97\u6B63\u786E\u8FD4\u56DE<\u8DEF\u5F84> | \u4ECE\u8DEF\u5F84\u83B7\u5F97\u9519\u8BEF\u8FD4\u56DE<\u8DEF\u5F84>>`,
237
238
  ""
238
239
  ];
239
- import_node_fs.default.writeFileSync(outputPathAbs, code.join("\n"));
240
- await log.debug("\u751F\u6210\u6210\u529F\uFF1A%o", outputPathAbs);
240
+ var \u8F93\u51FA\u6587\u4EF6\u5939 = import_node_path.default.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84);
241
+ if (!import_node_fs.default.existsSync(\u8F93\u51FA\u6587\u4EF6\u5939))
242
+ import_node_fs.default.mkdirSync(\u8F93\u51FA\u6587\u4EF6\u5939, { recursive: true });
243
+ import_node_fs.default.writeFileSync(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, \u6700\u7EC8\u4EE3\u7801.join("\n"));
241
244
  }
242
245
  // Annotate the CommonJS export names for ESM import in node:
243
246
  0 && (module.exports = {
@@ -1,3 +1,3 @@
1
- declare function main(tsconfigPath: string, apiFolderPath: string, outputPath: string): Promise<void>;
1
+ declare function main(tsconfig路径: string, 目标路径: string, 输出文件路径: string): Promise<void>;
2
2
 
3
3
  export { main };