@ddunigma/node 4.0.1 → 5.0.0
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 +105 -313
- package/dist/BrowserAdapter-HORDDCOE.js +2 -0
- package/dist/BrowserAdapter-PB4J6FHX.cjs +2 -0
- package/dist/NodeAdapter-5FBNCJSG.js +2 -0
- package/dist/NodeAdapter-EQ73FGEJ.cjs +2 -0
- package/dist/{ObfuscationLayer-BRiyE5xu.d.cts → ObfuscationLayer-BDr-0s1M.d.ts} +22 -4
- package/dist/{ObfuscationLayer-DZiQGHMw.d.ts → ObfuscationLayer-BgL73E5F.d.cts} +22 -4
- package/dist/browser.cjs +1 -1
- package/dist/browser.d.cts +4 -4
- package/dist/browser.d.ts +4 -4
- package/dist/browser.js +1 -1
- package/dist/chunk-5NSHXTMN.cjs +2 -0
- package/dist/chunk-7RWUNW5S.js +2 -0
- package/dist/chunk-AMOZHHMB.cjs +2 -0
- package/dist/chunk-CQATQOBZ.js +2 -0
- package/dist/chunk-HTZT725P.js +10 -0
- package/dist/chunk-HZJ7PU7X.cjs +2 -0
- package/dist/chunk-KS6PRP5Y.js +2 -0
- package/dist/chunk-OQXMQIE3.js +2 -0
- package/dist/chunk-UMA4JEN4.cjs +10 -0
- package/dist/{chunk-WS6GB27C.cjs → chunk-WCXD5LRF.cjs} +2 -2
- package/dist/core.cjs +1 -1
- package/dist/core.d.cts +2 -2
- package/dist/core.d.ts +2 -2
- package/dist/core.js +1 -1
- package/dist/{errors-DxOlTuHc.d.cts → errors-DNICpo4L.d.cts} +96 -60
- package/dist/{errors-DxOlTuHc.d.ts → errors-DNICpo4L.d.ts} +96 -60
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1 -1
- package/dist/wasm/codec.wasm +0 -0
- package/package.json +7 -3
- package/dist/BrowserAdapter-G4XORUQJ.js +0 -2
- package/dist/BrowserAdapter-LIUL744V.cjs +0 -2
- package/dist/NodeAdapter-AHALQ4DQ.js +0 -2
- package/dist/NodeAdapter-DS44MI5D.cjs +0 -2
- package/dist/chunk-342X2QEY.js +0 -2
- package/dist/chunk-65RDFQV7.js +0 -10
- package/dist/chunk-FACJ5LAG.cjs +0 -10
- package/dist/chunk-M7526IW7.js +0 -2
- package/dist/chunk-NY4FGVF3.cjs +0 -2
- package/dist/chunk-P7WJ2LOQ.js +0 -2
- package/dist/chunk-QR43FNIY.js +0 -2
- package/dist/chunk-RFBXQWSA.cjs +0 -2
- package/dist/chunk-RHVBUC4T.cjs +0 -2
package/README.md
CHANGED
|
@@ -43,403 +43,195 @@ dduV1.decode(".우땨땨이?땨뜌.이.뜌이?이!.우우땨이?우뜌.우땨뜌
|
|
|
43
43
|
|
|
44
44
|
---
|
|
45
45
|
|
|
46
|
-
##
|
|
46
|
+
## 5.0.0 사용법
|
|
47
|
+
|
|
48
|
+
### 문자열과 바이너리
|
|
47
49
|
|
|
48
50
|
```typescript
|
|
51
|
+
import { Ddu64 } from "@ddunigma/node";
|
|
52
|
+
|
|
49
53
|
const ddu = new Ddu64();
|
|
50
|
-
const input = new Uint8Array([0, 1, 127, 128, 255]);
|
|
51
54
|
|
|
52
|
-
const
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
+
const encodedText = ddu.encode("안녕하세요");
|
|
56
|
+
const decodedText = ddu.decode(encodedText);
|
|
57
|
+
|
|
58
|
+
const encodedBytes = ddu.encode(new Uint8Array([0, 1, 127, 128, 255]));
|
|
59
|
+
const decodedBytes = ddu.decodeToUint8Array(encodedBytes);
|
|
60
|
+
const decodedBuffer = ddu.decodeToBuffer(encodedBytes); // Node.js 전용
|
|
55
61
|
```
|
|
56
62
|
|
|
57
|
-
|
|
63
|
+
### 프리셋
|
|
58
64
|
|
|
59
65
|
```typescript
|
|
60
66
|
import { Ddu64, DduSetSymbol } from "@ddunigma/node";
|
|
61
67
|
|
|
62
|
-
|
|
63
|
-
new Ddu64();
|
|
64
|
-
|
|
65
|
-
// 구버전 호환 8문자 (아래 두 방법 모두 사용가능)
|
|
66
|
-
new Ddu64({ dduSetSymbol: DduSetSymbol.DDU_V1 });
|
|
67
|
-
new Ddu64(undefined, undefined, { dduSetSymbol: DduSetSymbol.DDU_V1 });
|
|
68
|
-
|
|
69
|
-
// 영문+숫자 64문자 (아래 두 방법 모두 사용가능)
|
|
70
|
-
new Ddu64({ dduSetSymbol: DduSetSymbol.ONECHARSET });
|
|
71
|
-
new Ddu64(undefined, undefined, { dduSetSymbol: DduSetSymbol.ONECHARSET });
|
|
68
|
+
const ddu = new Ddu64();
|
|
69
|
+
const legacy = new Ddu64({ dduSetSymbol: DduSetSymbol.DDU_V1 });
|
|
70
|
+
const oneCharset = new Ddu64({ dduSetSymbol: DduSetSymbol.ONECHARSET });
|
|
72
71
|
```
|
|
73
72
|
|
|
74
|
-
|
|
75
|
-
| ------------ | ------: | ---------------------------------- |
|
|
76
|
-
| `DDU` | 64 | 한글 기본 문자 8개 × 종성 8개 조합 |
|
|
77
|
-
| `DDU_V1` | 8 | 기존 8문자 쌍 방식 (하위 호환) |
|
|
78
|
-
| `ONECHARSET` | 64 | 영문, 숫자, 일부 특수문자 |
|
|
79
|
-
|
|
80
|
-
## Custom Charset
|
|
73
|
+
### 커스텀 charset
|
|
81
74
|
|
|
82
75
|
```typescript
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
// 한글 종성 조합으로 커스텀 charset 생성
|
|
90
|
-
const hangulCoda = new Ddu64(["가", "나", "다", "라"], "뭐", {
|
|
76
|
+
import { Ddu64 } from "@ddunigma/node";
|
|
77
|
+
|
|
78
|
+
const base64 = new Ddu64("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", "=");
|
|
79
|
+
|
|
80
|
+
const hangul = new Ddu64(["가", "나", "다", "라"], "뭐", {
|
|
91
81
|
codaChar: ["", "ㄱ", "ㄲ", "ㄷ"],
|
|
92
82
|
});
|
|
93
|
-
// → 가, 각, 갂, 갇, 나, 낙, 낚, 낟, 다, 닥, 닦, 닫, 라, 락, 랔, 랗 (16문자)
|
|
94
83
|
```
|
|
95
84
|
|
|
96
|
-
|
|
97
|
-
이모지처럼 surrogate pair가 필요한 문자나 여러 문자로 이루어진 심볼은 지원하지 않습니다.
|
|
98
|
-
|
|
99
|
-
## CharsetBuilder
|
|
100
|
-
|
|
101
|
-
```typescript
|
|
102
|
-
import { CharsetBuilder, Ddu64 } from "@ddunigma/node";
|
|
85
|
+
charset 문자와 `paddingChar`는 각각 단일 UTF-16 코드 유닛이어야 합니다.
|
|
103
86
|
|
|
104
|
-
|
|
105
|
-
const { charset, padding } = CharsetBuilder.base64()
|
|
106
|
-
.excludeConfusing()
|
|
107
|
-
.limitToPowerOfTwo()
|
|
108
|
-
.buildWithPadding();
|
|
87
|
+
### 사용 가능한 옵션
|
|
109
88
|
|
|
110
|
-
|
|
89
|
+
생성자 옵션은 인스턴스의 기본값으로 적용됩니다. `encode`, `decode`, `getStats` 계열 메서드에
|
|
90
|
+
같은 옵션을 전달하면 해당 호출에서만 기본값을 덮어씁니다.
|
|
111
91
|
|
|
112
|
-
|
|
113
|
-
const chars = CharsetBuilder.fromUnicodeRange(0x4e00, 0x4e3f)
|
|
114
|
-
.shuffle(12345)
|
|
115
|
-
.limitToPowerOfTwo()
|
|
116
|
-
.build();
|
|
117
|
-
```
|
|
92
|
+
#### 공통 옵션
|
|
118
93
|
|
|
119
|
-
|
|
94
|
+
| 옵션 | 타입 | 기본값 | 용도 |
|
|
95
|
+
| ---------------------- | --------------------------------- | ----------- | ---------------------------------- |
|
|
96
|
+
| `compress` | `boolean` | `false` | 압축 사용 |
|
|
97
|
+
| `compressionAlgorithm` | `"deflate" \| "brotli"` | `"deflate"` | 압축 알고리즘 |
|
|
98
|
+
| `compressionLevel` | `number` | `6` | 압축 레벨 |
|
|
99
|
+
| `checksum` | `boolean` | `false` | CRC32 체크섬 추가 및 검증 |
|
|
100
|
+
| `checksumScope` | `"plaintext" \| "output"` | `"output"` | CRC32 계산 범위 |
|
|
101
|
+
| `chunkSize` | `number` | 미사용 | 출력 문자열 분할 크기 |
|
|
102
|
+
| `chunkSeparator` | `string` | `"\n"` | 청크 구분자 |
|
|
103
|
+
| `maxDecodedBytes` | `number` | `67108864` | 최대 디코딩 바이트 수 |
|
|
104
|
+
| `maxDecompressedBytes` | `number` | `67108864` | 최대 압축 해제 바이트 수 |
|
|
105
|
+
| `obfuscate` | `boolean` | `false` | 암호화된 출력을 한글 음절로 난독화 |
|
|
106
|
+
| `onProgress` | `(info: DduProgressInfo) => void` | 미사용 | 처리 진행률 콜백 |
|
|
120
107
|
|
|
121
|
-
|
|
122
|
-
const ddu = new Ddu64({
|
|
123
|
-
compress: true, // 압축 활성화
|
|
124
|
-
compressionAlgorithm: "deflate", // "deflate" | "brotli"
|
|
125
|
-
compressionLevel: 6, // deflate: 0-9, brotli: 0-11
|
|
126
|
-
});
|
|
108
|
+
#### 생성자 전용 옵션
|
|
127
109
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
110
|
+
| 옵션 | 타입 | 기본값 | 용도 |
|
|
111
|
+
| ------------------ | ---------------------- | ----------- | ----------------------------------- |
|
|
112
|
+
| `dduSetSymbol` | `DduSetSymbol` | `DDU` | 기본 charset 프리셋 선택 |
|
|
113
|
+
| `dduChar` | `string \| string[]` | 프리셋 사용 | 커스텀 charset |
|
|
114
|
+
| `codaChar` | `string[]` | 미사용 | 기본 문자와 조합할 한글 종성 |
|
|
115
|
+
| `paddingChar` | `string` | 프리셋 사용 | 커스텀 패딩 문자 |
|
|
116
|
+
| `requiredLength` | `number` | `64` | 필요한 charset 문자 수 |
|
|
117
|
+
| `usePowerOfTwo` | `boolean` | 자동 결정 | 2의 제곱수 charset 직접 인덱스 모드 |
|
|
118
|
+
| `useRepeatPadding` | `boolean` | 프리셋 설정 | 반복 패딩 방식 사용 |
|
|
119
|
+
| `throwOnError` | `boolean` | `true` | 잘못된 charset 설정에서 예외 발생 |
|
|
120
|
+
| `urlSafe` | `boolean` | `false` | URL-Safe 출력 변환 |
|
|
121
|
+
| `encryptionKey` | `string` | 미사용 | AES-256-GCM 암호화 키 |
|
|
122
|
+
| `keyDerivation` | `KeyDerivationOptions` | `pbkdf2` | 암호화 키 파생 방식 |
|
|
123
|
+
| `adapter` | `PlatformAdapter` | 진입점 설정 | 플랫폼 어댑터 직접 주입 |
|
|
124
|
+
| `wasmThreshold` | `number` | `16384` | WASM 사용을 시작할 입력 크기 |
|
|
131
125
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
브라우저 Brotli는 런타임 지원 여부를 feature detection으로 확인하며, Web API 특성상 `compressionLevel`은 적용되지 않을 수 있습니다.
|
|
126
|
+
`encoding`은 레거시 타입 호환을 위해서만 남아 있으며 런타임 문자열 처리는 항상 UTF-8입니다.
|
|
127
|
+
`encrypt`와 `omitFooter`는 스트림 및 내부 파이프라인 제어용이므로 일반 사용에서는 지정하지 않습니다.
|
|
135
128
|
|
|
136
|
-
|
|
129
|
+
### 압축, 암호화, 체크섬
|
|
137
130
|
|
|
138
131
|
```typescript
|
|
139
|
-
|
|
132
|
+
import { Ddu64 } from "@ddunigma/node";
|
|
133
|
+
|
|
140
134
|
const ddu = new Ddu64({
|
|
135
|
+
compress: true,
|
|
136
|
+
compressionAlgorithm: "deflate",
|
|
137
|
+
compressionLevel: 6,
|
|
141
138
|
encryptionKey: "my-secret-key",
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
const encoded = ddu.encode("secret message");
|
|
145
|
-
const decoded = ddu.decode(encoded); // 같은 키로만 복호화 가능
|
|
146
|
-
|
|
147
|
-
// PBKDF2 키 파생
|
|
148
|
-
const dduPbkdf2 = new Ddu64({
|
|
149
|
-
encryptionKey: "user password",
|
|
150
139
|
keyDerivation: {
|
|
151
140
|
algorithm: "pbkdf2",
|
|
152
|
-
salt: "
|
|
141
|
+
salt: "my-application-salt",
|
|
153
142
|
iterations: 210_000,
|
|
154
|
-
hash: "SHA-256",
|
|
155
143
|
},
|
|
144
|
+
checksum: true,
|
|
156
145
|
});
|
|
157
|
-
```
|
|
158
146
|
|
|
159
|
-
|
|
160
|
-
|
|
147
|
+
const encoded = ddu.encode("보호할 데이터");
|
|
148
|
+
const decoded = ddu.decode(encoded);
|
|
149
|
+
```
|
|
161
150
|
|
|
162
|
-
|
|
151
|
+
복호화할 때는 인코딩에 사용한 `encryptionKey`와 키 파생 설정을 동일하게 사용해야 합니다.
|
|
152
|
+
체크섬을 호출별 옵션으로 사용한 경우 디코딩에도 `checksum: true`를 지정합니다.
|
|
163
153
|
|
|
164
154
|
```typescript
|
|
165
|
-
const
|
|
166
|
-
|
|
167
|
-
const encoded = ddu.encode("data"); // CRC32 체크섬 포함
|
|
168
|
-
const decoded = ddu.decode(encoded); // 무결성 검증 후 반환
|
|
155
|
+
const encoded = ddu.encode("data", { checksum: true });
|
|
156
|
+
const decoded = ddu.decode(encoded, { checksum: true });
|
|
169
157
|
```
|
|
170
158
|
|
|
171
|
-
|
|
159
|
+
### URL-Safe와 청크 분할
|
|
172
160
|
|
|
173
161
|
```typescript
|
|
174
162
|
const ddu = new Ddu64("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", "=", {
|
|
175
163
|
urlSafe: true,
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
// +→- /→_ =→. 로 자동 변환
|
|
179
|
-
const encoded = ddu.encode("URL safe text");
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
## Chunking
|
|
183
|
-
|
|
184
|
-
```typescript
|
|
185
|
-
const ddu = new Ddu64({
|
|
186
164
|
chunkSize: 76,
|
|
187
165
|
chunkSeparator: "\n",
|
|
188
166
|
});
|
|
189
167
|
|
|
190
|
-
const encoded = ddu.encode("long data
|
|
191
|
-
|
|
168
|
+
const encoded = ddu.encode("long data");
|
|
169
|
+
const decoded = ddu.decode(encoded);
|
|
192
170
|
```
|
|
193
171
|
|
|
194
|
-
|
|
172
|
+
### 한글 난독화
|
|
195
173
|
|
|
196
174
|
```typescript
|
|
197
175
|
const ddu = new Ddu64({
|
|
198
|
-
encryptionKey: "secret",
|
|
199
|
-
obfuscate: true,
|
|
176
|
+
encryptionKey: "my-secret-key",
|
|
177
|
+
obfuscate: true,
|
|
200
178
|
});
|
|
201
179
|
|
|
202
|
-
const encoded = ddu.encode("
|
|
203
|
-
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
## Async (브라우저 호환)
|
|
207
|
-
|
|
208
|
-
```typescript
|
|
209
|
-
// 브라우저에서는 async 메서드 사용
|
|
210
|
-
import { Ddu64 } from "@ddunigma/node/browser";
|
|
211
|
-
|
|
212
|
-
const ddu = new Ddu64();
|
|
213
|
-
const encoded = await ddu.encodeAsync("browser text");
|
|
214
|
-
const decoded = await ddu.decodeAsync(encoded);
|
|
180
|
+
const encoded = ddu.encode("secret");
|
|
181
|
+
const decoded = ddu.decode(encoded);
|
|
215
182
|
```
|
|
216
183
|
|
|
217
|
-
|
|
218
|
-
코어 진입점(`@ddunigma/node/core`)은 기본 인코딩/디코딩만 포함하며, 압축/암호화가 필요하면 명시적으로 어댑터를 전달하세요.
|
|
184
|
+
난독화에는 암호화 키가 필요하며 `obfuscate: true`와 `encrypt: false`를 함께 사용할 수 없습니다.
|
|
219
185
|
|
|
220
|
-
|
|
186
|
+
### 브라우저와 Workers
|
|
221
187
|
|
|
222
188
|
```typescript
|
|
223
|
-
import { Ddu64
|
|
189
|
+
import { Ddu64 } from "@ddunigma/node/browser";
|
|
224
190
|
|
|
225
191
|
const ddu = new Ddu64({
|
|
226
192
|
compress: true,
|
|
227
|
-
|
|
193
|
+
checksum: true,
|
|
228
194
|
});
|
|
229
195
|
|
|
230
|
-
const
|
|
231
|
-
|
|
232
|
-
);
|
|
233
|
-
|
|
234
|
-
const decodedStream = encodedStream.pipeThrough(createReadableDecodeStream(ddu));
|
|
196
|
+
const encoded = await ddu.encodeAsync("browser data");
|
|
197
|
+
const decoded = await ddu.decodeAsync(encoded);
|
|
198
|
+
const bytes = await ddu.decodeToUint8ArrayAsync(encoded);
|
|
235
199
|
```
|
|
236
200
|
|
|
237
|
-
|
|
238
|
-
|
|
201
|
+
브라우저 압축은 실행 환경의 `CompressionStream`과 `DecompressionStream` 지원 여부에 따라 사용할 수
|
|
202
|
+
있습니다.
|
|
239
203
|
|
|
240
|
-
|
|
204
|
+
### 인코딩 통계
|
|
241
205
|
|
|
242
206
|
```typescript
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
await preloadWasm(); // 동기 encode/decode hot path에서 WASM을 쓰려면 먼저 완료되어야 함
|
|
246
|
-
|
|
247
|
-
const ddu = new Ddu64({
|
|
248
|
-
wasmThreshold: 4096, // 이 크기 이상일 때 WASM 사용
|
|
249
|
-
// wasmThreshold: Infinity, // WASM hot path 비활성화
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
const encoded = ddu.encode(new Uint8Array(1024 * 1024));
|
|
207
|
+
const stats = ddu.getStats("payload");
|
|
208
|
+
const asyncStats = await ddu.getStatsAsync("payload", { compress: true });
|
|
253
209
|
```
|
|
254
210
|
|
|
255
|
-
|
|
256
|
-
`preloadWasm()`이 완료되지 않았거나 WASM을 사용할 수 없으면 JavaScript로 폴백됩니다.
|
|
257
|
-
|
|
258
|
-
## Progress Callback
|
|
259
|
-
|
|
260
|
-
```typescript
|
|
261
|
-
const ddu = new Ddu64({ compress: true });
|
|
262
|
-
|
|
263
|
-
ddu.encode("data", {
|
|
264
|
-
onProgress: ({ percent, stage }) => {
|
|
265
|
-
console.log(`${stage}: ${percent}%`);
|
|
266
|
-
// stage: start → compress → encrypt → encode → done
|
|
267
|
-
},
|
|
268
|
-
});
|
|
269
|
-
```
|
|
211
|
+
브라우저에서 압축 통계를 계산할 때는 `getStatsAsync`를 사용합니다.
|
|
270
212
|
|
|
271
|
-
|
|
213
|
+
### WASM 가속
|
|
272
214
|
|
|
273
215
|
```typescript
|
|
274
|
-
|
|
275
|
-
const stats = ddu.getStats("A".repeat(1000));
|
|
276
|
-
|
|
277
|
-
// { originalSize, encodedSize, compressedSize, compressionRatio, expansionRatio, charsetSize, bitLength }
|
|
278
|
-
```
|
|
216
|
+
import { Ddu64, preloadWasm } from "@ddunigma/node";
|
|
279
217
|
|
|
280
|
-
|
|
218
|
+
await preloadWasm();
|
|
281
219
|
|
|
282
|
-
```typescript
|
|
283
220
|
const ddu = new Ddu64({
|
|
284
|
-
|
|
285
|
-
maxDecompressedBytes: 50 * 1024 * 1024, // 압축해제 최대 크기 (기본 64MB)
|
|
221
|
+
wasmThreshold: 16 * 1024,
|
|
286
222
|
});
|
|
287
223
|
```
|
|
288
224
|
|
|
289
|
-
|
|
225
|
+
`wasmThreshold: Infinity`를 지정하면 WASM 사용을 비활성화할 수 있습니다.
|
|
290
226
|
|
|
291
|
-
|
|
292
|
-
import { Ddu64, Ddu64ErrorCode, isDdu64Error } from "@ddunigma/node";
|
|
293
|
-
|
|
294
|
-
const ddu = new Ddu64({ checksum: true });
|
|
295
|
-
|
|
296
|
-
try {
|
|
297
|
-
ddu.decode(tamperedInput);
|
|
298
|
-
} catch (err) {
|
|
299
|
-
if (isDdu64Error(err) && err.code === Ddu64ErrorCode.ChecksumMismatch) {
|
|
300
|
-
// 체크섬 불일치 처리
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
인코딩, 디코딩, 압축, 암호화, 체크섬, charset, 크기 제한, adapter, stream 실패는
|
|
306
|
-
`Ddu64Error` 계열로 래핑됩니다. 모든 공개 진입점(`@ddunigma/node`,
|
|
307
|
-
`@ddunigma/node/browser`, `@ddunigma/node/core`)에서 같은 에러 타입과
|
|
308
|
-
`Ddu64ErrorCode`를 export합니다.
|
|
309
|
-
|
|
310
|
-
---
|
|
311
|
-
|
|
312
|
-
## API
|
|
313
|
-
|
|
314
|
-
### Node Entry
|
|
315
|
-
|
|
316
|
-
```typescript
|
|
317
|
-
class Ddu64 {
|
|
318
|
-
encode(data: string | Uint8Array, options?: DduOptions): string;
|
|
319
|
-
decode(encoded: string, options?: DduOptions): string;
|
|
320
|
-
decodeToUint8Array(encoded: string, options?: DduOptions): Uint8Array;
|
|
321
|
-
decodeToBuffer(encoded: string, options?: DduOptions): Buffer;
|
|
322
|
-
|
|
323
|
-
encodeAsync(data: string | Uint8Array, options?: DduOptions): Promise<string>;
|
|
324
|
-
decodeAsync(encoded: string, options?: DduOptions): Promise<string>;
|
|
325
|
-
decodeToUint8ArrayAsync(encoded: string, options?: DduOptions): Promise<Uint8Array>;
|
|
326
|
-
decodeToBufferAsync(encoded: string, options?: DduOptions): Promise<Buffer>;
|
|
327
|
-
|
|
328
|
-
getStats(data: string | Uint8Array, options?: DduOptions): DduEncodeStats;
|
|
329
|
-
getCharSetInfo(): CharSetInfo;
|
|
330
|
-
}
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
### Browser Entry
|
|
227
|
+
### 진입점
|
|
334
228
|
|
|
335
229
|
```typescript
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
decodeToUint8Array(encoded: string, options?: DduOptions): Uint8Array;
|
|
340
|
-
|
|
341
|
-
encodeAsync(data: string | Uint8Array, options?: DduOptions): Promise<string>;
|
|
342
|
-
decodeAsync(encoded: string, options?: DduOptions): Promise<string>;
|
|
343
|
-
decodeToUint8ArrayAsync(encoded: string, options?: DduOptions): Promise<Uint8Array>;
|
|
344
|
-
|
|
345
|
-
getStats(data: string | Uint8Array, options?: DduOptions): DduEncodeStats;
|
|
346
|
-
getCharSetInfo(): CharSetInfo;
|
|
347
|
-
}
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
브라우저 진입점(`@ddunigma/node/browser`)은 `Buffer` API를 노출하지 않습니다.
|
|
230
|
+
import { Ddu64 as NodeDdu64 } from "@ddunigma/node";
|
|
231
|
+
import { Ddu64 as BrowserDdu64 } from "@ddunigma/node/browser";
|
|
232
|
+
import { Ddu64 as CoreDdu64 } from "@ddunigma/node/core";
|
|
351
233
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
class Ddu64 {
|
|
356
|
-
encode(data: string | Uint8Array, options?: DduOptions): string;
|
|
357
|
-
decode(encoded: string, options?: DduOptions): string;
|
|
358
|
-
decodeToUint8Array(encoded: string, options?: DduOptions): Uint8Array;
|
|
359
|
-
|
|
360
|
-
encodeAsync(data: string | Uint8Array, options?: DduOptions): Promise<string>;
|
|
361
|
-
decodeAsync(encoded: string, options?: DduOptions): Promise<string>;
|
|
362
|
-
decodeToUint8ArrayAsync(encoded: string, options?: DduOptions): Promise<Uint8Array>;
|
|
363
|
-
|
|
364
|
-
getStats(data: string | Uint8Array, options?: DduOptions): DduEncodeStats;
|
|
365
|
-
getCharSetInfo(): CharSetInfo;
|
|
366
|
-
}
|
|
234
|
+
const nodeEncoder = new NodeDdu64();
|
|
235
|
+
const browserEncoder = new BrowserDdu64();
|
|
236
|
+
const coreEncoder = new CoreDdu64();
|
|
367
237
|
```
|
|
368
|
-
|
|
369
|
-
코어 진입점(`@ddunigma/node/core`)은 플랫폼 어댑터를 자동 로드하지 않습니다.
|
|
370
|
-
압축 또는 암호화가 필요한 async 호출에는 `adapter`를 명시적으로 전달하세요.
|
|
371
|
-
|
|
372
|
-
## Constructor Options
|
|
373
|
-
|
|
374
|
-
```typescript
|
|
375
|
-
// 옵션만 전달 (권장)
|
|
376
|
-
new Ddu64(options?);
|
|
377
|
-
|
|
378
|
-
// charset 직접 지정
|
|
379
|
-
new Ddu64(dduChar, paddingChar, options?);
|
|
380
|
-
```
|
|
381
|
-
|
|
382
|
-
| Option | Type | Default | 설명 |
|
|
383
|
-
| ---------------------- | ----------------------- | ----------- | --------------------- |
|
|
384
|
-
| `dduSetSymbol` | `DduSetSymbol` | `DDU` | 프리셋 선택 |
|
|
385
|
-
| `dduChar` | `string \| string[]` | - | 커스텀 charset |
|
|
386
|
-
| `paddingChar` | `string` | - | 패딩 문자 |
|
|
387
|
-
| `codaChar` | `string[]` | - | 종성 조합 문자 |
|
|
388
|
-
| `compress` | `boolean` | `false` | 압축 활성화 |
|
|
389
|
-
| `compressionAlgorithm` | `"deflate" \| "brotli"` | `"deflate"` | 압축 알고리즘 |
|
|
390
|
-
| `compressionLevel` | `number` | `6` | 압축 레벨 |
|
|
391
|
-
| `encryptionKey` | `string` | - | AES-256-GCM 암호화 키 |
|
|
392
|
-
| `keyDerivation` | `KeyDerivationOptions` | `sha256` | 키 파생 방식 |
|
|
393
|
-
| `checksum` | `boolean` | `false` | CRC32 체크섬 |
|
|
394
|
-
| `urlSafe` | `boolean` | `false` | URL-Safe 변환 |
|
|
395
|
-
| `obfuscate` | `boolean` | `false` | 한글 난독화 |
|
|
396
|
-
| `chunkSize` | `number` | - | 청크 분할 크기 |
|
|
397
|
-
| `chunkSeparator` | `string` | `"\n"` | 청크 구분자 |
|
|
398
|
-
| `maxDecodedBytes` | `number` | `67108864` | 디코딩 크기 제한 |
|
|
399
|
-
| `maxDecompressedBytes` | `number` | `67108864` | 압축해제 크기 제한 |
|
|
400
|
-
| `wasmThreshold` | `number` | `4096` | WASM 사용 임계값 (`Infinity`면 비활성화) |
|
|
401
|
-
| `throwOnError` | `boolean` | `false` | 초기화 에러 시 throw |
|
|
402
|
-
|
|
403
|
-
## Per-Call Options
|
|
404
|
-
|
|
405
|
-
`encode`, `decode`, `encodeAsync`, `decodeAsync` 등에서 호출별로 오버라이드 가능:
|
|
406
|
-
|
|
407
|
-
| Option | Type | 설명 |
|
|
408
|
-
| ---------------------- | ----------------------- | ------------------ |
|
|
409
|
-
| `compress` | `boolean` | 압축 사용 여부 |
|
|
410
|
-
| `compressionAlgorithm` | `"deflate" \| "brotli"` | 압축 알고리즘 |
|
|
411
|
-
| `compressionLevel` | `number` | 압축 레벨 |
|
|
412
|
-
| `encrypt` | `boolean` | 암호화 사용 여부 |
|
|
413
|
-
| `checksum` | `boolean` | 체크섬 사용 여부 |
|
|
414
|
-
| `obfuscate` | `boolean` | 난독화 사용 여부 |
|
|
415
|
-
| `chunkSize` | `number` | 청크 크기 |
|
|
416
|
-
| `maxDecodedBytes` | `number` | 디코딩 크기 제한 |
|
|
417
|
-
| `maxDecompressedBytes` | `number` | 압축해제 크기 제한 |
|
|
418
|
-
| `onProgress` | `(info) => void` | 진행률 콜백 |
|
|
419
|
-
|
|
420
|
-
## Entry Points
|
|
421
|
-
|
|
422
|
-
| Runtime / Target | Import Path | 용도 |
|
|
423
|
-
| ------------------------------- | ----------------------------------- | ------------------------------------- |
|
|
424
|
-
| Node.js server/CLI | `@ddunigma/node` | Node.js 전체 기능 (동기+비동기) |
|
|
425
|
-
| Browser / Vite / webpack | `@ddunigma/node` 또는 `/browser` | 브라우저 최적화 (BrowserAdapter 기본) |
|
|
426
|
-
| Cloudflare Workers / Deno / Bun | `@ddunigma/node` 또는 `/browser` | Node.js 내장 모듈 없는 Web API 경로 |
|
|
427
|
-
| Adapter 직접 주입 최소 번들 | `@ddunigma/node/core` | 최소 코어 (인코딩/디코딩만) |
|
|
428
|
-
|
|
429
|
-
루트 진입점은 v4부터 `browser`/`worker`/`workerd`/`deno`/`bun`/`node` 조건을 가진 conditional export입니다. Node.js에서는 기존처럼 `Buffer` API와 NodeAdapter를 노출하고, 브라우저 및 Workers 계열 번들러에서는 Node.js 내장 모듈 없는 BrowserAdapter 경로로 해석됩니다. 런타임 조건을 알 수 없는 ESM 환경의 기본 fallback도 browser 번들을 사용합니다.
|
|
430
|
-
Node.js 런타임에서는 `node` 조건이 `index.js`/`index.cjs`를 선택하므로 기본 import로 NodeAdapter와 `decodeToBuffer()`를 사용할 수 있습니다.
|
|
431
|
-
|
|
432
|
-
## Build & Test
|
|
433
|
-
|
|
434
|
-
```bash
|
|
435
|
-
pnpm test
|
|
436
|
-
pnpm typecheck
|
|
437
|
-
pnpm build
|
|
438
|
-
pnpm lint
|
|
439
|
-
pnpm pack:check
|
|
440
|
-
pnpm bench
|
|
441
|
-
```
|
|
442
|
-
|
|
443
|
-
## License
|
|
444
|
-
|
|
445
|
-
BSD-2-Clause
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkAMOZHHMB_cjs=require('./chunk-AMOZHHMB.cjs');require('./chunk-5NSHXTMN.cjs');Object.defineProperty(exports,"BrowserAdapter",{enumerable:true,get:function(){return chunkAMOZHHMB_cjs.a}});//# sourceMappingURL=BrowserAdapter-PB4J6FHX.cjs.map
|
|
2
|
+
//# sourceMappingURL=BrowserAdapter-PB4J6FHX.cjs.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkHZJ7PU7X_cjs=require('./chunk-HZJ7PU7X.cjs');require('./chunk-5NSHXTMN.cjs');Object.defineProperty(exports,"NodeAdapter",{enumerable:true,get:function(){return chunkHZJ7PU7X_cjs.a}});//# sourceMappingURL=NodeAdapter-EQ73FGEJ.cjs.map
|
|
2
|
+
//# sourceMappingURL=NodeAdapter-EQ73FGEJ.cjs.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { P as PlatformAdapter, y as KeyDerivationOptions, D as Ddu64Core, u as DduOptions, O as ObfuscationLayer } from './errors-
|
|
1
|
+
import { P as PlatformAdapter, y as KeyDerivationOptions, D as Ddu64Core, u as DduOptions, O as ObfuscationLayer } from './errors-DNICpo4L.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* 브라우저 플랫폼 어댑터 구현.
|
|
@@ -191,13 +191,31 @@ declare class HangulObfuscationLayer implements ObfuscationLayer {
|
|
|
191
191
|
/**
|
|
192
192
|
* 주어진 charset 설정에 대한 ObfuscationLayer를 생성합니다.
|
|
193
193
|
*
|
|
194
|
-
*
|
|
195
|
-
*
|
|
194
|
+
* @deprecated 인코더 출력과 호환되지 않습니다(charset/패딩만 포함, footer 마커·숫자 미포함).
|
|
195
|
+
* 인코더 출력을 deobfuscate하려면 `createEncoderObfuscationLayer`를, 일반 난독화는 `Ddu64`의
|
|
196
|
+
* `obfuscate` 옵션을 사용하세요. 이 함수는 다음 메이저에서 제거될 수 있습니다.
|
|
197
|
+
*
|
|
198
|
+
* charset 문자와 패딩 문자로부터 알파벳을 구성한 후 한글 난독화 레이어를 생성합니다.
|
|
196
199
|
*
|
|
197
200
|
* @param charSet - 인코딩에 사용되는 charset 문자
|
|
198
201
|
* @param paddingChar - 패딩 문자
|
|
199
202
|
* @returns ObfuscationLayer 인스턴스
|
|
200
203
|
*/
|
|
201
204
|
declare function createObfuscationLayer(charSet: string[], paddingChar: string): ObfuscationLayer;
|
|
205
|
+
/**
|
|
206
|
+
* Ddu64 인코더 출력과 호환되는 ObfuscationLayer를 생성합니다.
|
|
207
|
+
*
|
|
208
|
+
* `createObfuscationLayer`와 달리 charset/패딩 외에 footer 마커
|
|
209
|
+
* (ELYSIA/GRISEO/ENC/V3/V4)와 숫자(0-9)까지 알파벳에 포함하므로, 압축/암호화/파이프라인
|
|
210
|
+
* 마커가 붙은 실제 인코더 출력도 안전하게 deobfuscate할 수 있습니다.
|
|
211
|
+
*
|
|
212
|
+
* 일반적으로는 `Ddu64`의 `obfuscate` 옵션을 쓰는 것으로 충분하며, 이 헬퍼는 인코더와
|
|
213
|
+
* 동일한 난독화 매핑을 외부에서 재현해야 할 때 사용합니다.
|
|
214
|
+
*
|
|
215
|
+
* @param charSet - 인코딩에 사용되는 charset 문자
|
|
216
|
+
* @param paddingChar - 패딩 문자
|
|
217
|
+
* @returns 인코더 호환 ObfuscationLayer 인스턴스
|
|
218
|
+
*/
|
|
219
|
+
declare function createEncoderObfuscationLayer(charSet: string[], paddingChar: string): ObfuscationLayer;
|
|
202
220
|
|
|
203
|
-
export { BrowserAdapter as B, HangulObfuscationLayer as H,
|
|
221
|
+
export { BrowserAdapter as B, HangulObfuscationLayer as H, createObfuscationLayer as a, createReadableDecodeStream as b, createEncoderObfuscationLayer as c, createReadableEncodeStream as d, detectRuntime as e };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { P as PlatformAdapter, y as KeyDerivationOptions, D as Ddu64Core, u as DduOptions, O as ObfuscationLayer } from './errors-
|
|
1
|
+
import { P as PlatformAdapter, y as KeyDerivationOptions, D as Ddu64Core, u as DduOptions, O as ObfuscationLayer } from './errors-DNICpo4L.cjs';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* 브라우저 플랫폼 어댑터 구현.
|
|
@@ -191,13 +191,31 @@ declare class HangulObfuscationLayer implements ObfuscationLayer {
|
|
|
191
191
|
/**
|
|
192
192
|
* 주어진 charset 설정에 대한 ObfuscationLayer를 생성합니다.
|
|
193
193
|
*
|
|
194
|
-
*
|
|
195
|
-
*
|
|
194
|
+
* @deprecated 인코더 출력과 호환되지 않습니다(charset/패딩만 포함, footer 마커·숫자 미포함).
|
|
195
|
+
* 인코더 출력을 deobfuscate하려면 `createEncoderObfuscationLayer`를, 일반 난독화는 `Ddu64`의
|
|
196
|
+
* `obfuscate` 옵션을 사용하세요. 이 함수는 다음 메이저에서 제거될 수 있습니다.
|
|
197
|
+
*
|
|
198
|
+
* charset 문자와 패딩 문자로부터 알파벳을 구성한 후 한글 난독화 레이어를 생성합니다.
|
|
196
199
|
*
|
|
197
200
|
* @param charSet - 인코딩에 사용되는 charset 문자
|
|
198
201
|
* @param paddingChar - 패딩 문자
|
|
199
202
|
* @returns ObfuscationLayer 인스턴스
|
|
200
203
|
*/
|
|
201
204
|
declare function createObfuscationLayer(charSet: string[], paddingChar: string): ObfuscationLayer;
|
|
205
|
+
/**
|
|
206
|
+
* Ddu64 인코더 출력과 호환되는 ObfuscationLayer를 생성합니다.
|
|
207
|
+
*
|
|
208
|
+
* `createObfuscationLayer`와 달리 charset/패딩 외에 footer 마커
|
|
209
|
+
* (ELYSIA/GRISEO/ENC/V3/V4)와 숫자(0-9)까지 알파벳에 포함하므로, 압축/암호화/파이프라인
|
|
210
|
+
* 마커가 붙은 실제 인코더 출력도 안전하게 deobfuscate할 수 있습니다.
|
|
211
|
+
*
|
|
212
|
+
* 일반적으로는 `Ddu64`의 `obfuscate` 옵션을 쓰는 것으로 충분하며, 이 헬퍼는 인코더와
|
|
213
|
+
* 동일한 난독화 매핑을 외부에서 재현해야 할 때 사용합니다.
|
|
214
|
+
*
|
|
215
|
+
* @param charSet - 인코딩에 사용되는 charset 문자
|
|
216
|
+
* @param paddingChar - 패딩 문자
|
|
217
|
+
* @returns 인코더 호환 ObfuscationLayer 인스턴스
|
|
218
|
+
*/
|
|
219
|
+
declare function createEncoderObfuscationLayer(charSet: string[], paddingChar: string): ObfuscationLayer;
|
|
202
220
|
|
|
203
|
-
export { BrowserAdapter as B, HangulObfuscationLayer as H,
|
|
221
|
+
export { BrowserAdapter as B, HangulObfuscationLayer as H, createObfuscationLayer as a, createReadableDecodeStream as b, createEncoderObfuscationLayer as c, createReadableEncodeStream as d, detectRuntime as e };
|
package/dist/browser.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkWCXD5LRF_cjs=require('./chunk-WCXD5LRF.cjs'),chunkUMA4JEN4_cjs=require('./chunk-UMA4JEN4.cjs'),chunkAMOZHHMB_cjs=require('./chunk-AMOZHHMB.cjs');require('./chunk-5NSHXTMN.cjs');var e=class extends chunkUMA4JEN4_cjs.C{constructor(n,s,a){let r=chunkUMA4JEN4_cjs.B(n,s,a),u={...r.dduOptions,...r.dduChar!==void 0?{dduChar:r.dduChar}:{},...r.paddingChar!==void 0?{paddingChar:r.paddingChar}:{},adapter:r.dduOptions?.adapter??new chunkAMOZHHMB_cjs.a};super(u);}};async function F(){return new chunkAMOZHHMB_cjs.a}Object.defineProperty(exports,"createReadableDecodeStream",{enumerable:true,get:function(){return chunkWCXD5LRF_cjs.c}});Object.defineProperty(exports,"createReadableEncodeStream",{enumerable:true,get:function(){return chunkWCXD5LRF_cjs.b}});Object.defineProperty(exports,"detectRuntime",{enumerable:true,get:function(){return chunkWCXD5LRF_cjs.a}});Object.defineProperty(exports,"CharsetBuilder",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.D}});Object.defineProperty(exports,"Ddu64AdapterError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.w}});Object.defineProperty(exports,"Ddu64CharsetError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.u}});Object.defineProperty(exports,"Ddu64ChecksumError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.t}});Object.defineProperty(exports,"Ddu64CompressionError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.p}});Object.defineProperty(exports,"Ddu64Core",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.C}});Object.defineProperty(exports,"Ddu64DecodeError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.o}});Object.defineProperty(exports,"Ddu64DecompressionError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.q}});Object.defineProperty(exports,"Ddu64DecryptionError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.s}});Object.defineProperty(exports,"Ddu64EncodeError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.n}});Object.defineProperty(exports,"Ddu64EncryptionError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.r}});Object.defineProperty(exports,"Ddu64Error",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.m}});Object.defineProperty(exports,"Ddu64ErrorCode",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.l}});Object.defineProperty(exports,"Ddu64LimitError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.v}});Object.defineProperty(exports,"Ddu64ObfuscationError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.x}});Object.defineProperty(exports,"Ddu64StreamError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.y}});Object.defineProperty(exports,"DduSetSymbol",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.a}});Object.defineProperty(exports,"HangulObfuscationLayer",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.e}});Object.defineProperty(exports,"createEncoderObfuscationLayer",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.g}});Object.defineProperty(exports,"createObfuscationLayer",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.f}});Object.defineProperty(exports,"getWasmCodec",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.i}});Object.defineProperty(exports,"getWasmCodecSync",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.j}});Object.defineProperty(exports,"isDdu64Error",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.z}});Object.defineProperty(exports,"preloadWasm",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.h}});Object.defineProperty(exports,"BrowserAdapter",{enumerable:true,get:function(){return chunkAMOZHHMB_cjs.a}});exports.Ddu64=e;exports.Ddu64Browser=e;exports.getAdapter=F;//# sourceMappingURL=browser.cjs.map
|
|
2
2
|
//# sourceMappingURL=browser.cjs.map
|
package/dist/browser.d.cts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { B as BrowserAdapter } from './ObfuscationLayer-
|
|
2
|
-
export { H as HangulObfuscationLayer, c as
|
|
3
|
-
import { D as Ddu64Core, a as DduConstructorOptions } from './errors-
|
|
4
|
-
export { C as CharSetConfig, b as CharSetInfo, c as CharsetBuilder, d as Ddu64AdapterError, e as Ddu64CharsetError, f as Ddu64ChecksumError, g as Ddu64CompressionError, h as Ddu64DecodeError, i as Ddu64DecompressionError, j as Ddu64DecryptionError, k as Ddu64EncodeError, l as Ddu64EncryptionError, m as Ddu64Error, n as Ddu64ErrorCode, o as Ddu64ErrorOptions, p as Ddu64LimitError, q as Ddu64ObfuscationError, r as Ddu64Operation, s as Ddu64StreamError, t as DduEncodeStats, u as DduOptions, v as DduProgressInfo, w as DduSetSymbol, x as DduTextEncoding, E as EncodingProfile, K as KeyDerivationAlgorithm, y as KeyDerivationOptions, O as ObfuscationLayer, P as PlatformAdapter, W as WasmCodec, z as isDdu64Error } from './errors-
|
|
1
|
+
import { B as BrowserAdapter } from './ObfuscationLayer-BgL73E5F.cjs';
|
|
2
|
+
export { H as HangulObfuscationLayer, c as createEncoderObfuscationLayer, a as createObfuscationLayer, b as createReadableDecodeStream, d as createReadableEncodeStream, e as detectRuntime } from './ObfuscationLayer-BgL73E5F.cjs';
|
|
3
|
+
import { D as Ddu64Core, a as DduConstructorOptions } from './errors-DNICpo4L.cjs';
|
|
4
|
+
export { C as CharSetConfig, b as CharSetInfo, c as CharsetBuilder, d as Ddu64AdapterError, e as Ddu64CharsetError, f as Ddu64ChecksumError, g as Ddu64CompressionError, h as Ddu64DecodeError, i as Ddu64DecompressionError, j as Ddu64DecryptionError, k as Ddu64EncodeError, l as Ddu64EncryptionError, m as Ddu64Error, n as Ddu64ErrorCode, o as Ddu64ErrorOptions, p as Ddu64LimitError, q as Ddu64ObfuscationError, r as Ddu64Operation, s as Ddu64StreamError, t as DduEncodeStats, u as DduOptions, v as DduProgressInfo, w as DduSetSymbol, x as DduTextEncoding, E as EncodingProfile, K as KeyDerivationAlgorithm, y as KeyDerivationOptions, O as ObfuscationLayer, P as PlatformAdapter, W as WasmCodec, z as isDdu64Error } from './errors-DNICpo4L.cjs';
|
|
5
5
|
export { getWasmCodec, getWasmCodecSync, preloadWasm } from './core.cjs';
|
|
6
6
|
|
|
7
7
|
/**
|