@simplysm/sd-cli 13.0.75 → 13.0.77

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 (167) hide show
  1. package/README.md +341 -16
  2. package/dist/builders/DtsBuilder.js +2 -2
  3. package/dist/builders/DtsBuilder.js.map +1 -1
  4. package/dist/builders/LibraryBuilder.d.ts +3 -3
  5. package/dist/builders/LibraryBuilder.d.ts.map +1 -1
  6. package/dist/builders/LibraryBuilder.js +2 -2
  7. package/dist/builders/LibraryBuilder.js.map +1 -1
  8. package/dist/builders/types.d.ts +7 -1
  9. package/dist/builders/types.d.ts.map +1 -1
  10. package/dist/capacitor/capacitor.d.ts +5 -0
  11. package/dist/capacitor/capacitor.d.ts.map +1 -1
  12. package/dist/capacitor/capacitor.js +59 -59
  13. package/dist/capacitor/capacitor.js.map +1 -1
  14. package/dist/commands/check.js +4 -4
  15. package/dist/commands/check.js.map +1 -1
  16. package/dist/commands/device.js +3 -3
  17. package/dist/commands/device.js.map +1 -1
  18. package/dist/commands/lint.d.ts +2 -2
  19. package/dist/commands/lint.d.ts.map +1 -1
  20. package/dist/commands/lint.js +4 -98
  21. package/dist/commands/lint.js.map +1 -1
  22. package/dist/commands/publish.js +20 -20
  23. package/dist/commands/publish.js.map +1 -1
  24. package/dist/commands/replace-deps.js +1 -1
  25. package/dist/commands/replace-deps.js.map +1 -1
  26. package/dist/commands/typecheck.js +9 -9
  27. package/dist/commands/typecheck.js.map +1 -1
  28. package/dist/electron/electron.js +16 -16
  29. package/dist/electron/electron.js.map +1 -1
  30. package/dist/orchestrators/BuildOrchestrator.js +6 -6
  31. package/dist/orchestrators/BuildOrchestrator.js.map +1 -1
  32. package/dist/orchestrators/DevOrchestrator.d.ts +7 -6
  33. package/dist/orchestrators/DevOrchestrator.d.ts.map +1 -1
  34. package/dist/orchestrators/DevOrchestrator.js +157 -203
  35. package/dist/orchestrators/DevOrchestrator.js.map +1 -1
  36. package/dist/orchestrators/WatchOrchestrator.d.ts.map +1 -1
  37. package/dist/orchestrators/WatchOrchestrator.js +3 -4
  38. package/dist/orchestrators/WatchOrchestrator.js.map +1 -1
  39. package/dist/sd-cli.js +1 -1
  40. package/dist/sd-cli.js.map +1 -1
  41. package/dist/sd-config.types.d.ts +9 -3
  42. package/dist/sd-config.types.d.ts.map +1 -1
  43. package/dist/utils/copy-public.d.ts.map +1 -1
  44. package/dist/utils/copy-public.js +23 -27
  45. package/dist/utils/copy-public.js.map +1 -1
  46. package/dist/utils/copy-src.d.ts.map +1 -1
  47. package/dist/utils/copy-src.js +7 -7
  48. package/dist/utils/copy-src.js.map +1 -1
  49. package/dist/utils/esbuild-config.d.ts.map +1 -1
  50. package/dist/utils/esbuild-config.js +36 -42
  51. package/dist/utils/esbuild-config.js.map +1 -1
  52. package/dist/utils/replace-deps.js +7 -7
  53. package/dist/utils/replace-deps.js.map +1 -1
  54. package/dist/utils/sd-config.js +2 -2
  55. package/dist/utils/sd-config.js.map +1 -1
  56. package/dist/utils/template.js +7 -7
  57. package/dist/utils/template.js.map +1 -1
  58. package/dist/utils/tsconfig.d.ts +1 -2
  59. package/dist/utils/tsconfig.d.ts.map +1 -1
  60. package/dist/utils/tsconfig.js +5 -8
  61. package/dist/utils/tsconfig.js.map +1 -1
  62. package/dist/utils/typecheck-serialization.js +2 -2
  63. package/dist/utils/typecheck-serialization.js.map +1 -1
  64. package/dist/utils/vite-config.d.ts +2 -0
  65. package/dist/utils/vite-config.d.ts.map +1 -1
  66. package/dist/utils/vite-config.js +36 -3
  67. package/dist/utils/vite-config.js.map +1 -1
  68. package/dist/utils/worker-events.d.ts +11 -1
  69. package/dist/utils/worker-events.d.ts.map +1 -1
  70. package/dist/utils/worker-events.js +3 -5
  71. package/dist/utils/worker-events.js.map +1 -1
  72. package/dist/utils/worker-utils.d.ts +2 -2
  73. package/dist/utils/worker-utils.d.ts.map +1 -1
  74. package/dist/utils/worker-utils.js +1 -1
  75. package/dist/utils/worker-utils.js.map +1 -1
  76. package/dist/workers/client.worker.d.ts +1 -1
  77. package/dist/workers/client.worker.js +3 -3
  78. package/dist/workers/client.worker.js.map +1 -1
  79. package/dist/workers/dts.worker.d.ts +1 -1
  80. package/dist/workers/dts.worker.d.ts.map +1 -1
  81. package/dist/workers/dts.worker.js +13 -28
  82. package/dist/workers/dts.worker.js.map +1 -1
  83. package/dist/workers/library.worker.d.ts +1 -1
  84. package/dist/workers/library.worker.js +4 -4
  85. package/dist/workers/library.worker.js.map +1 -1
  86. package/dist/workers/lint.worker.d.ts +1 -1
  87. package/dist/workers/server-runtime.worker.d.ts +1 -1
  88. package/dist/workers/server-runtime.worker.js +4 -4
  89. package/dist/workers/server-runtime.worker.js.map +1 -1
  90. package/dist/workers/server.worker.d.ts +1 -1
  91. package/dist/workers/server.worker.js +6 -6
  92. package/dist/workers/server.worker.js.map +1 -1
  93. package/package.json +4 -5
  94. package/src/builders/DtsBuilder.ts +2 -2
  95. package/src/builders/LibraryBuilder.ts +7 -10
  96. package/src/builders/types.ts +6 -1
  97. package/src/capacitor/capacitor.ts +61 -60
  98. package/src/commands/check.ts +4 -4
  99. package/src/commands/device.ts +3 -3
  100. package/src/commands/lint.ts +6 -117
  101. package/src/commands/publish.ts +20 -20
  102. package/src/commands/replace-deps.ts +1 -1
  103. package/src/commands/typecheck.ts +9 -9
  104. package/src/electron/electron.ts +16 -16
  105. package/src/orchestrators/BuildOrchestrator.ts +6 -6
  106. package/src/orchestrators/DevOrchestrator.ts +210 -256
  107. package/src/orchestrators/WatchOrchestrator.ts +8 -10
  108. package/src/sd-cli.ts +1 -1
  109. package/src/sd-config.types.ts +10 -3
  110. package/src/utils/copy-public.ts +22 -26
  111. package/src/utils/copy-src.ts +7 -7
  112. package/src/utils/esbuild-config.ts +51 -63
  113. package/src/utils/replace-deps.ts +7 -7
  114. package/src/utils/sd-config.ts +2 -2
  115. package/src/utils/template.ts +7 -7
  116. package/src/utils/tsconfig.ts +6 -10
  117. package/src/utils/typecheck-serialization.ts +2 -2
  118. package/src/utils/vite-config.ts +376 -341
  119. package/src/utils/worker-events.ts +13 -10
  120. package/src/utils/worker-utils.ts +45 -45
  121. package/src/workers/client.worker.ts +3 -3
  122. package/src/workers/dts.worker.ts +451 -467
  123. package/src/workers/library.worker.ts +4 -4
  124. package/src/workers/server-runtime.worker.ts +4 -4
  125. package/src/workers/server.worker.ts +572 -572
  126. package/templates/init/package.json.hbs +2 -3
  127. package/templates/init/packages/client-admin/package.json.hbs +5 -5
  128. package/templates/init/packages/client-admin/src/views/auth/LoginView.tsx +2 -2
  129. package/templates/init/packages/client-admin/src/views/home/base/employee/EmployeeDetail.tsx.hbs +86 -105
  130. package/templates/init/packages/client-admin/src/views/home/base/employee/EmployeeSheet.tsx.hbs +1 -1
  131. package/templates/init/packages/client-admin/src/views/home/base/role-permission/RoleDetail.tsx.hbs +4 -12
  132. package/templates/init/packages/client-admin/src/views/home/base/role-permission/RolePermissionDetail.tsx.hbs +0 -2
  133. package/templates/init/packages/client-admin/src/views/home/base/role-permission/RolePermissionView.tsx +1 -1
  134. package/templates/init/packages/client-admin/src/views/home/base/role-permission/RoleSheet.tsx.hbs +1 -1
  135. package/templates/init/packages/client-admin/src/views/home/my-info/MyInfoDetail.tsx.hbs +36 -43
  136. package/templates/init/packages/db-main/package.json.hbs +2 -2
  137. package/templates/init/packages/server/package.json.hbs +4 -4
  138. package/templates/init/tests/e2e/package.json.hbs +1 -1
  139. package/tests/get-compiler-options-for-package.spec.ts +13 -72
  140. package/tests/get-package-source-files.spec.ts +0 -42
  141. package/tests/get-types-from-package-json.spec.ts +15 -30
  142. package/tests/infra/ResultCollector.spec.ts +0 -9
  143. package/tests/infra/WorkerManager.spec.ts +0 -34
  144. package/tests/load-ignore-patterns.spec.ts +15 -40
  145. package/tests/load-sd-config.spec.ts +16 -53
  146. package/tests/publish-config-narrowing.spec.ts +20 -0
  147. package/tests/run-lint.spec.ts +38 -87
  148. package/tests/run-typecheck.spec.ts +194 -303
  149. package/tests/run-watch.spec.ts +0 -34
  150. package/tests/sd-cli.spec.ts +0 -88
  151. package/tests/sd-public-dev-plugin-mime.spec.ts +19 -0
  152. package/dist/builders/index.d.ts +0 -5
  153. package/dist/builders/index.d.ts.map +0 -1
  154. package/dist/builders/index.js +0 -5
  155. package/dist/builders/index.js.map +0 -6
  156. package/dist/infra/index.d.ts +0 -4
  157. package/dist/infra/index.d.ts.map +0 -1
  158. package/dist/infra/index.js +0 -4
  159. package/dist/infra/index.js.map +0 -6
  160. package/dist/orchestrators/index.d.ts +0 -4
  161. package/dist/orchestrators/index.d.ts.map +0 -1
  162. package/dist/orchestrators/index.js +0 -4
  163. package/dist/orchestrators/index.js.map +0 -6
  164. package/src/builders/index.ts +0 -4
  165. package/src/infra/index.ts +0 -3
  166. package/src/orchestrators/index.ts +0 -3
  167. package/templates/init/stylelint.config.ts +0 -1
