@simplysm/sd-cli 13.0.64 → 13.0.66
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/orchestrators/DevOrchestrator.d.ts +0 -1
- package/dist/orchestrators/DevOrchestrator.d.ts.map +1 -1
- package/dist/orchestrators/DevOrchestrator.js +4 -12
- package/dist/orchestrators/DevOrchestrator.js.map +1 -1
- package/dist/utils/esbuild-config.d.ts +1 -1
- package/dist/utils/esbuild-config.d.ts.map +1 -1
- package/dist/utils/esbuild-config.js +3 -0
- package/dist/utils/esbuild-config.js.map +1 -1
- package/dist/utils/package-utils.d.ts +5 -9
- package/dist/utils/package-utils.d.ts.map +1 -1
- package/dist/utils/package-utils.js +43 -13
- package/dist/utils/package-utils.js.map +1 -1
- package/dist/utils/tailwind-config-deps.d.ts +1 -1
- package/dist/utils/tailwind-config-deps.d.ts.map +1 -1
- package/dist/utils/tailwind-config-deps.js +5 -3
- package/dist/utils/tailwind-config-deps.js.map +1 -1
- package/dist/utils/vite-config.d.ts +3 -3
- package/dist/utils/vite-config.d.ts.map +1 -1
- package/dist/utils/vite-config.js +43 -52
- package/dist/utils/vite-config.js.map +1 -1
- package/dist/workers/client.worker.d.ts +2 -2
- package/dist/workers/client.worker.d.ts.map +1 -1
- package/dist/workers/client.worker.js +3 -1
- package/dist/workers/client.worker.js.map +1 -1
- package/dist/workers/server.worker.d.ts +2 -2
- package/dist/workers/server.worker.d.ts.map +1 -1
- package/dist/workers/server.worker.js +57 -30
- package/dist/workers/server.worker.js.map +1 -1
- package/package.json +4 -4
- package/src/orchestrators/DevOrchestrator.ts +4 -16
- package/src/utils/esbuild-config.ts +4 -2
- package/src/utils/package-utils.ts +62 -22
- package/src/utils/tailwind-config-deps.ts +6 -3
- package/src/utils/vite-config.ts +64 -92
- package/src/workers/client.worker.ts +7 -3
- package/src/workers/server.worker.ts +78 -38
- package/templates/add-client/__CLIENT__/package.json.hbs +1 -1
- package/templates/add-server/__SERVER__/package.json.hbs +2 -2
- package/templates/init/package.json.hbs +3 -3
|
@@ -5,6 +5,7 @@ import { createWorker } from "@simplysm/core-node";
|
|
|
5
5
|
import { consola } from "consola";
|
|
6
6
|
import { parseRootTsconfig, getCompilerOptionsForPackage } from "../utils/tsconfig.js";
|
|
7
7
|
import { createViteConfig } from "../utils/vite-config.js";
|
|
8
|
+
import { collectDeps } from "../utils/package-utils.js";
|
|
8
9
|
import { registerCleanupHandlers } from "../utils/worker-utils.js";
|
|
9
10
|
const logger = consola.withTag("sd:cli:client:worker");
|
|
10
11
|
let viteServer;
|
|
@@ -59,6 +60,7 @@ async function startWatch(info) {
|
|
|
59
60
|
info.pkgDir
|
|
60
61
|
);
|
|
61
62
|
const serverPort = typeof info.config.server === "number" ? info.config.server : 0;
|
|
63
|
+
const { replaceDeps } = collectDeps(info.pkgDir, info.cwd, info.replaceDeps);
|
|
62
64
|
const viteConfig = createViteConfig({
|
|
63
65
|
pkgDir: info.pkgDir,
|
|
64
66
|
name: info.name,
|
|
@@ -67,7 +69,7 @@ async function startWatch(info) {
|
|
|
67
69
|
env: info.config.env,
|
|
68
70
|
mode: "dev",
|
|
69
71
|
serverPort,
|
|
70
|
-
|
|
72
|
+
replaceDeps,
|
|
71
73
|
onScopeRebuild: () => sender.send("scopeRebuild", {})
|
|
72
74
|
});
|
|
73
75
|
viteServer = await createServer(viteConfig);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/workers/client.worker.ts"],
|
|
4
|
-
"mappings": "AAAA,OAAO,UAAU;AACjB,OAAO,QAAQ;AACf,SAAS,SAAS,WAAW,oBAAwC;AACrE,SAAS,oBAAoB;AAC7B,SAAS,eAAe;AAExB,SAAS,mBAAmB,oCAAoC;AAChE,SAAS,wBAAwB;AACjC,SAAS,+BAA+B;AAuExC,MAAM,SAAS,QAAQ,QAAQ,sBAAsB;AAGrD,IAAI;AAKJ,eAAe,UAAyB;AAGtC,QAAM,gBAAgB;AACtB,eAAa;AAEb,MAAI,iBAAiB,MAAM;AACzB,UAAM,cAAc,MAAM;AAAA,EAC5B;AACF;AAKA,wBAAwB,SAAS,MAAM;AASvC,eAAe,MAAM,MAAmD;AACtE,MAAI;AAEF,UAAM,eAAe,kBAAkB,KAAK,GAAG;AAC/C,UAAM,eAAe,KAAK,KAAK,KAAK,KAAK,eAAe;AAGxD,UAAM,kBAAkB,MAAM;AAAA,MAC5B,aAAa;AAAA,MACb;AAAA,MACA,KAAK;AAAA,IACP;AAGA,UAAM,aAAa,iBAAiB;AAAA,MAClC,QAAQ,KAAK;AAAA,MACb,MAAM,KAAK;AAAA,MACX;AAAA,MACA;AAAA,MACA,KAAK,KAAK,OAAO;AAAA,MACjB,MAAM;AAAA,IACR,CAAC;AAED,UAAM,UAAU,UAAU;AAG1B,UAAM,eAAe,KAAK,KAAK,KAAK,QAAQ,QAAQ,cAAc;AAClE,OAAG,cAAc,cAAc,KAAK,UAAU,KAAK,OAAO,WAAW,CAAC,GAAG,QAAW,CAAC,CAAC;AAEtF,WAAO,EAAE,SAAS,KAAK;AAAA,EACzB,SAAS,KAAK;AACZ,WAAO;AAAA,MACL,SAAS;AAAA,MACT,QAAQ,CAAC,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,IAC3D;AAAA,EACF;AACF;AAGA,IAAI,iBAAiB;AAOrB,eAAe,WAAW,MAAsC;AAC9D,MAAI,gBAAgB;AAClB,UAAM,IAAI,MAAM,uGAAsC;AAAA,EACxD;AACA,mBAAiB;AAEjB,MAAI;AAEF,UAAM,eAAe,kBAAkB,KAAK,GAAG;AAC/C,UAAM,eAAe,KAAK,KAAK,KAAK,KAAK,eAAe;AAGxD,UAAM,kBAAkB,MAAM;AAAA,MAC5B,aAAa;AAAA,MACb;AAAA,MACA,KAAK;AAAA,IACP;AAIA,UAAM,aAAa,OAAO,KAAK,OAAO,WAAW,WAAW,KAAK,OAAO,SAAS;AAGjF,UAAM,aAAa,iBAAiB;AAAA,MAClC,QAAQ,KAAK;AAAA,MACb,MAAM,KAAK;AAAA,MACX;AAAA,MACA;AAAA,MACA,KAAK,KAAK,OAAO;AAAA,MACjB,MAAM;AAAA,MACN;AAAA,MACA
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -41,8 +41,8 @@ export interface ServerWatchInfo {
|
|
|
41
41
|
configs?: Record<string, unknown>;
|
|
42
42
|
/** sd.config.ts에서 수동 지정한 external 모듈 */
|
|
43
43
|
externals?: string[];
|
|
44
|
-
/**
|
|
45
|
-
|
|
44
|
+
/** sd.config.ts의 replaceDeps 설정 */
|
|
45
|
+
replaceDeps?: Record<string, string>;
|
|
46
46
|
}
|
|
47
47
|
/**
|
|
48
48
|
* 빌드 이벤트
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.worker.d.ts","sourceRoot":"","sources":["..\\..\\src\\workers\\server.worker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.worker.d.ts","sourceRoot":"","sources":["..\\..\\src\\workers\\server.worker.ts"],"names":[],"mappings":"AAuBA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,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,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,2CAA2C;IAC3C,GAAG,CAAC,EAAE;QACJ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC;IACF,8EAA8E;IAC9E,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,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,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClC,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,gBAAgB,CAAC;CACzB;AA6MD;;GAEG;AACH,iBAAe,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsDtE;AA6FD;;;;GAIG;AACH,iBAAe,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAkG9D;AAED;;;GAGG;AACH,iBAAe,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAExC;AAED,QAAA,MAAM,MAAM;;;eACD,OAAO,KAAK;oBAAc,OAAO,UAAU;mBAAa,OAAO,SAAS;;;CAMjF,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
|
@@ -2,7 +2,7 @@ import path from "path";
|
|
|
2
2
|
import fs from "fs";
|
|
3
3
|
import cp from "child_process";
|
|
4
4
|
import esbuild from "esbuild";
|
|
5
|
-
import { createWorker, FsWatcher } from "@simplysm/core-node";
|
|
5
|
+
import { createWorker, FsWatcher, pathNorm } from "@simplysm/core-node";
|
|
6
6
|
import { consola } from "consola";
|
|
7
7
|
import {
|
|
8
8
|
parseRootTsconfig,
|
|
@@ -12,17 +12,21 @@ import {
|
|
|
12
12
|
import {
|
|
13
13
|
createServerEsbuildOptions,
|
|
14
14
|
collectUninstalledOptionalPeerDeps,
|
|
15
|
-
collectNativeModuleExternals
|
|
15
|
+
collectNativeModuleExternals,
|
|
16
|
+
writeChangedOutputFiles
|
|
16
17
|
} from "../utils/esbuild-config.js";
|
|
17
18
|
import { registerCleanupHandlers } from "../utils/worker-utils.js";
|
|
19
|
+
import { collectDeps } from "../utils/package-utils.js";
|
|
18
20
|
import { copyPublicFiles, watchPublicFiles } from "../utils/copy-public.js";
|
|
19
21
|
const logger = consola.withTag("sd:cli:server:worker");
|
|
20
22
|
let esbuildContext;
|
|
23
|
+
let lastMetafile;
|
|
21
24
|
let publicWatcher;
|
|
22
25
|
let srcWatcher;
|
|
23
26
|
async function cleanup() {
|
|
24
27
|
const contextToDispose = esbuildContext;
|
|
25
28
|
esbuildContext = void 0;
|
|
29
|
+
lastMetafile = void 0;
|
|
26
30
|
const watcherToClose = publicWatcher;
|
|
27
31
|
publicWatcher = void 0;
|
|
28
32
|
const srcWatcherToClose = srcWatcher;
|
|
@@ -212,6 +216,8 @@ async function createAndBuildContext(info, isFirstBuild, resolveFirstBuild) {
|
|
|
212
216
|
let isBuildFirstTime = isFirstBuild;
|
|
213
217
|
const context = await esbuild.context({
|
|
214
218
|
...baseOptions,
|
|
219
|
+
metafile: true,
|
|
220
|
+
write: false,
|
|
215
221
|
plugins: [
|
|
216
222
|
{
|
|
217
223
|
name: "watch-notify",
|
|
@@ -219,20 +225,31 @@ async function createAndBuildContext(info, isFirstBuild, resolveFirstBuild) {
|
|
|
219
225
|
pluginBuild.onStart(() => {
|
|
220
226
|
sender.send("buildStart", {});
|
|
221
227
|
});
|
|
222
|
-
pluginBuild.onEnd((result) => {
|
|
228
|
+
pluginBuild.onEnd(async (result) => {
|
|
229
|
+
if (result.metafile != null) {
|
|
230
|
+
lastMetafile = result.metafile;
|
|
231
|
+
}
|
|
223
232
|
const errors = result.errors.map((e) => e.text);
|
|
224
233
|
const warnings = result.warnings.map((w) => w.text);
|
|
225
234
|
const success = result.errors.length === 0;
|
|
235
|
+
let hasOutputChange = false;
|
|
236
|
+
if (success && result.outputFiles != null) {
|
|
237
|
+
hasOutputChange = await writeChangedOutputFiles(result.outputFiles);
|
|
238
|
+
}
|
|
226
239
|
if (isBuildFirstTime && success) {
|
|
227
240
|
const confDistPath = path.join(info.pkgDir, "dist", ".config.json");
|
|
228
241
|
fs.writeFileSync(confDistPath, JSON.stringify(info.configs ?? {}, void 0, 2));
|
|
229
242
|
}
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
243
|
+
if (isBuildFirstTime || hasOutputChange || !success) {
|
|
244
|
+
sender.send("build", {
|
|
245
|
+
success,
|
|
246
|
+
mainJsPath,
|
|
247
|
+
errors: errors.length > 0 ? errors : void 0,
|
|
248
|
+
warnings: warnings.length > 0 ? warnings : void 0
|
|
249
|
+
});
|
|
250
|
+
} else {
|
|
251
|
+
logger.debug("output \uBCC0\uACBD \uC5C6\uC74C, \uC11C\uBC84 \uC7AC\uC2DC\uC791 skip");
|
|
252
|
+
}
|
|
236
253
|
if (isBuildFirstTime) {
|
|
237
254
|
isBuildFirstTime = false;
|
|
238
255
|
resolveFirstBuild?.();
|
|
@@ -258,38 +275,48 @@ async function startWatch(info) {
|
|
|
258
275
|
esbuildContext = await createAndBuildContext(info, true, resolveFirstBuild);
|
|
259
276
|
await firstBuildPromise;
|
|
260
277
|
publicWatcher = await watchPublicFiles(info.pkgDir, true);
|
|
278
|
+
const { workspaceDeps, replaceDeps } = collectDeps(info.pkgDir, info.cwd, info.replaceDeps);
|
|
261
279
|
const watchPaths = [];
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
280
|
+
const watchDirs = [
|
|
281
|
+
info.pkgDir,
|
|
282
|
+
...workspaceDeps.map((d) => path.join(info.cwd, "packages", d))
|
|
283
|
+
];
|
|
284
|
+
for (const dir of watchDirs) {
|
|
285
|
+
watchPaths.push(path.join(dir, "src", "**", "*"));
|
|
286
|
+
watchPaths.push(path.join(dir, "*.{ts,js,css}"));
|
|
287
|
+
}
|
|
288
|
+
for (const pkg of replaceDeps) {
|
|
289
|
+
watchPaths.push(path.join(info.cwd, "node_modules", ...pkg.split("/"), "dist", "**", "*.js"));
|
|
290
|
+
watchPaths.push(
|
|
291
|
+
path.join(info.pkgDir, "node_modules", ...pkg.split("/"), "dist", "**", "*.js")
|
|
292
|
+
);
|
|
274
293
|
}
|
|
275
294
|
srcWatcher = await FsWatcher.watch(watchPaths);
|
|
276
295
|
srcWatcher.onChange({ delay: 300 }, async (changes) => {
|
|
277
296
|
try {
|
|
278
|
-
const
|
|
279
|
-
|
|
280
|
-
(
|
|
281
|
-
);
|
|
282
|
-
if (hasEntryPointChange) {
|
|
283
|
-
logger.debug("\uC11C\uBC84 \uC18C\uC2A4 \uD30C\uC77C \uCD94\uAC00/\uC0AD\uC81C \uAC10\uC9C0, context \uC7AC\uC0DD\uC131");
|
|
297
|
+
const hasFileAddOrRemove = changes.some((c) => c.event === "add" || c.event === "unlink");
|
|
298
|
+
if (hasFileAddOrRemove) {
|
|
299
|
+
logger.debug("\uD30C\uC77C \uCD94\uAC00/\uC0AD\uC81C \uAC10\uC9C0, context \uC7AC\uC0DD\uC131");
|
|
284
300
|
const oldContext = esbuildContext;
|
|
285
301
|
esbuildContext = await createAndBuildContext(info, false);
|
|
286
302
|
if (oldContext != null) {
|
|
287
303
|
await oldContext.dispose();
|
|
288
304
|
}
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
if (esbuildContext == null) return;
|
|
308
|
+
if (lastMetafile == null) {
|
|
309
|
+
await esbuildContext.rebuild();
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
const metafileAbsPaths = new Set(
|
|
313
|
+
Object.keys(lastMetafile.inputs).map((key) => pathNorm(info.cwd, key))
|
|
314
|
+
);
|
|
315
|
+
const hasRelevantChange = changes.some((c) => metafileAbsPaths.has(c.path));
|
|
316
|
+
if (hasRelevantChange) {
|
|
317
|
+
await esbuildContext.rebuild();
|
|
289
318
|
} else {
|
|
290
|
-
|
|
291
|
-
await esbuildContext.rebuild();
|
|
292
|
-
}
|
|
319
|
+
logger.debug("\uBCC0\uACBD\uB41C \uD30C\uC77C\uC774 \uBE4C\uB4DC\uC5D0 \uD3EC\uD568\uB418\uC9C0 \uC54A\uC74C, rebuild skip");
|
|
293
320
|
}
|
|
294
321
|
} catch (err) {
|
|
295
322
|
sender.send("error", {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/workers/server.worker.ts"],
|
|
4
|
-
"mappings": "AAAA,OAAO,UAAU;AACjB,OAAO,QAAQ;AACf,OAAO,QAAQ;AACf,OAAO,aAAa;AACpB,SAAS,cAAc,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/sd-cli",
|
|
3
|
-
"version": "13.0.
|
|
3
|
+
"version": "13.0.66",
|
|
4
4
|
"description": "심플리즘 패키지 - CLI 도구",
|
|
5
5
|
"author": "김석래",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -41,9 +41,9 @@
|
|
|
41
41
|
"vite-plugin-solid": "^2.11.10",
|
|
42
42
|
"vite-tsconfig-paths": "^6.1.1",
|
|
43
43
|
"yargs": "^18.0.0",
|
|
44
|
-
"@simplysm/core-
|
|
45
|
-
"@simplysm/
|
|
46
|
-
"@simplysm/
|
|
44
|
+
"@simplysm/core-common": "13.0.66",
|
|
45
|
+
"@simplysm/storage": "13.0.66",
|
|
46
|
+
"@simplysm/core-node": "13.0.66"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@types/semver": "^7.7.1",
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import fs from "fs";
|
|
2
1
|
import path from "path";
|
|
3
2
|
import { Worker, type WorkerProxy } from "@simplysm/core-node";
|
|
4
3
|
import type { SdConfig, SdClientPackageConfig, SdServerPackageConfig } from "../sd-config.types";
|
|
@@ -10,11 +9,7 @@ import type * as ClientWorkerModule from "../workers/client.worker";
|
|
|
10
9
|
import type * as ServerWorkerModule from "../workers/server.worker";
|
|
11
10
|
import type * as ServerRuntimeWorkerModule from "../workers/server-runtime.worker";
|
|
12
11
|
import { Capacitor } from "../capacitor/capacitor";
|
|
13
|
-
import {
|
|
14
|
-
filterPackagesByTargets,
|
|
15
|
-
getWatchScopes,
|
|
16
|
-
type PackageResult,
|
|
17
|
-
} from "../utils/package-utils";
|
|
12
|
+
import { filterPackagesByTargets, type PackageResult } from "../utils/package-utils";
|
|
18
13
|
import { printErrors, printServers } from "../utils/output-utils";
|
|
19
14
|
import { RebuildManager } from "../utils/rebuild-manager";
|
|
20
15
|
import {
|
|
@@ -70,8 +65,6 @@ export class DevOrchestrator {
|
|
|
70
65
|
// Config
|
|
71
66
|
private _sdConfig: SdConfig | undefined;
|
|
72
67
|
private _baseEnv: { VER: string; DEV: string } | undefined;
|
|
73
|
-
private _watchScopes: string[] = [];
|
|
74
|
-
|
|
75
68
|
// Package classification
|
|
76
69
|
private readonly _serverPackages: Array<{ name: string; config: SdServerPackageConfig }> = [];
|
|
77
70
|
private readonly _clientPackages: Array<{ name: string; config: SdClientPackageConfig }> = [];
|
|
@@ -153,11 +146,6 @@ export class DevOrchestrator {
|
|
|
153
146
|
const version = await getVersion(this._cwd);
|
|
154
147
|
this._baseEnv = { VER: version, DEV: "true" };
|
|
155
148
|
|
|
156
|
-
// watchScopes 생성 (루트 package.json에서 scope 추출)
|
|
157
|
-
const rootPkgJsonPath = path.join(this._cwd, "package.json");
|
|
158
|
-
const rootPkgName = JSON.parse(fs.readFileSync(rootPkgJsonPath, "utf-8")).name as string;
|
|
159
|
-
this._watchScopes = getWatchScopes(rootPkgName, this._sdConfig.replaceDeps);
|
|
160
|
-
|
|
161
149
|
// targets 필터링
|
|
162
150
|
const allPackages = filterPackagesByTargets(this._sdConfig.packages, targets);
|
|
163
151
|
|
|
@@ -586,7 +574,7 @@ export class DevOrchestrator {
|
|
|
586
574
|
config: clientConfig,
|
|
587
575
|
cwd: this._cwd,
|
|
588
576
|
pkgDir,
|
|
589
|
-
|
|
577
|
+
replaceDeps: this._sdConfig!.replaceDeps,
|
|
590
578
|
})
|
|
591
579
|
.catch((err: unknown) => {
|
|
592
580
|
completeTask({
|
|
@@ -615,7 +603,7 @@ export class DevOrchestrator {
|
|
|
615
603
|
config: viteConfig,
|
|
616
604
|
cwd: this._cwd,
|
|
617
605
|
pkgDir,
|
|
618
|
-
|
|
606
|
+
replaceDeps: this._sdConfig!.replaceDeps,
|
|
619
607
|
})
|
|
620
608
|
.catch((err: unknown) => {
|
|
621
609
|
completeTask({
|
|
@@ -637,7 +625,7 @@ export class DevOrchestrator {
|
|
|
637
625
|
name,
|
|
638
626
|
cwd: this._cwd,
|
|
639
627
|
pkgDir,
|
|
640
|
-
|
|
628
|
+
replaceDeps: this._sdConfig!.replaceDeps,
|
|
641
629
|
env: { ...this._baseEnv, ...config.env },
|
|
642
630
|
configs: config.configs,
|
|
643
631
|
externals: config.externals,
|
|
@@ -13,7 +13,8 @@ import type { TypecheckEnv } from "./tsconfig";
|
|
|
13
13
|
* - 그 외 파일(.js.map 등): 원본 그대로 비교
|
|
14
14
|
* - 기존 파일과 내용이 동일하면 쓰기를 건너뛰어 타임스탬프를 유지한다.
|
|
15
15
|
*/
|
|
16
|
-
export async function writeChangedOutputFiles(outputFiles: esbuild.OutputFile[]): Promise<
|
|
16
|
+
export async function writeChangedOutputFiles(outputFiles: esbuild.OutputFile[]): Promise<boolean> {
|
|
17
|
+
let hasChanges = false;
|
|
17
18
|
await Promise.all(
|
|
18
19
|
outputFiles.map(async (file) => {
|
|
19
20
|
const finalText = file.path.endsWith(".js")
|
|
@@ -26,7 +27,6 @@ export async function writeChangedOutputFiles(outputFiles: esbuild.OutputFile[])
|
|
|
26
27
|
)
|
|
27
28
|
: file.text;
|
|
28
29
|
|
|
29
|
-
// Compare with existing file — skip write if unchanged
|
|
30
30
|
try {
|
|
31
31
|
const existing = await fs.readFile(file.path, "utf-8");
|
|
32
32
|
if (existing === finalText) return;
|
|
@@ -34,10 +34,12 @@ export async function writeChangedOutputFiles(outputFiles: esbuild.OutputFile[])
|
|
|
34
34
|
// File doesn't exist yet
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
hasChanges = true;
|
|
37
38
|
await fs.mkdir(path.dirname(file.path), { recursive: true });
|
|
38
39
|
await fs.writeFile(file.path, finalText);
|
|
39
40
|
}),
|
|
40
41
|
);
|
|
42
|
+
return hasChanges;
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
/**
|
|
@@ -15,32 +15,72 @@ export function findPackageRoot(startDir: string): string {
|
|
|
15
15
|
return dir;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
): string
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
18
|
+
export interface DepsResult {
|
|
19
|
+
workspaceDeps: string[];
|
|
20
|
+
replaceDeps: string[];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function collectDeps(
|
|
24
|
+
pkgDir: string,
|
|
25
|
+
cwd: string,
|
|
26
|
+
replaceDepsConfig?: Record<string, string>,
|
|
27
|
+
): DepsResult {
|
|
28
|
+
const rootPkgJsonPath = path.join(cwd, "package.json");
|
|
29
|
+
const rootPkgJson = JSON.parse(fs.readFileSync(rootPkgJsonPath, "utf-8")) as { name: string };
|
|
30
|
+
const scopeMatch = rootPkgJson.name.match(/^(@[^/]+)\//);
|
|
31
|
+
const workspaceScope = scopeMatch != null ? scopeMatch[1] : undefined;
|
|
32
|
+
|
|
33
|
+
const replaceDepsPatterns: Array<{ regex: RegExp }> = [];
|
|
34
|
+
if (replaceDepsConfig != null) {
|
|
35
|
+
for (const pattern of Object.keys(replaceDepsConfig)) {
|
|
36
|
+
const regexStr = pattern.replace(/[.+]/g, (ch) => `\\${ch}`).replace(/\*/g, "[^/]+");
|
|
37
|
+
replaceDepsPatterns.push({ regex: new RegExp(`^${regexStr}$`) });
|
|
38
|
+
}
|
|
34
39
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
|
|
41
|
+
const workspaceDeps: string[] = [];
|
|
42
|
+
const replaceDeps: string[] = [];
|
|
43
|
+
const visited = new Set<string>();
|
|
44
|
+
|
|
45
|
+
function traverse(dir: string): void {
|
|
46
|
+
const pkgJsonPath = path.join(dir, "package.json");
|
|
47
|
+
if (!fs.existsSync(pkgJsonPath)) return;
|
|
48
|
+
|
|
49
|
+
const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, "utf-8")) as {
|
|
50
|
+
dependencies?: Record<string, string>;
|
|
51
|
+
};
|
|
52
|
+
const deps = Object.keys(pkgJson.dependencies ?? {});
|
|
53
|
+
|
|
54
|
+
for (const dep of deps) {
|
|
55
|
+
if (visited.has(dep)) continue;
|
|
56
|
+
visited.add(dep);
|
|
57
|
+
|
|
58
|
+
// workspace package check
|
|
59
|
+
if (workspaceScope != null && dep.startsWith(workspaceScope + "/")) {
|
|
60
|
+
const dirName = dep.slice(workspaceScope.length + 1);
|
|
61
|
+
const depDir = path.join(cwd, "packages", dirName);
|
|
62
|
+
if (fs.existsSync(path.join(depDir, "package.json"))) {
|
|
63
|
+
workspaceDeps.push(dirName);
|
|
64
|
+
traverse(depDir);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// replaceDeps pattern check
|
|
70
|
+
const matched = replaceDepsPatterns.find((p) => p.regex.test(dep));
|
|
71
|
+
if (matched != null) {
|
|
72
|
+
replaceDeps.push(dep);
|
|
73
|
+
const depNodeModulesDir = path.join(cwd, "node_modules", ...dep.split("/"));
|
|
74
|
+
if (fs.existsSync(path.join(depNodeModulesDir, "package.json"))) {
|
|
75
|
+
traverse(depNodeModulesDir);
|
|
76
|
+
}
|
|
77
|
+
continue;
|
|
40
78
|
}
|
|
41
79
|
}
|
|
42
80
|
}
|
|
43
|
-
|
|
81
|
+
|
|
82
|
+
traverse(pkgDir);
|
|
83
|
+
return { workspaceDeps, replaceDeps };
|
|
44
84
|
}
|
|
45
85
|
|
|
46
86
|
/**
|
|
@@ -50,10 +50,13 @@ function resolvePackageFile(specifier: string, fromDir: string): string | null {
|
|
|
50
50
|
* Tailwind 내장 `getModuleDependencies`는 상대 경로 import만 추적하지만,
|
|
51
51
|
* 이 함수는 지정된 scope의 패키지 경로도 `node_modules` symlink를 풀어 실제 파일을 추적한다.
|
|
52
52
|
*/
|
|
53
|
-
export function getTailwindConfigDeps(configPath: string,
|
|
54
|
-
const scopePrefixes = scopes.map((s) => (s.endsWith("/") ? s : s + "/"));
|
|
53
|
+
export function getTailwindConfigDeps(configPath: string, replaceDeps: string[]): string[] {
|
|
55
54
|
const seen = new Set<string>();
|
|
56
55
|
|
|
56
|
+
function isReplaceDepImport(specifier: string): boolean {
|
|
57
|
+
return replaceDeps.some((dep) => specifier === dep || specifier.startsWith(dep + "/"));
|
|
58
|
+
}
|
|
59
|
+
|
|
57
60
|
function walk(absoluteFile: string): void {
|
|
58
61
|
if (seen.has(absoluteFile)) return;
|
|
59
62
|
if (!fs.existsSync(absoluteFile)) return;
|
|
@@ -80,7 +83,7 @@ export function getTailwindConfigDeps(configPath: string, scopes: string[]): str
|
|
|
80
83
|
|
|
81
84
|
if (specifier.startsWith(".")) {
|
|
82
85
|
resolved = resolveWithExtension(path.resolve(base, specifier), extensions);
|
|
83
|
-
} else if (
|
|
86
|
+
} else if (isReplaceDepImport(specifier)) {
|
|
84
87
|
resolved = resolvePackageFile(specifier, base);
|
|
85
88
|
}
|
|
86
89
|
|