@ldsg/cli 0.3.46 → 0.3.47

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 (20) hide show
  1. package/.rush/temp/package-deps_build.json +8 -7
  2. package/.rush/temp/shrinkwrap-deps.json +0 -1
  3. package/.tsbuildinfo +1 -1
  4. package/CHANGELOG.json +23 -0
  5. package/CHANGELOG.md +8 -1
  6. package/dist/commands/generate/utils/generate-application/utils/build-app-generator-app/index.js +5 -12
  7. package/dist/commands/generate/utils/generate-application/utils/build-app-generator-app/index.js.map +1 -1
  8. package/dist/commands/generate/utils/generate-application/utils/build-meta-generator-app/index.js +6 -23
  9. package/dist/commands/generate/utils/generate-application/utils/build-meta-generator-app/index.js.map +1 -1
  10. package/dist/commands/generate/utils/generate-application/utils/index.d.ts +1 -0
  11. package/dist/commands/generate/utils/generate-application/utils/index.js +1 -0
  12. package/dist/commands/generate/utils/generate-application/utils/index.js.map +1 -1
  13. package/dist/commands/generate/utils/generate-application/utils/load-generator-app/index.d.ts +7 -0
  14. package/dist/commands/generate/utils/generate-application/utils/load-generator-app/index.js +30 -0
  15. package/dist/commands/generate/utils/generate-application/utils/load-generator-app/index.js.map +1 -0
  16. package/package.json +4 -4
  17. package/src/commands/generate/utils/generate-application/utils/build-app-generator-app/index.ts +8 -13
  18. package/src/commands/generate/utils/generate-application/utils/build-meta-generator-app/index.ts +7 -66
  19. package/src/commands/generate/utils/generate-application/utils/index.ts +1 -0
  20. package/src/commands/generate/utils/generate-application/utils/load-generator-app/index.ts +63 -0
