@simplysm/sd-cli 14.0.39 → 14.0.40

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.
@@ -3,11 +3,11 @@
3
3
  * Chrome 61+ 호환 문법으로 작성 (optional chaining, nullish coalescing 미사용).
4
4
  * @param basePath basePath (예: "/app/")
5
5
  */
6
- export declare function getHmrClientScript(_basePath: string): string;
6
+ export declare function getHmrClientScript(_basePath: string, port: number): string;
7
7
  /**
8
8
  * index.html에 HMR 클라이언트 스크립트를 주입하는 postTransform을 생성한다.
9
9
  * Feature 1.2의 GenerateIndexHtmlOptions.postTransform에 전달하여 사용.
10
10
  * @param basePath basePath (예: "/app/")
11
11
  */
12
- export declare function createHmrPostTransform(basePath: string): (content: string) => Promise<string>;
12
+ export declare function createHmrPostTransform(basePath: string, port: number): (content: string) => Promise<string>;
13
13
  //# sourceMappingURL=hmr-client-script.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hmr-client-script.d.ts","sourceRoot":"","sources":["../../src/dev-server/hmr-client-script.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAkD5D;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAW7F"}
1
+ {"version":3,"file":"hmr-client-script.d.ts","sourceRoot":"","sources":["../../src/dev-server/hmr-client-script.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAkD1E;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAW3G"}
@@ -3,14 +3,14 @@
3
3
  * Chrome 61+ 호환 문법으로 작성 (optional chaining, nullish coalescing 미사용).
4
4
  * @param basePath basePath (예: "/app/")
5
5
  */
6
- export function getHmrClientScript(_basePath) {
6
+ export function getHmrClientScript(_basePath, port) {
7
7
  return [
8
8
  "(function() {",
9
9
  " var ws = null;",
10
10
  " var reconnectDelay = 1000;",
11
11
  "",
12
12
  " function connect() {",
13
- ' ws = new WebSocket("ws://" + location.hostname + ":" + location.port);',
13
+ ` ws = new WebSocket("ws://" + location.hostname + ":${port}");`,
14
14
  "",
15
15
  " ws.onmessage = function(e) {",
16
16
  " var msg = JSON.parse(e.data);",
@@ -59,8 +59,8 @@ export function getHmrClientScript(_basePath) {
59
59
  * Feature 1.2의 GenerateIndexHtmlOptions.postTransform에 전달하여 사용.
60
60
  * @param basePath basePath (예: "/app/")
61
61
  */
62
- export function createHmrPostTransform(basePath) {
63
- const script = getHmrClientScript(basePath);
62
+ export function createHmrPostTransform(basePath, port) {
63
+ const script = getHmrClientScript(basePath, port);
64
64
  const scriptTag = `<script>${script}</script>`;
65
65
  return (html) => {
66
66
  const bodyCloseIdx = html.lastIndexOf("</body>");
@@ -1 +1 @@
1
- {"version":3,"file":"hmr-client-script.js","sourceRoot":"","sources":["../../src/dev-server/hmr-client-script.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,OAAO;QACL,eAAe;QACf,kBAAkB;QAClB,8BAA8B;QAC9B,EAAE;QACF,wBAAwB;QACxB,4EAA4E;QAC5E,EAAE;QACF,kCAAkC;QAClC,qCAAqC;QACrC,EAAE;QACF,8CAA8C;QAC9C,gEAAgE;QAChE,8BAA8B;QAC9B,kDAAkD;QAClD,qEAAqE;QACrE,2BAA2B;QAC3B,wCAAwC;QACxC,iBAAiB;QACjB,aAAa;QACb,WAAW;QACX,EAAE;QACF,+CAA+C;QAC/C,4EAA4E;QAC5E,gCAAgC;QAChC,kDAAkD;QAClD,qDAAqD;QACrD,uBAAuB;QACvB,4CAA4C;QAC5C,uEAAuE;QACvE,4DAA4D;QAC5D,4EAA4E;QAC5E,eAAe;QACf,aAAa;QACb,WAAW;QACX,EAAE;QACF,gDAAgD;QAChD,4BAA4B;QAC5B,SAAS;QACT,QAAQ;QACR,EAAE;QACF,+BAA+B;QAC/B,4CAA4C;QAC5C,QAAQ;QACR,KAAK;QACL,EAAE;QACF,cAAc;QACd,OAAO;KACR,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,WAAW,MAAM,WAAW,CAAC;IAE/C,OAAO,CAAC,IAAY,EAAmB,EAAE;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QAC7F,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;IAC3C,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"hmr-client-script.js","sourceRoot":"","sources":["../../src/dev-server/hmr-client-script.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,IAAY;IAChE,OAAO;QACL,eAAe;QACf,kBAAkB;QAClB,8BAA8B;QAC9B,EAAE;QACF,wBAAwB;QACxB,0DAA0D,IAAI,KAAK;QACnE,EAAE;QACF,kCAAkC;QAClC,qCAAqC;QACrC,EAAE;QACF,8CAA8C;QAC9C,gEAAgE;QAChE,8BAA8B;QAC9B,kDAAkD;QAClD,qEAAqE;QACrE,2BAA2B;QAC3B,wCAAwC;QACxC,iBAAiB;QACjB,aAAa;QACb,WAAW;QACX,EAAE;QACF,+CAA+C;QAC/C,4EAA4E;QAC5E,gCAAgC;QAChC,kDAAkD;QAClD,qDAAqD;QACrD,uBAAuB;QACvB,4CAA4C;QAC5C,uEAAuE;QACvE,4DAA4D;QAC5D,4EAA4E;QAC5E,eAAe;QACf,aAAa;QACb,WAAW;QACX,EAAE;QACF,gDAAgD;QAChD,4BAA4B;QAC5B,SAAS;QACT,QAAQ;QACR,EAAE;QACF,+BAA+B;QAC/B,4CAA4C;QAC5C,QAAQ;QACR,KAAK;QACL,EAAE;QACF,cAAc;QACd,OAAO;KACR,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAgB,EAAE,IAAY;IACnE,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,WAAW,MAAM,WAAW,CAAC;IAE/C,OAAO,CAAC,IAAY,EAAmB,EAAE;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QAC7F,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;IAC3C,CAAC,CAAC;AACJ,CAAC"}
@@ -135,9 +135,9 @@ export async function createClientEsbuildContext(options) {
135
135
  },
136
136
  ]
137
137
  : []),
138
+ ...(options.plugins ?? []),
138
139
  angularPlugin,
139
140
  scssPlugin,
140
- ...(options.plugins ?? []),
141
141
  ...(loadedPostcssPlugins != null
142
142
  ? [createPostcssPlugin({ plugins: loadedPostcssPlugins })]
143
143
  : []),
@@ -1 +1 @@
1
- {"version":3,"file":"esbuild-client-config.js","sourceRoot":"","sources":["../../src/esbuild/esbuild-client-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"esbuild-client-config.js","sourceRoot":"","sources":["../../src/esbuild/esbuild-client-config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.worker.d.ts","sourceRoot":"","sources":["../../src/workers/client.worker.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAMjF,sBAAsB;AACtB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,2CAA2C;IAC3C,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC;IAC1B,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC;AAED,mBAAmB;AACnB,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,oBAAoB;AACpB,MAAM,WAAW,kBAAmB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClC,KAAK,EAAE,iBAAiB,CAAC;IACzB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5B;AAiCD;;GAEG;AACH,iBAAe,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2FtE;AAED;;GAEG;AACH,iBAAe,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA0L3E;AAED;;GAEG;AACH,iBAAe,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CA4BxC;AAcD,QAAA,MAAM,MAAM;;;eAED,OAAO,KAAK;oBACP,OAAO,UAAU;mBAClB,OAAO,SAAS;;;CAGI,CAAC;AAEpC,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"client.worker.d.ts","sourceRoot":"","sources":["../../src/workers/client.worker.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKjF,sBAAsB;AACtB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,2CAA2C;IAC3C,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC;IAC1B,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC;AAED,mBAAmB;AACnB,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,oBAAoB;AACpB,MAAM,WAAW,kBAAmB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClC,KAAK,EAAE,iBAAiB,CAAC;IACzB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5B;AAkCD;;GAEG;AACH,iBAAe,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2FtE;AAED;;GAEG;AACH,iBAAe,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAyN3E;AAED;;GAEG;AACH,iBAAe,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAkCxC;AAcD,QAAA,MAAM,MAAM;;;eAED,OAAO,KAAK;oBACP,OAAO,UAAU;mBAClB,OAAO,SAAS;;;CAGI,CAAC;AAEpC,eAAe,MAAM,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import path from "path";
2
2
  import fs from "node:fs";
3
- import { createWorker } from "@simplysm/core-node";
3
+ import { createWorker, FsWatcher } from "@simplysm/core-node";
4
4
  import { err as errNs } from "@simplysm/core-common";
5
5
  import { setupWorkerLifecycle } from "./shared-worker-lifecycle.js";
6
6
  import { createClientEsbuildContext, } from "../esbuild/esbuild-client-config.js";
@@ -16,6 +16,7 @@ let esbuildResult;
16
16
  let devServer;
17
17
  let hmrService;
18
18
  let publicWatcher;
19
+ let indexHtmlWatcher;
19
20
  const { logger, guardStartWatch } = setupWorkerLifecycle("client", async () => {
20
21
  await stopWatch();
21
22
  });
@@ -128,8 +129,26 @@ async function startWatch(info) {
128
129
  const polyfillsPath = path.join(info.pkgDir, "src", "polyfills.ts");
129
130
  const polyfills = fs.existsSync(polyfillsPath) ? ["src/polyfills.ts"] : undefined;
130
131
  const entryNames = ["main", ...(polyfills != null ? ["polyfills"] : [])];
131
- // 4. templateUpdates Map + esbuild context 생성
132
+ // 4. templateUpdates Map
132
133
  const templateUpdates = new Map();
134
+ // 5. HTTP dev server 생성 + 시작 (포트 확정 — HMR 스크립트에 포트 주입 필요)
135
+ const httpDevServer = createDevHttpServer({
136
+ distDir: outdir,
137
+ basePath,
138
+ port: info.port ?? 0,
139
+ onRequest: (req, res) => hmrService?.handleRequest(req, res) ?? false,
140
+ });
141
+ devServer = httpDevServer;
142
+ const actualPort = await httpDevServer.listen();
143
+ // 6. HMR WebSocket 서비스 생성
144
+ hmrService = createHmrService({
145
+ httpServer: httpDevServer.httpServer,
146
+ basePath,
147
+ templateUpdates,
148
+ outDir: outdir,
149
+ });
150
+ // 7. esbuild context 생성
151
+ let lastMetafile;
133
152
  let initialBuildResolve;
134
153
  let isInitialBuild = true;
135
154
  esbuildResult = await createClientEsbuildContext({
@@ -149,23 +168,27 @@ async function startWatch(info) {
149
168
  setup(pluginBuild) {
150
169
  const prevMtimes = new Map();
151
170
  pluginBuild.onStart(() => {
152
- // loadResultCache 무효화: 변경된 JS 파일의 캐시 엔트리 제거
171
+ // sourceFileCache 무효화: 변경된 파일의 loadResultCache + TypeScript 소스 캐시 모두 제거
153
172
  if (esbuildResult != null) {
154
173
  const { loadResultCache } = esbuildResult.sourceFileCache;
174
+ const changedFiles = new Set();
155
175
  for (const file of loadResultCache.watchFiles) {
156
176
  try {
157
177
  const mtime = fs.statSync(file).mtimeMs;
158
178
  const prev = prevMtimes.get(file);
159
179
  if (prev != null && prev !== mtime) {
160
- loadResultCache.invalidate(file);
180
+ changedFiles.add(file);
161
181
  }
162
182
  }
163
183
  catch {
164
184
  if (prevMtimes.has(file)) {
165
- loadResultCache.invalidate(file);
185
+ changedFiles.add(file);
166
186
  }
167
187
  }
168
188
  }
189
+ if (changedFiles.size > 0) {
190
+ esbuildResult.sourceFileCache.invalidate(changedFiles);
191
+ }
169
192
  }
170
193
  if (!isInitialBuild) {
171
194
  sender.send("buildStart", {});
@@ -189,9 +212,10 @@ async function startWatch(info) {
189
212
  ],
190
213
  onEnd: async (result) => {
191
214
  try {
192
- // index.html 재생성
215
+ // index.html 재생성 (lastMetafile 보관 — index.html 단독 변경 시 재생성용)
193
216
  if (result.metafile != null) {
194
- const hmrPostTransform = createHmrPostTransform(basePath);
217
+ lastMetafile = result.metafile;
218
+ const hmrPostTransform = createHmrPostTransform(basePath, actualPort);
195
219
  const indexPath = path.join(info.pkgDir, "src", "index.html");
196
220
  const indexResult = await generateIndexHtml({
197
221
  indexPath,
@@ -242,31 +266,40 @@ async function startWatch(info) {
242
266
  }
243
267
  },
244
268
  });
245
- // 5. HTTP dev server 생성
246
- const httpDevServer = createDevHttpServer({
247
- distDir: outdir,
248
- basePath,
249
- port: info.port ?? 0,
250
- onRequest: (req, res) => hmrService?.handleRequest(req, res) ?? false,
251
- });
252
- devServer = httpDevServer;
253
- // 6. HMR WebSocket 서비스 생성
254
- hmrService = createHmrService({
255
- httpServer: httpDevServer.httpServer,
256
- basePath,
257
- templateUpdates,
258
- outDir: outdir,
259
- });
260
- // 7. esbuild watch 시작 + 초기 빌드 대기
269
+ // 8. esbuild watch 시작 + 초기 빌드 대기
261
270
  await esbuildResult.context.watch();
262
271
  const initialResult = await new Promise((resolve) => {
263
272
  initialBuildResolve = resolve;
264
273
  });
265
- // 8. HTTP 서버 시작
266
- const actualPort = await httpDevServer.listen();
267
- // 9. serverReady 이벤트 전송
274
+ // 9. src/index.html 감시 (esbuild watch는 HTML을 감시하지 않음)
275
+ const indexHtmlSrcPath = path.join(info.pkgDir, "src", "index.html");
276
+ indexHtmlWatcher = await FsWatcher.watch([indexHtmlSrcPath]);
277
+ indexHtmlWatcher.onChange({ delay: 300 }, async () => {
278
+ if (lastMetafile == null)
279
+ return;
280
+ try {
281
+ sender.send("buildStart", {});
282
+ const hmrPostTransform = createHmrPostTransform(basePath, actualPort);
283
+ const indexResult = await generateIndexHtml({
284
+ indexPath: indexHtmlSrcPath,
285
+ metafile: lastMetafile,
286
+ outdir,
287
+ baseHref: basePath,
288
+ mode: "dev",
289
+ entryNames,
290
+ postTransform: hmrPostTransform,
291
+ });
292
+ fs.writeFileSync(path.join(outdir, "index.html"), indexResult.content);
293
+ hmrService?.broadcast({ type: "full-reload" });
294
+ sender.send("build", { success: true });
295
+ }
296
+ catch (err) {
297
+ sender.send("error", { message: errNs.message(err) });
298
+ }
299
+ });
300
+ // 10. serverReady 이벤트 전송
268
301
  sender.send("serverReady", { port: actualPort });
269
- // 10. .config.json + .dev-port 기록
302
+ // 11. .config.json + .dev-port 기록
270
303
  writeConfigJson(outdir, info.configs);
271
304
  fs.writeFileSync(path.join(outdir, ".dev-port"), String(actualPort));
272
305
  return initialResult;
@@ -302,6 +335,11 @@ async function stopWatch() {
302
335
  await publicWatcher.close();
303
336
  publicWatcher = undefined;
304
337
  }
338
+ // 5. index.html 감시 종료
339
+ if (indexHtmlWatcher != null) {
340
+ await indexHtmlWatcher.close();
341
+ indexHtmlWatcher = undefined;
342
+ }
305
343
  logger.debug("esbuild watch 정리 완료");
306
344
  }
307
345
  /** .config.json 생성 */
@@ -1 +1 @@
1
- {"version":3,"file":"client.worker.js","sourceRoot":"","sources":["../../src/workers/client.worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.worker.js","sourceRoot":"","sources":["../../src/workers/client.worker.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server-esbuild-context.d.ts","sourceRoot":"","sources":["../../src/workers/server-esbuild-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,OAAO,MAAM,SAAS,CAAC;AAM9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,4EAA4E;IAC5E,GAAG,CAAC,EAAE;QACJ,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE;YAAE,GAAG,EAAE,OAAO,CAAA;SAAE,CAAC;QACzB,GAAG,CAAC,EAAE,YAAY,CAAC;QACnB,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC;CACH;AAWD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBjF;AAED;;;GAGG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,GAAG,IAAI,CAAC,CAuBR;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBnF;AAED;;GAEG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAS7C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAAC,QAAQ,GAAG,SAAS,CAE1D;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,EAAE,CAAC,OAAO,GAAG,SAAS,CAEtD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAErE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,oBAAoB,EAAE,CAE1D"}
1
+ {"version":3,"file":"server-esbuild-context.d.ts","sourceRoot":"","sources":["../../src/workers/server-esbuild-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,OAAO,MAAM,SAAS,CAAC;AAO9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,4EAA4E;IAC5E,GAAG,CAAC,EAAE;QACJ,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE;YAAE,GAAG,EAAE,OAAO,CAAA;SAAE,CAAC;QACzB,GAAG,CAAC,EAAE,YAAY,CAAC;QACnB,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC;CACH;AAWD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBjF;AAED;;;GAGG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,GAAG,IAAI,CAAC,CAkCR;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBnF;AAED;;GAEG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAS7C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAAC,QAAQ,GAAG,SAAS,CAE1D;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,EAAE,CAAC,OAAO,GAAG,SAAS,CAEtD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAErE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,oBAAoB,EAAE,CAE1D"}
@@ -1,4 +1,5 @@
1
1
  import esbuild from "esbuild";
2
+ import { err as errNs } from "@simplysm/core-common";
2
3
  import { createServerEsbuildOptions, writeChangedOutputFiles, } from "../esbuild/esbuild-config.js";
3
4
  import { createTscPlugin } from "../esbuild/esbuild-tsc-plugin.js";
4
5
  /** esbuild watch context (모듈 스코프 상태) */
@@ -42,7 +43,19 @@ export async function createContext(options) {
42
43
  export async function rebuild() {
43
44
  if (context == null)
44
45
  return null;
45
- const result = await context.rebuild();
46
+ let result;
47
+ try {
48
+ result = await context.rebuild();
49
+ }
50
+ catch (err) {
51
+ const tscErrors = tscPlugin?.getErrors() ?? [];
52
+ const allErrors = [errNs.message(err), ...tscErrors];
53
+ return {
54
+ success: false,
55
+ errors: allErrors.length > 0 ? allErrors : undefined,
56
+ warnings: undefined,
57
+ };
58
+ }
46
59
  if (result.metafile != null) {
47
60
  lastMetafile = result.metafile;
48
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server-esbuild-context.js","sourceRoot":"","sources":["../../src/workers/server-esbuild-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server-esbuild-context.js","sourceRoot":"","sources":["../../src/workers/server-esbuild-context.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/sd-cli",
3
- "version": "14.0.39",
3
+ "version": "14.0.40",
4
4
  "description": "Simplysm package - CLI tool",
5
5
  "author": "simplysm",
6
6
  "license": "Apache-2.0",
@@ -40,9 +40,9 @@
40
40
  "typescript": "^5.9.3",
41
41
  "ws": "^8.20.0",
42
42
  "yargs": "^18.0.0",
43
- "@simplysm/core-common": "14.0.39",
44
- "@simplysm/core-node": "14.0.39",
45
- "@simplysm/storage": "14.0.39"
43
+ "@simplysm/storage": "14.0.40",
44
+ "@simplysm/core-common": "14.0.40",
45
+ "@simplysm/core-node": "14.0.40"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@types/semver": "^7.7.1",
@@ -3,14 +3,14 @@
3
3
  * Chrome 61+ 호환 문법으로 작성 (optional chaining, nullish coalescing 미사용).
4
4
  * @param basePath basePath (예: "/app/")
5
5
  */
6
- export function getHmrClientScript(_basePath: string): string {
6
+ export function getHmrClientScript(_basePath: string, port: number): string {
7
7
  return [
8
8
  "(function() {",
9
9
  " var ws = null;",
10
10
  " var reconnectDelay = 1000;",
11
11
  "",
12
12
  " function connect() {",
13
- ' ws = new WebSocket("ws://" + location.hostname + ":" + location.port);',
13
+ ` ws = new WebSocket("ws://" + location.hostname + ":${port}");`,
14
14
  "",
15
15
  " ws.onmessage = function(e) {",
16
16
  " var msg = JSON.parse(e.data);",
@@ -60,8 +60,8 @@ export function getHmrClientScript(_basePath: string): string {
60
60
  * Feature 1.2의 GenerateIndexHtmlOptions.postTransform에 전달하여 사용.
61
61
  * @param basePath basePath (예: "/app/")
62
62
  */
63
- export function createHmrPostTransform(basePath: string): (content: string) => Promise<string> {
64
- const script = getHmrClientScript(basePath);
63
+ export function createHmrPostTransform(basePath: string, port: number): (content: string) => Promise<string> {
64
+ const script = getHmrClientScript(basePath, port);
65
65
  const scriptTag = `<script>${script}</script>`;
66
66
 
67
67
  return (html: string): Promise<string> => {
@@ -190,9 +190,9 @@ export async function createClientEsbuildContext(
190
190
  },
191
191
  ]
192
192
  : []),
193
+ ...(options.plugins ?? []),
193
194
  angularPlugin,
194
195
  scssPlugin,
195
- ...(options.plugins ?? []),
196
196
  ...(loadedPostcssPlugins != null
197
197
  ? [createPostcssPlugin({ plugins: loadedPostcssPlugins })]
198
198
  : []),
@@ -1,6 +1,6 @@
1
1
  import path from "path";
2
2
  import fs from "node:fs";
3
- import { createWorker } from "@simplysm/core-node";
3
+ import { createWorker, FsWatcher } from "@simplysm/core-node";
4
4
  import { err as errNs } from "@simplysm/core-common";
5
5
  import { setupWorkerLifecycle } from "./shared-worker-lifecycle.js";
6
6
  import {
@@ -14,7 +14,6 @@ import { createHmrService, type HmrService } from "../dev-server/hmr-service.js"
14
14
  import { createHmrPostTransform } from "../dev-server/hmr-client-script.js";
15
15
  import { copyPublicFiles, watchPublicFiles } from "../utils/copy-public.js";
16
16
  import type { SdBrowserSupportConfig, SdPwaConfig } from "../sd-config.types.js";
17
- import type { FsWatcher } from "@simplysm/core-node";
18
17
  import type esbuild from "esbuild";
19
18
 
20
19
  //#region Types
@@ -63,6 +62,7 @@ let esbuildResult: ClientEsbuildResult | undefined;
63
62
  let devServer: DevHttpServer | undefined;
64
63
  let hmrService: HmrService | undefined;
65
64
  let publicWatcher: FsWatcher | undefined;
65
+ let indexHtmlWatcher: FsWatcher | undefined;
66
66
 
67
67
  const { logger, guardStartWatch } = setupWorkerLifecycle("client", async () => {
68
68
  await stopWatch();
@@ -210,8 +210,29 @@ async function startWatch(info: ClientBuildInfo): Promise<ClientBuildResult> {
210
210
  const polyfills = fs.existsSync(polyfillsPath) ? ["src/polyfills.ts"] : undefined;
211
211
  const entryNames = ["main", ...(polyfills != null ? ["polyfills"] : [])];
212
212
 
213
- // 4. templateUpdates Map + esbuild context 생성
213
+ // 4. templateUpdates Map
214
214
  const templateUpdates = new Map<string, string>();
215
+
216
+ // 5. HTTP dev server 생성 + 시작 (포트 확정 — HMR 스크립트에 포트 주입 필요)
217
+ const httpDevServer = createDevHttpServer({
218
+ distDir: outdir,
219
+ basePath,
220
+ port: info.port ?? 0,
221
+ onRequest: (req, res) => hmrService?.handleRequest(req, res) ?? false,
222
+ });
223
+ devServer = httpDevServer;
224
+ const actualPort = await httpDevServer.listen();
225
+
226
+ // 6. HMR WebSocket 서비스 생성
227
+ hmrService = createHmrService({
228
+ httpServer: httpDevServer.httpServer,
229
+ basePath,
230
+ templateUpdates,
231
+ outDir: outdir,
232
+ });
233
+
234
+ // 7. esbuild context 생성
235
+ let lastMetafile: esbuild.Metafile | undefined;
215
236
  let initialBuildResolve: ((result: ClientBuildResult) => void) | undefined;
216
237
  let isInitialBuild = true;
217
238
 
@@ -233,22 +254,26 @@ async function startWatch(info: ClientBuildInfo): Promise<ClientBuildResult> {
233
254
  const prevMtimes = new Map<string, number>();
234
255
 
235
256
  pluginBuild.onStart(() => {
236
- // loadResultCache 무효화: 변경된 JS 파일의 캐시 엔트리 제거
257
+ // sourceFileCache 무효화: 변경된 파일의 loadResultCache + TypeScript 소스 캐시 모두 제거
237
258
  if (esbuildResult != null) {
238
259
  const { loadResultCache } = esbuildResult.sourceFileCache;
260
+ const changedFiles = new Set<string>();
239
261
  for (const file of loadResultCache.watchFiles) {
240
262
  try {
241
263
  const mtime = fs.statSync(file).mtimeMs;
242
264
  const prev = prevMtimes.get(file);
243
265
  if (prev != null && prev !== mtime) {
244
- loadResultCache.invalidate(file);
266
+ changedFiles.add(file);
245
267
  }
246
268
  } catch {
247
269
  if (prevMtimes.has(file)) {
248
- loadResultCache.invalidate(file);
270
+ changedFiles.add(file);
249
271
  }
250
272
  }
251
273
  }
274
+ if (changedFiles.size > 0) {
275
+ esbuildResult.sourceFileCache.invalidate(changedFiles);
276
+ }
252
277
  }
253
278
 
254
279
  if (!isInitialBuild) {
@@ -272,9 +297,10 @@ async function startWatch(info: ClientBuildInfo): Promise<ClientBuildResult> {
272
297
  ],
273
298
  onEnd: async (result: esbuild.BuildResult) => {
274
299
  try {
275
- // index.html 재생성
300
+ // index.html 재생성 (lastMetafile 보관 — index.html 단독 변경 시 재생성용)
276
301
  if (result.metafile != null) {
277
- const hmrPostTransform = createHmrPostTransform(basePath);
302
+ lastMetafile = result.metafile;
303
+ const hmrPostTransform = createHmrPostTransform(basePath, actualPort);
278
304
  const indexPath = path.join(info.pkgDir, "src", "index.html");
279
305
  const indexResult = await generateIndexHtml({
280
306
  indexPath,
@@ -331,37 +357,42 @@ async function startWatch(info: ClientBuildInfo): Promise<ClientBuildResult> {
331
357
  },
332
358
  });
333
359
 
334
- // 5. HTTP dev server 생성
335
- const httpDevServer = createDevHttpServer({
336
- distDir: outdir,
337
- basePath,
338
- port: info.port ?? 0,
339
- onRequest: (req, res) => hmrService?.handleRequest(req, res) ?? false,
340
- });
341
- devServer = httpDevServer;
342
-
343
- // 6. HMR WebSocket 서비스 생성
344
- hmrService = createHmrService({
345
- httpServer: httpDevServer.httpServer,
346
- basePath,
347
- templateUpdates,
348
- outDir: outdir,
349
- });
350
-
351
- // 7. esbuild watch 시작 + 초기 빌드 대기
360
+ // 8. esbuild watch 시작 + 초기 빌드 대기
352
361
  await esbuildResult.context.watch();
353
362
 
354
363
  const initialResult = await new Promise<ClientBuildResult>((resolve) => {
355
364
  initialBuildResolve = resolve;
356
365
  });
357
366
 
358
- // 8. HTTP 서버 시작
359
- const actualPort = await httpDevServer.listen();
367
+ // 9. src/index.html 감시 (esbuild watch는 HTML을 감시하지 않음)
368
+ const indexHtmlSrcPath = path.join(info.pkgDir, "src", "index.html");
369
+ indexHtmlWatcher = await FsWatcher.watch([indexHtmlSrcPath]);
370
+ indexHtmlWatcher.onChange({ delay: 300 }, async () => {
371
+ if (lastMetafile == null) return;
372
+ try {
373
+ sender.send("buildStart", {});
374
+ const hmrPostTransform = createHmrPostTransform(basePath, actualPort);
375
+ const indexResult = await generateIndexHtml({
376
+ indexPath: indexHtmlSrcPath,
377
+ metafile: lastMetafile,
378
+ outdir,
379
+ baseHref: basePath,
380
+ mode: "dev",
381
+ entryNames,
382
+ postTransform: hmrPostTransform,
383
+ });
384
+ fs.writeFileSync(path.join(outdir, "index.html"), indexResult.content);
385
+ hmrService?.broadcast({ type: "full-reload" });
386
+ sender.send("build", { success: true });
387
+ } catch (err) {
388
+ sender.send("error", { message: errNs.message(err) });
389
+ }
390
+ });
360
391
 
361
- // 9. serverReady 이벤트 전송
392
+ // 10. serverReady 이벤트 전송
362
393
  sender.send("serverReady", { port: actualPort });
363
394
 
364
- // 10. .config.json + .dev-port 기록
395
+ // 11. .config.json + .dev-port 기록
365
396
  writeConfigJson(outdir, info.configs);
366
397
  fs.writeFileSync(path.join(outdir, ".dev-port"), String(actualPort));
367
398
 
@@ -403,6 +434,12 @@ async function stopWatch(): Promise<void> {
403
434
  publicWatcher = undefined;
404
435
  }
405
436
 
437
+ // 5. index.html 감시 종료
438
+ if (indexHtmlWatcher != null) {
439
+ await indexHtmlWatcher.close();
440
+ indexHtmlWatcher = undefined;
441
+ }
442
+
406
443
  logger.debug("esbuild watch 정리 완료");
407
444
  }
408
445
 
@@ -1,5 +1,6 @@
1
1
  import type ts from "typescript";
2
2
  import esbuild from "esbuild";
3
+ import { err as errNs } from "@simplysm/core-common";
3
4
  import {
4
5
  createServerEsbuildOptions,
5
6
  writeChangedOutputFiles,
@@ -76,7 +77,18 @@ export async function rebuild(): Promise<{
76
77
  } | null> {
77
78
  if (context == null) return null;
78
79
 
79
- const result = await context.rebuild();
80
+ let result: esbuild.BuildResult;
81
+ try {
82
+ result = await context.rebuild();
83
+ } catch (err) {
84
+ const tscErrors = tscPlugin?.getErrors() ?? [];
85
+ const allErrors = [errNs.message(err), ...tscErrors];
86
+ return {
87
+ success: false,
88
+ errors: allErrors.length > 0 ? allErrors : undefined,
89
+ warnings: undefined,
90
+ };
91
+ }
80
92
 
81
93
  if (result.metafile != null) {
82
94
  lastMetafile = result.metafile;
@@ -432,8 +432,8 @@ describe("createClientEsbuildContext — Acceptance", () => {
432
432
  );
433
433
  });
434
434
 
435
- // Scenario: SCSS 플러그인이 angularPlugin 다음, customPlugins 앞에 배치된다
436
- it("plugins 배열이 [angularPlugin, scssPlugin, customPlugins, onEndPlugin] 순서로 구성된다", async () => {
435
+ // Scenario: customPlugins가 angularPlugin 이전에 배치된다 (onStart에서 sourceFileCache 무효화 선행 필요)
436
+ it("plugins 배열이 [customPlugins, angularPlugin, scssPlugin, onEndPlugin] 순서로 구성된다", async () => {
437
437
  const customPlugin = { name: "custom", setup: vi.fn() };
438
438
  await createClientEsbuildContext({
439
439
  pkgDir: "/workspace/packages/my-app",
@@ -446,13 +446,15 @@ describe("createClientEsbuildContext — Acceptance", () => {
446
446
  const esbuildOptions = vi.mocked(esbuild.context).mock.calls[0][0];
447
447
  const pluginNames = esbuildOptions.plugins!.map((p: any) => p.name);
448
448
 
449
- expect(pluginNames[0]).toBe("angular-compiler");
450
- expect(pluginNames[1]).toBe("sd-scss");
451
449
  expect(pluginNames).toContain("custom");
450
+ expect(pluginNames).toContain("angular-compiler");
451
+ expect(pluginNames).toContain("sd-scss");
452
452
  expect(pluginNames[pluginNames.length - 1]).toBe("sd-on-end");
453
453
 
454
- const scssIdx = pluginNames.indexOf("sd-scss");
455
454
  const customIdx = pluginNames.indexOf("custom");
456
- expect(scssIdx).toBeLessThan(customIdx);
455
+ const angularIdx = pluginNames.indexOf("angular-compiler");
456
+ const scssIdx = pluginNames.indexOf("sd-scss");
457
+ expect(customIdx).toBeLessThan(angularIdx);
458
+ expect(angularIdx).toBeLessThan(scssIdx);
457
459
  });
458
460
  });
@@ -439,14 +439,17 @@ describe("createClientEsbuildContext — onEnd 플러그인", () => {
439
439
  expect(pluginNames[pluginNames.length - 1]).toBe("sd-on-end");
440
440
  });
441
441
 
442
- it("angularPlugin 항상 plugins 번째에 위치", async () => {
442
+ it("customPlugins가 angularPlugin 이전에 위치 (onStart에서 sourceFileCache 무효화 선행)", async () => {
443
443
  await createClientEsbuildContext({
444
444
  ...baseDev,
445
445
  plugins: [{ name: "custom", setup: vi.fn() } as any],
446
446
  onEnd: vi.fn(),
447
447
  });
448
448
  const opts = vi.mocked(esbuild.context).mock.calls[0][0];
449
- expect(opts.plugins![0]).toEqual(mockAngularPlugin);
449
+ const pluginNames = opts.plugins!.map((p: any) => p.name);
450
+ const customIdx = pluginNames.indexOf("custom");
451
+ const angularIdx = pluginNames.indexOf("angular-compiler");
452
+ expect(customIdx).toBeLessThan(angularIdx);
450
453
  });
451
454
  });
452
455
 
@@ -481,7 +484,7 @@ describe("createClientEsbuildContext — SCSS 플러그인 통합", () => {
481
484
  expect(pluginNames).toContain("sd-scss");
482
485
  });
483
486
 
484
- it("sd-scss 플러그인이 angularPlugin 다음, customPlugins 앞에 위치", async () => {
487
+ it("sd-scss 플러그인이 angularPlugin 다음에 위치", async () => {
485
488
  const customPlugin = { name: "custom", setup: vi.fn() };
486
489
  await createClientEsbuildContext({
487
490
  ...baseDev,
@@ -492,10 +495,8 @@ describe("createClientEsbuildContext — SCSS 플러그인 통합", () => {
492
495
 
493
496
  const angularIdx = pluginNames.indexOf("angular-compiler");
494
497
  const scssIdx = pluginNames.indexOf("sd-scss");
495
- const customIdx = pluginNames.indexOf("custom");
496
498
 
497
499
  expect(scssIdx).toBe(angularIdx + 1);
498
- expect(scssIdx).toBeLessThan(customIdx);
499
500
  });
500
501
  });
501
502
 
@@ -5,7 +5,7 @@ import { getHmrClientScript, createHmrPostTransform } from "../../src/dev-server
5
5
  describe("HMR 클라이언트 스크립트 통합", () => {
6
6
  describe("Scenario: HMR 클라이언트 문법 호환성", () => {
7
7
  it("Chrome 61 비호환 문법을 사용하지 않는다", () => {
8
- const script = getHmrClientScript("/app/");
8
+ const script = getHmrClientScript("/app/", 4200);
9
9
 
10
10
  // optional chaining (?.) 미사용
11
11
  expect(script).not.toMatch(/\?\./);
@@ -16,13 +16,13 @@ describe("HMR 클라이언트 스크립트 통합", () => {
16
16
  });
17
17
 
18
18
  it("WebSocket 연결 코드를 포함한다", () => {
19
- const script = getHmrClientScript("/app/");
19
+ const script = getHmrClientScript("/app/", 4200);
20
20
  expect(script).toContain("WebSocket");
21
21
  expect(script).toContain("ws://");
22
22
  });
23
23
 
24
24
  it("component-update, css-update, full-reload 메시지 핸들러를 포함한다", () => {
25
- const script = getHmrClientScript("/app/");
25
+ const script = getHmrClientScript("/app/", 4200);
26
26
  expect(script).toContain("component-update");
27
27
  expect(script).toContain("css-update");
28
28
  expect(script).toContain("full-reload");
@@ -31,7 +31,7 @@ describe("HMR 클라이언트 스크립트 통합", () => {
31
31
  });
32
32
 
33
33
  it("자동 재연결 로직을 포함한다", () => {
34
- const script = getHmrClientScript("/app/");
34
+ const script = getHmrClientScript("/app/", 4200);
35
35
  expect(script).toContain("setTimeout");
36
36
  expect(script).toContain("connect");
37
37
  });
@@ -77,7 +77,7 @@ describe("HMR 클라이언트 스크립트 통합", () => {
77
77
  }
78
78
 
79
79
  it("css-update 시 msg.files와 매칭되는 link만 cache-busting 적용", () => {
80
- const script = getHmrClientScript("/app/");
80
+ const script = getHmrClientScript("/app/", 4200);
81
81
  const { sandbox, triggerMessage, mainLink, vendorLink } = createScriptEnv();
82
82
 
83
83
  runInNewContext(script, sandbox);
@@ -89,7 +89,7 @@ describe("HMR 클라이언트 스크립트 통합", () => {
89
89
  });
90
90
 
91
91
  it("css-update 시 files에 여러 파일이 있으면 매칭되는 모든 link를 업데이트", () => {
92
- const script = getHmrClientScript("/app/");
92
+ const script = getHmrClientScript("/app/", 4200);
93
93
  const { sandbox, triggerMessage, mainLink, vendorLink } = createScriptEnv();
94
94
 
95
95
  runInNewContext(script, sandbox);
@@ -107,7 +107,7 @@ describe("HMR 클라이언트 스크립트 통합", () => {
107
107
 
108
108
  describe("Scenario: 스크립트 주입", () => {
109
109
  it("postTransform이 </body> 직전에 script 태그를 삽입한다", async () => {
110
- const transform = createHmrPostTransform("/app/");
110
+ const transform = createHmrPostTransform("/app/", 4200);
111
111
  const html = "<html><body><div>content</div></body></html>";
112
112
  const result = await transform(html);
113
113
 
@@ -117,7 +117,7 @@ describe("HMR 클라이언트 스크립트 통합", () => {
117
117
  });
118
118
 
119
119
  it("</body>가 없는 HTML에서도 스크립트를 추가한다", async () => {
120
- const transform = createHmrPostTransform("/app/");
120
+ const transform = createHmrPostTransform("/app/", 4200);
121
121
  const html = "<html><body><div>content</div>";
122
122
  const result = await transform(html);
123
123
 
@@ -3,19 +3,19 @@ import { getHmrClientScript, createHmrPostTransform } from "../../src/dev-server
3
3
 
4
4
  describe("getHmrClientScript", () => {
5
5
  it("유효한 JavaScript를 생성한다", () => {
6
- const script = getHmrClientScript("/app/");
6
+ const script = getHmrClientScript("/app/", 4200);
7
7
  // new Function으로 구문 오류 확인
8
8
  expect(() => new Function(script)).not.toThrow();
9
9
  });
10
10
 
11
11
  it("IIFE로 감싸져 있다", () => {
12
- const script = getHmrClientScript("/app/");
12
+ const script = getHmrClientScript("/app/", 4200);
13
13
  expect(script.trimStart()).toMatch(/^\(function\(\)/);
14
14
  expect(script.trimEnd()).toMatch(/\}\)\(\);$/);
15
15
  });
16
16
 
17
17
  it("const/let 대신 var를 사용한다", () => {
18
- const script = getHmrClientScript("/app/");
18
+ const script = getHmrClientScript("/app/", 4200);
19
19
  // var 사용 확인
20
20
  expect(script).toContain("var ws");
21
21
  // const/let 미사용 확인
@@ -26,7 +26,7 @@ describe("getHmrClientScript", () => {
26
26
 
27
27
  describe("createHmrPostTransform", () => {
28
28
  it("여러 </body> 태그가 있으면 마지막 것 앞에 주입한다", async () => {
29
- const transform = createHmrPostTransform("/app/");
29
+ const transform = createHmrPostTransform("/app/", 4200);
30
30
  const html = "<body>first</body><body>second</body>";
31
31
  const result = await transform(html);
32
32
 
@@ -37,7 +37,7 @@ describe("createHmrPostTransform", () => {
37
37
  });
38
38
 
39
39
  it("빈 HTML에도 스크립트를 추가한다", async () => {
40
- const transform = createHmrPostTransform("/");
40
+ const transform = createHmrPostTransform("/", 4200);
41
41
  const result = await transform("");
42
42
  expect(result).toContain("<script>");
43
43
  });
@@ -236,6 +236,38 @@ describe("server-esbuild-context tsc integration lifecycle", () => {
236
236
  });
237
237
  });
238
238
 
239
+ // Acceptance: rebuild() reject 시 tsc 에러와 병합하여 정상 결과 반환
240
+ it("merges tsc errors when context.rebuild() rejects instead of propagating throw", async () => {
241
+ mockRebuild.mockResolvedValueOnce({
242
+ errors: [],
243
+ warnings: [],
244
+ outputFiles: [],
245
+ metafile: { inputs: { "src/main.ts": {} }, outputs: {} },
246
+ });
247
+ mockTscPlugin.getErrors.mockReturnValue(["TS2322: type mismatch"]);
248
+
249
+ await createContext({ ...baseOptions, tsc: baseTscOptions });
250
+
251
+ // 첫 빌드 성공 (metafile 설정)
252
+ await rebuild();
253
+ const savedMetafile = getMetafile();
254
+ expect(savedMetafile).toBeDefined();
255
+
256
+ // 두 번째 빌드 실패 — reject
257
+ mockRebuild.mockRejectedValueOnce(new Error("Build failed with 1 error"));
258
+
259
+ const result = await rebuild();
260
+
261
+ // throw 전파 대신 정상 결과 반환 — esbuild + tsc 에러 병합
262
+ expect(result).toEqual({
263
+ success: false,
264
+ errors: ["Build failed with 1 error", "TS2322: type mismatch"],
265
+ warnings: undefined,
266
+ });
267
+ // 이전 metafile 유지
268
+ expect(getMetafile()).toBe(savedMetafile);
269
+ });
270
+
239
271
  // Acceptance: LOGIC-001 — recreateContext failure preserves tsc plugin reset
240
272
  it("resets tsc and disposes old context even when recreateContext fails (LOGIC-001)", async () => {
241
273
  await createContext({ ...baseOptions, tsc: baseTscOptions });
@@ -152,6 +152,87 @@ describe("rebuild", () => {
152
152
  });
153
153
  });
154
154
 
155
+ describe("rebuild — error handling on reject", () => {
156
+ afterEach(async () => {
157
+ mockRebuild.mockReset();
158
+ mockDispose.mockReset();
159
+ mockTscPlugin.getProgram.mockReset();
160
+ mockTscPlugin.getAffectedFiles.mockReset();
161
+ mockTscPlugin.getDiagnostics.mockReset().mockReturnValue([]);
162
+ mockTscPlugin.getErrors.mockReset();
163
+ mockTscPlugin.resetBuilderProgram.mockReset();
164
+ vi.mocked(esbuild.context).mockClear();
165
+ vi.mocked(writeChangedOutputFiles).mockClear();
166
+ vi.mocked(createTscPlugin).mockClear();
167
+ await dispose();
168
+ });
169
+
170
+ it("catches reject and returns merged esbuild + tsc errors", async () => {
171
+ mockRebuild.mockRejectedValue(new Error("Build failed"));
172
+ mockTscPlugin.getErrors.mockReturnValue(["type error"]);
173
+
174
+ await createContext({ ...baseOptions, tsc: { cwd: "/workspace", output: { dts: true } } });
175
+ const result = await rebuild();
176
+
177
+ expect(result).toEqual({
178
+ success: false,
179
+ errors: ["Build failed", "type error"],
180
+ warnings: undefined,
181
+ });
182
+ });
183
+
184
+ it("returns esbuild error only when tsc has no errors", async () => {
185
+ mockRebuild.mockRejectedValue(new Error("Build failed"));
186
+ mockTscPlugin.getErrors.mockReturnValue(undefined);
187
+
188
+ await createContext({ ...baseOptions, tsc: { cwd: "/workspace", output: { dts: true } } });
189
+ const result = await rebuild();
190
+
191
+ expect(result).toEqual({
192
+ success: false,
193
+ errors: ["Build failed"],
194
+ warnings: undefined,
195
+ });
196
+ });
197
+
198
+ it("returns esbuild error when no tsc plugin exists", async () => {
199
+ mockRebuild.mockRejectedValue(new Error("Build failed"));
200
+
201
+ await createContext(baseOptions);
202
+ const result = await rebuild();
203
+
204
+ expect(result).toEqual({
205
+ success: false,
206
+ errors: ["Build failed"],
207
+ warnings: undefined,
208
+ });
209
+ });
210
+
211
+ it("preserves previous metafile when rebuild rejects", async () => {
212
+ const mockMetafile = { inputs: { "src/main.ts": {} }, outputs: {} };
213
+ mockRebuild.mockResolvedValueOnce({
214
+ errors: [],
215
+ warnings: [],
216
+ outputFiles: [],
217
+ metafile: mockMetafile,
218
+ });
219
+
220
+ await createContext(baseOptions);
221
+ await rebuild();
222
+ expect(getMetafile()).toBe(mockMetafile);
223
+
224
+ mockRebuild.mockRejectedValueOnce(new Error("Build failed"));
225
+ const result = await rebuild();
226
+
227
+ expect(result).toEqual({
228
+ success: false,
229
+ errors: ["Build failed"],
230
+ warnings: undefined,
231
+ });
232
+ expect(getMetafile()).toBe(mockMetafile);
233
+ });
234
+ });
235
+
155
236
  describe("recreateContext", () => {
156
237
  afterEach(async () => {
157
238
  mockRebuild.mockReset();