@simplysm/sd-cli 13.0.92 → 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.
Files changed (64) hide show
  1. package/README.md +1 -1
  2. package/dist/capacitor/capacitor.d.ts +15 -1
  3. package/dist/capacitor/capacitor.d.ts.map +1 -1
  4. package/dist/capacitor/capacitor.js +52 -31
  5. package/dist/capacitor/capacitor.js.map +1 -1
  6. package/dist/electron/electron.d.ts +6 -2
  7. package/dist/electron/electron.d.ts.map +1 -1
  8. package/dist/electron/electron.js +12 -6
  9. package/dist/electron/electron.js.map +1 -1
  10. package/dist/orchestrators/DevOrchestrator.d.ts.map +1 -1
  11. package/dist/orchestrators/DevOrchestrator.js +16 -0
  12. package/dist/orchestrators/DevOrchestrator.js.map +1 -1
  13. package/dist/sd-cli-entry.d.ts.map +1 -1
  14. package/dist/sd-cli-entry.js +4 -1
  15. package/dist/sd-cli-entry.js.map +1 -1
  16. package/dist/utils/esbuild-config.d.ts +2 -0
  17. package/dist/utils/esbuild-config.d.ts.map +1 -1
  18. package/dist/utils/esbuild-config.js +86 -6
  19. package/dist/utils/esbuild-config.js.map +1 -1
  20. package/dist/utils/package-utils.d.ts.map +1 -1
  21. package/dist/utils/package-utils.js +7 -0
  22. package/dist/utils/package-utils.js.map +1 -1
  23. package/dist/utils/replace-deps.d.ts.map +1 -1
  24. package/dist/utils/replace-deps.js +17 -0
  25. package/dist/utils/replace-deps.js.map +1 -1
  26. package/dist/utils/worker-utils.d.ts +9 -1
  27. package/dist/utils/worker-utils.d.ts.map +1 -1
  28. package/dist/utils/worker-utils.js +7 -0
  29. package/dist/utils/worker-utils.js.map +1 -1
  30. package/dist/workers/client.worker.d.ts.map +1 -1
  31. package/dist/workers/client.worker.js +2 -1
  32. package/dist/workers/client.worker.js.map +1 -1
  33. package/dist/workers/dts.worker.d.ts.map +1 -1
  34. package/dist/workers/dts.worker.js +2 -1
  35. package/dist/workers/dts.worker.js.map +1 -1
  36. package/dist/workers/library.worker.d.ts.map +1 -1
  37. package/dist/workers/library.worker.js +2 -1
  38. package/dist/workers/library.worker.js.map +1 -1
  39. package/dist/workers/server-runtime.worker.d.ts.map +1 -1
  40. package/dist/workers/server-runtime.worker.js +31 -2
  41. package/dist/workers/server-runtime.worker.js.map +1 -1
  42. package/dist/workers/server.worker.d.ts.map +1 -1
  43. package/dist/workers/server.worker.js +144 -4
  44. package/dist/workers/server.worker.js.map +1 -1
  45. package/package.json +4 -4
  46. package/src/capacitor/capacitor.ts +59 -31
  47. package/src/electron/electron.ts +13 -6
  48. package/src/orchestrators/DevOrchestrator.ts +16 -0
  49. package/src/sd-cli-entry.ts +4 -1
  50. package/src/utils/esbuild-config.ts +86 -6
  51. package/src/utils/package-utils.ts +8 -0
  52. package/src/utils/replace-deps.ts +20 -0
  53. package/src/utils/worker-utils.ts +14 -1
  54. package/src/workers/client.worker.ts +3 -1
  55. package/src/workers/dts.worker.ts +3 -1
  56. package/src/workers/library.worker.ts +3 -1
  57. package/src/workers/server-runtime.worker.ts +34 -2
  58. package/src/workers/server.worker.ts +165 -3
  59. package/templates/init/package.json.hbs +3 -3
  60. package/templates/init/packages/client-admin/package.json.hbs +7 -7
  61. package/templates/init/packages/db-main/package.json.hbs +2 -2
  62. package/templates/init/packages/server/package.json.hbs +5 -5
  63. package/templates/init/tests-e2e/package.json.hbs +1 -1
  64. 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
- sender.send("buildStart", {});
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
- await context.rebuild();
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.92",
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.92",
47
- "@simplysm/core-node": "13.0.92",
48
- "@simplysm/storage": "13.0.92"
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 (!/^[a-zA-Z0-9 \-]+$/.test(config.appName)) {
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
- const { stdout: result } = await execa(cmd, args, { cwd });
100
- Capacitor._logger.debug(`execution result: ${result}`);
101
- return result;
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._exec("npx", ["cap", "sync"], this._capPath);
224
+ await this._execCap(["sync"]);
190
225
  } else {
191
- await this._exec("npx", ["cap", "copy"], this._capPath);
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._exec("npx", ["cap", "copy", platform], this._capPath);
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._exec("npx", ["cap", "copy", platform], this._capPath);
267
+ await this._execCap(["copy", platform]);
233
268
 
234
269
  try {
235
- await this._exec("npx", ["cap", "run", platform], this._capPath);
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, npm install, cap init)
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
- if (!depChanged) return false;
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("pnpm", ["install"], this._capPath);
277
- Capacitor._logger.debug(`pnpm install completed: ${installResult}`);
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._exec(
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._exec("npx", ["cap", "add", platform], this._capPath);
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._exec(
479
- "npx",
480
- [
481
- "@capacitor/assets",
482
- "generate",
483
- "--iconBackgroundColor",
484
- "#ffffff",
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.`,
@@ -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 npm install
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("npx", ["electron-rebuild"], srcPath);
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 npx electron .
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("npx", ["electron", "."], electronRunPath, runEnv);
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
- "npx",
304
- ["electron-builder", "--win", "--config", configFilePath],
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,
@@ -77,7 +77,10 @@ export function createCliParser(argv: string[]): Argv {
77
77
  global: true,
78
78
  })
79
79
  .middleware((args) => {
80
- if (args.debug) consola.level = LogLevels.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..]",