@@ -1,6 +1,6 @@
1
1
  import proxy from "@fastify/http-proxy";
2
2
  import { createWorker } from "@simplysm/core-node";
3
- import { errorMessage } from "@simplysm/core-common";
3
+ import { err as errNs } from "@simplysm/core-common";
4
4
  import { consola } from "consola";
5
5
  import net from "net";
6
6
  import { pathToFileURL } from "url";
@@ -17,13 +17,13 @@ async function cleanup() {
17
17
  process.on("uncaughtException", (err) => {
18
18
  logger.error("Unhandled server runtime error", err);
19
19
  sender.send("error", {
20
- message: errorMessage(err)
20
+ message: errNs.message(err)
21
21
  });
22
22
  });
23
23
  process.on("unhandledRejection", (reason) => {
24
24
  logger.error("Unhandled server runtime promise rejection", reason);
25
25
  sender.send("error", {
26
- message: errorMessage(reason)
26
+ message: errNs.message(reason)
27
27
  });
28
28
  });
29
29
  registerCleanupHandlers(cleanup, logger);
@@ -75,7 +75,7 @@ async function start(info) {
75
75
  } catch (err) {
76
76
  logger.error("Server Runtime startup failed", err);
77
77
  sender.send("error", {
78
- message: errorMessage(err)
78
+ message: errNs.message(err)
79
79
  });
80
80
  }
81
81
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/workers/server-runtime.worker.ts"],
4
- "mappings": "AAAA,OAAO,WAAW;AAClB,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAC7B,SAAS,eAAe;AACxB,OAAO,SAAS;AAChB,SAAS,qBAAqB;AAC9B,SAAS,+BAA+B;AAoCxC,MAAM,SAAS,QAAQ,QAAQ,8BAA8B;AAG7D,IAAI;AAKJ,eAAe,UAAyB;AACtC,QAAM,SAAS;AACf,MAAI,UAAU,MAAM;AAClB,UAAM,OAAO,MAAM;AAAA,EACrB;AACA,mBAAiB;AACnB;AAIA,QAAQ,GAAG,qBAAqB,CAAC,QAAQ;AACvC,SAAO,MAAM,kCAAkC,GAAG;AAClD,SAAO,KAAK,SAAS;AAAA,IACnB,SAAS,aAAa,GAAG;AAAA,EAC3B,CAAC;AACH,CAAC;AAED,QAAQ,GAAG,sBAAsB,CAAC,WAAW;AAC3C,SAAO,MAAM,8CAA8C,MAAM;AACjE,SAAO,KAAK,SAAS;AAAA,IACnB,SAAS,aAAa,MAAM;AAAA,EAC9B,CAAC;AACH,CAAC;AAED,wBAAwB,SAAS,MAAM;AAKvC,SAAS,gBAAgB,MAAgC;AACvD,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,SAAS,IAAI,aAAa;AAChC,WAAO,KAAK,SAAS,MAAM,QAAQ,KAAK,CAAC;AACzC,WAAO,KAAK,aAAa,MAAM;AAC7B,aAAO,MAAM,MAAM,QAAQ,IAAI,CAAC;AAAA,IAClC,CAAC;AACD,WAAO,OAAO,MAAM,SAAS;AAAA,EAC/B,CAAC;AACH;AAKA,eAAe,kBAAkB,WAAmB,aAAa,IAAqB;AACpF,WAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACnC,UAAM,OAAO,YAAY;AACzB,QAAI,MAAM,gBAAgB,IAAI,GAAG;AAC/B,aAAO;AAAA,IACT;AAAA,EACF;AACA,QAAM,IAAI;AAAA,IACR,mCAAmC,SAAS,QAAQ,YAAY,aAAa,CAAC;AAAA,EAChF;AACF;AAMA,eAAe,MAAM,MAA6C;AAChE,MAAI;AAEF,UAAM,SAAS,MAAM,OAAO,cAAc,KAAK,UAAU,EAAE;AAC3D,UAAM,SAAS,OAAO;AAEtB,QAAI,UAAU,MAAM;AAClB,YAAM,IAAI,MAAM,wCAAwC;AAAA,IAC1D;AAGA,qBAAiB;AAGjB,UAAM,eAAe,OAAO,QAAQ;AACpC,UAAM,gBAAgB,MAAM,kBAAkB,YAAY;AAC1D,QAAI,kBAAkB,cAAc;AAClC,aAAO,KAAK,QAAQ,YAAY,wBAAwB,aAAa,EAAE;AACvE,aAAO,QAAQ,OAAO;AAAA,IACxB;AAGA,eAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,KAAK,WAAW,GAAG;AAC3D,YAAM,OAAO,QAAQ,SAAS,OAAO;AAAA,QACnC,QAAQ,IAAI,IAAI;AAAA,QAChB,UAAU,oBAAoB,IAAI;AAAA,QAClC,eAAe,IAAI,IAAI;AAAA,QACvB,WAAW;AAAA,MACb,CAAC;AAAA,IACH;AAGA,UAAM,OAAO,OAAO;AAEpB,WAAO,KAAK,eAAe,EAAE,MAAM,OAAO,QAAQ,KAAK,CAAC;AAAA,EAC1D,SAAS,KAAK;AACZ,WAAO,MAAM,iCAAiC,GAAG;AACjD,WAAO,KAAK,SAAS;AAAA,MACnB,SAAS,aAAa,GAAG;AAAA,IAC3B,CAAC;AAAA,EACH;AACF;AAEA,MAAM,SAAS,aAAiE;AAAA,EAC9E;AACF,CAAC;AAED,IAAO,gCAAQ;",
4
+ "mappings": "AAAA,OAAO,WAAW;AAClB,SAAS,oBAAoB;AAC7B,SAAS,OAAO,aAAa;AAC7B,SAAS,eAAe;AACxB,OAAO,SAAS;AAChB,SAAS,qBAAqB;AAC9B,SAAS,+BAA+B;AAoCxC,MAAM,SAAS,QAAQ,QAAQ,8BAA8B;AAG7D,IAAI;AAKJ,eAAe,UAAyB;AACtC,QAAM,SAAS;AACf,MAAI,UAAU,MAAM;AAClB,UAAM,OAAO,MAAM;AAAA,EACrB;AACA,mBAAiB;AACnB;AAIA,QAAQ,GAAG,qBAAqB,CAAC,QAAQ;AACvC,SAAO,MAAM,kCAAkC,GAAG;AAClD,SAAO,KAAK,SAAS;AAAA,IACnB,SAAS,MAAM,QAAQ,GAAG;AAAA,EAC5B,CAAC;AACH,CAAC;AAED,QAAQ,GAAG,sBAAsB,CAAC,WAAW;AAC3C,SAAO,MAAM,8CAA8C,MAAM;AACjE,SAAO,KAAK,SAAS;AAAA,IACnB,SAAS,MAAM,QAAQ,MAAM;AAAA,EAC/B,CAAC;AACH,CAAC;AAED,wBAAwB,SAAS,MAAM;AAKvC,SAAS,gBAAgB,MAAgC;AACvD,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,SAAS,IAAI,aAAa;AAChC,WAAO,KAAK,SAAS,MAAM,QAAQ,KAAK,CAAC;AACzC,WAAO,KAAK,aAAa,MAAM;AAC7B,aAAO,MAAM,MAAM,QAAQ,IAAI,CAAC;AAAA,IAClC,CAAC;AACD,WAAO,OAAO,MAAM,SAAS;AAAA,EAC/B,CAAC;AACH;AAKA,eAAe,kBAAkB,WAAmB,aAAa,IAAqB;AACpF,WAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACnC,UAAM,OAAO,YAAY;AACzB,QAAI,MAAM,gBAAgB,IAAI,GAAG;AAC/B,aAAO;AAAA,IACT;AAAA,EACF;AACA,QAAM,IAAI;AAAA,IACR,mCAAmC,SAAS,QAAQ,YAAY,aAAa,CAAC;AAAA,EAChF;AACF;AAMA,eAAe,MAAM,MAA6C;AAChE,MAAI;AAEF,UAAM,SAAS,MAAM,OAAO,cAAc,KAAK,UAAU,EAAE;AAC3D,UAAM,SAAS,OAAO;AAEtB,QAAI,UAAU,MAAM;AAClB,YAAM,IAAI,MAAM,wCAAwC;AAAA,IAC1D;AAGA,qBAAiB;AAGjB,UAAM,eAAe,OAAO,QAAQ;AACpC,UAAM,gBAAgB,MAAM,kBAAkB,YAAY;AAC1D,QAAI,kBAAkB,cAAc;AAClC,aAAO,KAAK,QAAQ,YAAY,wBAAwB,aAAa,EAAE;AACvE,aAAO,QAAQ,OAAO;AAAA,IACxB;AAGA,eAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,KAAK,WAAW,GAAG;AAC3D,YAAM,OAAO,QAAQ,SAAS,OAAO;AAAA,QACnC,QAAQ,IAAI,IAAI;AAAA,QAChB,UAAU,oBAAoB,IAAI;AAAA,QAClC,eAAe,IAAI,IAAI;AAAA,QACvB,WAAW;AAAA,MACb,CAAC;AAAA,IACH;AAGA,UAAM,OAAO,OAAO;AAEpB,WAAO,KAAK,eAAe,EAAE,MAAM,OAAO,QAAQ,KAAK,CAAC;AAAA,EAC1D,SAAS,KAAK;AACZ,WAAO,MAAM,iCAAiC,GAAG;AACjD,WAAO,KAAK,SAAS;AAAA,MACnB,SAAS,MAAM,QAAQ,GAAG;AAAA,IAC5B,CAAC;AAAA,EACH;AACF;AAEA,MAAM,SAAS,aAAiE;AAAA,EAC9E;AACF,CAAC;AAED,IAAO,gCAAQ;",
5
5
  "names": []
6
6
  }
