@simplysm/sd-cli 13.0.93 → 13.0.95
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 +1 -1
- package/dist/capacitor/capacitor.d.ts +15 -1
- package/dist/capacitor/capacitor.d.ts.map +1 -1
- package/dist/capacitor/capacitor.js +52 -31
- package/dist/capacitor/capacitor.js.map +1 -1
- package/dist/electron/electron.d.ts +6 -2
- package/dist/electron/electron.d.ts.map +1 -1
- package/dist/electron/electron.js +12 -6
- package/dist/electron/electron.js.map +1 -1
- package/dist/orchestrators/DevOrchestrator.d.ts.map +1 -1
- package/dist/orchestrators/DevOrchestrator.js +16 -0
- package/dist/orchestrators/DevOrchestrator.js.map +1 -1
- package/dist/sd-cli-entry.d.ts.map +1 -1
- package/dist/sd-cli-entry.js +4 -1
- package/dist/sd-cli-entry.js.map +1 -1
- package/dist/utils/esbuild-config.d.ts +2 -0
- package/dist/utils/esbuild-config.d.ts.map +1 -1
- package/dist/utils/esbuild-config.js +86 -6
- package/dist/utils/esbuild-config.js.map +1 -1
- package/dist/utils/package-utils.d.ts.map +1 -1
- package/dist/utils/package-utils.js +7 -0
- package/dist/utils/package-utils.js.map +1 -1
- package/dist/utils/replace-deps.d.ts.map +1 -1
- package/dist/utils/replace-deps.js +17 -0
- package/dist/utils/replace-deps.js.map +1 -1
- package/dist/utils/worker-utils.d.ts +9 -1
- package/dist/utils/worker-utils.d.ts.map +1 -1
- package/dist/utils/worker-utils.js +7 -0
- package/dist/utils/worker-utils.js.map +1 -1
- package/dist/workers/client.worker.d.ts.map +1 -1
- package/dist/workers/client.worker.js +2 -1
- package/dist/workers/client.worker.js.map +1 -1
- package/dist/workers/dts.worker.d.ts.map +1 -1
- package/dist/workers/dts.worker.js +2 -1
- package/dist/workers/dts.worker.js.map +1 -1
- package/dist/workers/library.worker.d.ts.map +1 -1
- package/dist/workers/library.worker.js +2 -1
- package/dist/workers/library.worker.js.map +1 -1
- package/dist/workers/server-runtime.worker.d.ts.map +1 -1
- package/dist/workers/server-runtime.worker.js +31 -2
- package/dist/workers/server-runtime.worker.js.map +1 -1
- package/dist/workers/server.worker.d.ts.map +1 -1
- package/dist/workers/server.worker.js +144 -4
- package/dist/workers/server.worker.js.map +1 -1
- package/package.json +4 -4
- package/src/capacitor/capacitor.ts +59 -31
- package/src/electron/electron.ts +13 -6
- package/src/orchestrators/DevOrchestrator.ts +16 -0
- package/src/sd-cli-entry.ts +4 -1
- package/src/utils/esbuild-config.ts +86 -6
- package/src/utils/package-utils.ts +8 -0
- package/src/utils/replace-deps.ts +20 -0
- package/src/utils/worker-utils.ts +14 -1
- package/src/workers/client.worker.ts +3 -1
- package/src/workers/dts.worker.ts +3 -1
- package/src/workers/library.worker.ts +3 -1
- package/src/workers/server-runtime.worker.ts +34 -2
- package/src/workers/server.worker.ts +165 -3
- package/templates/init/package.json.hbs +3 -3
- package/templates/init/packages/client-admin/package.json.hbs +7 -7
- package/templates/init/packages/db-main/package.json.hbs +2 -2
- package/templates/init/packages/server/package.json.hbs +5 -5
- package/templates/init/tests-e2e/package.json.hbs +1 -1
- package/tests/capacitor.spec.ts +49 -0
|
@@ -16,9 +16,10 @@ import {
|
|
|
16
16
|
collectNativeModuleExternals,
|
|
17
17
|
writeChangedOutputFiles
|
|
18
18
|
} from "../utils/esbuild-config.js";
|
|
19
|
-
import { registerCleanupHandlers, createOnceGuard } from "../utils/worker-utils.js";
|
|
19
|
+
import { registerCleanupHandlers, createOnceGuard, applyDebugLevel } from "../utils/worker-utils.js";
|
|
20
20
|
import { collectDeps } from "../utils/package-utils.js";
|
|
21
21
|
import { copyPublicFiles, watchPublicFiles } from "../utils/copy-public.js";
|
|
22
|
+
applyDebugLevel();
|
|
22
23
|
const logger = consola.withTag("sd:cli:server:worker");
|
|
23
24
|
let esbuildContext;
|
|
24
25
|
let lastMetafile;
|
|
@@ -43,8 +44,18 @@ async function cleanup() {
|
|
|
43
44
|
}
|
|
44
45
|
}
|
|
45
46
|
function collectAllExternals(pkgDir, manualExternals) {
|
|
47
|
+
logger.debug("[externals] Scanning optional peer deps...");
|
|
48
|
+
let stepStart = performance.now();
|
|
46
49
|
const optionalPeerDeps = collectUninstalledOptionalPeerDeps(pkgDir);
|
|
50
|
+
logger.debug(
|
|
51
|
+
`[externals] Optional peer deps done: ${String(optionalPeerDeps.length)} found (${Math.round(performance.now() - stepStart)}ms)`
|
|
52
|
+
);
|
|
53
|
+
logger.debug("[externals] Scanning native modules...");
|
|
54
|
+
stepStart = performance.now();
|
|
47
55
|
const nativeModules = collectNativeModuleExternals(pkgDir);
|
|
56
|
+
logger.debug(
|
|
57
|
+
`[externals] Native modules done: ${String(nativeModules.length)} found (${Math.round(performance.now() - stepStart)}ms)`
|
|
58
|
+
);
|
|
48
59
|
const manual = manualExternals ?? [];
|
|
49
60
|
const merged = [.../* @__PURE__ */ new Set([...optionalPeerDeps, ...nativeModules, ...manual])];
|
|
50
61
|
if (optionalPeerDeps.length > 0) {
|
|
@@ -159,14 +170,32 @@ registerCleanupHandlers(cleanup, logger);
|
|
|
159
170
|
async function build(info) {
|
|
160
171
|
const mainJsPath = path.join(info.pkgDir, "dist", "main.js");
|
|
161
172
|
try {
|
|
173
|
+
logger.debug("[build] Parsing tsconfig...");
|
|
174
|
+
let stepStart = performance.now();
|
|
162
175
|
const parsedConfig = parseRootTsconfig(info.cwd);
|
|
176
|
+
logger.debug(`[build] tsconfig parsed (${Math.round(performance.now() - stepStart)}ms)`);
|
|
177
|
+
stepStart = performance.now();
|
|
163
178
|
const entryPoints = getPackageSourceFiles(info.pkgDir, parsedConfig);
|
|
179
|
+
logger.debug(
|
|
180
|
+
`[build] Found ${String(entryPoints.length)} source files (${Math.round(performance.now() - stepStart)}ms)`
|
|
181
|
+
);
|
|
182
|
+
logger.debug("[build] Getting compiler options...");
|
|
183
|
+
stepStart = performance.now();
|
|
164
184
|
const compilerOptions = await getCompilerOptionsForPackage(
|
|
165
185
|
parsedConfig.options,
|
|
166
186
|
"node",
|
|
167
187
|
info.pkgDir
|
|
168
188
|
);
|
|
189
|
+
logger.debug(
|
|
190
|
+
`[build] Compiler options ready (${Math.round(performance.now() - stepStart)}ms)`
|
|
191
|
+
);
|
|
192
|
+
logger.debug("[build] Collecting externals...");
|
|
193
|
+
stepStart = performance.now();
|
|
169
194
|
const external = collectAllExternals(info.pkgDir, info.externals);
|
|
195
|
+
logger.debug(
|
|
196
|
+
`[build] Collected ${String(external.length)} externals (${Math.round(performance.now() - stepStart)}ms)`
|
|
197
|
+
);
|
|
198
|
+
logger.debug("[build] Creating esbuild options...");
|
|
170
199
|
const esbuildOptions = createServerEsbuildOptions({
|
|
171
200
|
pkgDir: info.pkgDir,
|
|
172
201
|
entryPoints,
|
|
@@ -174,11 +203,24 @@ async function build(info) {
|
|
|
174
203
|
env: info.env,
|
|
175
204
|
external
|
|
176
205
|
});
|
|
206
|
+
logger.debug("[build] Running esbuild...");
|
|
207
|
+
stepStart = performance.now();
|
|
177
208
|
const result = await esbuild.build(esbuildOptions);
|
|
209
|
+
logger.debug(`[build] esbuild done (${Math.round(performance.now() - stepStart)}ms)`);
|
|
178
210
|
const confDistPath = path.join(info.pkgDir, "dist", ".config.json");
|
|
179
211
|
fs.writeFileSync(confDistPath, JSON.stringify(info.configs ?? {}, void 0, 2));
|
|
212
|
+
logger.debug("[build] Copying public files...");
|
|
213
|
+
stepStart = performance.now();
|
|
180
214
|
await copyPublicFiles(info.pkgDir, false);
|
|
215
|
+
logger.debug(
|
|
216
|
+
`[build] Public files copied (${Math.round(performance.now() - stepStart)}ms)`
|
|
217
|
+
);
|
|
218
|
+
logger.debug("[build] Generating production files...");
|
|
219
|
+
stepStart = performance.now();
|
|
181
220
|
generateProductionFiles(info, external);
|
|
221
|
+
logger.debug(
|
|
222
|
+
`[build] Production files generated (${Math.round(performance.now() - stepStart)}ms)`
|
|
223
|
+
);
|
|
182
224
|
const errors = result.errors.map((e) => e.text);
|
|
183
225
|
const warnings = result.warnings.map((w) => w.text);
|
|
184
226
|
return {
|
|
@@ -197,23 +239,45 @@ async function build(info) {
|
|
|
197
239
|
}
|
|
198
240
|
const guardStartWatch = createOnceGuard("startWatch");
|
|
199
241
|
async function createAndBuildContext(info, isFirstBuild, resolveFirstBuild) {
|
|
242
|
+
const contextStart = performance.now();
|
|
243
|
+
logger.debug("[context] Parsing tsconfig...");
|
|
244
|
+
let stepStart = performance.now();
|
|
200
245
|
const parsedConfig = parseRootTsconfig(info.cwd);
|
|
246
|
+
logger.debug(`[context] tsconfig parsed (${Math.round(performance.now() - stepStart)}ms)`);
|
|
247
|
+
stepStart = performance.now();
|
|
201
248
|
const entryPoints = getPackageSourceFiles(info.pkgDir, parsedConfig);
|
|
249
|
+
logger.debug(
|
|
250
|
+
`[context] Found ${String(entryPoints.length)} source files (${Math.round(performance.now() - stepStart)}ms)`
|
|
251
|
+
);
|
|
252
|
+
logger.debug("[context] Getting compiler options...");
|
|
253
|
+
stepStart = performance.now();
|
|
202
254
|
const compilerOptions = await getCompilerOptionsForPackage(
|
|
203
255
|
parsedConfig.options,
|
|
204
256
|
"node",
|
|
205
257
|
info.pkgDir
|
|
206
258
|
);
|
|
259
|
+
logger.debug(
|
|
260
|
+
`[context] Compiler options ready (${Math.round(performance.now() - stepStart)}ms)`
|
|
261
|
+
);
|
|
207
262
|
const mainJsPath = path.join(info.pkgDir, "dist", "main.js");
|
|
263
|
+
logger.debug("[context] Collecting externals...");
|
|
264
|
+
stepStart = performance.now();
|
|
208
265
|
const external = collectAllExternals(info.pkgDir, info.externals);
|
|
266
|
+
logger.debug(
|
|
267
|
+
`[context] Collected ${String(external.length)} externals (${Math.round(performance.now() - stepStart)}ms)`
|
|
268
|
+
);
|
|
269
|
+
logger.debug("[context] Creating esbuild options (dev mode, minify disabled)...");
|
|
209
270
|
const baseOptions = createServerEsbuildOptions({
|
|
210
271
|
pkgDir: info.pkgDir,
|
|
211
272
|
entryPoints,
|
|
212
273
|
compilerOptions,
|
|
213
274
|
env: info.env,
|
|
214
|
-
external
|
|
275
|
+
external,
|
|
276
|
+
dev: true
|
|
215
277
|
});
|
|
216
278
|
let isBuildFirstTime = isFirstBuild;
|
|
279
|
+
logger.debug("[context] Creating esbuild context...");
|
|
280
|
+
stepStart = performance.now();
|
|
217
281
|
const context = await esbuild.context({
|
|
218
282
|
...baseOptions,
|
|
219
283
|
metafile: true,
|
|
@@ -222,19 +286,44 @@ async function createAndBuildContext(info, isFirstBuild, resolveFirstBuild) {
|
|
|
222
286
|
{
|
|
223
287
|
name: "watch-notify",
|
|
224
288
|
setup(pluginBuild) {
|
|
289
|
+
let consecutiveStarts = 0;
|
|
225
290
|
pluginBuild.onStart(() => {
|
|
226
|
-
|
|
291
|
+
consecutiveStarts++;
|
|
292
|
+
logger.debug(`[esbuild] onStart (#${String(consecutiveStarts)})`);
|
|
293
|
+
if (consecutiveStarts > 3) {
|
|
294
|
+
void context.dispose().catch(() => {
|
|
295
|
+
});
|
|
296
|
+
void esbuild.build(baseOptions).catch((err) => {
|
|
297
|
+
sender.send("build", {
|
|
298
|
+
success: false,
|
|
299
|
+
mainJsPath,
|
|
300
|
+
errors: [errNs.message(err)]
|
|
301
|
+
});
|
|
302
|
+
}).finally(() => {
|
|
303
|
+
resolveFirstBuild?.();
|
|
304
|
+
});
|
|
305
|
+
} else {
|
|
306
|
+
sender.send("buildStart", {});
|
|
307
|
+
}
|
|
227
308
|
});
|
|
228
309
|
pluginBuild.onEnd(async (result) => {
|
|
310
|
+
consecutiveStarts = 0;
|
|
229
311
|
if (result.metafile != null) {
|
|
230
312
|
lastMetafile = result.metafile;
|
|
313
|
+
logger.debug(
|
|
314
|
+
`[esbuild] Metafile: ${String(Object.keys(result.metafile.inputs).length)} inputs, ${String(Object.keys(result.metafile.outputs).length)} outputs`
|
|
315
|
+
);
|
|
231
316
|
}
|
|
232
317
|
const errors = result.errors.map((e) => e.text);
|
|
233
318
|
const warnings = result.warnings.map((w) => w.text);
|
|
234
319
|
const success = result.errors.length === 0;
|
|
235
320
|
let hasOutputChange = false;
|
|
236
321
|
if (success && result.outputFiles != null) {
|
|
322
|
+
const writeStart = performance.now();
|
|
237
323
|
hasOutputChange = await writeChangedOutputFiles(result.outputFiles);
|
|
324
|
+
logger.debug(
|
|
325
|
+
`[esbuild] Output files written: changed=${String(hasOutputChange)}, count=${String(result.outputFiles.length)} (${Math.round(performance.now() - writeStart)}ms)`
|
|
326
|
+
);
|
|
238
327
|
}
|
|
239
328
|
if (isBuildFirstTime && success) {
|
|
240
329
|
const confDistPath = path.join(info.pkgDir, "dist", ".config.json");
|
|
@@ -259,20 +348,63 @@ async function createAndBuildContext(info, isFirstBuild, resolveFirstBuild) {
|
|
|
259
348
|
}
|
|
260
349
|
]
|
|
261
350
|
});
|
|
262
|
-
|
|
351
|
+
logger.debug(
|
|
352
|
+
`[context] esbuild context created (${Math.round(performance.now() - stepStart)}ms)`
|
|
353
|
+
);
|
|
354
|
+
logger.debug("[context] Running initial rebuild...");
|
|
355
|
+
stepStart = performance.now();
|
|
356
|
+
const progressTimer = setInterval(() => {
|
|
357
|
+
logger.debug(
|
|
358
|
+
`[esbuild] Still building... (${Math.round((performance.now() - stepStart) / 1e3)}s elapsed)`
|
|
359
|
+
);
|
|
360
|
+
}, 5e3);
|
|
361
|
+
try {
|
|
362
|
+
await context.rebuild();
|
|
363
|
+
} catch {
|
|
364
|
+
} finally {
|
|
365
|
+
clearInterval(progressTimer);
|
|
366
|
+
}
|
|
367
|
+
logger.debug(
|
|
368
|
+
`[context] Initial rebuild done (${Math.round(performance.now() - stepStart)}ms)`
|
|
369
|
+
);
|
|
370
|
+
logger.debug(
|
|
371
|
+
`[context] Total context setup: ${Math.round(performance.now() - contextStart)}ms`
|
|
372
|
+
);
|
|
263
373
|
return context;
|
|
264
374
|
}
|
|
265
375
|
async function startWatch(info) {
|
|
266
376
|
guardStartWatch();
|
|
267
377
|
try {
|
|
378
|
+
const watchStart = performance.now();
|
|
379
|
+
logger.debug("[startWatch] Starting watch setup...");
|
|
268
380
|
let resolveFirstBuild;
|
|
269
381
|
const firstBuildPromise = new Promise((resolve) => {
|
|
270
382
|
resolveFirstBuild = resolve;
|
|
271
383
|
});
|
|
384
|
+
logger.debug("[startWatch] Creating initial esbuild context...");
|
|
385
|
+
let stepStart = performance.now();
|
|
272
386
|
esbuildContext = await createAndBuildContext(info, true, resolveFirstBuild);
|
|
387
|
+
logger.debug(
|
|
388
|
+
`[startWatch] Initial context created (${Math.round(performance.now() - stepStart)}ms)`
|
|
389
|
+
);
|
|
390
|
+
logger.debug("[startWatch] Waiting for first build completion...");
|
|
391
|
+
stepStart = performance.now();
|
|
273
392
|
await firstBuildPromise;
|
|
393
|
+
logger.debug(
|
|
394
|
+
`[startWatch] First build completed (${Math.round(performance.now() - stepStart)}ms)`
|
|
395
|
+
);
|
|
396
|
+
logger.debug("[startWatch] Setting up public file watcher...");
|
|
397
|
+
stepStart = performance.now();
|
|
274
398
|
publicWatcher = await watchPublicFiles(info.pkgDir, true);
|
|
399
|
+
logger.debug(
|
|
400
|
+
`[startWatch] Public watcher ready (${Math.round(performance.now() - stepStart)}ms)`
|
|
401
|
+
);
|
|
402
|
+
logger.debug("[startWatch] Collecting dependencies for watch paths...");
|
|
403
|
+
stepStart = performance.now();
|
|
275
404
|
const { workspaceDeps, replaceDeps } = collectDeps(info.pkgDir, info.cwd, info.replaceDeps);
|
|
405
|
+
logger.debug(
|
|
406
|
+
`[startWatch] Deps collected: workspace=${String(workspaceDeps.length)}, replace=${String(replaceDeps.length)} (${Math.round(performance.now() - stepStart)}ms)`
|
|
407
|
+
);
|
|
276
408
|
const watchPaths = [];
|
|
277
409
|
const watchDirs = [
|
|
278
410
|
info.pkgDir,
|
|
@@ -288,7 +420,15 @@ async function startWatch(info) {
|
|
|
288
420
|
path.join(info.pkgDir, "node_modules", ...pkg.split("/"), "dist", "**", "*.js")
|
|
289
421
|
);
|
|
290
422
|
}
|
|
423
|
+
logger.debug(`[startWatch] Starting FsWatcher with ${String(watchPaths.length)} paths...`);
|
|
424
|
+
stepStart = performance.now();
|
|
291
425
|
srcWatcher = await FsWatcher.watch(watchPaths);
|
|
426
|
+
logger.debug(
|
|
427
|
+
`[startWatch] FsWatcher ready (${Math.round(performance.now() - stepStart)}ms)`
|
|
428
|
+
);
|
|
429
|
+
logger.debug(
|
|
430
|
+
`[startWatch] Total watch setup: ${Math.round(performance.now() - watchStart)}ms`
|
|
431
|
+
);
|
|
292
432
|
srcWatcher.onChange({ delay: 300 }, async (changes) => {
|
|
293
433
|
try {
|
|
294
434
|
const hasFileAddOrRemove = changes.some((c) => c.event === "add" || c.event === "unlink");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/workers/server.worker.ts"],
|
|
4
|
-
"mappings": "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",
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/sd-cli",
|
|
3
|
-
"version": "13.0.
|
|
3
|
+
"version": "13.0.95",
|
|
4
4
|
"description": "Simplysm package - CLI tool",
|
|
5
5
|
"author": "simplysm",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -43,9 +43,9 @@
|
|
|
43
43
|
"vite-plugin-solid": "^2.11.11",
|
|
44
44
|
"vite-tsconfig-paths": "^6.1.1",
|
|
45
45
|
"yargs": "^18.0.0",
|
|
46
|
-
"@simplysm/core-common": "13.0.
|
|
47
|
-
"@simplysm/core-node": "13.0.
|
|
48
|
-
"@simplysm/storage": "13.0.
|
|
46
|
+
"@simplysm/core-common": "13.0.95",
|
|
47
|
+
"@simplysm/core-node": "13.0.95",
|
|
48
|
+
"@simplysm/storage": "13.0.95"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@types/semver": "^7.7.1",
|
|
@@ -39,6 +39,8 @@ export class Capacitor {
|
|
|
39
39
|
private static readonly _ANDROID_KEYSTORE_FILE_NAME = "android.keystore";
|
|
40
40
|
private static readonly _LOCK_FILE_NAME = ".capacitor.lock";
|
|
41
41
|
private static readonly _logger = consola.withTag("sd:cli:capacitor");
|
|
42
|
+
private static readonly _utf8Decoder = new TextDecoder("utf-8", { fatal: true });
|
|
43
|
+
private static readonly _fallbackDecoder = new TextDecoder("euc-kr");
|
|
42
44
|
|
|
43
45
|
private readonly _capPath: string;
|
|
44
46
|
private readonly _platforms: string[];
|
|
@@ -78,7 +80,7 @@ export class Capacitor {
|
|
|
78
80
|
if (typeof config.appName !== "string" || config.appName.trim() === "") {
|
|
79
81
|
throw new CapacitorConfigError("capacitor.appName is required.");
|
|
80
82
|
}
|
|
81
|
-
if (!/^[
|
|
83
|
+
if (!/^[\p{L}\p{N} \-]+$/u.test(config.appName)) {
|
|
82
84
|
throw new CapacitorConfigError(`capacitor.appName contains invalid characters: ${config.appName}`);
|
|
83
85
|
}
|
|
84
86
|
if (config.platform != null) {
|
|
@@ -91,14 +93,47 @@ export class Capacitor {
|
|
|
91
93
|
}
|
|
92
94
|
}
|
|
93
95
|
|
|
96
|
+
/**
|
|
97
|
+
* Execute a Capacitor CLI command via npx
|
|
98
|
+
*/
|
|
99
|
+
private async _execCap(args: string[]): Promise<string> {
|
|
100
|
+
return this._exec("npx", ["cap", ...args], this._capPath);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Execute capacitor-assets CLI command via npx
|
|
105
|
+
*/
|
|
106
|
+
private async _execCapAssets(args: string[]): Promise<string> {
|
|
107
|
+
return this._exec("npx", ["capacitor-assets", ...args], this._capPath);
|
|
108
|
+
}
|
|
109
|
+
|
|
94
110
|
/**
|
|
95
111
|
* Execute command (with logging)
|
|
96
112
|
*/
|
|
97
113
|
private async _exec(cmd: string, args: string[], cwd: string): Promise<string> {
|
|
98
114
|
Capacitor._logger.debug(`executed command: ${cmd} ${args.join(" ")}`);
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
115
|
+
|
|
116
|
+
const result = await execa(cmd, args, { cwd, reject: false, encoding: "buffer" });
|
|
117
|
+
const stdout = Capacitor._decodeOutput(result.stdout);
|
|
118
|
+
|
|
119
|
+
if (result.exitCode !== 0) {
|
|
120
|
+
const stderr = Capacitor._decodeOutput(result.stderr);
|
|
121
|
+
throw new Error(`${cmd} ${args.join(" ")} failed (exit ${result.exitCode}): ${stderr || stdout}`);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
Capacitor._logger.debug(`execution result: ${stdout}`);
|
|
125
|
+
return stdout;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Decode command output (UTF-8 first, fallback to EUC-KR for Windows CP949)
|
|
130
|
+
*/
|
|
131
|
+
private static _decodeOutput(bytes: Uint8Array): string {
|
|
132
|
+
try {
|
|
133
|
+
return Capacitor._utf8Decoder.decode(bytes);
|
|
134
|
+
} catch {
|
|
135
|
+
return Capacitor._fallbackDecoder.decode(bytes);
|
|
136
|
+
}
|
|
102
137
|
}
|
|
103
138
|
|
|
104
139
|
/**
|
|
@@ -186,9 +221,9 @@ export class Capacitor {
|
|
|
186
221
|
|
|
187
222
|
// 6. Synchronize web assets
|
|
188
223
|
if (changed) {
|
|
189
|
-
await this.
|
|
224
|
+
await this._execCap(["sync"]);
|
|
190
225
|
} else {
|
|
191
|
-
await this.
|
|
226
|
+
await this._execCap(["copy"]);
|
|
192
227
|
}
|
|
193
228
|
} finally {
|
|
194
229
|
await this._releaseLock();
|
|
@@ -205,7 +240,7 @@ export class Capacitor {
|
|
|
205
240
|
const buildType = this._config.debug ? "debug" : "release";
|
|
206
241
|
|
|
207
242
|
for (const platform of this._platforms) {
|
|
208
|
-
await this.
|
|
243
|
+
await this._execCap(["copy", platform]);
|
|
209
244
|
|
|
210
245
|
if (platform === "android") {
|
|
211
246
|
await this._buildAndroid(outPath, buildType);
|
|
@@ -229,10 +264,10 @@ export class Capacitor {
|
|
|
229
264
|
}
|
|
230
265
|
|
|
231
266
|
for (const platform of this._platforms) {
|
|
232
|
-
await this.
|
|
267
|
+
await this._execCap(["copy", platform]);
|
|
233
268
|
|
|
234
269
|
try {
|
|
235
|
-
await this.
|
|
270
|
+
await this._execCap(["run", platform]);
|
|
236
271
|
} catch (err) {
|
|
237
272
|
if (platform === "android") {
|
|
238
273
|
try {
|
|
@@ -266,24 +301,22 @@ export class Capacitor {
|
|
|
266
301
|
//#region Private - Initialization
|
|
267
302
|
|
|
268
303
|
/**
|
|
269
|
-
* Basic Capacitor project initialization (package.json,
|
|
304
|
+
* Basic Capacitor project initialization (package.json, pnpm install, cap init)
|
|
270
305
|
*/
|
|
271
306
|
private async _initCap(): Promise<boolean> {
|
|
272
307
|
const depChanged = await this._setupNpmConf();
|
|
273
|
-
|
|
308
|
+
const nodeModulesExists = await fsx.exists(path.resolve(this._capPath, "node_modules"));
|
|
309
|
+
|
|
310
|
+
if (!depChanged && nodeModulesExists) return false;
|
|
274
311
|
|
|
275
312
|
// pnpm install
|
|
276
|
-
const installResult = await this._exec("
|
|
277
|
-
Capacitor._logger.debug(`
|
|
313
|
+
const installResult = await this._exec("npm", ["install"], this._capPath);
|
|
314
|
+
Capacitor._logger.debug(`npm install completed: ${installResult}`);
|
|
278
315
|
|
|
279
316
|
// F12: cap init idempotency - execute only when capacitor.config.ts does not exist
|
|
280
317
|
const configPath = path.resolve(this._capPath, "capacitor.config.ts");
|
|
281
318
|
if (!(await fsx.exists(configPath))) {
|
|
282
|
-
await this.
|
|
283
|
-
"npx",
|
|
284
|
-
["cap", "init", this._config.appName, this._config.appId],
|
|
285
|
-
this._capPath,
|
|
286
|
-
);
|
|
319
|
+
await this._execCap(["init", this._config.appId, this._config.appId]);
|
|
287
320
|
}
|
|
288
321
|
|
|
289
322
|
// Create default www/index.html
|
|
@@ -430,7 +463,7 @@ export default config;
|
|
|
430
463
|
continue;
|
|
431
464
|
}
|
|
432
465
|
|
|
433
|
-
await this.
|
|
466
|
+
await this._execCap(["add", platform]);
|
|
434
467
|
}
|
|
435
468
|
}
|
|
436
469
|
|
|
@@ -475,18 +508,13 @@ export default config;
|
|
|
475
508
|
})
|
|
476
509
|
.toFile(logoPath);
|
|
477
510
|
|
|
478
|
-
await this.
|
|
479
|
-
"
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
"--splashBackgroundColor",
|
|
486
|
-
"#ffffff",
|
|
487
|
-
],
|
|
488
|
-
this._capPath,
|
|
489
|
-
);
|
|
511
|
+
await this._execCapAssets([
|
|
512
|
+
"generate",
|
|
513
|
+
"--iconBackgroundColor",
|
|
514
|
+
"#ffffff",
|
|
515
|
+
"--splashBackgroundColor",
|
|
516
|
+
"#ffffff",
|
|
517
|
+
]);
|
|
490
518
|
} catch (err) {
|
|
491
519
|
Capacitor._logger.warn(
|
|
492
520
|
`icon generation failed: ${err instanceof Error ? err.message : err}. Using default icon.`,
|
package/src/electron/electron.ts
CHANGED
|
@@ -58,6 +58,13 @@ export class Electron {
|
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
/**
|
|
62
|
+
* Resolve binary path from {pkgPath}/node_modules/.bin/
|
|
63
|
+
*/
|
|
64
|
+
private _localBin(name: string): string {
|
|
65
|
+
return path.resolve(this._pkgPath, "node_modules/.bin", name);
|
|
66
|
+
}
|
|
67
|
+
|
|
61
68
|
/**
|
|
62
69
|
* Execute command (with logging)
|
|
63
70
|
*/
|
|
@@ -79,7 +86,7 @@ export class Electron {
|
|
|
79
86
|
* Initialize Electron project
|
|
80
87
|
*
|
|
81
88
|
* 1. Create .electron/src/package.json
|
|
82
|
-
* 2. Run
|
|
89
|
+
* 2. Run pnpm install
|
|
83
90
|
* 3. Run electron-rebuild (rebuild native modules)
|
|
84
91
|
*/
|
|
85
92
|
async initialize(): Promise<void> {
|
|
@@ -94,7 +101,7 @@ export class Electron {
|
|
|
94
101
|
// 3. Rebuild native modules
|
|
95
102
|
const reinstallDeps = this._config.reinstallDependencies ?? [];
|
|
96
103
|
if (reinstallDeps.length > 0) {
|
|
97
|
-
await this._exec("
|
|
104
|
+
await this._exec(this._localBin("electron-rebuild"), [], srcPath);
|
|
98
105
|
}
|
|
99
106
|
}
|
|
100
107
|
|
|
@@ -128,7 +135,7 @@ export class Electron {
|
|
|
128
135
|
*
|
|
129
136
|
* 1. Bundle electron-main.ts with esbuild
|
|
130
137
|
* 2. Create dist/electron/package.json
|
|
131
|
-
* 3. Run
|
|
138
|
+
* 3. Run electron .
|
|
132
139
|
*/
|
|
133
140
|
async run(url?: string): Promise<void> {
|
|
134
141
|
const electronRunPath = path.resolve(this._pkgPath, "dist/electron");
|
|
@@ -154,7 +161,7 @@ export class Electron {
|
|
|
154
161
|
runEnv["ELECTRON_DEV_URL"] = url;
|
|
155
162
|
}
|
|
156
163
|
|
|
157
|
-
await this._exec("
|
|
164
|
+
await this._exec(this._localBin("electron"), ["."], electronRunPath, runEnv);
|
|
158
165
|
}
|
|
159
166
|
|
|
160
167
|
//#endregion
|
|
@@ -300,8 +307,8 @@ export class Electron {
|
|
|
300
307
|
await fsx.writeJson(configFilePath, builderConfig, { space: 2 });
|
|
301
308
|
|
|
302
309
|
await this._exec(
|
|
303
|
-
"
|
|
304
|
-
["
|
|
310
|
+
this._localBin("electron-builder"),
|
|
311
|
+
["--win", "--config", configFilePath],
|
|
305
312
|
this._pkgPath,
|
|
306
313
|
);
|
|
307
314
|
}
|
|
@@ -611,6 +611,7 @@ export class DevOrchestrator {
|
|
|
611
611
|
resolveServerStep: (serverName: string, resultKey: string, result: BuildResult) => void,
|
|
612
612
|
viteClientReadyPromises: Map<string, { promise: Promise<void>; resolver: () => void }>,
|
|
613
613
|
): Promise<void> {
|
|
614
|
+
const runtimeStartTime = performance.now();
|
|
614
615
|
this._logger.debug(`[${serverName}] _startServerRuntime: ${mainJsPath}`);
|
|
615
616
|
const updatedBuild = this._serverBuildWorkers.get(serverName)!;
|
|
616
617
|
updatedBuild.mainJsPath = mainJsPath;
|
|
@@ -619,10 +620,15 @@ export class DevOrchestrator {
|
|
|
619
620
|
const existingRuntime = this._serverRuntimeWorkers.get(serverName);
|
|
620
621
|
if (existingRuntime != null) {
|
|
621
622
|
this._logger.info(`[${serverName}] Restarting server...`);
|
|
623
|
+
const terminateStart = performance.now();
|
|
622
624
|
await existingRuntime.terminate();
|
|
625
|
+
this._logger.debug(
|
|
626
|
+
`[${serverName}] Previous runtime terminated (${Math.round(performance.now() - terminateStart)}ms)`,
|
|
627
|
+
);
|
|
623
628
|
}
|
|
624
629
|
|
|
625
630
|
// Create and start new Server Runtime Worker
|
|
631
|
+
this._logger.debug(`[${serverName}] Creating runtime worker...`);
|
|
626
632
|
const runtimeWorker = Worker.create<typeof ServerRuntimeWorkerModule>(serverRuntimeWorkerPath);
|
|
627
633
|
this._serverRuntimeWorkers.set(serverName, runtimeWorker);
|
|
628
634
|
|
|
@@ -635,7 +641,11 @@ export class DevOrchestrator {
|
|
|
635
641
|
`[${serverName}] Waiting for clients: ${String(clientReadyPromises.length)} total`,
|
|
636
642
|
);
|
|
637
643
|
if (clientReadyPromises.length > 0) {
|
|
644
|
+
const waitStart = performance.now();
|
|
638
645
|
await Promise.all(clientReadyPromises);
|
|
646
|
+
this._logger.debug(
|
|
647
|
+
`[${serverName}] Clients ready (${Math.round(performance.now() - waitStart)}ms)`,
|
|
648
|
+
);
|
|
639
649
|
}
|
|
640
650
|
|
|
641
651
|
// Collect client ports for this server
|
|
@@ -645,6 +655,9 @@ export class DevOrchestrator {
|
|
|
645
655
|
serverClientPorts[clientName] = this._clientPorts[clientName];
|
|
646
656
|
}
|
|
647
657
|
}
|
|
658
|
+
this._logger.debug(
|
|
659
|
+
`[${serverName}] Client ports: ${JSON.stringify(serverClientPorts)}`,
|
|
660
|
+
);
|
|
648
661
|
|
|
649
662
|
// Server Runtime event handlers
|
|
650
663
|
runtimeWorker.on("serverReady", (readyData) => {
|
|
@@ -672,6 +685,9 @@ export class DevOrchestrator {
|
|
|
672
685
|
// Start Server Runtime
|
|
673
686
|
// If worker crashes, it terminates without emitting "serverReady"/"error" events,
|
|
674
687
|
// so catch promise rejection to prevent hanging
|
|
688
|
+
this._logger.debug(
|
|
689
|
+
`[${serverName}] Starting runtime worker... (setup took ${Math.round(performance.now() - runtimeStartTime)}ms)`,
|
|
690
|
+
);
|
|
675
691
|
runtimeWorker
|
|
676
692
|
.start({
|
|
677
693
|
mainJsPath,
|
package/src/sd-cli-entry.ts
CHANGED
|
@@ -77,7 +77,10 @@ export function createCliParser(argv: string[]): Argv {
|
|
|
77
77
|
global: true,
|
|
78
78
|
})
|
|
79
79
|
.middleware((args) => {
|
|
80
|
-
if (args.debug)
|
|
80
|
+
if (args.debug) {
|
|
81
|
+
consola.level = LogLevels.debug;
|
|
82
|
+
process.env["SD_DEBUG"] = "true";
|
|
83
|
+
}
|
|
81
84
|
})
|
|
82
85
|
.command(
|
|
83
86
|
"lint [targets..]",
|