@nasl/cli 0.1.0 → 0.1.1

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 (41) hide show
  1. package/README.md +41 -5
  2. package/out/bin/nasl.js +21 -1
  3. package/out/bin/nasl.js.map +1 -1
  4. package/out/commands/check copy.d.ts +5 -0
  5. package/out/commands/check copy.d.ts.map +1 -0
  6. package/out/commands/check copy.js +30 -0
  7. package/out/commands/check copy.js.map +1 -0
  8. package/out/commands/check.d.ts.map +1 -1
  9. package/out/commands/check.js +3 -1
  10. package/out/commands/check.js.map +1 -1
  11. package/out/commands/compile.d.ts.map +1 -1
  12. package/out/commands/compile.js +3 -1
  13. package/out/commands/compile.js.map +1 -1
  14. package/out/commands/dep.d.ts +5 -0
  15. package/out/commands/dep.d.ts.map +1 -0
  16. package/out/commands/dep.js +13 -0
  17. package/out/commands/dep.js.map +1 -0
  18. package/out/commands/dev.d.ts.map +1 -1
  19. package/out/commands/dev.js +36 -1
  20. package/out/commands/dev.js.map +1 -1
  21. package/out/services/compose.d.ts +2 -0
  22. package/out/services/compose.d.ts.map +1 -1
  23. package/out/services/compose.js +4 -2
  24. package/out/services/compose.js.map +1 -1
  25. package/out/services/resolve.d.ts +3 -2
  26. package/out/services/resolve.d.ts.map +1 -1
  27. package/out/services/resolve.js +169 -13
  28. package/out/services/resolve.js.map +1 -1
  29. package/package.json +16 -3
  30. package/out/bin/nasl-compile.d.ts +0 -3
  31. package/out/bin/nasl-compile.d.ts.map +0 -1
  32. package/out/bin/nasl-compile.js +0 -22
  33. package/out/bin/nasl-compile.js.map +0 -1
  34. package/out/commands/transpile.d.ts +0 -5
  35. package/out/commands/transpile.d.ts.map +0 -1
  36. package/out/commands/transpile.js +0 -123
  37. package/out/commands/transpile.js.map +0 -1
  38. package/out/services/resolveFiles.d.ts +0 -18
  39. package/out/services/resolveFiles.d.ts.map +0 -1
  40. package/out/services/resolveFiles.js +0 -103
  41. package/out/services/resolveFiles.js.map +0 -1
package/README.md CHANGED
@@ -31,16 +31,36 @@ nasl init
31
31
  }
32
32
  ```
33
33
 
34
+
35
+ ### 入口文件说明
36
+
37
+ 下面的命令中均支持 [entry] 参数,表示入口文件:
38
+
39
+ - 入口文件可选,不填则表示处理整个 src 目录
40
+ - 入口文件路径相对于项目目录,但必须在 src 目录下
41
+ - 支持具体文件和 glob 模式(注意要用引号包裹)
42
+ - src/app.enums.Status.ts 支持具体文件
43
+ - "src/app.enums.*.ts" 表示所有枚举
44
+ - "src/app.{*.entities.*.ts,structures.*.ts,enums.*.ts}" 表示所有实体、数据结构和枚举,即全部用户自定义类型
45
+ - "src/app.logics.*.ts" 表示所有逻辑文件
46
+ - "src/*.tsx" 表示所有页面文件
47
+ - 会自动进行依赖分析,收集所有依赖的文件
48
+ - 依赖的页面文件(.tsx)不会继续进行依赖分析,而是直接提取签名,以提高性能
49
+
34
50
  ### 编译 NASL 代码
35
51
 
36
52
  ```bash
37
53
  # 编译整个 src 目录
38
54
  nasl compile
39
55
 
40
- # 编译指定入口文件及其依赖
41
- nasl compile src/app.frontendTypes.pc.frontends.pc.views.dashboard.views.course_selection.tsx
56
+ # 编译指定入口文件及其依赖(自动进行依赖分析)
57
+ nasl compile src/app.frontendTypes.pc.frontends.pc.views.dashboard.tsx
42
58
  # 或使用简写
43
- naslc src/app.frontendTypes.pc.frontends.pc.views.dashboard.views.course_selection.tsx
59
+ naslc src/app.frontendTypes.pc.frontends.pc.views.dashboard.tsx
60
+ nasl compile "src/app.enums.*.ts"
61
+ nasl compile "src/app.{*.entities.*.ts,structures.*.ts,enums.*.ts}"
62
+ nasl compile "src/app.logics.*.ts"
63
+ nasl compile "src/*.tsx"
44
64
  ```
45
65
 
46
66
  ### 检查 NASL 代码
@@ -49,8 +69,24 @@ naslc src/app.frontendTypes.pc.frontends.pc.views.dashboard.views.course_selecti
49
69
  # 检查整个 src 目录
50
70
  nasl check
51
71
 
52
- # 检查指定入口文件及其依赖
53
- nasl check src/app.frontendTypes.pc.frontends.pc.views.dashboard.views.course_selection.tsx
72
+ # 检查指定入口文件及其依赖(自动进行依赖分析)
73
+ nasl check src/app.frontendTypes.pc.frontends.pc.views.dashboard.tsx
74
+ nasl check "src/app.enums.*.ts"
75
+ nasl check "src/app.{*.entities.*.ts,structures.*.ts,enums.*.ts}"
76
+ nasl check "src/app.logics.*.ts"
77
+ nasl check "src/*.tsx"
78
+ ```
79
+
80
+ ### 依赖分析
81
+
82
+ 建议指定入口文件,否则会扫描整个 src 目录,输出量较大。
83
+
84
+ ```bash
85
+ nasl dep "src/app.enums.*.ts"
86
+ nasl dep "src/app.{*.entities.*.ts,structures.*.ts,enums.*.ts}"
87
+ nasl dep "src/app.logics.loadStudentList.ts"
88
+ nasl dep "src/*.tsx"
89
+ nasl dep
54
90
  ```
55
91
 
56
92
  ### 启动开发服务
package/out/bin/nasl.js CHANGED
@@ -8,10 +8,18 @@ const commander_1 = require("commander");
8
8
  const commands_1 = require("../commands");
9
9
  const logger_1 = require("../utils/logger");
10
10
  const package_json_1 = __importDefault(require("../../package.json"));
11
+ const dep_1 = require("../commands/dep");
11
12
  const program = new commander_1.Command();
