@simplysm/core-node 13.0.0-beta.2 → 13.0.0-beta.21

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.
Files changed (107) hide show
  1. package/dist/features/fs-watcher.d.ts.map +1 -0
  2. package/dist/features/fs-watcher.js +1 -1
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +6 -6
  5. package/dist/utils/fs.d.ts.map +1 -0
  6. package/dist/utils/path.d.ts.map +1 -0
  7. package/dist/worker/create-worker.d.ts.map +1 -0
  8. package/dist/worker/types.d.ts.map +1 -0
  9. package/dist/worker/worker.d.ts.map +1 -0
  10. package/dist/worker/worker.js +2 -1
  11. package/dist/worker/worker.js.map +2 -2
  12. package/package.json +9 -6
  13. package/.cache/typecheck-node.tsbuildinfo +0 -1
  14. package/.cache/typecheck-tests-node.tsbuildinfo +0 -1
  15. package/dist/core-common/src/common.types.d.ts +0 -74
  16. package/dist/core-common/src/common.types.d.ts.map +0 -1
  17. package/dist/core-common/src/env.d.ts +0 -6
  18. package/dist/core-common/src/env.d.ts.map +0 -1
  19. package/dist/core-common/src/errors/argument-error.d.ts +0 -25
  20. package/dist/core-common/src/errors/argument-error.d.ts.map +0 -1
  21. package/dist/core-common/src/errors/not-implemented-error.d.ts +0 -29
  22. package/dist/core-common/src/errors/not-implemented-error.d.ts.map +0 -1
  23. package/dist/core-common/src/errors/sd-error.d.ts +0 -27
  24. package/dist/core-common/src/errors/sd-error.d.ts.map +0 -1
  25. package/dist/core-common/src/errors/timeout-error.d.ts +0 -31
  26. package/dist/core-common/src/errors/timeout-error.d.ts.map +0 -1
  27. package/dist/core-common/src/extensions/arr-ext.d.ts +0 -15
  28. package/dist/core-common/src/extensions/arr-ext.d.ts.map +0 -1
  29. package/dist/core-common/src/extensions/arr-ext.helpers.d.ts +0 -19
  30. package/dist/core-common/src/extensions/arr-ext.helpers.d.ts.map +0 -1
  31. package/dist/core-common/src/extensions/arr-ext.types.d.ts +0 -215
  32. package/dist/core-common/src/extensions/arr-ext.types.d.ts.map +0 -1
  33. package/dist/core-common/src/extensions/map-ext.d.ts +0 -57
  34. package/dist/core-common/src/extensions/map-ext.d.ts.map +0 -1
  35. package/dist/core-common/src/extensions/set-ext.d.ts +0 -36
  36. package/dist/core-common/src/extensions/set-ext.d.ts.map +0 -1
  37. package/dist/core-common/src/features/debounce-queue.d.ts +0 -53
  38. package/dist/core-common/src/features/debounce-queue.d.ts.map +0 -1
  39. package/dist/core-common/src/features/event-emitter.d.ts +0 -66
  40. package/dist/core-common/src/features/event-emitter.d.ts.map +0 -1
  41. package/dist/core-common/src/features/serial-queue.d.ts +0 -47
  42. package/dist/core-common/src/features/serial-queue.d.ts.map +0 -1
  43. package/dist/core-common/src/index.d.ts +0 -32
  44. package/dist/core-common/src/index.d.ts.map +0 -1
  45. package/dist/core-common/src/types/date-only.d.ts +0 -152
  46. package/dist/core-common/src/types/date-only.d.ts.map +0 -1
  47. package/dist/core-common/src/types/date-time.d.ts +0 -96
  48. package/dist/core-common/src/types/date-time.d.ts.map +0 -1
  49. package/dist/core-common/src/types/lazy-gc-map.d.ts +0 -80
  50. package/dist/core-common/src/types/lazy-gc-map.d.ts.map +0 -1
  51. package/dist/core-common/src/types/time.d.ts +0 -68
  52. package/dist/core-common/src/types/time.d.ts.map +0 -1
  53. package/dist/core-common/src/types/uuid.d.ts +0 -35
  54. package/dist/core-common/src/types/uuid.d.ts.map +0 -1
  55. package/dist/core-common/src/utils/bytes.d.ts +0 -51
  56. package/dist/core-common/src/utils/bytes.d.ts.map +0 -1
  57. package/dist/core-common/src/utils/date-format.d.ts +0 -90
  58. package/dist/core-common/src/utils/date-format.d.ts.map +0 -1
  59. package/dist/core-common/src/utils/json.d.ts +0 -34
  60. package/dist/core-common/src/utils/json.d.ts.map +0 -1
  61. package/dist/core-common/src/utils/num.d.ts +0 -60
  62. package/dist/core-common/src/utils/num.d.ts.map +0 -1
  63. package/dist/core-common/src/utils/obj.d.ts +0 -258
  64. package/dist/core-common/src/utils/obj.d.ts.map +0 -1
  65. package/dist/core-common/src/utils/path.d.ts +0 -23
  66. package/dist/core-common/src/utils/path.d.ts.map +0 -1
  67. package/dist/core-common/src/utils/primitive.d.ts +0 -18
  68. package/dist/core-common/src/utils/primitive.d.ts.map +0 -1
  69. package/dist/core-common/src/utils/str.d.ts +0 -103
  70. package/dist/core-common/src/utils/str.d.ts.map +0 -1
  71. package/dist/core-common/src/utils/template-strings.d.ts +0 -84
  72. package/dist/core-common/src/utils/template-strings.d.ts.map +0 -1
  73. package/dist/core-common/src/utils/transferable.d.ts +0 -47
  74. package/dist/core-common/src/utils/transferable.d.ts.map +0 -1
  75. package/dist/core-common/src/utils/wait.d.ts +0 -19
  76. package/dist/core-common/src/utils/wait.d.ts.map +0 -1
  77. package/dist/core-common/src/utils/xml.d.ts +0 -36
  78. package/dist/core-common/src/utils/xml.d.ts.map +0 -1
  79. package/dist/core-common/src/zip/sd-zip.d.ts +0 -80
  80. package/dist/core-common/src/zip/sd-zip.d.ts.map +0 -1
  81. package/dist/core-node/src/features/fs-watcher.d.ts.map +0 -1
  82. package/dist/core-node/src/index.d.ts.map +0 -1
  83. package/dist/core-node/src/utils/fs.d.ts.map +0 -1
  84. package/dist/core-node/src/utils/path.d.ts.map +0 -1
  85. package/dist/core-node/src/worker/create-worker.d.ts.map +0 -1
  86. package/dist/core-node/src/worker/types.d.ts.map +0 -1
  87. package/dist/core-node/src/worker/worker.d.ts.map +0 -1
  88. package/lib/worker-dev-proxy.js +0 -12
  89. package/src/features/fs-watcher.ts +0 -176
  90. package/src/index.ts +0 -11
  91. package/src/utils/fs.ts +0 -550
  92. package/src/utils/path.ts +0 -128
  93. package/src/worker/create-worker.ts +0 -141
  94. package/src/worker/types.ts +0 -86
  95. package/src/worker/worker.ts +0 -207
  96. package/tests/utils/fs-watcher.spec.ts +0 -295
  97. package/tests/utils/fs.spec.ts +0 -754
  98. package/tests/utils/path.spec.ts +0 -192
  99. package/tests/worker/fixtures/test-worker.ts +0 -35
  100. package/tests/worker/sd-worker.spec.ts +0 -183
  101. /package/dist/{core-node/src/features → features}/fs-watcher.d.ts +0 -0
  102. /package/dist/{core-node/src/index.d.ts → index.d.ts} +0 -0
  103. /package/dist/{core-node/src/utils → utils}/fs.d.ts +0 -0
  104. /package/dist/{core-node/src/utils → utils}/path.d.ts +0 -0
  105. /package/dist/{core-node/src/worker → worker}/create-worker.d.ts +0 -0
  106. /package/dist/{core-node/src/worker → worker}/types.d.ts +0 -0
  107. /package/dist/{core-node/src/worker → worker}/worker.d.ts +0 -0
