@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 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["KEY"] 형태)
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["${key}"]`] = JSON.stringify(value);
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": "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",
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,eAAe,GAAG,EAAE,IAAI,KAAK,UAAU,KAAK;AAAA,IACrD;AAAA,EACF;AAEA,SAAO;AAAA,IACL,aAAa,QAAQ;AAAA,IACrB,QAAQ,KAAK,KAAK,QAAQ,QAAQ,MAAM;AAAA,IACxC,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,MACN,IAAI;AAAA,IACN;AAAA,IACA,UAAU,QAAQ;AAAA,IAClB;AAAA,IACA,aAAa,EAAE,iBAAiB,QAAQ,gBAA0D;AAAA,EACpG;AACF;AAQO,SAAS,0BAA0B,QAAsD;AAC9F,SAAO,WAAW,SAAS,SAAS;AACtC;AAgBO,SAAS,mCAAmC,QAA0B;AAC3E,QAAM,WAAW,oBAAI,IAAY;AACjC,QAAM,UAAU,oBAAI,IAAY;AAEhC,QAAM,UAAU,KAAK,MAAM,aAAa,KAAK,KAAK,QAAQ,cAAc,GAAG,OAAO,CAAC;AACnF,aAAW,OAAO,OAAO,KAAK,QAAQ,gBAAgB,CAAC,CAAC,GAAG;AACzD,yBAAqB,KAAK,QAAQ,UAAU,OAAO;AAAA,EACrD;AAEA,SAAO,CAAC,GAAG,QAAQ;AACrB;AAEA,SAAS,qBAAqB,SAAiB,YAAoB,UAAuB,SAA4B;AACpH,MAAI,QAAQ,IAAI,OAAO,EAAG;AAC1B,UAAQ,IAAI,OAAO;AAEnB,QAAM,MAAM,cAAc,KAAK,KAAK,YAAY,SAAS,CAAC;AAE1D,MAAI;AACJ,MAAI;AACF,kBAAc,IAAI,QAAQ,GAAG,OAAO,eAAe;AAAA,EACrD,QAAQ;AACN;AAAA,EACF;AAEA,QAAM,SAAS,KAAK,QAAQ,WAAW;AACvC,QAAM,UAAU,KAAK,MAAM,aAAa,aAAa,OAAO,CAAC;AAE7D,MAAI,QAAQ,wBAAwB,MAAM;AACxC,UAAM,WAAW,QAAQ,oBAAoB,CAAC;AAC9C,UAAM,SAAS,cAAc,KAAK,KAAK,QAAQ,SAAS,CAAC;AACzD,eAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,QAAQ,oBAAoB,GAAG;AACvE,UAAI,KAAK,aAAa,QAAQ,QAAQ,UAAU;AAC9C,YAAI;AACF,iBAAO,QAAQ,IAAI;AAAA,QACrB,QAAQ;AACN,mBAAS,IAAI,IAAI;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,aAAW,OAAO,OAAO,KAAK,QAAQ,gBAAgB,CAAC,CAAC,GAAG;AACzD,yBAAqB,KAAK,QAAQ,UAAU,OAAO;AAAA,EACrD;AACF;AAYO,SAAS,6BAA6B,QAA0B;AACrE,QAAM,WAAW,oBAAI,IAAY;AACjC,QAAM,UAAU,oBAAI,IAAY;AAEhC,QAAM,UAAU,KAAK,MAAM,aAAa,KAAK,KAAK,QAAQ,cAAc,GAAG,OAAO,CAAC;AACnF,aAAW,OAAO,OAAO,KAAK,QAAQ,gBAAgB,CAAC,CAAC,GAAG;AACzD,sBAAkB,KAAK,QAAQ,UAAU,OAAO;AAAA,EAClD;AAEA,SAAO,CAAC,GAAG,QAAQ;AACrB;AAEA,SAAS,kBAAkB,SAAiB,YAAoB,UAAuB,SAA4B;AACjH,MAAI,QAAQ,IAAI,OAAO,EAAG;AAC1B,UAAQ,IAAI,OAAO;AAEnB,QAAM,MAAM,cAAc,KAAK,KAAK,YAAY,SAAS,CAAC;AAE1D,MAAI;AACJ,MAAI;AACF,kBAAc,IAAI,QAAQ,GAAG,OAAO,eAAe;AAAA,EACrD,QAAQ;AACN;AAAA,EACF;AAEA,QAAM,SAAS,KAAK,QAAQ,WAAW;AAGvC,MAAI,WAAW,KAAK,KAAK,QAAQ,aAAa,CAAC,GAAG;AAChD,aAAS,IAAI,OAAO;AAAA,EACtB;AAGA,QAAM,aAAa,KAAK,MAAM,aAAa,aAAa,OAAO,CAAC;AAChE,aAAW,OAAO,OAAO,KAAK,WAAW,gBAAgB,CAAC,CAAC,GAAG;AAC5D,sBAAkB,KAAK,QAAQ,UAAU,OAAO;AAAA,EAClD;AACF;",
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;AA4MjE;;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,CA2D3E"}
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":"AAgBA;;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;AA+KD;;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
+ {"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": "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",
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.14",
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-node": "13.0.14",
48
- "@simplysm/core-common": "13.0.14",
49
- "@simplysm/storage": "13.0.14"
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["KEY"] 형태)
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["${key}"]`] = JSON.stringify(value);
120
+ define[`process.env.${key}`] = JSON.stringify(value);
121
121
  }
122
122
  }
123
123
 
@@ -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 모드에서만 사용, build 모드는 inline으로 처리됨)
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) {
@@ -4,7 +4,7 @@
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "dependencies": {
7
- "@simplysm/solid": "~13.0.14",
7
+ "@simplysm/solid": "~13.0.15",
8
8
  {{#if router}}
9
9
  "@solidjs/router": "^0.15.4",
10
10
  {{/if}}
@@ -4,7 +4,7 @@
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "dependencies": {
7
- "@simplysm/core-common": "~13.0.14",
8
- "@simplysm/service-server": "~13.0.14"
7
+ "@simplysm/core-common": "~13.0.15",
8
+ "@simplysm/service-server": "~13.0.15"
9
9
  }
10
10
  }
@@ -15,9 +15,9 @@
15
15
  "vitest": "vitest"
16
16
  },
17
17
  "devDependencies": {
18
- "@simplysm/sd-cli": "~13.0.14",
19
- "@simplysm/claude": "~13.0.14",
20
- "@simplysm/lint": "~13.0.14",
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",