@simplysm/core-common 14.0.47 → 14.0.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +255 -0
- package/dist/utils/transferable.d.ts.map +1 -1
- package/dist/utils/transferable.js +7 -3
- package/dist/utils/transferable.js.map +1 -1
- package/docs/errors.md +82 -0
- package/docs/extensions.md +167 -0
- package/docs/features.md +136 -0
- package/docs/types.md +245 -0
- package/docs/utils.md +591 -0
- package/package.json +4 -3
- package/src/utils/transferable.ts +8 -3
package/README.md
ADDED
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
# @simplysm/core-common
|
|
2
|
+
|
|
3
|
+
브라우저와 Node.js 모두에서 사용 가능한 순수 공통 유틸리티 패키지. 다른 `@simplysm/*` 패키지에 대한 내부 의존성이 없는 리프 패키지다.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @simplysm/core-common
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## API Overview
|
|
12
|
+
|
|
13
|
+
### Errors
|
|
14
|
+
|
|
15
|
+
| API | Type | Description |
|
|
16
|
+
|-----|------|-------------|
|
|
17
|
+
| `SdError` | class | 트리 구조 에러 체인 지원. 메시지를 역순으로 결합 (상위 => 하위 => 원인) |
|
|
18
|
+
| `ArgumentError` | class | 인자 유효성 오류. 인자 객체를 YAML 형식으로 메시지에 포함 |
|
|
19
|
+
| `NotImplementedError` | class | 미구현 기능 호출 시 발생 |
|
|
20
|
+
| `TimeoutError` | class | 대기 시간 초과 시 발생 (시도 횟수 포함) |
|
|
21
|
+
|
|
22
|
+
→ See [docs/errors.md](./docs/errors.md) for details.
|
|
23
|
+
|
|
24
|
+
### Types (Value Objects)
|
|
25
|
+
|
|
26
|
+
| API | Type | Description |
|
|
27
|
+
|-----|------|-------------|
|
|
28
|
+
| `DateTime` | class | 불변 날짜시간 (밀리초 정밀도, 로컬 타임존) |
|
|
29
|
+
| `DateOnly` | class | 불변 날짜 (시간 제외, 주차 계산 지원) |
|
|
30
|
+
| `Time` | class | 불변 시간 (24시간 순환, 날짜 제외) |
|
|
31
|
+
| `Uuid` | class | UUID v4 (crypto.getRandomValues 기반) |
|
|
32
|
+
| `LazyGcMap<TKey, TValue>` | class | 자동 만료 기능이 있는 LRU Map |
|
|
33
|
+
|
|
34
|
+
→ See [docs/types.md](./docs/types.md) for details.
|
|
35
|
+
|
|
36
|
+
### Features
|
|
37
|
+
|
|
38
|
+
| API | Type | Description |
|
|
39
|
+
|-----|------|-------------|
|
|
40
|
+
| `EventEmitter<TEvents>` | class | 타입 안전 EventEmitter (EventTarget 기반, 브라우저/Node.js 모두 지원) |
|
|
41
|
+
| `DebounceQueue` | class | 비동기 디바운스 큐 (짧은 시간 내 다수 호출 시 마지막만 실행) |
|
|
42
|
+
| `SerialQueue` | class | 비동기 직렬 큐 (순차 실행 보장) |
|
|
43
|
+
|
|
44
|
+
→ See [docs/features.md](./docs/features.md) for details.
|
|
45
|
+
|
|
46
|
+
### Extensions (Prototype)
|
|
47
|
+
|
|
48
|
+
Array, Map, Set 프로토타입 확장이 자동 등록됨 (side-effect import):
|
|
49
|
+
|
|
50
|
+
| API | Type | Description |
|
|
51
|
+
|-----|------|-------------|
|
|
52
|
+
| **Array Methods (Immutable)** | | `single`, `first`, `last`, `filterExists`, `ofType`, `groupBy`, `toMap`, `toMapAsync`, `toArrayMap`, `toSetMap`, `toMapValues`, `toObject`, `toTree`, `distinct`, `orderBy`, `orderByDesc`, `diffs`, `oneWayDiffs`, `merge`, `sum`, `min`, `max`, `shuffle`, `mapAsync`, `filterAsync`, `mapMany`, `mapManyAsync`, `parallelAsync` |
|
|
53
|
+
| **Array Methods (Mutable)** | | `remove`, `insert`, `toggle`, `clear`, `distinctThis`, `orderByThis`, `orderByDescThis` |
|
|
54
|
+
| **Map Extensions** | | `getOrCreate`, `update` |
|
|
55
|
+
| **Set Extensions** | | `adds`, `toggle` |
|
|
56
|
+
| `ArrayDiffsResult<T, P>` | type | diffs() 결과 타입 (INSERT/DELETE/UPDATE) |
|
|
57
|
+
| `ArrayOneWayDiffResult<T>` | type | oneWayDiffs() 결과 타입 (create/update/same) |
|
|
58
|
+
| `TreeArray<T>` | type | toTree() 결과 타입 (children 속성 추가) |
|
|
59
|
+
| `ComparableType` | type | 정렬/비교 가능한 타입 union |
|
|
60
|
+
|
|
61
|
+
→ See [docs/extensions.md](./docs/extensions.md) for details.
|
|
62
|
+
|
|
63
|
+
### Environment
|
|
64
|
+
|
|
65
|
+
| API | Type | Description |
|
|
66
|
+
|-----|------|-------------|
|
|
67
|
+
| `env` | function | 환경변수 get/set. `env(key)` 읽기, `env(key, value)` 쓰기 |
|
|
68
|
+
| `parseBoolEnv` | function | 환경변수 값을 boolean으로 파싱 ("true"/"1"/"yes"/"on" -> true) |
|
|
69
|
+
|
|
70
|
+
### Utils (Namespace Imports)
|
|
71
|
+
|
|
72
|
+
| API | Type | Description |
|
|
73
|
+
|-----|------|-------------|
|
|
74
|
+
| `obj` | namespace | clone, equal, merge, merge3, omit, omitByFilter, pick, getChainValue, getChainValueByDepth, setChainValue, deleteChainValue, clearUndefined, clear, nullToUndefined, unflatten, keys, entries, fromEntries, map |
|
|
75
|
+
| `str` | namespace | getKoreanSuffix, replaceFullWidth, toPascalCase, toCamelCase, toKebabCase, toSnakeCase, isNullOrEmpty, insert |
|
|
76
|
+
| `num` | namespace | parseInt, parseFloat, parseRoundedInt, isNullOrEmpty, format |
|
|
77
|
+
| `bytes` | namespace | concat, toHex, fromHex, toBase64, fromBase64 |
|
|
78
|
+
| `path` | namespace | join, basename, extname |
|
|
79
|
+
| `json` | namespace | stringify, parse |
|
|
80
|
+
| `xml` | namespace | parse, stringify |
|
|
81
|
+
| `wait` | namespace | until, time |
|
|
82
|
+
| `transfer` | namespace | encode, decode |
|
|
83
|
+
| `err` | namespace | message |
|
|
84
|
+
| `dt` | namespace | format, normalizeMonth, convert12To24 |
|
|
85
|
+
| `primitive` | namespace | typeStr |
|
|
86
|
+
|
|
87
|
+
→ See [docs/utils.md](./docs/utils.md) for details.
|
|
88
|
+
|
|
89
|
+
### Utils (Direct Exports)
|
|
90
|
+
|
|
91
|
+
| API | Type | Description |
|
|
92
|
+
|-----|------|-------------|
|
|
93
|
+
| `js` | function | JavaScript 코드 하이라이팅용 태그드 템플릿 리터럴 |
|
|
94
|
+
| `ts` | function | TypeScript 코드 하이라이팅용 태그드 템플릿 리터럴 |
|
|
95
|
+
| `html` | function | HTML 마크업 하이라이팅용 태그드 템플릿 리터럴 |
|
|
96
|
+
| `tsql` | function | MSSQL T-SQL 하이라이팅용 태그드 템플릿 리터럴 |
|
|
97
|
+
| `mysql` | function | MySQL SQL 하이라이팅용 태그드 템플릿 리터럴 |
|
|
98
|
+
| `pgsql` | function | PostgreSQL SQL 하이라이팅용 태그드 템플릿 리터럴 |
|
|
99
|
+
| `ZipArchive` | class | ZIP 파일 읽기/쓰기/압축/해제 (캐싱, 진행률 콜백 지원) |
|
|
100
|
+
| `ZipArchiveProgress` | interface | ZipArchive 진행률 콜백 데이터 |
|
|
101
|
+
|
|
102
|
+
### Type Utilities
|
|
103
|
+
|
|
104
|
+
| API | Type | Description |
|
|
105
|
+
|-----|------|-------------|
|
|
106
|
+
| `Bytes` | type | `Uint8Array` 별칭 (Buffer 대신 사용) |
|
|
107
|
+
| `PrimitiveTypeMap` | type | 원시 타입 문자열 key -> 타입 매핑 |
|
|
108
|
+
| `PrimitiveTypeStr` | type | 원시 타입 문자열 key union (`"string" \| "number" \| ...`) |
|
|
109
|
+
| `PrimitiveType` | type | 원시 타입 union (`string \| number \| boolean \| DateTime \| ...`) |
|
|
110
|
+
| `DeepPartial<T>` | type | 모든 속성을 재귀적으로 optional로 변환 |
|
|
111
|
+
| `Type<T>` | interface | 생성자 타입 (`new (...args) => T`) |
|
|
112
|
+
| `EqualOptions` | interface | obj.equal() 옵션 |
|
|
113
|
+
| `MergeOptions` | interface | obj.merge() 옵션 |
|
|
114
|
+
| `Merge3KeyOptions` | interface | obj.merge3() key 옵션 |
|
|
115
|
+
| `DtNormalizedMonth` | interface | dt.normalizeMonth() 결과 타입 |
|
|
116
|
+
| `UndefToOptional<T>` | type | undefined 타입을 optional로 변환 |
|
|
117
|
+
| `OptionalToUndef<T>` | type | optional 속성을 undefined 포함 타입으로 변환 |
|
|
118
|
+
|
|
119
|
+
→ See [docs/utils.md](./docs/utils.md) for details.
|
|
120
|
+
|
|
121
|
+
## Usage Examples
|
|
122
|
+
|
|
123
|
+
### 프로토타입 확장 사용
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
import "@simplysm/core-common";
|
|
127
|
+
|
|
128
|
+
// Array 확장
|
|
129
|
+
const users = [{ id: 1, name: "Alice" }, { id: 2, name: "Bob" }];
|
|
130
|
+
const user = users.single((u) => u.id === 1);
|
|
131
|
+
const grouped = users.groupBy((u) => u.name);
|
|
132
|
+
const sorted = users.orderBy((u) => u.name);
|
|
133
|
+
const diffs = newUsers.diffs(oldUsers, { keys: ["id"] });
|
|
134
|
+
|
|
135
|
+
// Map 확장
|
|
136
|
+
const cache = new Map<string, number[]>();
|
|
137
|
+
const arr = cache.getOrCreate("key", []);
|
|
138
|
+
|
|
139
|
+
// Set 확장
|
|
140
|
+
const set = new Set<string>();
|
|
141
|
+
set.adds("a", "b", "c"); // 여러 항목 추가
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### 에러 체인 처리
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
import { SdError } from "@simplysm/core-common";
|
|
148
|
+
|
|
149
|
+
try {
|
|
150
|
+
await fetch(url);
|
|
151
|
+
} catch (err) {
|
|
152
|
+
throw new SdError(err, "API 호출 실패", "사용자 로드 실패");
|
|
153
|
+
// 결과 메시지: "사용자 로드 실패 => API 호출 실패 => 원본 에러 메시지"
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### 네임스페이스 유틸리티 사용
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
import { obj, str, json, DateTime, Uuid } from "@simplysm/core-common";
|
|
161
|
+
|
|
162
|
+
// 깊은 복사 및 비교
|
|
163
|
+
const copied = obj.clone({ nested: { data: [1, 2, 3] } });
|
|
164
|
+
const isEqual = obj.equal(a, b, { topLevelExcludes: ["updatedAt"] });
|
|
165
|
+
const merged = obj.merge(defaults, overrides);
|
|
166
|
+
|
|
167
|
+
// obj.omit, obj.pick
|
|
168
|
+
const noId = obj.omit(user, ["id"]);
|
|
169
|
+
const onlyName = obj.pick(user, ["name", "email"]);
|
|
170
|
+
|
|
171
|
+
// 한국어 조사 처리
|
|
172
|
+
const suffix = str.getKoreanSuffix("파일", "을"); // "을"
|
|
173
|
+
const camel = str.toCamelCase("HelloWorld"); // "helloWorld"
|
|
174
|
+
|
|
175
|
+
// 커스텀 타입 지원 JSON 직렬화
|
|
176
|
+
const serialized = json.stringify({
|
|
177
|
+
date: new DateTime(),
|
|
178
|
+
id: Uuid.generate()
|
|
179
|
+
});
|
|
180
|
+
const restored = json.parse(serialized); // DateTime, Uuid 타입 복원됨
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### 비동기 큐 사용
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
import { DebounceQueue, SerialQueue } from "@simplysm/core-common";
|
|
187
|
+
|
|
188
|
+
// 디바운스 큐: 짧은 시간 내 재호출 시 이전 호출 무시
|
|
189
|
+
const dq = new DebounceQueue(300);
|
|
190
|
+
dq.on("error", (err) => console.error(err));
|
|
191
|
+
dq.run(() => saveData());
|
|
192
|
+
dq.run(() => saveData()); // 첫 번째 호출 무시, 300ms 후 마지막만 실행
|
|
193
|
+
|
|
194
|
+
// 직렬 큐: 순차 실행
|
|
195
|
+
const sq = new SerialQueue();
|
|
196
|
+
sq.run(async () => await step1());
|
|
197
|
+
sq.run(async () => await step2()); // step1 완료 후 실행
|
|
198
|
+
sq.run(async () => await step3()); // step2 완료 후 실행
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### DateTime 사용
|
|
202
|
+
|
|
203
|
+
```typescript
|
|
204
|
+
import { DateTime, DateOnly, Time, Uuid } from "@simplysm/core-common";
|
|
205
|
+
|
|
206
|
+
const now = new DateTime();
|
|
207
|
+
const specific = new DateTime(2025, 1, 15, 10, 30, 0);
|
|
208
|
+
const parsed = DateTime.parse("2025-01-15 10:30:00");
|
|
209
|
+
const formatted = now.toFormatString("yyyy-MM-dd HH:mm:ss");
|
|
210
|
+
const today = new DateOnly();
|
|
211
|
+
const id = Uuid.generate();
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### 자동 만료 Map 사용
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
import { LazyGcMap } from "@simplysm/core-common";
|
|
218
|
+
|
|
219
|
+
const cache = new LazyGcMap<string, Data>({
|
|
220
|
+
expireTime: 60_000,
|
|
221
|
+
onExpire: async (key, value) => {
|
|
222
|
+
await value.cleanup();
|
|
223
|
+
},
|
|
224
|
+
});
|
|
225
|
+
try {
|
|
226
|
+
cache.set("key", data);
|
|
227
|
+
const val = cache.get("key"); // 접근 시간 갱신
|
|
228
|
+
} finally {
|
|
229
|
+
cache.dispose();
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### EventEmitter 사용
|
|
234
|
+
|
|
235
|
+
```typescript
|
|
236
|
+
import { EventEmitter } from "@simplysm/core-common";
|
|
237
|
+
|
|
238
|
+
interface MyEvents {
|
|
239
|
+
data: string;
|
|
240
|
+
error: Error;
|
|
241
|
+
done: void;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
class MyService extends EventEmitter<MyEvents> {
|
|
245
|
+
async load() {
|
|
246
|
+
this.emit("data", "Loading...");
|
|
247
|
+
this.emit("done"); // void 타입은 인자 없이 호출
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
const svc = new MyService();
|
|
252
|
+
svc.on("data", (data) => console.log(data)); // data: string
|
|
253
|
+
svc.on("done", () => console.log("completed"));
|
|
254
|
+
await svc.load();
|
|
255
|
+
```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transferable.d.ts","sourceRoot":"","sources":["../../src/utils/transferable.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,KAAK,YAAY,GAAG,WAAW,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,YAAY,EAAE,CAAC;CAC9B,CAMA;AAoJD;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"transferable.d.ts","sourceRoot":"","sources":["../../src/utils/transferable.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,KAAK,YAAY,GAAG,WAAW,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,YAAY,EAAE,CAAC;CAC9B,CAMA;AAoJD;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAgF5C"}
|
|
@@ -203,7 +203,11 @@ export function decode(obj) {
|
|
|
203
203
|
if (Array.isArray(obj)) {
|
|
204
204
|
return obj.map((item) => decode(item));
|
|
205
205
|
}
|
|
206
|
-
// 3.
|
|
206
|
+
// 3. Uint8Array (encode에서 그대로 반환하므로 decode에서도 그대로 반환)
|
|
207
|
+
if (obj instanceof Uint8Array) {
|
|
208
|
+
return obj;
|
|
209
|
+
}
|
|
210
|
+
// 4. Map 재귀
|
|
207
211
|
if (obj instanceof Map) {
|
|
208
212
|
const newMap = new Map();
|
|
209
213
|
for (const [k, v] of obj) {
|
|
@@ -211,7 +215,7 @@ export function decode(obj) {
|
|
|
211
215
|
}
|
|
212
216
|
return newMap;
|
|
213
217
|
}
|
|
214
|
-
//
|
|
218
|
+
// 5. Set 재귀
|
|
215
219
|
if (obj instanceof Set) {
|
|
216
220
|
const newSet = new Set();
|
|
217
221
|
for (const v of obj) {
|
|
@@ -219,7 +223,7 @@ export function decode(obj) {
|
|
|
219
223
|
}
|
|
220
224
|
return newSet;
|
|
221
225
|
}
|
|
222
|
-
//
|
|
226
|
+
// 6. 객체 재귀
|
|
223
227
|
if (typeof obj === "object") {
|
|
224
228
|
const record = obj;
|
|
225
229
|
const result = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transferable.js","sourceRoot":"","sources":["../../src/utils/transferable.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transferable.js","sourceRoot":"","sources":["../../src/utils/transferable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAUrC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,gBAAgB;AAEhB;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAC,GAAY;IAIjC,MAAM,YAAY,GAAmB,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;IACzC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACnE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,UAAU,CACjB,GAAY,EACZ,YAA4B,EAC5B,IAAyB,EACzB,SAAsB,EACtB,KAA2B;IAE3B,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,GAAG,CAAC;IAE5B,0BAA0B;IAC1B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,6BAA6B;QAC7B,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAC9D,MAAM,IAAI,SAAS,CAAC,cAAc,WAAW,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,0BAA0B;QAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,MAAM,IAAI,IAAI;YAAE,OAAO,MAAM,CAAC;QAElC,YAAY;QACZ,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,MAAe,CAAC;IAEpB,IAAI,CAAC;QACH,gBAAgB;QAChB,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;YAC9B,wDAAwD;YACxD,iDAAiD;YACjD,MAAM,mBAAmB,GACvB,OAAO,iBAAiB,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,YAAY,iBAAiB,CAAC;YACtF,MAAM,MAAM,GAAG,GAAG,CAAC,MAAqB,CAAC;YACzC,IAAI,CAAC,mBAAmB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3D,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YACD,MAAM,GAAG,GAAG,CAAC;QACf,CAAC;QACD,6CAA6C;aACxC,IAAI,GAAG,YAAY,IAAI,EAAE,CAAC;YAC7B,MAAM,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;QACrD,CAAC;aAAM,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YACnC,MAAM,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QACpD,CAAC;aAAM,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YACnC,MAAM,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QACpD,CAAC;aAAM,IAAI,GAAG,YAAY,IAAI,EAAE,CAAC;YAC/B,MAAM,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QAChD,CAAC;aAAM,IAAI,GAAG,YAAY,IAAI,EAAE,CAAC;YAC/B,MAAM,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;QACtD,CAAC;aAAM,IAAI,GAAG,YAAY,MAAM,EAAE,CAAC;YACjC,MAAM,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;QAClF,CAAC;aAAM,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,GAGd,CAAC;YACF,MAAM,GAAG;gBACP,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE;oBACJ,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI;wBACvB,CAAC,CAAC;4BACE,MAAM,EAAE,UAAU,CAChB,MAAM,CAAC,MAAM,EACb,YAAY,EACZ,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,EACnB,SAAS,EACT,KAAK,CACN;yBACF;wBACH,CAAC,CAAC,EAAE,CAAC;oBACP,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI;wBACtB,CAAC,CAAC;4BACE,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC;yBACpF;wBACH,CAAC,CAAC,EAAE,CAAC;iBACR;aACF,CAAC;QACJ,CAAC;QACD,cAAc;aACT,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAC7B,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CACjE,CAAC;QACJ,CAAC;QACD,YAAY;aACP,IAAI,GAAG,YAAY,GAAG,EAAE,CAAC;YAC5B,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,MAAM,GAAG,IAAI,GAAG,CACd,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;gBACvC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC;gBAC7C,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC;gBACjD,GAAG,EAAE,CAAC;gBACN,OAAO;oBACL,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC;oBACtD,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;iBACzD,CAAC;YACJ,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QACD,YAAY;aACP,IAAI,GAAG,YAAY,GAAG,EAAE,CAAC;YAC5B,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,MAAM,GAAG,IAAI,GAAG,CACd,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACxB,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,GAAG,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAC1E,CACF,CAAC;QACJ,CAAC;QACD,cAAc;aACT,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,GAAG,GAA4B,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,GAA8B,CAAC;YAC9C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtC,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YACrF,CAAC;YACD,MAAM,GAAG,GAAG,CAAC;QACf,CAAC;QACD,WAAW;aACN,CAAC;YACJ,OAAO,GAAG,CAAC;QACb,CAAC;QAED,kBAAkB;QAClB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACzB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,gCAAgC;QAChC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;AACH,CAAC;AAED,YAAY;AAEZ,gBAAgB;AAEhB;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,GAAY;IACjC,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,GAAG,CAAC;IAE5B,uBAAuB;IACvB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,UAAU,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAClE,MAAM,KAAK,GAAG,GAA0C,CAAC;QACzD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAExB,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QACjF,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzF,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzF,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QACjF,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QACjF,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YAC5E,MAAM,SAAS,GAAG,IAAyC,CAAC;YAC5D,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YAC3E,MAAM,SAAS,GAAG,IAOjB,CAAC;YACF,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,CAGtC,CAAC;YAEF,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;YAC1B,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;YAE5B,IAAI,SAAS,CAAC,IAAI,IAAI,IAAI;gBAAE,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;YACtD,IAAI,SAAS,CAAC,KAAK,IAAI,IAAI;gBAAG,GAAa,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC5E,IAAI,SAAS,CAAC,MAAM,IAAI,IAAI;gBAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACpE,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IAED,cAAc;IACd,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,sDAAsD;IACtD,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;QAC9B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,YAAY;IACZ,IAAI,GAAG,YAAY,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC3C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,YAAY;IACZ,IAAI,GAAG,YAAY,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAW,CAAC;QAClC,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;YACpB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,WAAW;IACX,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,GAA8B,CAAC;QAC9C,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,YAAY"}
|
package/docs/errors.md
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Errors
|
|
2
|
+
|
|
3
|
+
## `SdError`
|
|
4
|
+
|
|
5
|
+
트리 구조 에러 체인을 지원하는 에러 클래스. ES2024 `cause` 속성을 활용한다.
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
export class SdError extends Error {
|
|
9
|
+
override cause?: Error;
|
|
10
|
+
|
|
11
|
+
/** 원인 에러를 감싸서 생성. 메시지는 역순으로 결합됨 */
|
|
12
|
+
constructor(cause: Error, ...messages: string[]);
|
|
13
|
+
/** 메시지만으로 생성 */
|
|
14
|
+
constructor(...messages: string[]);
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
생성자에 전달된 메시지들은 역순으로 결합된다. `cause`가 `Error` 인스턴스이면 그 메시지도 체인 끝에 추가된다.
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
throw new SdError(err, "API 호출 실패", "사용자 로드 실패");
|
|
22
|
+
// message: "사용자 로드 실패 => API 호출 실패 => 원본 에러 메시지"
|
|
23
|
+
|
|
24
|
+
throw new SdError("잘못된 상태", "처리 불가");
|
|
25
|
+
// message: "처리 불가 => 잘못된 상태"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## `ArgumentError`
|
|
29
|
+
|
|
30
|
+
유효하지 않은 인자를 전달받았을 때 발생하는 에러. 인자 객체를 YAML 형식으로 메시지에 포함하여 디버깅을 용이하게 한다.
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
export class ArgumentError extends SdError {
|
|
34
|
+
/** 기본 메시지("잘못된 인자입니다.")와 함께 인자 객체를 YAML 형식으로 출력 */
|
|
35
|
+
constructor(argObj: Record<string, unknown>);
|
|
36
|
+
/** 커스텀 메시지와 함께 인자 객체를 YAML 형식으로 출력 */
|
|
37
|
+
constructor(message: string, argObj: Record<string, unknown>);
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
throw new ArgumentError({ userId: 123, name: null });
|
|
43
|
+
// message: "잘못된 인자입니다.\n\nuserId: 123\nname: null"
|
|
44
|
+
|
|
45
|
+
throw new ArgumentError("잘못된 사용자", { userId: 123 });
|
|
46
|
+
// message: "잘못된 사용자\n\nuserId: 123"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## `NotImplementedError`
|
|
50
|
+
|
|
51
|
+
아직 구현되지 않은 기능이 호출되었을 때 발생하는 에러.
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
export class NotImplementedError extends SdError {
|
|
55
|
+
constructor(message?: string);
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
throw new NotImplementedError("서브클래스에서 구현 필요");
|
|
61
|
+
// message: "미구현: 서브클래스에서 구현 필요"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## `TimeoutError`
|
|
65
|
+
|
|
66
|
+
대기 시간이 초과되었을 때 발생하는 에러. `wait.until()`에서 최대 시도 횟수를 초과하면 자동으로 발생한다.
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
export class TimeoutError extends SdError {
|
|
70
|
+
constructor(count?: number, message?: string);
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
| Parameter | Type | Description |
|
|
75
|
+
|-----------|------|-------------|
|
|
76
|
+
| `count` | `number \| undefined` | 시도 횟수 |
|
|
77
|
+
| `message` | `string \| undefined` | 추가 메시지 |
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
throw new TimeoutError(50, "API 응답 대기 초과");
|
|
81
|
+
// message: "대기 시간 초과(50회 시도): API 응답 대기 초과"
|
|
82
|
+
```
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# Extensions (Prototype)
|
|
2
|
+
|
|
3
|
+
`@simplysm/core-common`을 import하면 `Array`, `Map`, `Set` 프로토타입 확장이 자동 등록된다.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
import "@simplysm/core-common"; // side-effect import — 확장 등록
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Array Extensions (Immutable)
|
|
10
|
+
|
|
11
|
+
새 배열을 반환하며 원본 배열을 변경하지 않는다.
|
|
12
|
+
|
|
13
|
+
| Method | Signature | Description |
|
|
14
|
+
|--------|-----------|-------------|
|
|
15
|
+
| `single` | `(predicate?) => T \| undefined` | 조건에 맞는 단일 요소 반환. 2개 이상이면 `ArgumentError` 발생 |
|
|
16
|
+
| `first` | `(predicate?) => T \| undefined` | 첫 번째 요소 반환 |
|
|
17
|
+
| `last` | `(predicate?) => T \| undefined` | 마지막 요소 반환 |
|
|
18
|
+
| `filterExists` | `() => NonNullable<T>[]` | null/undefined 제거 |
|
|
19
|
+
| `ofType` | `(type) => TNarrow[]` | 특정 타입의 요소만 필터 (`PrimitiveTypeStr` 또는 생성자) |
|
|
20
|
+
| `mapAsync` | `(selector) => Promise<TResult[]>` | 비동기 매핑 (순차 실행) |
|
|
21
|
+
| `filterAsync` | `(predicate) => Promise<T[]>` | 비동기 필터 (순차 실행) |
|
|
22
|
+
| `mapMany` | `(selector?) => TResult[]` | 매핑 후 평탄화 (또는 중첩 배열 평탄화) |
|
|
23
|
+
| `mapManyAsync` | `(selector?) => Promise<TResult[]>` | 비동기 매핑 후 평탄화 (순차 실행) |
|
|
24
|
+
| `parallelAsync` | `(fn) => Promise<TResult[]>` | 비동기 병렬 처리 (`Promise.all` 사용) |
|
|
25
|
+
| `groupBy` | `(keySelector, valueSelector?) => { key, values }[]` | key 기준 그룹화. 객체 key는 O(n²), 원시 key는 O(n) |
|
|
26
|
+
| `toMap` | `(keySelector, valueSelector?) => Map<TKey, TValue>` | Map으로 변환. 중복 key이면 `ArgumentError` 발생 |
|
|
27
|
+
| `toMapAsync` | `(keySelector, valueSelector?) => Promise<Map<TKey, TValue>>` | 비동기 Map으로 변환 |
|
|
28
|
+
| `toArrayMap` | `(keySelector, valueSelector?) => Map<TKey, TValue[]>` | 그룹 Map으로 변환. O(n) 성능 |
|
|
29
|
+
| `toSetMap` | `(keySelector, valueSelector?) => Map<TKey, Set<TValue>>` | 그룹 Set Map으로 변환 |
|
|
30
|
+
| `toMapValues` | `(keySelector, valueSelector) => Map<TKey, TValue>` | 그룹화 후 그룹별로 값 변환 |
|
|
31
|
+
| `toObject` | `(keySelector, valueSelector?) => Record<string, TValue>` | 일반 객체로 변환. 중복 key이면 `ArgumentError` 발생 |
|
|
32
|
+
| `toTree` | `(keyProp, parentKey) => TreeArray<T>[]` | 평면 배열을 트리 구조로 변환. O(n) 복잡도 |
|
|
33
|
+
| `distinct` | `(options?) => T[]` | 중복 제거. 객체 배열에서 `keyFn` 없이 사용하면 O(n²) |
|
|
34
|
+
| `orderBy` | `(selector?) => T[]` | 오름차순 정렬 |
|
|
35
|
+
| `orderByDesc` | `(selector?) => T[]` | 내림차순 정렬 |
|
|
36
|
+
| `diffs` | `(target, options?) => ArrayDiffsResult<T, P>[]` | 두 배열 비교 (INSERT/DELETE/UPDATE) |
|
|
37
|
+
| `oneWayDiffs` | `(orgItems, keyPropNameOrGetValFn, options?) => ArrayOneWayDiffResult<T>[]` | 단방향 차이 계산 (create/update/same) |
|
|
38
|
+
| `merge` | `(target, options?) => (T \| P \| T&P)[]` | 두 배열 병합 |
|
|
39
|
+
| `sum` | `(selector?) => number` | 합계. 빈 배열이면 0 |
|
|
40
|
+
| `min` | `(selector?) => T \| undefined` | 최솟값 |
|
|
41
|
+
| `max` | `(selector?) => T \| undefined` | 최댓값 |
|
|
42
|
+
| `shuffle` | `() => T[]` | 무작위 섞기 |
|
|
43
|
+
|
|
44
|
+
### `toTree` 상세
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
interface Item {
|
|
48
|
+
id: number;
|
|
49
|
+
parentId?: number;
|
|
50
|
+
name: string;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const items: Item[] = [
|
|
54
|
+
{ id: 1, name: "root" },
|
|
55
|
+
{ id: 2, parentId: 1, name: "child1" },
|
|
56
|
+
{ id: 3, parentId: 2, name: "grandchild" },
|
|
57
|
+
];
|
|
58
|
+
|
|
59
|
+
const tree = items.toTree("id", "parentId");
|
|
60
|
+
// [{ id: 1, name: "root", children: [
|
|
61
|
+
// { id: 2, name: "child1", children: [
|
|
62
|
+
// { id: 3, name: "grandchild", children: [] }
|
|
63
|
+
// ]}
|
|
64
|
+
// ]}]
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### `diffs` 상세
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
const diffs = newItems.diffs(oldItems, { keys: ["id"], excludes: ["updatedAt"] });
|
|
71
|
+
// ArrayDiffsResult: { source: undefined, target: item } (INSERT)
|
|
72
|
+
// { source: item, target: undefined } (DELETE)
|
|
73
|
+
// { source: item, target: item } (UPDATE)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### `oneWayDiffs` 상세
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
const diffs = newItems.oneWayDiffs(orgItems, "id", { includeSame: false });
|
|
80
|
+
// ArrayOneWayDiffResult: { type: "create", item, orgItem: undefined }
|
|
81
|
+
// { type: "update", item, orgItem }
|
|
82
|
+
// { type: "same", item, orgItem }
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Array Extensions (Mutable)
|
|
86
|
+
|
|
87
|
+
원본 배열을 직접 변경한다.
|
|
88
|
+
|
|
89
|
+
| Method | Signature | Description |
|
|
90
|
+
|--------|-----------|-------------|
|
|
91
|
+
| `insert` | `(index, ...items) => this` | 지정 위치에 항목 삽입 |
|
|
92
|
+
| `remove` | `(item \| selector) => this` | 항목 또는 조건에 맞는 항목 제거 |
|
|
93
|
+
| `toggle` | `(item) => this` | 항목 토글 (있으면 제거, 없으면 추가) |
|
|
94
|
+
| `clear` | `() => this` | 배열 비우기 |
|
|
95
|
+
| `distinctThis` | `(options?) => T[]` | 원본 배열에서 중복 제거 |
|
|
96
|
+
| `orderByThis` | `(selector?) => T[]` | 원본 배열을 오름차순 정렬 |
|
|
97
|
+
| `orderByDescThis` | `(selector?) => T[]` | 원본 배열을 내림차순 정렬 |
|
|
98
|
+
|
|
99
|
+
## Map Extensions
|
|
100
|
+
|
|
101
|
+
| Method | Signature | Description |
|
|
102
|
+
|--------|-----------|-------------|
|
|
103
|
+
| `getOrCreate` | `(key, newValue \| newValueFn) => V` | key가 없으면 새 값을 설정하고 반환. V 타입이 함수이면 팩토리로 감싸야 함 |
|
|
104
|
+
| `update` | `(key, updateFn) => void` | 기존 값을 기반으로 업데이트. key가 없어도 `updateFn`이 호출됨 |
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
const map = new Map<string, number[]>();
|
|
108
|
+
const arr = map.getOrCreate("key", []); // 없으면 [] 설정 후 반환
|
|
109
|
+
|
|
110
|
+
const countMap = new Map<string, number>();
|
|
111
|
+
countMap.update("key", (v) => (v ?? 0) + 1); // 카운터 증가
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Set Extensions
|
|
115
|
+
|
|
116
|
+
| Method | Signature | Description |
|
|
117
|
+
|--------|-----------|-------------|
|
|
118
|
+
| `adds` | `(...values: T[]) => this` | 여러 값을 한 번에 추가 |
|
|
119
|
+
| `toggle` | `(value, addOrDel?) => this` | 값 토글. `addOrDel`로 강제 추가/제거 가능 |
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
const set = new Set<number>([1, 2, 3]);
|
|
123
|
+
set.adds(4, 5, 6); // 여러 항목 추가
|
|
124
|
+
set.toggle(2); // 2가 있으므로 제거 → {1, 3, 4, 5, 6}
|
|
125
|
+
set.toggle(99, "add"); // 강제 추가
|
|
126
|
+
set.toggle(99, "del"); // 강제 제거
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Exported Types
|
|
130
|
+
|
|
131
|
+
### `ArrayDiffsResult<TOriginal, TOther>`
|
|
132
|
+
|
|
133
|
+
`diffs()` 메서드의 반환 타입. discriminated union으로 `source`와 `target` 중 하나가 `undefined`이면 INSERT/DELETE, 둘 다 있으면 UPDATE.
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
export type ArrayDiffsResult<TOriginal, TOther> =
|
|
137
|
+
| { source: undefined; target: TOther } // INSERT
|
|
138
|
+
| { source: TOriginal; target: undefined } // DELETE
|
|
139
|
+
| { source: TOriginal; target: TOther }; // UPDATE
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### `ArrayOneWayDiffResult<TItem>`
|
|
143
|
+
|
|
144
|
+
`oneWayDiffs()` 메서드의 반환 타입. `type` 필드로 분기.
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
export type ArrayOneWayDiffResult<TItem> =
|
|
148
|
+
| { type: "create"; item: TItem; orgItem: undefined }
|
|
149
|
+
| { type: "update"; item: TItem; orgItem: TItem }
|
|
150
|
+
| { type: "same"; item: TItem; orgItem: TItem };
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### `TreeArray<TNode>`
|
|
154
|
+
|
|
155
|
+
`toTree()` 메서드의 반환 타입. 원본 타입에 `children` 속성이 추가된다.
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
export type TreeArray<TNode> = TNode & { children: TreeArray<TNode>[] };
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### `ComparableType`
|
|
162
|
+
|
|
163
|
+
`orderBy`, `orderByDesc`, `orderByThis`, `orderByDescThis`의 selector 반환 타입.
|
|
164
|
+
|
|
165
|
+
```typescript
|
|
166
|
+
export type ComparableType = string | number | boolean | DateTime | DateOnly | Time | undefined;
|
|
167
|
+
```
|