@simplysm/core-node 13.0.0-beta.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.
Files changed (111) hide show
  1. package/.cache/typecheck-node.tsbuildinfo +1 -0
  2. package/.cache/typecheck-tests-node.tsbuildinfo +1 -0
  3. package/README.md +375 -0
  4. package/dist/core-common/src/common.types.d.ts +74 -0
  5. package/dist/core-common/src/common.types.d.ts.map +1 -0
  6. package/dist/core-common/src/env.d.ts +6 -0
  7. package/dist/core-common/src/env.d.ts.map +1 -0
  8. package/dist/core-common/src/errors/argument-error.d.ts +25 -0
  9. package/dist/core-common/src/errors/argument-error.d.ts.map +1 -0
  10. package/dist/core-common/src/errors/not-implemented-error.d.ts +29 -0
  11. package/dist/core-common/src/errors/not-implemented-error.d.ts.map +1 -0
  12. package/dist/core-common/src/errors/sd-error.d.ts +27 -0
  13. package/dist/core-common/src/errors/sd-error.d.ts.map +1 -0
  14. package/dist/core-common/src/errors/timeout-error.d.ts +31 -0
  15. package/dist/core-common/src/errors/timeout-error.d.ts.map +1 -0
  16. package/dist/core-common/src/extensions/arr-ext.d.ts +15 -0
  17. package/dist/core-common/src/extensions/arr-ext.d.ts.map +1 -0
  18. package/dist/core-common/src/extensions/arr-ext.helpers.d.ts +19 -0
  19. package/dist/core-common/src/extensions/arr-ext.helpers.d.ts.map +1 -0
  20. package/dist/core-common/src/extensions/arr-ext.types.d.ts +215 -0
  21. package/dist/core-common/src/extensions/arr-ext.types.d.ts.map +1 -0
  22. package/dist/core-common/src/extensions/map-ext.d.ts +57 -0
  23. package/dist/core-common/src/extensions/map-ext.d.ts.map +1 -0
  24. package/dist/core-common/src/extensions/set-ext.d.ts +36 -0
  25. package/dist/core-common/src/extensions/set-ext.d.ts.map +1 -0
  26. package/dist/core-common/src/features/debounce-queue.d.ts +53 -0
  27. package/dist/core-common/src/features/debounce-queue.d.ts.map +1 -0
  28. package/dist/core-common/src/features/event-emitter.d.ts +66 -0
  29. package/dist/core-common/src/features/event-emitter.d.ts.map +1 -0
  30. package/dist/core-common/src/features/serial-queue.d.ts +47 -0
  31. package/dist/core-common/src/features/serial-queue.d.ts.map +1 -0
  32. package/dist/core-common/src/index.d.ts +32 -0
  33. package/dist/core-common/src/index.d.ts.map +1 -0
  34. package/dist/core-common/src/types/date-only.d.ts +152 -0
  35. package/dist/core-common/src/types/date-only.d.ts.map +1 -0
  36. package/dist/core-common/src/types/date-time.d.ts +96 -0
  37. package/dist/core-common/src/types/date-time.d.ts.map +1 -0
  38. package/dist/core-common/src/types/lazy-gc-map.d.ts +80 -0
  39. package/dist/core-common/src/types/lazy-gc-map.d.ts.map +1 -0
  40. package/dist/core-common/src/types/time.d.ts +68 -0
  41. package/dist/core-common/src/types/time.d.ts.map +1 -0
  42. package/dist/core-common/src/types/uuid.d.ts +35 -0
  43. package/dist/core-common/src/types/uuid.d.ts.map +1 -0
  44. package/dist/core-common/src/utils/bytes.d.ts +51 -0
  45. package/dist/core-common/src/utils/bytes.d.ts.map +1 -0
  46. package/dist/core-common/src/utils/date-format.d.ts +90 -0
  47. package/dist/core-common/src/utils/date-format.d.ts.map +1 -0
  48. package/dist/core-common/src/utils/json.d.ts +34 -0
  49. package/dist/core-common/src/utils/json.d.ts.map +1 -0
  50. package/dist/core-common/src/utils/num.d.ts +60 -0
  51. package/dist/core-common/src/utils/num.d.ts.map +1 -0
  52. package/dist/core-common/src/utils/obj.d.ts +258 -0
  53. package/dist/core-common/src/utils/obj.d.ts.map +1 -0
  54. package/dist/core-common/src/utils/path.d.ts +23 -0
  55. package/dist/core-common/src/utils/path.d.ts.map +1 -0
  56. package/dist/core-common/src/utils/primitive.d.ts +18 -0
  57. package/dist/core-common/src/utils/primitive.d.ts.map +1 -0
  58. package/dist/core-common/src/utils/str.d.ts +103 -0
  59. package/dist/core-common/src/utils/str.d.ts.map +1 -0
  60. package/dist/core-common/src/utils/template-strings.d.ts +84 -0
  61. package/dist/core-common/src/utils/template-strings.d.ts.map +1 -0
  62. package/dist/core-common/src/utils/transferable.d.ts +47 -0
  63. package/dist/core-common/src/utils/transferable.d.ts.map +1 -0
  64. package/dist/core-common/src/utils/wait.d.ts +19 -0
  65. package/dist/core-common/src/utils/wait.d.ts.map +1 -0
  66. package/dist/core-common/src/utils/xml.d.ts +36 -0
  67. package/dist/core-common/src/utils/xml.d.ts.map +1 -0
  68. package/dist/core-common/src/zip/sd-zip.d.ts +80 -0
  69. package/dist/core-common/src/zip/sd-zip.d.ts.map +1 -0
  70. package/dist/core-node/src/features/fs-watcher.d.ts +70 -0
  71. package/dist/core-node/src/features/fs-watcher.d.ts.map +1 -0
  72. package/dist/core-node/src/index.d.ts +7 -0
  73. package/dist/core-node/src/index.d.ts.map +1 -0
  74. package/dist/core-node/src/utils/fs.d.ts +197 -0
  75. package/dist/core-node/src/utils/fs.d.ts.map +1 -0
  76. package/dist/core-node/src/utils/path.d.ts +75 -0
  77. package/dist/core-node/src/utils/path.d.ts.map +1 -0
  78. package/dist/core-node/src/worker/create-worker.d.ts +23 -0
  79. package/dist/core-node/src/worker/create-worker.d.ts.map +1 -0
  80. package/dist/core-node/src/worker/types.d.ts +67 -0
  81. package/dist/core-node/src/worker/types.d.ts.map +1 -0
  82. package/dist/core-node/src/worker/worker.d.ts +27 -0
  83. package/dist/core-node/src/worker/worker.d.ts.map +1 -0
  84. package/dist/features/fs-watcher.js +100 -0
  85. package/dist/features/fs-watcher.js.map +7 -0
  86. package/dist/index.js +7 -0
  87. package/dist/index.js.map +7 -0
  88. package/dist/utils/fs.js +305 -0
  89. package/dist/utils/fs.js.map +7 -0
  90. package/dist/utils/path.js +48 -0
  91. package/dist/utils/path.js.map +7 -0
  92. package/dist/worker/create-worker.js +85 -0
  93. package/dist/worker/create-worker.js.map +7 -0
  94. package/dist/worker/types.js +1 -0
  95. package/dist/worker/types.js.map +7 -0
  96. package/dist/worker/worker.js +142 -0
  97. package/dist/worker/worker.js.map +7 -0
  98. package/lib/worker-dev-proxy.js +12 -0
  99. package/package.json +23 -0
  100. package/src/features/fs-watcher.ts +176 -0
  101. package/src/index.ts +11 -0
  102. package/src/utils/fs.ts +550 -0
  103. package/src/utils/path.ts +128 -0
  104. package/src/worker/create-worker.ts +141 -0
  105. package/src/worker/types.ts +86 -0
  106. package/src/worker/worker.ts +207 -0
  107. package/tests/utils/fs-watcher.spec.ts +295 -0
  108. package/tests/utils/fs.spec.ts +754 -0
  109. package/tests/utils/path.spec.ts +192 -0
  110. package/tests/worker/fixtures/test-worker.ts +35 -0
  111. package/tests/worker/sd-worker.spec.ts +183 -0
