@simplysm/sd-cli 13.0.96 → 13.0.98

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 (54) hide show
  1. package/README.md +132 -292
  2. package/dist/capacitor/capacitor.d.ts +2 -1
  3. package/dist/capacitor/capacitor.d.ts.map +1 -1
  4. package/dist/capacitor/capacitor.js +11 -3
  5. package/dist/capacitor/capacitor.js.map +1 -1
  6. package/dist/commands/device.js +2 -2
  7. package/dist/commands/device.js.map +1 -1
  8. package/dist/electron/electron.d.ts +2 -1
  9. package/dist/electron/electron.d.ts.map +1 -1
  10. package/dist/electron/electron.js +12 -3
  11. package/dist/electron/electron.js.map +1 -1
  12. package/dist/orchestrators/BuildOrchestrator.js +2 -2
  13. package/dist/orchestrators/BuildOrchestrator.js.map +1 -1
  14. package/dist/orchestrators/DevOrchestrator.js +1 -1
  15. package/dist/orchestrators/DevOrchestrator.js.map +1 -1
  16. package/dist/orchestrators/WatchOrchestrator.d.ts +7 -0
  17. package/dist/orchestrators/WatchOrchestrator.d.ts.map +1 -1
  18. package/dist/orchestrators/WatchOrchestrator.js +93 -49
  19. package/dist/orchestrators/WatchOrchestrator.js.map +1 -1
  20. package/dist/sd-config.types.d.ts +16 -1
  21. package/dist/sd-config.types.d.ts.map +1 -1
  22. package/dist/utils/package-utils.js +1 -1
  23. package/dist/utils/package-utils.js.map +1 -1
  24. package/dist/utils/vite-config.d.ts +6 -0
  25. package/dist/utils/vite-config.d.ts.map +1 -1
  26. package/dist/utils/vite-config.js +7 -1
  27. package/dist/utils/vite-config.js.map +1 -1
  28. package/dist/workers/client.worker.d.ts.map +1 -1
  29. package/dist/workers/client.worker.js +10 -3
  30. package/dist/workers/client.worker.js.map +1 -1
  31. package/package.json +6 -6
  32. package/src/capacitor/capacitor.ts +16 -2
  33. package/src/commands/device.ts +2 -2
  34. package/src/electron/electron.ts +17 -2
  35. package/src/orchestrators/BuildOrchestrator.ts +2 -2
  36. package/src/orchestrators/DevOrchestrator.ts +1 -1
  37. package/src/orchestrators/WatchOrchestrator.ts +124 -67
  38. package/src/sd-config.types.ts +17 -1
  39. package/src/utils/package-utils.ts +2 -2
  40. package/src/utils/vite-config.ts +15 -1
  41. package/src/workers/client.worker.ts +11 -1
  42. package/templates/init/.gitignore.hbs +1 -2
  43. package/templates/init/package.json.hbs +5 -6
  44. package/templates/init/packages/client-admin/package.json.hbs +7 -7
  45. package/templates/init/packages/db-main/package.json.hbs +2 -2
  46. package/templates/init/packages/server/package.json.hbs +5 -5
  47. package/templates/init/tests-e2e/package.json.hbs +1 -1
  48. package/tests/capacitor-exclude.spec.ts +78 -0
  49. package/tests/electron-exclude.spec.ts +61 -0
  50. package/tests/run-watch.spec.ts +35 -0
  51. package/tests/vite-config-exclude.spec.ts +35 -0
  52. package/tests/vite-config-outdir.spec.ts +38 -0
  53. package/docs/architecture.md +0 -311
  54. package/docs/config-types.md +0 -263