@@ -83,7 +83,7 @@ declare function startWatch(info: ServerWatchInfo): Promise<void>;
83
83
  */
84
84
  declare function stopWatch(): Promise<void>;
85
85
  declare const sender: {
86
- send<K extends string>(event: K, data?: ServerWorkerEvents[K] | undefined): void;
86
+ send<TEventName extends string>(event: TEventName, data?: ServerWorkerEvents[TEventName] | undefined): void;
87
87
  __methods: {
88
88
  build: typeof build;
89
89
  startWatch: typeof startWatch;
@@ -2,8 +2,8 @@ import path from "path";
2
2
  import fs from "fs";
3
3
  import { execaSync } from "execa";
4
4
  import esbuild from "esbuild";
5
- import { createWorker, FsWatcher, pathNorm } from "@simplysm/core-node";
6
- import { errorMessage } from "@simplysm/core-common";
5
+ import { createWorker, FsWatcher, pathx } from "@simplysm/core-node";
6
+ import { err as errNs } from "@simplysm/core-common";
7
7
  import { consola } from "consola";
8
8
  import {
9
9
  parseRootTsconfig,
@@ -191,7 +191,7 @@ async function build(info) {
191
191
  return {
192
192
  success: false,
193
193
  mainJsPath,
194
- errors: [errorMessage(err)]
194
+ errors: [errNs.message(err)]
195
195
  };
196
196
  }
197
197
  }
@@ -307,7 +307,7 @@ async function startWatch(info) {
307
307
  return;
308
308
  }
309
309
  const metafileAbsPaths = new Set(
310
- Object.keys(lastMetafile.inputs).map((key) => pathNorm(info.cwd, key))
310
+ Object.keys(lastMetafile.inputs).map((key) => pathx.norm(info.cwd, key))
311
311
  );
312
312
  const hasRelevantChange = changes.some((c) => metafileAbsPaths.has(c.path));
313
313
  if (hasRelevantChange) {
@@ -317,13 +317,13 @@ async function startWatch(info) {
317
317
  }
318
318
  } catch (err) {
319
319
  sender.send("error", {
320
- message: errorMessage(err)
320
+ message: errNs.message(err)
321
321
  });
322
322
  }
323
323
  });
324
324
  } catch (err) {
325
325
  sender.send("error", {
326
- message: errorMessage(err)
326
+ message: errNs.message(err)
327
327
  });
328
328
  }
