@lsby/net-core 0.3.22 → 0.3.24

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 (141) hide show
  1. package/dist/bin/gen-list/bin.cjs +99 -44
  2. package/dist/bin/gen-list/index.cjs +99 -44
  3. package/dist/bin/gen-list/index.d.cts +1 -1
  4. package/dist/bin/gen-test/bin.cjs +98 -50
  5. package/dist/bin/gen-test/index.cjs +98 -50
  6. package/dist/bin/gen-test/index.d.cts +1 -1
  7. package/dist/bin/gen-type/addition.cjs +123 -0
  8. package/dist/bin/gen-type/addition.d.cts +3 -0
  9. package/dist/bin/gen-type/bin.cjs +195 -180
  10. package/dist/bin/gen-type/index.cjs +195 -180
  11. package/dist/bin/gen-type/index.d.cts +1 -1
  12. package/dist/cjs/{interface/action → action}/action.cjs +1 -1
  13. package/dist/cjs/bin/gen-list/bin.cjs +99 -44
  14. package/dist/cjs/bin/gen-list/index.cjs +99 -44
  15. package/dist/cjs/bin/gen-list/index.d.cts +1 -1
  16. package/dist/cjs/bin/gen-test/bin.cjs +98 -50
  17. package/dist/cjs/bin/gen-test/index.cjs +98 -50
  18. package/dist/cjs/bin/gen-test/index.d.cts +1 -1
  19. package/dist/cjs/bin/gen-type/addition.cjs +123 -0
  20. package/dist/cjs/bin/gen-type/addition.d.cts +3 -0
  21. package/dist/cjs/bin/gen-type/bin.cjs +195 -180
  22. package/dist/cjs/bin/gen-type/index.cjs +195 -180
  23. package/dist/cjs/bin/gen-type/index.d.cts +1 -1
  24. package/dist/cjs/index.cjs +70 -127
  25. package/dist/cjs/index.d.cts +12 -15
  26. package/dist/cjs/{extend/api-json-base.cjs → interface/extend/json-base.cjs} +61 -58
  27. package/dist/cjs/interface/extend/json-base.d.cts +14 -0
  28. package/dist/cjs/{extend/api-json-wrap.cjs → interface/extend/json-wrap.cjs} +83 -76
  29. package/dist/cjs/interface/extend/json-wrap.d.cts +26 -0
  30. package/dist/cjs/interface/{inst/interface-abstract.cjs → interface-inst.cjs} +12 -9
  31. package/dist/cjs/interface/interface-inst.d.cts +19 -0
  32. package/dist/cjs/{test/test-abstract.cjs → interface/interface-test.cjs} +7 -7
  33. package/dist/{esm/test/test-abstract.d.ts → cjs/interface/interface-test.d.cts} +2 -2
  34. package/dist/cjs/interface/{type/interface-type.cjs → interface-type.cjs} +2 -9
  35. package/dist/cjs/interface/interface-type.d.cts +28 -0
  36. package/dist/cjs/plugin/{chinese-path.cjs → extend/chinese-path.cjs} +3 -3
  37. package/dist/cjs/plugin/{chinese-path.d.cts → extend/chinese-path.d.cts} +1 -1
  38. package/dist/cjs/plugin/{custom-data.cjs → extend/custom-data.cjs} +3 -3
  39. package/dist/cjs/plugin/{custom-data.d.cts → extend/custom-data.d.cts} +1 -1
  40. package/dist/cjs/plugin/{json.cjs → extend/json.cjs} +4 -4
  41. package/dist/cjs/plugin/{json.d.cts → extend/json.d.cts} +2 -2
  42. package/dist/cjs/plugin/{urlencoded.cjs → extend/urlencoded.cjs} +4 -4
  43. package/dist/cjs/plugin/{urlencoded.d.cts → extend/urlencoded.d.cts} +1 -1
  44. package/dist/cjs/{interface → plugin}/plug.cjs +1 -1
  45. package/dist/cjs/server/server.d.cts +5 -5
  46. package/dist/esm/{interface/action → action}/action.js +1 -1
  47. package/dist/esm/bin/gen-list/bin.js +1 -1
  48. package/dist/esm/bin/gen-list/index.d.ts +1 -1
  49. package/dist/esm/bin/gen-list/index.js +1 -1
  50. package/dist/esm/bin/gen-test/bin.js +1 -1
  51. package/dist/esm/bin/gen-test/index.d.ts +1 -1
  52. package/dist/esm/bin/gen-test/index.js +1 -1
  53. package/dist/esm/bin/gen-type/addition.d.ts +3 -0
  54. package/dist/esm/bin/gen-type/addition.js +6 -0
  55. package/dist/esm/bin/gen-type/bin.js +2 -2
  56. package/dist/esm/bin/gen-type/index.d.ts +1 -1
  57. package/dist/esm/bin/gen-type/index.js +2 -2
  58. package/dist/esm/chunk-23ZZISJE.js +132 -0
  59. package/dist/esm/{chunk-P6PGPAMW.js → chunk-2MN4G2DG.js} +2 -2
  60. package/dist/esm/chunk-5FTVDMDL.js +14 -0
  61. package/dist/esm/chunk-GVXASHTI.js +122 -0
  62. package/dist/esm/chunk-HVJE7YDW.js +124 -0
  63. package/dist/esm/{chunk-XG4VZZOX.js → chunk-KW3M3VXP.js} +2 -2
  64. package/dist/esm/{chunk-KSZE2DTR.js → chunk-N4NY37XI.js} +1 -1
  65. package/dist/esm/{chunk-VJ4ORZR3.js → chunk-P4TLIJX4.js} +5 -5
  66. package/dist/esm/chunk-QX7F45LO.js +37 -0
  67. package/dist/esm/{chunk-CMHISRDG.js → chunk-SF5Z34AP.js} +2 -7
  68. package/dist/esm/{chunk-XRV64MDF.js → chunk-SFNQ5AWH.js} +3 -3
  69. package/dist/esm/chunk-TW4ZMOLY.js +99 -0
  70. package/dist/esm/chunk-URPOOM7V.js +21 -0
  71. package/dist/esm/{chunk-N7G2H6GB.js → chunk-V3S5HDZD.js} +1 -1
  72. package/dist/esm/{chunk-5UUMGDDD.js → chunk-XTHURYQM.js} +3 -3
  73. package/dist/esm/index.d.ts +12 -15
  74. package/dist/esm/index.js +28 -42
  75. package/dist/esm/interface/extend/json-base.d.ts +14 -0
  76. package/dist/esm/interface/extend/json-base.js +10 -0
  77. package/dist/esm/interface/extend/json-wrap.d.ts +26 -0
  78. package/dist/esm/interface/extend/json-wrap.js +13 -0
  79. package/dist/esm/interface/interface-inst.d.ts +19 -0
  80. package/dist/esm/interface/interface-inst.js +7 -0
  81. package/dist/{cjs/test/test-abstract.d.cts → esm/interface/interface-test.d.ts} +2 -2
  82. package/dist/esm/interface/interface-test.js +6 -0
  83. package/dist/esm/interface/interface-type.d.ts +28 -0
  84. package/dist/esm/interface/interface-type.js +6 -0
  85. package/dist/esm/plugin/{chinese-path.d.ts → extend/chinese-path.d.ts} +1 -1
  86. package/dist/esm/plugin/{chinese-path.js → extend/chinese-path.js} +2 -2
  87. package/dist/esm/plugin/{custom-data.d.ts → extend/custom-data.d.ts} +1 -1
  88. package/dist/esm/plugin/{custom-data.js → extend/custom-data.js} +2 -2
  89. package/dist/esm/plugin/{json.d.ts → extend/json.d.ts} +2 -2
  90. package/dist/esm/plugin/extend/json.js +8 -0
  91. package/dist/esm/plugin/{urlencoded.d.ts → extend/urlencoded.d.ts} +1 -1
  92. package/dist/esm/plugin/{urlencoded.js → extend/urlencoded.js} +2 -2
  93. package/dist/esm/{interface → plugin}/plug.js +1 -1
  94. package/dist/esm/server/server.d.ts +5 -5
  95. package/package.json +4 -2
  96. package/dist/bin/gen-type/calc-code.cjs +0 -53
  97. package/dist/bin/gen-type/calc-code.d.cts +0 -3
  98. package/dist/cjs/bin/gen-type/calc-code.cjs +0 -53
  99. package/dist/cjs/bin/gen-type/calc-code.d.cts +0 -3
  100. package/dist/cjs/extend/api-json-base.d.cts +0 -14
  101. package/dist/cjs/extend/api-json-wrap.d.cts +0 -55
  102. package/dist/cjs/interface/inst/interface-abstract.d.cts +0 -18
  103. package/dist/cjs/interface/inst/interface.cjs +0 -167
  104. package/dist/cjs/interface/inst/interface.d.cts +0 -18
  105. package/dist/cjs/interface/type/interface-type-abstract.cjs +0 -31
  106. package/dist/cjs/interface/type/interface-type-abstract.d.cts +0 -21
  107. package/dist/cjs/interface/type/interface-type.d.cts +0 -22
  108. package/dist/cjs/test/test.cjs +0 -60
  109. package/dist/cjs/test/test.d.cts +0 -19
  110. package/dist/esm/bin/gen-type/calc-code.d.ts +0 -3
  111. package/dist/esm/bin/gen-type/calc-code.js +0 -6
  112. package/dist/esm/chunk-34QVQSKM.js +0 -20
  113. package/dist/esm/chunk-4KSHDKSP.js +0 -11
  114. package/dist/esm/chunk-CSZNLNB5.js +0 -76
  115. package/dist/esm/chunk-DMQXYTFQ.js +0 -7
  116. package/dist/esm/chunk-DQX4L6GK.js +0 -187
  117. package/dist/esm/chunk-FLIKJZGI.js +0 -29
  118. package/dist/esm/chunk-LSG6UGUR.js +0 -54
  119. package/dist/esm/chunk-PIYVLQLM.js +0 -27
  120. package/dist/esm/chunk-S7GRYORG.js +0 -21
  121. package/dist/esm/chunk-YYOST4AX.js +0 -67
  122. package/dist/esm/extend/api-json-base.d.ts +0 -14
  123. package/dist/esm/extend/api-json-base.js +0 -10
  124. package/dist/esm/extend/api-json-wrap.d.ts +0 -55
  125. package/dist/esm/extend/api-json-wrap.js +0 -15
  126. package/dist/esm/interface/inst/interface-abstract.d.ts +0 -18
  127. package/dist/esm/interface/inst/interface-abstract.js +0 -7
  128. package/dist/esm/interface/inst/interface.d.ts +0 -18
  129. package/dist/esm/interface/inst/interface.js +0 -8
  130. package/dist/esm/interface/type/interface-type-abstract.d.ts +0 -21
  131. package/dist/esm/interface/type/interface-type-abstract.js +0 -6
  132. package/dist/esm/interface/type/interface-type.d.ts +0 -22
  133. package/dist/esm/interface/type/interface-type.js +0 -7
  134. package/dist/esm/plugin/json.js +0 -8
  135. package/dist/esm/test/test-abstract.js +0 -6
  136. package/dist/esm/test/test.d.ts +0 -19
  137. package/dist/esm/test/test.js +0 -7
  138. /package/dist/cjs/{interface/action → action}/action.d.cts +0 -0
  139. /package/dist/cjs/{interface → plugin}/plug.d.cts +0 -0
  140. /package/dist/esm/{interface/action → action}/action.d.ts +0 -0
  141. /package/dist/esm/{interface → plugin}/plug.d.ts +0 -0
