@simplysm/sd-cli 14.0.43 → 14.0.45
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/angular/ngtsc-build-core.d.ts +12 -3
- package/dist/angular/ngtsc-build-core.d.ts.map +1 -1
- package/dist/angular/ngtsc-build-core.js +70 -6
- package/dist/angular/ngtsc-build-core.js.map +1 -1
- package/dist/commands/publish/version-upgrade.d.ts.map +1 -1
- package/dist/commands/publish/version-upgrade.js +15 -12
- package/dist/commands/publish/version-upgrade.js.map +1 -1
- package/dist/deps/replace-deps/replace-deps-resolve.d.ts.map +1 -1
- package/dist/deps/replace-deps/replace-deps-resolve.js +6 -7
- package/dist/deps/replace-deps/replace-deps-resolve.js.map +1 -1
- package/dist/deps/replace-deps/replace-deps.d.ts.map +1 -1
- package/dist/deps/replace-deps/replace-deps.js +79 -15
- package/dist/deps/replace-deps/replace-deps.js.map +1 -1
- package/dist/deps/server-externals/server-production-files.d.ts +10 -5
- package/dist/deps/server-externals/server-production-files.d.ts.map +1 -1
- package/dist/deps/server-externals/server-production-files.js +22 -26
- package/dist/deps/server-externals/server-production-files.js.map +1 -1
- package/dist/esbuild/esbuild-angular-compiler-plugin.d.ts +3 -8
- package/dist/esbuild/esbuild-angular-compiler-plugin.d.ts.map +1 -1
- package/dist/esbuild/esbuild-angular-compiler-plugin.js +57 -83
- package/dist/esbuild/esbuild-angular-compiler-plugin.js.map +1 -1
- package/dist/esbuild/esbuild-postcss-plugin.d.ts.map +1 -1
- package/dist/esbuild/esbuild-postcss-plugin.js +9 -6
- package/dist/esbuild/esbuild-postcss-plugin.js.map +1 -1
- package/dist/esbuild/esbuild-worker-plugin.d.ts +30 -0
- package/dist/esbuild/esbuild-worker-plugin.d.ts.map +1 -0
- package/dist/esbuild/esbuild-worker-plugin.js +197 -0
- package/dist/esbuild/esbuild-worker-plugin.js.map +1 -0
- package/dist/workers/client.worker.d.ts.map +1 -1
- package/dist/workers/client.worker.js +4 -25
- package/dist/workers/client.worker.js.map +1 -1
- package/dist/workers/incremental-mtime-tracker.d.ts +13 -0
- package/dist/workers/incremental-mtime-tracker.d.ts.map +1 -0
- package/dist/workers/incremental-mtime-tracker.js +65 -0
- package/dist/workers/incremental-mtime-tracker.js.map +1 -0
- package/dist/workers/library-build.worker.d.ts.map +1 -1
- package/dist/workers/library-build.worker.js +37 -15
- package/dist/workers/library-build.worker.js.map +1 -1
- package/dist/workers/server-build.worker.d.ts.map +1 -1
- package/dist/workers/server-build.worker.js +6 -5
- package/dist/workers/server-build.worker.js.map +1 -1
- package/dist/workers/server-esbuild-context.d.ts.map +1 -1
- package/dist/workers/server-esbuild-context.js +3 -1
- package/dist/workers/server-esbuild-context.js.map +1 -1
- package/dist/workers/server-watch-manager.js +1 -1
- package/dist/workers/server-watch-manager.js.map +1 -1
- package/package.json +5 -4
- package/src/angular/ngtsc-build-core.ts +73 -5
- package/src/commands/publish/version-upgrade.ts +43 -34
- package/src/deps/replace-deps/replace-deps-resolve.ts +12 -7
- package/src/deps/replace-deps/replace-deps.ts +90 -16
- package/src/deps/server-externals/server-production-files.ts +26 -28
- package/src/esbuild/esbuild-angular-compiler-plugin.ts +82 -123
- package/src/esbuild/esbuild-postcss-plugin.ts +9 -6
- package/src/esbuild/esbuild-worker-plugin.ts +266 -0
- package/src/workers/client.worker.ts +4 -23
- package/src/workers/incremental-mtime-tracker.ts +68 -0
- package/src/workers/library-build.worker.ts +41 -14
- package/src/workers/server-build.worker.ts +6 -5
- package/src/workers/server-esbuild-context.ts +3 -1
- package/src/workers/server-watch-manager.ts +1 -1
- package/tests/angular/ngtsc-build-core.acc.spec.ts +210 -0
- package/tests/angular/ngtsc-build-core.spec.ts +52 -0
- package/tests/commands/version-upgrade.acc.spec.ts +210 -0
- package/tests/commands/version-upgrade.spec.ts +148 -0
- package/tests/deps/replace-deps/replace-deps-perf.verify.md +15 -0
- package/tests/deps/replace-deps/replace-deps-resolve.acc.spec.ts +124 -0
- package/tests/esbuild/esbuild-angular-compiler-plugin-worker.verify.md +56 -28
- package/tests/esbuild/esbuild-postcss-plugin-chunking.verify.md +17 -0
- package/tests/esbuild/esbuild-postcss-plugin.acc.spec.ts +152 -0
- package/tests/esbuild/esbuild-worker-plugin-node.verify.md +11 -0
- package/tests/esbuild/esbuild-worker-plugin.acc.spec.ts +318 -0
- package/tests/esbuild/esbuild-worker-plugin.spec.ts +297 -0
- package/tests/esbuild/esbuild-worker-plugin.verify.md +7 -0
- package/tests/esbuild/fixtures/worker-plugin/node-worker.js +2 -0
- package/tests/esbuild/fixtures/worker-plugin/shared-worker.js +6 -0
- package/tests/esbuild/fixtures/worker-plugin/worker-error.js +1 -0
- package/tests/esbuild/fixtures/worker-plugin/worker.js +3 -0
- package/tests/esbuild/fixtures/worker-plugin/worker2.js +3 -0
- package/tests/utils/ngtsc-build-core-write-emit.spec.ts +124 -0
- package/tests/workers/client-worker-mtime-incremental.verify.md +10 -0
- package/tests/workers/incremental-mtime-tracker.acc.spec.ts +144 -0
- package/tests/workers/incremental-mtime-tracker.spec.ts +102 -0
- package/tests/workers/library-build-worker.spec.ts +4 -0
- package/tests/workers/server-build-worker-plugin.verify.md +9 -0
- package/tests/workers/server-build-worker.spec.ts +26 -12
- package/tests/workers/server-esbuild-context.spec.ts +13 -5
- package/tests/workers/server-watch-manager.acc.spec.ts +2 -2
- package/tests/workers/server-watch-manager.spec.ts +2 -2
- package/dist/angular/web-worker-transformer.d.ts +0 -9
- package/dist/angular/web-worker-transformer.d.ts.map +0 -1
- package/dist/angular/web-worker-transformer.js +0 -73
- package/dist/angular/web-worker-transformer.js.map +0 -1
- package/src/angular/web-worker-transformer.ts +0 -117
- package/tests/angular/web-worker-transformer.spec.ts +0 -154
- package/tests/ts-compiler/fixtures/non-angular-pkg/dist/index.d.ts +0 -2
- package/tests/ts-compiler/fixtures/non-angular-pkg/dist/index.d.ts.map +0 -1
- package/tests/ts-compiler/fixtures/non-angular-pkg/dist/index.js +0 -4
- package/tests/ts-compiler/fixtures/non-angular-pkg/dist/index.js.map +0 -1
- package/tests/ts-compiler/fixtures/non-angular-pkg/dist/util.d.ts +0 -2
- package/tests/ts-compiler/fixtures/non-angular-pkg/dist/util.d.ts.map +0 -1
- package/tests/ts-compiler/fixtures/non-angular-pkg/dist/util.js +0 -4
- package/tests/ts-compiler/fixtures/non-angular-pkg/dist/util.js.map +0 -1
|
@@ -9,6 +9,7 @@ import { createServerEsbuildOptions, writeChangedOutputFiles, } from "../esbuild
|
|
|
9
9
|
import { collectAllExternals, generateProductionFiles } from "../deps/server-externals/server-production-files.js";
|
|
10
10
|
import { SdTsCompiler } from "../ts-compiler/SdTsCompiler.js";
|
|
11
11
|
import { createTscPlugin } from "../esbuild/esbuild-tsc-plugin.js";
|
|
12
|
+
import { createWorkerBundlePlugin } from "../esbuild/esbuild-worker-plugin.js";
|
|
12
13
|
import { setupWorkerLifecycle } from "./shared-worker-lifecycle.js";
|
|
13
14
|
import { buildWatchPaths } from "./build-watch-paths.js";
|
|
14
15
|
import { copyPublicFiles, watchPublicFiles } from "../utils/copy-public.js";
|
|
@@ -47,7 +48,7 @@ async function build(info) {
|
|
|
47
48
|
const parsedConfig = parseTsconfig(info.pkgDir);
|
|
48
49
|
const entryPoints = getPackageSourceFiles(info.pkgDir, parsedConfig);
|
|
49
50
|
// 외부 모듈 수집
|
|
50
|
-
const
|
|
51
|
+
const { bundleExternals, prodDependencies } = collectAllExternals(info.pkgDir, info.externals);
|
|
51
52
|
let jsResult;
|
|
52
53
|
let tscErrors;
|
|
53
54
|
let tscDiagnostics;
|
|
@@ -66,9 +67,9 @@ async function build(info) {
|
|
|
66
67
|
pkgDir: info.pkgDir,
|
|
67
68
|
entryPoints,
|
|
68
69
|
env: info.env,
|
|
69
|
-
external,
|
|
70
|
+
external: bundleExternals,
|
|
70
71
|
});
|
|
71
|
-
jsResult = await esbuild.build({ ...esbuildOptions, plugins: [tscPlugin.plugin] })
|
|
72
|
+
jsResult = await esbuild.build({ ...esbuildOptions, plugins: [createWorkerBundlePlugin(), tscPlugin.plugin] })
|
|
72
73
|
.then(async (result) => {
|
|
73
74
|
if (result.outputFiles) {
|
|
74
75
|
await writeChangedOutputFiles(result.outputFiles);
|
|
@@ -111,7 +112,7 @@ async function build(info) {
|
|
|
111
112
|
const confDistPath = path.join(info.pkgDir, "dist", ".config.json");
|
|
112
113
|
fs.writeFileSync(confDistPath, JSON.stringify(info.configs ?? {}, undefined, 2));
|
|
113
114
|
await copyPublicFiles(info.pkgDir, false);
|
|
114
|
-
generateProductionFiles(info,
|
|
115
|
+
generateProductionFiles(info, prodDependencies);
|
|
115
116
|
}
|
|
116
117
|
const allErrors = [...(jsResult.errors ?? []), ...tscErrors];
|
|
117
118
|
const tscSuccess = tscErrors.length === 0;
|
|
@@ -201,7 +202,7 @@ async function startWatch(info) {
|
|
|
201
202
|
const parsedConfig = parseTsconfig(info.pkgDir);
|
|
202
203
|
const entryPoints = getPackageSourceFiles(info.pkgDir, parsedConfig);
|
|
203
204
|
// 외부 모듈 수집 (watch 모드용 — watch manager가 자체 캐시를 유지)
|
|
204
|
-
const cachedExternal = collectAllExternals(info.pkgDir, info.externals);
|
|
205
|
+
const { bundleExternals: cachedExternal } = collectAllExternals(info.pkgDir, info.externals);
|
|
205
206
|
// esbuild 컨텍스트 생성 (JS 출력 필요 시, tsc 플러그인 포함)
|
|
206
207
|
if (info.output.js) {
|
|
207
208
|
await esbuildCtx.createContext({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-build.worker.js","sourceRoot":"","sources":["../../src/workers/server-build.worker.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,GAAG,IAAI,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAI9D,OAAO,EACL,aAAa,EACb,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAChH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,KAAK,UAAU,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAwE9D,YAAY;AAEZ,6BAA6B;AAE7B,4BAA4B;AAC5B,IAAI,aAAoC,CAAC;AAEzC,+BAA+B;AAC/B,IAAI,UAAiC,CAAC;AAEtC,KAAK,UAAU,OAAO;IACpB,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;IAE3B,MAAM,cAAc,GAAG,aAAa,CAAC;IACrC,aAAa,GAAG,SAAS,CAAC;IAE1B,MAAM,iBAAiB,GAAG,UAAU,CAAC;IACrC,UAAU,GAAG,SAAS,CAAC;IAEvB,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;QAC3B,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IACD,IAAI,iBAAiB,IAAI,IAAI,EAAE,CAAC;QAC9B,MAAM,iBAAiB,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;AACH,CAAC;AAED,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,oBAAoB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AAElF,YAAY;AAEZ,gBAAgB;AAEhB;;GAEG;AACH,KAAK,UAAU,KAAK,CAAC,IAAqB;IACxC,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACtE,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,iCAAiC,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;IAEvG,IAAI,CAAC;QACH,cAAc;QACd,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAErE,WAAW;QACX,MAAM,
|
|
1
|
+
{"version":3,"file":"server-build.worker.js","sourceRoot":"","sources":["../../src/workers/server-build.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;AAQ9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,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;AAQ9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE;;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;QACvB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAWD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BjF;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;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,qBAAqB,GAAG,SAAS,CAEpE"}
|
|
@@ -3,6 +3,7 @@ import { err as errNs } from "@simplysm/core-common";
|
|
|
3
3
|
import { formatEsbuildMessages } from "../utils/output-utils.js";
|
|
4
4
|
import { createServerEsbuildOptions, writeChangedOutputFiles, } from "../esbuild/esbuild-config.js";
|
|
5
5
|
import { createTscPlugin } from "../esbuild/esbuild-tsc-plugin.js";
|
|
6
|
+
import { createWorkerBundlePlugin } from "../esbuild/esbuild-worker-plugin.js";
|
|
6
7
|
/** esbuild watch context (모듈 스코프 상태) */
|
|
7
8
|
let context;
|
|
8
9
|
/** 마지막 빌드의 metafile (변경 필터링용) */
|
|
@@ -31,9 +32,10 @@ export async function createContext(options) {
|
|
|
31
32
|
external: options.external,
|
|
32
33
|
dev: true,
|
|
33
34
|
});
|
|
35
|
+
const workerPlugin = createWorkerBundlePlugin();
|
|
34
36
|
context = await esbuild.context({
|
|
35
37
|
...baseOptions,
|
|
36
|
-
plugins: tscPlugin != null ? [tscPlugin.plugin] : [],
|
|
38
|
+
plugins: tscPlugin != null ? [workerPlugin, tscPlugin.plugin] : [workerPlugin],
|
|
37
39
|
metafile: true,
|
|
38
40
|
write: false,
|
|
39
41
|
});
|
|
@@ -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,EAAE,GAAG,IAAI,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAwB,MAAM,+BAA+B,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,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAwB,MAAM,+BAA+B,CAAC;AAItF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAoB5E,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;YACtC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI;SACvB,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,MAAM,YAAY,GAAG,wBAAwB,EAAE,CAAC;IAChD,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;QAC9B,GAAG,WAAW;QACd,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAC9E,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,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpE,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,qBAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAEnE,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;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,SAAS,EAAE,aAAa,EAAE,CAAC;AACpC,CAAC"}
|
|
@@ -27,7 +27,7 @@ export async function startServerWatchLoop(config) {
|
|
|
27
27
|
// package.json이 변경된 경우에만 외부 모듈 재수집
|
|
28
28
|
const hasPackageJsonChange = changes.some((c) => c.path.endsWith("package.json"));
|
|
29
29
|
if (hasPackageJsonChange) {
|
|
30
|
-
cachedExternal = collectAllExternals(info.pkgDir, info.externals);
|
|
30
|
+
cachedExternal = collectAllExternals(info.pkgDir, info.externals).bundleExternals;
|
|
31
31
|
}
|
|
32
32
|
if (info.output.js) {
|
|
33
33
|
await esbuildCtx.recreateContext({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-watch-manager.js","sourceRoot":"","sources":["../../src/workers/server-watch-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,GAAG,IAAI,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EACL,aAAa,EACb,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,UAAU,MAAM,0BAA0B,CAAC;AAqBvD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAA6B;IACtE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC5C,IAAI,cAAc,GAAG,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAElD,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAElD,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACjD,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAEhD,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,CAAC,YAAY,EAAE,CAAC;gBAEtB,sBAAsB;gBACtB,MAAM,eAAe,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACnD,MAAM,cAAc,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;gBAE3E,mCAAmC;gBACnC,MAAM,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAChC,CAAC;gBACF,IAAI,oBAAoB,EAAE,CAAC;oBACzB,cAAc,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"server-watch-manager.js","sourceRoot":"","sources":["../../src/workers/server-watch-manager.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.
|
|
3
|
+
"version": "14.0.45",
|
|
4
4
|
"description": "Simplysm package - CLI tool",
|
|
5
5
|
"author": "simplysm",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -40,10 +40,11 @@
|
|
|
40
40
|
"ssh2": "^1.17.0",
|
|
41
41
|
"typescript": "^5.9.3",
|
|
42
42
|
"ws": "^8.20.0",
|
|
43
|
+
"yaml": "^2.8.3",
|
|
43
44
|
"yargs": "^18.0.0",
|
|
44
|
-
"@simplysm/core-
|
|
45
|
-
"@simplysm/core-
|
|
46
|
-
"@simplysm/storage": "14.0.
|
|
45
|
+
"@simplysm/core-node": "14.0.45",
|
|
46
|
+
"@simplysm/core-common": "14.0.45",
|
|
47
|
+
"@simplysm/storage": "14.0.45"
|
|
47
48
|
},
|
|
48
49
|
"devDependencies": {
|
|
49
50
|
"@types/semver": "^7.7.1",
|
|
@@ -7,6 +7,26 @@ const logger = consola.withTag("sd:cli:ngtsc-build");
|
|
|
7
7
|
import { compileScssFile, compileScssString } from "./scss-compiler";
|
|
8
8
|
import { createOutputPathRewriter, rewriteScssImports } from "../utils/output-path-rewriter";
|
|
9
9
|
|
|
10
|
+
/**
|
|
11
|
+
* 정방향 의존성 맵(소유파일→의존성 Set)에서 역방향 인덱스(의존성→소유파일 Set)를 구축한다.
|
|
12
|
+
*/
|
|
13
|
+
export function buildReverseDeps(
|
|
14
|
+
forwardDeps: ReadonlyMap<string, ReadonlySet<string>>,
|
|
15
|
+
): Map<string, Set<string>> {
|
|
16
|
+
const reverse = new Map<string, Set<string>>();
|
|
17
|
+
for (const [ownerFile, deps] of forwardDeps) {
|
|
18
|
+
for (const dep of deps) {
|
|
19
|
+
let owners = reverse.get(dep);
|
|
20
|
+
if (owners == null) {
|
|
21
|
+
owners = new Set();
|
|
22
|
+
reverse.set(dep, owners);
|
|
23
|
+
}
|
|
24
|
+
owners.add(ownerFile);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return reverse;
|
|
28
|
+
}
|
|
29
|
+
|
|
10
30
|
export function trackDeps(
|
|
11
31
|
depsMap: Map<string, Set<string>>,
|
|
12
32
|
containingFile: string,
|
|
@@ -38,6 +58,10 @@ export interface SideEffectScssOptions {
|
|
|
38
58
|
scssErrors: string[];
|
|
39
59
|
scssDependencies: Map<string, Set<string>>;
|
|
40
60
|
registry?: Map<string, SideEffectScssEntry>;
|
|
61
|
+
/** sourceFileName → Set<registryKey(=scssAbsPath)> 역방향 인덱스. O(1) 삭제용 */
|
|
62
|
+
registryReverseIndex?: Map<string, Set<string>>;
|
|
63
|
+
/** side-effect SCSS별 의존성 맵. compileScssFile 후 갱신. 증분 판별용 */
|
|
64
|
+
sideEffectScssDeps?: Map<string, Set<string>>;
|
|
41
65
|
}
|
|
42
66
|
|
|
43
67
|
//#region Library SCSS transform
|
|
@@ -89,8 +113,9 @@ export function createLibraryTransformStylesheet(
|
|
|
89
113
|
//#region Side-effect SCSS
|
|
90
114
|
|
|
91
115
|
/**
|
|
92
|
-
* 레지스트리의
|
|
93
|
-
*
|
|
116
|
+
* 레지스트리의 side-effect SCSS 항목을 CSS로 컴파일한다.
|
|
117
|
+
* changedScssFiles가 제공되면 영향받는 항목만 재컴파일한다 (증분 모드).
|
|
118
|
+
* changedScssFiles가 미제공이면 전체 재컴파일한다 (초기 빌드).
|
|
94
119
|
* 에러 발생 시 scssErrors에 추가하고 기존 CSS 파일을 보존한다.
|
|
95
120
|
*/
|
|
96
121
|
export function compileSideEffectScss(
|
|
@@ -98,14 +123,32 @@ export function compileSideEffectScss(
|
|
|
98
123
|
loadPaths: string[],
|
|
99
124
|
scssErrors: string[],
|
|
100
125
|
scssDependencies: Map<string, Set<string>>,
|
|
126
|
+
changedScssFiles?: ReadonlySet<string>,
|
|
127
|
+
sideEffectScssDeps?: Map<string, Set<string>>,
|
|
101
128
|
): void {
|
|
102
129
|
logger.debug(`side-effect SCSS 컴파일 시작 (${registry.size}개)`);
|
|
103
130
|
for (const entry of registry.values()) {
|
|
131
|
+
// 증분 모드: 영향받는 항목만 재컴파일
|
|
132
|
+
if (changedScssFiles != null && sideEffectScssDeps != null) {
|
|
133
|
+
const isDirectHit = changedScssFiles.has(entry.scssAbsPath);
|
|
134
|
+
let isDepsHit = false;
|
|
135
|
+
const deps = sideEffectScssDeps.get(entry.scssAbsPath);
|
|
136
|
+
if (deps != null) {
|
|
137
|
+
for (const d of deps) {
|
|
138
|
+
if (changedScssFiles.has(d)) { isDepsHit = true; break; }
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (!isDirectHit && !isDepsHit) continue;
|
|
142
|
+
}
|
|
104
143
|
try {
|
|
105
144
|
const result = compileScssFile(entry.scssAbsPath, loadPaths);
|
|
106
145
|
fs.mkdirSync(path.dirname(entry.cssAbsPath), { recursive: true });
|
|
107
146
|
fs.writeFileSync(entry.cssAbsPath, result.css, "utf-8");
|
|
108
147
|
trackDeps(scssDependencies, entry.sourceFileName, result.dependencies);
|
|
148
|
+
// 의존성 기록 (증분 판별용)
|
|
149
|
+
if (sideEffectScssDeps != null) {
|
|
150
|
+
sideEffectScssDeps.set(entry.scssAbsPath, new Set(result.dependencies));
|
|
151
|
+
}
|
|
109
152
|
} catch (err) {
|
|
110
153
|
scssErrors.push(formatScssError(err, entry.scssAbsPath));
|
|
111
154
|
}
|
|
@@ -176,9 +219,21 @@ export function writeEmitResults(
|
|
|
176
219
|
|
|
177
220
|
// 새 항목 등록 전에 이 소스 파일의 기존 레지스트리 항목 제거
|
|
178
221
|
if (scss.registry != null && sourceFileName != null) {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
222
|
+
if (scss.registryReverseIndex != null) {
|
|
223
|
+
// O(1) 삭제: 역방향 인덱스 활용
|
|
224
|
+
const keys = scss.registryReverseIndex.get(sourceFileName);
|
|
225
|
+
if (keys != null) {
|
|
226
|
+
for (const key of keys) {
|
|
227
|
+
scss.registry.delete(key);
|
|
228
|
+
}
|
|
229
|
+
scss.registryReverseIndex.delete(sourceFileName);
|
|
230
|
+
}
|
|
231
|
+
} else {
|
|
232
|
+
// 폴백: O(n) 순회 삭제
|
|
233
|
+
for (const [key, entry] of scss.registry) {
|
|
234
|
+
if (entry.sourceFileName === sourceFileName) {
|
|
235
|
+
scss.registry.delete(key);
|
|
236
|
+
}
|
|
182
237
|
}
|
|
183
238
|
}
|
|
184
239
|
}
|
|
@@ -195,6 +250,15 @@ export function writeEmitResults(
|
|
|
195
250
|
// 레지스트리가 제공된 경우 등록 (scssAbsPath를 키로 사용하여 중복 방지)
|
|
196
251
|
if (scss.registry != null) {
|
|
197
252
|
scss.registry.set(scssAbsPath, { scssAbsPath, cssAbsPath, sourceFileName });
|
|
253
|
+
// 역방향 인덱스 갱신
|
|
254
|
+
if (scss.registryReverseIndex != null) {
|
|
255
|
+
let keys = scss.registryReverseIndex.get(sourceFileName);
|
|
256
|
+
if (keys == null) {
|
|
257
|
+
keys = new Set();
|
|
258
|
+
scss.registryReverseIndex.set(sourceFileName, keys);
|
|
259
|
+
}
|
|
260
|
+
keys.add(scssAbsPath);
|
|
261
|
+
}
|
|
198
262
|
}
|
|
199
263
|
|
|
200
264
|
try {
|
|
@@ -202,6 +266,10 @@ export function writeEmitResults(
|
|
|
202
266
|
fs.mkdirSync(path.dirname(cssAbsPath), { recursive: true });
|
|
203
267
|
fs.writeFileSync(cssAbsPath, result.css, "utf-8");
|
|
204
268
|
trackDeps(scss.scssDependencies, sourceFileName, result.dependencies);
|
|
269
|
+
// side-effect SCSS 의존성 기록 (증분 판별용)
|
|
270
|
+
if (scss.sideEffectScssDeps != null) {
|
|
271
|
+
scss.sideEffectScssDeps.set(scssAbsPath, new Set(result.dependencies));
|
|
272
|
+
}
|
|
205
273
|
} catch (err) {
|
|
206
274
|
scss.scssErrors.push(formatScssError(err, scssAbsPath));
|
|
207
275
|
}
|
|
@@ -46,28 +46,35 @@ export async function upgradeVersion(
|
|
|
46
46
|
await fsx.write(projPkgPath, json.stringify(projPkg, { space: 2 }) + "\n");
|
|
47
47
|
changedFiles.push(projPkgPath);
|
|
48
48
|
|
|
49
|
-
// 각 패키지의 package.json에 버전 설정
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
49
|
+
// 각 패키지의 package.json에 버전 설정 (병렬)
|
|
50
|
+
const pkgChangedFiles = await Promise.all(
|
|
51
|
+
allPkgPaths.map(async (pkgPath) => {
|
|
52
|
+
const pkgJsonPath = path.resolve(pkgPath, "package.json");
|
|
53
|
+
const pkgJson = await fsx.readJson<PackageJson>(pkgJsonPath);
|
|
54
|
+
pkgJson.version = newVersion;
|
|
55
|
+
await fsx.write(pkgJsonPath, json.stringify(pkgJson, { space: 2 }) + "\n");
|
|
56
|
+
return pkgJsonPath;
|
|
57
|
+
}),
|
|
58
|
+
);
|
|
59
|
+
changedFiles.push(...pkgChangedFiles);
|
|
57
60
|
|
|
58
61
|
// 템플릿 파일의 @simplysm 패키지 버전 동기화
|
|
59
62
|
const templateFiles = await fsx.glob(path.resolve(cwd, "packages/sd-cli/templates/**/*.hbs"));
|
|
60
63
|
const versionRegex = /("@simplysm\/[^"]+"\s*:\s*)"~[^"]+"/g;
|
|
61
64
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
const templateChangedFiles = await Promise.all(
|
|
66
|
+
templateFiles.map(async (templatePath) => {
|
|
67
|
+
const content = await fsx.read(templatePath);
|
|
68
|
+
const newContent = content.replace(versionRegex, `$1"~${newVersion}"`);
|
|
65
69
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
70
|
+
if (content !== newContent) {
|
|
71
|
+
await fsx.write(templatePath, newContent);
|
|
72
|
+
return templatePath;
|
|
73
|
+
}
|
|
74
|
+
return undefined;
|
|
75
|
+
}),
|
|
76
|
+
);
|
|
77
|
+
changedFiles.push(...templateChangedFiles.filter((f) => f != null));
|
|
71
78
|
|
|
72
79
|
return { version: newVersion, changedFiles };
|
|
73
80
|
}
|
|
@@ -81,25 +88,27 @@ export async function computePublishLevels<T extends { name: string; path: strin
|
|
|
81
88
|
): Promise<T[][]> {
|
|
82
89
|
const pkgNames = new Set(publishPkgs.map((p) => p.name));
|
|
83
90
|
|
|
84
|
-
// 각 패키지의 워크스페이스 의존성 수집
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
91
|
+
// 각 패키지의 워크스페이스 의존성 수집 (병렬)
|
|
92
|
+
const depsEntries = await Promise.all(
|
|
93
|
+
publishPkgs.map(async (pkg) => {
|
|
94
|
+
const pkgJson = await fsx.readJson<PackageJson>(path.resolve(pkg.path, "package.json"));
|
|
95
|
+
const allDeps = {
|
|
96
|
+
...pkgJson.dependencies,
|
|
97
|
+
...pkgJson.peerDependencies,
|
|
98
|
+
...pkgJson.optionalDependencies,
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const workspaceDeps = new Set<string>();
|
|
102
|
+
for (const depName of Object.keys(allDeps)) {
|
|
103
|
+
const shortName = depName.replace(/^@simplysm\//, "");
|
|
104
|
+
if (shortName !== depName && pkgNames.has(shortName)) {
|
|
105
|
+
workspaceDeps.add(shortName);
|
|
106
|
+
}
|
|
99
107
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
108
|
+
return [pkg.name, workspaceDeps] as const;
|
|
109
|
+
}),
|
|
110
|
+
);
|
|
111
|
+
const depsMap = new Map(depsEntries);
|
|
103
112
|
|
|
104
113
|
// 위상 정렬로 레벨 분류
|
|
105
114
|
const levels: T[][] = [];
|
|
@@ -140,6 +140,7 @@ export async function resolveAllReplaceDepEntries(
|
|
|
140
140
|
logger: ReturnType<typeof consola.withTag>,
|
|
141
141
|
): Promise<ReplaceDepEntry[]> {
|
|
142
142
|
const entries: ReplaceDepEntry[] = [];
|
|
143
|
+
const seenTargetPaths = new Set<string>();
|
|
143
144
|
const searchedDirs = new Set<string>();
|
|
144
145
|
|
|
145
146
|
// 초기 탐색 대상: 프로젝트 루트 + workspace 패키지들의 node_modules
|
|
@@ -162,12 +163,15 @@ export async function resolveAllReplaceDepEntries(
|
|
|
162
163
|
continue;
|
|
163
164
|
}
|
|
164
165
|
|
|
165
|
-
// replaceDeps의 각 glob 패턴으로 node_modules 디렉토리 탐색
|
|
166
|
-
const
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
166
|
+
// replaceDeps의 각 glob 패턴으로 node_modules 디렉토리 탐색 (병렬)
|
|
167
|
+
const globResults = await Promise.all(
|
|
168
|
+
Object.keys(replaceDeps).map((pattern) =>
|
|
169
|
+
glob(pattern, { cwd: nodeModulesDir }),
|
|
170
|
+
),
|
|
171
|
+
);
|
|
172
|
+
const targetNames = globResults.flatMap((matches) =>
|
|
173
|
+
matches.map((m) => m.replaceAll("\\", "/")),
|
|
174
|
+
);
|
|
171
175
|
|
|
172
176
|
logger.debug(`[replace-deps] 탐색: ${nodeModulesDir} → ${targetNames.length}개 매칭 (${targetNames.join(", ")})`);
|
|
173
177
|
|
|
@@ -200,7 +204,8 @@ export async function resolveAllReplaceDepEntries(
|
|
|
200
204
|
}
|
|
201
205
|
|
|
202
206
|
// 동일 actualTargetPath가 이미 등록된 경우 건너뜀 (pnpm 중복 방지)
|
|
203
|
-
if (
|
|
207
|
+
if (seenTargetPaths.has(actualTargetPath)) continue;
|
|
208
|
+
seenTargetPaths.add(actualTargetPath);
|
|
204
209
|
|
|
205
210
|
entries.push({
|
|
206
211
|
targetName,
|
|
@@ -7,6 +7,70 @@ import { promisify } from "util";
|
|
|
7
7
|
import type { ReplaceDepEntry } from "./replace-deps-resolve";
|
|
8
8
|
import { resolveAllReplaceDepEntries } from "./replace-deps-resolve";
|
|
9
9
|
|
|
10
|
+
/**
|
|
11
|
+
* 파일 내용이 동일한지 비교한다.
|
|
12
|
+
* mtime + size가 같으면 동일로 간주하고, 다르면 바이트 비교한다.
|
|
13
|
+
*/
|
|
14
|
+
async function isFileContentSame(pathA: string, pathB: string): Promise<boolean> {
|
|
15
|
+
try {
|
|
16
|
+
const [statA, statB] = await Promise.all([
|
|
17
|
+
fs.promises.stat(pathA),
|
|
18
|
+
fs.promises.stat(pathB),
|
|
19
|
+
]);
|
|
20
|
+
if (statA.size !== statB.size) return false;
|
|
21
|
+
if (statA.mtimeMs === statB.mtimeMs) return true;
|
|
22
|
+
|
|
23
|
+
const [bufA, bufB] = await Promise.all([
|
|
24
|
+
fs.promises.readFile(pathA),
|
|
25
|
+
fs.promises.readFile(pathB),
|
|
26
|
+
]);
|
|
27
|
+
return bufA.equals(bufB);
|
|
28
|
+
} catch {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* pnpm hard link를 끊으면서 파일/디렉토리를 복사한다.
|
|
35
|
+
* 대상 파일을 먼저 unlink하여 글로벌 store의 hard link를 끊고 새 파일을 생성한다.
|
|
36
|
+
* 다른 프로젝트의 node_modules에 영향을 주지 않기 위함이다.
|
|
37
|
+
*/
|
|
38
|
+
async function copyWithUnlink(
|
|
39
|
+
sourcePath: string,
|
|
40
|
+
targetPath: string,
|
|
41
|
+
filter?: (absolutePath: string) => boolean,
|
|
42
|
+
): Promise<void> {
|
|
43
|
+
let stats: fs.Stats;
|
|
44
|
+
try {
|
|
45
|
+
stats = await fs.promises.lstat(sourcePath);
|
|
46
|
+
} catch {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (stats.isDirectory()) {
|
|
51
|
+
await fsx.mkdir(targetPath);
|
|
52
|
+
const names = await fs.promises.readdir(sourcePath);
|
|
53
|
+
await Promise.all(
|
|
54
|
+
names
|
|
55
|
+
.map((name) => path.resolve(sourcePath, name))
|
|
56
|
+
.filter((child) => filter == null || filter(child))
|
|
57
|
+
.map((child) => copyWithUnlink(
|
|
58
|
+
child,
|
|
59
|
+
path.join(targetPath, path.basename(child)),
|
|
60
|
+
)),
|
|
61
|
+
);
|
|
62
|
+
} else {
|
|
63
|
+
if (await isFileContentSame(sourcePath, targetPath)) return;
|
|
64
|
+
await fsx.mkdir(path.dirname(targetPath));
|
|
65
|
+
try {
|
|
66
|
+
await fs.promises.unlink(targetPath);
|
|
67
|
+
} catch {
|
|
68
|
+
// 대상이 없으면 무시
|
|
69
|
+
}
|
|
70
|
+
await fs.promises.copyFile(sourcePath, targetPath);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
10
74
|
/**
|
|
11
75
|
* npm publish 시 files 필드와 무관하게 항상 포함되는 파일 패턴 (대소문자 무시)
|
|
12
76
|
*/
|
|
@@ -69,33 +133,31 @@ export async function setupReplaceDeps(
|
|
|
69
133
|
replaceDeps: Record<string, string>,
|
|
70
134
|
): Promise<void> {
|
|
71
135
|
const logger = consola.withTag("sd:cli:replace-deps");
|
|
72
|
-
let setupCount = 0;
|
|
73
136
|
|
|
74
137
|
logger.start("replace-deps 설정 중...");
|
|
75
138
|
|
|
76
139
|
const entries = await resolveAllReplaceDepEntries(projectRoot, replaceDeps, logger);
|
|
77
|
-
const copiedEntries: ReplaceDepEntry[] = [];
|
|
78
140
|
|
|
79
|
-
|
|
141
|
+
const results = await Promise.all(entries.map(async (entry) => {
|
|
80
142
|
try {
|
|
81
|
-
// 소스 패키지의 files 필드를 읽어 화이트리스트 구성
|
|
82
143
|
const files = await loadFilesField(entry.resolvedSourcePath);
|
|
83
144
|
if (files == null) {
|
|
84
145
|
logger.warn(`[${entry.targetName}] package.json에 files 필드가 없어 건너뜀`);
|
|
85
|
-
|
|
146
|
+
return undefined;
|
|
86
147
|
}
|
|
87
148
|
|
|
88
149
|
const filter = createCopyFilter(entry.resolvedSourcePath, new Set(files));
|
|
89
|
-
await
|
|
90
|
-
|
|
91
|
-
copiedEntries.push(entry);
|
|
92
|
-
setupCount += 1;
|
|
150
|
+
await copyWithUnlink(entry.resolvedSourcePath, entry.actualTargetPath, filter);
|
|
151
|
+
return entry;
|
|
93
152
|
} catch (err) {
|
|
94
153
|
logger.error(`[${entry.targetName}] 복사 실패: ${err instanceof Error ? err.message : err}`);
|
|
154
|
+
return undefined;
|
|
95
155
|
}
|
|
96
|
-
}
|
|
156
|
+
}));
|
|
97
157
|
|
|
98
|
-
|
|
158
|
+
const copiedEntries = results.filter((e): e is ReplaceDepEntry => e != null);
|
|
159
|
+
|
|
160
|
+
logger.success(`replace-deps 설정 완료 (${copiedEntries.length}개 의존성 교체)`);
|
|
99
161
|
|
|
100
162
|
// 교체된 패키지의 postinstall 스크립트 실행
|
|
101
163
|
for (const { targetName, resolvedSourcePath, actualTargetPath } of copiedEntries) {
|
|
@@ -174,15 +236,20 @@ export async function watchReplaceDeps(
|
|
|
174
236
|
// readdir 실패 시 npm 기본 파일 감시 생략
|
|
175
237
|
}
|
|
176
238
|
|
|
239
|
+
// 이 소스 경로에 해당하는 entries만 사전 필터링하여 캡처
|
|
240
|
+
const sourceEntries = entries.filter(
|
|
241
|
+
(e) => e.resolvedSourcePath === entry.resolvedSourcePath,
|
|
242
|
+
);
|
|
243
|
+
|
|
177
244
|
const watcher = await FsWatcher.watch(watchPaths, {
|
|
178
245
|
followSymlinks: false,
|
|
179
246
|
});
|
|
180
247
|
watcher.onChange({ delay: 300 }, async (changeInfos) => {
|
|
181
|
-
|
|
182
|
-
// 이 소스 경로를 사용하는 모든 항목에 대해 복사
|
|
183
|
-
for (const e of entries) {
|
|
184
|
-
if (e.resolvedSourcePath !== entry.resolvedSourcePath) continue;
|
|
248
|
+
let hasActualCopy = false;
|
|
185
249
|
|
|
250
|
+
for (const { path: changedPath } of changeInfos) {
|
|
251
|
+
// 사전 필터링된 항목만 순회
|
|
252
|
+
for (const e of sourceEntries) {
|
|
186
253
|
// 소스로부터의 상대 경로 계산
|
|
187
254
|
const relativePath = pathx.posix(path.relative(e.resolvedSourcePath, changedPath));
|
|
188
255
|
const destPath = pathx.posix(path.join(e.actualTargetPath, relativePath));
|
|
@@ -203,12 +270,16 @@ export async function watchReplaceDeps(
|
|
|
203
270
|
if (stat.isDirectory()) {
|
|
204
271
|
await fsx.mkdir(destPath);
|
|
205
272
|
} else {
|
|
273
|
+
// 파일 내용이 동일하면 복사 건너뜀 (불필요한 리빌드 방지)
|
|
274
|
+
if (await isFileContentSame(changedPath, destPath)) continue;
|
|
206
275
|
await fsx.mkdir(pathx.posix(path.dirname(destPath)));
|
|
207
276
|
await fsx.copy(changedPath, destPath);
|
|
277
|
+
hasActualCopy = true;
|
|
208
278
|
}
|
|
209
279
|
} else {
|
|
210
280
|
// 소스가 삭제됨 → 대상도 삭제
|
|
211
281
|
await fsx.rm(destPath);
|
|
282
|
+
hasActualCopy = true;
|
|
212
283
|
}
|
|
213
284
|
} catch (err) {
|
|
214
285
|
logger.error(
|
|
@@ -217,7 +288,10 @@ export async function watchReplaceDeps(
|
|
|
217
288
|
}
|
|
218
289
|
}
|
|
219
290
|
}
|
|
220
|
-
|
|
291
|
+
|
|
292
|
+
if (hasActualCopy) {
|
|
293
|
+
options?.onChanged?.();
|
|
294
|
+
}
|
|
221
295
|
});
|
|
222
296
|
|
|
223
297
|
watchers.push(watcher);
|