@simplysm/sd-cli 13.0.12 → 13.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -272,6 +272,25 @@ After collecting inputs, it:
272
272
  sd-cli add server
273
273
  ```
274
274
 
275
+ ### replace-deps
276
+
277
+ Sets up local dependency replacement according to `replaceDeps` configuration in `sd.config.ts`. Useful for local development of dependent packages across separate repositories.
278
+
279
+ ```bash
280
+ # Set up replacements (symlink or copy mode based on config)
281
+ sd-cli replace-deps
282
+
283
+ # With additional options
284
+ sd-cli replace-deps -o key=value
285
+ ```
286
+
287
+ **Options:**
288
+
289
+ | Option | Description | Default |
290
+ | ----------------- | ---------------------------------------------------------- | ------- |
291
+ | `--options`, `-o` | Additional options to pass to sd.config.ts (multi-use) | `[]` |
292
+ | `--debug` | Output debug logs | `false` |
293
+
275
294
  ### device
276
295
 
277
296
  Runs Capacitor app on Android device. Only available for `client` target packages with `capacitor` config in `sd.config.ts`.
@@ -293,9 +312,9 @@ sd-cli device -p my-app -u http://192.168.0.10:3000
293
312
  | `--options`, `-o` | Additional options to pass to sd.config.ts (multi-use) | `[]` |
294
313
  | `--debug` | Output debug logs | `false` |
295
314
 
296
- ## Exported Types
315
+ ## Exported Types and Utilities
297
316
 
298
- This package exports configuration types for `sd.config.ts`. All types are importable from `@simplysm/sd-cli`.
317
+ This package exports configuration types for `sd.config.ts` and Vite utilities. All are importable from `@simplysm/sd-cli`.
299
318
 
300
319
  ```typescript