@@ -28,67 +28,122 @@ var import_node_path2 = __toESM(require("path"), 1);
28
28
  var import_commander = require("commander");
29
29
 
30
30
  // src/bin/gen-list/index.ts
31
+ var import_node_crypto = require("crypto");
31
32
  var import_node_fs = __toESM(require("fs"), 1);
32
33
  var import_node_path = __toESM(require("path"), 1);
34
+ var import_lodash = __toESM(require("lodash"), 1);
33
35
  var import_typescript = __toESM(require("typescript"), 1);
34
36
  var import_ts_log = require("@lsby/ts-log");
35
- async function main(tsconfigPath, interfaceFolderPath, outFilePath) {
37
+ function \u63D0\u53D6\u9876\u7EA7\u5BFC\u51FA\u7C7B\u8282\u70B9(\u6E90\u6587\u4EF6) {
38
+ const \u7C7B\u8282\u70B9\u6570\u7EC4 = [];
39
+ const visit = (\u8282\u70B9) => {
40
+ if (import_typescript.default.isClassDeclaration(\u8282\u70B9) && import_typescript.default.getModifiers(\u8282\u70B9)?.some((modifier) => modifier.kind === import_typescript.default.SyntaxKind.ExportKeyword)) {
41
+ \u7C7B\u8282\u70B9\u6570\u7EC4.push(\u8282\u70B9);
42
+ }
43
+ import_typescript.default.forEachChild(\u8282\u70B9, visit);
44
+ };
45
+ import_typescript.default.forEachChild(\u6E90\u6587\u4EF6, visit);
46
+ return \u7C7B\u8282\u70B9\u6570\u7EC4;
47
+ }
48
+ function \u66FF\u6362\u975E\u6CD5\u5B57\u7B26(\u5B57\u7B26\u4E32) {
49
+ return "_" + \u5B57\u7B26\u4E32.replace(/[ !\-!@#$%^&*()\[\]{}\\|;:'",.\/?]/g, "_");
50
+ }
51
+ function \u8BA1\u7B97\u5B8C\u6574\u540D\u79F0(tsconfig\u8DEF\u5F84, a) {
52
+ 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);
53
+ }
54
+ function \u8BA1\u7B97\u5F15\u5165\u8DEF\u5F84(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, a) {
55
+ return import_node_path.default.relative(import_node_path.default.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84), a["\u6587\u4EF6"].fileName).replaceAll("\\", "/").replaceAll(".ts", "");
56
+ }
57
+ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84) {
36
58
  var log = new import_ts_log.Log("@lsby:net-core").extend("gen-list");
37
- await log.debug("\u51C6\u5907\u751F\u6210\u63A5\u53E3\u5217\u8868...");
38
- const \u9879\u76EE\u6839\u8DEF\u5F84 = import_node_path.default.dirname(tsconfigPath);
39
- const tsconfigJson = import_typescript.default.parseConfigFileTextToJson(tsconfigPath, import_node_fs.default.readFileSync(tsconfigPath, "utf8"));
40
- if (tsconfigJson.error) {
59
+ await log.debug("\u5F00\u59CB\u751F\u6210\u63A5\u53E3\u5217\u8868...");
60
+ await log.debug(`tsconfig\u8DEF\u5F84: ${tsconfig\u8DEF\u5F84}`);
61
+ await log.debug(`\u76EE\u6807\u8DEF\u5F84: ${\u76EE\u6807\u8DEF\u5F84}`);
62
+ await log.debug(`\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84: ${\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84}`);
63
+ const tsconfig\u5185\u5BB9 = import_typescript.default.parseConfigFileTextToJson(tsconfig\u8DEF\u5F84, import_node_fs.default.readFileSync(tsconfig\u8DEF\u5F84, "utf8"));
64
+ if (tsconfig\u5185\u5BB9.error) {
65
+ await log.err("\u65E0\u6CD5\u89E3\u6790 tsconfig.json: " + tsconfig\u5185\u5BB9.error.messageText);
41
66
  throw new Error("\u65E0\u6CD5\u89E3\u6790 tsconfig.json");
42
67
  }
43
- const parsedTsconfig = import_typescript.default.parseJsonConfigFileContent(tsconfigJson.config, import_typescript.default.sys, import_node_path.default.resolve(tsconfigPath, ".."));
68
+ 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, ".."));
44
69
  await log.debug("\u6210\u529F\u89E3\u6790 tsconfig \u6587\u4EF6...");
