@simplysm/sd-cli 13.0.14 → 13.0.15
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 +47 -0
- package/dist/utils/copy-public.d.ts +19 -0
- package/dist/utils/copy-public.d.ts.map +1 -0
- package/dist/utils/copy-public.js +89 -0
- package/dist/utils/copy-public.js.map +6 -0
- package/dist/utils/esbuild-config.d.ts +1 -1
- package/dist/utils/esbuild-config.js +1 -1
- package/dist/utils/esbuild-config.js.map +1 -1
- package/dist/utils/vite-config.d.ts.map +1 -1
- package/dist/utils/vite-config.js +33 -2
- package/dist/utils/vite-config.js.map +1 -1
- package/dist/workers/server.worker.d.ts.map +1 -1
- package/dist/workers/server.worker.js +9 -0
- package/dist/workers/server.worker.js.map +1 -1
- package/package.json +4 -4
- package/src/utils/copy-public.ts +119 -0
- package/src/utils/esbuild-config.ts +2 -2
- package/src/utils/vite-config.ts +47 -2
- package/src/workers/server.worker.ts +18 -0
- 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
|
@@ -163,6 +163,33 @@ sd-cli build solid core-common
|
|
|
163
163
|
| `server` | esbuild | X | X | Server app |
|
|
164
164
|
| `scripts` | Excluded | Excluded | Excluded | - |
|
|
165
165
|
|
|
166
|
+
**Public Files & Assets:**
|
|
167
|
+
|
|
168
|
+
Both client and server packages support serving static files from a `public/` directory:
|
|
169
|
+
|
|
170
|
+
- **Client packages** (`dev` mode): Vite serves `public/` at the configured base path (`/{name}/`)
|
|
171
|
+
- **Server packages** (`dev` mode): Copies `public/` to `dist/`, watches for changes, and automatically rebuilds
|
|
172
|
+
- **Server packages** (`build` mode): Copies `public/` to `dist/` (production deployment)
|
|
173
|
+
- **Client packages** (`dev` mode only): Optional `public-dev/` directory files are served with priority over `public/` files, allowing dev-specific overrides without affecting production builds
|
|
174
|
+
|
|
175
|
+
Directory structure:
|
|
176
|
+
```
|
|
177
|
+
packages/my-server/
|
|
178
|
+
├── public/ # Static files (both dev and build)
|
|
179
|
+
│ ├── index.html
|
|
180
|
+
│ ├── style.css
|
|
181
|
+
│ └── assets/
|
|
182
|
+
└── public-dev/ # Dev-only overrides (dev mode only, ignored in build)
|
|
183
|
+
└── index.html # Overrides public/index.html in dev
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**How it works:**
|
|
187
|
+
|
|
188
|
+
- In `dev` mode, both `public/` and `public-dev/` are copied to `dist/`, with `public-dev/` changes taking priority
|
|
189
|
+
- If a `public-dev/` file is deleted, the corresponding `public/` file is served as fallback
|
|
190
|
+
- In `build` mode, only `public/` is copied to `dist/` (no `public-dev/`)
|
|
191
|
+
- The copy operation preserves directory structure
|
|
192
|
+
|
|
166
193
|
**Runtime Configuration File (.config.json):**
|
|
167
194
|
|
|
168
195
|
If a `server` or `client` package defines a `configs` field in `sd.config.ts`, the build automatically generates `dist/.config.json` containing that configuration. This is useful for storing environment-specific settings (database config, API endpoints, etc.) that are read at runtime via `ctx.getConfig()` in `service-server`.
|
|
@@ -316,6 +343,26 @@ sd-cli device -p my-app -u http://192.168.0.10:3000
|
|
|
316
343
|
| `--options`, `-o` | Additional options to pass to sd.config.ts (multi-use) | `[]` |
|
|
317
344
|
| `--debug` | Output debug logs | `false` |
|
|
318
345
|
|
|
346
|
+
## Public File Utilities
|
|
347
|
+
|
|
348
|
+
This package provides utilities for managing static files in server packages:
|
|
349
|
+
|
|
350
|
+
```typescript
|
|
351
|
+
import { copyPublicFiles, watchPublicFiles } from "@simplysm/sd-cli";
|
|
352
|
+
|
|
353
|
+
// Copy public/ to dist/ (production build)
|
|
354
|
+
await copyPublicFiles("/path/to/package", false);
|
|
355
|
+
|
|
356
|
+
// Copy public/ and public-dev/ to dist/ and watch for changes (dev mode)
|
|
357
|
+
const watcher = await watchPublicFiles("/path/to/package", true);
|
|
358
|
+
// Later: await watcher.close();
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
| Function | Parameters | Description |
|
|
362
|
+
|----------|-----------|-------------|
|
|
363
|
+
| `copyPublicFiles(pkgDir, includeDev)` | `pkgDir`: string, `includeDev`: boolean | Copies `public/` (and optionally `public-dev/`) from source to `dist/`. In dev mode with `includeDev=true`, `public-dev/` files take priority over `public/` files. |
|
|
364
|
+
| `watchPublicFiles(pkgDir, includeDev)` | `pkgDir`: string, `includeDev`: boolean | Returns a watcher that watches both `public/` and (if `includeDev=true`) `public-dev/` for changes and re-copies files to `dist/`. Call `.close()` on the returned watcher to stop watching. |
|
|
365
|
+
|
|
319
366
|
## Exported Types and Utilities
|
|
320
367
|
|
|
321
368
|
This package exports configuration types for `sd.config.ts` and Vite utilities. All are importable from `@simplysm/sd-cli`.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { FsWatcher } from "@simplysm/core-node";
|
|
2
|
+
/**
|
|
3
|
+
* public/ 및 public-dev/ 디렉토리의 파일을 dist/로 복사한다.
|
|
4
|
+
* public-dev/가 public/보다 우선한다 (overlay).
|
|
5
|
+
*
|
|
6
|
+
* @param pkgDir 패키지 루트 디렉토리
|
|
7
|
+
* @param includeDev public-dev/ 포함 여부 (dev 모드에서만 true)
|
|
8
|
+
*/
|
|
9
|
+
export declare function copyPublicFiles(pkgDir: string, includeDev: boolean): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* public/ 및 public-dev/ 디렉토리를 감시하여 dist/로 실시간 복사한다.
|
|
12
|
+
* 초기 복사 후 변경/추가/삭제를 자동 반영한다.
|
|
13
|
+
*
|
|
14
|
+
* @param pkgDir 패키지 루트 디렉토리
|
|
15
|
+
* @param includeDev public-dev/ 포함 여부 (dev 모드에서만 true)
|
|
16
|
+
* @returns FsWatcher 인스턴스 (shutdown 시 close() 호출 필요) 또는 watch할 대상이 없으면 undefined
|
|
17
|
+
*/
|
|
18
|
+
export declare function watchPublicFiles(pkgDir: string, includeDev: boolean): Promise<FsWatcher | undefined>;
|
|
19
|
+
//# sourceMappingURL=copy-public.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy-public.d.ts","sourceRoot":"","sources":["../../src/utils/copy-public.ts"],"names":[],"mappings":"AACA,OAAO,EAAiC,SAAS,EAAY,MAAM,qBAAqB,CAAC;AAEzF;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BxF;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAqE1G"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import { fsCopy, fsMkdir, fsRm, fsGlob, FsWatcher, fsExists } from "@simplysm/core-node";
|
|
3
|
+
async function copyPublicFiles(pkgDir, includeDev) {
|
|
4
|
+
const distDir = path.join(pkgDir, "dist");
|
|
5
|
+
await fsMkdir(distDir);
|
|
6
|
+
const publicDir = path.join(pkgDir, "public");
|
|
7
|
+
if (await fsExists(publicDir)) {
|
|
8
|
+
const files = await fsGlob("**/*", { cwd: publicDir, absolute: true });
|
|
9
|
+
for (const file of files) {
|
|
10
|
+
const relativePath = path.relative(publicDir, file);
|
|
11
|
+
const distPath = path.join(distDir, relativePath);
|
|
12
|
+
await fsMkdir(path.dirname(distPath));
|
|
13
|
+
await fsCopy(file, distPath);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
if (includeDev) {
|
|
17
|
+
const publicDevDir = path.join(pkgDir, "public-dev");
|
|
18
|
+
if (await fsExists(publicDevDir)) {
|
|
19
|
+
const files = await fsGlob("**/*", { cwd: publicDevDir, absolute: true });
|
|
20
|
+
for (const file of files) {
|
|
21
|
+
const relativePath = path.relative(publicDevDir, file);
|
|
22
|
+
const distPath = path.join(distDir, relativePath);
|
|
23
|
+
await fsMkdir(path.dirname(distPath));
|
|
24
|
+
await fsCopy(file, distPath);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async function watchPublicFiles(pkgDir, includeDev) {
|
|
30
|
+
const distDir = path.join(pkgDir, "dist");
|
|
31
|
+
const publicDir = path.join(pkgDir, "public");
|
|
32
|
+
const publicDevDir = path.join(pkgDir, "public-dev");
|
|
33
|
+
await copyPublicFiles(pkgDir, includeDev);
|
|
34
|
+
const watchPaths = [];
|
|
35
|
+
if (await fsExists(publicDir)) {
|
|
36
|
+
watchPaths.push(path.join(publicDir, "**/*"));
|
|
37
|
+
}
|
|
38
|
+
if (includeDev && await fsExists(publicDevDir)) {
|
|
39
|
+
watchPaths.push(path.join(publicDevDir, "**/*"));
|
|
40
|
+
}
|
|
41
|
+
if (watchPaths.length === 0) {
|
|
42
|
+
return void 0;
|
|
43
|
+
}
|
|
44
|
+
const watcher = await FsWatcher.watch(watchPaths);
|
|
45
|
+
watcher.onChange({ delay: 300 }, async (changes) => {
|
|
46
|
+
for (const { event, path: filePath } of changes) {
|
|
47
|
+
let sourceDir;
|
|
48
|
+
if (filePath.startsWith(publicDevDir + path.sep) || filePath.startsWith(publicDevDir + "/")) {
|
|
49
|
+
sourceDir = publicDevDir;
|
|
50
|
+
} else {
|
|
51
|
+
sourceDir = publicDir;
|
|
52
|
+
}
|
|
53
|
+
const relPath = path.relative(sourceDir, filePath);
|
|
54
|
+
const distPath = path.join(distDir, relPath);
|
|
55
|
+
if (event === "unlink") {
|
|
56
|
+
if (sourceDir === publicDir && includeDev) {
|
|
57
|
+
const devOverride = path.join(publicDevDir, relPath);
|
|
58
|
+
if (await fsExists(devOverride)) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (sourceDir === publicDevDir && includeDev) {
|
|
63
|
+
const publicFallback = path.join(publicDir, relPath);
|
|
64
|
+
if (await fsExists(publicFallback)) {
|
|
65
|
+
await fsMkdir(path.dirname(distPath));
|
|
66
|
+
await fsCopy(publicFallback, distPath);
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
await fsRm(distPath);
|
|
71
|
+
} else if (event === "add" || event === "change") {
|
|
72
|
+
if (sourceDir === publicDir && includeDev) {
|
|
73
|
+
const devOverride = path.join(publicDevDir, relPath);
|
|
74
|
+
if (await fsExists(devOverride)) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
await fsMkdir(path.dirname(distPath));
|
|
79
|
+
await fsCopy(filePath, distPath);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
return watcher;
|
|
84
|
+
}
|
|
85
|
+
export {
|
|
86
|
+
copyPublicFiles,
|
|
87
|
+
watchPublicFiles
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=copy-public.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/copy-public.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -47,7 +47,7 @@ export declare function createLibraryEsbuildOptions(options: LibraryEsbuildOptio
|
|
|
47
47
|
* - bundle: true (모든 의존성 포함한 단일 번들)
|
|
48
48
|
* - minify: true (코드 보호를 위한 압축)
|
|
49
49
|
* - banner: CJS 패키지의 require() 지원을 위한 createRequire shim
|
|
50
|
-
* - env를 define 옵션으로 치환 (process.env
|
|
50
|
+
* - env를 define 옵션으로 치환 (process.env.KEY 형태)
|
|
51
51
|
*/
|
|
52
52
|
export declare function createServerEsbuildOptions(options: ServerEsbuildOptions): esbuild.BuildOptions;
|
|
53
53
|
/**
|
|
@@ -51,7 +51,7 @@ function createServerEsbuildOptions(options) {
|
|
|
51
51
|
const define = {};
|
|
52
52
|
if (options.env != null) {
|
|
53
53
|
for (const [key, value] of Object.entries(options.env)) {
|
|
54
|
-
define[`process.env
|
|
54
|
+
define[`process.env.${key}`] = JSON.stringify(value);
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
return {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/esbuild-config.ts"],
|
|
4
|
-
"mappings": "AAAA,OAAO,UAAU;AACjB,SAAS,cAAc,kBAAkB;AACzC,OAAO,QAAQ;AACf,SAAS,qBAAqB;AAE9B,SAAS,mBAAmB;AAU5B,eAAsB,wBAAwB,aAAkD;AAC9F,QAAM,QAAQ;AAAA,IACZ,YAAY,IAAI,OAAO,SAAS;AAC9B,YAAM,YAAY,KAAK,KAAK,SAAS,KAAK,IACtC,KAAK,KAAK;AAAA,QACR;AAAA,QACA,CAAC,QAAQ,QAAgB,YAAoB,WAAmB;AAC9D,cAAI,sCAAsC,KAAK,UAAU,EAAG,QAAO;AACnE,iBAAO,GAAG,MAAM,GAAG,UAAU,MAAM,MAAM;AAAA,QAC3C;AAAA,MACF,IACA,KAAK;AAGT,UAAI;AACF,cAAM,WAAW,MAAM,GAAG,SAAS,KAAK,MAAM,OAAO;AACrD,YAAI,aAAa,UAAW;AAAA,MAC9B,QAAQ;AAAA,MAER;AAEA,YAAM,GAAG,MAAM,KAAK,QAAQ,KAAK,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAC3D,YAAM,GAAG,UAAU,KAAK,MAAM,SAAS;AAAA,IACzC,CAAC;AAAA,EACH;AACF;AA8BA,SAAS,mBAAmB,QAAyB;AACnD,QAAM,UAAU,KAAK,MAAM,aAAa,KAAK,KAAK,QAAQ,cAAc,GAAG,OAAO,CAAC;AACnF,QAAM,UAAU,EAAE,GAAG,QAAQ,cAAc,GAAG,QAAQ,iBAAiB;AACvE,SAAO,cAAc;AACvB;AAUO,SAAS,4BAA4B,SAAsD;AAChG,QAAM,UAA4B,CAAC;AAEnC,MAAI,mBAAmB,QAAQ,MAAM,GAAG;AACtC,YAAQ,QAAQ,YAAY,CAAC;AAAA,EAC/B;AAEA,SAAO;AAAA,IACL,aAAa,QAAQ;AAAA,IACrB,QAAQ,KAAK,KAAK,QAAQ,QAAQ,MAAM;AAAA,IACxC,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,UAAU,QAAQ,WAAW,SAAS,SAAS;AAAA,IAC/C,QAAQ,QAAQ,WAAW,SAAS,WAAW;AAAA,IAC/C,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,aAAa,EAAE,iBAAiB,QAAQ,gBAA0D;AAAA,IAClG;AAAA,EACF;AACF;AAWO,SAAS,2BAA2B,SAAqD;AAC9F,QAAM,SAAiC,CAAC;AACxC,MAAI,QAAQ,OAAO,MAAM;AACvB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,GAAG,GAAG;AACtD,aAAO,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-config.d.ts","sourceRoot":"","sources":["../../src/utils/vite-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,UAAU,IAAI,cAAc,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"vite-config.d.ts","sourceRoot":"","sources":["../../src/utils/vite-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,UAAU,IAAI,cAAc,EAAE,MAAM,MAAM,CAAC;AAsPjE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;IACtB,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CA8D3E"}
|
|
@@ -51,6 +51,36 @@ function isSubpathOnlyPackage(pkgJsonPath) {
|
|
|
51
51
|
}
|
|
52
52
|
return false;
|
|
53
53
|
}
|
|
54
|
+
function sdPublicDevPlugin(pkgDir) {
|
|
55
|
+
const publicDevDir = path.join(pkgDir, "public-dev");
|
|
56
|
+
return {
|
|
57
|
+
name: "sd-public-dev",
|
|
58
|
+
configureServer(server) {
|
|
59
|
+
if (!fs.existsSync(publicDevDir)) return;
|
|
60
|
+
server.middlewares.use((req, res, next) => {
|
|
61
|
+
if (req.url == null) {
|
|
62
|
+
next();
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const base = server.config.base || "/";
|
|
66
|
+
let urlPath = req.url.split("?")[0];
|
|
67
|
+
if (urlPath.startsWith(base)) {
|
|
68
|
+
urlPath = urlPath.slice(base.length);
|
|
69
|
+
}
|
|
70
|
+
if (urlPath.startsWith("/")) {
|
|
71
|
+
urlPath = urlPath.slice(1);
|
|
72
|
+
}
|
|
73
|
+
const filePath = path.join(publicDevDir, urlPath);
|
|
74
|
+
if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) {
|
|
75
|
+
const stream = fs.createReadStream(filePath);
|
|
76
|
+
stream.pipe(res);
|
|
77
|
+
} else {
|
|
78
|
+
next();
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}
|
|
54
84
|
function sdScopeWatchPlugin(pkgDir, scopes) {
|
|
55
85
|
return {
|
|
56
86
|
name: "sd-scope-watch",
|
|
@@ -152,7 +182,8 @@ function createViteConfig(options) {
|
|
|
152
182
|
}
|
|
153
183
|
}),
|
|
154
184
|
sdTailwindConfigDepsPlugin(pkgDir),
|
|
155
|
-
...watchScopes != null && watchScopes.length > 0 ? [sdScopeWatchPlugin(pkgDir, watchScopes)] : []
|
|
185
|
+
...watchScopes != null && watchScopes.length > 0 ? [sdScopeWatchPlugin(pkgDir, watchScopes)] : [],
|
|
186
|
+
...mode === "dev" ? [sdPublicDevPlugin(pkgDir)] : []
|
|
156
187
|
],
|
|
157
188
|
css: {
|
|
158
189
|
postcss: {
|
|
@@ -163,10 +194,10 @@ function createViteConfig(options) {
|
|
|
163
194
|
tsconfigRaw: { compilerOptions }
|
|
164
195
|
}
|
|
165
196
|
};
|
|
197
|
+
config.define = envDefine;
|
|
166
198
|
if (mode === "build") {
|
|
167
199
|
config.logLevel = "silent";
|
|
168
200
|
} else {
|
|
169
|
-
config.define = envDefine;
|
|
170
201
|
config.server = {
|
|
171
202
|
port: serverPort === 0 ? void 0 : serverPort,
|
|
172
203
|
strictPort: serverPort !== 0 && serverPort !== void 0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/vite-config.ts"],
|
|
4
|
-
"mappings": "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
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -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":"AAkBA;;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;AAyLD;;GAEG;AACH,iBAAe,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAgDtE;AAKD;;;;GAIG;AACH,iBAAe,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAiF9D;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"}
|
|
@@ -11,14 +11,21 @@ import {
|
|
|
11
11
|
collectNativeModuleExternals
|
|
12
12
|
} from "../utils/esbuild-config.js";
|
|
13
13
|
import { registerCleanupHandlers } from "../utils/worker-utils.js";
|
|
14
|
+
import { copyPublicFiles, watchPublicFiles } from "../utils/copy-public.js";
|
|
14
15
|
const logger = consola.withTag("sd:cli:server:worker");
|
|
15
16
|
let esbuildContext;
|
|
17
|
+
let publicWatcher;
|
|
16
18
|
async function cleanup() {
|
|
17
19
|
const contextToDispose = esbuildContext;
|
|
18
20
|
esbuildContext = void 0;
|
|
21
|
+
const watcherToClose = publicWatcher;
|
|
22
|
+
publicWatcher = void 0;
|
|
19
23
|
if (contextToDispose != null) {
|
|
20
24
|
await contextToDispose.dispose();
|
|
21
25
|
}
|
|
26
|
+
if (watcherToClose != null) {
|
|
27
|
+
await watcherToClose.close();
|
|
28
|
+
}
|
|
22
29
|
}
|
|
23
30
|
function collectAllExternals(pkgDir, manualExternals) {
|
|
24
31
|
const optionalPeerDeps = collectUninstalledOptionalPeerDeps(pkgDir);
|
|
@@ -148,6 +155,7 @@ async function build(info) {
|
|
|
148
155
|
const result = await esbuild.build(esbuildOptions);
|
|
149
156
|
const confDistPath = path.join(info.pkgDir, "dist", ".config.json");
|
|
150
157
|
fs.writeFileSync(confDistPath, JSON.stringify(info.configs ?? {}, void 0, 2));
|
|
158
|
+
await copyPublicFiles(info.pkgDir, false);
|
|
151
159
|
generateProductionFiles(info, external);
|
|
152
160
|
const errors = result.errors.map((e) => e.text);
|
|
153
161
|
return {
|
|
@@ -214,6 +222,7 @@ async function startWatch(info) {
|
|
|
214
222
|
]
|
|
215
223
|
});
|
|
216
224
|
await esbuildContext.watch();
|
|
225
|
+
publicWatcher = await watchPublicFiles(info.pkgDir, true);
|
|
217
226
|
await firstBuildPromise;
|
|
218
227
|
} catch (err) {
|
|
219
228
|
sender.send("error", {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/workers/server.worker.ts"],
|
|
4
|
-
"mappings": "AAAA,OAAO,UAAU;AACjB,OAAO,QAAQ;AACf,OAAO,QAAQ;AACf,OAAO,aAAa;AACpB,SAAS,oBAAoB;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/sd-cli",
|
|
3
3
|
"sideEffects": false,
|
|
4
|
-
"version": "13.0.
|
|
4
|
+
"version": "13.0.15",
|
|
5
5
|
"description": "심플리즘 패키지 - CLI 도구",
|
|
6
6
|
"author": "김석래",
|
|
7
7
|
"repository": {
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
"vite-plugin-solid": "^2.11.10",
|
|
45
45
|
"vite-tsconfig-paths": "^6.1.1",
|
|
46
46
|
"yargs": "^18.0.0",
|
|
47
|
-
"@simplysm/core-
|
|
48
|
-
"@simplysm/core-
|
|
49
|
-
"@simplysm/storage": "13.0.
|
|
47
|
+
"@simplysm/core-common": "13.0.15",
|
|
48
|
+
"@simplysm/core-node": "13.0.15",
|
|
49
|
+
"@simplysm/storage": "13.0.15"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@types/semver": "^7.7.1",
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import { fsCopy, fsMkdir, fsRm, fsGlob, FsWatcher, fsExists } from "@simplysm/core-node";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* public/ 및 public-dev/ 디렉토리의 파일을 dist/로 복사한다.
|
|
6
|
+
* public-dev/가 public/보다 우선한다 (overlay).
|
|
7
|
+
*
|
|
8
|
+
* @param pkgDir 패키지 루트 디렉토리
|
|
9
|
+
* @param includeDev public-dev/ 포함 여부 (dev 모드에서만 true)
|
|
10
|
+
*/
|
|
11
|
+
export async function copyPublicFiles(pkgDir: string, includeDev: boolean): Promise<void> {
|
|
12
|
+
const distDir = path.join(pkgDir, "dist");
|
|
13
|
+
await fsMkdir(distDir);
|
|
14
|
+
|
|
15
|
+
// public/ 복사
|
|
16
|
+
const publicDir = path.join(pkgDir, "public");
|
|
17
|
+
if (await fsExists(publicDir)) {
|
|
18
|
+
const files = await fsGlob("**/*", { cwd: publicDir, absolute: true });
|
|
19
|
+
for (const file of files) {
|
|
20
|
+
const relativePath = path.relative(publicDir, file);
|
|
21
|
+
const distPath = path.join(distDir, relativePath);
|
|
22
|
+
await fsMkdir(path.dirname(distPath));
|
|
23
|
+
await fsCopy(file, distPath);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// public-dev/ 복사 (overlay: public/ 위에 덮어씀)
|
|
28
|
+
if (includeDev) {
|
|
29
|
+
const publicDevDir = path.join(pkgDir, "public-dev");
|
|
30
|
+
if (await fsExists(publicDevDir)) {
|
|
31
|
+
const files = await fsGlob("**/*", { cwd: publicDevDir, absolute: true });
|
|
32
|
+
for (const file of files) {
|
|
33
|
+
const relativePath = path.relative(publicDevDir, file);
|
|
34
|
+
const distPath = path.join(distDir, relativePath);
|
|
35
|
+
await fsMkdir(path.dirname(distPath));
|
|
36
|
+
await fsCopy(file, distPath);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* public/ 및 public-dev/ 디렉토리를 감시하여 dist/로 실시간 복사한다.
|
|
44
|
+
* 초기 복사 후 변경/추가/삭제를 자동 반영한다.
|
|
45
|
+
*
|
|
46
|
+
* @param pkgDir 패키지 루트 디렉토리
|
|
47
|
+
* @param includeDev public-dev/ 포함 여부 (dev 모드에서만 true)
|
|
48
|
+
* @returns FsWatcher 인스턴스 (shutdown 시 close() 호출 필요) 또는 watch할 대상이 없으면 undefined
|
|
49
|
+
*/
|
|
50
|
+
export async function watchPublicFiles(pkgDir: string, includeDev: boolean): Promise<FsWatcher | undefined> {
|
|
51
|
+
const distDir = path.join(pkgDir, "dist");
|
|
52
|
+
const publicDir = path.join(pkgDir, "public");
|
|
53
|
+
const publicDevDir = path.join(pkgDir, "public-dev");
|
|
54
|
+
|
|
55
|
+
// 초기 복사
|
|
56
|
+
await copyPublicFiles(pkgDir, includeDev);
|
|
57
|
+
|
|
58
|
+
// watch 대상 경로 수집
|
|
59
|
+
const watchPaths: string[] = [];
|
|
60
|
+
if (await fsExists(publicDir)) {
|
|
61
|
+
watchPaths.push(path.join(publicDir, "**/*"));
|
|
62
|
+
}
|
|
63
|
+
if (includeDev && (await fsExists(publicDevDir))) {
|
|
64
|
+
watchPaths.push(path.join(publicDevDir, "**/*"));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (watchPaths.length === 0) {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const watcher = await FsWatcher.watch(watchPaths);
|
|
72
|
+
|
|
73
|
+
watcher.onChange({ delay: 300 }, async (changes) => {
|
|
74
|
+
for (const { event, path: filePath } of changes) {
|
|
75
|
+
// 어느 소스 디렉토리에서 온 변경인지 판별
|
|
76
|
+
let sourceDir: string;
|
|
77
|
+
if (filePath.startsWith(publicDevDir + path.sep) || filePath.startsWith(publicDevDir + "/")) {
|
|
78
|
+
sourceDir = publicDevDir;
|
|
79
|
+
} else {
|
|
80
|
+
sourceDir = publicDir;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const relPath = path.relative(sourceDir, filePath);
|
|
84
|
+
const distPath = path.join(distDir, relPath);
|
|
85
|
+
|
|
86
|
+
if (event === "unlink") {
|
|
87
|
+
// public에서 삭제 시, public-dev에 같은 파일이 있으면 삭제하지 않음
|
|
88
|
+
if (sourceDir === publicDir && includeDev) {
|
|
89
|
+
const devOverride = path.join(publicDevDir, relPath);
|
|
90
|
+
if (await fsExists(devOverride)) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// public-dev에서 삭제 시, public에 같은 파일이 있으면 복사 (fallback 복원)
|
|
95
|
+
if (sourceDir === publicDevDir && includeDev) {
|
|
96
|
+
const publicFallback = path.join(publicDir, relPath);
|
|
97
|
+
if (await fsExists(publicFallback)) {
|
|
98
|
+
await fsMkdir(path.dirname(distPath));
|
|
99
|
+
await fsCopy(publicFallback, distPath);
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
await fsRm(distPath);
|
|
104
|
+
} else if (event === "add" || event === "change") {
|
|
105
|
+
// public에서 변경 시, public-dev에 같은 파일이 있으면 overlay 우선이므로 스킵
|
|
106
|
+
if (sourceDir === publicDir && includeDev) {
|
|
107
|
+
const devOverride = path.join(publicDevDir, relPath);
|
|
108
|
+
if (await fsExists(devOverride)) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
await fsMkdir(path.dirname(distPath));
|
|
113
|
+
await fsCopy(filePath, distPath);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
return watcher;
|
|
119
|
+
}
|
|
@@ -111,13 +111,13 @@ export function createLibraryEsbuildOptions(options: LibraryEsbuildOptions): esb
|
|
|
111
111
|
* - bundle: true (모든 의존성 포함한 단일 번들)
|
|
112
112
|
* - minify: true (코드 보호를 위한 압축)
|
|
113
113
|
* - banner: CJS 패키지의 require() 지원을 위한 createRequire shim
|
|
114
|
-
* - env를 define 옵션으로 치환 (process.env
|
|
114
|
+
* - env를 define 옵션으로 치환 (process.env.KEY 형태)
|
|
115
115
|
*/
|
|
116
116
|
export function createServerEsbuildOptions(options: ServerEsbuildOptions): esbuild.BuildOptions {
|
|
117
117
|
const define: Record<string, string> = {};
|
|
118
118
|
if (options.env != null) {
|
|
119
119
|
for (const [key, value] of Object.entries(options.env)) {
|
|
120
|
-
define[`process.env
|
|
120
|
+
define[`process.env.${key}`] = JSON.stringify(value);
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
123
|
|
package/src/utils/vite-config.ts
CHANGED
|
@@ -91,6 +91,48 @@ function isSubpathOnlyPackage(pkgJsonPath: string): boolean {
|
|
|
91
91
|
return false;
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
+
/**
|
|
95
|
+
* public-dev/ 디렉토리의 파일을 dev 모드에서 public/보다 우선하여 서빙하는 Vite 플러그인.
|
|
96
|
+
* Vite의 기본 publicDir(public/)은 그대로 유지하면서, public-dev/의 파일이 같은 경로에 있으면 우선한다.
|
|
97
|
+
*/
|
|
98
|
+
function sdPublicDevPlugin(pkgDir: string): Plugin {
|
|
99
|
+
const publicDevDir = path.join(pkgDir, "public-dev");
|
|
100
|
+
|
|
101
|
+
return {
|
|
102
|
+
name: "sd-public-dev",
|
|
103
|
+
configureServer(server) {
|
|
104
|
+
if (!fs.existsSync(publicDevDir)) return;
|
|
105
|
+
|
|
106
|
+
// Vite의 기본 static 서빙보다 먼저 public-dev/ 파일을 체크
|
|
107
|
+
server.middlewares.use((req, res, next) => {
|
|
108
|
+
if (req.url == null) {
|
|
109
|
+
next();
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// base path 제거
|
|
114
|
+
const base = server.config.base || "/";
|
|
115
|
+
let urlPath = req.url.split("?")[0];
|
|
116
|
+
if (urlPath.startsWith(base)) {
|
|
117
|
+
urlPath = urlPath.slice(base.length);
|
|
118
|
+
}
|
|
119
|
+
if (urlPath.startsWith("/")) {
|
|
120
|
+
urlPath = urlPath.slice(1);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const filePath = path.join(publicDevDir, urlPath);
|
|
124
|
+
if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) {
|
|
125
|
+
// sirv 대신 간단히 파일 스트림으로 응답
|
|
126
|
+
const stream = fs.createReadStream(filePath);
|
|
127
|
+
stream.pipe(res);
|
|
128
|
+
} else {
|
|
129
|
+
next();
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
|
|
94
136
|
/**
|
|
95
137
|
* scope 패키지의 dist 디렉토리 변경을 감지하는 Vite 플러그인.
|
|
96
138
|
*
|
|
@@ -236,7 +278,7 @@ export function createViteConfig(options: ViteConfigOptions): ViteUserConfig {
|
|
|
236
278
|
const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, "utf-8")) as { name: string };
|
|
237
279
|
const appName = pkgJson.name.replace(/^@[^/]+\//, "");
|
|
238
280
|
|
|
239
|
-
// process.env 치환 (dev
|
|
281
|
+
// process.env 치환 (build/dev 모두 적용)
|
|
240
282
|
const envDefine: Record<string, string> = {};
|
|
241
283
|
if (env != null) {
|
|
242
284
|
envDefine["process.env"] = JSON.stringify(env);
|
|
@@ -264,6 +306,7 @@ export function createViteConfig(options: ViteConfigOptions): ViteUserConfig {
|
|
|
264
306
|
}),
|
|
265
307
|
sdTailwindConfigDepsPlugin(pkgDir),
|
|
266
308
|
...(watchScopes != null && watchScopes.length > 0 ? [sdScopeWatchPlugin(pkgDir, watchScopes)] : []),
|
|
309
|
+
...(mode === "dev" ? [sdPublicDevPlugin(pkgDir)] : []),
|
|
267
310
|
],
|
|
268
311
|
css: {
|
|
269
312
|
postcss: {
|
|
@@ -275,11 +318,13 @@ export function createViteConfig(options: ViteConfigOptions): ViteUserConfig {
|
|
|
275
318
|
},
|
|
276
319
|
};
|
|
277
320
|
|
|
321
|
+
// process.env 치환 (build/dev 모두 적용)
|
|
322
|
+
config.define = envDefine;
|
|
323
|
+
|
|
278
324
|
if (mode === "build") {
|
|
279
325
|
config.logLevel = "silent";
|
|
280
326
|
} else {
|
|
281
327
|
// dev 모드
|
|
282
|
-
config.define = envDefine;
|
|
283
328
|
config.server = {
|
|
284
329
|
port: serverPort === 0 ? undefined : serverPort,
|
|
285
330
|
strictPort: serverPort !== 0 && serverPort !== undefined,
|
|
@@ -3,6 +3,7 @@ import fs from "fs";
|
|
|
3
3
|
import cp from "child_process";
|
|
4
4
|
import esbuild from "esbuild";
|
|
5
5
|
import { createWorker } from "@simplysm/core-node";
|
|
6
|
+
import type { FsWatcher } from "@simplysm/core-node";
|
|
6
7
|
import { consola } from "consola";
|
|
7
8
|
import { parseRootTsconfig, getPackageSourceFiles, getCompilerOptionsForPackage } from "../utils/tsconfig";
|
|
8
9
|
import {
|
|
@@ -11,6 +12,7 @@ import {
|
|
|
11
12
|
collectNativeModuleExternals,
|
|
12
13
|
} from "../utils/esbuild-config";
|
|
13
14
|
import { registerCleanupHandlers } from "../utils/worker-utils";
|
|
15
|
+
import { copyPublicFiles, watchPublicFiles } from "../utils/copy-public";
|
|
14
16
|
|
|
15
17
|
//#region Types
|
|
16
18
|
|
|
@@ -94,6 +96,9 @@ const logger = consola.withTag("sd:cli:server:worker");
|
|
|
94
96
|
/** esbuild build context (정리 대상) */
|
|
95
97
|
let esbuildContext: esbuild.BuildContext | undefined;
|
|
96
98
|
|
|
99
|
+
/** public 파일 watcher (정리 대상) */
|
|
100
|
+
let publicWatcher: FsWatcher | undefined;
|
|
101
|
+
|
|
97
102
|
/**
|
|
98
103
|
* 리소스 정리
|
|
99
104
|
*/
|
|
@@ -103,9 +108,16 @@ async function cleanup(): Promise<void> {
|
|
|
103
108
|
const contextToDispose = esbuildContext;
|
|
104
109
|
esbuildContext = undefined;
|
|
105
110
|
|
|
111
|
+
const watcherToClose = publicWatcher;
|
|
112
|
+
publicWatcher = undefined;
|
|
113
|
+
|
|
106
114
|
if (contextToDispose != null) {
|
|
107
115
|
await contextToDispose.dispose();
|
|
108
116
|
}
|
|
117
|
+
|
|
118
|
+
if (watcherToClose != null) {
|
|
119
|
+
await watcherToClose.close();
|
|
120
|
+
}
|
|
109
121
|
}
|
|
110
122
|
|
|
111
123
|
/**
|
|
@@ -290,6 +302,9 @@ async function build(info: ServerBuildInfo): Promise<ServerBuildResult> {
|
|
|
290
302
|
const confDistPath = path.join(info.pkgDir, "dist", ".config.json");
|
|
291
303
|
fs.writeFileSync(confDistPath, JSON.stringify(info.configs ?? {}, undefined, 2));
|
|
292
304
|
|
|
305
|
+
// Copy public/ to dist/ (production build: no public-dev)
|
|
306
|
+
await copyPublicFiles(info.pkgDir, false);
|
|
307
|
+
|
|
293
308
|
// Generate production files (package.json, mise.toml, openssl.cnf, pm2.config.cjs)
|
|
294
309
|
generateProductionFiles(info, external);
|
|
295
310
|
|
|
@@ -387,6 +402,9 @@ async function startWatch(info: ServerWatchInfo): Promise<void> {
|
|
|
387
402
|
|
|
388
403
|
await esbuildContext.watch();
|
|
389
404
|
|
|
405
|
+
// Watch public/ and public-dev/ (dev mode includes public-dev)
|
|
406
|
+
publicWatcher = await watchPublicFiles(info.pkgDir, true);
|
|
407
|
+
|
|
390
408
|
// 첫 번째 빌드 완료 대기
|
|
391
409
|
await firstBuildPromise;
|
|
392
410
|
} catch (err) {
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"vitest": "vitest"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
|
-
"@simplysm/sd-cli": "~13.0.
|
|
19
|
-
"@simplysm/claude": "~13.0.
|
|
20
|
-
"@simplysm/lint": "~13.0.
|
|
18
|
+
"@simplysm/sd-cli": "~13.0.15",
|
|
19
|
+
"@simplysm/claude": "~13.0.15",
|
|
20
|
+
"@simplysm/lint": "~13.0.15",
|
|
21
21
|
"@types/node": "^20.19.33",
|
|
22
22
|
"eslint": "^9.39.2",
|
|
23
23
|
"prettier": "^3.8.1",
|