@simplysm/sd-cli 13.0.0-beta.36 → 13.0.0-beta.41
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 +64 -8
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +2 -1
- package/dist/commands/build.js.map +2 -2
- package/dist/sd-config.types.d.ts +2 -2
- package/dist/sd-config.types.d.ts.map +1 -1
- package/dist/workers/server.worker.d.ts +2 -1
- package/dist/workers/server.worker.d.ts.map +1 -1
- package/dist/workers/server.worker.js +18 -12
- package/dist/workers/server.worker.js.map +2 -2
- package/package.json +4 -4
- 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/README.md
CHANGED
|
@@ -176,7 +176,7 @@ During production build (`sd-cli build`), the following deployment files are gen
|
|
|
176
176
|
| File | Description |
|
|
177
177
|
|------|-------------|
|
|
178
178
|
| `package.json` | Minimal package.json with externalized dependencies (version `"*"`) for `npm install` on the deployment server |
|
|
179
|
-
| `mise.toml` | Node.js version specification (read from root `mise.toml`) |
|
|
179
|
+
| `mise.toml` | Node.js version specification (read from root `mise.toml`) — only generated when `packageManager: "mise"` is set |
|
|
180
180
|
| `openssl.cnf` | Legacy OpenSSL provider activation (required for MSSQL and other legacy TLS connections) |
|
|
181
181
|
| `pm2.config.cjs` | PM2 process manager config (only generated when `pm2` is configured) |
|
|
182
182
|
|
|
@@ -478,10 +478,10 @@ Users can install the app on their home screen on supported browsers and devices
|
|
|
478
478
|
publish?: SdPublishConfig; // Deployment config (optional)
|
|
479
479
|
configs?: Record<string, unknown>; // Runtime config (written to dist/.config.json during build)
|
|
480
480
|
externals?: string[]; // Additional modules to exclude from bundle (optional)
|
|
481
|
+
packageManager?: "volta" | "mise"; // Package manager for Node.js version management (optional)
|
|
481
482
|
pm2?: { // PM2 config — generates dist/pm2.config.cjs (optional)
|
|
482
483
|
name?: string; // PM2 process name (defaults to package name)
|
|
483
484
|
ignoreWatchPaths?: string[]; // Paths to ignore in PM2 watch
|
|
484
|
-
noInterpreter?: boolean; // Skip interpreter path (use system PATH node)
|
|
485
485
|
};
|
|
486
486
|
}
|
|
487
487
|
```
|
|
@@ -715,7 +715,7 @@ Electron configuration for Windows desktop app builds in `client` target package
|
|
|
715
715
|
|
|
716
716
|
### Server Externals & PM2 Configuration
|
|
717
717
|
|
|
718
|
-
Server packages can configure external modules and PM2 deployment settings.
|
|
718
|
+
Server packages can configure external modules, package manager selection, and PM2 deployment settings.
|
|
719
719
|
|
|
720
720
|
#### Externals
|
|
721
721
|
|
|
@@ -728,6 +728,55 @@ Native modules (with `binding.gyp`) are automatically detected and externalized.
|
|
|
728
728
|
},
|
|
729
729
|
```
|
|
730
730
|
|
|
731
|
+
#### Package Manager Selection
|
|
732
|
+
|
|
733
|
+
The `packageManager` field controls which Node.js version management tool is used in production deployment:
|
|
734
|
+
|
|
735
|
+
```typescript
|
|
736
|
+
"my-server": {
|
|
737
|
+
target: "server",
|
|
738
|
+
packageManager: "volta", // Use Volta for Node.js version management
|
|
739
|
+
},
|
|
740
|
+
```
|
|
741
|
+
|
|
742
|
+
**Supported package managers:**
|
|
743
|
+
|
|
744
|
+
| Value | Behavior | Generated Files |
|
|
745
|
+
|-------|----------|-----------------|
|
|
746
|
+
| `"volta"` | Uses Volta for Node.js version management. PM2 config will execute `node` directly (Volta manages version via `package.json` engines field). | `package.json` includes `volta` field with Node.js version |
|
|
747
|
+
| `"mise"` | Uses mise for Node.js version management. PM2 config will resolve interpreter path via `mise which node`. | `mise.toml` is copied to `dist/` with Node.js version from root `mise.toml` |
|
|
748
|
+
| `undefined` | No version management tool. PM2 config will execute `node` directly from system PATH. | No additional version management files |
|
|
749
|
+
|
|
750
|
+
**Examples:**
|
|
751
|
+
|
|
752
|
+
```typescript
|
|
753
|
+
// Using Volta
|
|
754
|
+
"my-server": {
|
|
755
|
+
target: "server",
|
|
756
|
+
packageManager: "volta",
|
|
757
|
+
pm2: {
|
|
758
|
+
name: "my-app-server",
|
|
759
|
+
},
|
|
760
|
+
},
|
|
761
|
+
|
|
762
|
+
// Using mise
|
|
763
|
+
"my-server": {
|
|
764
|
+
target: "server",
|
|
765
|
+
packageManager: "mise",
|
|
766
|
+
pm2: {
|
|
767
|
+
name: "my-app-server",
|
|
768
|
+
},
|
|
769
|
+
},
|
|
770
|
+
|
|
771
|
+
// No package manager (use system PATH node)
|
|
772
|
+
"my-server": {
|
|
773
|
+
target: "server",
|
|
774
|
+
pm2: {
|
|
775
|
+
name: "my-app-server",
|
|
776
|
+
},
|
|
777
|
+
},
|
|
778
|
+
```
|
|
779
|
+
|
|
731
780
|
#### PM2 Configuration
|
|
732
781
|
|
|
733
782
|
When `pm2` is configured, `dist/pm2.config.cjs` is generated during production build for use with [PM2](https://pm2.keymetrics.io/) process manager:
|
|
@@ -735,13 +784,13 @@ When `pm2` is configured, `dist/pm2.config.cjs` is generated during production b
|
|
|
735
784
|
```typescript
|
|
736
785
|
"my-server": {
|
|
737
786
|
target: "server",
|
|
787
|
+
packageManager: "mise", // Optional: specify package manager
|
|
738
788
|
env: {
|
|
739
789
|
CUSTOM_VAR: "value",
|
|
740
790
|
},
|
|
741
791
|
pm2: {
|
|
742
792
|
name: "my-app-server", // PM2 process name (optional)
|
|
743
793
|
ignoreWatchPaths: ["uploads"], // Additional paths to ignore in PM2 watch (optional)
|
|
744
|
-
noInterpreter: false, // Set true to skip mise-managed node path (optional)
|
|
745
794
|
},
|
|
746
795
|
},
|
|
747
796
|
```
|
|
@@ -750,9 +799,9 @@ When `pm2` is configured, `dist/pm2.config.cjs` is generated during production b
|
|
|
750
799
|
|
|
751
800
|
- Process name (from `pm2.name` or derived from package name)
|
|
752
801
|
- Watch mode enabled with configurable ignore paths (`node_modules`, `www` + custom paths)
|
|
753
|
-
- Node.js interpreter path via `mise which node`
|
|
802
|
+
- Node.js interpreter path (resolved via `mise which node` if `packageManager: "mise"`, otherwise `node` from PATH)
|
|
754
803
|
- `--openssl-config=openssl.cnf` interpreter argument for legacy TLS support
|
|
755
|
-
- Environment variables: `NODE_ENV=production`, `TZ=Asia/Seoul`,
|
|
804
|
+
- Environment variables: `NODE_ENV=production`, `TZ=Asia/Seoul`, plus custom `env` values
|
|
756
805
|
|
|
757
806
|
**Deployment workflow:**
|
|
758
807
|
|
|
@@ -764,8 +813,15 @@ sd-cli build my-server
|
|
|
764
813
|
|
|
765
814
|
# 3. On the deployment server:
|
|
766
815
|
cd /path/to/my-server/dist
|
|
767
|
-
|
|
768
|
-
|
|
816
|
+
|
|
817
|
+
# If using mise, install mise and activate
|
|
818
|
+
mise install # Only needed if packageManager: "mise"
|
|
819
|
+
|
|
820
|
+
# Install externalized dependencies
|
|
821
|
+
npm install
|
|
822
|
+
|
|
823
|
+
# Start with PM2
|
|
824
|
+
pm2 start pm2.config.cjs
|
|
769
825
|
```
|
|
770
826
|
|
|
771
827
|
## Cache
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAIA,OAAO,uBAAuB,CAAC;AAmB/B;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AA8ED;;;;;;;;;;;;GAYG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAIA,OAAO,uBAAuB,CAAC;AAmB/B;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AA8ED;;;;;;;;;;;;GAYG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA8VnE"}
|
package/dist/commands/build.js
CHANGED
|
@@ -255,7 +255,8 @@ async function runBuild(options) {
|
|
|
255
255
|
env: { ...baseEnv, ...config.env },
|
|
256
256
|
configs: config.configs,
|
|
257
257
|
externals: config.externals,
|
|
258
|
-
pm2: config.pm2
|
|
258
|
+
pm2: config.pm2,
|
|
259
|
+
packageManager: config.packageManager
|
|
259
260
|
});
|
|
260
261
|
results.push({
|
|
261
262
|
name,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/commands/build.ts"],
|
|
4
|
-
"sourcesContent": ["import path from \"path\";\nimport ts from \"typescript\";\nimport { Listr, type ListrTask } from \"listr2\";\nimport { Worker, type WorkerProxy, fsRm } from \"@simplysm/core-node\";\nimport \"@simplysm/core-common\";\nimport { consola, LogLevels } from \"consola\";\nimport type { SdConfig, SdBuildPackageConfig, SdClientPackageConfig, SdServerPackageConfig } from \"../sd-config.types\";\nimport { loadSdConfig } from \"../utils/sd-config\";\nimport { getVersion } from \"../utils/build-env\";\nimport { setupReplaceDeps } from \"../utils/replace-deps\";\nimport type { TypecheckEnv } from \"../utils/tsconfig\";\nimport { deserializeDiagnostic } from \"../utils/typecheck-serialization\";\nimport { runLint, type LintOptions } from \"./lint\";\nimport type * as LibraryWorkerModule from \"../workers/library.worker\";\nimport type * as ServerWorkerModule from \"../workers/server.worker\";\nimport type * as ClientWorkerModule from \"../workers/client.worker\";\nimport type * as DtsWorkerModule from \"../workers/dts.worker\";\nimport { Capacitor } from \"../capacitor/capacitor\";\nimport { Electron } from \"../electron/electron\";\nimport { copySrcFiles } from \"../utils/copy-src\";\n\n//#region Types\n\n/**\n * Build \uBA85\uB839 \uC635\uC158\n */\nexport interface BuildOptions {\n /** \uBE4C\uB4DC\uD560 \uD328\uD0A4\uC9C0 \uD544\uD130 (\uBE48 \uBC30\uC5F4\uC774\uBA74 \uBAA8\uB4E0 \uD328\uD0A4\uC9C0) */\n targets: string[];\n /** sd.config.ts\uC5D0 \uC804\uB2EC\uD560 \uCD94\uAC00 \uC635\uC158 */\n options: string[];\n}\n\n/**\n * \uBE4C\uB4DC \uACB0\uACFC\n */\ninterface BuildResult {\n name: string;\n target: string;\n type: \"js\" | \"dts\" | \"vite\" | \"capacitor\" | \"electron\";\n success: boolean;\n errors?: string[];\n diagnostics?: ts.Diagnostic[];\n}\n\n/**\n * \uD328\uD0A4\uC9C0 \uBD84\uB958 \uACB0\uACFC\n */\ninterface ClassifiedPackages {\n /** node/browser/neutral \uD0C0\uAC9F (JS + dts) */\n buildPackages: Array<{ name: string; config: SdBuildPackageConfig }>;\n /** client \uD0C0\uAC9F (Vite build + typecheck) */\n clientPackages: Array<{ name: string; config: SdClientPackageConfig }>;\n /** server \uD0C0\uAC9F (JS \uBE4C\uB4DC, dts \uC81C\uC678) */\n serverPackages: Array<{ name: string; config: SdServerPackageConfig }>;\n}\n\n//#endregion\n\n//#region Utilities\n\n/**\n * \uD328\uD0A4\uC9C0\uB97C \uD0C0\uAC9F\uBCC4\uB85C \uBD84\uB958\n * - node/browser/neutral: buildPackages (JS + dts)\n * - client: clientPackages (Vite build + typecheck)\n * - server: serverPackages (JS \uBE4C\uB4DC, dts \uC81C\uC678)\n * - scripts: \uC81C\uC678\n */\nfunction classifyPackages(\n packages: Record<\n string,\n SdBuildPackageConfig | SdClientPackageConfig | SdServerPackageConfig | { target: \"scripts\" } | undefined\n >,\n targets: string[],\n): ClassifiedPackages {\n const buildPackages: ClassifiedPackages[\"buildPackages\"] = [];\n const clientPackages: ClassifiedPackages[\"clientPackages\"] = [];\n const serverPackages: ClassifiedPackages[\"serverPackages\"] = [];\n\n for (const [name, config] of Object.entries(packages)) {\n if (config == null) continue;\n if (config.target === \"scripts\") continue;\n\n // targets\uAC00 \uC9C0\uC815\uB418\uBA74 \uD574\uB2F9 \uD328\uD0A4\uC9C0\uB9CC \uD3EC\uD568\n if (targets.length > 0 && !targets.includes(name)) continue;\n\n if (config.target === \"client\") {\n clientPackages.push({ name, config });\n } else if (config.target === \"server\") {\n serverPackages.push({ name, config });\n } else {\n buildPackages.push({ name, config });\n }\n }\n\n return { buildPackages, clientPackages, serverPackages };\n}\n\n/**\n * dist \uD3F4\uB354 \uC0AD\uC81C\n */\nasync function cleanDistFolders(cwd: string, packageNames: string[]): Promise<void> {\n await Promise.all(packageNames.map((name) => fsRm(path.join(cwd, \"packages\", name, \"dist\"))));\n}\n\n//#endregion\n\n//#region Main\n\n/**\n * \uD504\uB85C\uB355\uC158 \uBE4C\uB4DC\uB97C \uC2E4\uD589\uD55C\uB2E4.\n *\n * - `sd.config.ts`\uB97C \uB85C\uB4DC\uD558\uC5EC \uD328\uD0A4\uC9C0\uBCC4 \uBE4C\uB4DC \uD0C0\uAC9F \uC815\uBCF4 \uD655\uC778 (\uD544\uC218)\n * - lint \uC2E4\uD589\n * - dist \uD3F4\uB354 \uC815\uB9AC (clean build)\n * - `node`/`browser`/`neutral` \uD0C0\uAC9F: esbuild JS \uBE4C\uB4DC + dts \uC0DD\uC131 (\uD0C0\uC785\uCCB4\uD06C \uD3EC\uD568)\n * - `client` \uD0C0\uAC9F: Vite production \uBE4C\uB4DC + typecheck (dts \uBD88\uD544\uC694)\n * - \uD558\uB098\uB77C\uB3C4 \uC2E4\uD328\uD558\uBA74 `process.exitCode = 1` \uC124\uC815\n *\n * @param options - build \uC2E4\uD589 \uC635\uC158\n * @returns \uC644\uB8CC \uC2DC resolve\n */\nexport async function runBuild(options: BuildOptions): Promise<void> {\n const { targets } = options;\n const cwd = process.cwd();\n const logger = consola.withTag(\"sd:cli:build\");\n\n logger.debug(\"\uBE4C\uB4DC \uC2DC\uC791\", { targets });\n\n // sd.config.ts \uB85C\uB4DC\n let sdConfig: SdConfig;\n try {\n sdConfig = await loadSdConfig({ cwd, dev: false, opt: options.options });\n logger.debug(\"sd.config.ts \uB85C\uB4DC \uC644\uB8CC\");\n } catch (err) {\n consola.error(`sd.config.ts \uB85C\uB4DC \uC2E4\uD328: ${err instanceof Error ? err.message : err}`);\n process.exitCode = 1;\n return;\n }\n\n // replaceDeps \uC124\uC815\uC774 \uC788\uC73C\uBA74 symlink \uAD50\uCCB4\n if (sdConfig.replaceDeps != null) {\n await setupReplaceDeps(cwd, sdConfig.replaceDeps);\n }\n\n // VER, DEV \uD658\uACBD\uBCC0\uC218 \uC900\uBE44\n const version = await getVersion(cwd);\n const baseEnv = { VER: version, DEV: \"false\" };\n\n // \uD328\uD0A4\uC9C0 \uBD84\uB958\n const { buildPackages, clientPackages, serverPackages } = classifyPackages(sdConfig.packages, targets);\n const allPackageNames = [\n ...buildPackages.map((p) => p.name),\n ...clientPackages.map((p) => p.name),\n ...serverPackages.map((p) => p.name),\n ];\n\n if (allPackageNames.length === 0) {\n process.stdout.write(\"\u2714 \uBE4C\uB4DC\uD560 \uD328\uD0A4\uC9C0\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.\\n\");\n return;\n }\n\n logger.debug(\"\uD328\uD0A4\uC9C0 \uBD84\uB958 \uC644\uB8CC\", {\n buildPackages: buildPackages.map((p) => p.name),\n clientPackages: clientPackages.map((p) => p.name),\n serverPackages: serverPackages.map((p) => p.name),\n });\n\n // \uACB0\uACFC \uC218\uC9D1\n const results: BuildResult[] = [];\n // \uC5D0\uB7EC \uCD94\uC801 (\uAC1D\uCCB4\uB85C \uB798\uD551\uD558\uC5EC \uCF5C\uBC31 \uB0B4 \uC218\uC815 \uCD94\uC801 \uAC00\uB2A5\uD558\uAC8C \uD568)\n const state = { hasError: false };\n\n // Worker \uACBD\uB85C\n const libraryWorkerPath = import.meta.resolve(\"../workers/library.worker\");\n const serverWorkerPath = import.meta.resolve(\"../workers/server.worker\");\n const clientWorkerPath = import.meta.resolve(\"../workers/client.worker\");\n const dtsWorkerPath = import.meta.resolve(\"../workers/dts.worker\");\n\n // \uD30C\uC77C \uCE90\uC2DC (diagnostics \uCD9C\uB825\uC6A9)\n const fileCache = new Map<string, string>();\n\n // formatHost (diagnostics \uCD9C\uB825\uC6A9)\n const formatHost: ts.FormatDiagnosticsHost = {\n getCanonicalFileName: (f) => f,\n getCurrentDirectory: () => cwd,\n getNewLine: () => ts.sys.newLine,\n };\n\n // Lint \uC635\uC158 (\uC804\uCCB4 \uD328\uD0A4\uC9C0 \uB300\uC0C1)\n const lintOptions: LintOptions = {\n targets: allPackageNames.map((name) => `packages/${name}`),\n fix: false,\n timing: false,\n };\n\n // Listr \uAD6C\uC870: Lint \u2192 Clean \u2192 Build (\uC21C\uCC28)\n const mainListr = new Listr(\n [\n {\n title: \"Lint\",\n task: async () => {\n await runLint(lintOptions);\n // lint \uC5D0\uB7EC\uAC00 \uC788\uC73C\uBA74 process.exitCode\uAC00 1\uB85C \uC124\uC815\uB428\n if (process.exitCode === 1) {\n state.hasError = true;\n }\n },\n },\n {\n title: \"Clean\",\n task: async () => {\n await cleanDistFolders(cwd, allPackageNames);\n },\n },\n {\n title: \"Build\",\n task: (_, task) => {\n const buildTasks: ListrTask[] = [];\n\n // buildPackages: JS \uBE4C\uB4DC + dts \uC0DD\uC131\n for (const { name, config } of buildPackages) {\n const pkgDir = path.join(cwd, \"packages\", name);\n const env: TypecheckEnv = config.target === \"node\" ? \"node\" : \"browser\";\n\n buildTasks.push({\n title: `${name} (${config.target})`,\n task: async () => {\n // JS \uBE4C\uB4DC\uC640 DTS \uC0DD\uC131\uC744 \uBCD1\uB82C \uC2E4\uD589\n const libraryWorker: WorkerProxy<typeof LibraryWorkerModule> =\n Worker.create<typeof LibraryWorkerModule>(libraryWorkerPath);\n const dtsWorker: WorkerProxy<typeof DtsWorkerModule> =\n Worker.create<typeof DtsWorkerModule>(dtsWorkerPath);\n\n try {\n const [buildResult, dtsResult] = await Promise.all([\n // JS \uBE4C\uB4DC\n libraryWorker.build({ name, config, cwd, pkgDir }),\n // DTS \uC0DD\uC131\n dtsWorker.buildDts({ name, cwd, pkgDir, env, emit: true }),\n ]);\n\n // JS \uBE4C\uB4DC \uACB0\uACFC \uCC98\uB9AC\n results.push({\n name,\n target: config.target,\n type: \"js\",\n success: buildResult.success,\n errors: buildResult.errors,\n });\n if (!buildResult.success) state.hasError = true;\n\n // DTS \uACB0\uACFC \uCC98\uB9AC\n const diagnostics = dtsResult.diagnostics.map((d) => deserializeDiagnostic(d, fileCache));\n results.push({\n name,\n target: config.target,\n type: \"dts\",\n success: dtsResult.success,\n errors: dtsResult.errors,\n diagnostics,\n });\n if (!dtsResult.success) state.hasError = true;\n } finally {\n await Promise.all([libraryWorker.terminate(), dtsWorker.terminate()]);\n }\n\n // copySrc \uD30C\uC77C \uBCF5\uC0AC\n if (config.copySrc != null && config.copySrc.length > 0) {\n await copySrcFiles(pkgDir, config.copySrc);\n }\n },\n });\n }\n\n // clientPackages: Vite \uBE4C\uB4DC + typecheck + Capacitor \uBE4C\uB4DC\n for (const { name, config } of clientPackages) {\n const pkgDir = path.join(cwd, \"packages\", name);\n\n buildTasks.push({\n title: `${name} (client)`,\n task: async () => {\n // Vite \uBE4C\uB4DC\uC640 \uD0C0\uC785\uCCB4\uD06C\uB97C \uBCD1\uB82C \uC2E4\uD589\n const clientWorker: WorkerProxy<typeof ClientWorkerModule> =\n Worker.create<typeof ClientWorkerModule>(clientWorkerPath);\n const dtsWorker: WorkerProxy<typeof DtsWorkerModule> =\n Worker.create<typeof DtsWorkerModule>(dtsWorkerPath);\n\n try {\n const clientConfig: SdClientPackageConfig = {\n ...config,\n env: { ...baseEnv, ...config.env },\n };\n const [clientResult, dtsResult] = await Promise.all([\n // Vite production \uBE4C\uB4DC\n clientWorker.build({ name, config: clientConfig, cwd, pkgDir }),\n // typecheck (dts \uC5C6\uC774)\n dtsWorker.buildDts({\n name,\n cwd,\n pkgDir,\n env: \"browser\",\n emit: false,\n }),\n ]);\n\n // Vite \uBE4C\uB4DC \uACB0\uACFC \uCC98\uB9AC\n results.push({\n name,\n target: \"client\",\n type: \"vite\",\n success: clientResult.success,\n errors: clientResult.errors,\n });\n if (!clientResult.success) state.hasError = true;\n\n // \uD0C0\uC785\uCCB4\uD06C \uACB0\uACFC \uCC98\uB9AC\n const diagnostics = dtsResult.diagnostics.map((d) => deserializeDiagnostic(d, fileCache));\n results.push({\n name,\n target: \"client\",\n type: \"dts\",\n success: dtsResult.success,\n errors: dtsResult.errors,\n diagnostics,\n });\n if (!dtsResult.success) state.hasError = true;\n } finally {\n await Promise.all([clientWorker.terminate(), dtsWorker.terminate()]);\n }\n\n // Capacitor \uBE4C\uB4DC (\uC124\uC815\uC774 \uC788\uB294 \uACBD\uC6B0\uB9CC)\n if (config.capacitor != null) {\n const outPath = path.join(pkgDir, \"dist\");\n try {\n const cap = await Capacitor.create(pkgDir, config.capacitor);\n await cap.initialize();\n await cap.build(outPath);\n results.push({\n name,\n target: \"client\",\n type: \"capacitor\",\n success: true,\n });\n } catch (err) {\n results.push({\n name,\n target: \"client\",\n type: \"capacitor\",\n success: false,\n errors: [err instanceof Error ? err.message : String(err)],\n });\n state.hasError = true;\n }\n }\n\n // Electron \uBE4C\uB4DC (\uC124\uC815\uC774 \uC788\uB294 \uACBD\uC6B0\uB9CC)\n if (config.electron != null) {\n const outPath = path.join(pkgDir, \"dist\");\n try {\n const electron = await Electron.create(pkgDir, config.electron);\n await electron.initialize();\n await electron.build(outPath);\n results.push({\n name,\n target: \"client\",\n type: \"electron\",\n success: true,\n });\n } catch (err) {\n results.push({\n name,\n target: \"client\",\n type: \"electron\",\n success: false,\n errors: [err instanceof Error ? err.message : String(err)],\n });\n state.hasError = true;\n }\n }\n },\n });\n }\n\n // serverPackages: JS \uBE4C\uB4DC\uB9CC (dts \uC0DD\uC131 \uC81C\uC678)\n for (const { name, config } of serverPackages) {\n const pkgDir = path.join(cwd, \"packages\", name);\n\n buildTasks.push({\n title: `${name} (server)`,\n task: async () => {\n const serverWorker: WorkerProxy<typeof ServerWorkerModule> =\n Worker.create<typeof ServerWorkerModule>(serverWorkerPath);\n\n try {\n const buildResult = await serverWorker.build({\n name,\n cwd,\n pkgDir,\n env: { ...baseEnv, ...config.env },\n configs: config.configs,\n externals: config.externals,\n pm2: config.pm2,\n });\n\n results.push({\n name,\n target: \"server\",\n type: \"js\",\n success: buildResult.success,\n errors: buildResult.errors,\n });\n if (!buildResult.success) state.hasError = true;\n } finally {\n await serverWorker.terminate();\n }\n },\n });\n }\n\n return task.newListr(buildTasks, { concurrent: true, exitOnError: false });\n },\n },\n ],\n {\n concurrent: false,\n exitOnError: false,\n renderer: consola.level >= LogLevels.debug ? \"verbose\" : \"default\",\n },\n );\n\n try {\n await mainListr.run();\n } catch {\n // Listr \uB0B4\uBD80 \uC5D0\uB7EC\uB294 results\uC5D0 \uC774\uBBF8 \uC218\uC9D1\uB428\n }\n\n // \uACB0\uACFC \uCD9C\uB825\n const allDiagnostics: ts.Diagnostic[] = [];\n for (const result of results) {\n if (!result.success) {\n const typeLabel = result.type === \"dts\" ? \"dts\" : result.target;\n const errorLines: string[] = [`${result.name} (${typeLabel})`];\n if (result.errors != null) {\n for (const error of result.errors) {\n for (const line of error.split(\"\\n\")) {\n errorLines.push(` \u2192 ${line}`);\n }\n }\n }\n consola.error(errorLines.join(\"\\n\"));\n }\n if (result.diagnostics != null) {\n allDiagnostics.push(...result.diagnostics);\n }\n }\n\n // diagnostics \uCD9C\uB825 (\uC911\uBCF5 \uC81C\uAC70)\n if (allDiagnostics.length > 0) {\n const uniqueDiagnostics = ts.sortAndDeduplicateDiagnostics(allDiagnostics);\n const message = ts.formatDiagnosticsWithColorAndContext(uniqueDiagnostics, formatHost);\n process.stdout.write(message);\n }\n\n // \uACB0\uACFC \uB85C\uADF8 \uCD9C\uB825\n if (state.hasError) {\n logger.error(\"\uBE4C\uB4DC \uC2E4\uD328\");\n process.exitCode = 1;\n } else {\n logger.info(\"\uBE4C\uB4DC \uC644\uB8CC\");\n }\n}\n\n//#endregion\n"],
|
|
5
|
-
"mappings": "AAAA,OAAO,UAAU;AACjB,OAAO,QAAQ;AACf,SAAS,aAA6B;AACtC,SAAS,QAA0B,YAAY;AAC/C,OAAO;AACP,SAAS,SAAS,iBAAiB;AAEnC,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB;AAC3B,SAAS,wBAAwB;AAEjC,SAAS,6BAA6B;AACtC,SAAS,eAAiC;AAK1C,SAAS,iBAAiB;AAC1B,SAAS,gBAAgB;AACzB,SAAS,oBAAoB;AAiD7B,SAAS,iBACP,UAIA,SACoB;AACpB,QAAM,gBAAqD,CAAC;AAC5D,QAAM,iBAAuD,CAAC;AAC9D,QAAM,iBAAuD,CAAC;AAE9D,aAAW,CAAC,MAAM,MAAM,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACrD,QAAI,UAAU,KAAM;AACpB,QAAI,OAAO,WAAW,UAAW;AAGjC,QAAI,QAAQ,SAAS,KAAK,CAAC,QAAQ,SAAS,IAAI,EAAG;AAEnD,QAAI,OAAO,WAAW,UAAU;AAC9B,qBAAe,KAAK,EAAE,MAAM,OAAO,CAAC;AAAA,IACtC,WAAW,OAAO,WAAW,UAAU;AACrC,qBAAe,KAAK,EAAE,MAAM,OAAO,CAAC;AAAA,IACtC,OAAO;AACL,oBAAc,KAAK,EAAE,MAAM,OAAO,CAAC;AAAA,IACrC;AAAA,EACF;AAEA,SAAO,EAAE,eAAe,gBAAgB,eAAe;AACzD;AAKA,eAAe,iBAAiB,KAAa,cAAuC;AAClF,QAAM,QAAQ,IAAI,aAAa,IAAI,CAAC,SAAS,KAAK,KAAK,KAAK,KAAK,YAAY,MAAM,MAAM,CAAC,CAAC,CAAC;AAC9F;AAmBA,eAAsB,SAAS,SAAsC;AACnE,QAAM,EAAE,QAAQ,IAAI;AACpB,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,SAAS,QAAQ,QAAQ,cAAc;AAE7C,SAAO,MAAM,6BAAS,EAAE,QAAQ,CAAC;AAGjC,MAAI;AACJ,MAAI;AACF,eAAW,MAAM,aAAa,EAAE,KAAK,KAAK,OAAO,KAAK,QAAQ,QAAQ,CAAC;AACvE,WAAO,MAAM,wCAAoB;AAAA,EACnC,SAAS,KAAK;AACZ,YAAQ,MAAM,2CAAuB,eAAe,QAAQ,IAAI,UAAU,GAAG,EAAE;AAC/E,YAAQ,WAAW;AACnB;AAAA,EACF;AAGA,MAAI,SAAS,eAAe,MAAM;AAChC,UAAM,iBAAiB,KAAK,SAAS,WAAW;AAAA,EAClD;AAGA,QAAM,UAAU,MAAM,WAAW,GAAG;AACpC,QAAM,UAAU,EAAE,KAAK,SAAS,KAAK,QAAQ;AAG7C,QAAM,EAAE,eAAe,gBAAgB,eAAe,IAAI,iBAAiB,SAAS,UAAU,OAAO;AACrG,QAAM,kBAAkB;AAAA,IACtB,GAAG,cAAc,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,IAClC,GAAG,eAAe,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,IACnC,GAAG,eAAe,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,EACrC;AAEA,MAAI,gBAAgB,WAAW,GAAG;AAChC,YAAQ,OAAO,MAAM,gFAAoB;AACzC;AAAA,EACF;AAEA,SAAO,MAAM,gDAAa;AAAA,IACxB,eAAe,cAAc,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,IAC9C,gBAAgB,eAAe,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,IAChD,gBAAgB,eAAe,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,EAClD,CAAC;AAGD,QAAM,UAAyB,CAAC;AAEhC,QAAM,QAAQ,EAAE,UAAU,MAAM;AAGhC,QAAM,oBAAoB,YAAY,QAAQ,2BAA2B;AACzE,QAAM,mBAAmB,YAAY,QAAQ,0BAA0B;AACvE,QAAM,mBAAmB,YAAY,QAAQ,0BAA0B;AACvE,QAAM,gBAAgB,YAAY,QAAQ,uBAAuB;AAGjE,QAAM,YAAY,oBAAI,IAAoB;AAG1C,QAAM,aAAuC;AAAA,IAC3C,sBAAsB,CAAC,MAAM;AAAA,IAC7B,qBAAqB,MAAM;AAAA,IAC3B,YAAY,MAAM,GAAG,IAAI;AAAA,EAC3B;AAGA,QAAM,cAA2B;AAAA,IAC/B,SAAS,gBAAgB,IAAI,CAAC,SAAS,YAAY,IAAI,EAAE;AAAA,IACzD,KAAK;AAAA,IACL,QAAQ;AAAA,EACV;AAGA,QAAM,YAAY,IAAI;AAAA,IACpB;AAAA,MACE;AAAA,QACE,OAAO;AAAA,QACP,MAAM,YAAY;AAChB,gBAAM,QAAQ,WAAW;AAEzB,cAAI,QAAQ,aAAa,GAAG;AAC1B,kBAAM,WAAW;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,MAAM,YAAY;AAChB,gBAAM,iBAAiB,KAAK,eAAe;AAAA,QAC7C;AAAA,MACF;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,MAAM,CAAC,GAAG,SAAS;AACjB,gBAAM,aAA0B,CAAC;AAGjC,qBAAW,EAAE,MAAM,OAAO,KAAK,eAAe;AAC5C,kBAAM,SAAS,KAAK,KAAK,KAAK,YAAY,IAAI;AAC9C,kBAAM,MAAoB,OAAO,WAAW,SAAS,SAAS;AAE9D,uBAAW,KAAK;AAAA,cACd,OAAO,GAAG,IAAI,KAAK,OAAO,MAAM;AAAA,cAChC,MAAM,YAAY;AAEhB,sBAAM,gBACJ,OAAO,OAAmC,iBAAiB;AAC7D,sBAAM,YACJ,OAAO,OAA+B,aAAa;AAErD,oBAAI;AACF,wBAAM,CAAC,aAAa,SAAS,IAAI,MAAM,QAAQ,IAAI;AAAA;AAAA,oBAEjD,cAAc,MAAM,EAAE,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA;AAAA,oBAEjD,UAAU,SAAS,EAAE,MAAM,KAAK,QAAQ,KAAK,MAAM,KAAK,CAAC;AAAA,kBAC3D,CAAC;AAGD,0BAAQ,KAAK;AAAA,oBACX;AAAA,oBACA,QAAQ,OAAO;AAAA,oBACf,MAAM;AAAA,oBACN,SAAS,YAAY;AAAA,oBACrB,QAAQ,YAAY;AAAA,kBACtB,CAAC;AACD,sBAAI,CAAC,YAAY,QAAS,OAAM,WAAW;AAG3C,wBAAM,cAAc,UAAU,YAAY,IAAI,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAAC;AACxF,0BAAQ,KAAK;AAAA,oBACX;AAAA,oBACA,QAAQ,OAAO;AAAA,oBACf,MAAM;AAAA,oBACN,SAAS,UAAU;AAAA,oBACnB,QAAQ,UAAU;AAAA,oBAClB;AAAA,kBACF,CAAC;AACD,sBAAI,CAAC,UAAU,QAAS,OAAM,WAAW;AAAA,gBAC3C,UAAE;AACA,wBAAM,QAAQ,IAAI,CAAC,cAAc,UAAU,GAAG,UAAU,UAAU,CAAC,CAAC;AAAA,gBACtE;AAGA,oBAAI,OAAO,WAAW,QAAQ,OAAO,QAAQ,SAAS,GAAG;AACvD,wBAAM,aAAa,QAAQ,OAAO,OAAO;AAAA,gBAC3C;AAAA,cACF;AAAA,YACF,CAAC;AAAA,UACH;AAGA,qBAAW,EAAE,MAAM,OAAO,KAAK,gBAAgB;AAC7C,kBAAM,SAAS,KAAK,KAAK,KAAK,YAAY,IAAI;AAE9C,uBAAW,KAAK;AAAA,cACd,OAAO,GAAG,IAAI;AAAA,cACd,MAAM,YAAY;AAEhB,sBAAM,eACJ,OAAO,OAAkC,gBAAgB;AAC3D,sBAAM,YACJ,OAAO,OAA+B,aAAa;AAErD,oBAAI;AACF,wBAAM,eAAsC;AAAA,oBAC1C,GAAG;AAAA,oBACH,KAAK,EAAE,GAAG,SAAS,GAAG,OAAO,IAAI;AAAA,kBACnC;AACA,wBAAM,CAAC,cAAc,SAAS,IAAI,MAAM,QAAQ,IAAI;AAAA;AAAA,oBAElD,aAAa,MAAM,EAAE,MAAM,QAAQ,cAAc,KAAK,OAAO,CAAC;AAAA;AAAA,oBAE9D,UAAU,SAAS;AAAA,sBACjB;AAAA,sBACA;AAAA,sBACA;AAAA,sBACA,KAAK;AAAA,sBACL,MAAM;AAAA,oBACR,CAAC;AAAA,kBACH,CAAC;AAGD,0BAAQ,KAAK;AAAA,oBACX;AAAA,oBACA,QAAQ;AAAA,oBACR,MAAM;AAAA,oBACN,SAAS,aAAa;AAAA,oBACtB,QAAQ,aAAa;AAAA,kBACvB,CAAC;AACD,sBAAI,CAAC,aAAa,QAAS,OAAM,WAAW;AAG5C,wBAAM,cAAc,UAAU,YAAY,IAAI,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAAC;AACxF,0BAAQ,KAAK;AAAA,oBACX;AAAA,oBACA,QAAQ;AAAA,oBACR,MAAM;AAAA,oBACN,SAAS,UAAU;AAAA,oBACnB,QAAQ,UAAU;AAAA,oBAClB;AAAA,kBACF,CAAC;AACD,sBAAI,CAAC,UAAU,QAAS,OAAM,WAAW;AAAA,gBAC3C,UAAE;AACA,wBAAM,QAAQ,IAAI,CAAC,aAAa,UAAU,GAAG,UAAU,UAAU,CAAC,CAAC;AAAA,gBACrE;AAGA,oBAAI,OAAO,aAAa,MAAM;AAC5B,wBAAM,UAAU,KAAK,KAAK,QAAQ,MAAM;AACxC,sBAAI;AACF,0BAAM,MAAM,MAAM,UAAU,OAAO,QAAQ,OAAO,SAAS;AAC3D,0BAAM,IAAI,WAAW;AACrB,0BAAM,IAAI,MAAM,OAAO;AACvB,4BAAQ,KAAK;AAAA,sBACX;AAAA,sBACA,QAAQ;AAAA,sBACR,MAAM;AAAA,sBACN,SAAS;AAAA,oBACX,CAAC;AAAA,kBACH,SAAS,KAAK;AACZ,4BAAQ,KAAK;AAAA,sBACX;AAAA,sBACA,QAAQ;AAAA,sBACR,MAAM;AAAA,sBACN,SAAS;AAAA,sBACT,QAAQ,CAAC,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,oBAC3D,CAAC;AACD,0BAAM,WAAW;AAAA,kBACnB;AAAA,gBACF;AAGA,oBAAI,OAAO,YAAY,MAAM;AAC3B,wBAAM,UAAU,KAAK,KAAK,QAAQ,MAAM;AACxC,sBAAI;AACF,0BAAM,WAAW,MAAM,SAAS,OAAO,QAAQ,OAAO,QAAQ;AAC9D,0BAAM,SAAS,WAAW;AAC1B,0BAAM,SAAS,MAAM,OAAO;AAC5B,4BAAQ,KAAK;AAAA,sBACX;AAAA,sBACA,QAAQ;AAAA,sBACR,MAAM;AAAA,sBACN,SAAS;AAAA,oBACX,CAAC;AAAA,kBACH,SAAS,KAAK;AACZ,4BAAQ,KAAK;AAAA,sBACX;AAAA,sBACA,QAAQ;AAAA,sBACR,MAAM;AAAA,sBACN,SAAS;AAAA,sBACT,QAAQ,CAAC,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,oBAC3D,CAAC;AACD,0BAAM,WAAW;AAAA,kBACnB;AAAA,gBACF;AAAA,cACF;AAAA,YACF,CAAC;AAAA,UACH;AAGA,qBAAW,EAAE,MAAM,OAAO,KAAK,gBAAgB;AAC7C,kBAAM,SAAS,KAAK,KAAK,KAAK,YAAY,IAAI;AAE9C,uBAAW,KAAK;AAAA,cACd,OAAO,GAAG,IAAI;AAAA,cACd,MAAM,YAAY;AAChB,sBAAM,eACJ,OAAO,OAAkC,gBAAgB;AAE3D,oBAAI;AACF,wBAAM,cAAc,MAAM,aAAa,MAAM;AAAA,oBAC3C;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA,KAAK,EAAE,GAAG,SAAS,GAAG,OAAO,IAAI;AAAA,oBACjC,SAAS,OAAO;AAAA,oBAChB,WAAW,OAAO;AAAA,oBAClB,KAAK,OAAO;AAAA,
|
|
4
|
+
"sourcesContent": ["import path from \"path\";\nimport ts from \"typescript\";\nimport { Listr, type ListrTask } from \"listr2\";\nimport { Worker, type WorkerProxy, fsRm } from \"@simplysm/core-node\";\nimport \"@simplysm/core-common\";\nimport { consola, LogLevels } from \"consola\";\nimport type { SdConfig, SdBuildPackageConfig, SdClientPackageConfig, SdServerPackageConfig } from \"../sd-config.types\";\nimport { loadSdConfig } from \"../utils/sd-config\";\nimport { getVersion } from \"../utils/build-env\";\nimport { setupReplaceDeps } from \"../utils/replace-deps\";\nimport type { TypecheckEnv } from \"../utils/tsconfig\";\nimport { deserializeDiagnostic } from \"../utils/typecheck-serialization\";\nimport { runLint, type LintOptions } from \"./lint\";\nimport type * as LibraryWorkerModule from \"../workers/library.worker\";\nimport type * as ServerWorkerModule from \"../workers/server.worker\";\nimport type * as ClientWorkerModule from \"../workers/client.worker\";\nimport type * as DtsWorkerModule from \"../workers/dts.worker\";\nimport { Capacitor } from \"../capacitor/capacitor\";\nimport { Electron } from \"../electron/electron\";\nimport { copySrcFiles } from \"../utils/copy-src\";\n\n//#region Types\n\n/**\n * Build \uBA85\uB839 \uC635\uC158\n */\nexport interface BuildOptions {\n /** \uBE4C\uB4DC\uD560 \uD328\uD0A4\uC9C0 \uD544\uD130 (\uBE48 \uBC30\uC5F4\uC774\uBA74 \uBAA8\uB4E0 \uD328\uD0A4\uC9C0) */\n targets: string[];\n /** sd.config.ts\uC5D0 \uC804\uB2EC\uD560 \uCD94\uAC00 \uC635\uC158 */\n options: string[];\n}\n\n/**\n * \uBE4C\uB4DC \uACB0\uACFC\n */\ninterface BuildResult {\n name: string;\n target: string;\n type: \"js\" | \"dts\" | \"vite\" | \"capacitor\" | \"electron\";\n success: boolean;\n errors?: string[];\n diagnostics?: ts.Diagnostic[];\n}\n\n/**\n * \uD328\uD0A4\uC9C0 \uBD84\uB958 \uACB0\uACFC\n */\ninterface ClassifiedPackages {\n /** node/browser/neutral \uD0C0\uAC9F (JS + dts) */\n buildPackages: Array<{ name: string; config: SdBuildPackageConfig }>;\n /** client \uD0C0\uAC9F (Vite build + typecheck) */\n clientPackages: Array<{ name: string; config: SdClientPackageConfig }>;\n /** server \uD0C0\uAC9F (JS \uBE4C\uB4DC, dts \uC81C\uC678) */\n serverPackages: Array<{ name: string; config: SdServerPackageConfig }>;\n}\n\n//#endregion\n\n//#region Utilities\n\n/**\n * \uD328\uD0A4\uC9C0\uB97C \uD0C0\uAC9F\uBCC4\uB85C \uBD84\uB958\n * - node/browser/neutral: buildPackages (JS + dts)\n * - client: clientPackages (Vite build + typecheck)\n * - server: serverPackages (JS \uBE4C\uB4DC, dts \uC81C\uC678)\n * - scripts: \uC81C\uC678\n */\nfunction classifyPackages(\n packages: Record<\n string,\n SdBuildPackageConfig | SdClientPackageConfig | SdServerPackageConfig | { target: \"scripts\" } | undefined\n >,\n targets: string[],\n): ClassifiedPackages {\n const buildPackages: ClassifiedPackages[\"buildPackages\"] = [];\n const clientPackages: ClassifiedPackages[\"clientPackages\"] = [];\n const serverPackages: ClassifiedPackages[\"serverPackages\"] = [];\n\n for (const [name, config] of Object.entries(packages)) {\n if (config == null) continue;\n if (config.target === \"scripts\") continue;\n\n // targets\uAC00 \uC9C0\uC815\uB418\uBA74 \uD574\uB2F9 \uD328\uD0A4\uC9C0\uB9CC \uD3EC\uD568\n if (targets.length > 0 && !targets.includes(name)) continue;\n\n if (config.target === \"client\") {\n clientPackages.push({ name, config });\n } else if (config.target === \"server\") {\n serverPackages.push({ name, config });\n } else {\n buildPackages.push({ name, config });\n }\n }\n\n return { buildPackages, clientPackages, serverPackages };\n}\n\n/**\n * dist \uD3F4\uB354 \uC0AD\uC81C\n */\nasync function cleanDistFolders(cwd: string, packageNames: string[]): Promise<void> {\n await Promise.all(packageNames.map((name) => fsRm(path.join(cwd, \"packages\", name, \"dist\"))));\n}\n\n//#endregion\n\n//#region Main\n\n/**\n * \uD504\uB85C\uB355\uC158 \uBE4C\uB4DC\uB97C \uC2E4\uD589\uD55C\uB2E4.\n *\n * - `sd.config.ts`\uB97C \uB85C\uB4DC\uD558\uC5EC \uD328\uD0A4\uC9C0\uBCC4 \uBE4C\uB4DC \uD0C0\uAC9F \uC815\uBCF4 \uD655\uC778 (\uD544\uC218)\n * - lint \uC2E4\uD589\n * - dist \uD3F4\uB354 \uC815\uB9AC (clean build)\n * - `node`/`browser`/`neutral` \uD0C0\uAC9F: esbuild JS \uBE4C\uB4DC + dts \uC0DD\uC131 (\uD0C0\uC785\uCCB4\uD06C \uD3EC\uD568)\n * - `client` \uD0C0\uAC9F: Vite production \uBE4C\uB4DC + typecheck (dts \uBD88\uD544\uC694)\n * - \uD558\uB098\uB77C\uB3C4 \uC2E4\uD328\uD558\uBA74 `process.exitCode = 1` \uC124\uC815\n *\n * @param options - build \uC2E4\uD589 \uC635\uC158\n * @returns \uC644\uB8CC \uC2DC resolve\n */\nexport async function runBuild(options: BuildOptions): Promise<void> {\n const { targets } = options;\n const cwd = process.cwd();\n const logger = consola.withTag(\"sd:cli:build\");\n\n logger.debug(\"\uBE4C\uB4DC \uC2DC\uC791\", { targets });\n\n // sd.config.ts \uB85C\uB4DC\n let sdConfig: SdConfig;\n try {\n sdConfig = await loadSdConfig({ cwd, dev: false, opt: options.options });\n logger.debug(\"sd.config.ts \uB85C\uB4DC \uC644\uB8CC\");\n } catch (err) {\n consola.error(`sd.config.ts \uB85C\uB4DC \uC2E4\uD328: ${err instanceof Error ? err.message : err}`);\n process.exitCode = 1;\n return;\n }\n\n // replaceDeps \uC124\uC815\uC774 \uC788\uC73C\uBA74 symlink \uAD50\uCCB4\n if (sdConfig.replaceDeps != null) {\n await setupReplaceDeps(cwd, sdConfig.replaceDeps);\n }\n\n // VER, DEV \uD658\uACBD\uBCC0\uC218 \uC900\uBE44\n const version = await getVersion(cwd);\n const baseEnv = { VER: version, DEV: \"false\" };\n\n // \uD328\uD0A4\uC9C0 \uBD84\uB958\n const { buildPackages, clientPackages, serverPackages } = classifyPackages(sdConfig.packages, targets);\n const allPackageNames = [\n ...buildPackages.map((p) => p.name),\n ...clientPackages.map((p) => p.name),\n ...serverPackages.map((p) => p.name),\n ];\n\n if (allPackageNames.length === 0) {\n process.stdout.write(\"\u2714 \uBE4C\uB4DC\uD560 \uD328\uD0A4\uC9C0\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.\\n\");\n return;\n }\n\n logger.debug(\"\uD328\uD0A4\uC9C0 \uBD84\uB958 \uC644\uB8CC\", {\n buildPackages: buildPackages.map((p) => p.name),\n clientPackages: clientPackages.map((p) => p.name),\n serverPackages: serverPackages.map((p) => p.name),\n });\n\n // \uACB0\uACFC \uC218\uC9D1\n const results: BuildResult[] = [];\n // \uC5D0\uB7EC \uCD94\uC801 (\uAC1D\uCCB4\uB85C \uB798\uD551\uD558\uC5EC \uCF5C\uBC31 \uB0B4 \uC218\uC815 \uCD94\uC801 \uAC00\uB2A5\uD558\uAC8C \uD568)\n const state = { hasError: false };\n\n // Worker \uACBD\uB85C\n const libraryWorkerPath = import.meta.resolve(\"../workers/library.worker\");\n const serverWorkerPath = import.meta.resolve(\"../workers/server.worker\");\n const clientWorkerPath = import.meta.resolve(\"../workers/client.worker\");\n const dtsWorkerPath = import.meta.resolve(\"../workers/dts.worker\");\n\n // \uD30C\uC77C \uCE90\uC2DC (diagnostics \uCD9C\uB825\uC6A9)\n const fileCache = new Map<string, string>();\n\n // formatHost (diagnostics \uCD9C\uB825\uC6A9)\n const formatHost: ts.FormatDiagnosticsHost = {\n getCanonicalFileName: (f) => f,\n getCurrentDirectory: () => cwd,\n getNewLine: () => ts.sys.newLine,\n };\n\n // Lint \uC635\uC158 (\uC804\uCCB4 \uD328\uD0A4\uC9C0 \uB300\uC0C1)\n const lintOptions: LintOptions = {\n targets: allPackageNames.map((name) => `packages/${name}`),\n fix: false,\n timing: false,\n };\n\n // Listr \uAD6C\uC870: Lint \u2192 Clean \u2192 Build (\uC21C\uCC28)\n const mainListr = new Listr(\n [\n {\n title: \"Lint\",\n task: async () => {\n await runLint(lintOptions);\n // lint \uC5D0\uB7EC\uAC00 \uC788\uC73C\uBA74 process.exitCode\uAC00 1\uB85C \uC124\uC815\uB428\n if (process.exitCode === 1) {\n state.hasError = true;\n }\n },\n },\n {\n title: \"Clean\",\n task: async () => {\n await cleanDistFolders(cwd, allPackageNames);\n },\n },\n {\n title: \"Build\",\n task: (_, task) => {\n const buildTasks: ListrTask[] = [];\n\n // buildPackages: JS \uBE4C\uB4DC + dts \uC0DD\uC131\n for (const { name, config } of buildPackages) {\n const pkgDir = path.join(cwd, \"packages\", name);\n const env: TypecheckEnv = config.target === \"node\" ? \"node\" : \"browser\";\n\n buildTasks.push({\n title: `${name} (${config.target})`,\n task: async () => {\n // JS \uBE4C\uB4DC\uC640 DTS \uC0DD\uC131\uC744 \uBCD1\uB82C \uC2E4\uD589\n const libraryWorker: WorkerProxy<typeof LibraryWorkerModule> =\n Worker.create<typeof LibraryWorkerModule>(libraryWorkerPath);\n const dtsWorker: WorkerProxy<typeof DtsWorkerModule> =\n Worker.create<typeof DtsWorkerModule>(dtsWorkerPath);\n\n try {\n const [buildResult, dtsResult] = await Promise.all([\n // JS \uBE4C\uB4DC\n libraryWorker.build({ name, config, cwd, pkgDir }),\n // DTS \uC0DD\uC131\n dtsWorker.buildDts({ name, cwd, pkgDir, env, emit: true }),\n ]);\n\n // JS \uBE4C\uB4DC \uACB0\uACFC \uCC98\uB9AC\n results.push({\n name,\n target: config.target,\n type: \"js\",\n success: buildResult.success,\n errors: buildResult.errors,\n });\n if (!buildResult.success) state.hasError = true;\n\n // DTS \uACB0\uACFC \uCC98\uB9AC\n const diagnostics = dtsResult.diagnostics.map((d) => deserializeDiagnostic(d, fileCache));\n results.push({\n name,\n target: config.target,\n type: \"dts\",\n success: dtsResult.success,\n errors: dtsResult.errors,\n diagnostics,\n });\n if (!dtsResult.success) state.hasError = true;\n } finally {\n await Promise.all([libraryWorker.terminate(), dtsWorker.terminate()]);\n }\n\n // copySrc \uD30C\uC77C \uBCF5\uC0AC\n if (config.copySrc != null && config.copySrc.length > 0) {\n await copySrcFiles(pkgDir, config.copySrc);\n }\n },\n });\n }\n\n // clientPackages: Vite \uBE4C\uB4DC + typecheck + Capacitor \uBE4C\uB4DC\n for (const { name, config } of clientPackages) {\n const pkgDir = path.join(cwd, \"packages\", name);\n\n buildTasks.push({\n title: `${name} (client)`,\n task: async () => {\n // Vite \uBE4C\uB4DC\uC640 \uD0C0\uC785\uCCB4\uD06C\uB97C \uBCD1\uB82C \uC2E4\uD589\n const clientWorker: WorkerProxy<typeof ClientWorkerModule> =\n Worker.create<typeof ClientWorkerModule>(clientWorkerPath);\n const dtsWorker: WorkerProxy<typeof DtsWorkerModule> =\n Worker.create<typeof DtsWorkerModule>(dtsWorkerPath);\n\n try {\n const clientConfig: SdClientPackageConfig = {\n ...config,\n env: { ...baseEnv, ...config.env },\n };\n const [clientResult, dtsResult] = await Promise.all([\n // Vite production \uBE4C\uB4DC\n clientWorker.build({ name, config: clientConfig, cwd, pkgDir }),\n // typecheck (dts \uC5C6\uC774)\n dtsWorker.buildDts({\n name,\n cwd,\n pkgDir,\n env: \"browser\",\n emit: false,\n }),\n ]);\n\n // Vite \uBE4C\uB4DC \uACB0\uACFC \uCC98\uB9AC\n results.push({\n name,\n target: \"client\",\n type: \"vite\",\n success: clientResult.success,\n errors: clientResult.errors,\n });\n if (!clientResult.success) state.hasError = true;\n\n // \uD0C0\uC785\uCCB4\uD06C \uACB0\uACFC \uCC98\uB9AC\n const diagnostics = dtsResult.diagnostics.map((d) => deserializeDiagnostic(d, fileCache));\n results.push({\n name,\n target: \"client\",\n type: \"dts\",\n success: dtsResult.success,\n errors: dtsResult.errors,\n diagnostics,\n });\n if (!dtsResult.success) state.hasError = true;\n } finally {\n await Promise.all([clientWorker.terminate(), dtsWorker.terminate()]);\n }\n\n // Capacitor \uBE4C\uB4DC (\uC124\uC815\uC774 \uC788\uB294 \uACBD\uC6B0\uB9CC)\n if (config.capacitor != null) {\n const outPath = path.join(pkgDir, \"dist\");\n try {\n const cap = await Capacitor.create(pkgDir, config.capacitor);\n await cap.initialize();\n await cap.build(outPath);\n results.push({\n name,\n target: \"client\",\n type: \"capacitor\",\n success: true,\n });\n } catch (err) {\n results.push({\n name,\n target: \"client\",\n type: \"capacitor\",\n success: false,\n errors: [err instanceof Error ? err.message : String(err)],\n });\n state.hasError = true;\n }\n }\n\n // Electron \uBE4C\uB4DC (\uC124\uC815\uC774 \uC788\uB294 \uACBD\uC6B0\uB9CC)\n if (config.electron != null) {\n const outPath = path.join(pkgDir, \"dist\");\n try {\n const electron = await Electron.create(pkgDir, config.electron);\n await electron.initialize();\n await electron.build(outPath);\n results.push({\n name,\n target: \"client\",\n type: \"electron\",\n success: true,\n });\n } catch (err) {\n results.push({\n name,\n target: \"client\",\n type: \"electron\",\n success: false,\n errors: [err instanceof Error ? err.message : String(err)],\n });\n state.hasError = true;\n }\n }\n },\n });\n }\n\n // serverPackages: JS \uBE4C\uB4DC\uB9CC (dts \uC0DD\uC131 \uC81C\uC678)\n for (const { name, config } of serverPackages) {\n const pkgDir = path.join(cwd, \"packages\", name);\n\n buildTasks.push({\n title: `${name} (server)`,\n task: async () => {\n const serverWorker: WorkerProxy<typeof ServerWorkerModule> =\n Worker.create<typeof ServerWorkerModule>(serverWorkerPath);\n\n try {\n const buildResult = await serverWorker.build({\n name,\n cwd,\n pkgDir,\n env: { ...baseEnv, ...config.env },\n configs: config.configs,\n externals: config.externals,\n pm2: config.pm2,\n packageManager: config.packageManager,\n });\n\n results.push({\n name,\n target: \"server\",\n type: \"js\",\n success: buildResult.success,\n errors: buildResult.errors,\n });\n if (!buildResult.success) state.hasError = true;\n } finally {\n await serverWorker.terminate();\n }\n },\n });\n }\n\n return task.newListr(buildTasks, { concurrent: true, exitOnError: false });\n },\n },\n ],\n {\n concurrent: false,\n exitOnError: false,\n renderer: consola.level >= LogLevels.debug ? \"verbose\" : \"default\",\n },\n );\n\n try {\n await mainListr.run();\n } catch {\n // Listr \uB0B4\uBD80 \uC5D0\uB7EC\uB294 results\uC5D0 \uC774\uBBF8 \uC218\uC9D1\uB428\n }\n\n // \uACB0\uACFC \uCD9C\uB825\n const allDiagnostics: ts.Diagnostic[] = [];\n for (const result of results) {\n if (!result.success) {\n const typeLabel = result.type === \"dts\" ? \"dts\" : result.target;\n const errorLines: string[] = [`${result.name} (${typeLabel})`];\n if (result.errors != null) {\n for (const error of result.errors) {\n for (const line of error.split(\"\\n\")) {\n errorLines.push(` \u2192 ${line}`);\n }\n }\n }\n consola.error(errorLines.join(\"\\n\"));\n }\n if (result.diagnostics != null) {\n allDiagnostics.push(...result.diagnostics);\n }\n }\n\n // diagnostics \uCD9C\uB825 (\uC911\uBCF5 \uC81C\uAC70)\n if (allDiagnostics.length > 0) {\n const uniqueDiagnostics = ts.sortAndDeduplicateDiagnostics(allDiagnostics);\n const message = ts.formatDiagnosticsWithColorAndContext(uniqueDiagnostics, formatHost);\n process.stdout.write(message);\n }\n\n // \uACB0\uACFC \uB85C\uADF8 \uCD9C\uB825\n if (state.hasError) {\n logger.error(\"\uBE4C\uB4DC \uC2E4\uD328\");\n process.exitCode = 1;\n } else {\n logger.info(\"\uBE4C\uB4DC \uC644\uB8CC\");\n }\n}\n\n//#endregion\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -184,9 +184,9 @@ export interface SdServerPackageConfig {
|
|
|
184
184
|
name?: string;
|
|
185
185
|
/** PM2 watch에서 제외할 경로 */
|
|
186
186
|
ignoreWatchPaths?: string[];
|
|
187
|
-
/** true면 interpreter 경로 생략 (시스템 PATH의 node 사용) */
|
|
188
|
-
noInterpreter?: boolean;
|
|
189
187
|
};
|
|
188
|
+
/** Package manager to use (affects mise.toml or volta settings generation) */
|
|
189
|
+
packageManager?: "volta" | "mise";
|
|
190
190
|
}
|
|
191
191
|
/**
|
|
192
192
|
* 스크립트 전용 패키지 설정 (watch/typecheck 제외)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-config.types.d.ts","sourceRoot":"","sources":["../src/sd-config.types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sd-config.types.d.ts","sourceRoot":"","sources":["../src/sd-config.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,8 +15,9 @@ export interface ServerBuildInfo {
|
|
|
15
15
|
pm2?: {
|
|
16
16
|
name?: string;
|
|
17
17
|
ignoreWatchPaths?: string[];
|
|
18
|
-
noInterpreter?: boolean;
|
|
19
18
|
};
|
|
19
|
+
/** Package manager to use (affects mise.toml or volta settings generation) */
|
|
20
|
+
packageManager?: "volta" | "mise";
|
|
20
21
|
}
|
|
21
22
|
/**
|
|
22
23
|
* Server 빌드 결과
|
|
@@ -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":"AAeA;;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;CACnB;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;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;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;AAiMD;;GAEG;AACH,iBAAe,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA6CtE;AAKD;;;;GAIG;AACH,iBAAe,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA8E9D;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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import path from "path";
|
|
2
2
|
import fs from "fs";
|
|
3
|
+
import cp from "child_process";
|
|
3
4
|
import esbuild from "esbuild";
|
|
4
5
|
import { createWorker } from "@simplysm/core-node";
|
|
5
6
|
import { consola } from "consola";
|
|
@@ -50,20 +51,26 @@ function generateProductionFiles(info, externals) {
|
|
|
50
51
|
}
|
|
51
52
|
distPkgJson["dependencies"] = deps;
|
|
52
53
|
}
|
|
54
|
+
if (info.packageManager === "volta") {
|
|
55
|
+
const nodeVersion = cp.execSync("node -v").toString().trim();
|
|
56
|
+
distPkgJson["volta"] = { node: nodeVersion };
|
|
57
|
+
}
|
|
53
58
|
fs.writeFileSync(path.join(distDir, "package.json"), JSON.stringify(distPkgJson, void 0, 2));
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
if (info.packageManager === "mise") {
|
|
60
|
+
logger.debug("GEN mise.toml...");
|
|
61
|
+
const rootMiseTomlPath = path.join(info.cwd, "mise.toml");
|
|
62
|
+
let nodeVersion = "20";
|
|
63
|
+
if (fs.existsSync(rootMiseTomlPath)) {
|
|
64
|
+
const miseContent = fs.readFileSync(rootMiseTomlPath, "utf-8");
|
|
65
|
+
const match = /node\s*=\s*"([^"]+)"/.exec(miseContent);
|
|
66
|
+
if (match != null) {
|
|
67
|
+
nodeVersion = match[1];
|
|
68
|
+
}
|
|
62
69
|
}
|
|
63
|
-
|
|
64
|
-
fs.writeFileSync(path.join(distDir, "mise.toml"), `[tools]
|
|
70
|
+
fs.writeFileSync(path.join(distDir, "mise.toml"), `[tools]
|
|
65
71
|
node = "${nodeVersion}"
|
|
66
72
|
`);
|
|
73
|
+
}
|
|
67
74
|
logger.debug("GEN openssl.cnf...");
|
|
68
75
|
fs.writeFileSync(
|
|
69
76
|
path.join(distDir, "openssl.cnf"),
|
|
@@ -98,11 +105,10 @@ node = "${nodeVersion}"
|
|
|
98
105
|
const envObj = {
|
|
99
106
|
NODE_ENV: "production",
|
|
100
107
|
TZ: "Asia/Seoul",
|
|
101
|
-
SD_VERSION: pkgJson.version,
|
|
102
108
|
...info.env ?? {}
|
|
103
109
|
};
|
|
104
110
|
const envStr = JSON.stringify(envObj, void 0, 4);
|
|
105
|
-
const interpreterLine = info.
|
|
111
|
+
const interpreterLine = info.packageManager === "volta" ? "" : ` interpreter: cp.execSync("mise which node").toString().trim(),
|
|
106
112
|
`;
|
|
107
113
|
const pm2Config = [
|
|
108
114
|
`const cp = require("child_process");`,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/workers/server.worker.ts"],
|
|
4
|
-
"sourcesContent": ["import path from \"path\";\nimport fs from \"fs\";\nimport esbuild from \"esbuild\";\nimport { createWorker } from \"@simplysm/core-node\";\nimport { consola } from \"consola\";\nimport { parseRootTsconfig, getPackageSourceFiles, getCompilerOptionsForPackage } from \"../utils/tsconfig\";\nimport {\n createServerEsbuildOptions,\n collectUninstalledOptionalPeerDeps,\n collectNativeModuleExternals,\n} from \"../utils/esbuild-config\";\n\n//#region Types\n\n/**\n * Server \uBE4C\uB4DC \uC815\uBCF4 (\uC77C\uD68C\uC131 \uBE4C\uB4DC\uC6A9)\n */\nexport interface ServerBuildInfo {\n name: string;\n cwd: string;\n pkgDir: string;\n /** \uBE4C\uB4DC \uC2DC \uCE58\uD658\uD560 \uD658\uACBD\uBCC0\uC218 */\n env?: Record<string, string>;\n /** \uB7F0\uD0C0\uC784 \uC124\uC815 (dist/.config.json\uC5D0 \uAE30\uB85D) */\n configs?: Record<string, unknown>;\n /** sd.config.ts\uC5D0\uC11C \uC218\uB3D9 \uC9C0\uC815\uD55C external \uBAA8\uB4C8 */\n externals?: string[];\n /** PM2 \uC124\uC815 (\uC9C0\uC815 \uC2DC dist/pm2.config.cjs \uC0DD\uC131) */\n pm2?: {\n name?: string;\n ignoreWatchPaths?: string[];\n noInterpreter?: boolean;\n };\n}\n\n/**\n * Server \uBE4C\uB4DC \uACB0\uACFC\n */\nexport interface ServerBuildResult {\n success: boolean;\n mainJsPath: string;\n errors?: string[];\n}\n\n/**\n * Server Watch \uC815\uBCF4\n */\nexport interface ServerWatchInfo {\n name: string;\n cwd: string;\n pkgDir: string;\n /** \uBE4C\uB4DC \uC2DC \uCE58\uD658\uD560 \uD658\uACBD\uBCC0\uC218 */\n env?: Record<string, string>;\n /** \uB7F0\uD0C0\uC784 \uC124\uC815 (dist/.config.json\uC5D0 \uAE30\uB85D) */\n configs?: Record<string, unknown>;\n /** sd.config.ts\uC5D0\uC11C \uC218\uB3D9 \uC9C0\uC815\uD55C external \uBAA8\uB4C8 */\n externals?: string[];\n}\n\n/**\n * \uBE4C\uB4DC \uC774\uBCA4\uD2B8\n */\nexport interface ServerBuildEvent {\n success: boolean;\n mainJsPath: string;\n errors?: string[];\n}\n\n/**\n * \uC5D0\uB7EC \uC774\uBCA4\uD2B8\n */\nexport interface ServerErrorEvent {\n message: string;\n}\n\n/**\n * Worker \uC774\uBCA4\uD2B8 \uD0C0\uC785\n */\nexport interface ServerWorkerEvents extends Record<string, unknown> {\n buildStart: Record<string, never>;\n build: ServerBuildEvent;\n error: ServerErrorEvent;\n}\n\n//#endregion\n\n//#region \uB9AC\uC18C\uC2A4 \uAD00\uB9AC\n\nconst logger = consola.withTag(\"sd:cli:server:worker\");\n\n/** esbuild build context (\uC815\uB9AC \uB300\uC0C1) */\nlet esbuildContext: esbuild.BuildContext | undefined;\n\n/**\n * \uB9AC\uC18C\uC2A4 \uC815\uB9AC\n */\nasync function cleanup(): Promise<void> {\n // \uC804\uC5ED \uBCC0\uC218\uB97C \uC784\uC2DC \uBCC0\uC218\uB85C \uCEA1\uCC98 \uD6C4 \uCD08\uAE30\uD654\n // (Promise.all \uB300\uAE30 \uC911 \uB2E4\uB978 \uD638\uCD9C\uC5D0\uC11C \uC804\uC5ED \uBCC0\uC218\uB97C \uC218\uC815\uD560 \uC218 \uC788\uC73C\uBBC0\uB85C)\n const contextToDispose = esbuildContext;\n esbuildContext = undefined;\n\n if (contextToDispose != null) {\n await contextToDispose.dispose();\n }\n}\n\n/**\n * \uC138 \uAC00\uC9C0 \uC18C\uC2A4\uC5D0\uC11C external \uBAA8\uB4C8\uC744 \uC218\uC9D1\uD558\uC5EC \uD569\uCE5C\uB2E4.\n * 1. \uBBF8\uC124\uCE58 optional peer deps\n * 2. binding.gyp \uB124\uC774\uD2F0\uBE0C \uBAA8\uB4C8\n * 3. sd.config.ts \uC218\uB3D9 \uC9C0\uC815\n */\nfunction collectAllExternals(pkgDir: string, manualExternals?: string[]): string[] {\n const optionalPeerDeps = collectUninstalledOptionalPeerDeps(pkgDir);\n const nativeModules = collectNativeModuleExternals(pkgDir);\n const manual = manualExternals ?? [];\n\n const merged = [...new Set([...optionalPeerDeps, ...nativeModules, ...manual])];\n\n if (optionalPeerDeps.length > 0) {\n logger.debug(\"\uBBF8\uC124\uCE58 optional peer deps (external):\", optionalPeerDeps);\n }\n if (nativeModules.length > 0) {\n logger.debug(\"\uB124\uC774\uD2F0\uBE0C \uBAA8\uB4C8 (external):\", nativeModules);\n }\n if (manual.length > 0) {\n logger.debug(\"\uC218\uB3D9 \uC9C0\uC815 (external):\", manual);\n }\n\n return merged;\n}\n\n/**\n * \uD504\uB85C\uB355\uC158 \uBC30\uD3EC\uC6A9 \uD30C\uC77C \uC0DD\uC131 (\uC77C\uD68C\uC131 \uBE4C\uB4DC\uC5D0\uC11C\uB9CC \uD638\uCD9C)\n *\n * - dist/package.json: external \uBAA8\uB4C8\uC744 dependencies\uB85C \uD3EC\uD568\n * - dist/mise.toml: Node \uBC84\uC804 \uC9C0\uC815\n * - dist/openssl.cnf: \uB808\uAC70\uC2DC OpenSSL \uD504\uB85C\uBC14\uC774\uB354 \uD65C\uC131\uD654\n * - dist/pm2.config.cjs: PM2 \uD504\uB85C\uC138\uC2A4 \uC124\uC815 (pm2 \uC635\uC158\uC774 \uC788\uC744 \uB54C\uB9CC)\n */\nfunction generateProductionFiles(info: ServerBuildInfo, externals: string[]): void {\n const distDir = path.join(info.pkgDir, \"dist\");\n const pkgJson = JSON.parse(fs.readFileSync(path.join(info.pkgDir, \"package.json\"), \"utf-8\"));\n\n // dist/package.json\n logger.debug(\"GEN package.json...\");\n const distPkgJson: Record<string, unknown> = {\n name: pkgJson.name,\n version: pkgJson.version,\n type: pkgJson.type,\n };\n if (externals.length > 0) {\n const deps: Record<string, string> = {};\n for (const ext of externals) {\n deps[ext] = \"*\";\n }\n distPkgJson[\"dependencies\"] = deps;\n }\n fs.writeFileSync(path.join(distDir, \"package.json\"), JSON.stringify(distPkgJson, undefined, 2));\n\n // dist/mise.toml\n logger.debug(\"GEN mise.toml...\");\n const rootMiseTomlPath = path.join(info.cwd, \"mise.toml\");\n let nodeVersion = \"20\";\n if (fs.existsSync(rootMiseTomlPath)) {\n const miseContent = fs.readFileSync(rootMiseTomlPath, \"utf-8\");\n const match = /node\\s*=\\s*\"([^\"]+)\"/.exec(miseContent);\n if (match != null) {\n nodeVersion = match[1];\n }\n }\n fs.writeFileSync(path.join(distDir, \"mise.toml\"), `[tools]\\nnode = \"${nodeVersion}\"\\n`);\n\n // dist/openssl.cnf\n logger.debug(\"GEN openssl.cnf...\");\n fs.writeFileSync(\n path.join(distDir, \"openssl.cnf\"),\n [\n \"nodejs_conf = openssl_init\",\n \"\",\n \"[openssl_init]\",\n \"providers = provider_sect\",\n \"ssl_conf = ssl_sect\",\n \"\",\n \"[provider_sect]\",\n \"default = default_sect\",\n \"legacy = legacy_sect\",\n \"\",\n \"[default_sect]\",\n \"activate = 1\",\n \"\",\n \"[legacy_sect]\",\n \"activate = 1\",\n \"\",\n \"[ssl_sect]\",\n \"system_default = system_default_sect\",\n \"\",\n \"[system_default_sect]\",\n \"Options = UnsafeLegacyRenegotiation\",\n ].join(\"\\n\"),\n );\n\n // dist/pm2.config.cjs (pm2 \uC124\uC815\uC774 \uC788\uC744 \uB54C\uB9CC)\n if (info.pm2 != null) {\n logger.debug(\"GEN pm2.config.cjs...\");\n\n const pm2Name = info.pm2.name ?? pkgJson.name.replace(/@/g, \"\").replace(/[/\\\\]/g, \"-\");\n const ignoreWatch = JSON.stringify([\"node_modules\", \"www\", ...(info.pm2.ignoreWatchPaths ?? [])]);\n const envObj: Record<string, string> = {\n NODE_ENV: \"production\",\n TZ: \"Asia/Seoul\",\n SD_VERSION: pkgJson.version,\n ...(info.env ?? {}),\n };\n const envStr = JSON.stringify(envObj, undefined, 4);\n\n const interpreterLine = info.pm2.noInterpreter\n ? \"\"\n : ` interpreter: cp.execSync(\"mise which node\").toString().trim(),\\n`;\n\n const pm2Config = [\n `const cp = require(\"child_process\");`,\n ``,\n `module.exports = {`,\n ` name: ${JSON.stringify(pm2Name)},`,\n ` script: \"main.js\",`,\n ` watch: true,`,\n ` watch_delay: 2000,`,\n ` ignore_watch: ${ignoreWatch},`,\n interpreterLine.trimEnd(),\n ` interpreter_args: \"--openssl-config=openssl.cnf\",`,\n ` env: ${envStr.replace(/\\n/g, \"\\n \")},`,\n ` arrayProcess: \"concat\",`,\n ` useDelTargetNull: true,`,\n `};`,\n ]\n .filter((line) => line !== \"\")\n .join(\"\\n\");\n\n fs.writeFileSync(path.join(distDir, \"pm2.config.cjs\"), pm2Config);\n }\n}\n\n// \uD504\uB85C\uC138\uC2A4 \uC885\uB8CC \uC804 \uB9AC\uC18C\uC2A4 \uC815\uB9AC (SIGTERM/SIGINT)\n// \uC8FC\uC758: worker.terminate()\uB294 \uC774 \uD578\uB4E4\uB7EC\uB4E4\uC744 \uD638\uCD9C\uD558\uC9C0 \uC54A\uACE0 \uC989\uC2DC \uC885\uB8CC\uB428.\n// \uADF8\uB7EC\uB098 watch \uBAA8\uB4DC\uC5D0\uC11C \uC815\uC0C1 \uC885\uB8CC\uB294 \uBA54\uC778 \uD504\uB85C\uC138\uC2A4\uC758 SIGINT/SIGTERM\uC744 \uD1B5\uD574 \uC774\uB8E8\uC5B4\uC9C0\uBBC0\uB85C \uBB38\uC81C\uC5C6\uC74C.\nprocess.on(\"SIGTERM\", () => {\n cleanup()\n .catch((err) => {\n logger.error(\"cleanup \uC2E4\uD328\", err);\n })\n .finally(() => {\n process.exit(0);\n });\n});\n\nprocess.on(\"SIGINT\", () => {\n cleanup()\n .catch((err) => {\n logger.error(\"cleanup \uC2E4\uD328\", err);\n })\n .finally(() => {\n process.exit(0);\n });\n});\n\n//#endregion\n\n//#region Worker\n\n/**\n * \uC77C\uD68C\uC131 \uBE4C\uB4DC\n */\nasync function build(info: ServerBuildInfo): Promise<ServerBuildResult> {\n const mainJsPath = path.join(info.pkgDir, \"dist\", \"main.js\");\n\n try {\n // tsconfig \uD30C\uC2F1\n const parsedConfig = parseRootTsconfig(info.cwd);\n const entryPoints = getPackageSourceFiles(info.pkgDir, parsedConfig);\n\n // \uC11C\uBC84\uB294 node \uD658\uACBD\n const compilerOptions = await getCompilerOptionsForPackage(parsedConfig.options, \"node\", info.pkgDir);\n\n // \uBAA8\uB4E0 external \uC218\uC9D1 (optional peer deps + native modules + manual)\n const external = collectAllExternals(info.pkgDir, info.externals);\n\n // esbuild \uC77C\uD68C\uC131 \uBE4C\uB4DC\n const esbuildOptions = createServerEsbuildOptions({\n pkgDir: info.pkgDir,\n entryPoints,\n compilerOptions,\n env: info.env,\n external,\n });\n\n const result = await esbuild.build(esbuildOptions);\n\n // Generate .config.json\n const confDistPath = path.join(info.pkgDir, \"dist\", \".config.json\");\n fs.writeFileSync(confDistPath, JSON.stringify(info.configs ?? {}, undefined, 2));\n\n // Generate production files (package.json, mise.toml, openssl.cnf, pm2.config.cjs)\n generateProductionFiles(info, external);\n\n const errors = result.errors.map((e) => e.text);\n return {\n success: result.errors.length === 0,\n mainJsPath,\n errors: errors.length > 0 ? errors : undefined,\n };\n } catch (err) {\n return {\n success: false,\n mainJsPath,\n errors: [err instanceof Error ? err.message : String(err)],\n };\n }\n}\n\n/** startWatch \uD638\uCD9C \uC5EC\uBD80 \uD50C\uB798\uADF8 */\nlet isWatchStarted = false;\n\n/**\n * watch \uC2DC\uC791\n * @remarks \uC774 \uD568\uC218\uB294 Worker\uB2F9 \uD55C \uBC88\uB9CC \uD638\uCD9C\uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.\n * @throws \uC774\uBBF8 watch\uAC00 \uC2DC\uC791\uB41C \uACBD\uC6B0\n */\nasync function startWatch(info: ServerWatchInfo): Promise<void> {\n if (isWatchStarted) {\n throw new Error(\"startWatch\uB294 Worker\uB2F9 \uD55C \uBC88\uB9CC \uD638\uCD9C\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.\");\n }\n isWatchStarted = true;\n\n try {\n // tsconfig \uD30C\uC2F1\n const parsedConfig = parseRootTsconfig(info.cwd);\n const entryPoints = getPackageSourceFiles(info.pkgDir, parsedConfig);\n\n // \uC11C\uBC84\uB294 node \uD658\uACBD\n const compilerOptions = await getCompilerOptionsForPackage(parsedConfig.options, \"node\", info.pkgDir);\n\n const mainJsPath = path.join(info.pkgDir, \"dist\", \"main.js\");\n\n // \uCCAB \uBC88\uC9F8 \uBE4C\uB4DC \uC644\uB8CC \uB300\uAE30\uB97C \uC704\uD55C Promise\n let resolveFirstBuild!: () => void;\n const firstBuildPromise = new Promise<void>((resolve) => {\n resolveFirstBuild = resolve;\n });\n\n let isFirstBuild = true;\n\n // \uBAA8\uB4E0 external \uC218\uC9D1 (optional peer deps + native modules + manual)\n const external = collectAllExternals(info.pkgDir, info.externals);\n\n // esbuild \uAE30\uBCF8 \uC635\uC158 \uC0DD\uC131\n const baseOptions = createServerEsbuildOptions({\n pkgDir: info.pkgDir,\n entryPoints,\n compilerOptions,\n env: info.env,\n external,\n });\n\n // watch\uC6A9 \uD50C\uB7EC\uADF8\uC778 \uCD94\uAC00\n esbuildContext = await esbuild.context({\n ...baseOptions,\n plugins: [\n {\n name: \"watch-notify\",\n setup(pluginBuild) {\n pluginBuild.onStart(() => {\n sender.send(\"buildStart\", {});\n });\n\n pluginBuild.onEnd((result) => {\n const errors = result.errors.map((e) => e.text);\n const success = result.errors.length === 0;\n\n // Generate .config.json on first successful build\n if (isFirstBuild && success) {\n const confDistPath = path.join(info.pkgDir, \"dist\", \".config.json\");\n fs.writeFileSync(confDistPath, JSON.stringify(info.configs ?? {}, undefined, 2));\n }\n\n sender.send(\"build\", { success, mainJsPath, errors: errors.length > 0 ? errors : undefined });\n\n if (isFirstBuild) {\n isFirstBuild = false;\n resolveFirstBuild();\n }\n });\n },\n },\n ],\n });\n\n await esbuildContext.watch();\n\n // \uCCAB \uBC88\uC9F8 \uBE4C\uB4DC \uC644\uB8CC \uB300\uAE30\n await firstBuildPromise;\n } catch (err) {\n sender.send(\"error\", {\n message: err instanceof Error ? err.message : String(err),\n });\n }\n}\n\n/**\n * watch \uC911\uC9C0\n * @remarks esbuild context\uB97C \uC815\uB9AC\uD569\uB2C8\uB2E4.\n */\nasync function stopWatch(): Promise<void> {\n await cleanup();\n}\n\nconst sender = createWorker<\n { build: typeof build; startWatch: typeof startWatch; stopWatch: typeof stopWatch },\n ServerWorkerEvents\n>({\n build,\n startWatch,\n stopWatch,\n});\n\nexport default sender;\n\n//#endregion\n"],
|
|
5
|
-
"mappings": "AAAA,OAAO,UAAU;AACjB,OAAO,QAAQ;AACf,OAAO,aAAa;AACpB,SAAS,oBAAoB;AAC7B,SAAS,eAAe;AACxB,SAAS,mBAAmB,uBAAuB,oCAAoC;AACvF;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;
|
|
4
|
+
"sourcesContent": ["import path from \"path\";\nimport fs from \"fs\";\nimport cp from \"child_process\";\nimport esbuild from \"esbuild\";\nimport { createWorker } from \"@simplysm/core-node\";\nimport { consola } from \"consola\";\nimport { parseRootTsconfig, getPackageSourceFiles, getCompilerOptionsForPackage } from \"../utils/tsconfig\";\nimport {\n createServerEsbuildOptions,\n collectUninstalledOptionalPeerDeps,\n collectNativeModuleExternals,\n} from \"../utils/esbuild-config\";\n\n//#region Types\n\n/**\n * Server \uBE4C\uB4DC \uC815\uBCF4 (\uC77C\uD68C\uC131 \uBE4C\uB4DC\uC6A9)\n */\nexport interface ServerBuildInfo {\n name: string;\n cwd: string;\n pkgDir: string;\n /** \uBE4C\uB4DC \uC2DC \uCE58\uD658\uD560 \uD658\uACBD\uBCC0\uC218 */\n env?: Record<string, string>;\n /** \uB7F0\uD0C0\uC784 \uC124\uC815 (dist/.config.json\uC5D0 \uAE30\uB85D) */\n configs?: Record<string, unknown>;\n /** sd.config.ts\uC5D0\uC11C \uC218\uB3D9 \uC9C0\uC815\uD55C external \uBAA8\uB4C8 */\n externals?: string[];\n /** PM2 \uC124\uC815 (\uC9C0\uC815 \uC2DC dist/pm2.config.cjs \uC0DD\uC131) */\n pm2?: {\n name?: string;\n ignoreWatchPaths?: string[];\n };\n /** Package manager to use (affects mise.toml or volta settings generation) */\n packageManager?: \"volta\" | \"mise\";\n}\n\n/**\n * Server \uBE4C\uB4DC \uACB0\uACFC\n */\nexport interface ServerBuildResult {\n success: boolean;\n mainJsPath: string;\n errors?: string[];\n}\n\n/**\n * Server Watch \uC815\uBCF4\n */\nexport interface ServerWatchInfo {\n name: string;\n cwd: string;\n pkgDir: string;\n /** \uBE4C\uB4DC \uC2DC \uCE58\uD658\uD560 \uD658\uACBD\uBCC0\uC218 */\n env?: Record<string, string>;\n /** \uB7F0\uD0C0\uC784 \uC124\uC815 (dist/.config.json\uC5D0 \uAE30\uB85D) */\n configs?: Record<string, unknown>;\n /** sd.config.ts\uC5D0\uC11C \uC218\uB3D9 \uC9C0\uC815\uD55C external \uBAA8\uB4C8 */\n externals?: string[];\n}\n\n/**\n * \uBE4C\uB4DC \uC774\uBCA4\uD2B8\n */\nexport interface ServerBuildEvent {\n success: boolean;\n mainJsPath: string;\n errors?: string[];\n}\n\n/**\n * \uC5D0\uB7EC \uC774\uBCA4\uD2B8\n */\nexport interface ServerErrorEvent {\n message: string;\n}\n\n/**\n * Worker \uC774\uBCA4\uD2B8 \uD0C0\uC785\n */\nexport interface ServerWorkerEvents extends Record<string, unknown> {\n buildStart: Record<string, never>;\n build: ServerBuildEvent;\n error: ServerErrorEvent;\n}\n\n//#endregion\n\n//#region \uB9AC\uC18C\uC2A4 \uAD00\uB9AC\n\nconst logger = consola.withTag(\"sd:cli:server:worker\");\n\n/** esbuild build context (\uC815\uB9AC \uB300\uC0C1) */\nlet esbuildContext: esbuild.BuildContext | undefined;\n\n/**\n * \uB9AC\uC18C\uC2A4 \uC815\uB9AC\n */\nasync function cleanup(): Promise<void> {\n // \uC804\uC5ED \uBCC0\uC218\uB97C \uC784\uC2DC \uBCC0\uC218\uB85C \uCEA1\uCC98 \uD6C4 \uCD08\uAE30\uD654\n // (Promise.all \uB300\uAE30 \uC911 \uB2E4\uB978 \uD638\uCD9C\uC5D0\uC11C \uC804\uC5ED \uBCC0\uC218\uB97C \uC218\uC815\uD560 \uC218 \uC788\uC73C\uBBC0\uB85C)\n const contextToDispose = esbuildContext;\n esbuildContext = undefined;\n\n if (contextToDispose != null) {\n await contextToDispose.dispose();\n }\n}\n\n/**\n * \uC138 \uAC00\uC9C0 \uC18C\uC2A4\uC5D0\uC11C external \uBAA8\uB4C8\uC744 \uC218\uC9D1\uD558\uC5EC \uD569\uCE5C\uB2E4.\n * 1. \uBBF8\uC124\uCE58 optional peer deps\n * 2. binding.gyp \uB124\uC774\uD2F0\uBE0C \uBAA8\uB4C8\n * 3. sd.config.ts \uC218\uB3D9 \uC9C0\uC815\n */\nfunction collectAllExternals(pkgDir: string, manualExternals?: string[]): string[] {\n const optionalPeerDeps = collectUninstalledOptionalPeerDeps(pkgDir);\n const nativeModules = collectNativeModuleExternals(pkgDir);\n const manual = manualExternals ?? [];\n\n const merged = [...new Set([...optionalPeerDeps, ...nativeModules, ...manual])];\n\n if (optionalPeerDeps.length > 0) {\n logger.debug(\"\uBBF8\uC124\uCE58 optional peer deps (external):\", optionalPeerDeps);\n }\n if (nativeModules.length > 0) {\n logger.debug(\"\uB124\uC774\uD2F0\uBE0C \uBAA8\uB4C8 (external):\", nativeModules);\n }\n if (manual.length > 0) {\n logger.debug(\"\uC218\uB3D9 \uC9C0\uC815 (external):\", manual);\n }\n\n return merged;\n}\n\n/**\n * \uD504\uB85C\uB355\uC158 \uBC30\uD3EC\uC6A9 \uD30C\uC77C \uC0DD\uC131 (\uC77C\uD68C\uC131 \uBE4C\uB4DC\uC5D0\uC11C\uB9CC \uD638\uCD9C)\n *\n * - dist/package.json: external \uBAA8\uB4C8\uC744 dependencies\uB85C \uD3EC\uD568 (volta \uC0AC\uC6A9 \uC2DC volta \uD544\uB4DC \uCD94\uAC00)\n * - dist/mise.toml: Node \uBC84\uC804 \uC9C0\uC815 (packageManager === \"mise\"\uC77C \uB54C\uB9CC)\n * - dist/openssl.cnf: \uB808\uAC70\uC2DC OpenSSL \uD504\uB85C\uBC14\uC774\uB354 \uD65C\uC131\uD654\n * - dist/pm2.config.cjs: PM2 \uD504\uB85C\uC138\uC2A4 \uC124\uC815 (pm2 \uC635\uC158\uC774 \uC788\uC744 \uB54C\uB9CC)\n */\nfunction generateProductionFiles(info: ServerBuildInfo, externals: string[]): void {\n const distDir = path.join(info.pkgDir, \"dist\");\n const pkgJson = JSON.parse(fs.readFileSync(path.join(info.pkgDir, \"package.json\"), \"utf-8\"));\n\n // dist/package.json\n logger.debug(\"GEN package.json...\");\n const distPkgJson: Record<string, unknown> = {\n name: pkgJson.name,\n version: pkgJson.version,\n type: pkgJson.type,\n };\n if (externals.length > 0) {\n const deps: Record<string, string> = {};\n for (const ext of externals) {\n deps[ext] = \"*\";\n }\n distPkgJson[\"dependencies\"] = deps;\n }\n if (info.packageManager === \"volta\") {\n const nodeVersion = cp.execSync(\"node -v\").toString().trim();\n distPkgJson[\"volta\"] = { node: nodeVersion };\n }\n fs.writeFileSync(path.join(distDir, \"package.json\"), JSON.stringify(distPkgJson, undefined, 2));\n\n // dist/mise.toml (packageManager === \"mise\"\uC77C \uB54C\uB9CC)\n if (info.packageManager === \"mise\") {\n logger.debug(\"GEN mise.toml...\");\n const rootMiseTomlPath = path.join(info.cwd, \"mise.toml\");\n let nodeVersion = \"20\";\n if (fs.existsSync(rootMiseTomlPath)) {\n const miseContent = fs.readFileSync(rootMiseTomlPath, \"utf-8\");\n const match = /node\\s*=\\s*\"([^\"]+)\"/.exec(miseContent);\n if (match != null) {\n nodeVersion = match[1];\n }\n }\n fs.writeFileSync(path.join(distDir, \"mise.toml\"), `[tools]\\nnode = \"${nodeVersion}\"\\n`);\n }\n\n // dist/openssl.cnf\n logger.debug(\"GEN openssl.cnf...\");\n fs.writeFileSync(\n path.join(distDir, \"openssl.cnf\"),\n [\n \"nodejs_conf = openssl_init\",\n \"\",\n \"[openssl_init]\",\n \"providers = provider_sect\",\n \"ssl_conf = ssl_sect\",\n \"\",\n \"[provider_sect]\",\n \"default = default_sect\",\n \"legacy = legacy_sect\",\n \"\",\n \"[default_sect]\",\n \"activate = 1\",\n \"\",\n \"[legacy_sect]\",\n \"activate = 1\",\n \"\",\n \"[ssl_sect]\",\n \"system_default = system_default_sect\",\n \"\",\n \"[system_default_sect]\",\n \"Options = UnsafeLegacyRenegotiation\",\n ].join(\"\\n\"),\n );\n\n // dist/pm2.config.cjs (pm2 \uC124\uC815\uC774 \uC788\uC744 \uB54C\uB9CC)\n if (info.pm2 != null) {\n logger.debug(\"GEN pm2.config.cjs...\");\n\n const pm2Name = info.pm2.name ?? pkgJson.name.replace(/@/g, \"\").replace(/[/\\\\]/g, \"-\");\n const ignoreWatch = JSON.stringify([\"node_modules\", \"www\", ...(info.pm2.ignoreWatchPaths ?? [])]);\n const envObj: Record<string, string> = {\n NODE_ENV: \"production\",\n TZ: \"Asia/Seoul\",\n ...(info.env ?? {}),\n };\n const envStr = JSON.stringify(envObj, undefined, 4);\n\n const interpreterLine =\n info.packageManager === \"volta\" ? \"\" : ` interpreter: cp.execSync(\"mise which node\").toString().trim(),\\n`;\n\n const pm2Config = [\n `const cp = require(\"child_process\");`,\n ``,\n `module.exports = {`,\n ` name: ${JSON.stringify(pm2Name)},`,\n ` script: \"main.js\",`,\n ` watch: true,`,\n ` watch_delay: 2000,`,\n ` ignore_watch: ${ignoreWatch},`,\n interpreterLine.trimEnd(),\n ` interpreter_args: \"--openssl-config=openssl.cnf\",`,\n ` env: ${envStr.replace(/\\n/g, \"\\n \")},`,\n ` arrayProcess: \"concat\",`,\n ` useDelTargetNull: true,`,\n `};`,\n ]\n .filter((line) => line !== \"\")\n .join(\"\\n\");\n\n fs.writeFileSync(path.join(distDir, \"pm2.config.cjs\"), pm2Config);\n }\n}\n\n// \uD504\uB85C\uC138\uC2A4 \uC885\uB8CC \uC804 \uB9AC\uC18C\uC2A4 \uC815\uB9AC (SIGTERM/SIGINT)\n// \uC8FC\uC758: worker.terminate()\uB294 \uC774 \uD578\uB4E4\uB7EC\uB4E4\uC744 \uD638\uCD9C\uD558\uC9C0 \uC54A\uACE0 \uC989\uC2DC \uC885\uB8CC\uB428.\n// \uADF8\uB7EC\uB098 watch \uBAA8\uB4DC\uC5D0\uC11C \uC815\uC0C1 \uC885\uB8CC\uB294 \uBA54\uC778 \uD504\uB85C\uC138\uC2A4\uC758 SIGINT/SIGTERM\uC744 \uD1B5\uD574 \uC774\uB8E8\uC5B4\uC9C0\uBBC0\uB85C \uBB38\uC81C\uC5C6\uC74C.\nprocess.on(\"SIGTERM\", () => {\n cleanup()\n .catch((err) => {\n logger.error(\"cleanup \uC2E4\uD328\", err);\n })\n .finally(() => {\n process.exit(0);\n });\n});\n\nprocess.on(\"SIGINT\", () => {\n cleanup()\n .catch((err) => {\n logger.error(\"cleanup \uC2E4\uD328\", err);\n })\n .finally(() => {\n process.exit(0);\n });\n});\n\n//#endregion\n\n//#region Worker\n\n/**\n * \uC77C\uD68C\uC131 \uBE4C\uB4DC\n */\nasync function build(info: ServerBuildInfo): Promise<ServerBuildResult> {\n const mainJsPath = path.join(info.pkgDir, \"dist\", \"main.js\");\n\n try {\n // tsconfig \uD30C\uC2F1\n const parsedConfig = parseRootTsconfig(info.cwd);\n const entryPoints = getPackageSourceFiles(info.pkgDir, parsedConfig);\n\n // \uC11C\uBC84\uB294 node \uD658\uACBD\n const compilerOptions = await getCompilerOptionsForPackage(parsedConfig.options, \"node\", info.pkgDir);\n\n // \uBAA8\uB4E0 external \uC218\uC9D1 (optional peer deps + native modules + manual)\n const external = collectAllExternals(info.pkgDir, info.externals);\n\n // esbuild \uC77C\uD68C\uC131 \uBE4C\uB4DC\n const esbuildOptions = createServerEsbuildOptions({\n pkgDir: info.pkgDir,\n entryPoints,\n compilerOptions,\n env: info.env,\n external,\n });\n\n const result = await esbuild.build(esbuildOptions);\n\n // Generate .config.json\n const confDistPath = path.join(info.pkgDir, \"dist\", \".config.json\");\n fs.writeFileSync(confDistPath, JSON.stringify(info.configs ?? {}, undefined, 2));\n\n // Generate production files (package.json, mise.toml, openssl.cnf, pm2.config.cjs)\n generateProductionFiles(info, external);\n\n const errors = result.errors.map((e) => e.text);\n return {\n success: result.errors.length === 0,\n mainJsPath,\n errors: errors.length > 0 ? errors : undefined,\n };\n } catch (err) {\n return {\n success: false,\n mainJsPath,\n errors: [err instanceof Error ? err.message : String(err)],\n };\n }\n}\n\n/** startWatch \uD638\uCD9C \uC5EC\uBD80 \uD50C\uB798\uADF8 */\nlet isWatchStarted = false;\n\n/**\n * watch \uC2DC\uC791\n * @remarks \uC774 \uD568\uC218\uB294 Worker\uB2F9 \uD55C \uBC88\uB9CC \uD638\uCD9C\uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.\n * @throws \uC774\uBBF8 watch\uAC00 \uC2DC\uC791\uB41C \uACBD\uC6B0\n */\nasync function startWatch(info: ServerWatchInfo): Promise<void> {\n if (isWatchStarted) {\n throw new Error(\"startWatch\uB294 Worker\uB2F9 \uD55C \uBC88\uB9CC \uD638\uCD9C\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.\");\n }\n isWatchStarted = true;\n\n try {\n // tsconfig \uD30C\uC2F1\n const parsedConfig = parseRootTsconfig(info.cwd);\n const entryPoints = getPackageSourceFiles(info.pkgDir, parsedConfig);\n\n // \uC11C\uBC84\uB294 node \uD658\uACBD\n const compilerOptions = await getCompilerOptionsForPackage(parsedConfig.options, \"node\", info.pkgDir);\n\n const mainJsPath = path.join(info.pkgDir, \"dist\", \"main.js\");\n\n // \uCCAB \uBC88\uC9F8 \uBE4C\uB4DC \uC644\uB8CC \uB300\uAE30\uB97C \uC704\uD55C Promise\n let resolveFirstBuild!: () => void;\n const firstBuildPromise = new Promise<void>((resolve) => {\n resolveFirstBuild = resolve;\n });\n\n let isFirstBuild = true;\n\n // \uBAA8\uB4E0 external \uC218\uC9D1 (optional peer deps + native modules + manual)\n const external = collectAllExternals(info.pkgDir, info.externals);\n\n // esbuild \uAE30\uBCF8 \uC635\uC158 \uC0DD\uC131\n const baseOptions = createServerEsbuildOptions({\n pkgDir: info.pkgDir,\n entryPoints,\n compilerOptions,\n env: info.env,\n external,\n });\n\n // watch\uC6A9 \uD50C\uB7EC\uADF8\uC778 \uCD94\uAC00\n esbuildContext = await esbuild.context({\n ...baseOptions,\n plugins: [\n {\n name: \"watch-notify\",\n setup(pluginBuild) {\n pluginBuild.onStart(() => {\n sender.send(\"buildStart\", {});\n });\n\n pluginBuild.onEnd((result) => {\n const errors = result.errors.map((e) => e.text);\n const success = result.errors.length === 0;\n\n // Generate .config.json on first successful build\n if (isFirstBuild && success) {\n const confDistPath = path.join(info.pkgDir, \"dist\", \".config.json\");\n fs.writeFileSync(confDistPath, JSON.stringify(info.configs ?? {}, undefined, 2));\n }\n\n sender.send(\"build\", { success, mainJsPath, errors: errors.length > 0 ? errors : undefined });\n\n if (isFirstBuild) {\n isFirstBuild = false;\n resolveFirstBuild();\n }\n });\n },\n },\n ],\n });\n\n await esbuildContext.watch();\n\n // \uCCAB \uBC88\uC9F8 \uBE4C\uB4DC \uC644\uB8CC \uB300\uAE30\n await firstBuildPromise;\n } catch (err) {\n sender.send(\"error\", {\n message: err instanceof Error ? err.message : String(err),\n });\n }\n}\n\n/**\n * watch \uC911\uC9C0\n * @remarks esbuild context\uB97C \uC815\uB9AC\uD569\uB2C8\uB2E4.\n */\nasync function stopWatch(): Promise<void> {\n await cleanup();\n}\n\nconst sender = createWorker<\n { build: typeof build; startWatch: typeof startWatch; stopWatch: typeof stopWatch },\n ServerWorkerEvents\n>({\n build,\n startWatch,\n stopWatch,\n});\n\nexport default sender;\n\n//#endregion\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/sd-cli",
|
|
3
3
|
"sideEffects": false,
|
|
4
|
-
"version": "13.0.0-beta.
|
|
4
|
+
"version": "13.0.0-beta.41",
|
|
5
5
|
"description": "심플리즘 패키지 - CLI 도구",
|
|
6
6
|
"author": "김석래",
|
|
7
7
|
"repository": {
|
|
@@ -42,9 +42,9 @@
|
|
|
42
42
|
"vite-plugin-solid": "^2.11.10",
|
|
43
43
|
"vite-tsconfig-paths": "^6.1.0",
|
|
44
44
|
"yargs": "^18.0.0",
|
|
45
|
-
"@simplysm/core-common": "13.0.0-beta.
|
|
46
|
-
"@simplysm/core-node": "13.0.0-beta.
|
|
47
|
-
"@simplysm/storage": "13.0.0-beta.
|
|
45
|
+
"@simplysm/core-common": "13.0.0-beta.41",
|
|
46
|
+
"@simplysm/core-node": "13.0.0-beta.41",
|
|
47
|
+
"@simplysm/storage": "13.0.0-beta.41"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@types/semver": "^7.7.1",
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"vitest": "vitest"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
|
-
"@simplysm/sd-cli": "~13.0.0-beta.
|
|
19
|
-
"@simplysm/claude": "~13.0.0-beta.
|
|
20
|
-
"@simplysm/eslint-plugin": "~13.0.0-beta.
|
|
18
|
+
"@simplysm/sd-cli": "~13.0.0-beta.41",
|
|
19
|
+
"@simplysm/claude": "~13.0.0-beta.41",
|
|
20
|
+
"@simplysm/eslint-plugin": "~13.0.0-beta.41",
|
|
21
21
|
"@types/node": "^20.19.33",
|
|
22
22
|
"eslint": "^9.39.2",
|
|
23
23
|
"prettier": "^3.8.1",
|