45
- const projectHost = import_typescript.default.createCompilerHost(parsedTsconfig.options);
46
- const project = import_typescript.default.createProgram(parsedTsconfig.fileNames, parsedTsconfig.options, projectHost);
70
+ const \u9879\u76EE\u4E3B\u673A = import_typescript.default.createCompilerHost(\u89E3\u6790\u540E\u7684tsconfig.options);
71
+ const \u9879\u76EE = import_typescript.default.createProgram(\u89E3\u6790\u540E\u7684tsconfig.fileNames, \u89E3\u6790\u540E\u7684tsconfig.options, \u9879\u76EE\u4E3B\u673A);
47
72
  await log.debug("\u6210\u529F\u8BFB\u53D6\u9879\u76EE...");
48
- const _check = project.getTypeChecker();
49
- const \u6240\u6709\u6E90\u6587\u4EF6 = project.getSourceFiles();
50
- const \u63A5\u53E3\u7C7B\u578B\u6587\u4EF6\u4EEC = \u6240\u6709\u6E90\u6587\u4EF6.filter((sourceFile) => {
51
- return new RegExp(`${interfaceFolderPath.replaceAll("\\", "\\\\")}.*type.ts`).test(
52
- import_node_path.default.resolve(sourceFile.fileName)
53
- );
73
+ var \u6240\u6709\u6E90\u6587\u4EF6 = \u9879\u76EE.getSourceFiles();
74
+ var \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC = \u6240\u6709\u6E90\u6587\u4EF6.filter((\u6E90\u6587\u4EF62) => {
75
+ var \u6E90\u6587\u4EF6\u8DEF\u5F84 = import_node_path.default.normalize(\u6E90\u6587\u4EF62.fileName);
76
+ return \u6E90\u6587\u4EF6\u8DEF\u5F84.includes(\u76EE\u6807\u8DEF\u5F84);
54
77
  });
55
- const \u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6\u4EEC = \u6240\u6709\u6E90\u6587\u4EF6.filter((sourceFile) => {
56
- return new RegExp(`${interfaceFolderPath.replaceAll("\\", "\\\\")}.*index.ts`).test(
57
- import_node_path.default.resolve(sourceFile.fileName)
78
+ await log.debug(`\u7B5B\u9009\u51FA ${\u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.length} \u4E2A\u76F8\u5173\u6E90\u6587\u4EF6`);
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
+ await log.debug(`\u63D0\u53D6\u5230 ${\u76F8\u5173\u7C7B\u8282\u70B9\u4EEC.length} \u4E2A\u7C7B\u8282\u70B9`);
86
+ var \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC = \u76F8\u5173\u7C7B\u8282\u70B9\u4EEC.map((a) => {
87
+ var \u7C7B\u540D\u5B57 = a.\u7C7B\u8282\u70B9.name?.text;
88
+ var \u4EE3\u7801 = [
89
+ `import { \u4EFB\u610F\u63A5\u53E3 } from '@lsby/net-core'`,
90
+ `import {${\u7C7B\u540D\u5B57}} from "./${a.\u6587\u4EF6.fileName.split("/").at(-1)?.replaceAll(".ts", "")}"`,
91
+ `type \u8BA1\u7B97\u7ED3\u679C = ${\u7C7B\u540D\u5B57} extends \u4EFB\u610F\u63A5\u53E3 ? true : false`
92
+ ];
93
+ return import_typescript.default.createSourceFile(
94
+ a.\u6587\u4EF6.fileName.replaceAll(".ts", "-" + (0, import_node_crypto.randomUUID)() + ".ts"),
95
+ \u4EE3\u7801.join("\n"),
96
+ import_typescript.default.ScriptTarget.Latest
58
97
  );
59
98
  });
60
- await log.debug("\u627E\u5230 %o \u4E2A\u63A5\u53E3", \u63A5\u53E3\u7C7B\u578B\u6587\u4EF6\u4EEC.length);
61
- const \u5F15\u5165\u533A = [];
62
- const \u4EE3\u7801\u533A = [];
63
- for (var i = 0; i < \u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6\u4EEC.length; i++) {
64
- var \u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6 = \u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6\u4EEC[i];
65
- if (\u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6 == null)
66
- throw new Error("\u975E\u9884\u671F\u7684\u6570\u7EC4\u8D8A\u754C");
67
- const filenameRelativeToApiFolder = import_node_path.default.relative(interfaceFolderPath, \u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6.fileName).replaceAll("\\", "/");
68
- const importName = filenameRelativeToApiFolder.replaceAll("/", "_").replaceAll(".ts", "").replaceAll("./", "").replaceAll("-", "_");
69
- const filenameRelativeToProjectRoot = import_node_path.default.relative(\u9879\u76EE\u6839\u8DEF\u5F84, \u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6.fileName).replaceAll("\\", "/").replaceAll(".ts", "");
70
- const outputFolderRelativeToProjectRoot = import_node_path.default.relative(import_node_path.default.dirname(outFilePath), \u9879\u76EE\u6839\u8DEF\u5F84).replaceAll("\\", "/");
71
- const importPath = import_node_path.default.join(outputFolderRelativeToProjectRoot, filenameRelativeToProjectRoot).replaceAll("\\", "/");
72
- await log.info(`\u5904\u7406\uFF08${i + 1} / ${\u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6\u4EEC.length}\uFF09\uFF1A${filenameRelativeToApiFolder}`);
73
- \u5F15\u5165\u533A.push(`import * as ${importName} from '${importPath}'`);
74
- \u4EE3\u7801\u533A.push(`${importName}.default`);
99
+ const \u65B0\u9879\u76EE = import_typescript.default.createProgram({
100
+ rootNames: [...\u9879\u76EE.getSourceFiles().map((a) => a.fileName), ...\u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.map((a) => a.fileName)],
101
+ options: \u89E3\u6790\u540E\u7684tsconfig.options,
102
+ host: {
103
+ ...\u9879\u76EE\u4E3B\u673A,
104
+ getSourceFile: (filename) => {
105
+ const \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 = \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.find((a) => a.fileName == filename);
106
+ if (\u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 != null)
107
+ return \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6;
108
+ return \u9879\u76EE.getSourceFile(filename);
109
+ }
110
+ },
111
+ oldProgram: \u9879\u76EE
112
+ });
113
+ var \u7C7B\u578B\u68C0\u67E5\u5668 = \u65B0\u9879\u76EE.getTypeChecker();
114
+ var \u68C0\u67E5\u7ED3\u679C = [];
115
+ for (var \u6E90\u6587\u4EF6 of \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC) {
116
+ var \u7ED3\u679C = false;
117
+ import_typescript.default.forEachChild(\u6E90\u6587\u4EF6, (node) => {
118
+ if (import_typescript.default.isTypeAliasDeclaration(node) && node.name.text === "\u8BA1\u7B97\u7ED3\u679C") {
119
+ const type = \u7C7B\u578B\u68C0\u67E5\u5668.getTypeAtLocation(node);
120
+ var \u6587\u672C\u7ED3\u679C = \u7C7B\u578B\u68C0\u67E5\u5668.typeToString(type);
121
+ if (\u6587\u672C\u7ED3\u679C == "true")
122
+ \u7ED3\u679C = true;
123
+ }
124
+ });
125
+ \u68C0\u67E5\u7ED3\u679C.push(\u7ED3\u679C);
75
126
  }
76
- const finalTestFile = [
77
- // ..
127
+ 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);
128
+ await log.debug(`\u6700\u7EC8\u7B5B\u9009\u5230 ${\u6700\u7EC8\u7ED3\u679C.length} \u4E2A\u63A5\u53E3\u5B9E\u73B0`);
129
+ var \u6700\u7EC8\u4EE3\u7801 = [
78
130
  `import { \u4EFB\u610F\u63A5\u53E3 } from '@lsby/net-core'`,
79
131
  "",
80
- ...\u5F15\u5165\u533A,
132
+ ...\u6700\u7EC8\u7ED3\u679C.map(
133
+ (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)}'`
134
+ ),
81
135
  "",
82
- `export var interfaceList: \u4EFB\u610F\u63A5\u53E3[] = [
83
- ${\u4EE3\u7801\u533A.map((a) => ` ${a}`).join(",\n")}
84
- ]`,
136
+ `export var interfaceList: \u4EFB\u610F\u63A5\u53E3[] = [`,
137
+ ...\u6700\u7EC8\u7ED3\u679C.map((a) => \u8BA1\u7B97\u5B8C\u6574\u540D\u79F0(tsconfig\u8DEF\u5F84, a)).map((a) => ` new ${a}(),`),
138
+ `]`,
85
139
  ""
86
- ].join("\n");
87
- var outDir = import_node_path.default.dirname(outFilePath);
88
- if (!(0, import_node_fs.existsSync)(outDir)) {
89
- (0, import_node_fs.mkdirSync)(outDir, { recursive: true });
90
- }
91
- (0, import_node_fs.writeFileSync)(outFilePath, finalTestFile);
140
+ ];
141
+ await log.debug("\u6700\u7EC8\u4EE3\u7801\u751F\u6210\u5B8C\u6210");
142
+ var \u8F93\u51FA\u6587\u4EF6\u5939 = import_node_path.default.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84);
143
+ if (!import_node_fs.default.existsSync(\u8F93\u51FA\u6587\u4EF6\u5939))
144
+ import_node_fs.default.mkdirSync(\u8F93\u51FA\u6587\u4EF6\u5939, { recursive: true });
145
+ import_node_fs.default.writeFileSync(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, \u6700\u7EC8\u4EE3\u7801.join("\n"));
146
+ await log.debug(`\u8F93\u51FA\u6587\u4EF6\u5199\u5165\u5B8C\u6210: ${\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84}`);
92
147
  }
93
148
 
94
149
  // src/bin/gen-list/bin.ts
@@ -33,67 +33,122 @@ __export(gen_list_exports, {
33
33
  main: () => main
34
34
  });
35
35
  module.exports = __toCommonJS(gen_list_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) {
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) {
41
63
  var log = new import_ts_log.Log("@lsby:net-core").extend("gen-list");
42
- await log.debug("\u51C6\u5907\u751F\u6210\u63A5\u53E3\u5217\u8868...");
43
- const \u9879\u76EE\u6839\u8DEF\u5F84 = 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) {
64
+ await log.debug("\u5F00\u59CB\u751F\u6210\u63A5\u53E3\u5217\u8868...");
65
+ await log.debug(`tsconfig\u8DEF\u5F84: ${tsconfig\u8DEF\u5F84}`);
66
+ await log.debug(`\u76EE\u6807\u8DEF\u5F84: ${\u76EE\u6807\u8DEF\u5F84}`);
67
+ await log.debug(`\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84: ${\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84}`);
68
+ const tsconfig\u5185\u5BB9 = import_typescript.default.parseConfigFileTextToJson(tsconfig\u8DEF\u5F84, import_node_fs.default.readFileSync(tsconfig\u8DEF\u5F84, "utf8"));
69
+ if (tsconfig\u5185\u5BB9.error) {
70
+ await log.err("\u65E0\u6CD5\u89E3\u6790 tsconfig.json: " + tsconfig\u5185\u5BB9.error.messageText);
46
71
  throw new Error("\u65E0\u6CD5\u89E3\u6790 tsconfig.json");
47
72
  }
48
- const parsedTsconfig = import_typescript.default.parseJsonConfigFileContent(tsconfigJson.config, import_typescript.default.sys, import_node_path.default.resolve(tsconfigPath, ".."));
73
+ 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, ".."));
49
74
  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);
