@ldsg/cli 0.3.43 → 0.3.45

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 (133) hide show
  1. package/.rush/temp/package-deps_build.json +15 -18
  2. package/.rush/temp/shrinkwrap-deps.json +1 -1
  3. package/.tsbuildinfo +1 -1
  4. package/CHANGELOG.json +46 -0
  5. package/CHANGELOG.md +15 -1
  6. package/README.md +3 -3
  7. package/dist/__tests__/bootstrap-generator.test.js +120 -0
  8. package/dist/__tests__/bootstrap-generator.test.js.map +1 -0
  9. package/dist/__tests__/generate-bootstrap.test.d.ts +1 -0
  10. package/dist/__tests__/generate-bootstrap.test.js +97 -0
  11. package/dist/__tests__/generate-bootstrap.test.js.map +1 -0
  12. package/dist/__tests__/resolve-module-builder.test.d.ts +1 -0
  13. package/dist/__tests__/resolve-module-builder.test.js +83 -0
  14. package/dist/__tests__/resolve-module-builder.test.js.map +1 -0
  15. package/dist/__tests__/resolve-root.test.d.ts +1 -0
  16. package/dist/__tests__/resolve-root.test.js +32 -0
  17. package/dist/__tests__/resolve-root.test.js.map +1 -0
  18. package/dist/cli.js +4 -431
  19. package/dist/cli.js.map +1 -1
  20. package/dist/commands/generate/index.d.ts +2 -0
  21. package/dist/commands/generate/index.js +35 -0
  22. package/dist/commands/generate/index.js.map +1 -0
  23. package/dist/commands/generate/types/generate.d.ts +12 -0
  24. package/dist/commands/generate/types/generate.js +3 -0
  25. package/dist/commands/generate/types/generate.js.map +1 -0
  26. package/dist/commands/generate/types/generator.d.ts +4 -0
  27. package/dist/commands/generate/types/generator.js +3 -0
  28. package/dist/commands/generate/types/generator.js.map +1 -0
  29. package/dist/commands/generate/types/index.d.ts +2 -0
  30. package/dist/commands/generate/types/index.js +19 -0
  31. package/dist/commands/generate/types/index.js.map +1 -0
  32. package/dist/commands/generate/types.d.ts +8 -0
  33. package/dist/{types/get-extend-app-data-params.js → commands/generate/types.js} +1 -1
  34. package/dist/commands/generate/types.js.map +1 -0
  35. package/dist/commands/generate/utils/generate-application/index.d.ts +6 -0
  36. package/dist/commands/generate/utils/generate-application/index.js +28 -0
  37. package/dist/commands/generate/utils/generate-application/index.js.map +1 -0
  38. package/dist/commands/generate/utils/generate-application/types/generator.d.ts +9 -0
  39. package/dist/commands/generate/utils/generate-application/types/generator.js +3 -0
  40. package/dist/commands/generate/utils/generate-application/types/generator.js.map +1 -0
  41. package/dist/commands/generate/utils/generate-application/types/index.d.ts +1 -0
  42. package/dist/commands/generate/utils/generate-application/types/index.js +18 -0
  43. package/dist/commands/generate/utils/generate-application/types/index.js.map +1 -0
  44. package/dist/commands/generate/utils/generate-application/utils/build-app-generator/index.d.ts +9 -0
  45. package/dist/commands/generate/utils/generate-application/utils/build-app-generator/index.js +30 -0
  46. package/dist/commands/generate/utils/generate-application/utils/build-app-generator/index.js.map +1 -0
  47. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/index.d.ts +13 -0
  48. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/index.js +125 -0
  49. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/index.js.map +1 -0
  50. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/generate-bootstrap/constants.d.ts +3 -0
  51. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/generate-bootstrap/constants.js +7 -0
  52. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/generate-bootstrap/constants.js.map +1 -0
  53. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/generate-bootstrap/index.d.ts +4 -0
  54. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/generate-bootstrap/index.js +69 -0
  55. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/generate-bootstrap/index.js.map +1 -0
  56. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/generate-bootstrap/prepare-bootstrap-app-files.d.ts +3 -0
  57. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/generate-bootstrap/prepare-bootstrap-app-files.js +32 -0
  58. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/generate-bootstrap/prepare-bootstrap-app-files.js.map +1 -0
  59. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/generate-bootstrap/render-bootstrap-entry.d.ts +2 -0
  60. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/generate-bootstrap/render-bootstrap-entry.js +62 -0
  61. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/generate-bootstrap/render-bootstrap-entry.js.map +1 -0
  62. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/generate-bootstrap/resolve-dependencies.d.ts +11 -0
  63. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/generate-bootstrap/resolve-dependencies.js +84 -0
  64. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/generate-bootstrap/resolve-dependencies.js.map +1 -0
  65. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/resource-record/get-resource-record-by-id.d.ts +2 -0
  66. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/resource-record/get-resource-record-by-id.js +15 -0
  67. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/resource-record/get-resource-record-by-id.js.map +1 -0
  68. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/resource-record/resolve-resource-definition-resource-record.d.ts +2 -0
  69. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/resource-record/resolve-resource-definition-resource-record.js +21 -0
  70. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/resource-record/resolve-resource-definition-resource-record.js.map +1 -0
  71. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/resource-record/resolve-root-resource-record.d.ts +2 -0
  72. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/resource-record/resolve-root-resource-record.js +18 -0
  73. package/dist/commands/generate/utils/generate-application/utils/build-bootstrap/utils/resource-record/resolve-root-resource-record.js.map +1 -0
  74. package/dist/commands/generate/utils/generate-application/utils/build-meta-generator/index.d.ts +8 -0
  75. package/dist/commands/generate/utils/generate-application/utils/build-meta-generator/index.js +32 -0
  76. package/dist/commands/generate/utils/generate-application/utils/build-meta-generator/index.js.map +1 -0
  77. package/dist/commands/generate/utils/generate-application/utils/generate-app/index.d.ts +8 -0
  78. package/dist/commands/generate/utils/generate-application/utils/generate-app/index.js +10 -0
  79. package/dist/commands/generate/utils/generate-application/utils/generate-app/index.js.map +1 -0
  80. package/dist/commands/generate/utils/generate-application/utils/index.d.ts +3 -0
  81. package/dist/commands/generate/utils/generate-application/utils/index.js +20 -0
  82. package/dist/commands/generate/utils/generate-application/utils/index.js.map +1 -0
  83. package/dist/commands/generate/utils/parse-extra-options.d.ts +5 -0
  84. package/dist/commands/generate/utils/parse-extra-options.js +59 -0
  85. package/dist/commands/generate/utils/parse-extra-options.js.map +1 -0
  86. package/dist/commands/resource/index.d.ts +2 -0
  87. package/dist/commands/resource/index.js +392 -0
  88. package/dist/commands/resource/index.js.map +1 -0
  89. package/dist/generator/bootstrap-generator.d.ts +19 -0
  90. package/dist/generator/bootstrap-generator.js +59 -0
  91. package/dist/generator/bootstrap-generator.js.map +1 -0
  92. package/dist/generator/module-builder.d.ts +2 -0
  93. package/dist/generator/module-builder.js +284 -0
  94. package/dist/generator/module-builder.js.map +1 -0
  95. package/dist/generator/resolve-module-builder.d.ts +8 -0
  96. package/dist/generator/resolve-module-builder.js +41 -0
  97. package/dist/generator/resolve-module-builder.js.map +1 -0
  98. package/dist/generator/resolve-root.d.ts +5 -0
  99. package/dist/generator/resolve-root.js +48 -0
  100. package/dist/generator/resolve-root.js.map +1 -0
  101. package/jest.config.js +4 -1
  102. package/package.json +5 -5
  103. package/src/cli.ts +4 -510
  104. package/src/commands/generate/index.ts +54 -0
  105. package/src/commands/generate/utils/generate-application/index.ts +50 -0
  106. package/src/commands/generate/utils/generate-application/utils/build-app-generator/index.ts +39 -0
  107. package/src/commands/generate/utils/generate-application/utils/build-meta-generator/index.ts +45 -0
  108. package/src/commands/generate/utils/generate-application/utils/generate-app/index.ts +17 -0
  109. package/src/commands/generate/utils/generate-application/utils/index.ts +3 -0
  110. package/src/commands/generate/utils/parse-extra-options.ts +80 -0
  111. package/src/commands/resource/index.ts +455 -0
  112. package/dist/__tests__/get-extend-app-data-params-using-workspace-ldsg-module.test.js +0 -81
  113. package/dist/__tests__/get-extend-app-data-params-using-workspace-ldsg-module.test.js.map +0 -1
  114. package/dist/types/get-extend-app-data-params.d.ts +0 -10
  115. package/dist/types/get-extend-app-data-params.js.map +0 -1
  116. package/dist/utils/get-extend-app-data-params-using-npm-ldsg-module.d.ts +0 -2
  117. package/dist/utils/get-extend-app-data-params-using-npm-ldsg-module.js +0 -27
  118. package/dist/utils/get-extend-app-data-params-using-npm-ldsg-module.js.map +0 -1
  119. package/dist/utils/get-extend-app-data-params-using-workspace-ldsg-module/index.d.ts +0 -2
  120. package/dist/utils/get-extend-app-data-params-using-workspace-ldsg-module/index.js +0 -98
  121. package/dist/utils/get-extend-app-data-params-using-workspace-ldsg-module/index.js.map +0 -1
  122. package/src/__tests__/add-pnpm-overrides.test.ts +0 -91
  123. package/src/__tests__/commands.test.ts +0 -318
  124. package/src/__tests__/formatter.test.ts +0 -151
  125. package/src/__tests__/generate-app-index-ts.test.ts +0 -141
  126. package/src/__tests__/get-extend-app-data-params-using-workspace-ldsg-module.test.ts +0 -109
  127. package/src/__tests__/json-file-mutator.test.ts +0 -186
  128. package/src/__tests__/mutate.test.ts +0 -392
  129. package/src/__tests__/source-resolver.test.ts +0 -125
  130. package/src/types/get-extend-app-data-params.ts +0 -13
  131. package/src/utils/get-extend-app-data-params-using-npm-ldsg-module.ts +0 -34
  132. package/src/utils/get-extend-app-data-params-using-workspace-ldsg-module/index.ts +0 -159
  133. /package/dist/__tests__/{get-extend-app-data-params-using-workspace-ldsg-module.test.d.ts → bootstrap-generator.test.d.ts} +0 -0
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createBootstrapGenerator = void 0;
4
+ const handler_generator_1 = require("@ldsg/handler-generator");
5
+ const handler_module_template_constants_1 = require("@ldsg/handler-module-template-constants");
6
+ const createBootstrapGenerator = async (params) => {
7
+ const { generatorDefinitionHandler, handlerGeneratorHandler, mode, cwd } = params;
8
+ const generatorDefinitionHandlerModule = await (0, handler_generator_1.buildHandlerModuleResource)({
9
+ code: generatorDefinitionHandler.settings.code,
10
+ dependencies: generatorDefinitionHandler.settings.dependencies ?? [],
11
+ mode,
12
+ cwd,
13
+ });
14
+ const handlerGeneratorHandlerModule = await (0, handler_generator_1.buildHandlerModuleResource)({
15
+ code: handlerGeneratorHandler.settings.code,
16
+ dependencies: handlerGeneratorHandler.settings.dependencies ?? [],
17
+ mode,
18
+ cwd,
19
+ });
20
+ const createModuleBuilder = handlerGeneratorHandlerModule.exports.createModuleBuilder;
21
+ if (typeof createModuleBuilder !== "function") {
22
+ throw new Error(`handler generator handler must export createModuleBuilder: ${handlerGeneratorHandlerModule.moduleDir}`);
23
+ }
24
+ const moduleBuilder = createModuleBuilder();
25
+ const buildApplicationGenerator = async (buildParams) => {
26
+ const { rootGeneratorHandler } = buildParams;
27
+ const built = await moduleBuilder.buildModule({
28
+ files: handler_module_template_constants_1.FILES_IN_HANDLER_MODULE_TEMPLATE,
29
+ code: `export * as generator from "@ldsg/generator";\n${rootGeneratorHandler.settings.code}`,
30
+ dependencies: [
31
+ { name: "@ldsg/generator" },
32
+ ...(rootGeneratorHandler.settings.dependencies ?? []),
33
+ ],
34
+ entry: "index.ts",
35
+ output: "dist/index.js",
36
+ buildCommand: "pnpm run build",
37
+ packageManager: "pnpm",
38
+ mode,
39
+ cwd,
40
+ cacheKey: `application-generator:${rootGeneratorHandler.id}`,
41
+ });
42
+ const buildApp = built.exports.buildApp;
43
+ if (typeof buildApp !== "function") {
44
+ throw new Error(`application generator must export buildApp: ${built.moduleDir}`);
45
+ }
46
+ return {
47
+ moduleDir: built.moduleDir,
48
+ entryPath: built.entryPath,
49
+ buildApp,
50
+ };
51
+ };
52
+ return {
53
+ generatorDefinitionHandlerModule,
54
+ handlerGeneratorHandlerModule,
55
+ buildApplicationGenerator,
56
+ };
57
+ };
58
+ exports.createBootstrapGenerator = createBootstrapGenerator;
59
+ //# sourceMappingURL=bootstrap-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-generator.js","sourceRoot":"","sources":["../../src/generator/bootstrap-generator.ts"],"names":[],"mappings":";;;AAOA,+DAAqE;AACrE,+FAA2F;AA2CpF,MAAM,wBAAwB,GAAG,KAAK,EAC3C,MAAsC,EACT,EAAE;IAC/B,MAAM,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAElF,MAAM,gCAAgC,GAAG,MAAM,IAAA,8CAA0B,EAAC;QACxE,IAAI,EAAE,0BAA0B,CAAC,QAAQ,CAAC,IAAI;QAC9C,YAAY,EAAE,0BAA0B,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAE;QACpE,IAAI;QACJ,GAAG;KACJ,CAAC,CAAC;IAEH,MAAM,6BAA6B,GAAG,MAAM,IAAA,8CAA0B,EAAC;QACrE,IAAI,EAAE,uBAAuB,CAAC,QAAQ,CAAC,IAAI;QAC3C,YAAY,EAAE,uBAAuB,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAE;QACjE,IAAI;QACJ,GAAG;KACJ,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,6BAA6B,CAAC,OAAO,CAAC,mBAAmB,CAAC;IAEtF,IAAI,OAAO,mBAAmB,KAAK,UAAU,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,8DAA8D,6BAA6B,CAAC,SAAS,EAAE,CACxG,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,mBAAmB,EAAmB,CAAC;IAE7D,MAAM,yBAAyB,GAAoD,KAAK,EACtF,WAAW,EACX,EAAE;QACF,MAAM,EAAE,oBAAoB,EAAE,GAAG,WAAW,CAAC;QAE7C,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC;YAC5C,KAAK,EAAE,oEAAiD;YACxD,IAAI,EAAE,kDAAkD,oBAAoB,CAAC,QAAQ,CAAC,IAAI,EAAE;YAC5F,YAAY,EAAE;gBACZ,EAAE,IAAI,EAAE,iBAAiB,EAAE;gBAC3B,GAAG,CAAC,oBAAoB,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAE,CAAC;aACtD;YACD,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,eAAe;YACvB,YAAY,EAAE,gBAAgB;YAC9B,cAAc,EAAE,MAAM;YACtB,IAAI;YACJ,GAAG;YACH,QAAQ,EAAE,yBAAyB,oBAAoB,CAAC,EAAE,EAAE;SAC7D,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAkC,CAAC;QAElE,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,+CAA+C,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ;SACT,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO;QACL,gCAAgC;QAChC,6BAA6B;QAC7B,yBAAyB;KAC1B,CAAC;AACJ,CAAC,CAAC;AApEW,QAAA,wBAAwB,4BAoEnC"}
@@ -0,0 +1,2 @@
1
+ import { ModuleBuilder } from "@ldsg/generator";
2
+ export declare const createModuleBuilder: () => ModuleBuilder;
@@ -0,0 +1,284 @@
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.createModuleBuilder = void 0;
7
+ const child_process_1 = require("child_process");
8
+ const crypto_1 = __importDefault(require("crypto"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const fs_extra_1 = __importDefault(require("fs-extra"));
11
+ const DEFAULT_PACKAGE_MANAGER = "pnpm";
12
+ const DEFAULT_INSTALL_ARGS = ["--ignore-scripts"];
13
+ const DEFAULT_BUILD_COMMAND = "pnpm run build";
14
+ const workspacePackageDirCache = new Map();
15
+ const stableStringify = (value) => {
16
+ if (value === null || typeof value !== "object") {
17
+ return JSON.stringify(value);
18
+ }
19
+ if (Array.isArray(value)) {
20
+ return `[${value.map((item) => stableStringify(item)).join(",")}]`;
21
+ }
22
+ const entries = Object.entries(value)
23
+ .sort(([a], [b]) => a.localeCompare(b))
24
+ .map(([key, item]) => `${JSON.stringify(key)}:${stableStringify(item)}`);
25
+ return `{${entries.join(",")}}`;
26
+ };
27
+ const hashValue = (value) => crypto_1.default.createHash("sha256").update(stableStringify(value)).digest("hex");
28
+ const findRepoRoot = async (cwd) => {
29
+ let current = path_1.default.resolve(cwd);
30
+ while (true) {
31
+ if (await fs_extra_1.default.pathExists(path_1.default.join(current, "rush.json"))) {
32
+ return current;
33
+ }
34
+ const parent = path_1.default.dirname(current);
35
+ if (parent === current) {
36
+ return undefined;
37
+ }
38
+ current = parent;
39
+ }
40
+ };
41
+ const findWorkspacePackageDir = async (cwd, packageName) => {
42
+ const cacheKey = `${cwd}:${packageName}`;
43
+ if (workspacePackageDirCache.has(cacheKey)) {
44
+ return workspacePackageDirCache.get(cacheKey) ?? undefined;
45
+ }
46
+ const repoRoot = await findRepoRoot(cwd);
47
+ if (!repoRoot) {
48
+ workspacePackageDirCache.set(cacheKey, null);
49
+ return undefined;
50
+ }
51
+ const rushJsonPath = path_1.default.join(repoRoot, "rush.json");
52
+ const rushJson = (await fs_extra_1.default.readJson(rushJsonPath));
53
+ for (const project of rushJson.projects) {
54
+ if (project.packageName !== packageName) {
55
+ continue;
56
+ }
57
+ const projectDir = path_1.default.join(repoRoot, project.projectFolder);
58
+ const packageJsonPath = path_1.default.join(projectDir, "package.json");
59
+ if (await fs_extra_1.default.pathExists(packageJsonPath)) {
60
+ workspacePackageDirCache.set(cacheKey, projectDir);
61
+ return projectDir;
62
+ }
63
+ }
64
+ workspacePackageDirCache.set(cacheKey, null);
65
+ return undefined;
66
+ };
67
+ const resolveDependencyVersion = async (params, dependency) => {
68
+ if (dependency.version) {
69
+ return dependency.version;
70
+ }
71
+ if (dependency.uri) {
72
+ return dependency.uri;
73
+ }
74
+ if (params.mode === "workspace") {
75
+ const packageDir = await findWorkspacePackageDir(params.cwd, dependency.name);
76
+ if (packageDir) {
77
+ return `file:${packageDir}`;
78
+ }
79
+ }
80
+ return "latest";
81
+ };
82
+ const assertSafeRelativePath = (baseDir, relativePath) => {
83
+ if (path_1.default.isAbsolute(relativePath)) {
84
+ throw new Error(`module file path must be relative: ${relativePath}`);
85
+ }
86
+ const absolutePath = path_1.default.resolve(baseDir, relativePath);
87
+ if (absolutePath !== baseDir && !absolutePath.startsWith(`${baseDir}${path_1.default.sep}`)) {
88
+ throw new Error(`module file path escapes module directory: ${relativePath}`);
89
+ }
90
+ return absolutePath;
91
+ };
92
+ const writeModuleFile = async (baseDir, file) => {
93
+ const filePath = assertSafeRelativePath(baseDir, file.path);
94
+ await fs_extra_1.default.mkdir(path_1.default.dirname(filePath), { recursive: true });
95
+ if (typeof file.data === "string") {
96
+ await fs_extra_1.default.writeFile(filePath, file.data, "utf8");
97
+ return;
98
+ }
99
+ await fs_extra_1.default.writeJson(filePath, file.data, { spaces: 2 });
100
+ };
101
+ const runCommand = (command, args, cwd, env) => new Promise((resolve, reject) => {
102
+ const child = (0, child_process_1.spawn)(command, args, {
103
+ cwd,
104
+ env: {
105
+ ...process.env,
106
+ ...env,
107
+ },
108
+ shell: false,
109
+ stdio: ["ignore", "pipe", "pipe"],
110
+ });
111
+ let output = "";
112
+ child.stdout?.on("data", (chunk) => {
113
+ output += chunk.toString();
114
+ });
115
+ child.stderr?.on("data", (chunk) => {
116
+ output += chunk.toString();
117
+ });
118
+ child.on("error", (error) => {
119
+ reject(error);
120
+ });
121
+ child.on("close", (code) => {
122
+ if (code === 0) {
123
+ resolve();
124
+ return;
125
+ }
126
+ reject(new Error(`command failed with exit code ${code}: ${command} ${args.join(" ")}\n${output.slice(-4000)}`));
127
+ });
128
+ });
129
+ const runShellCommand = (command, cwd, env) => new Promise((resolve, reject) => {
130
+ const child = (0, child_process_1.spawn)(command, {
131
+ cwd,
132
+ env: {
133
+ ...process.env,
134
+ ...env,
135
+ },
136
+ shell: true,
137
+ stdio: ["ignore", "pipe", "pipe"],
138
+ });
139
+ let output = "";
140
+ child.stdout?.on("data", (chunk) => {
141
+ output += chunk.toString();
142
+ });
143
+ child.stderr?.on("data", (chunk) => {
144
+ output += chunk.toString();
145
+ });
146
+ child.on("error", (error) => {
147
+ reject(error);
148
+ });
149
+ child.on("close", (code) => {
150
+ if (code === 0) {
151
+ resolve();
152
+ return;
153
+ }
154
+ reject(new Error(`command failed with exit code ${code}: ${command}\n${output.slice(-4000)}`));
155
+ });
156
+ });
157
+ const readPackageJsonData = (params) => {
158
+ const packageJsonFile = params.files.find((file) => file.path === params.packageJsonPath);
159
+ if (!packageJsonFile || typeof packageJsonFile.data !== "object") {
160
+ return {};
161
+ }
162
+ return JSON.parse(JSON.stringify(packageJsonFile.data));
163
+ };
164
+ const writePackageJson = async (params) => {
165
+ const packageJsonPath = assertSafeRelativePath(params.moduleDir, params.packageJsonPath);
166
+ const packageJson = readPackageJsonData({
167
+ files: params.files,
168
+ packageJsonPath: params.packageJsonPath,
169
+ });
170
+ const dependencies = {
171
+ ...packageJson.dependencies,
172
+ };
173
+ for (const dependency of params.dependencies) {
174
+ dependencies[dependency.name] = await resolveDependencyVersion({
175
+ cwd: params.cwd,
176
+ mode: params.mode,
177
+ }, dependency);
178
+ }
179
+ const devDependencies = {
180
+ ...packageJson.devDependencies,
181
+ };
182
+ if (params.needsTypeScript) {
183
+ if (!devDependencies.typescript) {
184
+ devDependencies.typescript = "^5.8.3";
185
+ }
186
+ if (!devDependencies["@types/node"]) {
187
+ devDependencies["@types/node"] = "^20.13.0";
188
+ }
189
+ }
190
+ const nextPackageJson = {
191
+ ...packageJson,
192
+ name: `ldsg-module-${params.hash.slice(0, 8)}`,
193
+ private: true,
194
+ main: params.output,
195
+ dependencies,
196
+ devDependencies,
197
+ };
198
+ await fs_extra_1.default.mkdir(path_1.default.dirname(packageJsonPath), { recursive: true });
199
+ await fs_extra_1.default.writeJson(packageJsonPath, nextPackageJson, { spaces: 2 });
200
+ };
201
+ const loadModule = (outputPath) => {
202
+ const resolvedPath = require.resolve(outputPath);
203
+ delete require.cache[resolvedPath];
204
+ return require(outputPath);
205
+ };
206
+ const buildModule = async (params) => {
207
+ const packageManager = params.packageManager ?? DEFAULT_PACKAGE_MANAGER;
208
+ const installArgs = params.installArgs ??
209
+ (packageManager === "pnpm"
210
+ ? [...DEFAULT_INSTALL_ARGS, "--ignore-workspace"]
211
+ : DEFAULT_INSTALL_ARGS);
212
+ const output = params.output ?? params.entry;
213
+ const packageJsonPath = params.packageJsonPath ?? "package.json";
214
+ const hash = hashValue({
215
+ files: params.files,
216
+ code: params.code,
217
+ dependencies: params.dependencies,
218
+ entry: params.entry,
219
+ output,
220
+ packageJsonPath,
221
+ packageManager,
222
+ installArgs,
223
+ buildCommand: params.buildCommand,
224
+ mode: params.mode,
225
+ cacheKey: params.cacheKey,
226
+ });
227
+ const moduleDir = params.targetDir ?? path_1.default.join(params.cwd, ".ldsg", "modules", hash);
228
+ const outputPath = assertSafeRelativePath(moduleDir, output);
229
+ const stampPath = path_1.default.join(moduleDir, ".ldsg-module.json");
230
+ const isFresh = (await fs_extra_1.default.pathExists(stampPath)) &&
231
+ (await fs_extra_1.default.pathExists(outputPath)) &&
232
+ (await fs_extra_1.default.readJson(stampPath)).hash === hash;
233
+ if (!isFresh) {
234
+ await fs_extra_1.default.emptyDir(moduleDir);
235
+ await fs_extra_1.default.mkdir(moduleDir, { recursive: true });
236
+ for (const file of params.files) {
237
+ if (file.path === packageJsonPath) {
238
+ continue;
239
+ }
240
+ await writeModuleFile(moduleDir, file);
241
+ }
242
+ await writePackageJson({
243
+ moduleDir,
244
+ hash,
245
+ files: params.files,
246
+ packageJsonPath,
247
+ output,
248
+ dependencies: params.dependencies,
249
+ mode: params.mode,
250
+ cwd: params.cwd,
251
+ needsTypeScript: params.entry.endsWith(".ts") || params.files.some((file) => file.path.endsWith(".ts")),
252
+ });
253
+ const entryPath = assertSafeRelativePath(moduleDir, params.entry);
254
+ await fs_extra_1.default.mkdir(path_1.default.dirname(entryPath), { recursive: true });
255
+ await fs_extra_1.default.writeFile(entryPath, params.code, "utf8");
256
+ await runCommand(packageManager, ["install", ...installArgs], moduleDir, params.env);
257
+ if (params.buildCommand) {
258
+ await runShellCommand(params.buildCommand, moduleDir, params.env);
259
+ }
260
+ else if (params.entry.endsWith(".ts")) {
261
+ const defaultBuildCommand = packageManager === "npm"
262
+ ? "npm run build"
263
+ : packageManager === "yarn"
264
+ ? "yarn build"
265
+ : DEFAULT_BUILD_COMMAND;
266
+ await runShellCommand(defaultBuildCommand, moduleDir, params.env);
267
+ }
268
+ await fs_extra_1.default.writeJson(stampPath, {
269
+ hash,
270
+ createdAt: new Date().toISOString(),
271
+ });
272
+ }
273
+ const exports = loadModule(outputPath);
274
+ return {
275
+ moduleDir,
276
+ entryPath: outputPath,
277
+ exports,
278
+ };
279
+ };
280
+ const createModuleBuilder = () => ({
281
+ buildModule,
282
+ });
283
+ exports.createModuleBuilder = createModuleBuilder;
284
+ //# sourceMappingURL=module-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-builder.js","sourceRoot":"","sources":["../../src/generator/module-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ModuleBuildMode, ModuleBuilder } from "@ldsg/generator";
2
+ import type { ResourceRecord } from "@ldsg/types";
3
+ export interface ResolveModuleBuilderParams {
4
+ resourceRecords: ResourceRecord[];
5
+ mode: ModuleBuildMode;
6
+ cwd: string;
7
+ }
8
+ export declare const resolveModuleBuilder: (params: ResolveModuleBuilderParams) => Promise<ModuleBuilder>;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveModuleBuilder = void 0;
4
+ const handler_generator_1 = require("@ldsg/handler-generator");
5
+ const resolveModuleBuilder = async (params) => {
6
+ const { resourceRecords, mode, cwd } = params;
7
+ const handlerResourceDefinition = resourceRecords.find((resourceRecord) => {
8
+ return (resourceRecord.kind === "resource_definition" && resourceRecord.settings.kind === "handler");
9
+ });
10
+ const generatorResourceId = handlerResourceDefinition?.settings.generatorResourceId;
11
+ if (!generatorResourceId) {
12
+ return (0, handler_generator_1.createModuleBuilder)();
13
+ }
14
+ const handlerGeneratorResource = resourceRecords.find((resourceRecord) => {
15
+ return resourceRecord.id === generatorResourceId;
16
+ });
17
+ if (!handlerGeneratorResource) {
18
+ throw new Error(`handler generator resource not found: ${generatorResourceId}`);
19
+ }
20
+ if (handlerGeneratorResource.kind !== "generator") {
21
+ throw new Error(`handler generator resource must be generator: ${handlerGeneratorResource.id}`);
22
+ }
23
+ const handlerResourceId = handlerGeneratorResource.settings.handlerResourceId;
24
+ const handlerGeneratorHandlerResource = resourceRecords.find((resourceRecord) => {
25
+ return resourceRecord.id === handlerResourceId;
26
+ });
27
+ if (!handlerGeneratorHandlerResource) {
28
+ throw new Error(`handler generator handler resource not found: ${handlerResourceId}`);
29
+ }
30
+ if (handlerGeneratorHandlerResource.kind !== "handler") {
31
+ throw new Error(`handler generator handler resource must be handler: ${handlerGeneratorHandlerResource.id}`);
32
+ }
33
+ return (0, handler_generator_1.buildModuleBuilder)({
34
+ code: handlerGeneratorHandlerResource.settings.code,
35
+ dependencies: handlerGeneratorHandlerResource.settings.dependencies ?? [],
36
+ mode,
37
+ cwd,
38
+ });
39
+ };
40
+ exports.resolveModuleBuilder = resolveModuleBuilder;
41
+ //# sourceMappingURL=resolve-module-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-module-builder.js","sourceRoot":"","sources":["../../src/generator/resolve-module-builder.ts"],"names":[],"mappings":";;;AAEA,+DAAkF;AAgB3E,MAAM,oBAAoB,GAAG,KAAK,EACvC,MAAkC,EACV,EAAE;IAC1B,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAE9C,MAAM,yBAAyB,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE;QACxE,OAAO,CACL,cAAc,CAAC,IAAI,KAAK,qBAAqB,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,CAC5F,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,yBAAyB,EAAE,QAAQ,CAAC,mBAAmB,CAAC;IAEpF,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,OAAO,IAAA,uCAAmB,GAAE,CAAC;IAC/B,CAAC;IAED,MAAM,wBAAwB,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE;QACvE,OAAO,cAAc,CAAC,EAAE,KAAK,mBAAmB,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,yCAAyC,mBAAmB,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,IAAI,wBAAwB,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,iDAAiD,wBAAwB,CAAC,EAAE,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAE9E,MAAM,+BAA+B,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE;QAC9E,OAAO,cAAc,CAAC,EAAE,KAAK,iBAAiB,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,iDAAiD,iBAAiB,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,+BAA+B,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CACb,uDAAuD,+BAA+B,CAAC,EAAE,EAAE,CAC5F,CAAC;IACJ,CAAC;IAED,OAAO,IAAA,sCAAkB,EAAC;QACxB,IAAI,EAAE,+BAA+B,CAAC,QAAQ,CAAC,IAAI;QACnD,YAAY,EAAE,+BAA+B,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAE;QACzE,IAAI;QACJ,GAAG;KACJ,CAAC,CAAC;AACL,CAAC,CAAC;AAnDW,QAAA,oBAAoB,wBAmD/B"}
@@ -0,0 +1,5 @@
1
+ import type { ResourceRecord } from "@ldsg/types";
2
+ export declare const isRootResource: (resourceRecord: ResourceRecord) => boolean;
3
+ export declare const resolveRootResource: (resourceRecords: ResourceRecord[]) => ResourceRecord;
4
+ export declare const resolveResourceDefinition: (resourceRecords: ResourceRecord[], rootResourceId: string, kind: string) => ResourceRecord;
5
+ export declare const getResourceRecordById: (resourceRecords: ResourceRecord[], id: string | undefined, description: string) => ResourceRecord;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getResourceRecordById = exports.resolveResourceDefinition = exports.resolveRootResource = exports.isRootResource = void 0;
4
+ const ROOT_PARENT_IDS = [null, "root"];
5
+ const isRootResource = (resourceRecord) => {
6
+ return ROOT_PARENT_IDS.includes(resourceRecord.parentId);
7
+ };
8
+ exports.isRootResource = isRootResource;
9
+ const resolveRootResource = (resourceRecords) => {
10
+ const rootResources = resourceRecords.filter(exports.isRootResource);
11
+ if (rootResources.length === 0) {
12
+ throw new Error("root resource not found");
13
+ }
14
+ if (rootResources.length > 1) {
15
+ throw new Error(`multiple root resources: ${rootResources.map((resource) => resource.id).join(", ")}`);
16
+ }
17
+ return rootResources[0];
18
+ };
19
+ exports.resolveRootResource = resolveRootResource;
20
+ const resolveResourceDefinition = (resourceRecords, rootResourceId, kind) => {
21
+ const resourceDefinitions = resourceRecords.filter((resourceRecord) => {
22
+ return (resourceRecord.kind === "resource_definition" &&
23
+ resourceRecord.settings.kind === kind &&
24
+ resourceRecord.parentId === rootResourceId);
25
+ });
26
+ if (resourceDefinitions.length === 0) {
27
+ throw new Error(`resource definition not found: ${kind}`);
28
+ }
29
+ if (resourceDefinitions.length > 1) {
30
+ throw new Error(`multiple resource definitions for ${kind}: ${resourceDefinitions
31
+ .map((resource) => resource.id)
32
+ .join(", ")}`);
33
+ }
34
+ return resourceDefinitions[0];
35
+ };
36
+ exports.resolveResourceDefinition = resolveResourceDefinition;
37
+ const getResourceRecordById = (resourceRecords, id, description) => {
38
+ if (!id) {
39
+ throw new Error(`${description} id is missing`);
40
+ }
41
+ const resourceRecord = resourceRecords.find((item) => item.id === id);
42
+ if (!resourceRecord) {
43
+ throw new Error(`${description} not found: ${id}`);
44
+ }
45
+ return resourceRecord;
46
+ };
47
+ exports.getResourceRecordById = getResourceRecordById;
48
+ //# sourceMappingURL=resolve-root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-root.js","sourceRoot":"","sources":["../../src/generator/resolve-root.ts"],"names":[],"mappings":";;;AAEA,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAEhC,MAAM,cAAc,GAAG,CAAC,cAA8B,EAAW,EAAE;IACxE,OAAO,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AAC3D,CAAC,CAAC;AAFW,QAAA,cAAc,kBAEzB;AAKK,MAAM,mBAAmB,GAAG,CAAC,eAAiC,EAAkB,EAAE;IACvF,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,sBAAc,CAAC,CAAC;IAE7D,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,4BAA4B,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtF,CAAC;IACJ,CAAC;IAED,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC,CAAC;AAdW,QAAA,mBAAmB,uBAc9B;AAKK,MAAM,yBAAyB,GAAG,CACvC,eAAiC,EACjC,cAAsB,EACtB,IAAY,EACI,EAAE;IAClB,MAAM,mBAAmB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,EAAE;QACpE,OAAO,CACL,cAAc,CAAC,IAAI,KAAK,qBAAqB;YAC7C,cAAc,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI;YACrC,cAAc,CAAC,QAAQ,KAAK,cAAc,CAC3C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,qCAAqC,IAAI,KAAK,mBAAmB;aAC9D,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;IACJ,CAAC;IAED,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC,CAAC;AA1BW,QAAA,yBAAyB,6BA0BpC;AAKK,MAAM,qBAAqB,GAAG,CACnC,eAAiC,EACjC,EAAsB,EACtB,WAAmB,EACH,EAAE;IAClB,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,MAAM,IAAI,KAAK,CAAC,GAAG,WAAW,gBAAgB,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAEtE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,GAAG,WAAW,eAAe,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC;AAhBW,QAAA,qBAAqB,yBAgBhC"}
package/jest.config.js CHANGED
@@ -5,7 +5,10 @@ module.exports = {
5
5
  testMatch: ["**/__tests__/**/*.test.ts"],
6
6
  moduleNameMapper: {
7
7
  "^@ldsg/types$": "<rootDir>/../../libs/types/src",
8
- "^@ldsg/constants$": "<rootDir>/../../libs/constants/src",
8
+ "^@ldsg/express-app-template-constants$":
9
+ "<rootDir>/../../template-constants/app/src",
10
+ "^@ldsg/handler-template-constants$":
11
+ "<rootDir>/../../template-constants/handler/src",
9
12
  "^@ldsg/utils$": "<rootDir>/../../libs/utils/src",
10
13
  },
11
14
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ldsg/cli",
3
- "version": "0.3.43",
3
+ "version": "0.3.45",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "license": "ISC",
@@ -17,9 +17,8 @@
17
17
  "commander": "^12.0.0",
18
18
  "fs-extra": "^11.3.0",
19
19
  "js-yaml": "^4.1.0",
20
- "@ldsg/utils": "0.3.43",
21
- "@ldsg/constants": "0.3.43",
22
- "@ldsg/types": "0.3.43"
20
+ "@ldsg/handler": "0.3.45",
21
+ "@ldsg/utils": "0.3.45"
23
22
  },
24
23
  "devDependencies": {
25
24
  "@types/fs-extra": "^11.0.4",
@@ -37,7 +36,8 @@
37
36
  "ts-jest": "^29.4.1",
38
37
  "ts-node": "^10.9.2",
39
38
  "tslib": "^2.8.1",
40
- "typescript": "^5.3.3"
39
+ "typescript": "^5.3.3",
40
+ "@ldsg/types": "0.3.45"
41
41
  },
42
42
  "scripts": {
43
43
  "build": "tsc --project tsconfig.build.json",