@simplysm/sd-cli 14.0.16 → 14.0.17

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 (202) hide show
  1. package/README.md +2 -1
  2. package/dist/angular/client-transform-stylesheet.d.ts +2 -0
  3. package/dist/angular/client-transform-stylesheet.d.ts.map +1 -1
  4. package/dist/angular/client-transform-stylesheet.js +88 -2
  5. package/dist/angular/client-transform-stylesheet.js.map +1 -1
  6. package/dist/angular/vite-angular-plugin.d.ts +7 -0
  7. package/dist/angular/vite-angular-plugin.d.ts.map +1 -1
  8. package/dist/angular/vite-angular-plugin.js +78 -16
  9. package/dist/angular/vite-angular-plugin.js.map +1 -1
  10. package/dist/capacitor/capacitor.d.ts.map +1 -1
  11. package/dist/capacitor/capacitor.js +9 -13
  12. package/dist/capacitor/capacitor.js.map +1 -1
  13. package/dist/commands/check.d.ts.map +1 -1
  14. package/dist/commands/check.js +8 -9
  15. package/dist/commands/check.js.map +1 -1
  16. package/dist/commands/device.d.ts.map +1 -1
  17. package/dist/commands/device.js +33 -1
  18. package/dist/commands/device.js.map +1 -1
  19. package/dist/commands/lint.d.ts +0 -1
  20. package/dist/commands/lint.d.ts.map +1 -1
  21. package/dist/commands/lint.js +2 -3
  22. package/dist/commands/lint.js.map +1 -1
  23. package/dist/commands/publish.js +2 -2
  24. package/dist/commands/publish.js.map +1 -1
  25. package/dist/commands/typecheck.d.ts.map +1 -1
  26. package/dist/commands/typecheck.js +0 -1
  27. package/dist/commands/typecheck.js.map +1 -1
  28. package/dist/electron/electron.d.ts +3 -2
  29. package/dist/electron/electron.d.ts.map +1 -1
  30. package/dist/electron/electron.js +54 -31
  31. package/dist/electron/electron.js.map +1 -1
  32. package/dist/engines/BaseEngine.js +1 -1
  33. package/dist/engines/BaseEngine.js.map +1 -1
  34. package/dist/engines/NgtscEngine.d.ts.map +1 -1
  35. package/dist/engines/NgtscEngine.js +0 -1
  36. package/dist/engines/NgtscEngine.js.map +1 -1
  37. package/dist/engines/ServerEsbuildEngine.d.ts.map +1 -1
  38. package/dist/engines/ServerEsbuildEngine.js +0 -1
  39. package/dist/engines/ServerEsbuildEngine.js.map +1 -1
  40. package/dist/engines/TscEngine.d.ts.map +1 -1
  41. package/dist/engines/TscEngine.js +0 -1
  42. package/dist/engines/TscEngine.js.map +1 -1
  43. package/dist/engines/ViteEngine.d.ts.map +1 -1
  44. package/dist/engines/ViteEngine.js +8 -1
  45. package/dist/engines/ViteEngine.js.map +1 -1
  46. package/dist/engines/index.d.ts +0 -10
  47. package/dist/engines/index.d.ts.map +1 -1
  48. package/dist/engines/index.js +0 -5
  49. package/dist/engines/index.js.map +1 -1
  50. package/dist/engines/types.d.ts +0 -1
  51. package/dist/engines/types.d.ts.map +1 -1
  52. package/dist/infra/SignalHandler.d.ts +1 -6
  53. package/dist/infra/SignalHandler.d.ts.map +1 -1
  54. package/dist/infra/SignalHandler.js +4 -13
  55. package/dist/infra/SignalHandler.js.map +1 -1
  56. package/dist/orchestrators/BuildOrchestrator.d.ts.map +1 -1
  57. package/dist/orchestrators/BuildOrchestrator.js +7 -12
  58. package/dist/orchestrators/BuildOrchestrator.js.map +1 -1
  59. package/dist/orchestrators/DevWatchOrchestrator.d.ts.map +1 -1
  60. package/dist/orchestrators/DevWatchOrchestrator.js +17 -10
  61. package/dist/orchestrators/DevWatchOrchestrator.js.map +1 -1
  62. package/dist/sd-cli-entry.d.ts +0 -1
  63. package/dist/sd-cli-entry.d.ts.map +1 -1
  64. package/dist/sd-cli-entry.js +7 -8
  65. package/dist/sd-cli-entry.js.map +1 -1
  66. package/dist/sd-config.types.d.ts +11 -1
  67. package/dist/sd-config.types.d.ts.map +1 -1
  68. package/dist/utils/angular-compiler.d.ts.map +1 -1
  69. package/dist/utils/angular-compiler.js +20 -13
  70. package/dist/utils/angular-compiler.js.map +1 -1
  71. package/dist/utils/esbuild-config.d.ts +1 -1
  72. package/dist/utils/esbuild-config.d.ts.map +1 -1
  73. package/dist/utils/esbuild-config.js +1 -4
  74. package/dist/utils/esbuild-config.js.map +1 -1
  75. package/dist/utils/ngtsc-build-core.d.ts.map +1 -1
  76. package/dist/utils/ngtsc-build-core.js +3 -0
  77. package/dist/utils/ngtsc-build-core.js.map +1 -1
  78. package/dist/utils/tsc-build.d.ts +5 -0
  79. package/dist/utils/tsc-build.d.ts.map +1 -1
  80. package/dist/utils/tsc-build.js +2 -1
  81. package/dist/utils/tsc-build.js.map +1 -1
  82. package/dist/utils/vite-config.d.ts +1 -1
  83. package/dist/utils/vite-config.d.ts.map +1 -1
  84. package/dist/utils/vite-config.js +22 -53
  85. package/dist/utils/vite-config.js.map +1 -1
  86. package/dist/utils/vite-pwa-plugin.d.ts +9 -0
  87. package/dist/utils/vite-pwa-plugin.d.ts.map +1 -0
  88. package/dist/utils/vite-pwa-plugin.js +139 -0
  89. package/dist/utils/vite-pwa-plugin.js.map +1 -0
  90. package/dist/utils/worker-utils.d.ts +2 -5
  91. package/dist/utils/worker-utils.d.ts.map +1 -1
  92. package/dist/utils/worker-utils.js +5 -11
  93. package/dist/utils/worker-utils.js.map +1 -1
  94. package/dist/workers/client.worker.d.ts.map +1 -1
  95. package/dist/workers/client.worker.js +9 -3
  96. package/dist/workers/client.worker.js.map +1 -1
  97. package/dist/workers/library-build.worker.d.ts.map +1 -1
  98. package/dist/workers/library-build.worker.js +6 -2
  99. package/dist/workers/library-build.worker.js.map +1 -1
  100. package/dist/workers/ngtsc-build.worker.js +2 -2
  101. package/dist/workers/ngtsc-build.worker.js.map +1 -1
  102. package/dist/workers/server-build.worker.d.ts.map +1 -1
  103. package/dist/workers/server-build.worker.js +6 -2
  104. package/dist/workers/server-build.worker.js.map +1 -1
  105. package/dist/workers/server-runtime.worker.js +4 -4
  106. package/dist/workers/server-runtime.worker.js.map +1 -1
  107. package/docs/config.md +26 -0
  108. package/docs/pwa-configuration-types.md +1 -1
  109. package/package.json +8 -10
  110. package/src/angular/client-transform-stylesheet.ts +104 -2
  111. package/src/angular/vite-angular-plugin.ts +92 -31
  112. package/src/capacitor/capacitor.ts +10 -26
  113. package/src/commands/check.ts +8 -11
  114. package/src/commands/device.ts +38 -3
  115. package/src/commands/lint.ts +2 -3
  116. package/src/commands/publish.ts +2 -2
  117. package/src/commands/typecheck.ts +0 -1
  118. package/src/electron/electron.ts +62 -43
  119. package/src/engines/BaseEngine.ts +1 -1
  120. package/src/engines/NgtscEngine.ts +0 -1
  121. package/src/engines/ServerEsbuildEngine.ts +0 -1
  122. package/src/engines/TscEngine.ts +0 -1
  123. package/src/engines/ViteEngine.ts +7 -1
  124. package/src/engines/index.ts +0 -10
  125. package/src/engines/types.ts +0 -1
  126. package/src/infra/SignalHandler.ts +4 -14
  127. package/src/orchestrators/BuildOrchestrator.ts +7 -9
  128. package/src/orchestrators/DevWatchOrchestrator.ts +21 -9
  129. package/src/sd-cli-entry.ts +11 -16
  130. package/src/sd-config.types.ts +12 -1
  131. package/src/utils/angular-compiler.ts +21 -21
  132. package/src/utils/esbuild-config.ts +2 -5
  133. package/src/utils/ngtsc-build-core.ts +7 -0
  134. package/src/utils/tsc-build.ts +7 -0
  135. package/src/utils/vite-config.ts +23 -55
  136. package/src/utils/vite-pwa-plugin.ts +168 -0
  137. package/src/utils/worker-utils.ts +5 -11
  138. package/src/workers/client.worker.ts +11 -3
  139. package/src/workers/library-build.worker.ts +6 -2
  140. package/src/workers/ngtsc-build.worker.ts +2 -2
  141. package/src/workers/server-build.worker.ts +7 -2
  142. package/src/workers/server-runtime.worker.ts +4 -4
  143. package/tests/angular/client-transform-stylesheet.spec.ts +43 -0
  144. package/tests/angular/find-affected-by-scss.spec.ts +37 -0
  145. package/tests/angular/fixtures/basic-app/scss/_colors.scss +1 -0
  146. package/tests/angular/fixtures/basic-app/scss/_variables.scss +3 -0
  147. package/tests/angular/fixtures/basic-app/src/styled.component.ts +14 -0
  148. package/tests/angular/linker-disk-cache.spec.ts +158 -0
  149. package/tests/angular/scss-disk-cache.spec.ts +162 -0
  150. package/tests/angular/vite-angular-plugin-hmr-fallback.spec.ts +15 -15
  151. package/tests/angular/vite-angular-plugin-hmr.spec.ts +9 -9
  152. package/tests/angular/vite-angular-plugin-lint.spec.ts +4 -4
  153. package/tests/angular/vite-angular-plugin-scss-hmr.spec.ts +87 -0
  154. package/tests/angular/vite-angular-plugin.spec.ts +15 -15
  155. package/tests/capacitor/capacitor-icon.spec.ts +2 -4
  156. package/tests/capacitor/capacitor-init.spec.ts +2 -4
  157. package/tests/capacitor/capacitor-workspace.spec.ts +2 -4
  158. package/tests/commands/device.spec.ts +100 -0
  159. package/tests/electron/electron.spec.ts +24 -17
  160. package/tests/engines/ngtsc-engine.spec.ts +0 -3
  161. package/tests/engines/server-esbuild-engine.spec.ts +0 -3
  162. package/tests/engines/tsc-engine.spec.ts +1 -2
  163. package/tests/engines/vite-engine.spec.ts +0 -2
  164. package/tests/infra/signal-handler.spec.ts +1 -12
  165. package/tests/orchestrators/build-orchestrator.spec.ts +0 -6
  166. package/tests/orchestrators/dev-watch-orchestrator.spec.ts +24 -66
  167. package/tests/utils/angular-compiler.spec.ts +1396 -32
  168. package/tests/utils/esbuild-config.spec.ts +4 -7
  169. package/tests/utils/{ngtsc-build-core-angular-compiler.spec.ts → ngtsc-build-core.spec.ts} +142 -11
  170. package/tests/utils/tsc-build.spec.ts +4 -1
  171. package/tests/utils/vite-config.spec.ts +130 -261
  172. package/tests/utils/vite-pwa-plugin.acc.spec.ts +143 -0
  173. package/tests/utils/vite-pwa-plugin.spec.ts +350 -0
  174. package/tests/utils/worker-utils.spec.ts +8 -7
  175. package/tests/workers/client-worker.spec.ts +50 -1
  176. package/tests/workers/dev-port-file.verify.md +6 -0
  177. package/tests/workers/library-build-lint.spec.ts +1 -1
  178. package/tests/workers/library-build-worker.spec.ts +1 -1
  179. package/tests/workers/ngtsc-build-lint.spec.ts +1 -1
  180. package/tests/workers/server-build-lint.spec.ts +1 -1
  181. package/tests/workers/server-build-worker.spec.ts +1 -1
  182. package/tests/workers/server-runtime-worker.spec.ts +8 -1
  183. package/dist/infra/WorkerManager.d.ts +0 -40
  184. package/dist/infra/WorkerManager.d.ts.map +0 -1
  185. package/dist/infra/WorkerManager.js +0 -59
  186. package/dist/infra/WorkerManager.js.map +0 -1
  187. package/dist/utils/SdCliReporter.d.ts +0 -18
  188. package/dist/utils/SdCliReporter.d.ts.map +0 -1
  189. package/dist/utils/SdCliReporter.js +0 -144
  190. package/dist/utils/SdCliReporter.js.map +0 -1
  191. package/src/infra/WorkerManager.ts +0 -65
  192. package/src/utils/SdCliReporter.ts +0 -177
  193. package/tests/angular/scss-compiler-async.spec.ts +0 -54
  194. package/tests/commands/dev.spec.ts +0 -53
  195. package/tests/commands/watch.spec.ts +0 -53
  196. package/tests/infra/worker-manager.spec.ts +0 -63
  197. package/tests/utils/angular-compiler-emit.spec.ts +0 -570
  198. package/tests/utils/angular-compiler-init.spec.ts +0 -705
  199. package/tests/utils/angular-compiler-update.spec.ts +0 -293
  200. package/tests/utils/build-env.spec.ts +0 -33
  201. package/tests/utils/ngtsc-build-core-transform-stylesheet.spec.ts +0 -124
  202. package/tests/utils/ngtsc-scss-refactor.spec.ts +0 -47