75
+ const \u9879\u76EE\u4E3B\u673A = import_typescript.default.createCompilerHost(\u89E3\u6790\u540E\u7684tsconfig.options);
76
+ const \u9879\u76EE = import_typescript.default.createProgram(\u89E3\u6790\u540E\u7684tsconfig.fileNames, \u89E3\u6790\u540E\u7684tsconfig.options, \u9879\u76EE\u4E3B\u673A);
52
77
  await log.debug("\u6210\u529F\u8BFB\u53D6\u9879\u76EE...");
53
- const _check = project.getTypeChecker();
54
- const \u6240\u6709\u6E90\u6587\u4EF6 = project.getSourceFiles();
55
- const \u63A5\u53E3\u7C7B\u578B\u6587\u4EF6\u4EEC = \u6240\u6709\u6E90\u6587\u4EF6.filter((sourceFile) => {
56
- return new RegExp(`${interfaceFolderPath.replaceAll("\\", "\\\\")}.*type.ts`).test(
57
- import_node_path.default.resolve(sourceFile.fileName)
58
- );
78
+ var \u6240\u6709\u6E90\u6587\u4EF6 = \u9879\u76EE.getSourceFiles();
79
+ var \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC = \u6240\u6709\u6E90\u6587\u4EF6.filter((\u6E90\u6587\u4EF62) => {
80
+ var \u6E90\u6587\u4EF6\u8DEF\u5F84 = import_node_path.default.normalize(\u6E90\u6587\u4EF62.fileName);
81
+ return \u6E90\u6587\u4EF6\u8DEF\u5F84.includes(\u76EE\u6807\u8DEF\u5F84);
59
82
  });
60
- const \u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6\u4EEC = \u6240\u6709\u6E90\u6587\u4EF6.filter((sourceFile) => {
61
- return new RegExp(`${interfaceFolderPath.replaceAll("\\", "\\\\")}.*index.ts`).test(
62
- import_node_path.default.resolve(sourceFile.fileName)
83
+ await log.debug(`\u7B5B\u9009\u51FA ${\u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.length} \u4E2A\u76F8\u5173\u6E90\u6587\u4EF6`);
84
+ const \u76F8\u5173\u7C7B\u8282\u70B9\u4EEC = \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.flatMap(
85
+ (a) => \u63D0\u53D6\u9876\u7EA7\u5BFC\u51FA\u7C7B\u8282\u70B9(a).map((x) => ({
86
+ \u6587\u4EF6: a,
87
+ \u7C7B\u8282\u70B9: x
88
+ }))
89
+ );
90
+ await log.debug(`\u63D0\u53D6\u5230 ${\u76F8\u5173\u7C7B\u8282\u70B9\u4EEC.length} \u4E2A\u7C7B\u8282\u70B9`);
91
+ var \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC = \u76F8\u5173\u7C7B\u8282\u70B9\u4EEC.map((a) => {
92
+ var \u7C7B\u540D\u5B57 = a.\u7C7B\u8282\u70B9.name?.text;
93
+ var \u4EE3\u7801 = [
94
+ `import { \u4EFB\u610F\u63A5\u53E3 } from '@lsby/net-core'`,
95
+ `import {${\u7C7B\u540D\u5B57}} from "./${a.\u6587\u4EF6.fileName.split("/").at(-1)?.replaceAll(".ts", "")}"`,
96
+ `type \u8BA1\u7B97\u7ED3\u679C = ${\u7C7B\u540D\u5B57} extends \u4EFB\u610F\u63A5\u53E3 ? true : false`
97
+ ];
98
+ return import_typescript.default.createSourceFile(
99
+ a.\u6587\u4EF6.fileName.replaceAll(".ts", "-" + (0, import_node_crypto.randomUUID)() + ".ts"),
100
+ \u4EE3\u7801.join("\n"),
101
+ import_typescript.default.ScriptTarget.Latest
63
102
  );
64
103
  });
65
- await log.debug("\u627E\u5230 %o \u4E2A\u63A5\u53E3", \u63A5\u53E3\u7C7B\u578B\u6587\u4EF6\u4EEC.length);
66
- const \u5F15\u5165\u533A = [];
67
- const \u4EE3\u7801\u533A = [];
68
- for (var i = 0; i < \u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6\u4EEC.length; i++) {
69
- var \u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6 = \u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6\u4EEC[i];
70
- if (\u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6 == null)
71
- throw new Error("\u975E\u9884\u671F\u7684\u6570\u7EC4\u8D8A\u754C");
72
- const filenameRelativeToApiFolder = import_node_path.default.relative(interfaceFolderPath, \u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6.fileName).replaceAll("\\", "/");
73
- const importName = filenameRelativeToApiFolder.replaceAll("/", "_").replaceAll(".ts", "").replaceAll("./", "").replaceAll("-", "_");
74
- const filenameRelativeToProjectRoot = import_node_path.default.relative(\u9879\u76EE\u6839\u8DEF\u5F84, \u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6.fileName).replaceAll("\\", "/").replaceAll(".ts", "");
75
- const outputFolderRelativeToProjectRoot = import_node_path.default.relative(import_node_path.default.dirname(outFilePath), \u9879\u76EE\u6839\u8DEF\u5F84).replaceAll("\\", "/");
76
- const importPath = import_node_path.default.join(outputFolderRelativeToProjectRoot, filenameRelativeToProjectRoot).replaceAll("\\", "/");
77
- await log.info(`\u5904\u7406\uFF08${i + 1} / ${\u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6\u4EEC.length}\uFF09\uFF1A${filenameRelativeToApiFolder}`);
78
- \u5F15\u5165\u533A.push(`import * as ${importName} from '${importPath}'`);
79
- \u4EE3\u7801\u533A.push(`${importName}.default`);
104
+ const \u65B0\u9879\u76EE = import_typescript.default.createProgram({
105
+ rootNames: [...\u9879\u76EE.getSourceFiles().map((a) => a.fileName), ...\u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.map((a) => a.fileName)],
106
+ options: \u89E3\u6790\u540E\u7684tsconfig.options,
107
+ host: {
108
+ ...\u9879\u76EE\u4E3B\u673A,
109
+ getSourceFile: (filename) => {
110
+ const \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 = \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.find((a) => a.fileName == filename);
111
+ if (\u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 != null)
112
+ return \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6;
113
+ return \u9879\u76EE.getSourceFile(filename);
114
+ }
115
+ },
116
+ oldProgram: \u9879\u76EE
117
+ });
118
+ var \u7C7B\u578B\u68C0\u67E5\u5668 = \u65B0\u9879\u76EE.getTypeChecker();
119
+ var \u68C0\u67E5\u7ED3\u679C = [];
120
+ for (var \u6E90\u6587\u4EF6 of \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC) {
121
+ var \u7ED3\u679C = false;
122
+ import_typescript.default.forEachChild(\u6E90\u6587\u4EF6, (node) => {
123
+ if (import_typescript.default.isTypeAliasDeclaration(node) && node.name.text === "\u8BA1\u7B97\u7ED3\u679C") {
124
+ const type = \u7C7B\u578B\u68C0\u67E5\u5668.getTypeAtLocation(node);
125
+ var \u6587\u672C\u7ED3\u679C = \u7C7B\u578B\u68C0\u67E5\u5668.typeToString(type);
126
+ if (\u6587\u672C\u7ED3\u679C == "true")
127
+ \u7ED3\u679C = true;
128
+ }
129
+ });
130
+ \u68C0\u67E5\u7ED3\u679C.push(\u7ED3\u679C);
80
131
  }
81
- const finalTestFile = [
82
- // ..
132
+ 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);
133
+ await log.debug(`\u6700\u7EC8\u7B5B\u9009\u5230 ${\u6700\u7EC8\u7ED3\u679C.length} \u4E2A\u63A5\u53E3\u5B9E\u73B0`);
134
+ var \u6700\u7EC8\u4EE3\u7801 = [
83
135
  `import { \u4EFB\u610F\u63A5\u53E3 } from '@lsby/net-core'`,
84
136
  "",
85
- ...\u5F15\u5165\u533A,
137
+ ...\u6700\u7EC8\u7ED3\u679C.map(
138
+ (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)}'`
139
+ ),
86
140
  "",
87
- `export var interfaceList: \u4EFB\u610F\u63A5\u53E3[] = [
88
- ${\u4EE3\u7801\u533A.map((a) => ` ${a}`).join(",\n")}
89
- ]`,
141
+ `export var interfaceList: \u4EFB\u610F\u63A5\u53E3[] = [`,
142
+ ...\u6700\u7EC8\u7ED3\u679C.map((a) => \u8BA1\u7B97\u5B8C\u6574\u540D\u79F0(tsconfig\u8DEF\u5F84, a)).map((a) => ` new ${a}(),`),
143
+ `]`,
90
144
  ""
91
- ].join("\n");
92
- var outDir = import_node_path.default.dirname(outFilePath);
93
- if (!(0, import_node_fs.existsSync)(outDir)) {
94
- (0, import_node_fs.mkdirSync)(outDir, { recursive: true });
95
- }
96
- (0, import_node_fs.writeFileSync)(outFilePath, finalTestFile);
145
+ ];
146
+ await log.debug("\u6700\u7EC8\u4EE3\u7801\u751F\u6210\u5B8C\u6210");
147
+ var \u8F93\u51FA\u6587\u4EF6\u5939 = import_node_path.default.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84);
148
+ if (!import_node_fs.default.existsSync(\u8F93\u51FA\u6587\u4EF6\u5939))
149
+ import_node_fs.default.mkdirSync(\u8F93\u51FA\u6587\u4EF6\u5939, { recursive: true });
150
+ import_node_fs.default.writeFileSync(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, \u6700\u7EC8\u4EE3\u7801.join("\n"));
151
+ await log.debug(`\u8F93\u51FA\u6587\u4EF6\u5199\u5165\u5B8C\u6210: ${\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84}`);
97
152
  }
98
153
  // Annotate the CommonJS export names for ESM import in node:
99
154
  0 && (module.exports = {
@@ -1,3 +1,3 @@
1
- declare function main(tsconfigPath: string, interfaceFolderPath: string, outFilePath: string): Promise<void>;
1
+ declare function main(tsconfig路径: string, 目标路径: string, 输出文件路径: string): Promise<void>;
2
2
 
3
3
  export { main };
@@ -28,76 +28,124 @@ var import_node_path2 = __toESM(require("path"), 1);
28
28
  var import_commander = require("commander");
29
29
 
30
30
  // src/bin/gen-test/index.ts
31
+ var import_node_crypto = require("crypto");
31
32
  var import_node_fs = __toESM(require("fs"), 1);
32
33
  var import_node_path = __toESM(require("path"), 1);
34
+ var import_lodash = __toESM(require("lodash"), 1);
33
35
  var import_typescript = __toESM(require("typescript"), 1);
34
36
  var import_ts_log = require("@lsby/ts-log");
35
- async function main(tsconfigPath, interfaceFolderPath, outFilePath, filter) {
37
+ function \u63D0\u53D6\u9876\u7EA7\u5BFC\u51FA\u7C7B\u8282\u70B9(\u6E90\u6587\u4EF6) {
38
+ const \u7C7B\u8282\u70B9\u6570\u7EC4 = [];
39
+ const visit = (\u8282\u70B9) => {
40
+ if (import_typescript.default.isClassDeclaration(\u8282\u70B9) && import_typescript.default.getModifiers(\u8282\u70B9)?.some((modifier) => modifier.kind === import_typescript.default.SyntaxKind.ExportKeyword)) {
41
+ \u7C7B\u8282\u70B9\u6570\u7EC4.push(\u8282\u70B9);
42
+ }
43
+ import_typescript.default.forEachChild(\u8282\u70B9, visit);
44
+ };
45
+ import_typescript.default.forEachChild(\u6E90\u6587\u4EF6, visit);
46
+ return \u7C7B\u8282\u70B9\u6570\u7EC4;
47
+ }
48
+ function \u66FF\u6362\u975E\u6CD5\u5B57\u7B26(\u5B57\u7B26\u4E32) {
49
+ return "_" + \u5B57\u7B26\u4E32.replace(/[ !\-!@#$%^&*()\[\]{}\\|;:'",.\/?]/g, "_");
50
+ }
51
+ function \u8BA1\u7B97\u5B8C\u6574\u540D\u79F0(tsconfig\u8DEF\u5F84, a) {
52
+ 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);
53
+ }
54
+ function \u8BA1\u7B97\u5F15\u5165\u8DEF\u5F84(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, a) {
55
+ return import_node_path.default.relative(import_node_path.default.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84), a["\u6587\u4EF6"].fileName).replaceAll("\\", "/").replaceAll(".ts", "");
56
+ }
57
+ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, \u6587\u4EF6\u8FC7\u6EE4\u8868\u8FBE\u5F0F) {
36
58
  var log = new import_ts_log.Log("@lsby:net-core").extend("gen-test");
37
- await log.debug("\u51C6\u5907\u751F\u6210\u6D4B\u8BD5\u6587\u4EF6...");
38
- const projectRootPath = import_node_path.default.dirname(tsconfigPath);
39
- const tsconfigJson = import_typescript.default.parseConfigFileTextToJson(tsconfigPath, import_node_fs.default.readFileSync(tsconfigPath, "utf8"));
40
- if (tsconfigJson.error) {
59
+ await log.debug("\u5F00\u59CB\u751F\u6210\u6D4B\u8BD5...");
60
+ await log.debug(`tsconfig\u8DEF\u5F84: ${tsconfig\u8DEF\u5F84}`);
61
+ await log.debug(`\u76EE\u6807\u8DEF\u5F84: ${\u76EE\u6807\u8DEF\u5F84}`);
62
+ await log.debug(`\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84: ${\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84}`);
63
+ await log.debug(`\u6587\u4EF6\u8FC7\u6EE4\u8868\u8FBE\u5F0F: ${\u6587\u4EF6\u8FC7\u6EE4\u8868\u8FBE\u5F0F}`);
64
+ const tsconfig\u5185\u5BB9 = import_typescript.default.parseConfigFileTextToJson(tsconfig\u8DEF\u5F84, import_node_fs.default.readFileSync(tsconfig\u8DEF\u5F84, "utf8"));
65
+ if (tsconfig\u5185\u5BB9.error) {
66
+ await log.err("\u65E0\u6CD5\u89E3\u6790 tsconfig.json", tsconfig\u5185\u5BB9.error);
41
67
  throw new Error("\u65E0\u6CD5\u89E3\u6790 tsconfig.json");
42
68
  }
43
- const parsedTsconfig = import_typescript.default.parseJsonConfigFileContent(tsconfigJson.config, import_typescript.default.sys, import_node_path.default.resolve(tsconfigPath, ".."));
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, ".."));
44
70
  await log.debug("\u6210\u529F\u89E3\u6790 tsconfig \u6587\u4EF6...");
45
- const projectHost = import_typescript.default.createCompilerHost(parsedTsconfig.options);
46
- const project = import_typescript.default.createProgram(parsedTsconfig.fileNames, parsedTsconfig.options, projectHost);
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);
47
73
  await log.debug("\u6210\u529F\u8BFB\u53D6\u9879\u76EE...");
48
- const _check = project.getTypeChecker();
49
- const allSourceFiles = project.getSourceFiles();
50
- const typeSourceFiles = allSourceFiles.filter((sourceFile) => {
51
- return new RegExp(`${interfaceFolderPath.replaceAll("\\", "\\\\")}.*type.ts`).test(
52
- import_node_path.default.resolve(sourceFile.fileName)
53
- );
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
+ var \u7B26\u5408\u8FC7\u6EE4\u8868\u8FBE\u5F0F = new RegExp(\u6587\u4EF6\u8FC7\u6EE4\u8868\u8FBE\u5F0F || ".*").test(\u6E90\u6587\u4EF6\u8DEF\u5F84);
78
+ return \u6E90\u6587\u4EF6\u8DEF\u5F84.includes(\u76EE\u6807\u8DEF\u5F84) && \u7B26\u5408\u8FC7\u6EE4\u8868\u8FBE\u5F0F;
54
79
  });
55
- const testSourceFiles = allSourceFiles.filter((sourceFile) => {
56
- return new RegExp(`${interfaceFolderPath.replaceAll("\\", "\\\\")}.*.test.ts`).test(
57
- import_node_path.default.resolve(sourceFile.fileName)
80
+ await log.debug(`\u7B5B\u9009\u51FA ${\u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.length} \u4E2A\u76F8\u5173\u6E90\u6587\u4EF6`);
81
+ const \u76F8\u5173\u7C7B\u8282\u70B9\u4EEC = \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.flatMap(
82
+ (a) => \u63D0\u53D6\u9876\u7EA7\u5BFC\u51FA\u7C7B\u8282\u70B9(a).map((x) => ({
83
+ \u6587\u4EF6: a,
84
+ \u7C7B\u8282\u70B9: x
85
+ }))
86
+ );
87
+ await log.debug(`\u63D0\u53D6\u5230 ${\u76F8\u5173\u7C7B\u8282\u70B9\u4EEC.length} \u4E2A\u7C7B\u8282\u70B9`);
88
+ var \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC = \u76F8\u5173\u7C7B\u8282\u70B9\u4EEC.map((a) => {
89
+ var \u7C7B\u540D\u5B57 = a.\u7C7B\u8282\u70B9.name?.text;
90
+ var \u4EE3\u7801 = [
91
+ `import { \u63A5\u53E3\u6D4B\u8BD5 } from '@lsby/net-core'`,
92
+ `import {${\u7C7B\u540D\u5B57}} from "./${a.\u6587\u4EF6.fileName.split("/").at(-1)?.replaceAll(".ts", "")}"`,
93
+ `type \u8BA1\u7B97\u7ED3\u679C = ${\u7C7B\u540D\u5B57} extends \u63A5\u53E3\u6D4B\u8BD5 ? true : false`
94
+ ];
95
+ return import_typescript.default.createSourceFile(
96
+ a.\u6587\u4EF6.fileName.replaceAll(".ts", "-" + (0, import_node_crypto.randomUUID)() + ".ts"),
97
+ \u4EE3\u7801.join("\n"),
98
+ import_typescript.default.ScriptTarget.Latest
58
99
  );
59
100
  });
60
- const testSourceFilesFilter = testSourceFiles.filter((sourceFile) => {
61
- return new RegExp(filter).test(import_node_path.default.resolve(sourceFile.fileName));
101
+ const \u65B0\u9879\u76EE = import_typescript.default.createProgram({
102
+ rootNames: [...\u9879\u76EE.getSourceFiles().map((a) => a.fileName), ...\u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.map((a) => a.fileName)],
103
+ options: \u89E3\u6790\u540E\u7684tsconfig.options,
104
+ host: {
105
+ ...\u9879\u76EE\u4E3B\u673A,
106
+ getSourceFile: (filename) => {
107
+ const \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 = \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.find((a) => a.fileName == filename);
108
+ if (\u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 != null)
109
+ return \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6;
110
+ return \u9879\u76EE.getSourceFile(filename);
111
+ }
112
+ },
113
+ oldProgram: \u9879\u76EE
62
114
  });
63
- await log.debug(
64
- "\u627E\u5230 %o \u4E2A\u63A5\u53E3\uFF0C\u5176\u4E2D\u6709 %o \u4E2A\u6D4B\u8BD5\uFF0C\u7B5B\u9009\u540E\u8FD8\u5269 %o \u4E2A...",
65
- typeSourceFiles.length,
66
- testSourceFiles.length,
67
- testSourceFilesFilter.length
68
- );
69
- const importCode = [];
70
- const testCode = [];
71
- for (var index = 0; index < testSourceFilesFilter.length; index++) {
72
- var testSourceFile = testSourceFilesFilter[index];
73
- if (testSourceFile == null)
74
- throw new Error("\u975E\u9884\u671F\u7684\u6570\u7EC4\u8D8A\u754C");
75
- const filenameRelativeToApiFolder = import_node_path.default.relative(interfaceFolderPath, testSourceFile.fileName).replaceAll("\\", "/");
76
- const importName = filenameRelativeToApiFolder.replaceAll("/", "_").replaceAll(".test.ts", "").replaceAll("./", "").replaceAll("-", "_");
77
- const filenameRelativeToProjectRoot = import_node_path.default.relative(projectRootPath, testSourceFile.fileName).replaceAll("\\", "/").replaceAll(".ts", "");
78
- const outputFolderRelativeToProjectRoot = import_node_path.default.relative(import_node_path.default.dirname(outFilePath), projectRootPath).replaceAll("\\", "/");
79
- const importPath = import_node_path.default.join(outputFolderRelativeToProjectRoot, filenameRelativeToProjectRoot).replaceAll("\\", "/");
80
- await log.info(`\u5904\u7406\uFF08${index + 1} / ${testSourceFilesFilter.length}\uFF09\uFF1A${filenameRelativeToApiFolder}`);
81
- importCode.push(`import ${importName} from '${importPath}'`);
82
- testCode.push(generateTestCode(importName, importName));
115
+ var \u7C7B\u578B\u68C0\u67E5\u5668 = \u65B0\u9879\u76EE.getTypeChecker();
116
+ var \u68C0\u67E5\u7ED3\u679C = [];
117
+ for (var \u6E90\u6587\u4EF6 of \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC) {
118
+ var \u7ED3\u679C = false;
119
+ import_typescript.default.forEachChild(\u6E90\u6587\u4EF6, (node) => {
120
+ if (import_typescript.default.isTypeAliasDeclaration(node) && node.name.text === "\u8BA1\u7B97\u7ED3\u679C") {
121
+ const type = \u7C7B\u578B\u68C0\u67E5\u5668.getTypeAtLocation(node);
122
+ var \u6587\u672C\u7ED3\u679C = \u7C7B\u578B\u68C0\u67E5\u5668.typeToString(type);
123
+ if (\u6587\u672C\u7ED3\u679C == "true")
124
+ \u7ED3\u679C = true;
125
+ }
126
+ });
127
+ \u68C0\u67E5\u7ED3\u679C.push(\u7ED3\u679C);
83
128
  }
84
- const finalTestFile = [
129
+ 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);
130
+ await log.debug(`\u6700\u7EC8\u7B5B\u9009\u5230 ${\u6700\u7EC8\u7ED3\u679C.length} \u4E2A\u6D4B\u8BD5\u7528\u4F8B`);
131
+ var \u6700\u7EC8\u4EE3\u7801 = [
85
132
  "import { test } from 'vitest'",
86
133
  "import './unit-test-prefix'",
87
134
  "",
88
- ...importCode,
135
+ ...\u6700\u7EC8\u7ED3\u679C.map(
136
+ (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)}'`
137
+ ),
89
138
  "",
90
- ...testCode,
139
+ ...\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())`),
91
140
  ""
92
- ].join("\n");
93
- var outDir = import_node_path.default.dirname(outFilePath);
94
- if (!(0, import_node_fs.existsSync)(outDir)) {
95
- (0, import_node_fs.mkdirSync)(outDir, { recursive: true });
141
+ ];
142
+ await log.debug("\u6700\u7EC8\u4EE3\u7801\u751F\u6210\u5B8C\u6210");
143
+ var \u8F93\u51FA\u6587\u4EF6\u5939 = import_node_path.default.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84);
144
+ if (!import_node_fs.default.existsSync(\u8F93\u51FA\u6587\u4EF6\u5939)) {
145
+ import_node_fs.default.mkdirSync(\u8F93\u51FA\u6587\u4EF6\u5939, { recursive: true });
96
146
  }
97
- (0, import_node_fs.writeFileSync)(outFilePath, finalTestFile);
98
- }
99
- function generateTestCode(testCaseName, importName) {
100
- return `test('${testCaseName}', async () => await ${importName}.\u8FD0\u884C())`;
147
+ import_node_fs.default.writeFileSync(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, \u6700\u7EC8\u4EE3\u7801.join("\n"));
148
+ await log.debug(`\u8F93\u51FA\u6587\u4EF6\u5199\u5165\u5B8C\u6210: ${\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84}`);
101
149
  }
102
150
 
103
151
  // src/bin/gen-test/bin.ts