301
320
  import type {
@@ -318,7 +337,9 @@ import type {
318
337
  SdCapacitorPermission,
319
338
  SdCapacitorIntentFilter,
320
339
  SdElectronConfig,
340
+ ViteConfigOptions,
321
341
  } from "@simplysm/sd-cli";
342
+ import { createViteConfig } from "@simplysm/sd-cli";
322
343
  ```
323
344
 
324
345
  | Type | Description |
@@ -342,6 +363,25 @@ import type {
342
363
  | `SdCapacitorPermission` | Android permission entry (`name`, `maxSdkVersion?`, `ignore?`) |
343
364
  | `SdCapacitorIntentFilter` | Android intent filter entry (`action?`, `category?`) |
344
365
  | `SdElectronConfig` | Electron desktop app build config |
366
+ | `ViteConfigOptions` | Vite config options for `createViteConfig()` utility function |
367
+
368
+ ## Vite Utilities
369
+
370
+ The package exports `createViteConfig()` utility function for creating Vite configuration in client packages:
371
+
372
+ ```typescript
373
+ import { createViteConfig, type ViteConfigOptions } from "@simplysm/sd-cli";
374
+
375
+ export default createViteConfig({
376
+ // Vite config options
377
+ });
378
+ ```
379
+
380
+ The `createViteConfig()` function creates a pre-configured Vite config for Simplysm client packages, including:
381
+ - Development server configuration
382
+ - Production build optimization
383
+ - Asset handling
384
+ - Environment variable substitution support
345
385
 
346
386
  ## Configuration (sd.config.ts)
347
387
 
@@ -1,5 +1,13 @@
1
1
  import type esbuild from "esbuild";
2
2
  import type { TypecheckEnv } from "./tsconfig";
3
+ /**
4
+ * esbuild outputFiles 중 실제로 변경된 파일만 디스크에 쓴다.
5
+ *
6
+ * - .js 파일: ESM 상대 import 경로에 .js 확장자를 추가한 후 비교
7
+ * - 그 외 파일(.js.map 등): 원본 그대로 비교
8
+ * - 기존 파일과 내용이 동일하면 쓰기를 건너뛰어 타임스탬프를 유지한다.
9
+ */
10
+ export declare function writeChangedOutputFiles(outputFiles: esbuild.OutputFile[]): Promise<void>;
3
11
  /**
4
12
  * Library 빌드용 esbuild 옵션
5
13
  * - bundle: false (개별 파일 트랜스파일)
@@ -1 +1 @@
1
- {"version":3,"file":"esbuild-config.d.ts","sourceRoot":"","sources":["../../src/utils/esbuild-config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAsC/C;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IACvC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAWD;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAmBhG;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAuB9F;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,CAE9F;AAUD;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAU3E;AAyCD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAUrE"}
1
+ {"version":3,"file":"esbuild-config.d.ts","sourceRoot":"","sources":["../../src/utils/esbuild-config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,OAAO,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB9F;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IACvC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAWD;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAoBhG;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAuB9F;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,CAE9F;AAUD;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAU3E;AAyCD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAUrE"}
@@ -2,33 +2,26 @@ import path from "path";
2
2
  import { readFileSync, existsSync } from "fs";
3
3
  import fs from "fs/promises";
4
4
  import { createRequire } from "module";
5
- import { glob } from "glob";
6
5
  import { solidPlugin } from "esbuild-plugin-solid";
7
- function esmRelativeImportPlugin(outdir) {
8
- return {
9
- name: "esm-relative-import",
10
- setup(build) {
11
- build.onEnd(async () => {
12
- const files = await glob("**/*.js", { cwd: outdir });
13
- await Promise.all(
14
- files.map(async (file) => {
15
- const filePath = path.join(outdir, file);
16
- const content = await fs.readFile(filePath, "utf-8");
17
- const rewritten = content.replace(
18
- /((?:from|import)\s*["'])(\.\.?\/[^"']*?)(["'])/g,
19
- (_match, prefix, importPath, suffix) => {
20
- if (/\.(js|mjs|cjs|json|css|wasm|node)$/i.test(importPath)) return _match;
21
- return `${prefix}${importPath}.js${suffix}`;
22
- }
23
- );
24
- if (rewritten !== content) {
25
- await fs.writeFile(filePath, rewritten);
26
- }
27
- })
28
- );
29
- });
30
- }
31
- };
6
+ async function writeChangedOutputFiles(outputFiles) {
7
+ await Promise.all(
8
+ outputFiles.map(async (file) => {
9
+ const finalText = file.path.endsWith(".js") ? file.text.replace(
10
+ /((?:from|import)\s*["'])(\.\.?\/[^"']*?)(["'])/g,
11
+ (_match, prefix, importPath, suffix) => {
12
+ if (/\.(js|mjs|cjs|json|css|wasm|node)$/i.test(importPath)) return _match;
13
+ return `${prefix}${importPath}.js${suffix}`;
14
+ }
15
+ ) : file.text;
16
+ try {
17
+ const existing = await fs.readFile(file.path, "utf-8");
18
+ if (existing === finalText) return;
19
+ } catch {
20
+ }
21
+ await fs.mkdir(path.dirname(file.path), { recursive: true });
22
+ await fs.writeFile(file.path, finalText);
23
+ })
24
+ );
32
25
  }
33
26
  function hasSolidDependency(pkgDir) {
34
27
  const pkgJson = JSON.parse(readFileSync(path.join(pkgDir, "package.json"), "utf-8"));
@@ -36,7 +29,7 @@ function hasSolidDependency(pkgDir) {
36
29
  return "solid-js" in allDeps;
37
30
  }
38
31
  function createLibraryEsbuildOptions(options) {
39
- const plugins = [esmRelativeImportPlugin(path.join(options.pkgDir, "dist"))];
32
+ const plugins = [];
40
33
  if (hasSolidDependency(options.pkgDir)) {
41
34
  plugins.unshift(solidPlugin());
42
35
  }
@@ -49,6 +42,7 @@ function createLibraryEsbuildOptions(options) {
49
42
  platform: options.target === "node" ? "node" : "browser",
50
43
  target: options.target === "node" ? "node20" : "chrome84",
51
44
  bundle: false,
45
+ write: false,
52
46
  tsconfigRaw: { compilerOptions: options.compilerOptions },
53
47
  plugins
54
48
  };
@@ -150,6 +144,7 @@ export {
150
144
  collectUninstalledOptionalPeerDeps,
151
145
  createLibraryEsbuildOptions,
152
146
  createServerEsbuildOptions,
153
- getTypecheckEnvFromTarget
147
+ getTypecheckEnvFromTarget,
148
+ writeChangedOutputFiles
154
149
  };
155
150
  //# sourceMappingURL=esbuild-config.js.map
@@ -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": "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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;AAgLjE;;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;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"}
@@ -6,6 +6,7 @@ import solidPlugin from "vite-plugin-solid";
6
6
  import { VitePWA } from "vite-plugin-pwa";
7
7
  import tailwindcss from "tailwindcss";
8
8
  import { getTailwindConfigDeps } from "./tailwind-config-deps.js";
9
+ import { FsWatcher } from "@simplysm/core-node";
9
10
  function sdTailwindConfigDepsPlugin(pkgDir) {
10
11
  return {
11
12
  name: "sd-tailwind-config-deps",
@@ -92,17 +93,32 @@ function sdScopeWatchPlugin(pkgDir, scopes) {
92
93
  }
93
94
  };
94
95
  },
95
- configureServer(server) {
96
+ async configureServer(server) {
97
+ const distDirs = [];
96
98
  for (const scope of scopes) {
97
99
  const scopeDir = path.join(pkgDir, "node_modules", scope);
98
100
  if (!fs.existsSync(scopeDir)) continue;
99
101
  for (const pkgName of fs.readdirSync(scopeDir)) {
100
102
  const distDir = path.join(scopeDir, pkgName, "dist");
101
103
  if (fs.existsSync(distDir)) {
102
- server.watcher.add(distDir);
104
+ distDirs.push(distDir);
103
105
  }
104
106
  }
105
107
  }
108
+ if (distDirs.length === 0) return;
109
+ const scopeWatcher = await FsWatcher.watch(distDirs);
110
+ scopeWatcher.onChange({ delay: 300 }, (changeInfos) => {
111
+ for (const { path: changedPath } of changeInfos) {
112
+ let realPath;
113
+ try {
114
+ realPath = fs.realpathSync(changedPath);
115
+ } catch {
116
+ continue;
117
+ }
118
+ server.watcher.emit("change", realPath);
119
+ }
120
+ });
121
+ server.httpServer?.on("close", () => void scopeWatcher.close());
106
122
  }
107
123
  };
108
124
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/vite-config.ts"],
4
- "mappings": "AAAA,OAAO,QAAQ;AACf,SAAS,qBAAqB;AAC9B,OAAO,UAAU;AAEjB,OAAO,mBAAmB;AAC1B,OAAO,iBAAiB;AACxB,SAAS,eAAe;AACxB,OAAO,iBAAiB;AAExB,SAAS,6BAA6B;AAStC,SAAS,2BAA2B,QAAwB;AAC1D,SAAO;AAAA,IACL,MAAM;AAAA,IACN,gBAAgB,QAAQ;AACtB,YAAM,aAAa,KAAK,KAAK,QAAQ,oBAAoB;AACzD,UAAI,CAAC,GAAG,WAAW,UAAU,EAAG;AAGhC,YAAM,cAAc,KAAK,KAAK,QAAQ,cAAc;AACpD,YAAM,UAAU,KAAK,MAAM,GAAG,aAAa,aAAa,OAAO,CAAC,EAAE;AAClE,YAAM,WAAW,QAAQ,MAAM,aAAa,IAAI,CAAC;AACjD,YAAM,SAAS,oBAAI,IAAI,CAAC,WAAW,CAAC;AACpC,UAAI,YAAY,MAAM;AACpB,eAAO,IAAI,QAAQ;AAAA,MACrB;AAEA,YAAM,UAAU,sBAAsB,YAAY,CAAC,GAAG,MAAM,CAAC;AAC7D,YAAM,iBAAiB,KAAK,QAAQ,UAAU;AAC9C,YAAM,eAAe,QAAQ,OAAO,CAAC,MAAM,MAAM,cAAc;AAC/D,UAAI,aAAa,WAAW,EAAG;AAE/B,iBAAW,OAAO,cAAc;AAC9B,eAAO,QAAQ,IAAI,GAAG;AAAA,MACxB;AAEA,aAAO,QAAQ,GAAG,UAAU,CAAC,YAAY;AACvC,YAAI,aAAa,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,KAAK,UAAU,OAAO,CAAC,GAAG;AAG3E,gBAAM,WAAW,cAAc,YAAY,GAAG;AAC9C,qBAAW,OAAO,SAAS;AACzB,mBAAO,SAAS,MAAM,GAAG;AAAA,UAC3B;AAGA,gBAAM,MAAM,oBAAI,KAAK;AACrB,aAAG,WAAW,YAAY,KAAK,GAAG;AAClC,iBAAO,GAAG,KAAK,EAAE,MAAM,cAAc,CAAC;AAAA,QACxC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAUA,SAAS,qBAAqB,aAA8B;AAC1D,MAAI;AACF,UAAM,UAAU,KAAK,MAAM,GAAG,aAAa,aAAa,OAAO,CAAC;AAKhE,QACE,QAAQ,WAAW,QACnB,OAAO,QAAQ,YAAY,YAC3B,EAAE,OAAO,QAAQ,YACjB,QAAQ,QAAQ,QAChB,QAAQ,UAAU,MAClB;AACA,aAAO;AAAA,IACT;AAAA,EACF,QAAQ;AAAA,EAER;AACA,SAAO;AACT;AAUA,SAAS,mBAAmB,QAAgB,QAA0B;AACpE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AACP,YAAM,WAAqB,CAAC;AAC5B,YAAM,sBAAgC,CAAC;AAEvC,iBAAW,SAAS,QAAQ;AAE1B,cAAM,WAAW,KAAK,KAAK,QAAQ,gBAAgB,KAAK;AACxD,YAAI,CAAC,GAAG,WAAW,QAAQ,EAAG;AAE9B,mBAAW,QAAQ,GAAG,YAAY,QAAQ,GAAG;AAC3C,mBAAS,KAAK,GAAG,KAAK,IAAI,IAAI,EAAE;AAKhC,gBAAM,iBAAiB,KAAK,KAAK,UAAU,MAAM,cAAc;AAC/D,cAAI;AACF,kBAAM,aAAa,KAAK,MAAM,GAAG,aAAa,gBAAgB,OAAO,CAAC;AAGtE,kBAAM,cAAc,GAAG,KAAK,IAAI,IAAI;AACpC,uBAAW,OAAO,OAAO,KAAK,WAAW,gBAAgB,CAAC,CAAC,GAAG;AAE5D,kBAAI,OAAO,KAAK,CAAC,MAAM,IAAI,WAAW,GAAG,CAAC,GAAG,CAAC,EAAG;AAEjD,kBAAI,QAAQ,cAAc,IAAI,WAAW,WAAW,KAAK,IAAI,WAAW,QAAQ,EAAG;AAEnF,kBAAI,QAAQ,cAAe;AAI3B,oBAAM,cAAc,GAAG,aAAa,KAAK,KAAK,UAAU,IAAI,CAAC;AAC7D,oBAAM,kBAAkB,KAAK,QAAQ,aAAa,OAAO;AACzD,oBAAM,qBAAqB,KAAK,KAAK,iBAAiB,KAAK,cAAc;AACzE,kBAAI,qBAAqB,kBAAkB,GAAG;AAC5C;AAAA,cACF;AAIA,oBAAM,qBAAqB,KAAK,KAAK,UAAU,MAAM,gBAAgB,KAAK,cAAc;AACxF,kBAAI,qBAAqB,kBAAkB,GAAG;AAC5C;AAAA,cACF;AAEA,kCAAoB,KAAK,GAAG,WAAW,MAAM,GAAG,EAAE;AAAA,YACpD;AAAA,UACF,QAAQ;AAAA,UAER;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL,cAAc;AAAA,UACZ,SAAS;AAAA,UACT,SAAS,CAAC,GAAG,IAAI,IAAI,mBAAmB,CAAC;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAAA,IACA,gBAAgB,QAAQ;AACtB,iBAAW,SAAS,QAAQ;AAC1B,cAAM,WAAW,KAAK,KAAK,QAAQ,gBAAgB,KAAK;AACxD,YAAI,CAAC,GAAG,WAAW,QAAQ,EAAG;AAE9B,mBAAW,WAAW,GAAG,YAAY,QAAQ,GAAG;AAC9C,gBAAM,UAAU,KAAK,KAAK,UAAU,SAAS,MAAM;AACnD,cAAI,GAAG,WAAW,OAAO,GAAG;AAC1B,mBAAO,QAAQ,IAAI,OAAO;AAAA,UAC5B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAyBO,SAAS,iBAAiB,SAA4C;AAC3E,QAAM,EAAE,QAAQ,MAAM,cAAc,iBAAiB,KAAK,MAAM,YAAY,YAAY,IAAI;AAG5F,QAAM,cAAc,KAAK,KAAK,QAAQ,cAAc;AACpD,QAAM,UAAU,KAAK,MAAM,GAAG,aAAa,aAAa,OAAO,CAAC;AAChE,QAAM,UAAU,QAAQ,KAAK,QAAQ,aAAa,EAAE;AAGpD,QAAM,YAAoC,CAAC;AAC3C,MAAI,OAAO,MAAM;AACf,cAAU,aAAa,IAAI,KAAK,UAAU,GAAG;AAAA,EAC/C;AAEA,QAAM,SAAyB;AAAA,IAC7B,MAAM;AAAA,IACN,MAAM,IAAI,IAAI;AAAA,IACd,SAAS;AAAA,MACP,cAAc,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC;AAAA,MAC1C,YAAY;AAAA,MACZ,QAAQ;AAAA,QACN,cAAc;AAAA,QACd,gBAAgB;AAAA,QAChB,UAAU;AAAA,UACR,MAAM;AAAA,UACN,YAAY;AAAA,UACZ,SAAS;AAAA,UACT,aAAa;AAAA,UACb,kBAAkB;AAAA,QACpB;AAAA,QACA,SAAS;AAAA,UACP,cAAc,CAAC,sCAAsC;AAAA,QACvD;AAAA,MACF,CAAC;AAAA,MACD,2BAA2B,MAAM;AAAA,MACjC,GAAI,eAAe,QAAQ,YAAY,SAAS,IAAI,CAAC,mBAAmB,QAAQ,WAAW,CAAC,IAAI,CAAC;AAAA,IACnG;AAAA,IACA,KAAK;AAAA,MACH,SAAS;AAAA,QACP,SAAS,CAAC,YAAY,EAAE,QAAQ,KAAK,KAAK,QAAQ,oBAAoB,EAAE,CAAC,CAAC;AAAA,MAC5E;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,aAAa,EAAE,gBAA2E;AAAA,IAC5F;AAAA,EACF;AAEA,MAAI,SAAS,SAAS;AACpB,WAAO,WAAW;AAAA,EACpB,OAAO;AAEL,WAAO,SAAS;AAChB,WAAO,SAAS;AAAA,MACd,MAAM,eAAe,IAAI,SAAY;AAAA,MACrC,YAAY,eAAe,KAAK,eAAe;AAAA,IACjD;AAAA,EACF;AAEA,SAAO;AACT;",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"library.worker.d.ts","sourceRoot":"","sources":["../../src/workers/library.worker.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAO/D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,oBAAoB,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,oBAAoB,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClC,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAsCD;;GAEG;AACH,iBAAe,KAAK,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA+BxE;AAmED;;;;GAIG;AACH,iBAAe,UAAU,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwD/D;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":"library.worker.d.ts","sourceRoot":"","sources":["../../src/workers/library.worker.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAW/D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,oBAAoB,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,oBAAoB,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClC,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAsCD;;GAEG;AACH,iBAAe,KAAK,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAiCxE;AAwED;;;;GAIG;AACH,iBAAe,UAAU,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwD/D;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"}
@@ -3,7 +3,11 @@ import esbuild from "esbuild";
3
3
  import { createWorker, FsWatcher } from "@simplysm/core-node";
4
4
  import { consola } from "consola";
5
5
  import { parseRootTsconfig, getPackageSourceFiles, getCompilerOptionsForPackage } from "../utils/tsconfig.js";
6
- import { createLibraryEsbuildOptions, getTypecheckEnvFromTarget } from "../utils/esbuild-config.js";
6
+ import {
7
+ createLibraryEsbuildOptions,
8
+ getTypecheckEnvFromTarget,
9
+ writeChangedOutputFiles
10
+ } from "../utils/esbuild-config.js";
7
11
  import { registerCleanupHandlers } from "../utils/worker-utils.js";
8
12
  const logger = consola.withTag("sd:cli:library:worker");
9
13
  let esbuildContext;
@@ -29,6 +33,9 @@ async function build(info) {
29
33
  compilerOptions
30
34
  });
31
35
  const result = await esbuild.build(esbuildOptions);
36
+ if (result.outputFiles) {
37
+ await writeChangedOutputFiles(result.outputFiles);
38
+ }
32
39
  const errors = result.errors.map((e) => e.text);
33
40
  return {
34
41
  success: result.errors.length === 0,
@@ -64,7 +71,10 @@ async function createAndBuildContext(pkgDir, cwd, config, isFirstBuild, resolveF
64
71
  pluginBuild.onStart(() => {
65
72
  sender.send("buildStart", {});
66
73
  });
67
- pluginBuild.onEnd((result) => {
74
+ pluginBuild.onEnd(async (result) => {
75
+ if (result.outputFiles) {
76
+ await writeChangedOutputFiles(result.outputFiles);
77
+ }
68
78
  const errors = result.errors.map((e) => e.text);
69
79
  const success = result.errors.length === 0;
70
80
  sender.send("build", { success, errors: errors.length > 0 ? errors : void 0 });
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/workers/library.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.12",
4
+ "version": "13.0.13",
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-common": "13.0.12",
48
- "@simplysm/core-node": "13.0.12",
49
- "@simplysm/storage": "13.0.12"
47
+ "@simplysm/core-common": "13.0.13",
48
+ "@simplysm/core-node": "13.0.13",
49
+ "@simplysm/storage": "13.0.13"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@types/semver": "^7.7.1",
@@ -2,45 +2,42 @@ import path from "path";
2
2
  import { readFileSync, existsSync } from "fs";
3
3
  import fs from "fs/promises";
4
4
  import { createRequire } from "module";
5
- import { glob } from "glob";
6
5
  import type esbuild from "esbuild";
7
6
  import { solidPlugin } from "esbuild-plugin-solid";
8
7
  import type { TypecheckEnv } from "./tsconfig";
9
8
 
10
9
  /**
11
- * ESM 상대 import 경로에 .js 확장자를 추가하는 esbuild 플러그인.
10
+ * esbuild outputFiles 실제로 변경된 파일만 디스크에 쓴다.
12
11
  *
13
- * bundle: false 모드에서 esbuild는 import 경로를 그대로 유지하므로,
14
- * Node.js ESM에서 직접 실행 확장자 누락으로 모듈을 찾지 못하는 문제를 해결한다.
12
+ * - .js 파일: ESM 상대 import 경로에 .js 확장자를 추가한 후 비교
13
+ * - 파일(.js.map 등): 원본 그대로 비교
14
+ * - 기존 파일과 내용이 동일하면 쓰기를 건너뛰어 타임스탬프를 유지한다.
15
15
  */
16
- function esmRelativeImportPlugin(outdir: string): esbuild.Plugin {
17
- return {
18
- name: "esm-relative-import",
19
- setup(build) {
20
- build.onEnd(async () => {
21
- const files = await glob("**/*.js", { cwd: outdir });
22
-
23
- await Promise.all(
24
- files.map(async (file) => {
25
- const filePath = path.join(outdir, file);
26
- const content = await fs.readFile(filePath, "utf-8");
27
-
28
- const rewritten = content.replace(
29
- /((?:from|import)\s*["'])(\.\.?\/[^"']*?)(["'])/g,
30
- (_match, prefix: string, importPath: string, suffix: string) => {
31
- if (/\.(js|mjs|cjs|json|css|wasm|node)$/i.test(importPath)) return _match;
32
- return `${prefix}${importPath}.js${suffix}`;
33
- },
34
- );
35
-
36
- if (rewritten !== content) {
37
- await fs.writeFile(filePath, rewritten);
38
- }
39
- }),
40
- );
41
- });
42
- },
43
- };
16
+ export async function writeChangedOutputFiles(outputFiles: esbuild.OutputFile[]): Promise<void> {
17
+ await Promise.all(
18
+ outputFiles.map(async (file) => {
19
+ const finalText = file.path.endsWith(".js")
20
+ ? file.text.replace(
21
+ /((?:from|import)\s*["'])(\.\.?\/[^"']*?)(["'])/g,
22
+ (_match, prefix: string, importPath: string, suffix: string) => {
23
+ if (/\.(js|mjs|cjs|json|css|wasm|node)$/i.test(importPath)) return _match;
24
+ return `${prefix}${importPath}.js${suffix}`;
25
+ },
26
+ )
27
+ : file.text;
28
+
29
+ // Compare with existing file — skip write if unchanged
30
+ try {
31
+ const existing = await fs.readFile(file.path, "utf-8");
32
+ if (existing === finalText) return;
33
+ } catch {
34
+ // File doesn't exist yet
35
+ }
36
+
37
+ await fs.mkdir(path.dirname(file.path), { recursive: true });
38
+ await fs.writeFile(file.path, finalText);
39
+ }),
40
+ );
44
41
  }
45
42
 
46
43
  /**
@@ -86,7 +83,7 @@ function hasSolidDependency(pkgDir: string): boolean {
86
83
  * - target: node면 node20, 그 외는 chrome84
87
84
  */
88
85
  export function createLibraryEsbuildOptions(options: LibraryEsbuildOptions): esbuild.BuildOptions {
89
- const plugins: esbuild.Plugin[] = [esmRelativeImportPlugin(path.join(options.pkgDir, "dist"))];
86
+ const plugins: esbuild.Plugin[] = [];
90
87
 
91
88
  if (hasSolidDependency(options.pkgDir)) {
92
89
  plugins.unshift(solidPlugin());
@@ -101,6 +98,7 @@ export function createLibraryEsbuildOptions(options: LibraryEsbuildOptions): esb
101
98
  platform: options.target === "node" ? "node" : "browser",
102
99
  target: options.target === "node" ? "node20" : "chrome84",
103
100
  bundle: false,
101
+ write: false,
104
102
  tsconfigRaw: { compilerOptions: options.compilerOptions as esbuild.TsconfigRaw["compilerOptions"] },
105
103
  plugins,
106
104
  };
@@ -8,6 +8,7 @@ import { VitePWA } from "vite-plugin-pwa";
8
8
  import tailwindcss from "tailwindcss";
9
9
  import type esbuild from "esbuild";
10
10
  import { getTailwindConfigDeps } from "./tailwind-config-deps.js";
11
+ import { FsWatcher } from "@simplysm/core-node";
11
12
 
12
13
  /**
13
14
  * Tailwind config의 scope 패키지 의존성을 watch하는 Vite 플러그인.
@@ -95,7 +96,8 @@ function isSubpathOnlyPackage(pkgJsonPath: string): boolean {
95
96
  *
96
97
  * Vite는 node_modules를 기본적으로 watch에서 제외하므로,
97
98
  * scope 패키지의 dist 파일이 변경되어도 HMR/리빌드가 트리거되지 않는다.
98
- * 이 플러그인은 scope 패키지의 dist 디렉토리를 watcher에 명시적으로 추가하고,
99
+ * 이 플러그인은 별도의 FsWatcher로 scope 패키지의 dist 디렉토리를 감시하고,
100
+ * 변경 시 Vite의 내부 HMR 파이프라인을 트리거한다.
99
101
  * optimizeDeps에서 제외하여 pre-bundled 캐시로 인한 변경 무시를 방지한다.
100
102
  */
101
103
  function sdScopeWatchPlugin(pkgDir: string, scopes: string[]): Plugin {
@@ -161,7 +163,9 @@ function sdScopeWatchPlugin(pkgDir: string, scopes: string[]): Plugin {
161
163
  },
162
164
  };
163
165
  },
164
- configureServer(server) {
166
+ async configureServer(server) {
167
+ const distDirs: string[] = [];
168
+
165
169
  for (const scope of scopes) {
166
170
  const scopeDir = path.join(pkgDir, "node_modules", scope);
167
171
  if (!fs.existsSync(scopeDir)) continue;
@@ -169,10 +173,34 @@ function sdScopeWatchPlugin(pkgDir: string, scopes: string[]): Plugin {
169
173
  for (const pkgName of fs.readdirSync(scopeDir)) {
170
174
  const distDir = path.join(scopeDir, pkgName, "dist");
171
175
  if (fs.existsSync(distDir)) {
172
- server.watcher.add(distDir);
176
+ distDirs.push(distDir);
173
177
  }
174
178
  }
175
179
  }
180
+
181
+ if (distDirs.length === 0) return;
182
+
183
+ // Vite의 기본 watcher는 **/node_modules/**를 ignore하고
184
+ // server.watcher.add()로는 이 패턴을 override할 수 없다.
185
+ // 별도의 FsWatcher로 scope 패키지의 dist 디렉토리를 감시한다.
186
+ const scopeWatcher = await FsWatcher.watch(distDirs);
187
+ scopeWatcher.onChange({ delay: 300 }, (changeInfos) => {
188
+ for (const { path: changedPath } of changeInfos) {
189
+ // pnpm symlink → real path 변환 (Vite module graph은 real path 사용)
190
+ let realPath: string;
191
+ try {
192
+ realPath = fs.realpathSync(changedPath);
193
+ } catch {
194
+ continue; // 삭제된 파일
195
+ }
196
+
197
+ // Vite의 내부 HMR 파이프라인 트리거
198
+ server.watcher.emit("change", realPath);
199
+ }
200
+ });
201
+
202
+ // 서버 종료 시 watcher 정리
203
+ server.httpServer?.on("close", () => void scopeWatcher.close());
176
204
  },
177
205
  };
178
206
  }
@@ -4,7 +4,11 @@ import { createWorker, FsWatcher } from "@simplysm/core-node";
4
4
  import { consola } from "consola";
5
5
  import type { SdBuildPackageConfig } from "../sd-config.types";
6
6
  import { parseRootTsconfig, getPackageSourceFiles, getCompilerOptionsForPackage } from "../utils/tsconfig";
7
- import { createLibraryEsbuildOptions, getTypecheckEnvFromTarget } from "../utils/esbuild-config";
7
+ import {
8
+ createLibraryEsbuildOptions,
9
+ getTypecheckEnvFromTarget,
10
+ writeChangedOutputFiles,
11
+ } from "../utils/esbuild-config";
8
12
  import { registerCleanupHandlers } from "../utils/worker-utils";
9
13
 
10
14
  //#region Types
@@ -119,7 +123,9 @@ async function build(info: LibraryBuildInfo): Promise<LibraryBuildResult> {
119
123
  });
120
124
 
121
125
  const result = await esbuild.build(esbuildOptions);
122
-
126
+ if (result.outputFiles) {
127
+ await writeChangedOutputFiles(result.outputFiles);
128
+ }
123
129
  const errors = result.errors.map((e) => e.text);
124
130
  return {
125
131
  success: result.errors.length === 0,
@@ -176,7 +182,12 @@ async function createAndBuildContext(
176
182
  sender.send("buildStart", {});
177
183
  });
178
184
 
179
- pluginBuild.onEnd((result) => {
185
+ pluginBuild.onEnd(async (result) => {
186
+ // Write only changed files to disk
187
+ if (result.outputFiles) {
188
+ await writeChangedOutputFiles(result.outputFiles);
189
+ }
190
+
180
191
  const errors = result.errors.map((e) => e.text);
181
192
  const success = result.errors.length === 0;
182
193
 
@@ -4,7 +4,7 @@
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "dependencies": {
7
- "@simplysm/solid": "~13.0.12",
7
+ "@simplysm/solid": "~13.0.13",
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.12",
8
- "@simplysm/service-server": "~13.0.12"
7
+ "@simplysm/core-common": "~13.0.13",
8
+ "@simplysm/service-server": "~13.0.13"
9
9
  }
10
10
  }
@@ -15,9 +15,9 @@
15
15
  "vitest": "vitest"
16
16
  },
17
17
  "devDependencies": {
18
- "@simplysm/sd-cli": "~13.0.12",
19
- "@simplysm/claude": "~13.0.12",
20
- "@simplysm/lint": "~13.0.12",
18
+ "@simplysm/sd-cli": "~13.0.13",
19
+ "@simplysm/claude": "~13.0.13",
20
+ "@simplysm/lint": "~13.0.13",
21
21
  "@types/node": "^20.19.33",
22
22
  "eslint": "^9.39.2",
23
23
  "prettier": "^3.8.1",