@@ -651,8 +651,9 @@ describe("DevWatchOrchestrator", () => {
651
651
  expect.any(Object),
652
652
  );
653
653
  expect(mockBuildEngines[0].startWatch).toHaveBeenCalledWith({ js: true, dts: false, lint: false });
654
- // Runtime is NOT started during initial build; it starts via batchComplete
655
- expect(Worker.create).not.toHaveBeenCalled();
654
+ // Runtime starts during start() after all engines ready
655
+ expect(Worker.create).toHaveBeenCalled();
656
+ expect(mockRuntimeProxies[0].start).toHaveBeenCalled();
656
657
  });
657
658
 
658
659
  // --- Acceptance: Server 패키지 dev 모드 실행 ---
@@ -833,7 +834,7 @@ describe("DevWatchOrchestrator", () => {
833
834
  });
834
835
 
835
836
  // --- Acceptance: Server batchComplete 시 runtime 시작 ---
836
- it("starts runtime on batchComplete with success", async () => {
837
+ it("starts runtime during start() after all engines ready", async () => {
837
838
  setupDefaults(createConfig({
838
839
  packages: { "service-server": { target: "server" } },
839
840
  }));
@@ -843,18 +844,7 @@ describe("DevWatchOrchestrator", () => {
843
844
  await orchestrator.initialize();
844
845
  await orchestrator.start();
845
846
 
846
- // No runtime started initially
847
- expect(Worker.create).not.toHaveBeenCalled();
848
-
849
- // Get batchComplete handler
850
- const rebuildInstance = vi.mocked(RebuildManager).mock.instances[0];
851
- const onCall = vi.mocked(rebuildInstance.on).mock.calls.find((c) => c[0] === "batchComplete");
852
- const batchHandler = onCall?.[1] as ((keys: string[]) => void) | undefined;
853
-
854
- batchHandler?.(["service-server:build"]);
855
- await new Promise((r) => setTimeout(r, 200));
856
-
857
- // First runtime created via batchComplete
847
+ // Runtime starts during start(), not via batchComplete
858
848
  expect(mockRuntimeProxies).toHaveLength(1);
859
849
  expect(mockRuntimeProxies[0].start).toHaveBeenCalled();
860
850
  });
@@ -870,12 +860,8 @@ describe("DevWatchOrchestrator", () => {
870
860
  await orchestrator.initialize();
871
861
  await orchestrator.start();
872
862
 
873
- // Trigger batchComplete to create runtime first
874
- const rebuildInstance = vi.mocked(RebuildManager).mock.instances[0];
875
- const onCall = vi.mocked(rebuildInstance.on).mock.calls.find((c) => c[0] === "batchComplete");
876
- const batchHandler = onCall?.[1] as ((keys: string[]) => void) | undefined;
877
- batchHandler?.(["service-server:build"]);
878
- await new Promise((r) => setTimeout(r, 200));
863
+ // Runtime is now started during start()
864
+ expect(mockRuntimeProxies).toHaveLength(1);
879
865
 
880
866
  await orchestrator.shutdown();
881
867
 
@@ -911,7 +897,7 @@ describe("DevWatchOrchestrator", () => {
911
897
  });
912
898
 
913
899
  // Unit: multiple server packages
914
- it("creates engines for multiple server packages (runtimes start via batchComplete)", async () => {
900
+ it("creates engines for multiple server packages (runtimes start during start())", async () => {
915
901
  setupDefaults(createConfig({
916
902
  packages: {
917
903
  "service-server": { target: "server" },
@@ -925,8 +911,8 @@ describe("DevWatchOrchestrator", () => {
925
911
  await orchestrator.start();
926
912
 
927
913
  expect(createBuildEngine).toHaveBeenCalledTimes(2);
928
- // Runtimes are NOT started during initial build
929
- expect(Worker.create).not.toHaveBeenCalled();
914
+ // Runtimes start during start() after all engines ready
915
+ expect(Worker.create).toHaveBeenCalledTimes(2);
930
916
  });
931
917
 
932
918
  // Unit: skips start when no packages
@@ -1027,16 +1013,7 @@ describe("DevWatchOrchestrator", () => {
1027
1013
  await orchestrator.initialize();
1028
1014
  await orchestrator.start();
1029
1015
 
1030
- // Runtime starts via batchComplete, not initial start
1031
- expect(Worker.create).not.toHaveBeenCalled();
1032
-
1033
- // Trigger batchComplete
1034
- const rebuildInstance = vi.mocked(RebuildManager).mock.instances[0];
1035
- const onCall = vi.mocked(rebuildInstance.on).mock.calls.find((c) => c[0] === "batchComplete");
1036
- const batchHandler = onCall?.[1] as ((keys: string[]) => void) | undefined;
1037
- batchHandler?.(["service-server:build"]);
1038
- await new Promise((r) => setTimeout(r, 200));
1039
-
1016
+ // Runtime starts during start() with client ports available
1040
1017
  expect(Worker.create).toHaveBeenCalled();
1041
1018
  expect(mockRuntimeProxies[0].start).toHaveBeenCalledWith(
1042
1019
  expect.objectContaining({
@@ -1059,13 +1036,7 @@ describe("DevWatchOrchestrator", () => {
1059
1036
  await orchestrator.initialize();
1060
1037
  await orchestrator.start();
1061
1038
 
1062
- // Trigger batchComplete to start server runtime
1063
- const rebuildInstance = vi.mocked(RebuildManager).mock.instances[0];
1064
- const onCall = vi.mocked(rebuildInstance.on).mock.calls.find((c) => c[0] === "batchComplete");
1065
- const batchHandler = onCall?.[1] as ((keys: string[]) => void) | undefined;
1066
- batchHandler?.(["service-server:build"]);
1067
- await new Promise((r) => setTimeout(r, 200));
1068
-
1039
+ // Runtime starts during start(), standalone client ports excluded
1069
1040
  expect(mockRuntimeProxies[0].start).toHaveBeenCalledWith(
1070
1041
  expect.objectContaining({
1071
1042
  clientPorts: {},
@@ -1112,13 +1083,7 @@ describe("DevWatchOrchestrator", () => {
1112
1083
  await orchestrator.initialize();
1113
1084
  await orchestrator.start();
1114
1085
 
1115
- // Trigger batchComplete to start server runtime
1116
- const rebuildInstance = vi.mocked(RebuildManager).mock.instances[0];
1117
- const onCall = vi.mocked(rebuildInstance.on).mock.calls.find((c) => c[0] === "batchComplete");
1118
- const batchHandler = onCall?.[1] as ((keys: string[]) => void) | undefined;
1119
- batchHandler?.(["service-server:build"]);
1120
- await new Promise((r) => setTimeout(r, 200));
1121
-
1086
+ // Runtime starts during start() but client port unavailable → empty clientPorts
1122
1087
  expect(mockRuntimeProxies[0].start).toHaveBeenCalledWith(
1123
1088
  expect.objectContaining({
1124
1089
  clientPorts: {},
@@ -1126,8 +1091,8 @@ describe("DevWatchOrchestrator", () => {
1126
1091
  );
1127
1092
  });
1128
1093
 
1129
- // --- Acceptance: printServers serverClientsMap 전달 ---
1130
- it("passes serverClientsMap to printServers", async () => {
1094
+ // --- Acceptance: printServers start()에서 직접 호출되지 않는다 (serverReady 이벤트 경로만 사용) ---
1095
+ it("does not call printServers directly during start()", async () => {
1131
1096
  setupDefaults(createConfig({
1132
1097
  packages: {
1133
1098
  "service-server": { target: "server" },
@@ -1140,12 +1105,9 @@ describe("DevWatchOrchestrator", () => {
1140
1105
  await orchestrator.initialize();
1141
1106
  await orchestrator.start();
1142
1107
 
1143
- expect(_printServers).toHaveBeenCalledWith(
1144
- expect.any(Map),
1145
- expect.any(Map),
1146
- );
1147
- const serverClientsMap = vi.mocked(_printServers).mock.calls[0][1] as Map<string, string[]>;
1148
- expect(serverClientsMap.get("service-server")).toEqual(["my-client"]);
1108
+ // printServers should NOT be called directly during start()
1109
+ // It should only be called via serverReady → _schedulePrintServers()
1110
+ expect(_printServers).not.toHaveBeenCalled();
1149
1111
  });
1150
1112
 
1151
1113
  // --- Acceptance: 서버 rebuild 시 프록시 재등록 ---
@@ -1162,14 +1124,7 @@ describe("DevWatchOrchestrator", () => {
1162
1124
  await orchestrator.initialize();
1163
1125
  await orchestrator.start();
1164
1126
 
1165
- // Trigger first batchComplete to start runtime
1166
- const rebuildInstance = vi.mocked(RebuildManager).mock.instances[0];
1167
- const onCall = vi.mocked(rebuildInstance.on).mock.calls.find((c) => c[0] === "batchComplete");
1168
- const batchHandler = onCall?.[1] as ((keys: string[]) => void) | undefined;
1169
- batchHandler?.(["service-server:build"]);
1170
- await new Promise((r) => setTimeout(r, 200));
1171
-
1172
- // First runtime created with clientPorts
1127
+ // First runtime created during start() with clientPorts
1173
1128
  expect(mockRuntimeProxies).toHaveLength(1);
1174
1129
  expect(mockRuntimeProxies[0].start).toHaveBeenCalledWith(
1175
1130
  expect.objectContaining({
@@ -1177,11 +1132,14 @@ describe("DevWatchOrchestrator", () => {
1177
1132
  }),
1178
1133
  );
1179
1134
 
1180
- // Trigger second batchComplete (rebuild)
1135
+ // Trigger batchComplete (rebuild after initial build)
1136
+ const rebuildInstance = vi.mocked(RebuildManager).mock.instances[0];
1137
+ const onCall = vi.mocked(rebuildInstance.on).mock.calls.find((c) => c[0] === "batchComplete");
1138
+ const batchHandler = onCall?.[1] as ((keys: string[]) => void) | undefined;
1181
1139
  batchHandler?.(["service-server:build"]);
1182
1140
  await new Promise((r) => setTimeout(r, 200));
1183
1141
 
1184
- // Second runtime start should also have clientPorts
1142
+ // Second runtime start (rebuild) should also have clientPorts
1185
1143
  expect(mockRuntimeProxies).toHaveLength(2);
1186
1144
  expect(mockRuntimeProxies[0].terminate).toHaveBeenCalled();
1187
1145
  expect(mockRuntimeProxies[1].start).toHaveBeenCalledWith(