@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.
- package/dist/dev-server/hmr-client-script.d.ts +2 -2
- package/dist/dev-server/hmr-client-script.d.ts.map +1 -1
- package/dist/dev-server/hmr-client-script.js +4 -4
- package/dist/dev-server/hmr-client-script.js.map +1 -1
- package/dist/esbuild/esbuild-client-config.js +1 -1
- package/dist/esbuild/esbuild-client-config.js.map +1 -1
- package/dist/workers/client.worker.d.ts.map +1 -1
- package/dist/workers/client.worker.js +65 -27
- package/dist/workers/client.worker.js.map +1 -1
- package/dist/workers/server-esbuild-context.d.ts.map +1 -1
- package/dist/workers/server-esbuild-context.js +14 -1
- package/dist/workers/server-esbuild-context.js.map +1 -1
- package/package.json +4 -4
- package/src/dev-server/hmr-client-script.ts +4 -4
- package/src/esbuild/esbuild-client-config.ts +1 -1
- package/src/workers/client.worker.ts +67 -30
- package/src/workers/server-esbuild-context.ts +13 -1
- package/tests/utils/esbuild-client-config.acc.spec.ts +8 -6
- package/tests/utils/esbuild-client-config.spec.ts +6 -5
- package/tests/utils/hmr-client-script.acc.spec.ts +8 -8
- package/tests/utils/hmr-client-script.spec.ts +5 -5
- package/tests/workers/server-esbuild-context.acc.spec.ts +32 -0
- package/tests/workers/server-esbuild-context.spec.ts +81 -0
|
@@ -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,
|
|
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
|
-
|
|
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;
|
|
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;
|
|
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
|
|
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
|
-
//
|
|
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
|
-
|
|
180
|
+
changedFiles.add(file);
|
|
161
181
|
}
|
|
162
182
|
}
|
|
163
183
|
catch {
|
|
164
184
|
if (prevMtimes.has(file)) {
|
|
165
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
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
|
-
//
|
|
266
|
-
const
|
|
267
|
-
|
|
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
|
-
//
|
|
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;
|
|
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
|
-
|
|
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":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAwB,MAAM,+BAA+B,CAAC;AAqBtF,wCAAwC;AACxC,IAAI,OAAyC,CAAC;AAE9C,iCAAiC;AACjC,IAAI,YAA0C,CAAC;AAE/C,gCAAgC;AAChC,IAAI,SAAsC,CAAC;AAE3C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA8B;IAChE,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,SAAS,GAAG,eAAe,CAAC;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG;YACpB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM;YAC1B,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG;YACpB,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;SACvC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAAG,0BAA0B,CAAC;QAC7C,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,GAAG,EAAE,IAAI;KACV,CAAC,CAAC;IAEH,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;QAC9B,GAAG,WAAW;QACd,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;QACpD,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO;IAK3B,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"server-esbuild-context.js","sourceRoot":"","sources":["../../src/workers/server-esbuild-context.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,GAAG,IAAI,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAwB,MAAM,+BAA+B,CAAC;AAqBtF,wCAAwC;AACxC,IAAI,OAAyC,CAAC;AAE9C,iCAAiC;AACjC,IAAI,YAA0C,CAAC;AAE/C,gCAAgC;AAChC,IAAI,SAAsC,CAAC;AAE3C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA8B;IAChE,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,SAAS,GAAG,eAAe,CAAC;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG;YACpB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM;YAC1B,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG;YACpB,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;SACvC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAAG,0BAA0B,CAAC;QAC7C,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,GAAG,EAAE,IAAI;KACV,CAAC,CAAC;IAEH,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;QAC9B,GAAG,WAAW;QACd,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;QACpD,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO;IAK3B,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAEjC,IAAI,MAA2B,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;QACrD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACpD,QAAQ,EAAE,SAAS;SACpB,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;QAC5B,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,CAAC;IAED,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,uBAAuB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC/C,MAAM,SAAS,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,SAAS,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEpD,OAAO;QACL,OAAO,EAAE,SAAS,CAAC,MAAM,KAAK,CAAC;QAC/B,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACpD,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;KACrD,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAA8B;IAClE,MAAM,UAAU,GAAG,OAAO,CAAC;IAC3B,OAAO,GAAG,SAAS,CAAC;IACpB,YAAY,GAAG,SAAS,CAAC;IAEzB,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;QACtB,SAAS,CAAC,mBAAmB,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;YAAS,CAAC;QACT,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,MAAM,gBAAgB,GAAG,OAAO,CAAC;IACjC,OAAO,GAAG,SAAS,CAAC;IACpB,YAAY,GAAG,SAAS,CAAC;IACzB,SAAS,GAAG,SAAS,CAAC;IAEtB,IAAI,gBAAgB,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,gBAAgB,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,IAAI,IAAI,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,SAAS,EAAE,UAAU,EAAE,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,SAAS,EAAE,gBAAgB,EAAE,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;AAC3C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/sd-cli",
|
|
3
|
-
"version": "14.0.
|
|
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/
|
|
44
|
-
"@simplysm/core-
|
|
45
|
-
"@simplysm/
|
|
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
|
-
|
|
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
|
|
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
|
-
//
|
|
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
|
-
|
|
266
|
+
changedFiles.add(file);
|
|
245
267
|
}
|
|
246
268
|
} catch {
|
|
247
269
|
if (prevMtimes.has(file)) {
|
|
248
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
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
|
-
//
|
|
359
|
-
const
|
|
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
|
-
//
|
|
392
|
+
// 10. serverReady 이벤트 전송
|
|
362
393
|
sender.send("serverReady", { port: actualPort });
|
|
363
394
|
|
|
364
|
-
//
|
|
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
|
-
|
|
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:
|
|
436
|
-
it("plugins 배열이 [angularPlugin, scssPlugin,
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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();
|