@simplysm/sd-cli 13.0.11 → 13.0.13
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/README.md +42 -2
- package/dist/builders/BaseBuilder.d.ts +15 -4
- package/dist/builders/BaseBuilder.d.ts.map +1 -1
- package/dist/builders/BaseBuilder.js +50 -0
- package/dist/builders/BaseBuilder.js.map +1 -1
- package/dist/builders/DtsBuilder.d.ts.map +1 -1
- package/dist/builders/DtsBuilder.js +2 -39
- package/dist/builders/DtsBuilder.js.map +1 -1
- package/dist/builders/LibraryBuilder.d.ts.map +1 -1
- package/dist/builders/LibraryBuilder.js +2 -39
- package/dist/builders/LibraryBuilder.js.map +1 -1
- package/dist/builders/types.d.ts +2 -2
- package/dist/builders/types.d.ts.map +1 -1
- package/dist/capacitor/capacitor.d.ts.map +1 -1
- package/dist/capacitor/capacitor.js +2 -1
- package/dist/capacitor/capacitor.js.map +1 -1
- package/dist/commands/add-client.d.ts.map +1 -1
- package/dist/commands/add-client.js +1 -9
- package/dist/commands/add-client.js.map +1 -1
- package/dist/commands/add-server.d.ts.map +1 -1
- package/dist/commands/add-server.js +1 -9
- package/dist/commands/add-server.js.map +1 -1
- package/dist/commands/build.d.ts +1 -2
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +12 -311
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/dev.d.ts +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +11 -432
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/device.d.ts.map +1 -1
- package/dist/commands/device.js +17 -32
- package/dist/commands/device.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +1 -9
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/lint.d.ts +1 -1
- package/dist/commands/lint.d.ts.map +1 -1
- package/dist/commands/lint.js +71 -118
- package/dist/commands/lint.js.map +2 -2
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js +47 -69
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/typecheck.d.ts +1 -1
- package/dist/commands/typecheck.d.ts.map +1 -1
- package/dist/commands/typecheck.js +11 -24
- package/dist/commands/typecheck.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/infra/ResultCollector.d.ts +1 -1
- package/dist/infra/ResultCollector.d.ts.map +1 -1
- package/dist/infra/ResultCollector.js +1 -1
- package/dist/infra/ResultCollector.js.map +1 -1
- package/dist/orchestrators/BuildOrchestrator.d.ts +53 -0
- package/dist/orchestrators/BuildOrchestrator.d.ts.map +1 -0
- package/dist/orchestrators/BuildOrchestrator.js +338 -0
- package/dist/orchestrators/BuildOrchestrator.js.map +6 -0
- package/dist/orchestrators/DevOrchestrator.d.ts +64 -0
- package/dist/orchestrators/DevOrchestrator.d.ts.map +1 -0
- package/dist/orchestrators/DevOrchestrator.js +524 -0
- package/dist/orchestrators/DevOrchestrator.js.map +6 -0
- package/dist/orchestrators/WatchOrchestrator.d.ts +1 -1
- package/dist/orchestrators/WatchOrchestrator.d.ts.map +1 -1
- package/dist/orchestrators/WatchOrchestrator.js +30 -21
- package/dist/orchestrators/WatchOrchestrator.js.map +1 -1
- package/dist/orchestrators/index.d.ts +2 -0
- package/dist/orchestrators/index.d.ts.map +1 -1
- package/dist/orchestrators/index.js +4 -0
- package/dist/orchestrators/index.js.map +1 -1
- package/dist/sd-cli-entry.js +14 -14
- package/dist/sd-cli-entry.js.map +1 -1
- package/dist/sd-cli.js +6 -4
- package/dist/sd-cli.js.map +1 -1
- package/dist/utils/esbuild-config.d.ts +8 -0
- package/dist/utils/esbuild-config.d.ts.map +1 -1
- package/dist/utils/esbuild-config.js +23 -28
- package/dist/utils/esbuild-config.js.map +1 -1
- package/dist/utils/output-utils.d.ts +0 -1
- package/dist/utils/output-utils.d.ts.map +1 -1
- package/dist/utils/output-utils.js +1 -1
- package/dist/utils/output-utils.js.map +1 -1
- package/dist/utils/package-utils.d.ts +5 -1
- package/dist/utils/package-utils.d.ts.map +1 -1
- package/dist/utils/package-utils.js +12 -0
- package/dist/utils/package-utils.js.map +1 -1
- package/dist/utils/rebuild-manager.d.ts +15 -0
- package/dist/utils/rebuild-manager.d.ts.map +1 -0
- package/dist/utils/rebuild-manager.js +50 -0
- package/dist/utils/rebuild-manager.js.map +6 -0
- package/dist/utils/replace-deps.d.ts.map +1 -1
- package/dist/utils/replace-deps.js +7 -13
- package/dist/utils/replace-deps.js.map +1 -1
- package/dist/utils/vite-config.d.ts.map +1 -1
- package/dist/utils/vite-config.js +61 -7
- package/dist/utils/vite-config.js.map +1 -1
- package/dist/utils/worker-events.d.ts +5 -4
- package/dist/utils/worker-events.d.ts.map +1 -1
- package/dist/utils/worker-events.js +4 -0
- package/dist/utils/worker-events.js.map +1 -1
- package/dist/utils/worker-utils.d.ts +13 -0
- package/dist/utils/worker-utils.d.ts.map +1 -0
- package/dist/utils/worker-utils.js +15 -0
- package/dist/utils/worker-utils.js.map +6 -0
- package/dist/workers/client.worker.d.ts.map +1 -1
- package/dist/workers/client.worker.js +2 -14
- package/dist/workers/client.worker.js.map +1 -1
- package/dist/workers/library.worker.d.ts.map +1 -1
- package/dist/workers/library.worker.js +14 -16
- package/dist/workers/library.worker.js.map +1 -1
- package/dist/workers/server-runtime.worker.d.ts.map +1 -1
- package/dist/workers/server-runtime.worker.js +11 -11
- package/dist/workers/server-runtime.worker.js.map +1 -1
- package/dist/workers/server.worker.d.ts.map +1 -1
- package/dist/workers/server.worker.js +2 -14
- package/dist/workers/server.worker.js.map +1 -1
- package/package.json +4 -5
- package/src/builders/BaseBuilder.ts +71 -4
- package/src/builders/DtsBuilder.ts +2 -49
- package/src/builders/LibraryBuilder.ts +2 -51
- package/src/builders/types.ts +2 -2
- package/src/capacitor/capacitor.ts +2 -1
- package/src/commands/add-client.ts +1 -14
- package/src/commands/add-server.ts +1 -13
- package/src/commands/build.ts +13 -443
- package/src/commands/dev.ts +12 -582
- package/src/commands/device.ts +17 -34
- package/src/commands/init.ts +1 -13
- package/src/commands/lint.ts +85 -146
- package/src/commands/publish.ts +58 -76
- package/src/commands/typecheck.ts +13 -46
- package/src/index.ts +1 -0
- package/src/infra/ResultCollector.ts +2 -2
- package/src/orchestrators/BuildOrchestrator.ts +499 -0
- package/src/orchestrators/DevOrchestrator.ts +703 -0
- package/src/orchestrators/WatchOrchestrator.ts +42 -25
- package/src/orchestrators/index.ts +2 -0
- package/src/sd-cli-entry.ts +14 -14
- package/src/sd-cli.ts +6 -4
- package/src/utils/esbuild-config.ts +31 -33
- package/src/utils/output-utils.ts +1 -2
- package/src/utils/package-utils.ts +16 -1
- package/src/utils/rebuild-manager.ts +65 -0
- package/src/utils/replace-deps.ts +25 -23
- package/src/utils/vite-config.ts +115 -9
- package/src/utils/worker-events.ts +13 -5
- package/src/utils/worker-utils.ts +26 -0
- package/src/workers/client.worker.ts +3 -19
- package/src/workers/library.worker.ts +16 -22
- package/src/workers/server-runtime.worker.ts +16 -17
- package/src/workers/server.worker.ts +2 -19
- 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
- package/dist/utils/listr-manager.d.ts +0 -37
- package/dist/utils/listr-manager.d.ts.map +0 -1
- package/dist/utils/listr-manager.js +0 -59
- package/dist/utils/listr-manager.js.map +0 -6
- package/src/utils/listr-manager.ts +0 -89
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { WorkerManager } from "../infra/WorkerManager";
|
|
2
|
-
import type { ResultCollector } from "../infra/ResultCollector";
|
|
3
|
-
import type {
|
|
2
|
+
import type { BuildResult, ResultCollector } from "../infra/ResultCollector";
|
|
3
|
+
import type { RebuildManager } from "../utils/rebuild-manager";
|
|
4
|
+
import type { BuildEventData, ErrorEventData } from "../utils/worker-events";
|
|
4
5
|
import type { IBuilder, PackageInfo } from "./types";
|
|
5
6
|
|
|
6
7
|
/**
|
|
@@ -12,7 +13,7 @@ import type { IBuilder, PackageInfo } from "./types";
|
|
|
12
13
|
export abstract class BaseBuilder implements IBuilder {
|
|
13
14
|
protected readonly workerManager: WorkerManager;
|
|
14
15
|
protected readonly resultCollector: ResultCollector;
|
|
15
|
-
protected readonly rebuildManager:
|
|
16
|
+
protected readonly rebuildManager: RebuildManager | undefined;
|
|
16
17
|
protected readonly packages: PackageInfo[];
|
|
17
18
|
protected readonly cwd: string;
|
|
18
19
|
protected isWatchMode = false;
|
|
@@ -26,7 +27,7 @@ export abstract class BaseBuilder implements IBuilder {
|
|
|
26
27
|
cwd: string;
|
|
27
28
|
packages: PackageInfo[];
|
|
28
29
|
resultCollector: ResultCollector;
|
|
29
|
-
rebuildManager?:
|
|
30
|
+
rebuildManager?: RebuildManager;
|
|
30
31
|
}) {
|
|
31
32
|
this.cwd = options.cwd;
|
|
32
33
|
this.packages = options.packages;
|
|
@@ -114,6 +115,72 @@ export abstract class BaseBuilder implements IBuilder {
|
|
|
114
115
|
}
|
|
115
116
|
}
|
|
116
117
|
|
|
118
|
+
/**
|
|
119
|
+
* 공통 Worker 이벤트 핸들러 등록 (buildStart, build, error)
|
|
120
|
+
*
|
|
121
|
+
* LibraryBuilder와 DtsBuilder에서 동일한 패턴의 이벤트 핸들러를
|
|
122
|
+
* 중복 없이 등록할 수 있도록 공통 로직을 제공한다.
|
|
123
|
+
*
|
|
124
|
+
* @param workerKey Worker 식별자 (예: "core-common:build")
|
|
125
|
+
* @param resultType BuildResult의 type 필드 값
|
|
126
|
+
* @param listrTitle 리빌드 시 표시할 제목
|
|
127
|
+
*/
|
|
128
|
+
protected registerEventHandlersForWorker(
|
|
129
|
+
pkg: PackageInfo,
|
|
130
|
+
workerKey: string,
|
|
131
|
+
resultType: BuildResult["type"],
|
|
132
|
+
listrTitle: string,
|
|
133
|
+
): void {
|
|
134
|
+
const worker = this.workerManager.get(workerKey)!;
|
|
135
|
+
|
|
136
|
+
// 초기 빌드 여부 추적
|
|
137
|
+
let isInitialBuild = true;
|
|
138
|
+
|
|
139
|
+
// 빌드 시작 (리빌드 시)
|
|
140
|
+
worker.on("buildStart", () => {
|
|
141
|
+
if (!isInitialBuild && this.rebuildManager != null) {
|
|
142
|
+
const resolver = this.rebuildManager.registerBuild(workerKey, listrTitle);
|
|
143
|
+
this.buildResolvers.set(workerKey, resolver);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
// 빌드 완료
|
|
148
|
+
worker.on("build", (data) => {
|
|
149
|
+
const event = data as BuildEventData;
|
|
150
|
+
const result: BuildResult = {
|
|
151
|
+
name: pkg.name,
|
|
152
|
+
target: pkg.config.target,
|
|
153
|
+
type: resultType,
|
|
154
|
+
status: event.success ? "success" : "error",
|
|
155
|
+
message: event.errors?.join("\n"),
|
|
156
|
+
};
|
|
157
|
+
this.resultCollector.add(result);
|
|
158
|
+
|
|
159
|
+
if (isInitialBuild) {
|
|
160
|
+
isInitialBuild = false;
|
|
161
|
+
}
|
|
162
|
+
this.completeBuild(pkg);
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
// 에러
|
|
166
|
+
worker.on("error", (data) => {
|
|
167
|
+
const event = data as ErrorEventData;
|
|
168
|
+
const result: BuildResult = {
|
|
169
|
+
name: pkg.name,
|
|
170
|
+
target: pkg.config.target,
|
|
171
|
+
type: resultType,
|
|
172
|
+
status: "error",
|
|
173
|
+
message: event.message,
|
|
174
|
+
};
|
|
175
|
+
this.resultCollector.add(result);
|
|
176
|
+
|
|
177
|
+
if (isInitialBuild) {
|
|
178
|
+
isInitialBuild = false;
|
|
179
|
+
}
|
|
180
|
+
this.completeBuild(pkg);
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
|
|
117
184
|
/**
|
|
118
185
|
* Builder 타입 (결과 키 생성용)
|
|
119
186
|
*/
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type * as DtsWorkerModule from "../workers/dts.worker";
|
|
2
2
|
import type { BuildResult } from "../infra/ResultCollector";
|
|
3
3
|
import type { TypecheckEnv } from "../utils/tsconfig";
|
|
4
|
-
import type { BuildEventData, ErrorEventData } from "../utils/worker-events";
|
|
5
4
|
import { BaseBuilder } from "./BaseBuilder";
|
|
6
5
|
import type { PackageInfo } from "./types";
|
|
7
6
|
|
|
@@ -40,55 +39,9 @@ export class DtsBuilder extends BaseBuilder {
|
|
|
40
39
|
|
|
41
40
|
protected registerEventHandlers(): void {
|
|
42
41
|
for (const pkg of this.packages) {
|
|
43
|
-
const
|
|
44
|
-
const resultKey = `${pkg.name}:dts`;
|
|
42
|
+
const workerKey = `${pkg.name}:dts`;
|
|
45
43
|
const listrTitle = `${pkg.name} (dts)`;
|
|
46
|
-
|
|
47
|
-
let isInitialBuild = true;
|
|
48
|
-
|
|
49
|
-
// 빌드 시작 (리빌드 시)
|
|
50
|
-
worker.on("buildStart", () => {
|
|
51
|
-
if (!isInitialBuild && this.rebuildManager != null) {
|
|
52
|
-
const resolver = this.rebuildManager.registerBuild(resultKey, listrTitle);
|
|
53
|
-
this.buildResolvers.set(resultKey, resolver);
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
// 빌드 완료
|
|
58
|
-
worker.on("build", (data) => {
|
|
59
|
-
const event = data as BuildEventData;
|
|
60
|
-
const result: BuildResult = {
|
|
61
|
-
name: pkg.name,
|
|
62
|
-
target: pkg.config.target,
|
|
63
|
-
type: "dts",
|
|
64
|
-
status: event.success ? "success" : "error",
|
|
65
|
-
message: event.errors?.join("\n"),
|
|
66
|
-
};
|
|
67
|
-
this.resultCollector.add(result);
|
|
68
|
-
|
|
69
|
-
if (isInitialBuild) {
|
|
70
|
-
isInitialBuild = false;
|
|
71
|
-
}
|
|
72
|
-
this.completeBuild(pkg);
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
// 에러
|
|
76
|
-
worker.on("error", (data) => {
|
|
77
|
-
const event = data as ErrorEventData;
|
|
78
|
-
const result: BuildResult = {
|
|
79
|
-
name: pkg.name,
|
|
80
|
-
target: pkg.config.target,
|
|
81
|
-
type: "dts",
|
|
82
|
-
status: "error",
|
|
83
|
-
message: event.message,
|
|
84
|
-
};
|
|
85
|
-
this.resultCollector.add(result);
|
|
86
|
-
|
|
87
|
-
if (isInitialBuild) {
|
|
88
|
-
isInitialBuild = false;
|
|
89
|
-
}
|
|
90
|
-
this.completeBuild(pkg);
|
|
91
|
-
});
|
|
44
|
+
this.registerEventHandlersForWorker(pkg, workerKey, "dts", listrTitle);
|
|
92
45
|
}
|
|
93
46
|
}
|
|
94
47
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type * as LibraryWorkerModule from "../workers/library.worker";
|
|
2
2
|
import type { BuildResult } from "../infra/ResultCollector";
|
|
3
3
|
import type { SdBuildPackageConfig } from "../sd-config.types";
|
|
4
|
-
import type { BuildEventData, ErrorEventData } from "../utils/worker-events";
|
|
5
4
|
import { BaseBuilder } from "./BaseBuilder";
|
|
6
5
|
import type { PackageInfo } from "./types";
|
|
7
6
|
|
|
@@ -31,57 +30,9 @@ export class LibraryBuilder extends BaseBuilder {
|
|
|
31
30
|
|
|
32
31
|
protected registerEventHandlers(): void {
|
|
33
32
|
for (const pkg of this.packages) {
|
|
34
|
-
const
|
|
35
|
-
const resultKey = `${pkg.name}:build`;
|
|
33
|
+
const workerKey = `${pkg.name}:build`;
|
|
36
34
|
const listrTitle = `${pkg.name} (${pkg.config.target})`;
|
|
37
|
-
|
|
38
|
-
// 초기 빌드 여부 추적
|
|
39
|
-
let isInitialBuild = true;
|
|
40
|
-
|
|
41
|
-
// 빌드 시작 (리빌드 시)
|
|
42
|
-
worker.on("buildStart", () => {
|
|
43
|
-
if (!isInitialBuild && this.rebuildManager != null) {
|
|
44
|
-
// 리빌드 시 RebuildListrManager에 등록
|
|
45
|
-
const resolver = this.rebuildManager.registerBuild(resultKey, listrTitle);
|
|
46
|
-
this.buildResolvers.set(resultKey, resolver);
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
// 빌드 완료
|
|
51
|
-
worker.on("build", (data) => {
|
|
52
|
-
const event = data as BuildEventData;
|
|
53
|
-
const result: BuildResult = {
|
|
54
|
-
name: pkg.name,
|
|
55
|
-
target: pkg.config.target,
|
|
56
|
-
type: "build",
|
|
57
|
-
status: event.success ? "success" : "error",
|
|
58
|
-
message: event.errors?.join("\n"),
|
|
59
|
-
};
|
|
60
|
-
this.resultCollector.add(result);
|
|
61
|
-
|
|
62
|
-
if (isInitialBuild) {
|
|
63
|
-
isInitialBuild = false;
|
|
64
|
-
}
|
|
65
|
-
this.completeBuild(pkg);
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
// 에러
|
|
69
|
-
worker.on("error", (data) => {
|
|
70
|
-
const event = data as ErrorEventData;
|
|
71
|
-
const result: BuildResult = {
|
|
72
|
-
name: pkg.name,
|
|
73
|
-
target: pkg.config.target,
|
|
74
|
-
type: "build",
|
|
75
|
-
status: "error",
|
|
76
|
-
message: event.message,
|
|
77
|
-
};
|
|
78
|
-
this.resultCollector.add(result);
|
|
79
|
-
|
|
80
|
-
if (isInitialBuild) {
|
|
81
|
-
isInitialBuild = false;
|
|
82
|
-
}
|
|
83
|
-
this.completeBuild(pkg);
|
|
84
|
-
});
|
|
35
|
+
this.registerEventHandlersForWorker(pkg, workerKey, "build", listrTitle);
|
|
85
36
|
}
|
|
86
37
|
}
|
|
87
38
|
|
package/src/builders/types.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { SdPackageConfig } from "../sd-config.types";
|
|
2
2
|
import type { ResultCollector } from "../infra/ResultCollector";
|
|
3
|
-
import type {
|
|
3
|
+
import type { RebuildManager } from "../utils/rebuild-manager";
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* 패키지 정보
|
|
@@ -18,7 +18,7 @@ export interface BuilderOptions {
|
|
|
18
18
|
cwd: string;
|
|
19
19
|
packages: PackageInfo[];
|
|
20
20
|
resultCollector: ResultCollector;
|
|
21
|
-
rebuildManager?:
|
|
21
|
+
rebuildManager?: RebuildManager;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
/**
|
|
@@ -668,7 +668,8 @@ export default config;
|
|
|
668
668
|
|
|
669
669
|
// versionName, versionCode 설정
|
|
670
670
|
const version = this._npmConfig.version;
|
|
671
|
-
const
|
|
671
|
+
const cleanVersion = version.replace(/-.*$/, "");
|
|
672
|
+
const versionParts = cleanVersion.split(".");
|
|
672
673
|
const versionCode =
|
|
673
674
|
parseInt(versionParts[0] ?? "0") * 10000 +
|
|
674
675
|
parseInt(versionParts[1] ?? "0") * 100 +
|
|
@@ -5,6 +5,7 @@ import { consola } from "consola";
|
|
|
5
5
|
import { renderTemplateDir } from "../utils/template";
|
|
6
6
|
import { addPackageToSdConfig, addTailwindToEslintConfig } from "../utils/config-editor";
|
|
7
7
|
import { spawn } from "../utils/spawn";
|
|
8
|
+
import { findPackageRoot } from "../utils/package-utils";
|
|
8
9
|
|
|
9
10
|
//#region Types
|
|
10
11
|
|
|
@@ -16,20 +17,6 @@ export interface AddClientOptions {}
|
|
|
16
17
|
//#endregion
|
|
17
18
|
|
|
18
19
|
//#region Utilities
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* import.meta.dirname에서 상위로 올라가며 package.json을 찾아 패키지 루트를 반환한다.
|
|
22
|
-
*/
|
|
23
|
-
function findPackageRoot(startDir: string): string {
|
|
24
|
-
let dir = startDir;
|
|
25
|
-
while (!fs.existsSync(path.join(dir, "package.json"))) {
|
|
26
|
-
const parent = path.dirname(dir);
|
|
27
|
-
if (parent === dir) throw new Error("package.json을 찾을 수 없습니다.");
|
|
28
|
-
dir = parent;
|
|
29
|
-
}
|
|
30
|
-
return dir;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
20
|
//#endregion
|
|
34
21
|
|
|
35
22
|
//#region Main
|
|
@@ -5,6 +5,7 @@ import { consola } from "consola";
|
|
|
5
5
|
import { renderTemplateDir } from "../utils/template";
|
|
6
6
|
import { addPackageToSdConfig, setClientServerInSdConfig } from "../utils/config-editor";
|
|
7
7
|
import { spawn } from "../utils/spawn";
|
|
8
|
+
import { findPackageRoot } from "../utils/package-utils";
|
|
8
9
|
|
|
9
10
|
//#region Types
|
|
10
11
|
|
|
@@ -17,19 +18,6 @@ export interface AddServerOptions {}
|
|
|
17
18
|
|
|
18
19
|
//#region Utilities
|
|
19
20
|
|
|
20
|
-
/**
|
|
21
|
-
* import.meta.dirname에서 상위로 올라가며 package.json을 찾아 패키지 루트를 반환한다.
|
|
22
|
-
*/
|
|
23
|
-
function findPackageRoot(startDir: string): string {
|
|
24
|
-
let dir = startDir;
|
|
25
|
-
while (!fs.existsSync(path.join(dir, "package.json"))) {
|
|
26
|
-
const parent = path.dirname(dir);
|
|
27
|
-
if (parent === dir) throw new Error("package.json을 찾을 수 없습니다.");
|
|
28
|
-
dir = parent;
|
|
29
|
-
}
|
|
30
|
-
return dir;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
21
|
/**
|
|
34
22
|
* sd.config.ts를 읽어서 target이 "client"인 패키지명 목록을 반환한다.
|
|
35
23
|
*/
|