@simplysm/core-node 14.0.10 → 14.0.12

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/dist/utils/fs.js CHANGED
@@ -196,24 +196,24 @@ export async function read(targetPath) {
196
196
  }
197
197
  }
198
198
  /**
199
- * 파일을 Buffer로 읽는다.
199
+ * 파일을 Uint8Array로 읽는다.
200
200
  * @param targetPath - 읽을 파일 경로
201
201
  */
202
- export function readBufferSync(targetPath) {
202
+ export function readBytesSync(targetPath) {
203
203
  try {
204
- return fs.readFileSync(targetPath);
204
+ return new Uint8Array(fs.readFileSync(targetPath));
205
205
  }
206
206
  catch (err) {
207
207
  throw new SdError(err, targetPath);
208
208
  }
209
209
  }
210
210
  /**
211
- * 파일을 Buffer로 읽는다 (비동기).
211
+ * 파일을 Uint8Array로 읽는다 (비동기).
212
212
  * @param targetPath - 읽을 파일 경로
213
213
  */
214
- export async function readBuffer(targetPath) {
214
+ export async function readBytes(targetPath) {
215
215
  try {
216
- return await fs.promises.readFile(targetPath);
216
+ return new Uint8Array(await fs.promises.readFile(targetPath));
217
217
  }
218
218
  catch (err) {
219
219
  throw new SdError(err, targetPath);
@@ -457,12 +457,10 @@ export function findAllParentChildPathsSync(childGlob, fromPath, rootPath) {
457
457
  * 그렇지 않으면 파일 시스템 루트까지 검색한다.
458
458
  */
459
459
  export async function findAllParentChildPaths(childGlob, fromPath, rootPath) {
460
- const resultPaths = [];
460
+ const dirs = [];
461
461
  let current = fromPath;
462
462
  while (current) {
463
- const potential = path.resolve(current, childGlob);
464
- const globResults = await glob(potential);
465
- resultPaths.push(...globResults);
463
+ dirs.push(current);
466
464
  if (current === rootPath)
467
465
  break;
468
466
  const next = path.dirname(current);
@@ -470,7 +468,8 @@ export async function findAllParentChildPaths(childGlob, fromPath, rootPath) {
470
468
  break;
471
469
  current = next;
472
470
  }
473
- return resultPaths;
471
+ const results = await Promise.all(dirs.map((dir) => glob(path.resolve(dir, childGlob))));
472
+ return results.flat();
474
473
  }
475
474
  //#endregion
476
475
  //# sourceMappingURL=fs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"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"}
package/docs/cpx.md ADDED
@@ -0,0 +1,173 @@
1
+ # cpx
2
+
3
+ Namespace of child process execution utilities. Provides async/sync process spawning with automatic encoding detection, a `PromiseLike` wrapper for process control, and byte decoding helpers.
4
+
5
+ Imported as:
6
+ ```typescript
7
+ import { cpx } from "@simplysm/core-node";
8
+ ```
9
+
10
+ ## Types
11
+
12
+ ### ExecOptions
13
+
14
+ ```ts
15
+ interface ExecOptions {
16
+ cwd?: string;
17
+ env?: Record<string, string>;
18
+ stdio?: "pipe" | "inherit";
19
+ shell?: boolean;
20
+ reject?: boolean;
21
+ }
22
+ ```
23
+
24
+ | Field | Type | Default | Description |
25
+ |-------|------|---------|-------------|
26
+ | `cwd` | `string` | `undefined` | Working directory for the child process |
27
+ | `env` | `Record<string, string>` | `undefined` | Extra environment variables (merged with `process.env`) |
28
+ | `stdio` | `"pipe" \| "inherit"` | `"pipe"` | `"pipe"` captures stdout/stderr; `"inherit"` passes them through |
29
+ | `shell` | `boolean` | `false` | Run the command in a shell |
30
+ | `reject` | `boolean` | `true` | If `false`, the promise resolves even on non-zero exit codes |
31
+
32
+ ### ExecSyncOptions
33
+
34
+ ```ts
35
+ type ExecSyncOptions = Omit<ExecOptions, "reject">
36
+ ```
37
+
38
+ Same as `ExecOptions` without the `reject` field. `execSync` always returns a result regardless of exit code.
39
+
40
+ ### ExecResult
41
+
42
+ ```ts
43
+ interface ExecResult {
44
+ stdout: string;
45
+ stderr: string;
46
+ exitCode: number;
47
+ }
48
+ ```
49
+
50
+ | Field | Type | Description |
51
+ |-------|------|-------------|
52
+ | `stdout` | `string` | Captured standard output (empty when `stdio: "inherit"`) |
53
+ | `stderr` | `string` | Captured standard error (empty when `stdio: "inherit"`) |
54
+ | `exitCode` | `number` | Process exit code |
55
+
56
+ ## ExecProcess
57
+
58
+ ```ts
59
+ class ExecProcess implements PromiseLike<ExecResult> {
60
+ get pid(): number | undefined;
61
+ then<TResult1, TResult2>(
62
+ onfulfilled?: ((value: ExecResult) => TResult1 | PromiseLike<TResult1>) | null,
63
+ onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,
64
+ ): Promise<TResult1 | TResult2>;
65
+ catch<TResult>(
66
+ onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | null,
67
+ ): Promise<ExecResult | TResult>;
68
+ kill(signal?: NodeJS.Signals | number): boolean;
69
+ }
70
+ ```
71
+
72
+ A `PromiseLike<ExecResult>` wrapper around `ChildProcess`. Can be `await`ed for the result or `kill()`ed to terminate the process.
73
+
74
+ | Property/Method | Description |
75
+ |-----------------|-------------|
76
+ | `pid` | Process ID of the child process (undefined if not yet spawned) |
77
+ | `then()` | Standard `PromiseLike` fulfillment |
78
+ | `catch()` | Standard promise rejection handler |
79
+ | `kill(signal?)` | Send a signal to terminate the child process |
80
+
81
+ ## Functions
82
+
83
+ ### exec
84
+
85
+ ```ts
86
+ function exec(cmd: string, args: string[], options?: ExecOptions): ExecProcess
87
+ ```
88
+
89
+ Spawn a child process asynchronously. Returns an `ExecProcess` that can be awaited or killed.
90
+
91
+ | Parameter | Type | Description |
92
+ |-----------|------|-------------|
93
+ | `cmd` | `string` | Command to execute |
94
+ | `args` | `string[]` | Command arguments |
95
+ | `options` | `ExecOptions` | Execution options |
96
+
97
+ By default, rejects if exit code is non-zero. Set `options.reject: false` to always resolve. Output is decoded using system encoding detection (UTF-8 with fallback).
98
+
99
+ ### execSync
100
+
101
+ ```ts
102
+ function execSync(cmd: string, args: string[], options?: ExecSyncOptions): ExecResult
103
+ ```
104
+
105
+ Spawn a child process synchronously. Always returns an `ExecResult` regardless of exit code.
106
+
107
+ | Parameter | Type | Description |
108
+ |-----------|------|-------------|
109
+ | `cmd` | `string` | Command to execute |
110
+ | `args` | `string[]` | Command arguments |
111
+ | `options` | `ExecSyncOptions` | Execution options |
112
+
113
+ ### codePageToEncoding
114
+
115
+ ```ts
116
+ function codePageToEncoding(codePage: number): string
117
+ ```
118
+
119
+ Convert a Windows code page number to a standard encoding name. Falls back to `"utf-8"` for unknown code pages.
120
+
121
+ Supported code pages: 65001 (utf-8), 949 (euc-kr), 932 (shift-jis), 936 (gbk), 950 (big5), 1252/1251/1250 (windows-*), 874 (windows-874).
122
+
123
+ ### getSystemEncoding
124
+
125
+ ```ts
126
+ function getSystemEncoding(): string
127
+ ```
128
+
129
+ Detect the system console encoding. On Windows, runs `chcp` to get the code page. On other platforms, reads `LANG`/`LC_ALL` environment variables. The result is cached after the first call.
130
+
131
+ ### resetEncodingCache
132
+
133
+ ```ts
134
+ function resetEncodingCache(): void
135
+ ```
136
+
137
+ Clear the cached system encoding so the next `getSystemEncoding()` call re-detects.
138
+
139
+ ### decodeBytes
140
+
141
+ ```ts
142
+ function decodeBytes(raw: Uint8Array, systemEncoding?: string): string
143
+ ```
144
+
145
+ Decode a `Uint8Array` to a string. First tries UTF-8 (with `fatal: true`); if that fails, falls back to the system encoding.
146
+
147
+ | Parameter | Type | Description |
148
+ |-----------|------|-------------|
149
+ | `raw` | `Uint8Array` | Raw bytes to decode |
150
+ | `systemEncoding` | `string` | Override encoding (defaults to `getSystemEncoding()`) |
151
+
152
+ ## Usage
153
+
154
+ ```ts
155
+ import { cpx } from "@simplysm/core-node";
156
+
157
+ // Basic execution
158
+ const result = await cpx.exec("git", ["status"], { cwd: "/project" });
159
+ // result.stdout, result.stderr, result.exitCode
160
+
161
+ // Inherit stdio
162
+ await cpx.exec("make", ["build"], { stdio: "inherit" });
163
+
164
+ // Don't reject on failure
165
+ const { exitCode } = await cpx.exec("test-cmd", [], { reject: false });
166
+
167
+ // Kill a long-running process
168
+ const proc = cpx.exec("long-cmd", []);
169
+ proc.kill();
170
+
171
+ // Synchronous execution
172
+ const syncResult = cpx.execSync("node", ["--version"]);
173
+ ```
@@ -22,14 +22,14 @@ Supported file change event types.
22
22
  ```ts
23
23
  interface FsWatcherChangeInfo {
24
24
  event: FsWatcherEvent;
25
- path: NormPath;
25
+ path: PosixPath;
26
26
  }
27
27
  ```
28
28
 
29
29
  | Field | Type | Description |
30
30
  |-------|------|-------------|
31
31
  | `event` | `FsWatcherEvent` | The type of change event |
32
- | `path` | `NormPath` | Normalized absolute path of the changed file/directory |
32
+ | `path` | `PosixPath` | Normalized absolute path of the changed file/directory |
33
33
 
34
34
  ## FsWatcher
35
35
 
package/docs/pathx.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # pathx
2
2
 
3
- Namespace of path manipulation utilities. Provides normalized path types, POSIX conversion, and directory-based filtering.
3
+ Namespace of path manipulation utilities. Provides a branded POSIX path type, path conversion, and directory-based filtering.
4
4
 
5
5
  Imported as:
6
6
  ```typescript
@@ -9,27 +9,39 @@ import { pathx } from "@simplysm/core-node";
9
9
 
10
10
  ## Types
11
11
 
12
- ### NormPath
12
+ ### PosixPath
13
13
 
14
14
  ```ts
15
- type NormPath = string & { [NORM]: never }
15
+ type PosixPath = string & { [POSIX]: never }
16
16
  ```
17
17
 
18
- Branded string type representing a normalized, resolved absolute path. Can only be created via `norm()`.
18
+ Branded string type guaranteeing forward-slash (`/`) separators. Can only be created via `posix()` or `posixResolve()`.
19
19
 
20
20
  ## Functions
21
21
 
22
22
  ### posix
23
23
 
24
24
  ```ts
25
- function posix(...args: string[]): string
25
+ function posix(p: string): PosixPath
26
26
  ```
27
27
 
28
- Convert a path to POSIX style (backslashes replaced with forward slashes). Accepts multiple segments which are joined with `path.join`.
28
+ Convert a path to POSIX style (backslashes replaced with forward slashes). No path resolution or joining is performed.
29
29
 
30
30
  ```ts
31
- pathx.posix("C:\\Users\\test"); // "C:/Users/test"
32
- pathx.posix("src", "index.ts"); // "src/index.ts"
31
+ pathx.posix("C:\\Users\\test"); // "C:/Users/test"
32
+ ```
33
+
34
+ ### posixResolve
35
+
36
+ ```ts
37
+ function posixResolve(...args: string[]): PosixPath
38
+ ```
39
+
40
+ Resolve path segments to an absolute path, then convert to POSIX style.
41
+
42
+ ```ts
43
+ pathx.posixResolve("/base", "sub", "file.txt"); // "/base/sub/file.txt"
44
+ pathx.posixResolve("relative/path"); // "D:/cwd/relative/path"
33
45
  ```
34
46
 
35
47
  ### changeFileDirectory
@@ -76,7 +88,7 @@ pathx.basenameWithoutExt("/path/to/file.spec.ts"); // "file.spec"
76
88
  function isChildPath(childPath: string, parentPath: string): boolean
77
89
  ```
78
90
 
79
- Check if `childPath` is a descendant of `parentPath`. Returns `false` for identical paths. Paths are normalized internally via `norm()`.
91
+ Check if `childPath` is a descendant of `parentPath`. Returns `false` for identical paths. Paths are normalized internally via `posixResolve()`.
80
92
 
81
93
  ```ts
82
94
  pathx.isChildPath("/a/b/c", "/a/b"); // true
@@ -84,19 +96,6 @@ pathx.isChildPath("/a/b", "/a/b/c"); // false
84
96
  pathx.isChildPath("/a/b", "/a/b"); // false (same path)
85
97
  ```
86
98
 
87
- ### norm
88
-
89
- ```ts
90
- function norm(...paths: string[]): NormPath
91
- ```
92
-
93
- Normalize and resolve path segments into a `NormPath` (absolute, platform-native separators).
94
-
95
- ```ts
96
- pathx.norm("/some/path"); // NormPath
97
- pathx.norm("relative", "path"); // NormPath (resolved to absolute)
98
- ```
99
-
100
99
  ### filterByTargets
101
100
 
102
101
  ```ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/core-node",
3
- "version": "14.0.10",
3
+ "version": "14.0.12",
4
4
  "description": "심플리즘 패키지 - 코어 (node)",
5
5
  "author": "심플리즘",
6
6
  "license": "Apache-2.0",
@@ -23,9 +23,9 @@
23
23
  "chokidar": "^5.0.0",
24
24
  "consola": "^3.4.2",
25
25
  "glob": "^13.0.6",
26
- "minimatch": "^10.2.4",
26
+ "minimatch": "^10.2.5",
27
27
  "tsx": "^4.21.0",
28
- "@simplysm/core-common": "14.0.10"
28
+ "@simplysm/core-common": "14.0.12"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@types/node": "^20.19.37"
@@ -74,6 +74,9 @@ export interface FsWatcherChangeInfo {
74
74
  * await watcher.close();
75
75
  */
76
76
  export class FsWatcher {
77
+ private static readonly _MAX_RETRIES = 3;
78
+ private static readonly _RETRY_DELAY_MS = 1000;
79
+
77
80
  /**
78
81
  * 파일 감시를 시작한다 (비동기).
79
82
  * ready 이벤트가 발생할 때까지 대기한다.
@@ -102,17 +105,40 @@ export class FsWatcher {
102
105
  });
103
106
  }
104
107
 
105
- private readonly _watcher: chokidar.FSWatcher;
108
+ private _watcher: chokidar.FSWatcher;
109
+ private readonly _paths: string[];
110
+ private readonly _options: chokidar.ChokidarOptions;
106
111
  private readonly _ignoreInitial: boolean = true;
107
112
  private readonly _debounceQueues: DebounceQueue[] = [];
108
113
  private readonly _globMatchers: Minimatch[] = [];
114
+ private readonly _allHandlers: Array<(event: string, path: string) => void> = [];
115
+ private readonly _creationStack: string;
116
+ private _retryCount = 0;
117
+ private _isRecovering = false;
109
118
 
110
119
  private readonly _logger = consola.withTag("sd-fs-watcher");
111
120
 
112
121
  private constructor(paths: string[], options?: chokidar.ChokidarOptions) {
122
+ // 생성 시점의 스택트레이스를 저장 (에러 발생 시 호출부 추적용)
123
+ this._creationStack = new Error().stack ?? "";
124
+ this._paths = [...paths];
125
+ this._options = { ...options };
126
+
127
+ this._watcher = this._buildChokidarWatcher();
128
+ this._ignoreInitial = options?.ignoreInitial ?? this._ignoreInitial;
129
+
130
+ this._setupErrorHandler();
131
+ }
132
+
133
+ /**
134
+ * 저장된 paths와 options로 chokidar watcher를 생성한다.
135
+ * glob 패턴에서 base 디렉토리를 추출하고 globMatchers를 재구성한다.
136
+ */
137
+ private _buildChokidarWatcher(): chokidar.FSWatcher {
113
138
  const watchPaths: string[] = [];
139
+ this._globMatchers.length = 0;
114
140
 
115
- for (const p of paths) {
141
+ for (const p of this._paths) {
116
142
  const posixPath = posix(p);
117
143
  if (GLOB_CHARS_RE.test(posixPath)) {
118
144
  this._globMatchers.push(new Minimatch(posixPath, { dot: true }));
@@ -125,19 +151,98 @@ export class FsWatcher {
125
151
  // 중복 경로 제거
126
152
  const uniquePaths = [...new Set(watchPaths)];
127
153
 
128
- this._watcher = chokidar.watch(uniquePaths, {
154
+ return chokidar.watch(uniquePaths, {
129
155
  persistent: true,
130
- ...options,
156
+ ...this._options,
131
157
  ignoreInitial: true,
132
158
  });
133
- this._ignoreInitial = options?.ignoreInitial ?? this._ignoreInitial;
159
+ }
134
160
 
135
- // 감시 중 발생하는 오류를 로깅
161
+ /**
162
+ * chokidar watcher에 에러 핸들러를 등록한다.
163
+ * EPERM 에러 감지 시 자동 복구를 시도한다.
164
+ */
165
+ private _setupErrorHandler(): void {
136
166
  this._watcher.on("error", (err) => {
137
- this._logger.error("FsWatcher 오류:", err);
167
+ const errDetail = err instanceof Error ? (err.stack ?? err.message) : String(err);
168
+ this._logger.error(
169
+ `FsWatcher 오류: ${errDetail}\n---- creation stack ----\n${this._creationStack}`,
170
+ );
171
+
172
+ if (
173
+ err instanceof Error &&
174
+ "code" in err &&
175
+ (err as NodeJS.ErrnoException).code === "EPERM" &&
176
+ !this._isRecovering
177
+ ) {
178
+ void this._handleEperm();
179
+ }
138
180
  });
139
181
  }
140
182
 
183
+ /**
184
+ * EPERM 에러 발생 시 watcher를 재생성한다.
185
+ * 최대 _MAX_RETRIES회까지 _RETRY_DELAY_MS 간격으로 재시도한다.
186
+ * 성공 시 재시도 카운터를 초기화한다.
187
+ */
188
+ private async _handleEperm(): Promise<void> {
189
+ if (this._isRecovering) return;
190
+ this._isRecovering = true;
191
+
192
+ while (this._retryCount < FsWatcher._MAX_RETRIES) {
193
+ this._retryCount++;
194
+ this._logger.warn(
195
+ `EPERM 감지 — ${this._retryCount}/${FsWatcher._MAX_RETRIES} watcher 재시작 시도...`,
196
+ );
197
+
198
+ try {
199
+ try {
200
+ await this._watcher.close();
201
+ } catch {
202
+ // close 실패 무시
203
+ }
204
+
205
+ await new Promise((resolve) => setTimeout(resolve, FsWatcher._RETRY_DELAY_MS));
206
+
207
+ this._watcher = this._buildChokidarWatcher();
208
+ this._setupErrorHandler();
209
+
210
+ for (const handler of this._allHandlers) {
211
+ this._watcher.on("all", handler);
212
+ }
213
+
214
+ await new Promise<void>((resolve, reject) => {
215
+ const onReady = () => {
216
+ this._watcher.removeListener("error", onError);
217
+ resolve();
218
+ };
219
+ const onError = (e: unknown) => {
220
+ this._watcher.removeListener("ready", onReady);
221
+ reject(e);
222
+ };
223
+ this._watcher.once("ready", onReady);
224
+ this._watcher.once("error", onError);
225
+ });
226
+
227
+ // 성공 — 카운터 초기화 후 복구 완료
228
+ this._retryCount = 0;
229
+ this._isRecovering = false;
230
+ this._logger.success("watcher 재시작 완료");
231
+ return;
232
+ } catch (err) {
233
+ const errDetail = err instanceof Error ? err.message : String(err);
234
+ this._logger.error(
235
+ `watcher 재시작 실패 (${this._retryCount}/${FsWatcher._MAX_RETRIES}): ${errDetail}`,
236
+ );
237
+ }
238
+ }
239
+
240
+ this._logger.error(
241
+ `EPERM 재시도 최대 횟수(${FsWatcher._MAX_RETRIES}회) 초과 — 재시도 중단`,
242
+ );
243
+ this._isRecovering = false;
244
+ }
245
+
141
246
  /**
142
247
  * 파일 변경 이벤트 핸들러를 등록한다.
143
248
  * 지정된 지연 시간 동안 이벤트를 수집하여 콜백을 한 번 호출한다.
@@ -161,7 +266,7 @@ export class FsWatcher {
161
266
  });
162
267
  }
163
268
 
164
- this._watcher.on("all", (event, filePath) => {
269
+ const handler = (event: string, filePath: string) => {
165
270
  // 지원되는 이벤트만 처리
166
271
  if (!FS_WATCHER_EVENTS.includes(event as FsWatcherEvent)) return;
167
272
 
@@ -180,7 +285,7 @@ export class FsWatcher {
180
285
  * - 그 외 → 최신 이벤트로 덮어쓰기
181
286
  */
182
287
  if (!changeInfoMap.has(filePath)) {
183
- changeInfoMap.set(filePath, event);
288
+ changeInfoMap.set(filePath, event as EventName);
184
289
  }
185
290
  const prevEvent = changeInfoMap.get(filePath)!;
186
291
 
@@ -193,14 +298,17 @@ export class FsWatcher {
193
298
  ) {
194
299
  // add 후 unlink → 변경 없음 (삭제)
195
300
  changeInfoMap.delete(filePath);
196
- } else if (prevEvent === "unlink" && (event === "add" || event === "change")) {
197
- // unlink 후 add/change → add (파일 재생성)
301
+ } else if (prevEvent === "unlink" && event === "add") {
302
+ // unlink 후 add → add (파일 재생성)
198
303
  changeInfoMap.set(filePath, "add");
304
+ } else if (prevEvent === "unlink" && event === "change") {
305
+ // unlink 후 change → change (이전 사이클에서 이미 존재하던 파일이 삭제 후 수정된 경우)
306
+ changeInfoMap.set(filePath, "change");
199
307
  } else if (prevEvent === "unlinkDir" && event === "addDir") {
200
308
  // unlinkDir 후 addDir → addDir (디렉토리 재생성)
201
309
  changeInfoMap.set(filePath, "addDir");
202
310
  } else {
203
- changeInfoMap.set(filePath, event);
311
+ changeInfoMap.set(filePath, event as EventName);
204
312
  }
205
313
 
206
314
  fnQ.run(async () => {
@@ -218,7 +326,10 @@ export class FsWatcher {
218
326
 
219
327
  await cb(changeInfos);
220
328
  });
221
- });
329
+ };
330
+
331
+ this._allHandlers.push(handler);
332
+ this._watcher.on("all", handler);
222
333
 
223
334
  return this;
224
335
  }