329
329
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/workers/server.worker.ts"],
4
- "mappings": "AAAA,OAAO,UAAU;AACjB,OAAO,QAAQ;AACf,SAAS,iBAAiB;AAC1B,OAAO,aAAa;AACpB,SAAS,cAAc,WAAW,gBAAgB;AAClD,SAAS,oBAAoB;AAC7B,SAAS,eAAe;AACxB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,yBAAyB,uBAAuB;AACzD,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB,wBAAwB;AAmFlD,MAAM,SAAS,QAAQ,QAAQ,sBAAsB;AAGrD,IAAI;AAGJ,IAAI;AAGJ,IAAI;AAGJ,IAAI;AAKJ,eAAe,UAAyB;AAGtC,QAAM,mBAAmB;AACzB,mBAAiB;AACjB,iBAAe;AAEf,QAAM,iBAAiB;AACvB,kBAAgB;AAEhB,QAAM,oBAAoB;AAC1B,eAAa;AAEb,MAAI,oBAAoB,MAAM;AAC5B,UAAM,iBAAiB,QAAQ;AAAA,EACjC;AAEA,MAAI,kBAAkB,MAAM;AAC1B,UAAM,eAAe,MAAM;AAAA,EAC7B;AAEA,MAAI,qBAAqB,MAAM;AAC7B,UAAM,kBAAkB,MAAM;AAAA,EAChC;AACF;AAQA,SAAS,oBAAoB,QAAgB,iBAAsC;AACjF,QAAM,mBAAmB,mCAAmC,MAAM;AAClE,QAAM,gBAAgB,6BAA6B,MAAM;AACzD,QAAM,SAAS,mBAAmB,CAAC;AAEnC,QAAM,SAAS,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,kBAAkB,GAAG,eAAe,GAAG,MAAM,CAAC,CAAC;AAE9E,MAAI,iBAAiB,SAAS,GAAG;AAC/B,WAAO,MAAM,8CAA8C,gBAAgB;AAAA,EAC7E;AACA,MAAI,cAAc,SAAS,GAAG;AAC5B,WAAO,MAAM,8BAA8B,aAAa;AAAA,EAC1D;AACA,MAAI,OAAO,SAAS,GAAG;AACrB,WAAO,MAAM,kCAAkC,MAAM;AAAA,EACvD;AAEA,SAAO;AACT;AAUA,SAAS,wBAAwB,MAAuB,WAA2B;AACjF,QAAM,UAAU,KAAK,KAAK,KAAK,QAAQ,MAAM;AAC7C,QAAM,UAAU,KAAK,MAAM,GAAG,aAAa,KAAK,KAAK,KAAK,QAAQ,cAAc,GAAG,OAAO,CAAC;AAG3F,SAAO,MAAM,qBAAqB;AAClC,QAAM,cAAuC;AAAA,IAC3C,MAAM,QAAQ;AAAA,IACd,SAAS,QAAQ;AAAA,IACjB,MAAM,QAAQ;AAAA,EAChB;AACA,MAAI,UAAU,SAAS,GAAG;AACxB,UAAM,OAA+B,CAAC;AACtC,eAAW,OAAO,WAAW;AAC3B,WAAK,GAAG,IAAI;AAAA,IACd;AACA,gBAAY,cAAc,IAAI;AAAA,EAChC;AACA,MAAI,KAAK,mBAAmB,SAAS;AACnC,UAAM,cAAc,UAAU,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK;AAC1D,gBAAY,OAAO,IAAI,EAAE,MAAM,YAAY;AAAA,EAC7C;AACA,KAAG,cAAc,KAAK,KAAK,SAAS,cAAc,GAAG,KAAK,UAAU,aAAa,QAAW,CAAC,CAAC;AAG9F,MAAI,KAAK,mBAAmB,QAAQ;AAClC,WAAO,MAAM,kBAAkB;AAC/B,UAAM,mBAAmB,KAAK,KAAK,KAAK,KAAK,WAAW;AACxD,QAAI,cAAc;AAClB,QAAI,GAAG,WAAW,gBAAgB,GAAG;AACnC,YAAM,cAAc,GAAG,aAAa,kBAAkB,OAAO;AAC7D,YAAM,QAAQ,uBAAuB,KAAK,WAAW;AACrD,UAAI,SAAS,MAAM;AACjB,sBAAc,MAAM,CAAC;AAAA,MACvB;AAAA,IACF;AACA,OAAG,cAAc,KAAK,KAAK,SAAS,WAAW,GAAG;AAAA,UAAoB,WAAW;AAAA,CAAK;AAAA,EACxF;AAGA,SAAO,MAAM,oBAAoB;AACjC,KAAG;AAAA,IACD,KAAK,KAAK,SAAS,aAAa;AAAA,IAChC;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,KAAK,IAAI;AAAA,EACb;AAGA,MAAI,KAAK,OAAO,MAAM;AACpB,WAAO,MAAM,uBAAuB;AAEpC,UAAM,UAAU,KAAK,IAAI,QAAQ,QAAQ,KAAK,QAAQ,MAAM,EAAE,EAAE,QAAQ,UAAU,GAAG;AACrF,UAAM,cAAc,KAAK,UAAU;AAAA,MACjC;AAAA,MACA;AAAA,MACA,GAAI,KAAK,IAAI,oBAAoB,CAAC;AAAA,IACpC,CAAC;AACD,UAAM,SAAiC;AAAA,MACrC,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,GAAI,KAAK,OAAO,CAAC;AAAA,IACnB;AACA,UAAM,SAAS,KAAK,UAAU,QAAQ,QAAW,CAAC;AAElD,UAAM,kBACJ,KAAK,mBAAmB,UACpB,KACA;AAAA;AAEN,UAAM,YAAY;AAAA,MAChB,GAAI,KAAK,mBAAmB,UAAU,CAAC,wCAAwC,EAAE,IAAI,CAAC;AAAA,MACtF;AAAA,MACA,WAAW,KAAK,UAAU,OAAO,CAAC;AAAA,MAClC;AAAA,MACA;AAAA,MACA;AAAA,MACA,mBAAmB,WAAW;AAAA,MAC9B,gBAAgB,QAAQ;AAAA,MACxB;AAAA,MACA,UAAU,OAAO,QAAQ,OAAO,MAAM,CAAC;AAAA,MACvC;AAAA,MACA;AAAA,MACA;AAAA,IACF,EACG,OAAO,CAAC,SAAS,SAAS,EAAE,EAC5B,KAAK,IAAI;AAEZ,OAAG,cAAc,KAAK,KAAK,SAAS,gBAAgB,GAAG,SAAS;AAAA,EAClE;AACF;AAKA,wBAAwB,SAAS,MAAM;AASvC,eAAe,MAAM,MAAmD;AACtE,QAAM,aAAa,KAAK,KAAK,KAAK,QAAQ,QAAQ,SAAS;AAE3D,MAAI;AAEF,UAAM,eAAe,kBAAkB,KAAK,GAAG;AAC/C,UAAM,cAAc,sBAAsB,KAAK,QAAQ,YAAY;AAGnE,UAAM,kBAAkB,MAAM;AAAA,MAC5B,aAAa;AAAA,MACb;AAAA,MACA,KAAK;AAAA,IACP;AAGA,UAAM,WAAW,oBAAoB,KAAK,QAAQ,KAAK,SAAS;AAGhE,UAAM,iBAAiB,2BAA2B;AAAA,MAChD,QAAQ,KAAK;AAAA,MACb;AAAA,MACA;AAAA,MACA,KAAK,KAAK;AAAA,MACV;AAAA,IACF,CAAC;AAED,UAAM,SAAS,MAAM,QAAQ,MAAM,cAAc;AAGjD,UAAM,eAAe,KAAK,KAAK,KAAK,QAAQ,QAAQ,cAAc;AAClE,OAAG,cAAc,cAAc,KAAK,UAAU,KAAK,WAAW,CAAC,GAAG,QAAW,CAAC,CAAC;AAG/E,UAAM,gBAAgB,KAAK,QAAQ,KAAK;AAGxC,4BAAwB,MAAM,QAAQ;AAEtC,UAAM,SAAS,OAAO,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI;AAC9C,UAAM,WAAW,OAAO,SAAS,IAAI,CAAC,MAAM,EAAE,IAAI;AAClD,WAAO;AAAA,MACL,SAAS,OAAO,OAAO,WAAW;AAAA,MAClC;AAAA,MACA,QAAQ,OAAO,SAAS,IAAI,SAAS;AAAA,MACrC,UAAU,SAAS,SAAS,IAAI,WAAW;AAAA,IAC7C;AAAA,EACF,SAAS,KAAK;AACZ,WAAO;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA,QAAQ,CAAC,aAAa,GAAG,CAAC;AAAA,IAC5B;AAAA,EACF;AACF;AAEA,MAAM,kBAAkB,gBAAgB,YAAY;AAKpD,eAAe,sBACb,MACA,cACA,mBAC+B;AAC/B,QAAM,eAAe,kBAAkB,KAAK,GAAG;AAC/C,QAAM,cAAc,sBAAsB,KAAK,QAAQ,YAAY;AACnE,QAAM,kBAAkB,MAAM;AAAA,IAC5B,aAAa;AAAA,IACb;AAAA,IACA,KAAK;AAAA,EACP;AAEA,QAAM,aAAa,KAAK,KAAK,KAAK,QAAQ,QAAQ,SAAS;AAC3D,QAAM,WAAW,oBAAoB,KAAK,QAAQ,KAAK,SAAS;AAChE,QAAM,cAAc,2BAA2B;AAAA,IAC7C,QAAQ,KAAK;AAAA,IACb;AAAA,IACA;AAAA,IACA,KAAK,KAAK;AAAA,IACV;AAAA,EACF,CAAC;AAED,MAAI,mBAAmB;AAEvB,QAAM,UAAU,MAAM,QAAQ,QAAQ;AAAA,IACpC,GAAG;AAAA,IACH,UAAU;AAAA,IACV,OAAO;AAAA,IACP,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,MAAM,aAAa;AACjB,sBAAY,QAAQ,MAAM;AACxB,mBAAO,KAAK,cAAc,CAAC,CAAC;AAAA,UAC9B,CAAC;AAED,sBAAY,MAAM,OAAO,WAAW;AAElC,gBAAI,OAAO,YAAY,MAAM;AAC3B,6BAAe,OAAO;AAAA,YACxB;AAEA,kBAAM,SAAS,OAAO,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI;AAC9C,kBAAM,WAAW,OAAO,SAAS,IAAI,CAAC,MAAM,EAAE,IAAI;AAClD,kBAAM,UAAU,OAAO,OAAO,WAAW;AAGzC,gBAAI,kBAAkB;AACtB,gBAAI,WAAW,OAAO,eAAe,MAAM;AACzC,gCAAkB,MAAM,wBAAwB,OAAO,WAAW;AAAA,YACpE;AAEA,gBAAI,oBAAoB,SAAS;AAC/B,oBAAM,eAAe,KAAK,KAAK,KAAK,QAAQ,QAAQ,cAAc;AAClE,iBAAG,cAAc,cAAc,KAAK,UAAU,KAAK,WAAW,CAAC,GAAG,QAAW,CAAC,CAAC;AAAA,YACjF;AAGA,gBAAI,oBAAoB,mBAAmB,CAAC,SAAS;AACnD,qBAAO,KAAK,SAAS;AAAA,gBACnB;AAAA,gBACA;AAAA,gBACA,QAAQ,OAAO,SAAS,IAAI,SAAS;AAAA,gBACrC,UAAU,SAAS,SAAS,IAAI,WAAW;AAAA,cAC7C,CAAC;AAAA,YACH,OAAO;AACL,qBAAO,MAAM,4CAA4C;AAAA,YAC3D;AAEA,gBAAI,kBAAkB;AACpB,iCAAmB;AACnB,kCAAoB;AAAA,YACtB;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,QAAQ,QAAQ;AAEtB,SAAO;AACT;AAOA,eAAe,WAAW,MAAsC;AAC9D,kBAAgB;AAEhB,MAAI;AAEF,QAAI;AACJ,UAAM,oBAAoB,IAAI,QAAc,CAAC,YAAY;AACvD,0BAAoB;AAAA,IACtB,CAAC;AAGD,qBAAiB,MAAM,sBAAsB,MAAM,MAAM,iBAAiB;AAG1E,UAAM;AAGN,oBAAgB,MAAM,iBAAiB,KAAK,QAAQ,IAAI;AAGxD,UAAM,EAAE,eAAe,YAAY,IAAI,YAAY,KAAK,QAAQ,KAAK,KAAK,KAAK,WAAW;AAE1F,UAAM,aAAuB,CAAC;AAG9B,UAAM,YAAY;AAAA,MAChB,KAAK;AAAA,MACL,GAAG,cAAc,IAAI,CAAC,MAAM,KAAK,KAAK,KAAK,KAAK,YAAY,CAAC,CAAC;AAAA,IAChE;AACA,eAAW,OAAO,WAAW;AAC3B,iBAAW,KAAK,KAAK,KAAK,KAAK,OAAO,MAAM,GAAG,CAAC;AAChD,iBAAW,KAAK,KAAK,KAAK,KAAK,eAAe,CAAC;AAAA,IACjD;AAGA,eAAW,OAAO,aAAa;AAC7B,iBAAW,KAAK,KAAK,KAAK,KAAK,KAAK,gBAAgB,GAAG,IAAI,MAAM,GAAG,GAAG,QAAQ,MAAM,MAAM,CAAC;AAC5F,iBAAW;AAAA,QACT,KAAK,KAAK,KAAK,QAAQ,gBAAgB,GAAG,IAAI,MAAM,GAAG,GAAG,QAAQ,MAAM,MAAM;AAAA,MAChF;AAAA,IACF;AAGA,iBAAa,MAAM,UAAU,MAAM,UAAU;AAG7C,eAAW,SAAS,EAAE,OAAO,IAAI,GAAG,OAAO,YAAY;AACrD,UAAI;AAEF,cAAM,qBAAqB,QAAQ,KAAK,CAAC,MAAM,EAAE,UAAU,SAAS,EAAE,UAAU,QAAQ;AAExF,YAAI,oBAAoB;AACtB,iBAAO,MAAM,8CAA8C;AAE3D,gBAAM,aAAa;AACnB,2BAAiB,MAAM,sBAAsB,MAAM,KAAK;AAExD,cAAI,cAAc,MAAM;AACtB,kBAAM,WAAW,QAAQ;AAAA,UAC3B;AACA;AAAA,QACF;AAGA,YAAI,kBAAkB,KAAM;AAG5B,YAAI,gBAAgB,MAAM;AACxB,gBAAM,eAAe,QAAQ;AAC7B;AAAA,QACF;AAGA,cAAM,mBAAmB,IAAI;AAAA,UAC3B,OAAO,KAAK,aAAa,MAAM,EAAE,IAAI,CAAC,QAAQ,SAAS,KAAK,KAAK,GAAG,CAAC;AAAA,QACvE;AAEA,cAAM,oBAAoB,QAAQ,KAAK,CAAC,MAAM,iBAAiB,IAAI,EAAE,IAAI,CAAC;AAE1E,YAAI,mBAAmB;AACrB,gBAAM,eAAe,QAAQ;AAAA,QAC/B,OAAO;AACL,iBAAO,MAAM,uDAAuD;AAAA,QACtE;AAAA,MACF,SAAS,KAAK;AACZ,eAAO,KAAK,SAAS;AAAA,UACnB,SAAS,aAAa,GAAG;AAAA,QAC3B,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH,SAAS,KAAK;AACZ,WAAO,KAAK,SAAS;AAAA,MACnB,SAAS,aAAa,GAAG;AAAA,IAC3B,CAAC;AAAA,EACH;AACF;AAMA,eAAe,YAA2B;AACxC,QAAM,QAAQ;AAChB;AAEA,MAAM,SAAS,aAGb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAO,wBAAQ;",
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.75",
3
+ "version": "13.0.77",
4
4
  "description": "Simplysm package - CLI tool",
