@simplysm/core-node 13.0.0-beta.6 → 13.0.1
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/features/fs-watcher.d.ts.map +1 -0
- package/dist/features/fs-watcher.js +3 -3
- package/dist/features/fs-watcher.js.map +1 -2
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -6
- package/dist/index.js.map +0 -1
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js.map +0 -1
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js.map +0 -1
- package/dist/worker/create-worker.d.ts.map +1 -0
- package/dist/worker/create-worker.js.map +0 -1
- package/dist/worker/types.d.ts.map +1 -0
- package/dist/worker/types.js.map +0 -1
- package/dist/worker/worker.d.ts.map +1 -0
- package/dist/worker/worker.js +4 -3
- package/dist/worker/worker.js.map +1 -2
- package/package.json +10 -6
- package/src/features/fs-watcher.ts +2 -2
- package/src/worker/worker.ts +5 -3
- package/.cache/typecheck-node.tsbuildinfo +0 -1
- package/.cache/typecheck-tests-node.tsbuildinfo +0 -1
- package/dist/core-common/src/common.types.d.ts +0 -74
- package/dist/core-common/src/common.types.d.ts.map +0 -1
- package/dist/core-common/src/env.d.ts +0 -6
- package/dist/core-common/src/env.d.ts.map +0 -1
- package/dist/core-common/src/errors/argument-error.d.ts +0 -25
- package/dist/core-common/src/errors/argument-error.d.ts.map +0 -1
- package/dist/core-common/src/errors/not-implemented-error.d.ts +0 -29
- package/dist/core-common/src/errors/not-implemented-error.d.ts.map +0 -1
- package/dist/core-common/src/errors/sd-error.d.ts +0 -27
- package/dist/core-common/src/errors/sd-error.d.ts.map +0 -1
- package/dist/core-common/src/errors/timeout-error.d.ts +0 -31
- package/dist/core-common/src/errors/timeout-error.d.ts.map +0 -1
- package/dist/core-common/src/extensions/arr-ext.d.ts +0 -15
- package/dist/core-common/src/extensions/arr-ext.d.ts.map +0 -1
- package/dist/core-common/src/extensions/arr-ext.helpers.d.ts +0 -19
- package/dist/core-common/src/extensions/arr-ext.helpers.d.ts.map +0 -1
- package/dist/core-common/src/extensions/arr-ext.types.d.ts +0 -215
- package/dist/core-common/src/extensions/arr-ext.types.d.ts.map +0 -1
- package/dist/core-common/src/extensions/map-ext.d.ts +0 -57
- package/dist/core-common/src/extensions/map-ext.d.ts.map +0 -1
- package/dist/core-common/src/extensions/set-ext.d.ts +0 -36
- package/dist/core-common/src/extensions/set-ext.d.ts.map +0 -1
- package/dist/core-common/src/features/debounce-queue.d.ts +0 -53
- package/dist/core-common/src/features/debounce-queue.d.ts.map +0 -1
- package/dist/core-common/src/features/event-emitter.d.ts +0 -66
- package/dist/core-common/src/features/event-emitter.d.ts.map +0 -1
- package/dist/core-common/src/features/serial-queue.d.ts +0 -47
- package/dist/core-common/src/features/serial-queue.d.ts.map +0 -1
- package/dist/core-common/src/index.d.ts +0 -32
- package/dist/core-common/src/index.d.ts.map +0 -1
- package/dist/core-common/src/types/date-only.d.ts +0 -152
- package/dist/core-common/src/types/date-only.d.ts.map +0 -1
- package/dist/core-common/src/types/date-time.d.ts +0 -96
- package/dist/core-common/src/types/date-time.d.ts.map +0 -1
- package/dist/core-common/src/types/lazy-gc-map.d.ts +0 -80
- package/dist/core-common/src/types/lazy-gc-map.d.ts.map +0 -1
- package/dist/core-common/src/types/time.d.ts +0 -68
- package/dist/core-common/src/types/time.d.ts.map +0 -1
- package/dist/core-common/src/types/uuid.d.ts +0 -35
- package/dist/core-common/src/types/uuid.d.ts.map +0 -1
- package/dist/core-common/src/utils/bytes.d.ts +0 -51
- package/dist/core-common/src/utils/bytes.d.ts.map +0 -1
- package/dist/core-common/src/utils/date-format.d.ts +0 -90
- package/dist/core-common/src/utils/date-format.d.ts.map +0 -1
- package/dist/core-common/src/utils/json.d.ts +0 -34
- package/dist/core-common/src/utils/json.d.ts.map +0 -1
- package/dist/core-common/src/utils/num.d.ts +0 -60
- package/dist/core-common/src/utils/num.d.ts.map +0 -1
- package/dist/core-common/src/utils/obj.d.ts +0 -258
- package/dist/core-common/src/utils/obj.d.ts.map +0 -1
- package/dist/core-common/src/utils/path.d.ts +0 -23
- package/dist/core-common/src/utils/path.d.ts.map +0 -1
- package/dist/core-common/src/utils/primitive.d.ts +0 -18
- package/dist/core-common/src/utils/primitive.d.ts.map +0 -1
- package/dist/core-common/src/utils/str.d.ts +0 -103
- package/dist/core-common/src/utils/str.d.ts.map +0 -1
- package/dist/core-common/src/utils/template-strings.d.ts +0 -84
- package/dist/core-common/src/utils/template-strings.d.ts.map +0 -1
- package/dist/core-common/src/utils/transferable.d.ts +0 -47
- package/dist/core-common/src/utils/transferable.d.ts.map +0 -1
- package/dist/core-common/src/utils/wait.d.ts +0 -19
- package/dist/core-common/src/utils/wait.d.ts.map +0 -1
- package/dist/core-common/src/utils/xml.d.ts +0 -36
- package/dist/core-common/src/utils/xml.d.ts.map +0 -1
- package/dist/core-common/src/zip/sd-zip.d.ts +0 -80
- package/dist/core-common/src/zip/sd-zip.d.ts.map +0 -1
- package/dist/core-node/src/features/fs-watcher.d.ts.map +0 -1
- package/dist/core-node/src/index.d.ts.map +0 -1
- package/dist/core-node/src/utils/fs.d.ts.map +0 -1
- package/dist/core-node/src/utils/path.d.ts.map +0 -1
- package/dist/core-node/src/worker/create-worker.d.ts.map +0 -1
- package/dist/core-node/src/worker/types.d.ts.map +0 -1
- package/dist/core-node/src/worker/worker.d.ts.map +0 -1
- package/lib/worker-dev-proxy.js +0 -12
- package/tests/utils/fs-watcher.spec.ts +0 -295
- package/tests/utils/fs.spec.ts +0 -754
- package/tests/utils/path.spec.ts +0 -192
- package/tests/worker/fixtures/test-worker.ts +0 -35
- package/tests/worker/sd-worker.spec.ts +0 -183
- /package/dist/{core-node/src/features → features}/fs-watcher.d.ts +0 -0
- /package/dist/{core-node/src/index.d.ts → index.d.ts} +0 -0
- /package/dist/{core-node/src/utils → utils}/fs.d.ts +0 -0
- /package/dist/{core-node/src/utils → utils}/path.d.ts +0 -0
- /package/dist/{core-node/src/worker → worker}/create-worker.d.ts +0 -0
- /package/dist/{core-node/src/worker → worker}/types.d.ts +0 -0
- /package/dist/{core-node/src/worker → worker}/worker.d.ts +0 -0
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 템플릿 문자열 태그 함수들
|
|
3
|
-
* IDE 코드 하이라이팅 지원용 (실제 동작은 문자열 조합 + 들여쓰기 정리)
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* JavaScript 코드 하이라이팅용 템플릿 태그
|
|
7
|
-
* @param strings 템플릿 문자열 배열
|
|
8
|
-
* @param values 보간된 값들
|
|
9
|
-
* @returns 들여쓰기가 정리된 문자열
|
|
10
|
-
* @example
|
|
11
|
-
* const code = js`
|
|
12
|
-
* function hello() {
|
|
13
|
-
* return "world";
|
|
14
|
-
* }
|
|
15
|
-
* `;
|
|
16
|
-
*/
|
|
17
|
-
export declare function js(strings: TemplateStringsArray, ...values: unknown[]): string;
|
|
18
|
-
/**
|
|
19
|
-
* TypeScript 코드 하이라이팅용 템플릿 태그
|
|
20
|
-
* @param strings 템플릿 문자열 배열
|
|
21
|
-
* @param values 보간된 값들
|
|
22
|
-
* @returns 들여쓰기가 정리된 문자열
|
|
23
|
-
* @example
|
|
24
|
-
* const code = ts`
|
|
25
|
-
* interface User {
|
|
26
|
-
* name: string;
|
|
27
|
-
* age: number;
|
|
28
|
-
* }
|
|
29
|
-
* `;
|
|
30
|
-
*/
|
|
31
|
-
export declare function ts(strings: TemplateStringsArray, ...values: unknown[]): string;
|
|
32
|
-
/**
|
|
33
|
-
* HTML 마크업 하이라이팅용 템플릿 태그
|
|
34
|
-
* @param strings 템플릿 문자열 배열
|
|
35
|
-
* @param values 보간된 값들
|
|
36
|
-
* @returns 들여쓰기가 정리된 문자열
|
|
37
|
-
* @example
|
|
38
|
-
* const markup = html`
|
|
39
|
-
* <div class="container">
|
|
40
|
-
* <span>${name}</span>
|
|
41
|
-
* </div>
|
|
42
|
-
* `;
|
|
43
|
-
*/
|
|
44
|
-
export declare function html(strings: TemplateStringsArray, ...values: unknown[]): string;
|
|
45
|
-
/**
|
|
46
|
-
* MSSQL T-SQL 하이라이팅용 템플릿 태그
|
|
47
|
-
* @param strings 템플릿 문자열 배열
|
|
48
|
-
* @param values 보간된 값들
|
|
49
|
-
* @returns 들여쓰기가 정리된 문자열
|
|
50
|
-
* @example
|
|
51
|
-
* const query = tsql`
|
|
52
|
-
* SELECT TOP 10 *
|
|
53
|
-
* FROM Users
|
|
54
|
-
* WHERE Name LIKE '%${keyword}%'
|
|
55
|
-
* `;
|
|
56
|
-
*/
|
|
57
|
-
export declare function tsql(strings: TemplateStringsArray, ...values: unknown[]): string;
|
|
58
|
-
/**
|
|
59
|
-
* MySQL SQL 하이라이팅용 템플릿 태그
|
|
60
|
-
* @param strings 템플릿 문자열 배열
|
|
61
|
-
* @param values 보간된 값들
|
|
62
|
-
* @returns 들여쓰기가 정리된 문자열
|
|
63
|
-
* @example
|
|
64
|
-
* const query = mysql`
|
|
65
|
-
* SELECT *
|
|
66
|
-
* FROM users
|
|
67
|
-
* LIMIT 10
|
|
68
|
-
* `;
|
|
69
|
-
*/
|
|
70
|
-
export declare function mysql(strings: TemplateStringsArray, ...values: unknown[]): string;
|
|
71
|
-
/**
|
|
72
|
-
* PostgreSQL SQL 하이라이팅용 템플릿 태그
|
|
73
|
-
* @param strings 템플릿 문자열 배열
|
|
74
|
-
* @param values 보간된 값들
|
|
75
|
-
* @returns 들여쓰기가 정리된 문자열
|
|
76
|
-
* @example
|
|
77
|
-
* const query = pgsql`
|
|
78
|
-
* SELECT *
|
|
79
|
-
* FROM users
|
|
80
|
-
* OFFSET 0 LIMIT 10
|
|
81
|
-
* `;
|
|
82
|
-
*/
|
|
83
|
-
export declare function pgsql(strings: TemplateStringsArray, ...values: unknown[]): string;
|
|
84
|
-
//# sourceMappingURL=template-strings.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"template-strings.d.ts","sourceRoot":"","sources":["../../../../../core-common/src/utils/template-strings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;GAWG;AACH,wBAAgB,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAE9E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAE9E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAEhF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAEhF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAEjF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAEjF"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Worker 간 전송 가능한 객체 타입
|
|
3
|
-
*
|
|
4
|
-
* 이 코드에서는 ArrayBuffer만 사용됩니다.
|
|
5
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Transferable_objects
|
|
6
|
-
*/
|
|
7
|
-
type Transferable = ArrayBuffer;
|
|
8
|
-
/**
|
|
9
|
-
* Transferable 변환 유틸리티 함수
|
|
10
|
-
*
|
|
11
|
-
* Worker 간 데이터 전송을 위한 직렬화/역직렬화를 수행합니다.
|
|
12
|
-
* structuredClone이 지원하지 않는 커스텀 타입들을 처리합니다.
|
|
13
|
-
*
|
|
14
|
-
* 지원 타입:
|
|
15
|
-
* - Date, DateTime, DateOnly, Time, Uuid, RegExp
|
|
16
|
-
* - Error (cause, code, detail 포함)
|
|
17
|
-
* - Uint8Array (다른 TypedArray는 미지원, 일반 객체로 처리됨)
|
|
18
|
-
* - Array, Map, Set, 일반 객체
|
|
19
|
-
*
|
|
20
|
-
* @note 순환 참조가 있으면 transferableEncode 시 TypeError 발생 (경로 정보 포함)
|
|
21
|
-
* @note 동일 객체가 여러 곳에서 참조되면 캐시된 인코딩 결과를 재사용합니다
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* // Worker로 데이터 전송
|
|
25
|
-
* const { result, transferList } = transferableEncode(data);
|
|
26
|
-
* worker.postMessage(result, transferList);
|
|
27
|
-
*
|
|
28
|
-
* // Worker에서 데이터 수신
|
|
29
|
-
* const decoded = transferableDecode(event.data);
|
|
30
|
-
*/
|
|
31
|
-
/**
|
|
32
|
-
* 심플리즘 타입을 사용한 객체를 일반 객체로 변환
|
|
33
|
-
* Worker에 전송할 수 있는 형태로 직렬화
|
|
34
|
-
*
|
|
35
|
-
* @throws 순환 참조 감지 시 TypeError
|
|
36
|
-
*/
|
|
37
|
-
export declare function transferableEncode(obj: unknown): {
|
|
38
|
-
result: unknown;
|
|
39
|
-
transferList: Transferable[];
|
|
40
|
-
};
|
|
41
|
-
/**
|
|
42
|
-
* serialize 객체를 심플리즘 타입 사용 객체로 변환
|
|
43
|
-
* Worker로부터 받은 데이터를 역직렬화
|
|
44
|
-
*/
|
|
45
|
-
export declare function transferableDecode(obj: unknown): unknown;
|
|
46
|
-
export {};
|
|
47
|
-
//# sourceMappingURL=transferable.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transferable.d.ts","sourceRoot":"","sources":["../../../../../core-common/src/utils/transferable.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,KAAK,YAAY,GAAG,WAAW,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG;IAChD,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,YAAY,EAAE,CAAC;CAC9B,CAMA;AAqID;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CA2ExD"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 조건이 참이 될 때까지 대기
|
|
3
|
-
* @param forwarder 조건 함수
|
|
4
|
-
* @param milliseconds 체크 간격 (기본: 100ms)
|
|
5
|
-
* @param maxCount 최대 시도 횟수 (undefined면 무제한)
|
|
6
|
-
*
|
|
7
|
-
* @note 조건이 첫 번째 호출에서 true면 즉시 반환됩니다.
|
|
8
|
-
* @example
|
|
9
|
-
* // maxCount=3: 최대 3번 조건 확인 후 모두 false면 TimeoutError
|
|
10
|
-
* await waitUntil(() => someCondition, 100, 3);
|
|
11
|
-
* @throws TimeoutError 최대 시도 횟수 초과 시
|
|
12
|
-
*/
|
|
13
|
-
export declare function waitUntil(forwarder: () => boolean | Promise<boolean>, milliseconds?: number, maxCount?: number): Promise<void>;
|
|
14
|
-
/**
|
|
15
|
-
* 지정된 시간만큼 대기
|
|
16
|
-
* @param millisecond 대기 시간 (ms)
|
|
17
|
-
*/
|
|
18
|
-
export declare function waitTime(millisecond: number): Promise<void>;
|
|
19
|
-
//# sourceMappingURL=wait.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../../../core-common/src/utils/wait.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;GAWG;AACH,wBAAsB,SAAS,CAC7B,SAAS,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,EAC3C,YAAY,CAAC,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjE"}
|
|
@@ -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"}
|
package/lib/worker-dev-proxy.js
DELETED
|
@@ -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,295 +0,0 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import path from "path";
|
|
3
|
-
import fs from "fs";
|
|
4
|
-
import os from "os";
|
|
5
|
-
import { FsWatcher } from "../../src/features/fs-watcher";
|
|
6
|
-
|
|
7
|
-
describe("SdFsWatcher", () => {
|
|
8
|
-
const testDir = path.join(os.tmpdir(), "fs-watcher-test-" + Date.now());
|
|
9
|
-
let watcher: FsWatcher | undefined;
|
|
10
|
-
|
|
11
|
-
beforeEach(() => {
|
|
12
|
-
fs.mkdirSync(testDir, { recursive: true });
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
afterEach(async () => {
|
|
16
|
-
if (watcher != null) {
|
|
17
|
-
await watcher.close();
|
|
18
|
-
watcher = undefined;
|
|
19
|
-
}
|
|
20
|
-
fs.rmSync(testDir, { recursive: true, force: true });
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
//#region watch
|
|
24
|
-
|
|
25
|
-
describe("watch", () => {
|
|
26
|
-
it("파일 감시 시작", async () => {
|
|
27
|
-
watcher = await FsWatcher.watch([path.join(testDir, "**/*")]);
|
|
28
|
-
expect(watcher).toBeDefined();
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it("옵션과 함께 파일 감시 시작", async () => {
|
|
32
|
-
watcher = await FsWatcher.watch([path.join(testDir, "**/*")], {
|
|
33
|
-
ignoreInitial: false,
|
|
34
|
-
});
|
|
35
|
-
expect(watcher).toBeDefined();
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
it("에러 이벤트 발생 시 로깅 처리", async () => {
|
|
39
|
-
// chokidar는 존재하지 않는 경로도 정상적으로 감시 시작함
|
|
40
|
-
// 에러 이벤트는 실제 파일 시스템 오류 시에만 발생
|
|
41
|
-
const nonExistentPath = path.join(testDir, "non-existent-dir-" + Date.now());
|
|
42
|
-
watcher = await FsWatcher.watch([nonExistentPath]);
|
|
43
|
-
|
|
44
|
-
// 에러 핸들러가 등록되어 있어 에러 발생 시에도 크래시하지 않음
|
|
45
|
-
expect(watcher).toBeDefined();
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
//#endregion
|
|
50
|
-
|
|
51
|
-
//#region close
|
|
52
|
-
|
|
53
|
-
describe("close", () => {
|
|
54
|
-
it("감시 종료", async () => {
|
|
55
|
-
watcher = await FsWatcher.watch([path.join(testDir, "**/*")]);
|
|
56
|
-
|
|
57
|
-
// close()가 에러 없이 완료되면 테스트 통과
|
|
58
|
-
await expect(watcher.close()).resolves.toBeUndefined();
|
|
59
|
-
|
|
60
|
-
// 종료 후 watcher 참조 해제
|
|
61
|
-
watcher = undefined;
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
//#endregion
|
|
66
|
-
|
|
67
|
-
//#region chaining
|
|
68
|
-
|
|
69
|
-
describe("onChange", () => {
|
|
70
|
-
it("onChange 메서드 체이닝 지원", async () => {
|
|
71
|
-
watcher = await FsWatcher.watch([path.join(testDir, "**/*")]);
|
|
72
|
-
|
|
73
|
-
const fn = vi.fn();
|
|
74
|
-
const result = watcher.onChange({ delay: 100 }, fn);
|
|
75
|
-
|
|
76
|
-
expect(result).toBe(watcher);
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
it("delay 옵션 지정 가능", async () => {
|
|
80
|
-
watcher = await FsWatcher.watch([path.join(testDir, "**/*")]);
|
|
81
|
-
|
|
82
|
-
const fn = vi.fn();
|
|
83
|
-
// delay 옵션이 다양한 값으로 지정 가능해야 함
|
|
84
|
-
expect(() => watcher!.onChange({ delay: 0 }, fn)).not.toThrow();
|
|
85
|
-
expect(() => watcher!.onChange({ delay: 500 }, fn)).not.toThrow();
|
|
86
|
-
expect(() => watcher!.onChange({ delay: 1000 }, fn)).not.toThrow();
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
//#endregion
|
|
91
|
-
|
|
92
|
-
//#region Types
|
|
93
|
-
|
|
94
|
-
describe("Types", () => {
|
|
95
|
-
it("SdFsWatcherEvent 타입 정의 확인", () => {
|
|
96
|
-
// 이벤트 타입이 올바르게 정의되어 있는지 확인
|
|
97
|
-
const validEvents = ["add", "addDir", "change", "unlink", "unlinkDir"];
|
|
98
|
-
expect(validEvents).toContain("add");
|
|
99
|
-
expect(validEvents).toContain("addDir");
|
|
100
|
-
expect(validEvents).toContain("change");
|
|
101
|
-
expect(validEvents).toContain("unlink");
|
|
102
|
-
expect(validEvents).toContain("unlinkDir");
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
it("SdFsWatcherChangeInfo 구조 확인", () => {
|
|
106
|
-
// 인터페이스 구조 확인용 타입 체크
|
|
107
|
-
const mockChangeInfo = {
|
|
108
|
-
event: "add" as const,
|
|
109
|
-
path: "/test/path",
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
expect(mockChangeInfo.event).toBe("add");
|
|
113
|
-
expect(mockChangeInfo.path).toBe("/test/path");
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
//#endregion
|
|
118
|
-
|
|
119
|
-
//#region 이벤트 병합 (Event Merging)
|
|
120
|
-
|
|
121
|
-
describe("이벤트 병합", () => {
|
|
122
|
-
const DELAY = 300;
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* 지정 시간 대기 헬퍼 함수.
|
|
126
|
-
*/
|
|
127
|
-
const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* 이벤트 콜백이 호출될 때까지 대기하는 헬퍼 함수.
|
|
131
|
-
*/
|
|
132
|
-
const waitForChanges = (
|
|
133
|
-
watcherInstance: FsWatcher,
|
|
134
|
-
delay: number,
|
|
135
|
-
): Promise<Array<{ event: string; path: string }>> => {
|
|
136
|
-
return new Promise((resolve) => {
|
|
137
|
-
watcherInstance.onChange({ delay }, (changeInfos) => {
|
|
138
|
-
resolve(changeInfos.map((c) => ({ event: c.event, path: c.path })));
|
|
139
|
-
});
|
|
140
|
-
});
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
it("파일 추가 후 변경 시 add 이벤트만 반환", async () => {
|
|
144
|
-
const testFile = path.join(testDir, "test-add-change.txt");
|
|
145
|
-
|
|
146
|
-
watcher = await FsWatcher.watch([testDir]);
|
|
147
|
-
|
|
148
|
-
const changesPromise = waitForChanges(watcher, DELAY);
|
|
149
|
-
|
|
150
|
-
// 파일 추가
|
|
151
|
-
fs.writeFileSync(testFile, "initial");
|
|
152
|
-
|
|
153
|
-
// 짧은 간격으로 파일 변경 (delay 내에서 일어나야 함)
|
|
154
|
-
await wait(50);
|
|
155
|
-
fs.writeFileSync(testFile, "modified");
|
|
156
|
-
|
|
157
|
-
// 이벤트 콜백 호출 대기
|
|
158
|
-
const changes = await changesPromise;
|
|
159
|
-
|
|
160
|
-
// add → change 가 add로 병합되어야 함
|
|
161
|
-
expect(changes.length).toBe(1);
|
|
162
|
-
expect(changes[0].event).toBe("add");
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
it("파일 추가 후 삭제 시 이벤트 없음 또는 변경 없음 처리", async () => {
|
|
166
|
-
const testFile = path.join(testDir, "test-add-unlink.txt");
|
|
167
|
-
|
|
168
|
-
watcher = await FsWatcher.watch([testDir]);
|
|
169
|
-
|
|
170
|
-
const changes: Array<{ event: string; path: string }> = [];
|
|
171
|
-
let resolved = false;
|
|
172
|
-
|
|
173
|
-
const changesPromise = new Promise<void>((resolve) => {
|
|
174
|
-
watcher!.onChange({ delay: DELAY }, (changeInfos) => {
|
|
175
|
-
changes.push(...changeInfos.map((c) => ({ event: c.event, path: c.path })));
|
|
176
|
-
if (!resolved) {
|
|
177
|
-
resolved = true;
|
|
178
|
-
resolve();
|
|
179
|
-
}
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
// 파일 추가
|
|
184
|
-
fs.writeFileSync(testFile, "content");
|
|
185
|
-
|
|
186
|
-
// 짧은 간격으로 파일 삭제
|
|
187
|
-
await wait(50);
|
|
188
|
-
fs.unlinkSync(testFile);
|
|
189
|
-
|
|
190
|
-
// 타임아웃과 함께 대기 (이벤트가 발생하지 않을 수 있음)
|
|
191
|
-
await Promise.race([changesPromise, wait(DELAY + 200)]);
|
|
192
|
-
|
|
193
|
-
// add → unlink 가 병합되어 이벤트 없음
|
|
194
|
-
expect(changes.length).toBe(0);
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
it("디렉토리 추가 후 삭제 시 이벤트 없음 또는 변경 없음 처리", async () => {
|
|
198
|
-
const testSubDir = path.join(testDir, "test-addDir-unlinkDir");
|
|
199
|
-
|
|
200
|
-
watcher = await FsWatcher.watch([testDir]);
|
|
201
|
-
|
|
202
|
-
const changes: Array<{ event: string; path: string }> = [];
|
|
203
|
-
let resolved = false;
|
|
204
|
-
|
|
205
|
-
const changesPromise = new Promise<void>((resolve) => {
|
|
206
|
-
watcher!.onChange({ delay: DELAY }, (changeInfos) => {
|
|
207
|
-
changes.push(...changeInfos.map((c) => ({ event: c.event, path: c.path })));
|
|
208
|
-
if (!resolved) {
|
|
209
|
-
resolved = true;
|
|
210
|
-
resolve();
|
|
211
|
-
}
|
|
212
|
-
});
|
|
213
|
-
});
|
|
214
|
-
|
|
215
|
-
// 디렉토리 추가
|
|
216
|
-
fs.mkdirSync(testSubDir);
|
|
217
|
-
|
|
218
|
-
// 짧은 간격으로 디렉토리 삭제
|
|
219
|
-
await wait(50);
|
|
220
|
-
fs.rmdirSync(testSubDir);
|
|
221
|
-
|
|
222
|
-
// 타임아웃과 함께 대기 (이벤트가 발생하지 않을 수 있음)
|
|
223
|
-
await Promise.race([changesPromise, wait(DELAY + 200)]);
|
|
224
|
-
|
|
225
|
-
// addDir → unlinkDir 가 병합되어 이벤트 없음
|
|
226
|
-
expect(changes.length).toBe(0);
|
|
227
|
-
});
|
|
228
|
-
|
|
229
|
-
it("파일 삭제 후 재생성 시 add 이벤트로 병합", async () => {
|
|
230
|
-
const testFile = path.join(testDir, "test-unlink-add.txt");
|
|
231
|
-
|
|
232
|
-
// 파일 미리 생성
|
|
233
|
-
fs.writeFileSync(testFile, "initial");
|
|
234
|
-
|
|
235
|
-
watcher = await FsWatcher.watch([testDir]);
|
|
236
|
-
|
|
237
|
-
const changesPromise = waitForChanges(watcher, DELAY);
|
|
238
|
-
|
|
239
|
-
// 파일 삭제
|
|
240
|
-
fs.unlinkSync(testFile);
|
|
241
|
-
|
|
242
|
-
// 짧은 간격으로 파일 재생성 (delay 내에서 일어나야 함)
|
|
243
|
-
await wait(50);
|
|
244
|
-
fs.writeFileSync(testFile, "recreated");
|
|
245
|
-
|
|
246
|
-
// 이벤트 콜백 호출 대기
|
|
247
|
-
const changes = await changesPromise;
|
|
248
|
-
|
|
249
|
-
// unlink → add/change 가 add로 병합되어야 함 (나중 이벤트로 덮어씀)
|
|
250
|
-
// 환경에 따라 chokidar가 unlink 없이 change만 발생시킬 수 있음 (WSL2 등)
|
|
251
|
-
expect(changes.length).toBe(1);
|
|
252
|
-
expect(["add", "change"]).toContain(changes[0].event);
|
|
253
|
-
});
|
|
254
|
-
|
|
255
|
-
it("여러 파일 변경 시 올바른 이벤트 병합", async () => {
|
|
256
|
-
const file1 = path.join(testDir, "file1.txt");
|
|
257
|
-
const file2 = path.join(testDir, "file2.txt");
|
|
258
|
-
const file3 = path.join(testDir, "file3.txt");
|
|
259
|
-
|
|
260
|
-
// file3은 미리 생성 (change 이벤트 발생용)
|
|
261
|
-
fs.writeFileSync(file3, "existing");
|
|
262
|
-
|
|
263
|
-
watcher = await FsWatcher.watch([testDir]);
|
|
264
|
-
|
|
265
|
-
const changesPromise = waitForChanges(watcher, DELAY);
|
|
266
|
-
|
|
267
|
-
// file1: 추가만
|
|
268
|
-
fs.writeFileSync(file1, "content1");
|
|
269
|
-
|
|
270
|
-
// file2: 추가 후 삭제 (병합되어 사라짐)
|
|
271
|
-
await wait(50);
|
|
272
|
-
fs.writeFileSync(file2, "content2");
|
|
273
|
-
await wait(50);
|
|
274
|
-
fs.unlinkSync(file2);
|
|
275
|
-
|
|
276
|
-
// file3: 변경
|
|
277
|
-
await wait(50);
|
|
278
|
-
fs.writeFileSync(file3, "modified");
|
|
279
|
-
|
|
280
|
-
// 이벤트 콜백 호출 대기
|
|
281
|
-
const changes = await changesPromise;
|
|
282
|
-
|
|
283
|
-
// file1: add, file2: 병합으로 삭제됨, file3: change
|
|
284
|
-
expect(changes.length).toBe(2);
|
|
285
|
-
|
|
286
|
-
const file1Change = changes.find((c) => c.path.endsWith("file1.txt"));
|
|
287
|
-
const file3Change = changes.find((c) => c.path.endsWith("file3.txt"));
|
|
288
|
-
|
|
289
|
-
expect(file1Change?.event).toBe("add");
|
|
290
|
-
expect(file3Change?.event).toBe("change");
|
|
291
|
-
});
|
|
292
|
-
});
|
|
293
|
-
|
|
294
|
-
//#endregion
|
|
295
|
-
});
|