@@ -1,36 +0,0 @@
1
- /**
2
- * XML 변환 유틸리티
3
- */
4
- import type { XmlBuilderOptions } from "fast-xml-parser";
5
- /**
6
- * XML 문자열을 객체로 파싱
7
- * @param str XML 문자열
8
- * @param options 옵션
9
- * @param options.stripTagPrefix 태그 prefix 제거 여부 (namespace)
10
- * @returns 파싱된 객체. 구조:
11
- * - 속성: `$` 객체에 그룹화
12
- * - 텍스트 노드: `_` 키에 저장
13
- * - 자식 요소: 배열로 변환 (루트 요소 제외)
14
- * @example
15
- * xmlParse('<root id="1"><item>hello</item></root>');
16
- * // { root: { $: { id: "1" }, item: [{ _: "hello" }] } }
17
- */
18
- export declare function xmlParse(str: string, options?: {
19
- stripTagPrefix?: boolean;
20
- }): unknown;
21
- /**
22
- * 객체를 XML 문자열로 직렬화
23
- * @param obj 직렬화할 객체
24
- * @param options fast-xml-parser XmlBuilderOptions (선택)
25
- * @returns XML 문자열
26
- * @example
27
- * xmlStringify({
28
- * root: {
29
- * $: { id: "1" },
30
- * item: [{ _: "hello" }, { _: "world" }],
31
- * },
32
- * });
33
- * // '<root id="1"><item>hello</item><item>world</item></root>'
34
- */
35
- export declare function xmlStringify(obj: unknown, options?: XmlBuilderOptions): string;
36
- //# sourceMappingURL=xml.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"xml.d.ts","sourceRoot":"","sources":["../../../../../core-common/src/utils/xml.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAKzD;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAarF;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAS9E"}
@@ -1,80 +0,0 @@
1
- import type { Bytes } from "../common.types";
2
- export interface ZipArchiveProgress {
3
- fileName: string;
4
- totalSize: number;
5
- extractedSize: number;
6
- }
7
- /**
8
- * ZIP 아카이브 처리 클래스
9
- *
10
- * ZIP 파일의 읽기, 쓰기, 압축/해제를 처리합니다.
11
- * 내부 캐시를 사용하여 동일 파일의 중복 압축 해제를 방지합니다.
12
- *
13
- * @example
14
- * // ZIP 파일 읽기
15
- * await using archive = new ZipArchive(zipBytes);
16
- * const content = await archive.get("file.txt");
17
- *
18
- * @example
19
- * // ZIP 파일 생성
20
- * await using archive = new ZipArchive();
21
- * archive.write("file.txt", textBytes);
22
- * archive.write("data.json", jsonBytes);
23
- * const zipBytes = await archive.compress();
24
- *
25
- * @example
26
- * // 전체 압축 해제 (진행률 표시)
27
- * await using archive = new ZipArchive(zipBytes);
28
- * const files = await archive.extractAll((progress) => {
29
- * console.log(`${progress.fileName}: ${progress.extractedSize}/${progress.totalSize}`);
30
- * });
31
- */
32
- export declare class ZipArchive {
33
- private readonly _reader?;
34
- private readonly _cache;
35
- private _entries?;
36
- /**
37
- * ZipArchive 생성
38
- * @param data ZIP 데이터 (생략 시 새 아카이브 생성)
39
- */
40
- constructor(data?: Blob | Bytes);
41
- private _getEntries;
42
- /**
43
- * 모든 파일을 압축 해제
44
- * @param progressCallback 진행률 콜백
45
- */
46
- extractAll(progressCallback?: (progress: ZipArchiveProgress) => void): Promise<Map<string, Bytes | undefined>>;
47
- /**
48
- * 특정 파일 압축 해제
49
- * @param fileName 파일 이름
50
- */
51
- get(fileName: string): Promise<Bytes | undefined>;
52
- /**
53
- * 파일 존재 여부 확인
54
- * @param fileName 파일 이름
55
- */
56
- exists(fileName: string): Promise<boolean>;
57
- /**
58
- * 파일 쓰기 (캐시에 저장)
59
- * @param fileName 파일 이름
60
- * @param bytes 파일 내용
61
- */
62
- write(fileName: string, bytes: Bytes): void;
63
- /**
64
- * 캐시된 파일들을 ZIP으로 압축
65
- *
66
- * @remarks
67
- * 내부적으로 `extractAll()`을 호출하여 모든 파일을 메모리에 로드한 후 압축합니다.
68
- * 대용량 ZIP 파일의 경우 메모리 사용량에 주의가 필요합니다.
69
- */
70
- compress(): Promise<Bytes>;
71
- /**
72
- * 리더 닫기 및 캐시 정리
73
- */
74
- close(): Promise<void>;
75
- /**
76
- * await using 지원
77
- */
78
- [Symbol.asyncDispose](): Promise<void>;
79
- }
80
- //# sourceMappingURL=sd-zip.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sd-zip.d.ts","sourceRoot":"","sources":["../../../../../core-common/src/zip/sd-zip.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAA0B;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAC/D,OAAO,CAAC,QAAQ,CAAC,CAA6D;IAE9E;;;OAGG;gBACS,IAAI,CAAC,EAAE,IAAI,GAAG,KAAK;YAUjB,WAAW;IAQzB;;;OAGG;IACG,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG,SAAS,CAAC,CAAC;IAkDpH;;;OAGG;IACG,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IAwBvD;;;OAGG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBhD;;;;OAIG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAM3C;;;;;;OAMG;IACG,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC;IAiBhC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACG,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fs-watcher.d.ts","sourceRoot":"","sources":["../../../../src/features/fs-watcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAGrC,OAAO,EAAE,KAAK,QAAQ,EAAY,MAAM,eAAe,CAAC;AAIxD;;GAEG;AACH,QAAA,MAAM,iBAAiB,6DAA8D,CAAC;AAEtF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gBAAgB;IAChB,KAAK,EAAE,cAAc,CAAC;IACtB,4BAA4B;IAC5B,IAAI,EAAE,QAAQ,CAAC;CAChB;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,SAAS;IACpB;;;;;;OAMG;WACU,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;IAU3F,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAuB;IAEvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4C;IAEpE,OAAO;IAcP;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,EAAE,EAAE,CAAC,WAAW,EAAE,mBAAmB,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAkEzG;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAO7B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAG7B,cAAc,uBAAuB,CAAC;AAGtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../../../src/utils/fs.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../../src/utils/path.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,IAAI,eAAqB,CAAC;AAEhC;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG;IAC9B,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;CACf,CAAC;AAMF;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAGnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAU5G;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAElE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAa9E;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAErD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAO7F"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-worker.d.ts","sourceRoot":"","sources":["../../../../src/worker/create-worker.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,EAC5D,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAE/D,OAAO,EAAE,QAAQ,GAChB;IACD,IAAI,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC1E,SAAS,EAAE,QAAQ,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB,CA0GA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/worker/types.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,CAAC;QACvD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,CAAC;CACH;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;KAC/B,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;CACzG,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,WAAW,CAAC,OAAO,SAAS,YAAY,IAAI,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG;IAC1G;;OAEG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,GAAG,MAAM,EACxD,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAC1D,IAAI,CAAC;IAER;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,GAAG,MAAM,EACzD,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAC1D,IAAI,CAAC;IAER;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB;IACE,OAAO,EAAE,aAAa,CAAC;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GACD;IACE,OAAO,EAAE,aAAa,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,KAAK,CAAC;CACb,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GACD;IACE,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../../src/worker/worker.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,IAAI,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAiC,MAAM,SAAS,CAAC;AAoJxF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,MAAM;IACjB;;;;;;OAMG;WACI,OAAO,SAAS,YAAY,YACvB,MAAM,QACV,IAAI,CAAC,gBAAgB,EAAE,QAAQ,GAAG,QAAQ,CAAC,GAChD,WAAW,CAAC,OAAO,CAAC;CAyBxB,CAAC"}
@@ -1,12 +0,0 @@
1
- import { tsImport } from "tsx/esm/api";
2
- import { pathToFileURL } from "url";
3
-
4
- // argv[2]에 진짜 워커 파일 경로가 들어온다고 가정
5
- const workerFile = process.argv[2];
6
- if (!workerFile) {
7
- throw new Error("Worker file path is required as argument!");
8
- }
9
-
10
- // Windows에서 절대 경로는 file:// URL로 변환해야 ESM 로더가 처리 가능
11
- const workerFileUrl = pathToFileURL(workerFile).href;
12
- await tsImport(workerFileUrl, import.meta.url);
@@ -1,176 +0,0 @@
1
- import { DebounceQueue } from "@simplysm/core-common";
2
- import * as chokidar from "chokidar";
3
- import { createConsola } from "consola";
4
- import type { EventName } from "chokidar/handler.js";
5
- import { type NormPath, pathNorm } from "../utils/path";
6
-
7
- //#region Types
8
-
9
- /**
10
- * 지원하는 파일 변경 이벤트 타입 목록.
11
- */
12
- const FS_WATCHER_EVENTS = ["add", "addDir", "change", "unlink", "unlinkDir"] as const;
13
-
14
- /**
15
- * 파일 변경 이벤트 타입.
16
- */
17
- export type FsWatcherEvent = (typeof FS_WATCHER_EVENTS)[number];
18
-
19
- /**
20
- * 파일 변경 정보.
21
- */
22
- export interface FsWatcherChangeInfo {
23
- /** 변경 이벤트 타입 */
24
- event: FsWatcherEvent;
25
- /** 변경된 파일/디렉토리 경로 (정규화됨) */
26
- path: NormPath;
27
- }
28
-
29
- //#endregion
30
-
31
- //#region FsWatcher
32
-
33
- /**
34
- * chokidar 기반 파일 시스템 감시 래퍼.
35
- * 짧은 시간 내 발생한 이벤트를 병합하여 콜백 호출.
36
- *
37
- * **주의**: chokidar의 `ignoreInitial` 옵션은 내부적으로 항상 `true`로 설정된다.
38
- * `options.ignoreInitial: false`를 전달하면 `onChange` 첫 호출 시 빈 배열로
39
- * 콜백이 호출되지만, 실제 초기 파일 목록은 포함되지 않는다.
40
- * 이는 이벤트 병합 로직과의 충돌을 방지하기 위한 의도된 동작이다.
41
- *
42
- * @example
43
- * const watcher = await FsWatcher.watch(["src/**\/*.ts"]);
44
- * watcher.onChange({ delay: 300 }, (changes) => {
45
- * for (const { path, event } of changes) {
46
- * console.log(`${event}: ${path}`);
47
- * }
48
- * });
49
- *
50
- * // 종료
51
- * await watcher.close();
52
- */
53
- export class FsWatcher {
54
- /**
55
- * 파일 감시 시작 (비동기).
56
- * ready 이벤트가 발생할 때까지 대기.
57
- *
58
- * @param paths - 감시할 파일/디렉토리 경로 또는 glob 패턴 배열
59
- * @param options - chokidar 옵션
60
- */
61
- static async watch(paths: string[], options?: chokidar.ChokidarOptions): Promise<FsWatcher> {
62
- return new Promise<FsWatcher>((resolve, reject) => {
63
- const watcher = new FsWatcher(paths, options);
64
- watcher._watcher.on("ready", () => {
65
- resolve(watcher);
66
- });
67
- watcher._watcher.on("error", reject);
68
- });
69
- }
70
-
71
- private readonly _watcher: chokidar.FSWatcher;
72
- private readonly _ignoreInitial: boolean = true;
73
- private readonly _debounceQueues: DebounceQueue[] = [];
74
-
75
- private readonly _logger = createConsola().withTag("sd-fs-watcher");
76
-
77
- private constructor(paths: string[], options?: chokidar.ChokidarOptions) {
78
- this._watcher = chokidar.watch(paths, {
79
- persistent: true,
80
- ...options,
81
- ignoreInitial: true,
82
- });
83
- this._ignoreInitial = options?.ignoreInitial ?? this._ignoreInitial;
84
-
85
- // 감시 중 발생하는 에러 로깅
86
- this._watcher.on("error", (err) => {
87
- this._logger.error("FsWatcher error:", err);
88
- });
89
- }
90
-
91
- /**
92
- * 파일 변경 이벤트 핸들러 등록.
93
- * 지정된 delay 시간 동안 이벤트를 모아서 한 번에 콜백 호출.
94
- *
95
- * @param opt.delay - 이벤트 병합 대기 시간 (ms)
96
- * @param cb - 변경 이벤트 콜백
97
- */
98
- onChange(opt: { delay?: number }, cb: (changeInfos: FsWatcherChangeInfo[]) => void | Promise<void>): this {
99
- const fnQ = new DebounceQueue(opt.delay);
100
- this._debounceQueues.push(fnQ);
101
-
102
- let changeInfoMap = new Map<string, EventName>();
103
-
104
- // ignoreInitial이 false면 초기에 빈 배열로 콜백 호출
105
- if (!this._ignoreInitial) {
106
- fnQ.run(async () => {
107
- await cb([]);
108
- });
109
- }
110
-
111
- this._watcher.on("all", (event, filePath) => {
112
- // 지원하는 이벤트만 처리
113
- if (!FS_WATCHER_EVENTS.includes(event as FsWatcherEvent)) return;
114
-
115
- /*
116
- * 이벤트 병합 전략:
117
- * 짧은 시간 내 같은 파일에 대해 여러 이벤트가 발생하면 최종 상태만 전달한다.
118
- * - add + change → add (생성 직후 수정은 생성으로 간주)
119
- * - add + unlink → 삭제 (생성 후 즉시 삭제는 변경 없음)
120
- * - unlink + add → add (삭제 후 재생성은 생성으로 간주)
121
- * - 그 외 → 최신 이벤트로 덮어씀
122
- */
123
- if (!changeInfoMap.has(filePath)) {
124
- changeInfoMap.set(filePath, event);
125
- }
126
- const prevEvent = changeInfoMap.get(filePath)!;
127
-
128
- if (prevEvent === "add" && event === "change") {
129
- // add 후 change → add 유지
130
- changeInfoMap.set(filePath, "add");
131
- } else if ((prevEvent === "add" && event === "unlink") || (prevEvent === "addDir" && event === "unlinkDir")) {
132
- // add 후 unlink → 변경 없음 (삭제)
133
- changeInfoMap.delete(filePath);
134
- } else if (prevEvent === "unlink" && (event === "add" || event === "change")) {
135
- // unlink 후 add/change → add (파일 재생성)
136
- changeInfoMap.set(filePath, "add");
137
- } else if (prevEvent === "unlinkDir" && event === "addDir") {
138
- // unlinkDir 후 addDir → addDir (디렉토리 재생성)
139
- changeInfoMap.set(filePath, "addDir");
140
- } else {
141
- changeInfoMap.set(filePath, event);
142
- }
143
-
144
- fnQ.run(async () => {
145
- if (changeInfoMap.size === 0) return;
146
-
147
- const currChangeInfoMap = changeInfoMap;
148
- changeInfoMap = new Map<string, EventName>();
149
-
150
- const changeInfos = Array.from(currChangeInfoMap.entries()).map(
151
- ([path, evt]): FsWatcherChangeInfo => ({
152
- path: pathNorm(path),
153
- event: evt as FsWatcherEvent,
154
- }),
155
- );
156
-
157
- await cb(changeInfos);
158
- });
159
- });
160
-
161
- return this;
162
- }
163
-
164
- /**
165
- * 파일 감시 종료.
166
- */
167
- async close(): Promise<void> {
168
- for (const q of this._debounceQueues) {
169
- q.dispose();
170
- }
171
- this._debounceQueues.length = 0;
172
- await this._watcher.close();
173
- }
174
- }
175
-
176
- //#endregion
package/src/index.ts DELETED
@@ -1,11 +0,0 @@
1
- // Utils
2
- export * from "./utils/fs";
3
- export * from "./utils/path";
4
-
5
- // Features
6
- export * from "./features/fs-watcher";
7
-
8
- // Worker
9
- export * from "./worker/types";
10
- export * from "./worker/worker";
11
- export * from "./worker/create-worker";