@simplysm/sd-cli 13.0.68 → 13.0.70
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.
- package/README.md +10 -957
- package/dist/builders/BaseBuilder.d.ts +23 -23
- package/dist/builders/BaseBuilder.d.ts.map +1 -1
- package/dist/builders/BaseBuilder.js +15 -15
- package/dist/builders/DtsBuilder.d.ts +4 -4
- package/dist/builders/DtsBuilder.js +1 -1
- package/dist/builders/LibraryBuilder.d.ts +3 -3
- package/dist/builders/types.d.ts +10 -10
- package/dist/capacitor/capacitor.d.ts +36 -36
- package/dist/capacitor/capacitor.js +63 -63
- package/dist/capacitor/capacitor.js.map +1 -1
- package/dist/commands/add-client.d.ts +8 -8
- package/dist/commands/add-client.js +15 -15
- package/dist/commands/add-client.js.map +1 -1
- package/dist/commands/add-server.d.ts +9 -9
- package/dist/commands/add-server.js +13 -13
- package/dist/commands/add-server.js.map +1 -1
- package/dist/commands/build.d.ts +9 -9
- package/dist/commands/check.js +3 -3
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/dev.d.ts +9 -9
- package/dist/commands/device.d.ts +9 -9
- package/dist/commands/device.d.ts.map +1 -1
- package/dist/commands/device.js +17 -17
- package/dist/commands/device.js.map +1 -1
- package/dist/commands/init.d.ts +6 -6
- package/dist/commands/init.js +12 -12
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/lint.d.ts +23 -23
- package/dist/commands/lint.d.ts.map +1 -1
- package/dist/commands/lint.js +25 -25
- package/dist/commands/lint.js.map +1 -1
- package/dist/commands/publish.d.ts +13 -13
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js +61 -61
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/replace-deps.d.ts +3 -3
- package/dist/commands/replace-deps.d.ts.map +1 -1
- package/dist/commands/replace-deps.js +1 -1
- package/dist/commands/replace-deps.js.map +1 -1
- package/dist/commands/typecheck.d.ts +20 -20
- package/dist/commands/typecheck.d.ts.map +1 -1
- package/dist/commands/typecheck.js +20 -20
- package/dist/commands/typecheck.js.map +1 -1
- package/dist/commands/watch.d.ts +7 -7
- package/dist/electron/electron.d.ts +27 -27
- package/dist/electron/electron.js +32 -32
- package/dist/electron/electron.js.map +1 -1
- package/dist/infra/ResultCollector.d.ts +9 -9
- package/dist/infra/ResultCollector.js +5 -5
- package/dist/infra/SignalHandler.d.ts +7 -7
- package/dist/infra/SignalHandler.js +4 -4
- package/dist/infra/WorkerManager.d.ts +14 -14
- package/dist/infra/WorkerManager.js +11 -11
- package/dist/orchestrators/BuildOrchestrator.d.ts +19 -19
- package/dist/orchestrators/BuildOrchestrator.d.ts.map +1 -1
- package/dist/orchestrators/BuildOrchestrator.js +26 -26
- package/dist/orchestrators/BuildOrchestrator.js.map +1 -1
- package/dist/orchestrators/DevOrchestrator.d.ts +25 -25
- package/dist/orchestrators/DevOrchestrator.d.ts.map +1 -1
- package/dist/orchestrators/DevOrchestrator.js +30 -30
- package/dist/orchestrators/DevOrchestrator.js.map +1 -1
- package/dist/orchestrators/WatchOrchestrator.d.ts +13 -13
- package/dist/orchestrators/WatchOrchestrator.js +17 -17
- package/dist/orchestrators/WatchOrchestrator.js.map +1 -1
- package/dist/sd-cli-entry.d.ts +2 -2
- package/dist/sd-cli-entry.js +38 -38
- package/dist/sd-cli-entry.js.map +1 -1
- package/dist/sd-cli.d.ts +2 -2
- package/dist/sd-cli.js +1 -1
- package/dist/sd-cli.js.map +1 -1
- package/dist/sd-config.types.d.ts +84 -84
- package/dist/sd-config.types.d.ts.map +1 -1
- package/dist/utils/build-env.d.ts +1 -1
- package/dist/utils/config-editor.d.ts +5 -5
- package/dist/utils/config-editor.js +2 -2
- package/dist/utils/config-editor.js.map +1 -1
- package/dist/utils/copy-public.d.ts +9 -9
- package/dist/utils/copy-src.d.ts +9 -9
- package/dist/utils/esbuild-config.d.ts +30 -30
- package/dist/utils/esbuild-config.d.ts.map +1 -1
- package/dist/utils/output-utils.d.ts +6 -6
- package/dist/utils/package-utils.d.ts +6 -6
- package/dist/utils/package-utils.js +1 -1
- package/dist/utils/package-utils.js.map +1 -1
- package/dist/utils/rebuild-manager.js +3 -3
- package/dist/utils/rebuild-manager.js.map +1 -1
- package/dist/utils/replace-deps.d.ts +25 -25
- package/dist/utils/replace-deps.js +3 -3
- package/dist/utils/replace-deps.js.map +1 -1
- package/dist/utils/sd-config.d.ts +3 -3
- package/dist/utils/sd-config.js +3 -3
- package/dist/utils/sd-config.js.map +1 -1
- package/dist/utils/tailwind-config-deps.d.ts +3 -3
- package/dist/utils/template.d.ts +8 -8
- package/dist/utils/tsconfig.d.ts +16 -16
- package/dist/utils/tsconfig.js +2 -2
- package/dist/utils/tsconfig.js.map +1 -1
- package/dist/utils/typecheck-serialization.d.ts +8 -8
- package/dist/utils/vite-config.d.ts +8 -8
- package/dist/utils/vite-config.d.ts.map +1 -1
- package/dist/utils/vite-config.js +3 -3
- package/dist/utils/worker-events.d.ts +12 -12
- package/dist/utils/worker-events.d.ts.map +1 -1
- package/dist/utils/worker-utils.d.ts +3 -3
- package/dist/utils/worker-utils.js +2 -2
- package/dist/utils/worker-utils.js.map +1 -1
- package/dist/workers/client.worker.d.ts +14 -14
- package/dist/workers/client.worker.d.ts.map +1 -1
- package/dist/workers/client.worker.js +1 -1
- package/dist/workers/client.worker.js.map +1 -1
- package/dist/workers/dts.worker.d.ts +13 -13
- package/dist/workers/dts.worker.d.ts.map +1 -1
- package/dist/workers/dts.worker.js +3 -3
- package/dist/workers/dts.worker.js.map +1 -1
- package/dist/workers/library.worker.d.ts +12 -12
- package/dist/workers/library.worker.js +1 -1
- package/dist/workers/library.worker.js.map +1 -1
- package/dist/workers/lint.worker.d.ts +1 -1
- package/dist/workers/server-runtime.worker.d.ts +6 -6
- package/dist/workers/server-runtime.worker.js +6 -6
- package/dist/workers/server-runtime.worker.js.map +1 -1
- package/dist/workers/server.worker.d.ts +20 -20
- package/dist/workers/server.worker.d.ts.map +1 -1
- package/dist/workers/server.worker.js +6 -6
- package/dist/workers/server.worker.js.map +1 -1
- package/package.json +8 -7
- package/src/builders/BaseBuilder.ts +33 -33
- package/src/builders/DtsBuilder.ts +5 -5
- package/src/builders/LibraryBuilder.ts +9 -9
- package/src/builders/types.ts +10 -10
- package/src/capacitor/capacitor.ts +119 -119
- package/src/commands/add-client.ts +31 -31
- package/src/commands/add-server.ts +34 -34
- package/src/commands/build.ts +9 -9
- package/src/commands/check.ts +5 -5
- package/src/commands/dev.ts +9 -9
- package/src/commands/device.ts +30 -30
- package/src/commands/init.ts +25 -25
- package/src/commands/lint.ts +64 -64
- package/src/commands/publish.ts +139 -139
- package/src/commands/replace-deps.ts +4 -4
- package/src/commands/typecheck.ts +74 -74
- package/src/commands/watch.ts +7 -7
- package/src/electron/electron.ts +51 -51
- package/src/infra/ResultCollector.ts +9 -9
- package/src/infra/SignalHandler.ts +7 -7
- package/src/infra/WorkerManager.ts +14 -14
- package/src/orchestrators/BuildOrchestrator.ts +76 -76
- package/src/orchestrators/DevOrchestrator.ts +88 -88
- package/src/orchestrators/WatchOrchestrator.ts +39 -39
- package/src/sd-cli-entry.ts +43 -43
- package/src/sd-cli.ts +15 -15
- package/src/sd-config.types.ts +85 -85
- package/src/utils/build-env.ts +1 -1
- package/src/utils/config-editor.ts +19 -19
- package/src/utils/copy-public.ts +17 -17
- package/src/utils/copy-src.ts +11 -11
- package/src/utils/esbuild-config.ts +33 -33
- package/src/utils/output-utils.ts +11 -11
- package/src/utils/package-utils.ts +12 -12
- package/src/utils/rebuild-manager.ts +3 -3
- package/src/utils/replace-deps.ts +361 -361
- package/src/utils/sd-config.ts +44 -44
- package/src/utils/tailwind-config-deps.ts +98 -98
- package/src/utils/template.ts +56 -56
- package/src/utils/tsconfig.ts +127 -127
- package/src/utils/typecheck-serialization.ts +86 -86
- package/src/utils/vite-config.ts +341 -341
- package/src/utils/worker-events.ts +16 -16
- package/src/utils/worker-utils.ts +45 -45
- package/src/workers/client.worker.ts +34 -34
- package/src/workers/dts.worker.ts +467 -467
- package/src/workers/library.worker.ts +314 -314
- package/src/workers/lint.worker.ts +16 -16
- package/src/workers/server-runtime.worker.ts +157 -157
- package/src/workers/server.worker.ts +572 -572
- package/templates/add-client/__CLIENT__/package.json.hbs +1 -1
- package/templates/add-server/__SERVER__/package.json.hbs +2 -2
- package/templates/init/package.json.hbs +3 -3
- package/tests/config-editor.spec.ts +160 -0
- package/tests/copy-src.spec.ts +50 -0
- package/tests/get-compiler-options-for-package.spec.ts +139 -0
- package/tests/get-package-source-files.spec.ts +181 -0
- package/tests/get-types-from-package-json.spec.ts +107 -0
- package/tests/infra/ResultCollector.spec.ts +39 -0
- package/tests/infra/SignalHandler.spec.ts +38 -0
- package/tests/infra/WorkerManager.spec.ts +97 -0
- package/tests/load-ignore-patterns.spec.ts +188 -0
- package/tests/load-sd-config.spec.ts +137 -0
- package/tests/package-utils.spec.ts +188 -0
- package/tests/parse-root-tsconfig.spec.ts +89 -0
- package/tests/replace-deps.spec.ts +308 -0
- package/tests/run-lint.spec.ts +415 -0
- package/tests/run-typecheck.spec.ts +653 -0
- package/tests/run-watch.spec.ts +75 -0
- package/tests/sd-cli.spec.ts +330 -0
- package/tests/tailwind-config-deps.spec.ts +30 -0
- package/tests/template.spec.ts +70 -0
- package/tests/utils/rebuild-manager.spec.ts +43 -0
- package/tests/write-changed-output-files.spec.ts +97 -0
|
@@ -16,7 +16,7 @@ class Electron {
|
|
|
16
16
|
_electronPath;
|
|
17
17
|
_npmConfig;
|
|
18
18
|
/**
|
|
19
|
-
* Electron
|
|
19
|
+
* Create Electron instance (with configuration validation)
|
|
20
20
|
*/
|
|
21
21
|
static async create(pkgPath, config) {
|
|
22
22
|
Electron._validateConfig(config);
|
|
@@ -24,29 +24,29 @@ class Electron {
|
|
|
24
24
|
return new Electron(pkgPath, config, npmConfig);
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
27
|
+
* Validate configuration
|
|
28
28
|
*/
|
|
29
29
|
static _validateConfig(config) {
|
|
30
30
|
if (typeof config.appId !== "string" || config.appId.trim() === "") {
|
|
31
|
-
throw new Error("electron.appId
|
|
31
|
+
throw new Error("electron.appId is required.");
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
|
-
*
|
|
35
|
+
* Execute command (with logging)
|
|
36
36
|
*/
|
|
37
37
|
async _exec(cmd, args, cwd, env) {
|
|
38
|
-
Electron._logger.debug(
|
|
38
|
+
Electron._logger.debug(`executed command: ${cmd} ${args.join(" ")}`);
|
|
39
39
|
const { stdout: result } = await execa(cmd, args, { cwd, env: { ...process.env, ...env } });
|
|
40
|
-
Electron._logger.debug(
|
|
40
|
+
Electron._logger.debug(`execution result: ${result}`);
|
|
41
41
|
return result;
|
|
42
42
|
}
|
|
43
43
|
//#region Public Methods
|
|
44
44
|
/**
|
|
45
|
-
* Electron
|
|
45
|
+
* Initialize Electron project
|
|
46
46
|
*
|
|
47
|
-
* 1. .electron/src/package.json
|
|
48
|
-
* 2. npm install
|
|
49
|
-
* 3. electron-rebuild
|
|
47
|
+
* 1. Create .electron/src/package.json
|
|
48
|
+
* 2. Run npm install
|
|
49
|
+
* 3. Run electron-rebuild (rebuild native modules)
|
|
50
50
|
*/
|
|
51
51
|
async initialize() {
|
|
52
52
|
const srcPath = path.resolve(this._electronPath, "src");
|
|
@@ -58,13 +58,13 @@ class Electron {
|
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
/**
|
|
61
|
-
*
|
|
61
|
+
* Production build
|
|
62
62
|
*
|
|
63
|
-
* 1.
|
|
64
|
-
* 2.
|
|
65
|
-
* 3. electron-builder
|
|
66
|
-
* 4. electron-builder
|
|
67
|
-
* 5.
|
|
63
|
+
* 1. Bundle electron-main.ts with esbuild
|
|
64
|
+
* 2. Copy web assets
|
|
65
|
+
* 3. Create electron-builder configuration
|
|
66
|
+
* 4. Run electron-builder
|
|
67
|
+
* 5. Copy build output
|
|
68
68
|
*/
|
|
69
69
|
async build(outPath) {
|
|
70
70
|
const srcPath = path.resolve(this._electronPath, "src");
|
|
@@ -74,11 +74,11 @@ class Electron {
|
|
|
74
74
|
await this._copyBuildOutput(outPath);
|
|
75
75
|
}
|
|
76
76
|
/**
|
|
77
|
-
*
|
|
77
|
+
* Run in development mode
|
|
78
78
|
*
|
|
79
|
-
* 1.
|
|
80
|
-
* 2. dist/electron/package.json
|
|
81
|
-
* 3. npx electron .
|
|
79
|
+
* 1. Bundle electron-main.ts with esbuild
|
|
80
|
+
* 2. Create dist/electron/package.json
|
|
81
|
+
* 3. Run npx electron .
|
|
82
82
|
*/
|
|
83
83
|
async run(url) {
|
|
84
84
|
const electronRunPath = path.resolve(this._pkgPath, "dist/electron");
|
|
@@ -99,9 +99,9 @@ class Electron {
|
|
|
99
99
|
await this._exec("npx", ["electron", "."], electronRunPath, runEnv);
|
|
100
100
|
}
|
|
101
101
|
//#endregion
|
|
102
|
-
//#region Private -
|
|
102
|
+
//#region Private - Initialization
|
|
103
103
|
/**
|
|
104
|
-
* .electron/src/package.json
|
|
104
|
+
* Create .electron/src/package.json
|
|
105
105
|
*/
|
|
106
106
|
async _setupPackageJson(srcPath) {
|
|
107
107
|
await fsMkdir(srcPath);
|
|
@@ -126,15 +126,15 @@ class Electron {
|
|
|
126
126
|
await fsWriteJson(path.resolve(srcPath, "package.json"), packageJson, { space: 2 });
|
|
127
127
|
}
|
|
128
128
|
//#endregion
|
|
129
|
-
//#region Private -
|
|
129
|
+
//#region Private - Bundling
|
|
130
130
|
/**
|
|
131
|
-
*
|
|
131
|
+
* Bundle electron-main.ts with esbuild
|
|
132
132
|
*/
|
|
133
133
|
async _bundleMainProcess(outDir) {
|
|
134
134
|
const esbuild = await import("esbuild");
|
|
135
135
|
const entryPoint = path.resolve(this._pkgPath, "src/electron-main.ts");
|
|
136
136
|
if (!await fsExists(entryPoint)) {
|
|
137
|
-
throw new Error(`electron-main.ts
|
|
137
|
+
throw new Error(`electron-main.ts file not found: ${entryPoint}`);
|
|
138
138
|
}
|
|
139
139
|
const builtinModules = module.builtinModules.flatMap((m) => [m, `node:${m}`]);
|
|
140
140
|
const reinstallDeps = this._config.reinstallDependencies ?? [];
|
|
@@ -150,9 +150,9 @@ class Electron {
|
|
|
150
150
|
});
|
|
151
151
|
}
|
|
152
152
|
//#endregion
|
|
153
|
-
//#region Private -
|
|
153
|
+
//#region Private - Build
|
|
154
154
|
/**
|
|
155
|
-
*
|
|
155
|
+
* Copy web assets (build output → .electron/src/)
|
|
156
156
|
*/
|
|
157
157
|
async _copyWebAssets(outPath, srcPath) {
|
|
158
158
|
const items = await fsReaddir(outPath);
|
|
@@ -164,7 +164,7 @@ class Electron {
|
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
166
|
/**
|
|
167
|
-
*
|
|
167
|
+
* Check if symlink creation is possible (Windows build requirement)
|
|
168
168
|
*/
|
|
169
169
|
static _canCreateSymlink() {
|
|
170
170
|
const tmpDir = os.tmpdir();
|
|
@@ -182,12 +182,12 @@ class Electron {
|
|
|
182
182
|
}
|
|
183
183
|
}
|
|
184
184
|
/**
|
|
185
|
-
* electron-builder
|
|
185
|
+
* Run electron-builder
|
|
186
186
|
*/
|
|
187
187
|
async _runElectronBuilder(srcPath) {
|
|
188
188
|
if (!Electron._canCreateSymlink()) {
|
|
189
189
|
throw new Error(
|
|
190
|
-
"
|
|
190
|
+
"Symlink creation permission is required to build Electron. Enable Developer mode on Windows."
|
|
191
191
|
);
|
|
192
192
|
}
|
|
193
193
|
const distPath = path.resolve(this._electronPath, "dist");
|
|
@@ -219,7 +219,7 @@ class Electron {
|
|
|
219
219
|
);
|
|
220
220
|
}
|
|
221
221
|
/**
|
|
222
|
-
*
|
|
222
|
+
* Copy build output (.electron/dist/ → dist/electron/)
|
|
223
223
|
*/
|
|
224
224
|
async _copyBuildOutput(outPath) {
|
|
225
225
|
const distPath = path.resolve(this._electronPath, "dist");
|
|
@@ -237,7 +237,7 @@ class Electron {
|
|
|
237
237
|
await fsMkdir(updatesPath);
|
|
238
238
|
await fsCopy(sourcePath, path.resolve(updatesPath, `${version}.exe`));
|
|
239
239
|
} else {
|
|
240
|
-
Electron._logger.warn(
|
|
240
|
+
Electron._logger.warn(`build output not found: ${sourcePath}`);
|
|
241
241
|
}
|
|
242
242
|
}
|
|
243
243
|
//#endregion
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/electron/electron.ts"],
|
|
4
|
-
"mappings": "AAAA,OAAO,UAAU;AACjB,OAAO,QAAQ;AACf,OAAO,QAAQ;AACf,OAAO,YAAY;AACnB,SAAS,UAAU,SAAS,QAAQ,WAAW,YAAY,mBAAmB;AAC9E,SAAS,eAAe;AAExB,SAAS,aAAa;AAmBf,MAAM,SAAS;AAAA,EAMZ,YACW,UACA,SACjB,WACA;AAHiB;AACA;AAGjB,SAAK,aAAa;AAClB,SAAK,gBAAgB,KAAK,QAAQ,KAAK,UAAU,WAAW;AAAA,EAC9D;AAAA,EAZA,OAAwB,UAAU,QAAQ,QAAQ,iBAAiB;AAAA,EAElD;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAcjB,aAAa,OAAO,SAAiB,QAA6C;AAChF,aAAS,gBAAgB,MAAM;AAE/B,UAAM,YAAY,MAAM,WAAsB,KAAK,QAAQ,SAAS,cAAc,CAAC;AACnF,WAAO,IAAI,SAAS,SAAS,QAAQ,SAAS;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,gBAAgB,QAAgC;AAC7D,QAAI,OAAO,OAAO,UAAU,YAAY,OAAO,MAAM,KAAK,MAAM,IAAI;AAClE,YAAM,IAAI,MAAM,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Build result status
|
|
3
3
|
*/
|
|
4
4
|
export interface BuildResult {
|
|
5
5
|
name: string;
|
|
@@ -10,25 +10,25 @@ export interface BuildResult {
|
|
|
10
10
|
port?: number;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
13
|
+
* Class that collects and manages build results
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
15
|
+
* Manages build results from multiple Builders at a central location and
|
|
16
|
+
* provides filtering and output functionality by status.
|
|
17
17
|
*/
|
|
18
18
|
export declare class ResultCollector {
|
|
19
19
|
private readonly _results;
|
|
20
20
|
/**
|
|
21
|
-
*
|
|
22
|
-
* @param result
|
|
21
|
+
* Add result
|
|
22
|
+
* @param result build result
|
|
23
23
|
*/
|
|
24
24
|
add(result: BuildResult): void;
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
27
|
-
* @param key
|
|
26
|
+
* Get result by key
|
|
27
|
+
* @param key result key (e.g., "core-common:build")
|
|
28
28
|
*/
|
|
29
29
|
get(key: string): BuildResult | undefined;
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
31
|
+
* Return internal Map (for backward compatibility)
|
|
32
32
|
*/
|
|
33
33
|
toMap(): Map<string, BuildResult>;
|
|
34
34
|
}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
class ResultCollector {
|
|
2
2
|
_results = /* @__PURE__ */ new Map();
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* @param result
|
|
4
|
+
* Add result
|
|
5
|
+
* @param result build result
|
|
6
6
|
*/
|
|
7
7
|
add(result) {
|
|
8
8
|
const key = `${result.name}:${result.type}`;
|
|
9
9
|
this._results.set(key, result);
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
* @param key
|
|
12
|
+
* Get result by key
|
|
13
|
+
* @param key result key (e.g., "core-common:build")
|
|
14
14
|
*/
|
|
15
15
|
get(key) {
|
|
16
16
|
return this._results.get(key);
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* Return internal Map (for backward compatibility)
|
|
20
20
|
*/
|
|
21
21
|
toMap() {
|
|
22
22
|
return this._results;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Class that handles process termination signals
|
|
3
3
|
*
|
|
4
|
-
* SIGINT (Ctrl+C)
|
|
5
|
-
*
|
|
4
|
+
* Detects SIGINT (Ctrl+C) and SIGTERM signals and
|
|
5
|
+
* provides a Promise that waits until termination.
|
|
6
6
|
*/
|
|
7
7
|
export declare class SignalHandler {
|
|
8
8
|
private _terminateResolver;
|
|
@@ -10,16 +10,16 @@ export declare class SignalHandler {
|
|
|
10
10
|
private _terminated;
|
|
11
11
|
constructor();
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
13
|
+
* Wait until termination signal is received
|
|
14
14
|
*/
|
|
15
15
|
waitForTermination(): Promise<void>;
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* Check if terminated
|
|
18
18
|
*/
|
|
19
19
|
isTerminated(): boolean;
|
|
20
20
|
/**
|
|
21
|
-
*
|
|
22
|
-
* (
|
|
21
|
+
* Request termination programmatically
|
|
22
|
+
* (used when triggering termination from tests or externally)
|
|
23
23
|
*/
|
|
24
24
|
requestTermination(): void;
|
|
25
25
|
}
|
|
@@ -16,20 +16,20 @@ class SignalHandler {
|
|
|
16
16
|
process.on("SIGTERM", handler);
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* Wait until termination signal is received
|
|
20
20
|
*/
|
|
21
21
|
waitForTermination() {
|
|
22
22
|
return this._terminatePromise;
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
25
|
+
* Check if terminated
|
|
26
26
|
*/
|
|
27
27
|
isTerminated() {
|
|
28
28
|
return this._terminated;
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
32
|
-
* (
|
|
31
|
+
* Request termination programmatically
|
|
32
|
+
* (used when triggering termination from tests or externally)
|
|
33
33
|
*/
|
|
34
34
|
requestTermination() {
|
|
35
35
|
if (!this._terminated) {
|
|
@@ -1,39 +1,39 @@
|
|
|
1
1
|
import { type WorkerProxy, type WorkerModule } from "@simplysm/core-node";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Class that manages Worker lifecycle
|
|
4
4
|
*
|
|
5
|
-
* Worker
|
|
6
|
-
*
|
|
5
|
+
* Centrally manages Worker creation, lookup, and termination
|
|
6
|
+
* to prevent resource leaks and provide consistent Worker management.
|
|
7
7
|
*/
|
|
8
8
|
export declare class WorkerManager {
|
|
9
9
|
private readonly _workers;
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
12
|
-
* @param id Worker
|
|
13
|
-
* @param workerPath Worker
|
|
14
|
-
* @returns
|
|
11
|
+
* Create a new Worker
|
|
12
|
+
* @param id Worker identifier (e.g., "core-common:build")
|
|
13
|
+
* @param workerPath Worker file path
|
|
14
|
+
* @returns Created WorkerProxy
|
|
15
15
|
*/
|
|
16
16
|
create<TModule extends WorkerModule>(id: string, workerPath: string): WorkerProxy<TModule>;
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
19
|
-
* @param id Worker
|
|
18
|
+
* Lookup Worker by ID
|
|
19
|
+
* @param id Worker identifier
|
|
20
20
|
*/
|
|
21
21
|
get<TModule extends WorkerModule>(id: string): WorkerProxy<TModule> | undefined;
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
24
|
-
* @param id Worker
|
|
23
|
+
* Terminate and remove a specific Worker
|
|
24
|
+
* @param id Worker identifier
|
|
25
25
|
*/
|
|
26
26
|
terminate(id: string): Promise<void>;
|
|
27
27
|
/**
|
|
28
|
-
*
|
|
28
|
+
* Terminate all Workers
|
|
29
29
|
*/
|
|
30
30
|
terminateAll(): Promise<void>;
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
32
|
+
* Number of managed Workers
|
|
33
33
|
*/
|
|
34
34
|
get size(): number;
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
36
|
+
* List of all Worker IDs
|
|
37
37
|
*/
|
|
38
38
|
get ids(): string[];
|
|
39
39
|
}
|
|
@@ -2,10 +2,10 @@ import { Worker } from "@simplysm/core-node";
|
|
|
2
2
|
class WorkerManager {
|
|
3
3
|
_workers = /* @__PURE__ */ new Map();
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
* @param id Worker
|
|
7
|
-
* @param workerPath Worker
|
|
8
|
-
* @returns
|
|
5
|
+
* Create a new Worker
|
|
6
|
+
* @param id Worker identifier (e.g., "core-common:build")
|
|
7
|
+
* @param workerPath Worker file path
|
|
8
|
+
* @returns Created WorkerProxy
|
|
9
9
|
*/
|
|
10
10
|
create(id, workerPath) {
|
|
11
11
|
const worker = Worker.create(workerPath);
|
|
@@ -13,15 +13,15 @@ class WorkerManager {
|
|
|
13
13
|
return worker;
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
|
-
*
|
|
17
|
-
* @param id Worker
|
|
16
|
+
* Lookup Worker by ID
|
|
17
|
+
* @param id Worker identifier
|
|
18
18
|
*/
|
|
19
19
|
get(id) {
|
|
20
20
|
return this._workers.get(id);
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
24
|
-
* @param id Worker
|
|
23
|
+
* Terminate and remove a specific Worker
|
|
24
|
+
* @param id Worker identifier
|
|
25
25
|
*/
|
|
26
26
|
async terminate(id) {
|
|
27
27
|
const worker = this._workers.get(id);
|
|
@@ -31,20 +31,20 @@ class WorkerManager {
|
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
|
-
*
|
|
34
|
+
* Terminate all Workers
|
|
35
35
|
*/
|
|
36
36
|
async terminateAll() {
|
|
37
37
|
await Promise.all([...this._workers.values()].map((w) => w.terminate()));
|
|
38
38
|
this._workers.clear();
|
|
39
39
|
}
|
|
40
40
|
/**
|
|
41
|
-
*
|
|
41
|
+
* Number of managed Workers
|
|
42
42
|
*/
|
|
43
43
|
get size() {
|
|
44
44
|
return this._workers.size;
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
47
|
-
*
|
|
47
|
+
* List of all Worker IDs
|
|
48
48
|
*/
|
|
49
49
|
get ids() {
|
|
50
50
|
return [...this._workers.keys()];
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Build Orchestrator
|
|
2
|
+
* Build Orchestrator options
|
|
3
3
|
*/
|
|
4
4
|
export interface BuildOrchestratorOptions {
|
|
5
|
-
/**
|
|
5
|
+
/** Package filter for build (empty array includes all packages) */
|
|
6
6
|
targets: string[];
|
|
7
|
-
/** sd.config.ts
|
|
7
|
+
/** Additional options to pass to sd.config.ts */
|
|
8
8
|
options: string[];
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* Orchestrator for coordinating production builds
|
|
12
12
|
*
|
|
13
|
-
* sd.config.ts
|
|
14
|
-
* - dist
|
|
15
|
-
* - lint +
|
|
16
|
-
* - node/browser/neutral
|
|
17
|
-
* - client
|
|
18
|
-
* - server
|
|
13
|
+
* Classifies packages based on sd.config.ts and executes builds.
|
|
14
|
+
* - Clean dist folders (clean build)
|
|
15
|
+
* - Run lint + build concurrently
|
|
16
|
+
* - node/browser/neutral targets: esbuild JS build + dts generation
|
|
17
|
+
* - client targets: Vite production build + typecheck + Capacitor/Electron builds
|
|
18
|
+
* - server targets: esbuild JS build
|
|
19
19
|
*/
|
|
20
20
|
export declare class BuildOrchestrator {
|
|
21
21
|
private readonly _cwd;
|
|
@@ -27,24 +27,24 @@ export declare class BuildOrchestrator {
|
|
|
27
27
|
private _baseEnv;
|
|
28
28
|
constructor(options: BuildOrchestratorOptions);
|
|
29
29
|
/**
|
|
30
|
-
* Orchestrator
|
|
31
|
-
* - sd.config.ts
|
|
32
|
-
* - replaceDeps
|
|
33
|
-
* -
|
|
34
|
-
* -
|
|
30
|
+
* Initialize Orchestrator
|
|
31
|
+
* - Load sd.config.ts
|
|
32
|
+
* - Configure replaceDeps
|
|
33
|
+
* - Classify packages
|
|
34
|
+
* - Prepare environment variables
|
|
35
35
|
*/
|
|
36
36
|
initialize(): Promise<void>;
|
|
37
37
|
/**
|
|
38
|
-
*
|
|
38
|
+
* Execute build
|
|
39
39
|
* - Clean
|
|
40
40
|
* - Lint + Build (concurrent)
|
|
41
|
-
* -
|
|
41
|
+
* - Output results
|
|
42
42
|
*
|
|
43
|
-
* @returns
|
|
43
|
+
* @returns whether errors occurred (true: errors present)
|
|
44
44
|
*/
|
|
45
45
|
start(): Promise<boolean>;
|
|
46
46
|
/**
|
|
47
|
-
* Orchestrator
|
|
47
|
+
* Shutdown Orchestrator (no resources to clean up currently)
|
|
48
48
|
*/
|
|
49
49
|
shutdown(): Promise<void>;
|
|
50
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuildOrchestrator.d.ts","sourceRoot":"","sources":["..\\..\\src\\orchestrators\\BuildOrchestrator.ts"],"names":[],"mappings":"AA4BA;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,
|
|
1
|
+
{"version":3,"file":"BuildOrchestrator.d.ts","sourceRoot":"","sources":["..\\..\\src\\orchestrators\\BuildOrchestrator.ts"],"names":[],"mappings":"AA4BA;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,mEAAmE;IACnE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iDAAiD;IACjD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAmFD;;;;;;;;;GASG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAE3D,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAA2C;gBAE/C,OAAO,EAAE,wBAAwB;IAK7C;;;;;;OAMG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAyCjC;;;;;;;OAOG;IACG,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IA6S/B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAKhC"}
|