@@ -1 +1 @@
1
- {"version":3,"file":"vite-config.d.ts","sourceRoot":"","sources":["..\\..\\src\\utils\\vite-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,UAAU,IAAI,cAAc,EAAE,MAAM,MAAM,CAAC;AAuGjE,qCAAqC;AACrC,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AA0KD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;IACtB,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAuE3E"}
1
+ {"version":3,"file":"vite-config.d.ts","sourceRoot":"","sources":["..\\..\\src\\utils\\vite-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,UAAU,IAAI,cAAc,EAAE,MAAM,MAAM,CAAC;AAuGjE,qCAAqC;AACrC,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AA0KD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;IACtB,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CA+E3E"}
@@ -200,7 +200,7 @@ function createViteConfig(options) {
200
200
  }
201
201
  const config = {
202
202
  root: pkgDir,
203
- base: `/${name}/`,
203
+ base: options.base ?? `/${name}/`,
204
204
  plugins: [
205
205
  tsconfigPaths({ projects: [tsconfigPath] }),
206
206
  solidPlugin(),
@@ -232,6 +232,12 @@ function createViteConfig(options) {
232
232
  }
233
233
  };
234
234
  config.define = envDefine;
235
+ if (options.outDir != null) {
236
+ config.build = { outDir: options.outDir };
237
+ }
238
+ if (options.exclude != null && options.exclude.length > 0) {
239
+ config.optimizeDeps = { exclude: options.exclude };
240
+ }
235
241
  if (mode === "build") {
236
242
  config.logLevel = "silent";
237
243
  } else {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/vite-config.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.worker.d.ts","sourceRoot":"","sources":["..\\..\\src\\workers\\client.worker.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAUhE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,qBAAqB,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,qBAAqB,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClC,KAAK,EAAE,gBAAgB,CAAC;IACxB,WAAW,EAAE,sBAAsB,CAAC;IACpC,KAAK,EAAE,gBAAgB,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CACrC;AAkCD;;GAEG;AACH,iBAAe,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoCtE;AAID;;;;GAIG;AACH,iBAAe,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA2D9D;AAED;;;GAGG;AACH,iBAAe,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAExC;AAED,QAAA,MAAM,MAAM;;;eACD,OAAO,KAAK;oBAAc,OAAO,UAAU;mBAAa,OAAO,SAAS;;;CAMjF,CAAC;AAEH,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"client.worker.d.ts","sourceRoot":"","sources":["..\\..\\src\\workers\\client.worker.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAUhE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,qBAAqB,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,qBAAqB,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClC,KAAK,EAAE,gBAAgB,CAAC;IACxB,WAAW,EAAE,sBAAsB,CAAC;IACpC,KAAK,EAAE,gBAAgB,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CACrC;AAkCD;;GAEG;AACH,iBAAe,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA6CtE;AAID;;;;GAIG;AACH,iBAAe,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA4D9D;AAED;;;GAGG;AACH,iBAAe,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAExC;AAED,QAAA,MAAM,MAAM;;;eACD,OAAO,KAAK;oBAAc,OAAO,UAAU;mBAAa,OAAO,SAAS;;;CAMjF,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -28,16 +28,22 @@ async function build(info) {
28
28
  "browser",
29
29
  info.pkgDir
30
30
  );
31
+ const isCapacitor = info.config.capacitor != null;
32
+ const outDir = isCapacitor ? path.join(info.pkgDir, ".capacitor", "www") : void 0;
31
33
  const viteConfig = createViteConfig({
32
34
  pkgDir: info.pkgDir,
33
35
  name: info.name,
34
36
  tsconfigPath,
35
37
  compilerOptions,
36
38
  env: info.config.env,
37
- mode: "build"
39
+ mode: "build",
40
+ outDir,
41
+ base: isCapacitor ? "./" : void 0,
42
+ exclude: info.config.exclude
38
43
  });
39
44
  await viteBuild(viteConfig);
40
- const confDistPath = path.join(info.pkgDir, "dist", ".config.json");
45
+ const confDistDir = outDir ?? path.join(info.pkgDir, "dist");
46
+ const confDistPath = path.join(confDistDir, ".config.json");
41
47
  fs.writeFileSync(confDistPath, JSON.stringify(info.config.configs ?? {}, void 0, 2));
42
48
  return { success: true };
43
49
  } catch (err) {
@@ -69,7 +75,8 @@ async function startWatch(info) {
69
75
  mode: "dev",
70
76
  serverPort,
71
77
  replaceDeps,
72
- onScopeRebuild: () => sender.send("scopeRebuild", {})
78
+ onScopeRebuild: () => sender.send("scopeRebuild", {}),
79
+ exclude: info.config.exclude
73
80
  });
74
81
  viteServer = await createServer(viteConfig);
75
82
  await viteServer.listen();
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/workers/client.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.96",
3
+ "version": "13.0.98",
4
4
  "description": "Simplysm package - CLI tool",
5
5
  "author": "simplysm",
6
6
  "license": "Apache-2.0",
@@ -21,8 +21,8 @@
21
21
  ],
22
22
  "sideEffects": false,
23
23
  "dependencies": {
24
- "@fastify/http-proxy": "^11.4.1",
25
- "@inquirer/prompts": "^8.3.0",
24
+ "@fastify/http-proxy": "^11.4.2",
25
+ "@inquirer/prompts": "^8.3.2",
26
26
  "consola": "^3.4.2",
27
27
  "esbuild": "^0.27.4",
28
28
  "esbuild-plugin-solid": "^0.6.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-node": "13.0.96",
47
- "@simplysm/core-common": "13.0.96",
48
- "@simplysm/storage": "13.0.96"
46
+ "@simplysm/core-common": "13.0.98",
47
+ "@simplysm/core-node": "13.0.98",
48
+ "@simplysm/storage": "13.0.98"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@types/semver": "^7.7.1",
@@ -50,6 +50,7 @@ export class Capacitor {
50
50
  private readonly _pkgPath: string,
51
51
  private readonly _config: SdCapacitorConfig,
52
52
  npmConfig: NpmConfig,
53
+ private readonly _exclude: string[],
53
54
  ) {
54
55
  this._platforms = Object.keys(this._config.platform ?? {});
55
56
  this._npmConfig = npmConfig;
@@ -59,12 +60,16 @@ export class Capacitor {
59
60
  /**
60
61
  * Create Capacitor instance (with configuration validation)
61
62
  */
62
- static async create(pkgPath: string, config: SdCapacitorConfig): Promise<Capacitor> {
63
+ static async create(
64
+ pkgPath: string,
65
+ config: SdCapacitorConfig,
66
+ exclude?: string[],
67
+ ): Promise<Capacitor> {
63
68
  // F5: validate runtime configuration
64
69
  Capacitor._validateConfig(config);
65
70
 
66
71
  const npmConfig = await fsx.readJson<NpmConfig>(path.resolve(pkgPath, "package.json"));
67
- return new Capacitor(pkgPath, config, npmConfig);
72
+ return new Capacitor(pkgPath, config, npmConfig, exclude ?? []);
68
73
  }
69
74
 
70
75
  /**
@@ -400,6 +405,15 @@ export class Capacitor {
400
405
  }
401
406
  }
402
407
 
408
+ // Add exclude packages
409
+ for (const excludePkg of this._exclude) {
410
+ if (!(excludePkg in capNpmConf.dependencies)) {
411
+ const version = mainDeps[excludePkg] ?? "*";
412
+ capNpmConf.dependencies[excludePkg] = version;
413
+ Capacitor._logger.debug(`exclude package added: ${excludePkg}@${version}`);
414
+ }
415
+ }
416
+
403
417
  // Save
404
418
  await fsx.mkdir(this._capPath);
405
419
  await fsx.writeJson(capNpmConfPath, capNpmConf, { space: 2 });
@@ -87,7 +87,7 @@ export async function runDevice(options: DeviceOptions): Promise<void> {
87
87
 
88
88
  logger.start(`Running ${packageName} (electron)...`);
89
89
  try {
90
- const electron = await Electron.create(pkgDir, clientConfig.electron);
90
+ const electron = await Electron.create(pkgDir, clientConfig.electron, clientConfig.exclude);
91
91
  await electron.run(serverUrl);
92
92
  logger.success("Electron execution completed");
93
93
  } catch (err) {
@@ -124,7 +124,7 @@ export async function runDevice(options: DeviceOptions): Promise<void> {
124
124
 
125
125
  logger.start(`Running ${packageName} (device)...`);
126
126
  try {
127
- const cap = await Capacitor.create(pkgDir, clientConfig.capacitor);
127
+ const cap = await Capacitor.create(pkgDir, clientConfig.capacitor, clientConfig.exclude);
128
128
  await cap.runOnDevice(serverUrl);
129
129
  logger.success("Device execution completed");
130
130
  } catch (err) {
@@ -34,6 +34,7 @@ export class Electron {
34
34
  private readonly _pkgPath: string,
35
35
  private readonly _config: SdElectronConfig,
36
36
  npmConfig: NpmConfig,
37
+ private readonly _exclude: string[],
37
38
  ) {
38
39
  this._npmConfig = npmConfig;
39
40
  this._electronPath = path.resolve(this._pkgPath, ".electron");
@@ -42,11 +43,15 @@ export class Electron {
42
43
  /**
43
44
  * Create Electron instance (with configuration validation)
44
45
  */
45
- static async create(pkgPath: string, config: SdElectronConfig): Promise<Electron> {
46
+ static async create(
47
+ pkgPath: string,
48
+ config: SdElectronConfig,
49
+ exclude?: string[],
50
+ ): Promise<Electron> {
46
51
  Electron._validateConfig(config);
47
52
 
48
53
  const npmConfig = await fsx.readJson<NpmConfig>(path.resolve(pkgPath, "package.json"));
49
- return new Electron(pkgPath, config, npmConfig);
54
+ return new Electron(pkgPath, config, npmConfig, exclude ?? []);
50
55
  }
51
56
 
52
57
  /**
@@ -185,6 +190,16 @@ export class Electron {
185
190
  }
186
191
  }
187
192
 
193
+ // Add exclude packages
194
+ for (const excludePkg of this._exclude) {
195
+ if (!(excludePkg in dependencies)) {
196
+ const version = this._npmConfig.dependencies?.[excludePkg];
197
+ if (version != null) {
198
+ dependencies[excludePkg] = version;
199
+ }
200
+ }
201
+ }
202
+
188
203
  const packageJson: Record<string, unknown> = {
189
204
  name: this._npmConfig.name.replace(/^@/, "").replace(/\//, "-"),
190
205
  version: this._npmConfig.version,
@@ -360,7 +360,7 @@ export class BuildOrchestrator {
360
360
  if (config.capacitor != null) {
361
361
  const outPath = path.join(pkgDir, "dist");
362
362
  try {
363
- const cap = await Capacitor.create(pkgDir, config.capacitor);
363
+ const cap = await Capacitor.create(pkgDir, config.capacitor, config.exclude);
364
364
  await cap.initialize();
365
365
  await cap.build(outPath);
366
366
  results.push({
@@ -385,7 +385,7 @@ export class BuildOrchestrator {
385
385
  if (config.electron != null) {
386
386
  const outPath = path.join(pkgDir, "dist");
387
387
  try {
388
- const electron = await Electron.create(pkgDir, config.electron);
388
+ const electron = await Electron.create(pkgDir, config.electron, config.exclude);
389
389
  await electron.initialize();
390
390
  await electron.build(outPath);
391
391
  results.push({
@@ -337,7 +337,7 @@ export class DevOrchestrator {
337
337
  this._logger.start(taskName);
338
338
  const pkgDir = path.join(this._cwd, "packages", name);
339
339
  try {
340
- const cap = await Capacitor.create(pkgDir, config.capacitor!);
340
+ const cap = await Capacitor.create(pkgDir, config.capacitor!, config.exclude);
341
341
  await cap.initialize();
342
342
  this._results.set(`${name}:capacitor`, {
343
343
  name,
@@ -1,6 +1,7 @@
1
1
  import path from "path";
2
+ import { spawn } from "child_process";
2
3
  import { consola } from "consola";
3
- import type { BuildTarget, SdBuildPackageConfig, SdConfig } from "../sd-config.types";
4
+ import type { BuildTarget, SdBuildPackageConfig, SdConfig, SdScriptsPackageConfig } from "../sd-config.types";
4
5
  import { loadSdConfig } from "../utils/sd-config";
5
6
  import { filterPackagesByTargets } from "../utils/package-utils";
6
7
  import { watchReplaceDeps, type WatchReplaceDepResult } from "../utils/replace-deps";
@@ -12,7 +13,7 @@ import { LibraryBuilder } from "../builders/LibraryBuilder";
12
13
  import { DtsBuilder } from "../builders/DtsBuilder";
13
14
  import type { BuildPackageInfo } from "../builders/types";
14
15
  import { watchCopySrcFiles } from "../utils/copy-src";
15
- import type { FsWatcher } from "@simplysm/core-node";
16
+ import { FsWatcher } from "@simplysm/core-node";
16
17
 
17
18
  /**
18
19
  * Watch command options
@@ -42,6 +43,8 @@ export class WatchOrchestrator {
42
43
  private _packages: BuildPackageInfo[] = [];
43
44
  private _copySrcWatchers: FsWatcher[] = [];
44
45
  private _replaceDepWatcher: WatchReplaceDepResult | undefined;
46
+ private readonly _watchHookPackages: Array<{ name: string; dir: string; config: SdScriptsPackageConfig }> = [];
47
+ private readonly _watchHookWatchers: FsWatcher[] = [];
45
48
 
46
49
  constructor(options: WatchOrchestratorOptions) {
47
50
  this._cwd = process.cwd();
@@ -80,7 +83,7 @@ export class WatchOrchestrator {
80
83
  // Filter by targets
81
84
  const allPackages = filterPackagesByTargets(sdConfig.packages, this._options.targets);
82
85
 
83
- // Filter only library packages (node, browser, neutral)
86
+ // Classify packages: library (node/browser/neutral) vs scripts+watch
84
87
  const isLibraryTarget = (target: string): target is BuildTarget =>
85
88
  target === "node" || target === "browser" || target === "neutral";
86
89
 
@@ -88,15 +91,21 @@ export class WatchOrchestrator {
88
91
  for (const [name, config] of Object.entries(allPackages)) {
89
92
  if (isLibraryTarget(config.target)) {
90
93
  libraryConfigs[name] = config as SdBuildPackageConfig;
94
+ } else if (config.target === "scripts" && config.watch != null) {
95
+ this._watchHookPackages.push({
96
+ name,
97
+ dir: path.join(this._cwd, "packages", name),
98
+ config: config,
99
+ });
91
100
  }
92
101
  }
93
102
 
94
- if (Object.keys(libraryConfigs).length === 0) {
95
- process.stdout.write("⚠ No library packages to watch.\n");
103
+ if (Object.keys(libraryConfigs).length === 0 && this._watchHookPackages.length === 0) {
104
+ process.stdout.write("⚠ No packages to watch.\n");
96
105
  return;
97
106
  }
98
107
 
99
- // Create PackageInfo array
108
+ // Create PackageInfo array for library packages
100
109
  this._packages = Object.entries(libraryConfigs).map(([name, config]) => ({
101
110
  name,
102
111
  dir: path.join(this._cwd, "packages", name),
@@ -104,94 +113,135 @@ export class WatchOrchestrator {
104
113
  }));
105
114
 
106
115
  // Initialize infrastructure
107
- this._resultCollector = new ResultCollector();
108
116
  this._signalHandler = new SignalHandler();
109
- this._rebuildManager = new RebuildManager(this._logger);
110
117
 
111
- // Print errors on batch completion
112
- this._rebuildManager.on("batchComplete", () => {
113
- printErrors(this._resultCollector.toMap());
114
- });
118
+ // Initialize library builders only if there are library packages
119
+ if (this._packages.length > 0) {
120
+ this._resultCollector = new ResultCollector();
121
+ this._rebuildManager = new RebuildManager(this._logger);
122
+
123
+ // Print errors on batch completion
124
+ this._rebuildManager.on("batchComplete", () => {
125
+ printErrors(this._resultCollector.toMap());
126
+ });
115
127
 
116
- // Create builders
117
- const builderOptions = {
118
- cwd: this._cwd,
119
- packages: this._packages,
120
- resultCollector: this._resultCollector,
121
- rebuildManager: this._rebuildManager,
122
- };
128
+ // Create builders
129
+ const builderOptions = {
130
+ cwd: this._cwd,
131
+ packages: this._packages,
132
+ resultCollector: this._resultCollector,
133
+ rebuildManager: this._rebuildManager,
134
+ };
123
135
 
124
- this._libraryBuilder = new LibraryBuilder(builderOptions);
125
- this._dtsBuilder = new DtsBuilder(builderOptions);
136
+ this._libraryBuilder = new LibraryBuilder(builderOptions);
137
+ this._dtsBuilder = new DtsBuilder(builderOptions);
126
138
 
127
- // Initialize builders
128
- await Promise.all([this._libraryBuilder.initialize(), this._dtsBuilder.initialize()]);
139
+ // Initialize builders
140
+ await Promise.all([this._libraryBuilder.initialize(), this._dtsBuilder.initialize()]);
141
+ }
129
142
  }
130
143
 
131
144
  /**
132
145
  * Start watch mode
133
146
  * - Run initial build
147
+ * - Start watch hook watchers
134
148
  * - Output results
135
149
  */
136
150
  async start(): Promise<void> {
137
- if (this._packages.length === 0) {
151
+ if (this._packages.length === 0 && this._watchHookPackages.length === 0) {
138
152
  return;
139
153
  }
140
154
 
141
- // Set up initial build promises
142
- const buildPromises = this._libraryBuilder.getInitialBuildPromises();
143
- const dtsPromises = this._dtsBuilder.getInitialBuildPromises();
155
+ // Start library build if there are library packages
156
+ if (this._packages.length > 0) {
157
+ // Set up initial build promises
158
+ const buildPromises = this._libraryBuilder.getInitialBuildPromises();
159
+ const dtsPromises = this._dtsBuilder.getInitialBuildPromises();
160
+
161
+ // Start copySrc watch
162
+ for (const pkg of this._packages) {
163
+ if (pkg.config.copySrc != null && pkg.config.copySrc.length > 0) {
164
+ const watcher = await watchCopySrcFiles(pkg.dir, pkg.config.copySrc);
165
+ this._copySrcWatchers.push(watcher);
166
+ }
167
+ }
168
+
169
+ // Start watch (run in background)
170
+ void this._libraryBuilder.startWatch();
171
+ void this._dtsBuilder.startWatch();
144
172
 
145
- // Start copySrc watch
146
- for (const pkg of this._packages) {
147
- if (pkg.config.copySrc != null && pkg.config.copySrc.length > 0) {
148
- const watcher = await watchCopySrcFiles(pkg.dir, pkg.config.copySrc);
149
- this._copySrcWatchers.push(watcher);
173
+ // Start initial build
174
+ this._logger.start("Running initial build...");
175
+
176
+ // Set up complete promise array for library build and DTS build
177
+ const allBuildTasks: Array<{ name: string; promise: Promise<void> }> = [];
178
+
179
+ // Library build tasks
180
+ for (const pkg of this._packages) {
181
+ const promise = buildPromises.get(`${pkg.name}:build`) ?? Promise.resolve();
182
+ allBuildTasks.push({
183
+ name: `${pkg.name}:build`,
184
+ promise,
185
+ });
150
186
  }
151
- }
152
187
 
153
- // Start watch (run in background)
154
- void this._libraryBuilder.startWatch();
155
- void this._dtsBuilder.startWatch();
188
+ // DTS tasks
189
+ for (const pkg of this._packages) {
190
+ const promise = dtsPromises.get(`${pkg.name}:dts`) ?? Promise.resolve();
191
+ allBuildTasks.push({
192
+ name: `${pkg.name}:dts`,
193
+ promise,
194
+ });
195
+ }
156
196
 
157
- // Start initial build
158
- this._logger.start("Running initial build...");
197
+ // Run all build tasks concurrently (wait until initial build completes)
198
+ await Promise.allSettled(allBuildTasks.map((task) => task.promise));
159
199
 
160
- // Set up complete promise array for library build and DTS build
161
- const allBuildTasks: Array<{ name: string; promise: Promise<void> }> = [];
200
+ this._logger.success("Initial build completed");
162
201
 
163
- // Library build tasks
164
- for (const pkg of this._packages) {
165
- const promise = buildPromises.get(`${pkg.name}:build`) ?? Promise.resolve();
166
- allBuildTasks.push({
167
- name: `${pkg.name}:build`,
168
- promise,
169
- });
202
+ // Output initial build results
203
+ printErrors(this._resultCollector.toMap());
170
204
  }
171
205
 
172
- // DTS tasks
173
- for (const pkg of this._packages) {
174
- const promise = dtsPromises.get(`${pkg.name}:dts`) ?? Promise.resolve();
175
- allBuildTasks.push({
176
- name: `${pkg.name}:dts`,
177
- promise,
178
- });
179
- }
206
+ // Start watch hook watchers for scripts+watch packages
207
+ for (const pkg of this._watchHookPackages) {
208
+ const watchConfig = pkg.config.watch!;
209
+ const watchTargets = watchConfig.target.map((t) => path.resolve(pkg.dir, t));
180
210
 
181
- // Run all build tasks concurrently (wait until initial build completes)
182
- await Promise.allSettled(allBuildTasks.map((task) => task.promise));
211
+ // Run initial hook
212
+ this._runWatchHookCmd(pkg.name, pkg.dir, watchConfig.cmd, watchConfig.args);
183
213
 
184
- this._logger.success("Initial build completed");
214
+ // Start watching
215
+ const watcher = await FsWatcher.watch(watchTargets);
216
+ watcher.onChange({ delay: 300 }, () => {
217
+ this._runWatchHookCmd(pkg.name, pkg.dir, watchConfig.cmd, watchConfig.args);
218
+ });
219
+ this._watchHookWatchers.push(watcher);
185
220
 
186
- // Output initial build results
187
- printErrors(this._resultCollector.toMap());
221
+ this._logger.success(`Watch hook started: ${pkg.name}`);
222
+ }
223
+ }
224
+
225
+ /**
226
+ * Run watch hook command
227
+ */
228
+ private _runWatchHookCmd(pkgName: string, cwd: string, cmd: string, args?: string[]): void {
229
+ const child = spawn(cmd, args ?? [], { cwd, stdio: "inherit", shell: true });
230
+ child.on("error", (err) => {
231
+ this._logger.error(`Watch hook error (${pkgName}): ${err.message}`);
232
+ });
233
+ child.on("close", (code) => {
234
+ if (code !== 0 && code !== null) {
235
+ this._logger.warn(`Watch hook (${pkgName}) exited with code ${String(code)}`);
236
+ }
237
+ });
188
238
  }
189
239
 
190
240
  /**
191
241
  * Wait for termination signal
192
242
  */
193
243
  async awaitTermination(): Promise<void> {
194
- if (this._packages.length === 0) {
244
+ if (this._packages.length === 0 && this._watchHookPackages.length === 0) {
195
245
  return;
196
246
  }
197
247
  await this._signalHandler.waitForTermination();
@@ -201,18 +251,25 @@ export class WatchOrchestrator {
201
251
  * Shutdown Orchestrator
202
252
  */
203
253
  async shutdown(): Promise<void> {
204
- if (this._packages.length === 0) {
254
+ if (this._packages.length === 0 && this._watchHookPackages.length === 0) {
205
255
  return;
206
256
  }
207
257
 
208
258
  process.stdout.write("⏳ Shutting down...\n");
209
259
 
210
- await Promise.all([
211
- this._libraryBuilder.shutdown(),
212
- this._dtsBuilder.shutdown(),
213
- ...this._copySrcWatchers.map((w) => w.close()),
214
- ]);
260
+ const shutdownTasks: Array<Promise<void>> = [];
261
+
262
+ if (this._packages.length > 0) {
263
+ shutdownTasks.push(this._libraryBuilder.shutdown());
264
+ shutdownTasks.push(this._dtsBuilder.shutdown());
265
+ shutdownTasks.push(...this._copySrcWatchers.map((w) => w.close()));
266
+ }
267
+
268
+ shutdownTasks.push(...this._watchHookWatchers.map((w) => w.close()));
269
+
270
+ await Promise.all(shutdownTasks);
215
271
  this._copySrcWatchers = [];
272
+ this._watchHookWatchers.length = 0;
216
273
  this._replaceDepWatcher?.dispose();
217
274
 
218
275
  process.stdout.write("✔ Done\n");
@@ -186,6 +186,8 @@ export interface SdClientPackageConfig {
186
186
  electron?: SdElectronConfig;
187
187
  /** runtime config (written to dist/.config.json during build) */
188
188
  configs?: Record<string, unknown>;
189
+ /** packages to exclude from Vite optimizeDeps and add to Capacitor/Electron package.json */
190
+ exclude?: string[];
189
191
  }
190
192
 
191
193
  /**
@@ -214,13 +216,27 @@ export interface SdServerPackageConfig {
214
216
  }
215
217
 
216
218
  /**
217
- * Scripts-only package configuration (excluded from watch/typecheck)
219
+ * Watch hook configuration for scripts packages
220
+ */
221
+ export interface SdWatchHookConfig {
222
+ /** glob patterns to watch (relative to package directory) */
223
+ target: string[];
224
+ /** command to execute on change */
225
+ cmd: string;
226
+ /** command arguments */
227
+ args?: string[];
228
+ }
229
+
230
+ /**
231
+ * Scripts-only package configuration (excluded from watch/typecheck unless watch hook is configured)
218
232
  */
219
233
  export interface SdScriptsPackageConfig {
220
234
  /** build target */
221
235
  target: "scripts";
222
236
  /** publish configuration */
223
237
  publish?: SdPublishConfig;
238
+ /** watch hook configuration (when set, package is included in watch mode) */
239
+ watch?: SdWatchHookConfig;
224
240
  }
225
241
 
226
242
  /**
@@ -107,8 +107,8 @@ export function filterPackagesByTargets(
107
107
  for (const [name, config] of Object.entries(packages)) {
108
108
  if (config == null) continue;
109
109
 
110
- // Exclude scripts target from watch/dev targets
111
- if (config.target === "scripts") continue;
110
+ // Exclude scripts target unless watch hook is configured
111
+ if (config.target === "scripts" && config.watch == null) continue;
112
112
 
113
113
  // If targets is empty, include all packages
114
114
  if (targets.length === 0) {