package/CHANGELOG.json CHANGED
@@ -1,6 +1,29 @@
1
1
  {
2
2
  "name": "@ldsg/cli",
3
3
  "entries": [
4
+ {
5
+ "version": "0.3.47",
6
+ "tag": "@ldsg/cli_v0.3.47",
7
+ "date": "Wed, 04 Nov 2026 04:53:36 GMT",
8
+ "comments": {
9
+ "patch": [
10
+ {
11
+ "comment": "发布更新"
12
+ }
13
+ ],
14
+ "dependency": [
15
+ {
16
+ "comment": "Updating dependency \"@ldsg/handler\" to `0.3.47`"
17
+ },
18
+ {
19
+ "comment": "Updating dependency \"@ldsg/utils\" to `0.3.47`"
20
+ },
21
+ {
22
+ "comment": "Updating dependency \"@ldsg/types\" to `0.3.47`"
23
+ }
24
+ ]
25
+ }
26
+ },
4
27
  {
5
28
  "version": "0.3.46",
6
29
  "tag": "@ldsg/cli_v0.3.46",
package/CHANGELOG.md CHANGED
@@ -1,6 +1,13 @@
1
1
  # Change Log - @ldsg/cli
2
2
 
3
- This log was last generated on Tue, 03 Nov 2026 14:23:20 GMT and should not be manually modified.
3
+ This log was last generated on Wed, 04 Nov 2026 04:53:36 GMT and should not be manually modified.
4
+
5
+ ## 0.3.47
6
+ Wed, 04 Nov 2026 04:53:36 GMT
7
+
8
+ ### Patches
9
+
10
+ - 发布更新
4
11
 
5
12
  ## 0.3.46
6
13
  Tue, 03 Nov 2026 14:23:20 GMT
@@ -4,26 +4,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.buildAppGeneratorApp = void 0;
7
- const node_path_1 = __importDefault(require("node:path"));
8
7
  const node_os_1 = __importDefault(require("node:os"));
9
- const utils_1 = require("@ldsg/utils");
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const load_generator_app_1 = require("../load-generator-app");
10
10
  const META_GENERATOR_KIND = "meta_generator";
11
11
  const buildAppGeneratorApp = async (params) => {
12
12
  const { metaGenerator, ...restParams } = params;
13
13
  const { archive } = await metaGenerator.generate({ ...restParams, kind: META_GENERATOR_KIND });
14
- const outputPath = node_path_1.default.join(node_os_1.default.homedir(), ".ldsg", "app-generator");
15
- (0, utils_1.extractZipToFolder)({
14
+ const appGenerator = await (0, load_generator_app_1.loadGeneratorApp)({
16
15
  archive,
17
- outputPath,
16
+ outputPath: node_path_1.default.join(node_os_1.default.homedir(), ".ldsg", "app-generator"),
18
17
  });
19
18
  const res = {
20
- appGenerator: {
21
- generate: async () => {
22
- return {
23
- archive,
24
- };
25
- },
26
- },
19
+ appGenerator,
27
20
  };
28
21
  return res;
29
22
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/commands/generate/utils/generate-application/utils/build-app-generator-app/index.ts"],"names":[],"mappings":";;;;;;AACA,0DAA6B;AAC7B,sDAAyB;AACzB,uCAAiD;AAiBjD,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAEtC,MAAM,oBAAoB,GAAyB,KAAK,EAAE,MAAM,EAAE,EAAE;IACzE,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC;IAEhD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,EAAE,GAAG,UAAU,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAE/F,MAAM,UAAU,GAAG,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;IAErE,IAAA,0BAAkB,EAAC;QACjB,OAAO;QACP,UAAU;KACX,CAAC,CAAC;IAEH,MAAM,GAAG,GAA4B;QACnC,YAAY,EAAE;YACZ,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACnB,OAAO;oBACL,OAAO;iBACR,CAAC;YACJ,CAAC;SACF;KACF,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAvBW,QAAA,oBAAoB,wBAuB/B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/commands/generate/utils/generate-application/utils/build-app-generator-app/index.ts"],"names":[],"mappings":";;;;;;AACA,sDAAyB;AACzB,0DAA6B;AAC7B,8DAAyD;AAiBzD,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAEtC,MAAM,oBAAoB,GAAyB,KAAK,EAAE,MAAM,EAAE,EAAE;IACzE,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC;IAKhD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,EAAE,GAAG,UAAU,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAE/F,MAAM,YAAY,GAAG,MAAM,IAAA,qCAAgB,EAAC;QAC1C,OAAO;QACP,UAAU,EAAE,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,eAAe,CAAC;KAC9D,CAAC,CAAC;IAEH,MAAM,GAAG,GAA4B;QACnC,YAAY;KACb,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAlBW,QAAA,oBAAoB,wBAkB/B"}
@@ -5,32 +5,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.buildMetaGeneratorApp = void 0;
7
7
  const utils_1 = require("@ldsg/utils");
8
- const node_path_1 = __importDefault(require("node:path"));
9
8
  const node_os_1 = __importDefault(require("node:os"));
10
- const node_url_1 = require("node:url");
11
- const fs_extra_1 = __importDefault(require("fs-extra"));
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const load_generator_app_1 = require("../load-generator-app");
12
11
  const buildMetaGeneratorApp = async (params) => {
13
12
  const { archive } = await (0, utils_1.generateMetaGeneratorApp)(params);
14
- let metaGenerator;
15
- {
16
- const outputPath = node_path_1.default.join(node_os_1.default.homedir(), ".ldsg", "meta-generator");
17
- await fs_extra_1.default.remove(outputPath);
18
- (0, utils_1.extractZipToFolder)({
19
- archive,
20
- outputPath,
21
- });
22
- await (0, utils_1.installDependencies)({ cwd: outputPath });
23
- await (0, utils_1.buildWithPnpmWorkspace)({
24
- cwd: outputPath,
25
- });
26
- const importModule = new Function("specifier", "return import(specifier)");
27
- const entryPath = node_path_1.default.join(outputPath, "dist", "index.js");
28
- const entryUrl = `${(0, node_url_1.pathToFileURL)(entryPath).href}?t=${Date.now()}`;
29
- const { generate } = (await importModule(entryUrl));
30
- metaGenerator = {
31
- generate,
32
- };
33
- }
13
+ const metaGenerator = await (0, load_generator_app_1.loadGeneratorApp)({
14
+ archive,
15
+ outputPath: node_path_1.default.join(node_os_1.default.homedir(), ".ldsg", "meta-generator"),
16
+ });
34
17
  const res = {
35
18
  metaGenerator,
36
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/commands/generate/utils/generate-application/utils/build-meta-generator-app/index.ts"],"names":[],"mappings":";;;;;;AAAA,uCAKqB;AAErB,0DAA6B;AAC7B,sDAAyB;AACzB,uCAAyC;AACzC,wDAA0B;AAYnB,MAAM,qBAAqB,GAA0B,KAAK,EAAE,MAAM,EAAE,EAAE;IAC3E,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAA,gCAAwB,EAAC,MAAM,CAAC,CAAC;IAE3D,IAAI,aAAwB,CAAC;IAK7B,CAAC;QACC,MAAM,UAAU,GAAG,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;QAKtE,MAAM,kBAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAK5B,IAAA,0BAAkB,EAAC;YACjB,OAAO;YACP,UAAU;SACX,CAAC,CAAC;QAKH,MAAM,IAAA,2BAAmB,EAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;QAK/C,MAAM,IAAA,8BAAsB,EAAC;YAC3B,GAAG,EAAE,UAAU;SAChB,CAAC,CAAC;QAOH,MAAM,YAAY,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAEpD,CAAC;QAEtB,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAK5D,MAAM,QAAQ,GAAG,GAAG,IAAA,wBAAa,EAAC,SAAS,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAEpE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,YAAY,CAAC,QAAQ,CAAC,CAEjD,CAAC;QAEF,aAAa,GAAG;YACd,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAA6B;QACpC,aAAa;KACd,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAlEW,QAAA,qBAAqB,yBAkEhC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/commands/generate/utils/generate-application/utils/build-meta-generator-app/index.ts"],"names":[],"mappings":";;;;;;AAAA,uCAAuD;AAEvD,sDAAyB;AACzB,0DAA6B;AAC7B,8DAAyD;AAYlD,MAAM,qBAAqB,GAA0B,KAAK,EAAE,MAAM,EAAE,EAAE;IAC3E,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAA,gCAAwB,EAAC,MAAM,CAAC,CAAC;IAE3D,MAAM,aAAa,GAAG,MAAM,IAAA,qCAAgB,EAAC;QAC3C,OAAO;QACP,UAAU,EAAE,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,gBAAgB,CAAC;KAC/D,CAAC,CAAC;IAEH,MAAM,GAAG,GAA6B;QACpC,aAAa;KACd,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAbW,QAAA,qBAAqB,yBAahC"}
@@ -1,3 +1,4 @@
1
1
  export * from "./build-app-generator-app";
2
2
  export * from "./build-meta-generator-app";
3
3
  export * from "./generate-app";
4
+ export * from "./load-generator-app";
@@ -17,4 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./build-app-generator-app"), exports);
18
18
  __exportStar(require("./build-meta-generator-app"), exports);
19
19
  __exportStar(require("./generate-app"), exports);
20
+ __exportStar(require("./load-generator-app"), exports);
20
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/commands/generate/utils/generate-application/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAA0C;AAC1C,6DAA2C;AAC3C,iDAA+B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/commands/generate/utils/generate-application/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAA0C;AAC1C,6DAA2C;AAC3C,iDAA+B;AAC/B,uDAAqC"}
@@ -0,0 +1,7 @@
1
+ import { Generator } from "@ldsg/types";
2
+ export interface LoadGeneratorAppParams {
3
+ archive: Buffer<ArrayBufferLike>;
4
+ outputPath: string;
5
+ }
6
+ export type LoadGeneratorApp = (params: LoadGeneratorAppParams) => Promise<Generator>;
7
+ export declare const loadGeneratorApp: LoadGeneratorApp;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loadGeneratorApp = void 0;
7
+ const utils_1 = require("@ldsg/utils");
8
+ const fs_extra_1 = __importDefault(require("fs-extra"));
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const node_url_1 = require("node:url");
11
+ const loadGeneratorApp = async (params) => {
12
+ const { archive, outputPath } = params;
13
+ await fs_extra_1.default.remove(outputPath);
14
+ (0, utils_1.extractZipToFolder)({
15
+ archive,
16
+ outputPath,
17
+ });
18
+ await (0, utils_1.installDependencies)({ cwd: outputPath });
19
+ await (0, utils_1.buildWithPnpmWorkspace)({ cwd: outputPath });
20
+ const importModule = new Function("specifier", "return import(specifier)");
21
+ const entryPath = node_path_1.default.join(outputPath, "dist", "index.js");
22
+ const entryUrl = `${(0, node_url_1.pathToFileURL)(entryPath).href}?t=${Date.now()}`;
23
+ const { generate } = (await importModule(entryUrl));
24
+ const res = {
25
+ generate,
26
+ };
27
+ return res;
28
+ };
29
+ exports.loadGeneratorApp = loadGeneratorApp;
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/commands/generate/utils/generate-application/utils/load-generator-app/index.ts"],"names":[],"mappings":";;;;;;AACA,uCAA8F;AAC9F,wDAA0B;AAC1B,0DAA6B;AAC7B,uCAAyC;AAgBlC,MAAM,gBAAgB,GAAqB,KAAK,EAAE,MAAM,EAAE,EAAE;IACjE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAKvC,MAAM,kBAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAE5B,IAAA,0BAAkB,EAAC;QACjB,OAAO;QACP,UAAU;KACX,CAAC,CAAC;IAEH,MAAM,IAAA,2BAAmB,EAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;IAE/C,MAAM,IAAA,8BAAsB,EAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;IAOlD,MAAM,YAAY,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAEpD,CAAC;IAEtB,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAK5D,MAAM,QAAQ,GAAG,GAAG,IAAA,wBAAa,EAAC,SAAS,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAEpE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,YAAY,CAAC,QAAQ,CAAC,CAEjD,CAAC;IAEF,MAAM,GAAG,GAAc;QACrB,QAAQ;KACT,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AA1CW,QAAA,gBAAgB,oBA0C3B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ldsg/cli",
3
- "version": "0.3.46",
3
+ "version": "0.3.47",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "license": "ISC",
@@ -17,8 +17,8 @@
17
17
  "commander": "^12.0.0",
18
18
  "fs-extra": "^11.3.0",
19
19
  "js-yaml": "^4.1.0",
20
- "@ldsg/handler": "0.3.46",
21
- "@ldsg/utils": "0.3.46"
20
+ "@ldsg/handler": "0.3.47",
21
+ "@ldsg/utils": "0.3.47"
22
22
  },
23
23
  "devDependencies": {
24
24
  "@types/fs-extra": "^11.0.4",
@@ -37,7 +37,7 @@
37
37
  "ts-node": "^10.9.2",
38
38
  "tslib": "^2.8.1",
39
39
  "typescript": "^5.3.3",
40
- "@ldsg/types": "0.3.46"
40
+ "@ldsg/types": "0.3.47"
41
41
  },
42
42
  "scripts": {
43
43
  "build": "tsc --project tsconfig.build.json",
@@ -1,7 +1,7 @@
1
1
  import { GenerateParams, Generator } from "@ldsg/types";
2
- import path from "node:path";
3
2
  import os from "node:os";
4
- import { extractZipToFolder } from "@ldsg/utils";
3
+ import path from "node:path";
4
+ import { loadGeneratorApp } from "../load-generator-app";
5
5
 
6
6
  export interface BuildAppGeneratorAppParams extends GenerateParams {
7
7
  metaGenerator: Generator;
@@ -23,23 +23,18 @@ const META_GENERATOR_KIND = "meta_generator";
23
23
  export const buildAppGeneratorApp: BuildAppGeneratorApp = async (params) => {
24
24
  const { metaGenerator, ...restParams } = params;
25
25
 
26
+ /**
27
+ * 使用元生成器生成应用生成器应用
28
+ */
26
29
  const { archive } = await metaGenerator.generate({ ...restParams, kind: META_GENERATOR_KIND });
27
30
 
28
- const outputPath = path.join(os.homedir(), ".ldsg", "app-generator");
29
-
30
- extractZipToFolder({
31
+ const appGenerator = await loadGeneratorApp({
31
32
  archive,
32
- outputPath,
33
+ outputPath: path.join(os.homedir(), ".ldsg", "app-generator"),
33
34
  });
34
35
 
35
36
  const res: BuildAppGeneratorAppRes = {
36
- appGenerator: {
37
- generate: async () => {
38
- return {
39
- archive,
40
- };
41
- },
42
- },
37
+ appGenerator,
43
38
  };
44
39
 
45
40
  return res;
@@ -1,14 +1,8 @@
1
- import {
2
- buildWithPnpmWorkspace,
3
- extractZipToFolder,
4
- generateMetaGeneratorApp,
5
- installDependencies,
6
- } from "@ldsg/utils";
1
+ import { generateMetaGeneratorApp } from "@ldsg/utils";
7
2
  import { GenerateParams, Generator } from "@ldsg/types";
8
- import path from "node:path";
9
3
  import os from "node:os";
10
- import { pathToFileURL } from "node:url";
11
- import fs from "fs-extra";
4
+ import path from "node:path";
5
+ import { loadGeneratorApp } from "../load-generator-app";
12
6
 
13
7
  export interface BuildMetaGeneratorAppParams extends GenerateParams {}
14
8
 
@@ -23,63 +17,10 @@ export type BuildMetaGeneratorApp = (
23
17
  export const buildMetaGeneratorApp: BuildMetaGeneratorApp = async (params) => {
24
18
  const { archive } = await generateMetaGeneratorApp(params);
25
19
 
26
- let metaGenerator: Generator;
27
-
28
- /**
29
- * 解压、安装依赖、编辑、导出模块
30
- */
31
- {
32
- const outputPath = path.join(os.homedir(), ".ldsg", "meta-generator");
33
-
34
- /**
35
- * 清理上一次构建产物,避免旧的 dist 残留被动态导入
36
- */
37
- await fs.remove(outputPath);
38
-
39
- /**
40
- * 解压至指定目录
41
- */
42
- extractZipToFolder({
43
- archive,
44
- outputPath,
45
- });
46
-
47
- /**
48
- * 安装依赖
49
- */
50
- await installDependencies({ cwd: outputPath });
51
-
52
- /**
53
- * 构建
54
- */
55
- await buildWithPnpmWorkspace({
56
- cwd: outputPath,
57
- });
58
-
59
- /**
60
- * 产物为 ESM 单文件模块(模板 package.json 的 type 为 module,vite ssr 构建全量内联),
61
- * 而 @ldsg/cli 编译为 commonjs,tsc 会把 import() 降级为 require(),
62
- * 故通过 Function 保留原生动态 import。
63
- */
64
- const importModule = new Function("specifier", "return import(specifier)") as (
65
- specifier: string,
66
- ) => Promise<unknown>;
67
-
68
- const entryPath = path.join(outputPath, "dist", "index.js");
69
-
70
- /**
71
- * 追加时间戳,避免 Node 的 ESM 模块缓存复用上一次构建的产物
72
- */
73
- const entryUrl = `${pathToFileURL(entryPath).href}?t=${Date.now()}`;
74
-
75
- const { generate } = (await importModule(entryUrl)) as {
76
- generate: Generator["generate"];
77
- };
78
-
79
- metaGenerator = {
80
- generate,
81
- };
82
- }
20
+ const metaGenerator = await loadGeneratorApp({
21
+ archive,
22
+ outputPath: path.join(os.homedir(), ".ldsg", "meta-generator"),
23
+ });
83
24
 
84
25
  const res: BuildMetaGeneratorAppRes = {
85
26
  metaGenerator,
@@ -1,3 +1,4 @@
1
1
  export * from "./build-app-generator-app";
2
2
  export * from "./build-meta-generator-app";
3
3
  export * from "./generate-app";
4
+ export * from "./load-generator-app";
@@ -0,0 +1,63 @@
1
+ import { Generator } from "@ldsg/types";
2
+ import { buildWithPnpmWorkspace, extractZipToFolder, installDependencies } from "@ldsg/utils";
3
+ import fs from "fs-extra";
4
+ import path from "node:path";
5
+ import { pathToFileURL } from "node:url";
6
+
7
+ export interface LoadGeneratorAppParams {
8
+ archive: Buffer<ArrayBufferLike>;
9
+
10
+ /**
11
+ * 生成器应用的解压与构建目录
12
+ */
13
+ outputPath: string;
14
+ }
15
+
16
+ export type LoadGeneratorApp = (params: LoadGeneratorAppParams) => Promise<Generator>;
17
+
18
+ /**
19
+ * 解压、安装依赖、构建并加载生成器应用,返回其 generate 能力
20
+ */
21
+ export const loadGeneratorApp: LoadGeneratorApp = async (params) => {
22
+ const { archive, outputPath } = params;
23
+
24
+ /**
25
+ * 清理上一次构建产物,避免旧的 dist 残留被动态导入
26
+ */
27
+ await fs.remove(outputPath);
28
+
29
+ extractZipToFolder({
30
+ archive,
31
+ outputPath,
32
+ });
33
+
34
+ await installDependencies({ cwd: outputPath });
35
+
36
+ await buildWithPnpmWorkspace({ cwd: outputPath });
37
+
38
+ /**
39
+ * 产物为 ESM 单文件模块(模板 package.json 的 type 为 module,vite ssr 构建全量内联),
40
+ * 而 @ldsg/cli 编译为 commonjs,tsc 会把 import() 降级为 require(),
41
+ * 故通过 Function 保留原生动态 import。
42
+ */
43
+ const importModule = new Function("specifier", "return import(specifier)") as (
44
+ specifier: string,
45
+ ) => Promise<unknown>;
46
+
47
+ const entryPath = path.join(outputPath, "dist", "index.js");
48
+
49
+ /**
50
+ * 追加时间戳,避免 Node 的 ESM 模块缓存复用上一次构建的产物
51
+ */
52
+ const entryUrl = `${pathToFileURL(entryPath).href}?t=${Date.now()}`;
53
+
54
+ const { generate } = (await importModule(entryUrl)) as {
55
+ generate: Generator["generate"];
56
+ };
57
+
58
+ const res: Generator = {
59
+ generate,
60
+ };
61
+
62
+ return res;
63
+ };