5
5
  "author": "simplysm",
6
6
  "license": "Apache-2.0",
@@ -34,7 +34,6 @@
34
34
  "sharp": "^0.34.5",
35
35
  "solid-js": "^1.9.11",
36
36
  "ssh2": "^1.17.0",
37
- "stylelint": "^16.26.1",
38
37
  "tailwindcss": "^3.4.19",
39
38
  "ts-morph": "^27.0.2",
40
39
  "typescript": "^5.9.3",
@@ -43,9 +42,9 @@
43
42
  "vite-plugin-solid": "^2.11.10",
44
43
  "vite-tsconfig-paths": "^6.1.1",
45
44
  "yargs": "^18.0.0",
46
- "@simplysm/core-common": "13.0.75",
47
- "@simplysm/core-node": "13.0.75",
48
- "@simplysm/storage": "13.0.75"
45
+ "@simplysm/core-common": "13.0.77",
46
+ "@simplysm/storage": "13.0.77",
47
+ "@simplysm/core-node": "13.0.77"
49
48
  },
50
49
  "devDependencies": {
51
50
  "@types/semver": "^7.7.1",
@@ -1,6 +1,6 @@
1
1
  import type * as DtsWorkerModule from "../workers/dts.worker";
2
2
  import type { BuildResult } from "../infra/ResultCollector";
3
- import { errorMessage } from "@simplysm/core-common";
3
+ import { err as errNs } from "@simplysm/core-common";
4
4
  import type { TypecheckEnv } from "../utils/tsconfig";
5
5
  import { BaseBuilder } from "./BaseBuilder";
6
6
  import type { PackageInfo } from "./types";
@@ -83,7 +83,7 @@ export class DtsBuilder extends BaseBuilder {
83
83
  target: pkg.config.target,
84
84
  type: "dts",
85
85
  status: "error",
86
- message: errorMessage(err),
86
+ message: errNs.message(err),
87
87
  };
88
88
  this.resultCollector.add(result);
89
89
  this.completeBuild(pkg);
@@ -1,9 +1,8 @@
1
1
  import type * as LibraryWorkerModule from "../workers/library.worker";
2
2
  import type { BuildResult } from "../infra/ResultCollector";
3
- import { errorMessage } from "@simplysm/core-common";
4
- import type { SdBuildPackageConfig } from "../sd-config.types";
3
+ import { err as errNs } from "@simplysm/core-common";
5
4
  import { BaseBuilder } from "./BaseBuilder";
6
- import type { PackageInfo } from "./types";
5
+ import type { BuildPackageInfo } from "./types";
7
6
 
8
7
  /**
9
8
  * Builder responsible for Library package builds
@@ -37,7 +36,7 @@ export class LibraryBuilder extends BaseBuilder {
37
36
  }
38
37
  }
39
38
 
40
- protected async buildPackage(pkg: PackageInfo): Promise<void> {
39
+ protected async buildPackage(pkg: BuildPackageInfo): Promise<void> {
41
40
  const worker = this.workerManager.get<typeof LibraryWorkerModule>(`${pkg.name}:build`)!;
42
41
 
43
42
  // Create build completion Promise
@@ -50,10 +49,9 @@ export class LibraryBuilder extends BaseBuilder {
50
49
  });
51
50
 
52
51
  // Start build (without await - completion detected via events)
53
- // LibraryBuilder only receives library packages (node/browser/neutral), so casting is safe
54
52
  void worker.startWatch({
55
53
  name: pkg.name,
56
- config: pkg.config as SdBuildPackageConfig,
54
+ config: pkg.config,
57
55
  cwd: this.cwd,
58
56
  pkgDir: pkg.dir,
59
57
  });
@@ -61,14 +59,13 @@ export class LibraryBuilder extends BaseBuilder {
61
59
  await buildPromise;
62
60
  }
63
61
 
64
- protected startWatchPackage(pkg: PackageInfo): void {
62
+ protected startWatchPackage(pkg: BuildPackageInfo): void {
65
63
  const worker = this.workerManager.get<typeof LibraryWorkerModule>(`${pkg.name}:build`)!;
66
64
 
67
- // LibraryBuilder only receives library packages (node/browser/neutral), so casting is safe
68
65
  worker
69
66
  .startWatch({
70
67
  name: pkg.name,
71
- config: pkg.config as SdBuildPackageConfig,
68
+ config: pkg.config,
72
69
  cwd: this.cwd,
73
70
  pkgDir: pkg.dir,
74
71
  })
@@ -78,7 +75,7 @@ export class LibraryBuilder extends BaseBuilder {
78
75
  target: pkg.config.target,
79
76
  type: "build",
80
77
  status: "error",
81
- message: errorMessage(err),
78
+ message: errNs.message(err),
82
79
  };
83
80
  this.resultCollector.add(result);
84
81
  this.completeBuild(pkg);
@@ -1,4 +1,4 @@
1
- import type { SdPackageConfig } from "../sd-config.types";
1
+ import type { SdBuildPackageConfig, SdPackageConfig } from "../sd-config.types";
2
2
  import type { ResultCollector } from "../infra/ResultCollector";
3
3
  import type { RebuildManager } from "../utils/rebuild-manager";
4
4
 
@@ -11,6 +11,11 @@ export interface PackageInfo {
11
11
  config: SdPackageConfig;
12
12
  }
13
13
 
14
+ /**
15
+ * PackageInfo narrowed for build packages (node/browser/neutral)
16
+ */
17
+ export type BuildPackageInfo = PackageInfo & { config: SdBuildPackageConfig };
18
+
14
19
  /**
15
20
  * Common Builder options
16
21
  */
@@ -1,15 +1,5 @@
1
1
  import path from "path";
2
- import {
3
- fsExists,
4
- fsMkdir,
5
- fsRead,
6
- fsReadJson,
7
- fsWrite,
8
- fsWriteJson,
9
- fsGlob,
10
- fsCopy,
11
- fsRm,
12
- } from "@simplysm/core-node";
2
+ import { fsx } from "@simplysm/core-node";
13
3
  import { env } from "@simplysm/core-common";
14
4
  import { consola } from "consola";
15
5
  import sharp from "sharp";
@@ -71,7 +61,7 @@ export class Capacitor {
71
61
  // F5: validate runtime configuration
72
62
  Capacitor._validateConfig(config);
73
63
 
74
- const npmConfig = await fsReadJson<NpmConfig>(path.resolve(pkgPath, "package.json"));
64
+ const npmConfig = await fsx.readJson<NpmConfig>(path.resolve(pkgPath, "package.json"));
75
65
  return new Capacitor(pkgPath, config, npmConfig);
76
66
  }
77
67
 
@@ -88,6 +78,9 @@ export class Capacitor {
88
78
  if (typeof config.appName !== "string" || config.appName.trim() === "") {
89
79
  throw new CapacitorConfigError("capacitor.appName is required.");
90
80
  }
81
+ if (!/^[a-zA-Z0-9 \-]+$/.test(config.appName)) {
82
+ throw new CapacitorConfigError(`capacitor.appName contains invalid characters: ${config.appName}`);
83
+ }
91
84
  if (config.platform != null) {
92
85
  const platforms = Object.keys(config.platform);
93
86
  for (const p of platforms) {
@@ -113,15 +106,15 @@ export class Capacitor {
113
106
  */
114
107
  private async _acquireLock(): Promise<void> {
115
108
  const lockPath = path.resolve(this._capPath, Capacitor._LOCK_FILE_NAME);
116
- if (await fsExists(lockPath)) {
117
- const lockContent = await fsRead(lockPath);
109
+ if (await fsx.exists(lockPath)) {
110
+ const lockContent = await fsx.read(lockPath);
118
111
  throw new Error(
119
112
  `Another Capacitor operation is in progress (PID: ${lockContent}). ` +
120
113
  `If there's an issue, delete the ${lockPath} file.`,
121
114
  );
122
115
  }
123
- await fsMkdir(this._capPath);
124
- await fsWrite(lockPath, String(process.pid));
116
+ await fsx.mkdir(this._capPath);
117
+ await fsx.write(lockPath, String(process.pid));
125
118
  }
126
119
 
127
120
  /**
@@ -129,7 +122,7 @@ export class Capacitor {
129
122
  */
130
123
  private async _releaseLock(): Promise<void> {
131
124
  const lockPath = path.resolve(this._capPath, Capacitor._LOCK_FILE_NAME);
132
- await fsRm(lockPath);
125
+ await fsx.rm(lockPath);
133
126
  }
134
127
 
135
128
  /**
@@ -285,7 +278,7 @@ export class Capacitor {
285
278
 
286
279
  // F12: cap init idempotency - execute only when capacitor.config.ts does not exist
287
280
  const configPath = path.resolve(this._capPath, "capacitor.config.ts");
288
- if (!(await fsExists(configPath))) {
281
+ if (!(await fsx.exists(configPath))) {
289
282
  await this._exec(
290
283
  "npx",
291
284
  ["cap", "init", this._config.appName, this._config.appId],
@@ -295,8 +288,8 @@ export class Capacitor {
295
288
 
296
289
  // Create default www/index.html
297
290
  const wwwPath = path.resolve(this._capPath, "www");
298
- await fsMkdir(wwwPath);
299
- await fsWrite(
291
+ await fsx.mkdir(wwwPath);
292
+ await fsx.write(
300
293
  path.resolve(wwwPath, "index.html"),
301
294
  "<!DOCTYPE html><html><head></head><body></body></html>",
302
295
  );
@@ -311,15 +304,15 @@ export class Capacitor {
311
304
  const projNpmConfigPath = path.resolve(this._pkgPath, "../../package.json");
312
305
 
313
306
  // F3: Check if file exists
314
- if (!(await fsExists(projNpmConfigPath))) {
307
+ if (!(await fsx.exists(projNpmConfigPath))) {
315
308
  throw new Error(`root package.json not found: ${projNpmConfigPath}`);
316
309
  }
317
310
 
318
- const projNpmConfig = await fsReadJson<NpmConfig>(projNpmConfigPath);
311
+ const projNpmConfig = await fsx.readJson<NpmConfig>(projNpmConfigPath);
319
312
 
320
313
  const capNpmConfPath = path.resolve(this._capPath, "package.json");
321
- const orgCapNpmConf: NpmConfig = (await fsExists(capNpmConfPath))
322
- ? await fsReadJson<NpmConfig>(capNpmConfPath)
314
+ const orgCapNpmConf: NpmConfig = (await fsx.exists(capNpmConfPath))
315
+ ? await fsx.readJson<NpmConfig>(capNpmConfPath)
323
316
  : { name: "", version: "" };
324
317
 
325
318
  const capNpmConf: NpmConfig = { ...orgCapNpmConf };
@@ -375,8 +368,8 @@ export class Capacitor {
375
368
  }
376
369
 
377
370
  // Save
378
- await fsMkdir(this._capPath);
379
- await fsWriteJson(capNpmConfPath, capNpmConf, { space: 2 });
371
+ await fsx.mkdir(this._capPath);
372
+ await fsx.writeJson(capNpmConfPath, capNpmConf, { space: 2 });
380
373
 
381
374
  // Check if dependencies changed
382
375
  const isChanged =
@@ -423,7 +416,7 @@ const config: CapacitorConfig = {
423
416
  export default config;
424
417
  `;
425
418
 
426
- await fsWrite(confPath, configContent);
419
+ await fsx.write(confPath, configContent);
427
420
  }
428
421
 
429
422
  /**
@@ -432,7 +425,7 @@ export default config;
432
425
  private async _addPlatforms(): Promise<void> {
433
426
  for (const platform of this._platforms) {
434
427
  const platformPath = path.resolve(this._capPath, platform);
435
- if (await fsExists(platformPath)) {
428
+ if (await fsx.exists(platformPath)) {
436
429
  Capacitor._logger.debug(`platform already exists: ${platform}`);
437
430
  continue;
438
431
  }
@@ -451,7 +444,7 @@ export default config;
451
444
  const iconSource = path.resolve(this._pkgPath, this._config.icon);
452
445
 
453
446
  // F6: Check if source icon exists
454
- if (!(await fsExists(iconSource))) {
447
+ if (!(await fsx.exists(iconSource))) {
455
448
  Capacitor._logger.warn(
456
449
  `icon file not found: ${iconSource}. Using default icon.`,
457
450
  );
@@ -459,7 +452,7 @@ export default config;
459
452
  }
460
453
 
461
454
  try {
462
- await fsMkdir(assetsDirPath);
455
+ await fsx.mkdir(assetsDirPath);
463
456
 
464
457
  // Create icon
465
458
  const logoPath = path.resolve(assetsDirPath, "logo.png");
@@ -501,7 +494,7 @@ export default config;
501
494
  // F6: Continue even if it fails (use default icon)
502
495
  }
503
496
  } else {
504
- await fsRm(assetsDirPath);
497
+ await fsx.rm(assetsDirPath);
505
498
  }
506
499
  }
507
500
 
@@ -516,7 +509,7 @@ export default config;
516
509
  const androidPath = path.resolve(this._capPath, "android");
517
510
 
518
511
  // F3: Check if Android directory exists
519
- if (!(await fsExists(androidPath))) {
512
+ if (!(await fsx.exists(androidPath))) {
520
513
  throw new Error(`Android project directory not found: ${androidPath}`);
521
514
  }
522
515
 
@@ -533,19 +526,19 @@ export default config;
533
526
  const gradlePropsPath = path.resolve(androidPath, "gradle.properties");
534
527
 
535
528
  // F3: Check if file exists
536
- if (!(await fsExists(gradlePropsPath))) {
529
+ if (!(await fsx.exists(gradlePropsPath))) {
537
530
  Capacitor._logger.warn(`gradle.properties file not found: ${gradlePropsPath}`);
538
531
  return;
539
532
  }
540
533
 
541
- let content = await fsRead(gradlePropsPath);
534
+ let content = await fsx.read(gradlePropsPath);
542
535
 
543
536
  const java21Path = await this._findJava21();
544
537
  if (java21Path != null && !content.includes("org.gradle.java.home")) {
545
538
  // F9: Improved Windows path escaping
546
539
  const escapedPath = java21Path.replace(/\\/g, "\\\\");
547
540
  content += `\norg.gradle.java.home=${escapedPath}\n`;
548
- await fsWrite(gradlePropsPath, content);
541
+ await fsx.write(gradlePropsPath, content);
549
542
  }
550
543
  }
551
544
 
@@ -563,7 +556,7 @@ export default config;
563
556
  ];
564
557
 
565
558
  for (const pattern of patterns) {
566
- const matches = await fsGlob(pattern);
559
+ const matches = await fsx.glob(pattern);
567
560
  if (matches.length > 0) {
568
561
  return matches.sort().at(-1);
569
562
  }
@@ -581,7 +574,7 @@ export default config;
581
574
  const sdkPath = await this._findAndroidSdk();
582
575
  if (sdkPath != null) {
583
576
  // F9: Always use forward slash (Gradle compatible)
584
- await fsWrite(localPropsPath, `sdk.dir=${sdkPath.replace(/\\/g, "/")}\n`);
577
+ await fsx.write(localPropsPath, `sdk.dir=${sdkPath.replace(/\\/g, "/")}\n`);
585
578
  } else {
586
579
  throw new Error(
587
580
  "Android SDK not found.\n" +
@@ -596,7 +589,7 @@ export default config;
596
589
  */
597
590
  private async _findAndroidSdk(): Promise<string | undefined> {
598
591
  const fromEnv = (env["ANDROID_HOME"] ?? env["ANDROID_SDK_ROOT"]) as string | undefined;
599
- if (fromEnv != null && (await fsExists(fromEnv))) {
592
+ if (fromEnv != null && (await fsx.exists(fromEnv))) {
600
593
  return fromEnv;
601
594
  }
602
595
 
@@ -608,7 +601,7 @@ export default config;
608
601
  ];
609
602
 
610
603
  for (const candidate of candidates) {
611
- if (await fsExists(candidate)) {
604
+ if (await fsx.exists(candidate)) {
612
605
  return candidate;
613
606
  }
614
607
  }
@@ -623,11 +616,11 @@ export default config;
623
616
  const manifestPath = path.resolve(androidPath, "app/src/main/AndroidManifest.xml");
624
617
 
625
618
  // F3: Check if file exists
626
- if (!(await fsExists(manifestPath))) {
619
+ if (!(await fsx.exists(manifestPath))) {
627
620
  throw new Error(`AndroidManifest.xml file not found: ${manifestPath}`);
628
621
  }
629
622
 
630
- let content = await fsRead(manifestPath);
623
+ let content = await fsx.read(manifestPath);
631
624
 
632
625
  // Configure usesCleartextTraffic
633
626
  if (!content.includes("android:usesCleartextTraffic")) {
@@ -686,7 +679,7 @@ export default config;
686
679
  }
687
680
  }
688
681
 
689
- await fsWrite(manifestPath, content);
682
+ await fsx.write(manifestPath, content);
690
683
  }
691
684
 
692
685
  /**
@@ -696,11 +689,11 @@ export default config;
696
689
  const buildGradlePath = path.resolve(androidPath, "app/build.gradle");
697
690
 
698
691
  // F3: Check if file exists
699
- if (!(await fsExists(buildGradlePath))) {
692
+ if (!(await fsx.exists(buildGradlePath))) {
700
693
  throw new Error(`build.gradle file not found: ${buildGradlePath}`);
701
694
  }
702
695
 
703
- let content = await fsRead(buildGradlePath);
696
+ let content = await fsx.read(buildGradlePath);
704
697
 
705
698
  // Configure versionName and versionCode
706
699
  const version = this._npmConfig.version;
@@ -733,10 +726,10 @@ export default config;
733
726
  if (signConfig) {
734
727
  const keystoreSource = path.resolve(this._pkgPath, signConfig.keystore);
735
728
  // F3: Check if keystore file exists
736
- if (!(await fsExists(keystoreSource))) {
729
+ if (!(await fsx.exists(keystoreSource))) {
737
730
  throw new Error(`keystore file not found: ${keystoreSource}`);
738
731
  }
739
- await fsCopy(keystoreSource, keystorePath);
732
+ await fsx.copy(keystoreSource, keystorePath);
740
733
 
741
734
  // F9: Convert relative path to forward slash
742
735
  const keystoreRelativePath = path
@@ -749,9 +742,9 @@ export default config;
749
742
  signingConfigs {
750
743
  release {
751
744
  storeFile file("${keystoreRelativePath}")
752
- storePassword '${signConfig.storePassword}'
753
- keyAlias '${signConfig.alias}'
754
- keyPassword '${signConfig.password}'
745
+ storePassword '${Capacitor._escapeGroovyString(signConfig.storePassword)}'
746
+ keyAlias '${Capacitor._escapeGroovyString(signConfig.alias)}'
747
+ keyPassword '${Capacitor._escapeGroovyString(signConfig.password)}'
755
748
  storeType "${keystoreType}"
756
749
  }
757
750
  }
@@ -766,10 +759,18 @@ export default config;
766
759
  );
767
760
  }
768
761
  } else {
769
- await fsRm(keystorePath);
762
+ await fsx.rm(keystorePath);
770
763
  }
771
764
 
772
- await fsWrite(buildGradlePath, content);
765
+ await fsx.write(buildGradlePath, content);
766
+ }
767
+
768
+ /**
769
+ * Escape single quotes in Groovy string (for use in single-quoted strings)
770
+ * Groovy: 'string with \'single quote\' inside'
771
+ */
772
+ private static _escapeGroovyString(value: string): string {
773
+ return value.replace(/'/g, "\\'");
773
774
  }
774
775
 
775
776
  //#endregion
@@ -822,7 +823,7 @@ export default config;
822
823
  fileName,
823
824
  );
824
825
 
825
- const actualPath = (await fsExists(sourcePath))
826
+ const actualPath = (await fsx.exists(sourcePath))
826
827
  ? sourcePath
827
828
  : path.resolve(
828
829
  androidPath,
@@ -832,20 +833,20 @@ export default config;
832
833
  `app-${buildType}.${ext}`,
833
834
  );
834
835
 
835
- if (!(await fsExists(actualPath))) {
836
+ if (!(await fsx.exists(actualPath))) {
836
837
  Capacitor._logger.warn(`build output not found: ${actualPath}`);
837
838
  return;
838
839
  }
839
840
 
840
841
  const outputFileName = `${this._config.appName}${isSigned ? "" : "-unsigned"}-latest.${ext}`;
841
842
 
842
- await fsMkdir(targetOutPath);
843
- await fsCopy(actualPath, path.resolve(targetOutPath, outputFileName));
843
+ await fsx.mkdir(targetOutPath);
844
+ await fsx.copy(actualPath, path.resolve(targetOutPath, outputFileName));
844
845
 
845
846
  // Save per-version
846
847
  const updatesPath = path.resolve(targetOutPath, "updates");
847
- await fsMkdir(updatesPath);
848
- await fsCopy(actualPath, path.resolve(updatesPath, `${this._npmConfig.version}.${ext}`));
848
+ await fsx.mkdir(updatesPath);
849
+ await fsx.copy(actualPath, path.resolve(updatesPath, `${this._npmConfig.version}.${ext}`));
849
850
  }
850
851
 
851
852
  //#endregion
@@ -858,9 +859,9 @@ export default config;
858
859
  private async _updateServerUrl(url: string): Promise<void> {
859
860
  const configPath = path.resolve(this._capPath, "capacitor.config.ts");
860
861
 
861
- if (!(await fsExists(configPath))) return;
862
+ if (!(await fsx.exists(configPath))) return;
862
863
 
863
- let content = await fsRead(configPath);
864
+ let content = await fsx.read(configPath);
864
865
 
865
866
  if (content.includes("url:")) {
866
867
  content = content.replace(/url:\s*"[^"]*"/, `url: "${url}"`);
@@ -868,7 +869,7 @@ export default config;
868
869
  content = content.replace(/server:\s*\{/, `server: {\n url: "${url}",`);
869
870
  }
870
871
 
871
- await fsWrite(configPath, content);
872
+ await fsx.write(configPath, content);
872
873
  }
873
874
 
874
875
  //#endregion
@@ -1,6 +1,6 @@
1
1
  import { execa } from "execa";
2
2
  import { Worker, type WorkerProxy } from "@simplysm/core-node";
3
- import { errorMessage } from "@simplysm/core-common";
3
+ import { err as errNs } from "@simplysm/core-common";
4
4
  import { executeTypecheck, type TypecheckResult } from "./typecheck";
5
5
  import type { LintResult } from "./lint";
6
6
  import type * as LintWorkerModule from "../workers/lint.worker";
@@ -53,7 +53,7 @@ async function spawnVitest(targets: string[]): Promise<CheckResult> {
53
53
  success: false,
54
54
  errorCount: 1,
55
55
  warningCount: 0,
56
- formattedOutput: errorMessage(err),
56
+ formattedOutput: errNs.message(err),
57
57
  };
58
58
  }
59
59
  }
@@ -110,7 +110,7 @@ export async function runCheck(options: CheckOptions): Promise<void> {
110
110
 
111
111
  tasks.push(
112
112
  lintWorker
113
- .lint({ targets, fix: true, timing: false })
113
+ .lint({ targets, fix: false, timing: false })
114
114
  .then(
115
115
  (r: LintResult): CheckResult => ({
116
116
  name: "LINT",
@@ -141,7 +141,7 @@ export async function runCheck(options: CheckOptions): Promise<void> {
141
141
  success: false,
142
142
  errorCount: 1,
143
143
  warningCount: 0,
144
- formattedOutput: errorMessage(r.reason),
144
+ formattedOutput: errNs.message(r.reason),
145
145
  };
146
146
  });
147
147