@@ -0,0 +1,60 @@
1
+ /**
2
+ * 숫자 유틸리티 함수
3
+ */
4
+ /**
5
+ * 문자열을 정수로 파싱
6
+ * 숫자가 아닌 문자(0-9, -, . 제외)는 제거 후 파싱
7
+ *
8
+ * @note 소수점이 포함된 문자열은 정수 부분만 반환됩니다 (예: '12.34' → 12).
9
+ * 반올림이 필요하면 {@link numParseRoundedInt}를 사용하세요.
10
+ * @note 문자열 중간의 `-`도 유지되므로 의도치 않은 음수가 될 수 있습니다.
11
+ * 예: `"가-123나"` → `-123`
12
+ */
13
+ export declare function numParseInt(text: unknown): number | undefined;
14
+ /**
15
+ * 문자열을 실수로 파싱 후 반올림하여 정수 반환
16
+ */
17
+ export declare function numParseRoundedInt(text: unknown): number | undefined;
18
+ /**
19
+ * 문자열을 실수로 파싱
20
+ * 숫자가 아닌 문자는 제거 후 파싱
21
+ */
22
+ export declare function numParseFloat(text: unknown): number | undefined;
23
+ /**
24
+ * undefined, null, 0 체크 (타입 가드)
25
+ *
26
+ * 타입 가드로 동작하여, true 반환 시 `val`이 `0 | undefined`임을 보장합니다.
27
+ * false 반환 시 `val`이 0이 아닌 유효한 숫자임이 보장됩니다.
28
+ *
29
+ * @param val 체크할 값
30
+ * @returns undefined, null, 0이면 true
31
+ * @example
32
+ * const count: number | undefined = getValue();
33
+ * if (numIsNullOrEmpty(count)) {
34
+ * // count: 0 | undefined
35
+ * console.log("비어있음");
36
+ * } else {
37
+ * // count: number (0이 아닌 값)
38
+ * console.log(`개수: ${count}`);
39
+ * }
40
+ */
41
+ export declare function numIsNullOrEmpty(val: number | undefined): val is 0 | undefined;
42
+ /**
43
+ * 숫자를 천단위 구분자가 포함된 문자열로 포맷팅
44
+ * @param val 포맷팅할 숫자
45
+ * @param digit 소수점 자릿수 옵션
46
+ * @param digit.max 최대 소수점 자릿수
47
+ * @param digit.min 최소 소수점 자릿수 (부족하면 0으로 채움)
48
+ * @example
49
+ * numFormat(1234.567, { max: 2 }) // "1,234.57"
50
+ * numFormat(1234, { min: 2 }) // "1,234.00"
51
+ */
52
+ export declare function numFormat(val: number, digit?: {
53
+ max?: number;
54
+ min?: number;
55
+ }): string;
56
+ export declare function numFormat(val: number | undefined, digit?: {
57
+ max?: number;
58
+ min?: number;
59
+ }): string | undefined;
60
+ //# sourceMappingURL=num.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"num.d.ts","sourceRoot":"","sources":["../../../../../core-common/src/utils/num.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAQ7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGpE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAQ/D;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,GAAG,IAAI,CAAC,GAAG,SAAS,CAE9E;AAMD;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC;AACvF,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,CAAC"}
@@ -0,0 +1,258 @@
1
+ /**
2
+ * 깊은 복사
3
+ * - 순환 참조 지원
4
+ * - 커스텀 타입(DateTime, DateOnly, Time, Uuid, Uint8Array) 복사 지원
5
+ *
6
+ * @note 함수, Symbol은 복사되지 않고 참조가 유지됨
7
+ * @note WeakMap, WeakSet은 지원되지 않음 (일반 객체로 복사되어 빈 객체가 됨)
8
+ * @note 프로토타입 체인은 유지됨 (Object.setPrototypeOf 사용)
9
+ * @note getter/setter는 현재 값으로 평가되어 복사됨 (접근자 속성 자체는 복사되지 않음)
10
+ */
11
+ export declare function objClone<T>(source: T): T;
12
+ /** objEqual 옵션 타입 */
13
+ export interface EqualOptions {
14
+ /** 비교할 키 목록. 지정 시 해당 키만 비교 (최상위 레벨에만 적용) */
15
+ topLevelIncludes?: string[];
16
+ /** 비교에서 제외할 키 목록 (최상위 레벨에만 적용) */
17
+ topLevelExcludes?: string[];
18
+ /** 배열 순서 무시 여부. true 시 O(n²) 복잡도 */
19
+ ignoreArrayIndex?: boolean;
20
+ /** 얕은 비교 여부. true 시 1단계만 비교 (참조 비교) */
21
+ onlyOneDepth?: boolean;
22
+ }
23
+ /**
24
+ * 깊은 비교
25
+ *
26
+ * @param source 비교 대상 1
27
+ * @param target 비교 대상 2
28
+ * @param options 비교 옵션
29
+ * @param options.topLevelIncludes 비교할 키 목록. 지정 시 해당 키만 비교 (최상위 레벨에만 적용)
30
+ * @example `{ topLevelIncludes: ["id", "name"] }` - id, name 키만 비교
31
+ * @param options.topLevelExcludes 비교에서 제외할 키 목록 (최상위 레벨에만 적용)
32
+ * @example `{ topLevelExcludes: ["updatedAt"] }` - updatedAt 키를 제외하고 비교
33
+ * @param options.ignoreArrayIndex 배열 순서 무시 여부. true 시 O(n²) 복잡도
34
+ * @param options.onlyOneDepth 얕은 비교 여부. true 시 1단계만 비교 (참조 비교)
35
+ *
36
+ * @note topLevelIncludes/topLevelExcludes 옵션은 object 속성 키에만 적용됨.
37
+ * Map의 모든 키는 항상 비교에 포함됨.
38
+ * @note 성능 고려사항:
39
+ * - 기본 배열 비교: O(n) 시간 복잡도
40
+ * - `ignoreArrayIndex: true` 사용 시: O(n²) 시간 복잡도
41
+ * (대용량 배열에서 성능 저하 가능)
42
+ * @note `ignoreArrayIndex: true` 동작 특성:
43
+ * - 배열 순서를 무시하고 동일한 요소들의 순열인지 비교
44
+ * - 예: `[1,2,3]`과 `[3,2,1]` → true, `[1,1,1]`과 `[1,2,3]` → false
45
+ */
46
+ export declare function objEqual(source: unknown, target: unknown, options?: EqualOptions): boolean;
47
+ /** objMerge 옵션 타입 */
48
+ export interface ObjMergeOptions {
49
+ /** 배열 처리 방식. "replace": target으로 대체(기본), "concat": 합침(중복 제거) */
50
+ arrayProcess?: "replace" | "concat";
51
+ /** target이 null일 때 해당 키 삭제 여부 */
52
+ useDelTargetNull?: boolean;
53
+ }
54
+ /**
55
+ * 깊은 병합 (source를 base로 target을 병합)
56
+ *
57
+ * @param source 기준 객체
58
+ * @param target 병합할 객체
59
+ * @param opt 병합 옵션
60
+ * @param opt.arrayProcess 배열 처리 방식
61
+ * - `"replace"`: target 배열로 대체 (기본값)
62
+ * - `"concat"`: source와 target 배열을 합침 (Set으로 중복 제거)
63
+ * @param opt.useDelTargetNull target 값이 null일 때 해당 키 삭제 여부
64
+ * - `true`: target이 null이면 결과에서 해당 키 삭제
65
+ * - `false` 또는 미지정: source 값 유지
66
+ *
67
+ * @note 원본 객체를 수정하지 않고 새 객체를 반환함 (불변성 보장)
68
+ * @note arrayProcess="concat" 사용 시 Set을 통해 중복을 제거하며,
69
+ * 객체 배열의 경우 참조(주소) 비교로 중복을 판단함
70
+ * @note 타입이 다른 경우 target 값으로 덮어씀
71
+ */
72
+ export declare function objMerge<T, P>(source: T, target: P, opt?: ObjMergeOptions): T & P;
73
+ /** merge3 옵션 타입 */
74
+ export interface ObjMerge3KeyOptions {
75
+ /** 비교할 하위 키 목록 (equal의 topLevelIncludes와 동일) */
76
+ keys?: string[];
77
+ /** 비교에서 제외할 하위 키 목록 */
78
+ excludes?: string[];
79
+ /** 배열 순서 무시 여부 */
80
+ ignoreArrayIndex?: boolean;
81
+ }
82
+ /**
83
+ * 3-way 병합
84
+ *
85
+ * source, origin, target 세 객체를 비교하여 병합합니다.
86
+ * - source와 origin이 같고 target이 다르면 → target 값 사용
87
+ * - target과 origin이 같고 source가 다르면 → source 값 사용
88
+ * - source와 target이 같으면 → 해당 값 사용
89
+ * - 세 값이 모두 다르면 → 충돌 발생 (origin 값 유지)
90
+ *
91
+ * @param source 변경된 버전 1
92
+ * @param origin 기준 버전 (공통 조상)
93
+ * @param target 변경된 버전 2
94
+ * @param optionsObj 키별 비교 옵션. 각 키에 대해 equal() 비교 옵션을 개별 지정
95
+ * - `keys`: 비교할 하위 키 목록 (equal의 topLevelIncludes와 동일)
96
+ * - `excludes`: 비교에서 제외할 하위 키 목록
97
+ * - `ignoreArrayIndex`: 배열 순서 무시 여부
98
+ * @returns conflict: 충돌 발생 여부, result: 병합 결과
99
+ *
100
+ * @example
101
+ * const { conflict, result } = merge3(
102
+ * { a: 1, b: 2 }, // source
103
+ * { a: 1, b: 1 }, // origin
104
+ * { a: 2, b: 1 }, // target
105
+ * );
106
+ * // conflict: false, result: { a: 2, b: 2 }
107
+ */
108
+ export declare function objMerge3<S extends Record<string, unknown>, O extends Record<string, unknown>, T extends Record<string, unknown>>(source: S, origin: O, target: T, optionsObj?: Record<string, ObjMerge3KeyOptions>): {
109
+ conflict: boolean;
110
+ result: O & S & T;
111
+ };
112
+ /**
113
+ * 객체에서 특정 키들을 제외
114
+ * @param item 원본 객체
115
+ * @param omitKeys 제외할 키 배열
116
+ * @returns 지정된 키가 제외된 새 객체
117
+ * @example
118
+ * const user = { name: "Alice", age: 30, email: "alice@example.com" };
119
+ * objOmit(user, ["email"]);
120
+ * // { name: "Alice", age: 30 }
121
+ */
122
+ export declare function objOmit<T extends Record<string, unknown>, K extends keyof T>(item: T, omitKeys: K[]): Omit<T, K>;
123
+ /**
124
+ * 조건에 맞는 키들을 제외
125
+ * @internal
126
+ * @param item 원본 객체
127
+ * @param omitKeyFn 키를 받아 제외 여부를 반환하는 함수 (true면 제외)
128
+ * @returns 조건에 맞는 키가 제외된 새 객체
129
+ * @example
130
+ * const data = { name: "Alice", _internal: "secret", age: 30 };
131
+ * objOmitByFilter(data, (key) => key.startsWith("_"));
132
+ * // { name: "Alice", age: 30 }
133
+ */
134
+ export declare function objOmitByFilter<T extends Record<string, unknown>>(item: T, omitKeyFn: (key: keyof T) => boolean): T;
135
+ /**
136
+ * 객체에서 특정 키들만 선택
137
+ * @param item 원본 객체
138
+ * @param keys 선택할 키 배열
139
+ * @returns 지정된 키만 포함된 새 객체
140
+ * @example
141
+ * const user = { name: "Alice", age: 30, email: "alice@example.com" };
142
+ * objPick(user, ["name", "age"]);
143
+ * // { name: "Alice", age: 30 }
144
+ */
145
+ export declare function objPick<T extends Record<string, unknown>, K extends keyof T>(item: T, keys: K[]): Pick<T, K>;
146
+ /**
147
+ * 체인 경로로 값 가져오기
148
+ * @example objGetChainValue(obj, "a.b[0].c")
149
+ */
150
+ export declare function objGetChainValue(obj: unknown, chain: string, optional: true): unknown | undefined;
151
+ export declare function objGetChainValue(obj: unknown, chain: string): unknown;
152
+ /**
153
+ * depth만큼 같은 키로 내려가기
154
+ * @internal
155
+ * @param obj 대상 객체
156
+ * @param key 내려갈 키
157
+ * @param depth 내려갈 깊이 (1 이상)
158
+ * @param optional true면 중간에 null/undefined가 있어도 에러 없이 undefined 반환
159
+ * @throws ArgumentError depth가 1 미만일 경우
160
+ * @example objGetChainValueByDepth({ parent: { parent: { name: 'a' } } }, 'parent', 2) => { name: 'a' }
161
+ */
162
+ export declare function objGetChainValueByDepth<T, K extends keyof T>(obj: T, key: K, depth: number, optional: true): T[K] | undefined;
163
+ export declare function objGetChainValueByDepth<T, K extends keyof T>(obj: T, key: K, depth: number): T[K];
164
+ /**
165
+ * 체인 경로로 값 설정
166
+ * @example objSetChainValue(obj, "a.b[0].c", value)
167
+ */
168
+ export declare function objSetChainValue(obj: unknown, chain: string, value: unknown): void;
169
+ /**
170
+ * 체인 경로의 값 삭제
171
+ * @example objDeleteChainValue(obj, "a.b[0].c")
172
+ */
173
+ export declare function objDeleteChainValue(obj: unknown, chain: string): void;
174
+ /**
175
+ * 객체에서 undefined 값을 가진 키 삭제
176
+ * @internal
177
+ *
178
+ * @mutates 원본 객체를 직접 수정함
179
+ */
180
+ export declare function objClearUndefined<T extends object>(obj: T): T;
181
+ /**
182
+ * 객체의 모든 키 삭제
183
+ * @internal
184
+ *
185
+ * @mutates 원본 객체를 직접 수정함
186
+ */
187
+ export declare function objClear<T extends Record<string, unknown>>(obj: T): Record<string, never>;
188
+ /**
189
+ * null을 undefined로 변환 (재귀적)
190
+ * @internal
191
+ *
192
+ * @mutates 원본 배열/객체를 직접 수정함
193
+ */
194
+ export declare function objNullToUndefined<T>(obj: T): T | undefined;
195
+ /**
196
+ * flat된 객체를 nested 객체로 변환
197
+ * @internal
198
+ * @example objUnflatten({ "a.b.c": 1 }) => { a: { b: { c: 1 } } }
199
+ */
200
+ export declare function objUnflatten(flatObj: Record<string, unknown>): Record<string, unknown>;
201
+ /**
202
+ * undefined를 가진 프로퍼티를 optional로 변환
203
+ * @example { a: string; b: string | undefined } → { a: string; b?: string | undefined }
204
+ */
205
+ export type ObjUndefToOptional<T> = {
206
+ [K in keyof T as undefined extends T[K] ? K : never]?: T[K];
207
+ } & {
208
+ [K in keyof T as undefined extends T[K] ? never : K]: T[K];
209
+ };
210
+ /**
211
+ * optional 프로퍼티를 required + undefined 유니온으로 변환
212
+ * @example { a: string; b?: string } → { a: string; b: string | undefined }
213
+ */
214
+ export type ObjOptionalToUndef<T> = {
215
+ [K in keyof T]-?: {} extends Pick<T, K> ? T[K] | undefined : T[K];
216
+ };
217
+ /**
218
+ * Object.keys의 타입 안전한 버전
219
+ * @param obj 키를 추출할 객체
220
+ * @returns 객체의 키 배열
221
+ */
222
+ export declare function objKeys<T extends object>(obj: T): (keyof T)[];
223
+ /**
224
+ * Object.entries의 타입 안전한 버전
225
+ * @param obj 엔트리를 추출할 객체
226
+ * @returns [키, 값] 튜플 배열
227
+ */
228
+ export declare function objEntries<T extends object>(obj: T): ObjEntries<T>;
229
+ /**
230
+ * Object.fromEntries의 타입 안전한 버전
231
+ * @param entries [키, 값] 튜플 배열
232
+ * @returns 생성된 객체
233
+ */
234
+ export declare function objFromEntries<T extends [string, unknown]>(entries: T[]): {
235
+ [K in T[0]]: T[1];
236
+ };
237
+ type ObjEntries<T> = {
238
+ [K in keyof T]: [K, T[K]];
239
+ }[keyof T][];
240
+ /**
241
+ * 객체의 각 엔트리를 변환하여 새 객체 반환
242
+ * @param obj 변환할 객체
243
+ * @param fn 변환 함수 (key, value) => [newKey, newValue]
244
+ * @returns 변환된 키와 값을 가진 새 객체
245
+ * @example
246
+ * const colors = { primary: "255, 0, 0", secondary: "0, 255, 0" };
247
+ *
248
+ * // 값만 변환
249
+ * objMap(colors, (key, rgb) => [null, `rgb(${rgb})`]);
250
+ * // { primary: "rgb(255, 0, 0)", secondary: "rgb(0, 255, 0)" }
251
+ *
252
+ * // 키와 값 모두 변환
253
+ * objMap(colors, (key, rgb) => [`${key}Light`, `rgb(${rgb})`]);
254
+ * // { primaryLight: "rgb(255, 0, 0)", secondaryLight: "rgb(0, 255, 0)" }
255
+ */
256
+ export declare function objMap<T extends object, NK extends string, NV>(obj: T, fn: (key: keyof T, value: T[keyof T]) => [NK | null, NV]): Record<NK | Extract<keyof T, string>, NV>;
257
+ export {};
258
+ //# sourceMappingURL=obj.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obj.d.ts","sourceRoot":"","sources":["../../../../../core-common/src/utils/obj.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * 경로 유틸리티 함수
3
+ * Node.js path 모듈 대체용 (브라우저 환경 지원)
4
+ *
5
+ * @note 이 유틸리티는 POSIX 스타일 경로(슬래시 `/`)만 지원합니다.
6
+ * Windows 백슬래시(`\`) 경로는 지원하지 않습니다.
7
+ * 브라우저 환경 및 Capacitor 플러그인용으로 설계되었습니다.
8
+ */
9
+ /**
10
+ * 경로 조합 (path.join 대체)
11
+ * @note POSIX 스타일 경로만 지원 (슬래시 `/`)
12
+ */
13
+ export declare function pathJoin(...segments: string[]): string;
14
+ /**
15
+ * 파일명 추출 (path.basename 대체)
16
+ */
17
+ export declare function pathBasename(filePath: string, ext?: string): string;
18
+ /**
19
+ * 확장자 추출 (path.extname 대체)
20
+ * @note 숨김 파일(예: `.gitignore`)은 빈 문자열을 반환합니다 (Node.js path.extname과 동일)
21
+ */
22
+ export declare function pathExtname(filePath: string): string;
23
+ //# sourceMappingURL=path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../../../core-common/src/utils/path.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAKtD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAMnE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIpD"}
@@ -0,0 +1,18 @@
1
+ import type { PrimitiveTypeMap, PrimitiveTypeStr } from "../common.types";
2
+ /**
3
+ * 값에서 PrimitiveTypeStr 추론
4
+ *
5
+ * 런타임에서 값의 타입을 검사하여 해당하는 PrimitiveTypeStr을 반환합니다.
6
+ *
7
+ * @param value 타입을 추론할 값
8
+ * @returns 값에 해당하는 PrimitiveTypeStr
9
+ * @throws ArgumentError 지원하지 않는 타입인 경우
10
+ *
11
+ * @example
12
+ * getPrimitiveTypeStr("hello") // "string"
13
+ * getPrimitiveTypeStr(123) // "number"
14
+ * getPrimitiveTypeStr(new DateTime()) // "DateTime"
15
+ * getPrimitiveTypeStr(new Uint8Array()) // "Bytes"
16
+ */
17
+ export declare function getPrimitiveTypeStr(value: PrimitiveTypeMap[PrimitiveTypeStr]): PrimitiveTypeStr;
18
+ //# sourceMappingURL=primitive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitive.d.ts","sourceRoot":"","sources":["../../../../../core-common/src/utils/primitive.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE1E;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAU/F"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * 문자열 유틸리티 함수
3
+ */
4
+ /**
5
+ * 한글 조사를 받침에 따라 적절히 반환
6
+ * @param text 텍스트
7
+ * @param type 조사 타입
8
+ * - `"을"`: 을/를
9
+ * - `"은"`: 은/는
10
+ * - `"이"`: 이/가
11
+ * - `"와"`: 과/와
12
+ * - `"랑"`: 이랑/랑
13
+ * - `"로"`: 으로/로
14
+ * - `"라"`: 이라/라
15
+ *
16
+ * @example
17
+ * getSuffix("사과", "을") // "를"
18
+ * getSuffix("책", "이") // "이"
19
+ */
20
+ export declare function strGetSuffix(text: string, type: "을" | "은" | "이" | "와" | "랑" | "로" | "라"): string;
21
+ /**
22
+ * 전각(Full-width) 문자를 반각(Half-width) 문자로 변환
23
+ *
24
+ * 변환 대상:
25
+ * - 전각 영문 대문자 (A-Z → A-Z)
26
+ * - 전각 영문 소문자 (a-z → a-z)
27
+ * - 전각 숫자 (0-9 → 0-9)
28
+ * - 전각 공백 (  → 일반 공백)
29
+ * - 전각 괄호 (() → ())
30
+ *
31
+ * @example
32
+ * replaceSpecialDefaultChar("A123") // "A123"
33
+ * replaceSpecialDefaultChar("(株)") // "(株)"
34
+ */
35
+ export declare function strReplaceFullWidth(str: string): string;
36
+ /**
37
+ * PascalCase로 변환
38
+ * @example "hello-world" → "HelloWorld"
39
+ * @example "hello_world" → "HelloWorld"
40
+ * @example "hello.world" → "HelloWorld"
41
+ */
42
+ export declare function strToPascalCase(str: string): string;
43
+ /**
44
+ * camelCase로 변환
45
+ * @example "hello-world" → "helloWorld"
46
+ * @example "hello_world" → "helloWorld"
47
+ * @example "HelloWorld" → "helloWorld"
48
+ */
49
+ export declare function strToCamelCase(str: string): string;
50
+ /**
51
+ * kebab-case로 변환
52
+ *
53
+ * @example "HelloWorld" → "hello-world"
54
+ * @example "helloWorld" → "hello-world"
55
+ * @example "hello_world" → "hello_world" (소문자만 있으면 변환 안됨)
56
+ * @example "Hello_World" → "hello-_world" (기존 분리자는 유지됨)
57
+ * @example "Hello-World" → "hello--world" (기존 분리자는 유지됨)
58
+ * @example "XMLParser" → "x-m-l-parser" (연속된 대문자는 각각 분리됨)
59
+ */
60
+ export declare function strToKebabCase(str: string): string;
61
+ /**
62
+ * snake_case로 변환
63
+ *
64
+ * @example "HelloWorld" → "hello_world"
65
+ * @example "helloWorld" → "hello_world"
66
+ * @example "hello-world" → "hello-world" (소문자만 있으면 변환 안됨)
67
+ * @example "Hello-World" → "hello_-world" (기존 분리자는 유지됨)
68
+ * @example "Hello_World" → "hello__world" (기존 분리자는 유지됨)
69
+ * @example "XMLParser" → "x_m_l_parser" (연속된 대문자는 각각 분리됨)
70
+ */
71
+ export declare function strToSnakeCase(str: string): string;
72
+ /**
73
+ * undefined 또는 빈 문자열 여부 체크 (타입 가드)
74
+ *
75
+ * @param str 체크할 문자열
76
+ * @returns undefined, null, 빈 문자열이면 true
77
+ *
78
+ * @example
79
+ * const name: string | undefined = getValue();
80
+ * if (strIsNullOrEmpty(name)) {
81
+ * // name: "" | undefined
82
+ * console.log("이름이 비어있습니다");
83
+ * } else {
84
+ * // name: string (비어있지 않은 문자열)
85
+ * console.log(`이름: ${name}`);
86
+ * }
87
+ */
88
+ export declare function strIsNullOrEmpty(str: string | undefined): str is "" | undefined;
89
+ /**
90
+ * 문자열 특정 위치에 삽입
91
+ *
92
+ * @param str 원본 문자열
93
+ * @param index 삽입할 위치 (0부터 시작)
94
+ * @param insertString 삽입할 문자열
95
+ * @returns 삽입된 새 문자열
96
+ *
97
+ * @example
98
+ * strInsert("Hello World", 5, ","); // "Hello, World"
99
+ * strInsert("abc", 0, "X"); // "Xabc"
100
+ * strInsert("abc", 3, "X"); // "abcX"
101
+ */
102
+ export declare function strInsert(str: string, index: number, insertString: string): string;
103
+ //# sourceMappingURL=str.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"str.d.ts","sourceRoot":"","sources":["../../../../../core-common/src/utils/str.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,MAAM,CAyBhG;AA8ED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvD;AAMD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD;AAUD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,GAAG,IAAI,EAAE,GAAG,SAAS,CAE/E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAElF"}
@@ -0,0 +1,84 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,47 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,19 @@
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
@@ -0,0 +1 @@
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"}