13
+ const entryDescription = `是相对于项目根目录的路径,支持 glob 模式(注意要用引号包裹),例如:
14
+ - src/app.enums.Status.ts 支持具体文件
15
+ - "src/app.enums.*.ts" 表示所有枚举
16
+ - "src/app.{*.entities.*.ts,structures.*.ts,enums.*.ts}" 表示所有实体、数据结构和枚举,即全部用户自定义类型
17
+ - "src/app.logics.*.ts" 表示所有逻辑文件
18
+ - "src/*.tsx" 表示所有页面文件`;
12
19
  program.name('nasl').description(`NASL 语言的命令行工具,提供编译、检查、开发服务等功能。
13
20
  目前只支持 NaturalTS 表示的 NASL 代码,编译为 Vue 和 JS。
14
- `).version(package_json_1.default.version).usage('[command] [options]');
21
+
22
+ 下面命令中的 [entry] 参数表示入口文件,${entryDescription}`).version(package_json_1.default.version).usage('[command] [options]');
15
23
  program
16
24
  .command('init')
17
25
  .description('初始化 NASL 配置文件')
@@ -34,6 +42,18 @@ program
34
42
  process.exit(1);
35
43
  }
36
44
  });
45
+ program
46
+ .command('dep [entry]')
47
+ .description('从入口文件开始进行依赖分析')
48
+ .action(async (entry) => {
49
+ try {
50
+ await (0, dep_1.depCommand)(entry);
51
+ }
52
+ catch (error) {
53
+ logger_1.Logger.error(`查找依赖过程发生错误:${error.message}`);
54
+ process.exit(1);
55
+ }
56
+ });
37
57
  program
38
58
  .command('dev [entry]')
39
59
  .description('启动开发服务')
@@ -1 +1 @@
1
- {"version":3,"file":"nasl.js","sourceRoot":"","sources":["../../src/bin/nasl.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,0CAAuG;AACvG,4CAAyC;AACzC,sEAAqC;AAErC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC;;CAEhC,CAAC,CAAC,OAAO,CAAC,sBAAG,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;AAErD,OAAO;KACF,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,eAAe,CAAC;KAC5B,MAAM,CAAC,GAAG,EAAE;IACT,IAAA,sBAAW,GAAE,CAAC;AAClB,CAAC,CAAC,CAAC;AAEP,OAAO;KACF,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,4BAAiB,CAAC,CAAC;AAE/B,OAAO;KACF,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,KAAK,EAAE,KAAc,EAAE,EAAE;IAC7B,IAAI,CAAC;QACD,MAAM,IAAA,uBAAY,EAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,YAAa,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,OAAO;KACF,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,QAAQ,CAAC;KACrB,MAAM,CAAC,KAAK,EAAE,KAAc,EAAE,EAAE;IAC7B,IAAI,CAAC;QACD,MAAM,IAAA,qBAAU,EAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,YAAa,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,oBAAoB;AACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChC,OAAO,CAAC,UAAU,EAAE,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"nasl.js","sourceRoot":"","sources":["../../src/bin/nasl.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,0CAAuG;AACvG,4CAAyC;AACzC,sEAAqC;AACrC,yCAA6C;AAE7C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAG9B,MAAM,gBAAgB,GAAG;;;;;yBAKA,CAAC;AAE1B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC;;;0BAGP,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,sBAAG,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;AAChG,OAAO;KACF,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,eAAe,CAAC;KAC5B,MAAM,CAAC,GAAG,EAAE;IACT,IAAA,sBAAW,GAAE,CAAC;AAClB,CAAC,CAAC,CAAC;AAEP,OAAO;KACF,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,4BAAiB,CAAC,CAAC;AAE/B,OAAO;KACF,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,KAAK,EAAE,KAAc,EAAE,EAAE;IAC7B,IAAI,CAAC;QACD,MAAM,IAAA,uBAAY,EAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,YAAa,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,OAAO;KACF,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,eAAe,CAAC;KAC5B,MAAM,CAAC,KAAK,EAAE,KAAc,EAAE,EAAE;IAC7B,IAAI,CAAC;QACD,MAAM,IAAA,gBAAU,EAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,cAAe,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,OAAO;KACF,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,QAAQ,CAAC;KACrB,MAAM,CAAC,KAAK,EAAE,KAAc,EAAE,EAAE;IAC7B,IAAI,CAAC;QACD,MAAM,IAAA,qBAAU,EAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,YAAa,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,oBAAoB;AACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChC,OAAO,CAAC,UAAU,EAAE,CAAC;AACzB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 检查命令 - 检查 NASL 代码的语法和语义
3
+ */
4
+ export declare function checkCommand(entry?: string): Promise<void>;
5
+ //# sourceMappingURL=check%20copy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check copy.d.ts","sourceRoot":"","sources":["../../src/commands/check copy.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBhE"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkCommand = checkCommand;
4
+ const utils_1 = require("../utils");
5
+ const apis_1 = require("../apis");
6
+ const compose_1 = require("../services/compose");
7
+ const resolve_1 = require("../services/resolve");
8
+ /**
9
+ * 检查命令 - 检查 NASL 代码的语法和语义
10
+ */
11
+ async function checkCommand(entry) {
12
+ utils_1.Logger.info('开始检查 NASL 代码...');
13
+ // 收集需要检查的文件
14
+ const { inputFiles, config } = await (0, resolve_1.resolveNASLFiles)(entry);
15
+ // 调用检查 API
16
+ utils_1.Logger.newLine();
17
+ utils_1.Logger.info('正在调用检查服务,对语法和语义进行检查...');
18
+ const result = await (0, apis_1.check)((0, compose_1.composeToString)(inputFiles), {
19
+ serverBaseURL: config.serverBaseURL,
20
+ ideVersion: config.ideVersion,
21
+ });
22
+ if (result) {
23
+ utils_1.Logger.error('\n' + result);
24
+ process.exit(1);
25
+ }
26
+ else {
27
+ // Logger.debug('检查通过!');
28
+ }
29
+ }
30
+ //# sourceMappingURL=check%20copy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check copy.js","sourceRoot":"","sources":["../../src/commands/check copy.ts"],"names":[],"mappings":";;AAQA,oCAoBC;AA5BD,oCAAkC;AAClC,kCAAgC;AAChC,iDAAsD;AACtD,iDAAuD;AAEvD;;GAEG;AACI,KAAK,UAAU,YAAY,CAAC,KAAc;IAC7C,cAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAE/B,YAAY;IACZ,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,0BAAgB,EAAC,KAAK,CAAC,CAAC;IAE7D,WAAW;IACX,cAAM,CAAC,OAAO,EAAE,CAAC;IACjB,cAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,IAAA,YAAK,EAAC,IAAA,yBAAe,EAAC,UAAU,CAAC,EAAE;QACpD,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,UAAU,EAAE,MAAM,CAAC,UAAU;KAChC,CAAC,CAAC;IAEH,IAAI,MAAM,EAAE,CAAC;QACT,cAAM,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;SAAM,CAAC;QACJ,yBAAyB;IAC7B,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBhE"}
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBhE"}
@@ -15,7 +15,9 @@ async function checkCommand(entry) {
15
15
  // 调用检查 API
16
16
  utils_1.Logger.newLine();
17
17
  utils_1.Logger.info('正在调用检查服务,对语法和语义进行检查...');
18
- const result = await (0, apis_1.check)((0, compose_1.composeToString)(inputFiles), {
18
+ const fullNaturalTS = (0, compose_1.composeToString)(inputFiles);
19
+ utils_1.Logger.debug(fullNaturalTS);
20
+ const result = await (0, apis_1.check)(fullNaturalTS, {
19
21
  serverBaseURL: config.serverBaseURL,
20
22
  ideVersion: config.ideVersion,
21
23
  });
@@ -1 +1 @@
1
- {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":";;AAQA,oCAoBC;AA5BD,oCAAkC;AAClC,kCAAgC;AAChC,iDAAsD;AACtD,iDAAuD;AAEvD;;GAEG;AACI,KAAK,UAAU,YAAY,CAAC,KAAc;IAC7C,cAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAE/B,YAAY;IACZ,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,0BAAgB,EAAC,KAAK,CAAC,CAAC;IAE7D,WAAW;IACX,cAAM,CAAC,OAAO,EAAE,CAAC;IACjB,cAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,IAAA,YAAK,EAAC,IAAA,yBAAe,EAAC,UAAU,CAAC,EAAE;QACpD,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,UAAU,EAAE,MAAM,CAAC,UAAU;KAChC,CAAC,CAAC;IAEH,IAAI,MAAM,EAAE,CAAC;QACT,cAAM,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;SAAM,CAAC;QACJ,yBAAyB;IAC7B,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":";;AAQA,oCAsBC;AA9BD,oCAAkC;AAClC,kCAAgC;AAChC,iDAAsD;AACtD,iDAAuD;AAEvD;;GAEG;AACI,KAAK,UAAU,YAAY,CAAC,KAAc;IAC7C,cAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAE/B,YAAY;IACZ,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,0BAAgB,EAAC,KAAK,CAAC,CAAC;IAE7D,WAAW;IACX,cAAM,CAAC,OAAO,EAAE,CAAC;IACjB,cAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACtC,MAAM,aAAa,GAAG,IAAA,yBAAe,EAAC,UAAU,CAAC,CAAC;IAClD,cAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,IAAA,YAAK,EAAC,aAAa,EAAE;QACtC,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,UAAU,EAAE,MAAM,CAAC,UAAU;KAChC,CAAC,CAAC;IAEH,IAAI,MAAM,EAAE,CAAC;QACT,cAAM,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;SAAM,CAAC;QACJ,yBAAyB;IAC7B,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAsB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM;;;GAkClD;AAED,wBAAsB,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,iBAOrD"}
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAsB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM;;;GAoClD;AAED,wBAAsB,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,iBAOrD"}
@@ -53,7 +53,9 @@ async function compileCommand(entry) {
53
53
  utils_1.Logger.newLine();
54
54
  utils_1.Logger.info('正在调用编译服务...');
55
55
  try {
56
- const outputFiles = await (0, apis_1.compile)((0, compose_1.composeToString)(inputFiles), {
56
+ const fullNaturalTS = (0, compose_1.composeToString)(inputFiles);
57
+ utils_1.Logger.debug(fullNaturalTS);
58
+ const outputFiles = await (0, apis_1.compile)(fullNaturalTS, {
57
59
  serverBaseURL: config.serverBaseURL,
58
60
  ideVersion: config.ideVersion,
59
61
  });
@@ -1 +1 @@
1
- {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,wCAkCC;AAED,8CAOC;AApDD,2CAA6B;AAC7B,oCAAoD;AACpD,kCAAkC;AAClC,iDAAsD;AACtD,iDAAuD;AAEvD;;GAEG;AACI,KAAK,UAAU,cAAc,CAAC,KAAc;IAC/C,cAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAE/B,YAAY;IACZ,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,0BAAgB,EAAC,KAAK,CAAC,CAAC;IAE1E,cAAM,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAErD,WAAW;IACX,cAAM,CAAC,OAAO,EAAE,CAAC;IACjB,cAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3B,IAAI,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,IAAA,cAAO,EAAC,IAAA,yBAAe,EAAC,UAAU,CAAC,EAAE;YAC3D,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,UAAU,EAAE,MAAM,CAAC,UAAU;SAChC,CAAC,CAAC;QACH,cAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAExB,SAAS;QACT,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,IAAA,wBAAgB,EAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3C,cAAM,CAAC,KAAK,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,cAAM,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,MAAM,MAAM,CAAC,CAAC;QAC5C,cAAM,CAAC,OAAO,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,cAAM,CAAC,KAAK,CAAC,UAAW,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,KAAc;IAClD,IAAI,CAAC;QACD,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,cAAM,CAAC,KAAK,CAAC,YAAa,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,wCAoCC;AAED,8CAOC;AAtDD,2CAA6B;AAC7B,oCAAoD;AACpD,kCAAkC;AAClC,iDAAsD;AACtD,iDAAuD;AAEvD;;GAEG;AACI,KAAK,UAAU,cAAc,CAAC,KAAc;IAC/C,cAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAE/B,YAAY;IACZ,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,0BAAgB,EAAC,KAAK,CAAC,CAAC;IAE1E,cAAM,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAErD,WAAW;IACX,cAAM,CAAC,OAAO,EAAE,CAAC;IACjB,cAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3B,IAAI,CAAC;QACD,MAAM,aAAa,GAAG,IAAA,yBAAe,EAAC,UAAU,CAAC,CAAC;QAClD,cAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5B,MAAM,WAAW,GAAG,MAAM,IAAA,cAAO,EAAC,aAAa,EAAE;YAC7C,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,UAAU,EAAE,MAAM,CAAC,UAAU;SAChC,CAAC,CAAC;QACH,cAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAExB,SAAS;QACT,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,IAAA,wBAAgB,EAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3C,cAAM,CAAC,KAAK,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,cAAM,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,MAAM,MAAM,CAAC,CAAC;QAC5C,cAAM,CAAC,OAAO,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,cAAM,CAAC,KAAK,CAAC,UAAW,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,KAAc;IAClD,IAAI,CAAC;QACD,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,cAAM,CAAC,KAAK,CAAC,YAAa,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 检查命令 - 检查 NASL 代码的语法和语义
3
+ */
4
+ export declare function depCommand(entry?: string): Promise<void>;
5
+ //# sourceMappingURL=dep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dep.d.ts","sourceRoot":"","sources":["../../src/commands/dep.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAsB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9D"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.depCommand = depCommand;
4
+ const utils_1 = require("../utils");
5
+ const resolve_1 = require("../services/resolve");
6
+ /**
7
+ * 检查命令 - 检查 NASL 代码的语法和语义
8
+ */
9
+ async function depCommand(entry) {
10
+ utils_1.Logger.info('开始进行依赖分析...');
11
+ await (0, resolve_1.resolveNASLFiles)(entry, true);
12
+ }
13
+ //# sourceMappingURL=dep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dep.js","sourceRoot":"","sources":["../../src/commands/dep.ts"],"names":[],"mappings":";;AAMA,gCAIC;AAVD,oCAAkC;AAClC,iDAAuD;AAEvD;;GAEG;AACI,KAAK,UAAU,UAAU,CAAC,KAAc;IAC3C,cAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAE3B,MAAM,IAAA,0BAAgB,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAsB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK9D"}
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO9D"}
@@ -1,9 +1,43 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.devCommand = devCommand;
4
37
  const exec_1 = require("../utils/exec");
5
38
  const logger_1 = require("../utils/logger");
6
39
  const compile_1 = require("./compile");
40
+ const path = __importStar(require("path"));
7
41
  /**
8
42
  * 编译命令 - 将 NASL 编译为 Vue 和 JS
9
43
  */
@@ -11,6 +45,7 @@ async function devCommand(entry) {
11
45
  const { outDir } = await (0, compile_1.compileCommand)(entry);
12
46
  logger_1.Logger.newLine();
13
47
  logger_1.Logger.info('正在启动开发服务...');
14
- await (0, exec_1.justExecCommandSync)('npm run dev', outDir);
48
+ const configRelativePath = path.relative(outDir, path.resolve(__dirname, '../../build/webpack.config.js'));
49
+ await (0, exec_1.justExecCommandSync)(`npx webpack serve --config ${configRelativePath}`, outDir);
15
50
  }
16
51
  //# sourceMappingURL=dev.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":";;AAOA,gCAKC;AAZD,wCAAoD;AACpD,4CAAyC;AACzC,uCAA2C;AAE3C;;GAEG;AACI,KAAK,UAAU,UAAU,CAAC,KAAc;IAC3C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,wBAAc,EAAC,KAAK,CAAC,CAAC;IAC/C,eAAM,CAAC,OAAO,EAAE,CAAC;IACjB,eAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3B,MAAM,IAAA,0BAAmB,EAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,gCAOC;AAfD,wCAAoD;AACpD,4CAAyC;AACzC,uCAA2C;AAC3C,2CAA6B;AAE7B;;GAEG;AACI,KAAK,UAAU,UAAU,CAAC,KAAc;IAC3C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,wBAAc,EAAC,KAAK,CAAC,CAAC;IAC/C,eAAM,CAAC,OAAO,EAAE,CAAC;IACjB,eAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAE3B,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAC,CAAC;IAC3G,MAAM,IAAA,0BAAmB,EAAC,8BAA8B,kBAAkB,EAAE,EAAE,MAAM,CAAC,CAAC;AAC1F,CAAC"}
@@ -1,3 +1,5 @@
1
1
  import type { FileInfo } from "../types";
2
+ export declare function createSorter(): (a: string, b: string) => number;
3
+ export declare const sorter: (a: string, b: string) => number;
2
4
  export declare function composeToString(files: FileInfo[]): string;
3
5
  //# sourceMappingURL=compose.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/services/compose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AA8BzC,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAQzD"}
1
+ {"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/services/compose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,wBAAgB,YAAY,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,CA0B/D;AACD,eAAO,MAAM,MAAM,MA3BiB,MAAM,KAAK,MAAM,KAAK,MA2BtB,CAAC;AAErC,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAOzD"}
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sorter = void 0;
4
+ exports.createSorter = createSorter;
3
5
  exports.composeToString = composeToString;
4
6
  function createSorter() {
5
7
  const priorityOrder = ['app.dataSources', 'app.enums', 'app.structures', 'app.logics', 'app.frontendTypes'];
@@ -25,9 +27,9 @@ function createSorter() {
25
27
  }
26
28
  };
27
29
  }
30
+ exports.sorter = createSorter();
28
31
  function composeToString(files) {
29
- const sorter = createSorter();
30
- files.sort((a, b) => sorter(a.path, b.path));
32
+ files.sort((a, b) => (0, exports.sorter)(a.path, b.path));
31
33
  return files.map((file) => {
32
34
  const namespace = file.path.split('.').slice(0, -2).join('.');
33
35
  return `namespace ${namespace} {\n${file.content}\n}\n`;
@@ -1 +1 @@
1
- {"version":3,"file":"compose.js","sourceRoot":"","sources":["../../src/services/compose.ts"],"names":[],"mappings":";;AA8BA,0CAQC;AApCD,SAAS,YAAY;IACjB,MAAM,aAAa,GAAG,CAAC,iBAAiB,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;IAE5G,UAAU;IACV,MAAM,WAAW,GAAG,CAAC,GAAW,EAAU,EAAE;QACxC,MAAM,WAAW,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC;IAC7D,CAAC,CAAC;IAEF,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;QAC5B,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAEjC,WAAW;QACX,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,SAAS,GAAG,SAAS,CAAC;QACjC,CAAC;QAED,2BAA2B;QAC3B,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YAClB,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACJ,YAAY;YACZ,OAAO,CAAC,CAAC;QACb,CAAC;IACL,CAAC,CAAC;AACN,CAAC;AAED,SAAgB,eAAe,CAAC,KAAiB;IAC7C,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAE7C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9D,OAAO,aAAa,SAAS,OAAO,IAAI,CAAC,OAAO,OAAO,CAAC;IAC5D,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"compose.js","sourceRoot":"","sources":["../../src/services/compose.ts"],"names":[],"mappings":";;;AAEA,oCA0BC;AAGD,0CAOC;AApCD,SAAgB,YAAY;IACxB,MAAM,aAAa,GAAG,CAAC,iBAAiB,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;IAE5G,UAAU;IACV,MAAM,WAAW,GAAG,CAAC,GAAW,EAAU,EAAE;QACxC,MAAM,WAAW,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC;IAC7D,CAAC,CAAC;IAEF,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;QAC5B,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAEjC,WAAW;QACX,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,SAAS,GAAG,SAAS,CAAC;QACjC,CAAC;QAED,2BAA2B;QAC3B,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YAClB,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACJ,YAAY;YACZ,OAAO,CAAC,CAAC;QACb,CAAC;IACL,CAAC,CAAC;AACN,CAAC;AACY,QAAA,MAAM,GAAG,YAAY,EAAE,CAAC;AAErC,SAAgB,eAAe,CAAC,KAAiB;IAC7C,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAA,cAAM,EAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAE7C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9D,OAAO,aAAa,SAAS,OAAO,IAAI,CAAC,OAAO,OAAO,CAAC;IAC5D,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC"}
@@ -3,6 +3,7 @@ import type { FileInfo, NASLRepresentation, NASLConfig } from '../types';
3
3
  * 扫描目录下的所有 NASL 文件
4
4
  */
5
5
  export declare function scanNASLFiles(srcDir: string, representation: NASLRepresentation): Promise<string[]>;
6
+ export declare function scanEntryFiles(projectRoot: string, patterns: string[]): Promise<string[]>;
6
7
  export interface ResolveFilesResult {
7
8
  inputFiles: FileInfo[];
8
9
  config: NASLConfig;
@@ -11,8 +12,8 @@ export interface ResolveFilesResult {
11
12
  }
12
13
  /**
13
14
  * 解析需要处理的文件(包含配置加载和目录设置)
14
- * @param entry 入口文件路径(可选)
15
+ * @param entry 入口文件路径或 glob 模式(可选,相对于 src 目录)
15
16
  * @returns 文件信息、配置和目录信息
16
17
  */
17
- export declare function resolveNASLFiles(entry?: string): Promise<ResolveFilesResult>;
18
+ export declare function resolveNASLFiles(entry?: string, depMode?: boolean): Promise<ResolveFilesResult>;
18
19
  //# sourceMappingURL=resolve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/services/resolve.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEzE;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAazG;AAED,MAAM,WAAW,kBAAkB;IAC/B,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAkDlF"}
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/services/resolve.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAIzE;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAazG;AAED,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAa/F;AAoKD,MAAM,WAAW,kBAAkB;IAC/B,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAqDrG"}
@@ -34,17 +34,20 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.scanNASLFiles = scanNASLFiles;
37
+ exports.scanEntryFiles = scanEntryFiles;
37
38
  exports.resolveNASLFiles = resolveNASLFiles;
38
39
  const path = __importStar(require("path"));
39
40
  const globby = require("globby");
40
41
  const utils_1 = require("../utils");
42
+ const chalk = require("chalk");
43
+ const compose_1 = require("./compose");
41
44
  /**
42
45
  * 扫描目录下的所有 NASL 文件
43
46
  */
44
47
  async function scanNASLFiles(srcDir, representation) {
45
48
  try {
46
49
  const pattern = representation === 'NaturalTS' ? '**/*.{ts,tsx}' : '**/*.nasl';
47
- const files = await globby(pattern, {
50
+ const files = await globby([pattern, '!**/*.css'], {
48
51
  cwd: srcDir,
49
52
  onlyFiles: true,
50
53
  absolute: false,
@@ -56,12 +59,160 @@ async function scanNASLFiles(srcDir, representation) {
56
59
  throw error;
57
60
  }
58
61
  }
62
+ async function scanEntryFiles(projectRoot, patterns) {
63
+ try {
64
+ patterns.push('!**/*.css');
65
+ const files = await globby(patterns, {
66
+ cwd: projectRoot,
67
+ onlyFiles: true,
68
+ absolute: false,
69
+ });
70
+ return files;
71
+ }
72
+ catch (error) {
73
+ utils_1.Logger.error(`扫描入口文件失败: ${error.message}`);
74
+ throw error;
75
+ }
76
+ }
77
+ /**
78
+ * 从文件内容中提取 app.* 格式的依赖引用
79
+ * @param content 文件内容
80
+ * @returns 依赖的 app.* 路径列表
81
+ */
82
+ function extractDeps(content) {
83
+ const deps = new Set();
84
+ const allMatches = content.matchAll(/app\.\w+\.[\w.]+/g); // 起码要2个点
85
+ for (const match of allMatches) {
86
+ let dep = match[0];
87
+ if (/Entity$|Entity\./.test(dep)) {
88
+ dep = dep.replace(/Entity(\..*)?$/, '');
89
+ }
90
+ else if (/\.enums\.(\w+)\.(\w+)/.test(dep)) {
91
+ dep = dep.replace(/\.enums\.(\w+).+$/, '.enums.$1');
92
+ }
93
+ dep = `${dep}.${dep.includes('.views.') ? 'tsx' : 'ts'}`;
94
+ deps.add(dep);
95
+ }
96
+ return Array.from(deps);
97
+ }
98
+ /**
99
+ * 提取页面文件的签名,移除函数体
100
+ * @param content 页面文件内容
101
+ * @returns 只包含签名的内容
102
+ */
103
+ function replaceViewAsSignature(content) {
104
+ return content.replace(/export function ((\w+)\([^)]*\)) \{[\s\S]+$/, 'export declare function $1;');
105
+ }
106
+ /**
107
+ * 处理单个文件的依赖
108
+ * @param pathRelativeToSrc 文件相对路径
109
+ * @param srcDir 源代码目录
110
+ * @param matchedFiles 入口文件列表
111
+ * @param processedFileMap 已处理的文件集合
112
+ * @returns 文件信息和新发现的依赖文件列表
113
+ */
114
+ function processFileDeps(pathRelativeToSrc, srcDir, matchedFileSet, processedFileMap, verbose) {
115
+ const absoluteFilePath = path.join(srcDir, pathRelativeToSrc);
116
+ const fileInfo = { path: pathRelativeToSrc, content: '' };
117
+ try {
118
+ fileInfo.content = (0, utils_1.readFileWithLog)(absoluteFilePath);
119
+ }
120
+ catch (error) {
121
+ utils_1.Logger.warn(`无法读取文件 ${pathRelativeToSrc},跳过`);
122
+ throw error;
123
+ }
124
+ const isView = pathRelativeToSrc.endsWith('.tsx');
125
+ const isEntryFile = matchedFileSet.has(pathRelativeToSrc);
126
+ // 如果是页面文件且不是入口文件,只保留签名,但要继续分析依赖
127
+ if (isView && !isEntryFile) {
128
+ // Logger.debug(`提取页面签名: ${pathRelativeToSrc}`);
129
+ fileInfo.content = replaceViewAsSignature(fileInfo.content);
130
+ }
131
+ processedFileMap.set(pathRelativeToSrc, fileInfo);
132
+ // 提取依赖
133
+ const deps = extractDeps(fileInfo.content);
134
+ if (verbose || process.env.DEBUG) {
135
+ console.log(`${isEntryFile ? chalk.magenta('[Entry]') : chalk.green('[ Dep ]')} ${pathRelativeToSrc}${deps.map((dep) => `\n├── ${dep}`).join('')}`);
136
+ }
137
+ // 查找依赖文件
138
+ if (isView && !isEntryFile) {
139
+ const pathArr = pathRelativeToSrc.split('.');
140
+ pathArr.pop(); // 移除 .tsx
141
+ do {
142
+ pathArr.pop();
143
+ pathArr.pop();
144
+ const namespace = pathArr.join('.') + '.tsx';
145
+ deps.push(namespace);
146
+ } while (pathArr.length > 0 && pathArr[pathArr.length - 1] !== 'pc' && pathArr.includes('views'));
147
+ }
148
+ const newDeps = [];
149
+ for (const dep of deps) {
150
+ if (processedFileMap.has(dep))
151
+ continue;
152
+ newDeps.push(dep);
153
+ }
154
+ return {
155
+ fileInfo,
156
+ newDeps,
157
+ };
158
+ }
159
+ /**
160
+ * 收集入口文件及其依赖
161
+ * @param patterns 入口文件的 glob 模式数组
162
+ * @param srcDir 源代码目录绝对路径
163
+ * @param representation NASL 表示形式
164
+ * @returns 文件信息列表
165
+ */
166
+ async function collectDeps(patterns, projectRoot, srcDir, representation, verbose) {
167
+ const processedFileMap = new Map(); // 已处理的文件(相对路径)
168
+ const filesToProcess = []; // 待处理的文件队列
169
+ const result = [];
170
+ // 1. 使用 glob 匹配入口文件
171
+ utils_1.Logger.newLine();
172
+ utils_1.Logger.info(`匹配入口文件: ${patterns.join(', ')}`);
173
+ const matchedFiles = await scanEntryFiles(projectRoot, patterns); // src/..
174
+ if (matchedFiles.length === 0) {
175
+ utils_1.Logger.error(`未找到匹配的入口文件: ${patterns.join(', ')}`);
176
+ throw new Error('未找到匹配的入口文件');
177
+ }
178
+ utils_1.Logger.info(`找到 ${matchedFiles.length} 个入口文件`);
179
+ const absoluteSrcDir = path.resolve(srcDir);
180
+ const matchedFileSet = new Set();
181
+ matchedFiles.forEach((pathRelativeToRoot) => {
182
+ // 统一使用相对于 src 的路径
183
+ const absoluteFilePath = path.resolve(projectRoot, pathRelativeToRoot);
184
+ // 判断 file 是否超出 srcDir 目录(支持相对路径和绝对路径)
185
+ if (!absoluteFilePath.startsWith(absoluteSrcDir))
186
+ throw new Error(`入口文件 ${absoluteFilePath} 超出了源代码目录 ${srcDir}`);
187
+ const pathRelativeToSrc = path.relative(srcDir, absoluteFilePath);
188
+ filesToProcess.push(pathRelativeToSrc);
189
+ matchedFileSet.add(pathRelativeToSrc);
190
+ });
191
+ filesToProcess.sort(compose_1.sorter);
192
+ // 2. 广度优先遍历依赖
193
+ while (filesToProcess.length > 0) {
194
+ const pathRelativeToSrc = filesToProcess.shift();
195
+ if (processedFileMap.has(pathRelativeToSrc))
196
+ continue; // 跳过已处理的文件
197
+ try {
198
+ const { fileInfo, newDeps } = processFileDeps(pathRelativeToSrc, srcDir, matchedFileSet, processedFileMap, verbose);
199
+ result.push(fileInfo);
200
+ filesToProcess.push(...newDeps);
201
+ }
202
+ catch (error) {
203
+ // 文件读取失败,已经在 processFileDeps 中记录日志
204
+ continue;
205
+ }
206
+ }
207
+ utils_1.Logger.info(`依赖分析完成,共收集到 ${result.length} 个文件`);
208
+ return result;
209
+ }
59
210
  /**
60
211
  * 解析需要处理的文件(包含配置加载和目录设置)
61
- * @param entry 入口文件路径(可选)
212
+ * @param entry 入口文件路径或 glob 模式(可选,相对于 src 目录)
62
213
  * @returns 文件信息、配置和目录信息
63
214
  */
64
- async function resolveNASLFiles(entry) {
215
+ async function resolveNASLFiles(entry, depMode) {
65
216
  // 加载配置
66
217
  const config = (0, utils_1.loadConfig)();
67
218
  const projectRoot = (0, utils_1.getProjectRoot)();
@@ -70,22 +221,27 @@ async function resolveNASLFiles(entry) {
70
221
  const srcDir = path.join(projectRoot, config.srcDir);
71
222
  // 收集需要处理的文件
72
223
  let inputFiles = [];
224
+ if (!entry && depMode)
225
+ entry = 'src/**/*.{ts,tsx}';
73
226
  if (entry) {
74
- // 处理指定入口文件及其依赖
75
- const entryPath = path.resolve(projectRoot, entry);
76
- utils_1.Logger.info(`入口文件: ${entry}`);
77
- // TODO: 这里需要实现依赖分析,收集所有依赖文件
78
- // 目前简单实现:只读取入口文件
79
- const content = (0, utils_1.readFileWithLog)(entryPath);
80
- inputFiles = [{
81
- path: path.relative(projectRoot, entryPath),
82
- content,
83
- }];
227
+ // 检查入口路径是否在源代码目录外面
228
+ // if (entry.startsWith('..')) throw new Error('入口路径不能在源代码目录外面');
229
+ // entry 是相对于项目根目录的路径,例如:src/app.enums.Status.ts, src/app.enums.*.ts, src/app.{*.entities.*.ts,enums.*.ts}, src/**/*.tsx
230
+ // 具体路径也转换为 glob 模式统一处理
231
+ // 使用依赖分析收集文件
232
+ try {
233
+ inputFiles = await collectDeps([entry], projectRoot, srcDir, config.representation, depMode);
234
+ }
235
+ catch (error) {
236
+ utils_1.Logger.error(`依赖分析失败: ${error.message}`);
237
+ throw error;
238
+ }
84
239
  }
85
240
  else {
86
241
  // 扫描整个 src 目录
87
242
  utils_1.Logger.info('扫描整个源代码目录...');
88
243
  const filePaths = await scanNASLFiles(srcDir, config.representation);
244
+ filePaths.sort(compose_1.sorter);
89
245
  utils_1.Logger.debug(filePaths);
90
246
  inputFiles = filePaths.map((filePath) => ({
91
247
  path: filePath,
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/services/resolve.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,sCAaC;AAcD,4CAkDC;AArFD,2CAA6B;AAC7B,iCAAkC;AAClC,oCAA+E;AAG/E;;GAEG;AACI,KAAK,UAAU,aAAa,CAAC,MAAc,EAAE,cAAkC;IAClF,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,cAAc,KAAK,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC;QAC/E,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE;YAChC,GAAG,EAAE,MAAM;YACX,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,KAAK;SAClB,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,cAAM,CAAC,KAAK,CAAC,WAAY,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AASD;;;;GAIG;AACI,KAAK,UAAU,gBAAgB,CAAC,KAAc;IACjD,OAAO;IACP,MAAM,MAAM,GAAG,IAAA,kBAAU,GAAE,CAAC;IAC5B,MAAM,WAAW,GAAG,IAAA,sBAAc,GAAE,CAAC;IAErC,cAAM,CAAC,IAAI,CAAC,UAAU,WAAW,EAAE,CAAC,CAAC;IACrC,cAAM,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAErD,YAAY;IACZ,IAAI,UAAU,GAAe,EAAE,CAAC;IAEhC,IAAI,KAAK,EAAE,CAAC;QACR,eAAe;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACnD,cAAM,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;QAE9B,4BAA4B;QAC5B,iBAAiB;QACjB,MAAM,OAAO,GAAG,IAAA,uBAAe,EAAC,SAAS,CAAC,CAAC;QAC3C,UAAU,GAAG,CAAC;gBACV,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;gBAC3C,OAAO;aACV,CAAC,CAAC;IACP,CAAC;SAAM,CAAC;QACJ,cAAc;QACd,cAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5B,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;QACrE,cAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAExB,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,IAAA,uBAAe,EAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;SACxD,CAAC,CAAC,CAAC;QAEJ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,cAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,cAAM,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,MAAM,YAAY,CAAC,CAAC;IACrD,CAAC;IAED,OAAO;QACH,UAAU;QACV,MAAM;QACN,WAAW;QACX,MAAM;KACT,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/services/resolve.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nasl/cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "NASL (Next Application Specific Language) CLI tool for checking, compiling and developing NASL code",
5
5
  "main": "out/index.js",
6
6
  "bin": {
@@ -14,7 +14,10 @@
14
14
  "lint:fix": "eslint src --ext .ts --fix",
15
15
  "format": "prettier --write \"src/**/*.ts\"",
16
16
  "prepublishOnly": "pnpm run build",
17
- "release": "npm publish --access public"
17
+ "release": "npm publish --access public",
18
+ "nasl:dev": "webpack serve --mode development",
19
+ "nasl:build": "webpack --mode production",
20
+ "nasl:preview": "webpack serve --mode production"
18
21
  },
19
22
  "keywords": [
20
23
  "nasl",
@@ -39,7 +42,17 @@
39
42
  "eslint-config-alloy": "^5.1.2",
40
43
  "fs-extra": "^11.3.2",
41
44
  "globby": "^11.1.0",
42
- "prettier": "^3.6.2"
45
+ "prettier": "^3.6.2",
46
+ "css-loader": "^6.8.1",
47
+ "html-webpack-plugin": "^5.5.3",
48
+ "lodash": "^4.17.21",
49
+ "vue": "^3.4.0",
50
+ "vue-router": "^4.0.0",
51
+ "style-loader": "^3.3.3",
52
+ "vue-loader": "^17.3.0",
53
+ "webpack": "^5.89.0",
54
+ "webpack-cli": "^5.1.4",
55
+ "webpack-dev-server": "^4.15.1"
43
56
  },
44
57
  "engines": {
45
58
  "node": ">=16.0.0"
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=nasl-compile.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nasl-compile.d.ts","sourceRoot":"","sources":["../../src/bin/nasl-compile.ts"],"names":[],"mappings":""}
@@ -1,22 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- const commander_1 = require("commander");
5
- const commands_1 = require("../commands");
6
- const logger_1 = require("../utils/logger");
7
- const program = new commander_1.Command();
8
- program
9
- .name('nasl-compile')
10
- .description('编译 NASL 代码为 JavaScript')
11
- .argument('[entry]', '入口文件路径(可选,不填则编译整个 src 目录)')
12
- .action(async (entry) => {
13
- try {
14
- await (0, commands_1.compileCommand)(entry);
15
- }
16
- catch (error) {
17
- logger_1.Logger.error(`编译过程发生错误:${error.message}`);
18
- process.exit(1);
19
- }
20
- });
21
- program.parse(process.argv);
22
- //# sourceMappingURL=nasl-compile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nasl-compile.js","sourceRoot":"","sources":["../../src/bin/nasl-compile.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAA6C;AAC7C,4CAAyC;AAEzC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACF,IAAI,CAAC,cAAc,CAAC;KACpB,WAAW,CAAC,wBAAwB,CAAC;KACrC,QAAQ,CAAC,SAAS,EAAE,2BAA2B,CAAC;KAChD,MAAM,CAAC,KAAK,EAAE,KAAc,EAAE,EAAE;IAC7B,IAAI,CAAC;QACD,MAAM,IAAA,yBAAc,EAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,YAAa,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -1,5 +0,0 @@
1
- /**
2
- * 转换命令 - 将 NASL 转换为 AST JSON
3
- */
4
- export declare function transpileCommand(entry?: string): Promise<void>;
5
- //# sourceMappingURL=transpile.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transpile.d.ts","sourceRoot":"","sources":["../../src/commands/transpile.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFpE"}
@@ -1,123 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.transpileCommand = transpileCommand;
37
- const path = __importStar(require("path"));
38
- const utils_1 = require("../utils");
39
- const apis_1 = require("../apis");
40
- /**
41
- * 转换命令 - 将 NASL 转换为 AST JSON
42
- */
43
- async function transpileCommand(entry) {
44
- try {
45
- // 加载配置
46
- const config = (0, utils_1.loadConfig)();
47
- const projectRoot = (0, utils_1.getProjectRoot)();
48
- utils_1.Logger.info('开始转换 NASL 代码...');
49
- utils_1.Logger.info(`项目根目录: ${projectRoot}`);
50
- utils_1.Logger.info(`源代码目录: ${config.srcDir}`);
51
- utils_1.Logger.info(`输出目录: ${config.outDir}`);
52
- const srcDir = path.join(projectRoot, config.srcDir);
53
- const outDir = path.join(projectRoot, config.outDir);
54
- // 收集需要转换的文件
55
- let files = [];
56
- if (entry) {
57
- // 转换指定入口文件及其依赖
58
- const entryPath = path.resolve(projectRoot, entry);
59
- utils_1.Logger.info(`入口文件: ${entry}`);
60
- // TODO: 这里需要实现依赖分析,收集所有依赖文件
61
- // 目前简单实现:只读取入口文件
62
- const content = (0, utils_1.readFileWithLog)(entryPath);
63
- files = [
64
- {
65
- path: path.relative(projectRoot, entryPath),
66
- content,
67
- },
68
- ];
69
- }
70
- else {
71
- // 转换整个 src 目录
72
- utils_1.Logger.info('转换整个源代码目录...');
73
- const filePaths = await (0, utils_1.scanNASLFiles)(srcDir, config.representation);
74
- files = filePaths.map((filePath) => ({
75
- path: filePath,
76
- content: (0, utils_1.readFileWithLog)(path.join(projectRoot, filePath)),
77
- }));
78
- utils_1.Logger.info(`找到 ${files.length} 个 NASL 文件`);
79
- }
80
- if (files.length === 0) {
81
- utils_1.Logger.warn('未找到需要转换的文件');
82
- return;
83
- }
84
- // 调用转换 API
85
- utils_1.Logger.info('正在调用转换服务...');
86
- const result = await (0, apis_1.transpile)(files, {
87
- entry,
88
- srcDir: config.srcDir,
89
- outDir: config.outDir,
90
- serverBaseURL: config.serverBaseURL,
91
- ideVersion: config.ideVersion,
92
- });
93
- // 处理转换结果
94
- if (result.success && result.files) {
95
- utils_1.Logger.success('转换成功!');
96
- utils_1.Logger.info(`生成 ${result.files.length} 个 AST JSON 文件`);
97
- // 写入输出文件
98
- for (const file of result.files) {
99
- const outputPath = path.join(outDir, file.path);
100
- (0, utils_1.writeFileWithLog)(outputPath, file.content);
101
- utils_1.Logger.debug(`写入文件: ${outputPath}`);
102
- }
103
- utils_1.Logger.success(`所有文件已输出到: ${outDir}`);
104
- }
105
- else if (result.errors && result.errors.length > 0) {
106
- utils_1.Logger.error('转换失败!');
107
- utils_1.Logger.error('\n错误信息:');
108
- for (const error of result.errors) {
109
- console.error(` ${error.file}:${error.line}:${error.column} - [${error.type}] ${error.message}`);
110
- }
111
- process.exit(1);
112
- }
113
- else {
114
- utils_1.Logger.error('转换失败:未知错误');
115
- process.exit(1);
116
- }
117
- }
118
- catch (error) {
119
- utils_1.Logger.error(`转换过程发生错误: ${error.message}`);
120
- process.exit(1);
121
- }
122
- }
123
- //# sourceMappingURL=transpile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transpile.js","sourceRoot":"","sources":["../../src/commands/transpile.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import type { FileInfo, NASLRepresentation, NASLConfig } from '../types';
2
- /**
3
- * 扫描目录下的所有 NASL 文件
4
- */
5
- export declare function scanNASLFiles(srcDir: string, representation: NASLRepresentation): Promise<string[]>;
6
- export interface ResolveFilesResult {
7
- inputFiles: FileInfo[];
8
- config: NASLConfig;
9
- projectRoot: string;
10
- srcDir: string;
11
- }
12
- /**
13
- * 解析需要处理的文件(包含配置加载和目录设置)
14
- * @param entry 入口文件路径(可选)
15
- * @returns 文件信息、配置和目录信息
16
- */
17
- export declare function resolveFiles(entry?: string): Promise<ResolveFilesResult>;
18
- //# sourceMappingURL=resolveFiles.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveFiles.d.ts","sourceRoot":"","sources":["../../src/services/resolveFiles.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEzE;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAazG;AAED,MAAM,WAAW,kBAAkB;IAC/B,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA6C9E"}
@@ -1,103 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.scanNASLFiles = scanNASLFiles;
37
- exports.resolveFiles = resolveFiles;
38
- const path = __importStar(require("path"));
39
- const globby = require("globby");
40
- const utils_1 = require("../utils");
41
- /**
42
- * 扫描目录下的所有 NASL 文件
43
- */
44
- async function scanNASLFiles(srcDir, representation) {
45
- try {
46
- const pattern = representation === 'NaturalTS' ? '**/*.{ts,tsx}' : '**/*.nasl';
47
- const files = await globby(pattern, {
48
- cwd: srcDir,
49
- onlyFiles: true,
50
- absolute: false,
51
- });
52
- return files;
53
- }
54
- catch (error) {
55
- utils_1.Logger.error(`扫描文件失败: ${error.message}`);
56
- throw error;
57
- }
58
- }
59
- /**
60
- * 解析需要处理的文件(包含配置加载和目录设置)
61
- * @param entry 入口文件路径(可选)
62
- * @returns 文件信息、配置和目录信息
63
- */
64
- async function resolveFiles(entry) {
65
- // 加载配置
66
- const config = (0, utils_1.loadConfig)();
67
- const projectRoot = (0, utils_1.getProjectRoot)();
68
- utils_1.Logger.info(`项目根目录: ${projectRoot}`);
69
- utils_1.Logger.info(`源代码目录: ${config.srcDir}`);
70
- const srcDir = path.join(projectRoot, config.srcDir);
71
- // 收集需要处理的文件
72
- let inputFiles = [];
73
- if (entry) {
74
- // 处理指定入口文件及其依赖
75
- const entryPath = path.resolve(projectRoot, entry);
76
- utils_1.Logger.info(`入口文件: ${entry}`);
77
- // TODO: 这里需要实现依赖分析,收集所有依赖文件
78
- // 目前简单实现:只读取入口文件
79
- const content = (0, utils_1.readFileWithLog)(entryPath);
80
- inputFiles = [{
81
- path: path.relative(projectRoot, entryPath),
82
- content,
83
- }];
84
- }
85
- else {
86
- // 扫描整个 src 目录
87
- utils_1.Logger.info('扫描整个源代码目录...');
88
- const filePaths = await scanNASLFiles(srcDir, config.representation);
89
- utils_1.Logger.debug(filePaths);
90
- inputFiles = filePaths.map((filePath) => ({
91
- path: filePath,
92
- content: (0, utils_1.readFileWithLog)(path.join(srcDir, filePath)),
93
- }));
94
- utils_1.Logger.info(`找到 ${inputFiles.length} 个 NASL 文件`);
95
- }
96
- return {
97
- inputFiles,
98
- config,
99
- projectRoot,
100
- srcDir,
101
- };
102
- }
103
- //# sourceMappingURL=resolveFiles.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveFiles.js","sourceRoot":"","sources":["../../src/services/resolveFiles.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,sCAaC;AAcD,oCA6CC;AAhFD,2CAA6B;AAC7B,iCAAkC;AAClC,oCAA+E;AAG/E;;GAEG;AACI,KAAK,UAAU,aAAa,CAAC,MAAc,EAAE,cAAkC;IAClF,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,cAAc,KAAK,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC;QAC/E,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE;YAChC,GAAG,EAAE,MAAM;YACX,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,KAAK;SAClB,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,cAAM,CAAC,KAAK,CAAC,WAAY,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AASD;;;;GAIG;AACI,KAAK,UAAU,YAAY,CAAC,KAAc;IAC7C,OAAO;IACP,MAAM,MAAM,GAAG,IAAA,kBAAU,GAAE,CAAC;IAC5B,MAAM,WAAW,GAAG,IAAA,sBAAc,GAAE,CAAC;IAErC,cAAM,CAAC,IAAI,CAAC,UAAU,WAAW,EAAE,CAAC,CAAC;IACrC,cAAM,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAErD,YAAY;IACZ,IAAI,UAAU,GAAe,EAAE,CAAC;IAEhC,IAAI,KAAK,EAAE,CAAC;QACR,eAAe;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACnD,cAAM,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;QAE9B,4BAA4B;QAC5B,iBAAiB;QACjB,MAAM,OAAO,GAAG,IAAA,uBAAe,EAAC,SAAS,CAAC,CAAC;QAC3C,UAAU,GAAG,CAAC;gBACV,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;gBAC3C,OAAO;aACV,CAAC,CAAC;IACP,CAAC;SAAM,CAAC;QACJ,cAAc;QACd,cAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5B,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;QACrE,cAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAExB,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,IAAA,uBAAe,EAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;SACxD,CAAC,CAAC,CAAC;QAEJ,cAAM,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,MAAM,YAAY,CAAC,CAAC;IACrD,CAAC;IAED,OAAO;QACH,UAAU;QACV,MAAM;QACN,WAAW;QACX,MAAM;KACT,CAAC;AACN,CAAC"}