@ddunigma/node 2.1.1 → 2.2.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 +101 -11
- package/dist/DduStream-KO75MEEM.js +2 -0
- package/dist/chunk-CZMUPXSK.js +5 -0
- package/dist/index.cjs +8 -0
- package/dist/index.d.cts +813 -0
- package/dist/index.d.ts +813 -0
- package/dist/index.js +5 -0
- package/package.json +33 -15
- package/dist/cjs/base/BaseDdu.d.ts +0 -53
- package/dist/cjs/base/BaseDdu.js +0 -29
- package/dist/cjs/base/index.d.ts +0 -1
- package/dist/cjs/base/index.js +0 -5
- package/dist/cjs/charSets/index.d.ts +0 -18
- package/dist/cjs/charSets/index.js +0 -4385
- package/dist/cjs/encoders/Ddu64.d.ts +0 -302
- package/dist/cjs/encoders/Ddu64.js +0 -1308
- package/dist/cjs/encoders/index.d.ts +0 -1
- package/dist/cjs/encoders/index.js +0 -5
- package/dist/cjs/index.d.ts +0 -5
- package/dist/cjs/index.js +0 -16
- package/dist/cjs/package.json +0 -3
- package/dist/cjs/types/DduDefaultTypes.d.ts +0 -3
- package/dist/cjs/types/DduDefaultTypes.js +0 -17
- package/dist/cjs/types/DduEnums.d.ts +0 -6
- package/dist/cjs/types/DduEnums.js +0 -10
- package/dist/cjs/types/DduInterface.d.ts +0 -91
- package/dist/cjs/types/DduInterface.js +0 -2
- package/dist/cjs/types/index.d.ts +0 -3
- package/dist/cjs/types/index.js +0 -19
- package/dist/cjs/utils/CharsetBuilder.d.ts +0 -129
- package/dist/cjs/utils/CharsetBuilder.js +0 -246
- package/dist/cjs/utils/DduPipeline.d.ts +0 -114
- package/dist/cjs/utils/DduPipeline.js +0 -229
- package/dist/cjs/utils/DduStream.d.ts +0 -64
- package/dist/cjs/utils/DduStream.js +0 -221
- package/dist/cjs/utils/crypto.d.ts +0 -30
- package/dist/cjs/utils/crypto.js +0 -84
- package/dist/cjs/utils/index.d.ts +0 -3
- package/dist/cjs/utils/index.js +0 -12
- package/dist/mjs/base/BaseDdu.d.ts +0 -53
- package/dist/mjs/base/BaseDdu.js +0 -23
- package/dist/mjs/base/index.d.ts +0 -1
- package/dist/mjs/base/index.js +0 -1
- package/dist/mjs/charSets/index.d.ts +0 -18
- package/dist/mjs/charSets/index.js +0 -4380
- package/dist/mjs/encoders/Ddu64.d.ts +0 -302
- package/dist/mjs/encoders/Ddu64.js +0 -1343
- package/dist/mjs/encoders/index.d.ts +0 -1
- package/dist/mjs/encoders/index.js +0 -1
- package/dist/mjs/index.d.ts +0 -5
- package/dist/mjs/index.js +0 -4
- package/dist/mjs/package.json +0 -3
- package/dist/mjs/types/DduDefaultTypes.d.ts +0 -3
- package/dist/mjs/types/DduDefaultTypes.js +0 -14
- package/dist/mjs/types/DduEnums.d.ts +0 -6
- package/dist/mjs/types/DduEnums.js +0 -7
- package/dist/mjs/types/DduInterface.d.ts +0 -91
- package/dist/mjs/types/DduInterface.js +0 -1
- package/dist/mjs/types/index.d.ts +0 -3
- package/dist/mjs/types/index.js +0 -3
- package/dist/mjs/utils/CharsetBuilder.d.ts +0 -129
- package/dist/mjs/utils/CharsetBuilder.js +0 -241
- package/dist/mjs/utils/DduPipeline.d.ts +0 -114
- package/dist/mjs/utils/DduPipeline.js +0 -223
- package/dist/mjs/utils/DduStream.d.ts +0 -64
- package/dist/mjs/utils/DduStream.js +0 -225
- package/dist/mjs/utils/crypto.d.ts +0 -30
- package/dist/mjs/utils/crypto.js +0 -78
- package/dist/mjs/utils/index.d.ts +0 -3
- package/dist/mjs/utils/index.js +0 -3
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { Ddu64 } from "./Ddu64";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { Ddu64 } from "./Ddu64.js";
|
package/dist/mjs/index.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export type { DduOptions, DduConstructorOptions, DduEncodeStats, DduProgressInfo, CharSetConfig, } from "./types";
|
|
2
|
-
export { DduSetSymbol } from "./types";
|
|
3
|
-
export { BaseDdu } from "./base";
|
|
4
|
-
export { Ddu64 } from "./encoders";
|
|
5
|
-
export { CharsetBuilder, DduPipeline, DduEncodeStream, DduDecodeStream, createEncodeStream, createDecodeStream, } from "./utils";
|
package/dist/mjs/index.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export { DduSetSymbol } from "./types/index.js";
|
|
2
|
-
export { BaseDdu } from "./base/index.js";
|
|
3
|
-
export { Ddu64 } from "./encoders/index.js";
|
|
4
|
-
export { CharsetBuilder, DduPipeline, DduEncodeStream, DduDecodeStream, createEncodeStream, createDecodeStream, } from "./utils/index.js";
|
package/dist/mjs/package.json
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { DduSetSymbol } from "./DduEnums.js";
|
|
2
|
-
const dduDefaultConstructorOptions = {
|
|
3
|
-
/** 기본 charset: DDU (한글 + 특수문자) */
|
|
4
|
-
dduSetSymbol: DduSetSymbol.DDU,
|
|
5
|
-
/** 2의 제곱수 강제 */
|
|
6
|
-
usePowerOfTwo: true,
|
|
7
|
-
/** 필요 문자 수: 8개 */
|
|
8
|
-
requiredLength: 8,
|
|
9
|
-
/** 비트 길이: 3 (2^3 = 8) */
|
|
10
|
-
bitLength: 3,
|
|
11
|
-
/** 빌드 에러 시 throw하지 않음 */
|
|
12
|
-
useBuildErrorReturn: false,
|
|
13
|
-
};
|
|
14
|
-
export { dduDefaultConstructorOptions };
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { DduSetSymbol } from "./DduEnums";
|
|
2
|
-
export interface CharSetConfig {
|
|
3
|
-
/** charset 식별 심볼 */
|
|
4
|
-
symbol: DduSetSymbol;
|
|
5
|
-
/** 인코딩에 사용할 문자 배열 */
|
|
6
|
-
charSet: string[];
|
|
7
|
-
/** 최대 필요 문자 수 */
|
|
8
|
-
maxRequiredLength: number;
|
|
9
|
-
/** 비트 길이 (log2) */
|
|
10
|
-
bitLength: number;
|
|
11
|
-
/** 패딩 문자 */
|
|
12
|
-
paddingChar: string;
|
|
13
|
-
}
|
|
14
|
-
/** 진행률 콜백 정보 */
|
|
15
|
-
export interface DduProgressInfo {
|
|
16
|
-
/** 현재 처리된 바이트 수 (근사값) */
|
|
17
|
-
processedBytes: number;
|
|
18
|
-
/** 전체 바이트 수 */
|
|
19
|
-
totalBytes: number;
|
|
20
|
-
/** 진행률 (0-100, 단계별 근사값) */
|
|
21
|
-
percent: number;
|
|
22
|
-
/** 현재 처리 단계 */
|
|
23
|
-
stage?: "start" | "encrypt" | "compress" | "encode" | "decode" | "decompress" | "checksum" | "decrypt" | "done";
|
|
24
|
-
}
|
|
25
|
-
/** 인코딩 통계 정보 */
|
|
26
|
-
export interface DduEncodeStats {
|
|
27
|
-
/** 원본 데이터 크기 (바이트) */
|
|
28
|
-
originalSize: number;
|
|
29
|
-
/** 인코딩된 문자열 길이 */
|
|
30
|
-
encodedSize: number;
|
|
31
|
-
/** 압축된 크기 (압축 사용시) */
|
|
32
|
-
compressedSize?: number;
|
|
33
|
-
/** 압축률 (0-1, 낮을수록 효율적) */
|
|
34
|
-
compressionRatio?: number;
|
|
35
|
-
/** 인코딩 확장 비율 */
|
|
36
|
-
expansionRatio: number;
|
|
37
|
-
/** 사용된 charset 크기 */
|
|
38
|
-
charsetSize: number;
|
|
39
|
-
/** 비트 길이 */
|
|
40
|
-
bitLength: number;
|
|
41
|
-
}
|
|
42
|
-
export interface DduOptions {
|
|
43
|
-
/** 압축 사용 여부 (zlib deflate) */
|
|
44
|
-
compress?: boolean;
|
|
45
|
-
/** 압축 레벨 (1~9, 기본값: 6). 1=빠름/낮은압축, 9=느림/최대압축 */
|
|
46
|
-
compressionLevel?: number;
|
|
47
|
-
/** 최대 디코딩 바이트 수 (Zip Bomb 방어) */
|
|
48
|
-
maxDecodedBytes?: number;
|
|
49
|
-
/** 최대 압축해제 바이트 수 (Zip Bomb 방어) */
|
|
50
|
-
maxDecompressedBytes?: number;
|
|
51
|
-
/** 체크섬 추가 여부 (CRC32) */
|
|
52
|
-
checksum?: boolean;
|
|
53
|
-
/** 청크 분할 크기 */
|
|
54
|
-
chunkSize?: number;
|
|
55
|
-
/** 청크 구분자 (기본값: '\n') */
|
|
56
|
-
chunkSeparator?: string;
|
|
57
|
-
/** 진행률 콜백 */
|
|
58
|
-
onProgress?: (info: DduProgressInfo) => void;
|
|
59
|
-
}
|
|
60
|
-
export interface DduConstructorOptions extends DduOptions {
|
|
61
|
-
/** 미리 정의된 charset 심볼 */
|
|
62
|
-
dduSetSymbol?: DduSetSymbol;
|
|
63
|
-
/** 커스텀 charset 문자 배열 또는 문자열 */
|
|
64
|
-
dduChar?: string[] | string;
|
|
65
|
-
/** 패딩 문자 */
|
|
66
|
-
paddingChar?: string;
|
|
67
|
-
/** 필요 문자 수 */
|
|
68
|
-
requiredLength?: number;
|
|
69
|
-
/** 비트 길이 */
|
|
70
|
-
bitLength?: number;
|
|
71
|
-
/** 2의 제곱수 강제 여부 */
|
|
72
|
-
usePowerOfTwo?: boolean;
|
|
73
|
-
/**
|
|
74
|
-
* true이면 초기화 오류 시 throw합니다. false이면 fallback charset으로 대체합니다.
|
|
75
|
-
* @default false
|
|
76
|
-
* @deprecated throwOnError를 사용하세요. 이 옵션은 하위 호환성을 위해 유지됩니다.
|
|
77
|
-
*/
|
|
78
|
-
useBuildErrorReturn?: boolean;
|
|
79
|
-
/**
|
|
80
|
-
* true이면 초기화 오류 시 throw합니다. false이면 fallback charset으로 대체합니다.
|
|
81
|
-
* useBuildErrorReturn과 동일한 동작이며, 둘 다 지정 시 throwOnError가 우선합니다.
|
|
82
|
-
* @default false
|
|
83
|
-
*/
|
|
84
|
-
throwOnError?: boolean;
|
|
85
|
-
/** Buffer 인코딩 방식 */
|
|
86
|
-
encoding?: BufferEncoding;
|
|
87
|
-
/** URL-Safe 모드 (특수문자를 URL 안전 문자로 변환) */
|
|
88
|
-
urlSafe?: boolean;
|
|
89
|
-
/** 암호화 키 (AES-256-GCM) */
|
|
90
|
-
encryptionKey?: string;
|
|
91
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/mjs/types/index.js
DELETED
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 커스텀 Charset을 쉽게 생성하기 위한 빌더 클래스
|
|
3
|
-
*
|
|
4
|
-
* @example
|
|
5
|
-
* const chars = CharsetBuilder
|
|
6
|
-
* .fromUnicodeRange(0x4E00, 0x4E3F)
|
|
7
|
-
* .excludeConfusing()
|
|
8
|
-
* .shuffle()
|
|
9
|
-
* .build();
|
|
10
|
-
*/
|
|
11
|
-
export declare class CharsetBuilder {
|
|
12
|
-
private chars;
|
|
13
|
-
private constructor();
|
|
14
|
-
/**
|
|
15
|
-
* 빈 빌더를 생성합니다.
|
|
16
|
-
*/
|
|
17
|
-
static create(): CharsetBuilder;
|
|
18
|
-
/**
|
|
19
|
-
* 유니코드 범위에서 문자들을 추가합니다.
|
|
20
|
-
*
|
|
21
|
-
* @param start - 시작 유니코드 코드포인트
|
|
22
|
-
* @param end - 끝 유니코드 코드포인트 (포함)
|
|
23
|
-
*/
|
|
24
|
-
static fromUnicodeRange(start: number, end: number): CharsetBuilder;
|
|
25
|
-
/**
|
|
26
|
-
* 문자열에서 문자들을 추가합니다.
|
|
27
|
-
*
|
|
28
|
-
* @param chars - 문자열 또는 문자 배열
|
|
29
|
-
*/
|
|
30
|
-
static fromString(chars: string | string[]): CharsetBuilder;
|
|
31
|
-
/**
|
|
32
|
-
* Base64 표준 문자셋으로 시작합니다.
|
|
33
|
-
*/
|
|
34
|
-
static base64(): CharsetBuilder;
|
|
35
|
-
/**
|
|
36
|
-
* Base32 표준 문자셋으로 시작합니다.
|
|
37
|
-
*/
|
|
38
|
-
static base32(): CharsetBuilder;
|
|
39
|
-
/**
|
|
40
|
-
* 영문 대문자만 포함합니다.
|
|
41
|
-
*/
|
|
42
|
-
static uppercase(): CharsetBuilder;
|
|
43
|
-
/**
|
|
44
|
-
* 영문 소문자만 포함합니다.
|
|
45
|
-
*/
|
|
46
|
-
static lowercase(): CharsetBuilder;
|
|
47
|
-
/**
|
|
48
|
-
* 숫자만 포함합니다.
|
|
49
|
-
*/
|
|
50
|
-
static digits(): CharsetBuilder;
|
|
51
|
-
/**
|
|
52
|
-
* 한글 자모를 포함합니다.
|
|
53
|
-
*/
|
|
54
|
-
static hangulJamo(): CharsetBuilder;
|
|
55
|
-
/**
|
|
56
|
-
* 유니코드 범위에서 문자들을 추가합니다.
|
|
57
|
-
*/
|
|
58
|
-
addUnicodeRange(start: number, end: number): CharsetBuilder;
|
|
59
|
-
/**
|
|
60
|
-
* 문자열에서 문자들을 추가합니다.
|
|
61
|
-
*/
|
|
62
|
-
addString(chars: string | string[]): CharsetBuilder;
|
|
63
|
-
/**
|
|
64
|
-
* 특정 문자들을 추가합니다.
|
|
65
|
-
*/
|
|
66
|
-
add(...chars: string[]): CharsetBuilder;
|
|
67
|
-
/**
|
|
68
|
-
* 혼동하기 쉬운 문자들을 제거합니다.
|
|
69
|
-
* (0, O, o, 1, l, I, i 등)
|
|
70
|
-
*/
|
|
71
|
-
excludeConfusing(): CharsetBuilder;
|
|
72
|
-
/**
|
|
73
|
-
* 특정 문자들을 제거합니다.
|
|
74
|
-
*/
|
|
75
|
-
exclude(...chars: string[]): CharsetBuilder;
|
|
76
|
-
/**
|
|
77
|
-
* URL에서 안전하지 않은 문자들을 제거합니다.
|
|
78
|
-
*/
|
|
79
|
-
excludeUrlUnsafe(): CharsetBuilder;
|
|
80
|
-
/**
|
|
81
|
-
* 중복 문자를 제거합니다.
|
|
82
|
-
*/
|
|
83
|
-
unique(): CharsetBuilder;
|
|
84
|
-
/**
|
|
85
|
-
* 문자셋을 무작위로 섞습니다.
|
|
86
|
-
*/
|
|
87
|
-
shuffle(seed?: number): CharsetBuilder;
|
|
88
|
-
/**
|
|
89
|
-
* 시드 기반 난수 생성기 (xorshift32)
|
|
90
|
-
*/
|
|
91
|
-
private seededRandom;
|
|
92
|
-
/**
|
|
93
|
-
* 특정 길이로 자릅니다.
|
|
94
|
-
*/
|
|
95
|
-
limit(length: number): CharsetBuilder;
|
|
96
|
-
/**
|
|
97
|
-
* 2의 제곱수 길이로 자릅니다.
|
|
98
|
-
*/
|
|
99
|
-
limitToPowerOfTwo(): CharsetBuilder;
|
|
100
|
-
/**
|
|
101
|
-
* 문자셋을 정렬합니다.
|
|
102
|
-
*/
|
|
103
|
-
sort(): CharsetBuilder;
|
|
104
|
-
/**
|
|
105
|
-
* 역순으로 정렬합니다.
|
|
106
|
-
*/
|
|
107
|
-
reverse(): CharsetBuilder;
|
|
108
|
-
/**
|
|
109
|
-
* 현재 문자 수를 반환합니다.
|
|
110
|
-
*/
|
|
111
|
-
get length(): number;
|
|
112
|
-
/**
|
|
113
|
-
* 문자셋을 문자열로 빌드합니다.
|
|
114
|
-
*/
|
|
115
|
-
buildString(): string;
|
|
116
|
-
/**
|
|
117
|
-
* 문자셋을 배열로 빌드합니다.
|
|
118
|
-
*/
|
|
119
|
-
build(): string[];
|
|
120
|
-
/**
|
|
121
|
-
* 문자셋과 패딩 문자를 함께 빌드합니다.
|
|
122
|
-
*
|
|
123
|
-
* @param paddingChar - 패딩 문자 (기본값: charset에서 제외된 첫 번째 문자)
|
|
124
|
-
*/
|
|
125
|
-
buildWithPadding(paddingChar?: string): {
|
|
126
|
-
charset: string[];
|
|
127
|
-
padding: string;
|
|
128
|
-
};
|
|
129
|
-
}
|
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 커스텀 Charset을 쉽게 생성하기 위한 빌더 클래스
|
|
3
|
-
*
|
|
4
|
-
* @example
|
|
5
|
-
* const chars = CharsetBuilder
|
|
6
|
-
* .fromUnicodeRange(0x4E00, 0x4E3F)
|
|
7
|
-
* .excludeConfusing()
|
|
8
|
-
* .shuffle()
|
|
9
|
-
* .build();
|
|
10
|
-
*/
|
|
11
|
-
export class CharsetBuilder {
|
|
12
|
-
chars = [];
|
|
13
|
-
constructor() { }
|
|
14
|
-
/**
|
|
15
|
-
* 빈 빌더를 생성합니다.
|
|
16
|
-
*/
|
|
17
|
-
static create() {
|
|
18
|
-
return new CharsetBuilder();
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* 유니코드 범위에서 문자들을 추가합니다.
|
|
22
|
-
*
|
|
23
|
-
* @param start - 시작 유니코드 코드포인트
|
|
24
|
-
* @param end - 끝 유니코드 코드포인트 (포함)
|
|
25
|
-
*/
|
|
26
|
-
static fromUnicodeRange(start, end) {
|
|
27
|
-
const builder = new CharsetBuilder();
|
|
28
|
-
return builder.addUnicodeRange(start, end);
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* 문자열에서 문자들을 추가합니다.
|
|
32
|
-
*
|
|
33
|
-
* @param chars - 문자열 또는 문자 배열
|
|
34
|
-
*/
|
|
35
|
-
static fromString(chars) {
|
|
36
|
-
const builder = new CharsetBuilder();
|
|
37
|
-
return builder.addString(chars);
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Base64 표준 문자셋으로 시작합니다.
|
|
41
|
-
*/
|
|
42
|
-
static base64() {
|
|
43
|
-
const builder = new CharsetBuilder();
|
|
44
|
-
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
45
|
-
return builder.addString(chars);
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Base32 표준 문자셋으로 시작합니다.
|
|
49
|
-
*/
|
|
50
|
-
static base32() {
|
|
51
|
-
const builder = new CharsetBuilder();
|
|
52
|
-
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
|
|
53
|
-
return builder.addString(chars);
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* 영문 대문자만 포함합니다.
|
|
57
|
-
*/
|
|
58
|
-
static uppercase() {
|
|
59
|
-
return CharsetBuilder.fromUnicodeRange(65, 90); // A-Z
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* 영문 소문자만 포함합니다.
|
|
63
|
-
*/
|
|
64
|
-
static lowercase() {
|
|
65
|
-
return CharsetBuilder.fromUnicodeRange(97, 122); // a-z
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* 숫자만 포함합니다.
|
|
69
|
-
*/
|
|
70
|
-
static digits() {
|
|
71
|
-
return CharsetBuilder.fromUnicodeRange(48, 57); // 0-9
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* 한글 자모를 포함합니다.
|
|
75
|
-
*/
|
|
76
|
-
static hangulJamo() {
|
|
77
|
-
const builder = new CharsetBuilder();
|
|
78
|
-
// 초성 19자 + 중성 21자 + 종성 27자
|
|
79
|
-
return builder
|
|
80
|
-
.addUnicodeRange(0x1100, 0x1112) // 초성
|
|
81
|
-
.addUnicodeRange(0x1161, 0x1175) // 중성
|
|
82
|
-
.addUnicodeRange(0x11A8, 0x11C2); // 종성
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* 유니코드 범위에서 문자들을 추가합니다.
|
|
86
|
-
*/
|
|
87
|
-
addUnicodeRange(start, end) {
|
|
88
|
-
for (let i = start; i <= end; i++) {
|
|
89
|
-
this.chars.push(String.fromCodePoint(i));
|
|
90
|
-
}
|
|
91
|
-
return this;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* 문자열에서 문자들을 추가합니다.
|
|
95
|
-
*/
|
|
96
|
-
addString(chars) {
|
|
97
|
-
if (typeof chars === "string") {
|
|
98
|
-
this.chars.push(...[...chars]);
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
this.chars.push(...chars);
|
|
102
|
-
}
|
|
103
|
-
return this;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* 특정 문자들을 추가합니다.
|
|
107
|
-
*/
|
|
108
|
-
add(...chars) {
|
|
109
|
-
this.chars.push(...chars);
|
|
110
|
-
return this;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* 혼동하기 쉬운 문자들을 제거합니다.
|
|
114
|
-
* (0, O, o, 1, l, I, i 등)
|
|
115
|
-
*/
|
|
116
|
-
excludeConfusing() {
|
|
117
|
-
const confusing = new Set(["0", "O", "o", "1", "l", "I", "i", "|", "L"]);
|
|
118
|
-
this.chars = this.chars.filter((c) => !confusing.has(c));
|
|
119
|
-
return this;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* 특정 문자들을 제거합니다.
|
|
123
|
-
*/
|
|
124
|
-
exclude(...chars) {
|
|
125
|
-
const excludeSet = new Set(chars);
|
|
126
|
-
this.chars = this.chars.filter((c) => !excludeSet.has(c));
|
|
127
|
-
return this;
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* URL에서 안전하지 않은 문자들을 제거합니다.
|
|
131
|
-
*/
|
|
132
|
-
excludeUrlUnsafe() {
|
|
133
|
-
const unsafe = new Set(["+", "/", "=", "?", "&", "#", "%", " "]);
|
|
134
|
-
this.chars = this.chars.filter((c) => !unsafe.has(c));
|
|
135
|
-
return this;
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* 중복 문자를 제거합니다.
|
|
139
|
-
*/
|
|
140
|
-
unique() {
|
|
141
|
-
this.chars = [...new Set(this.chars)];
|
|
142
|
-
return this;
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* 문자셋을 무작위로 섞습니다.
|
|
146
|
-
*/
|
|
147
|
-
shuffle(seed) {
|
|
148
|
-
const random = seed !== undefined ? this.seededRandom(seed) : Math.random;
|
|
149
|
-
for (let i = this.chars.length - 1; i > 0; i--) {
|
|
150
|
-
const j = Math.floor(random() * (i + 1));
|
|
151
|
-
[this.chars[i], this.chars[j]] = [this.chars[j], this.chars[i]];
|
|
152
|
-
}
|
|
153
|
-
return this;
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* 시드 기반 난수 생성기 (xorshift32)
|
|
157
|
-
*/
|
|
158
|
-
seededRandom(seed) {
|
|
159
|
-
let s = seed | 0 || 1; // 0 방지
|
|
160
|
-
return () => {
|
|
161
|
-
s ^= s << 13;
|
|
162
|
-
s ^= s >> 17;
|
|
163
|
-
s ^= s << 5;
|
|
164
|
-
return ((s >>> 0) / 0x100000000);
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* 특정 길이로 자릅니다.
|
|
169
|
-
*/
|
|
170
|
-
limit(length) {
|
|
171
|
-
this.chars = this.chars.slice(0, length);
|
|
172
|
-
return this;
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* 2의 제곱수 길이로 자릅니다.
|
|
176
|
-
*/
|
|
177
|
-
limitToPowerOfTwo() {
|
|
178
|
-
const len = this.chars.length;
|
|
179
|
-
if (len === 0)
|
|
180
|
-
return this;
|
|
181
|
-
const pow2 = 1 << Math.floor(Math.log2(len));
|
|
182
|
-
this.chars = this.chars.slice(0, pow2);
|
|
183
|
-
return this;
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* 문자셋을 정렬합니다.
|
|
187
|
-
*/
|
|
188
|
-
sort() {
|
|
189
|
-
this.chars.sort();
|
|
190
|
-
return this;
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* 역순으로 정렬합니다.
|
|
194
|
-
*/
|
|
195
|
-
reverse() {
|
|
196
|
-
this.chars.reverse();
|
|
197
|
-
return this;
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* 현재 문자 수를 반환합니다.
|
|
201
|
-
*/
|
|
202
|
-
get length() {
|
|
203
|
-
return this.chars.length;
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* 문자셋을 문자열로 빌드합니다.
|
|
207
|
-
*/
|
|
208
|
-
buildString() {
|
|
209
|
-
return this.chars.join("");
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* 문자셋을 배열로 빌드합니다.
|
|
213
|
-
*/
|
|
214
|
-
build() {
|
|
215
|
-
return [...this.chars];
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* 문자셋과 패딩 문자를 함께 빌드합니다.
|
|
219
|
-
*
|
|
220
|
-
* @param paddingChar - 패딩 문자 (기본값: charset에서 제외된 첫 번째 문자)
|
|
221
|
-
*/
|
|
222
|
-
buildWithPadding(paddingChar) {
|
|
223
|
-
const charset = [...this.chars];
|
|
224
|
-
let padding = paddingChar;
|
|
225
|
-
if (!padding) {
|
|
226
|
-
// 패딩 문자로 사용할 수 있는 문자 찾기
|
|
227
|
-
const commonPaddings = ["=", ".", "_", "-", "~", "!"];
|
|
228
|
-
for (const p of commonPaddings) {
|
|
229
|
-
if (!charset.includes(p)) {
|
|
230
|
-
padding = p;
|
|
231
|
-
break;
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
// 적절한 패딩을 찾지 못한 경우
|
|
235
|
-
if (!padding) {
|
|
236
|
-
throw new Error("Cannot find suitable padding character");
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
return { charset, padding };
|
|
240
|
-
}
|
|
241
|
-
}
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { Ddu64 } from "../encoders/Ddu64";
|
|
2
|
-
import { DduConstructorOptions } from "../types";
|
|
3
|
-
/**
|
|
4
|
-
* 다중 인코딩/암호화/압축을 파이프라인으로 조합할 수 있는 빌더 클래스
|
|
5
|
-
*
|
|
6
|
-
* @example
|
|
7
|
-
* const pipeline = new DduPipeline()
|
|
8
|
-
* .compress()
|
|
9
|
-
* .encrypt('secret-key')
|
|
10
|
-
* .encode(new Ddu64(chars, pad));
|
|
11
|
-
*
|
|
12
|
-
* const encoded = pipeline.process('Hello World');
|
|
13
|
-
* const decoded = pipeline.reverse().process(encoded);
|
|
14
|
-
*/
|
|
15
|
-
export declare class DduPipeline {
|
|
16
|
-
private steps;
|
|
17
|
-
/**
|
|
18
|
-
* 압축 단계를 추가합니다.
|
|
19
|
-
*
|
|
20
|
-
* @param level - 압축 레벨 (0-9, 기본값: 9)
|
|
21
|
-
*/
|
|
22
|
-
compress(level?: number): DduPipeline;
|
|
23
|
-
/**
|
|
24
|
-
* 압축 해제 단계를 추가합니다.
|
|
25
|
-
*
|
|
26
|
-
* @param maxDecompressedBytes - 최대 압축해제 바이트 수 (Zip Bomb 방어용)
|
|
27
|
-
*/
|
|
28
|
-
decompress(maxDecompressedBytes?: number): DduPipeline;
|
|
29
|
-
/**
|
|
30
|
-
* AES-256-GCM 암호화 단계를 추가합니다.
|
|
31
|
-
*
|
|
32
|
-
* @param key - 암호화 키
|
|
33
|
-
*/
|
|
34
|
-
encrypt(key: string): DduPipeline;
|
|
35
|
-
/**
|
|
36
|
-
* AES-256-GCM 복호화 단계를 추가합니다.
|
|
37
|
-
*
|
|
38
|
-
* @param key - 복호화 키
|
|
39
|
-
*/
|
|
40
|
-
decrypt(key: string): DduPipeline;
|
|
41
|
-
/**
|
|
42
|
-
* Ddu64 인코딩 단계를 추가합니다.
|
|
43
|
-
*
|
|
44
|
-
* @param encoder - Ddu64 인코더 인스턴스
|
|
45
|
-
*/
|
|
46
|
-
encode(encoder: Ddu64): DduPipeline;
|
|
47
|
-
/**
|
|
48
|
-
* Ddu64 디코딩 단계를 추가합니다.
|
|
49
|
-
*
|
|
50
|
-
* @param encoder - Ddu64 인코더 인스턴스
|
|
51
|
-
*/
|
|
52
|
-
decode(encoder: Ddu64): DduPipeline;
|
|
53
|
-
/**
|
|
54
|
-
* 새 인코더를 생성하여 인코딩 단계를 추가합니다.
|
|
55
|
-
*
|
|
56
|
-
* @param dduChar - charset 문자열 또는 배열
|
|
57
|
-
* @param paddingChar - 패딩 문자
|
|
58
|
-
* @param options - 인코더 옵션
|
|
59
|
-
*/
|
|
60
|
-
encodeWith(dduChar?: string[] | string, paddingChar?: string, options?: DduConstructorOptions): DduPipeline;
|
|
61
|
-
/**
|
|
62
|
-
* 커스텀 Buffer 변환 단계를 추가합니다.
|
|
63
|
-
*
|
|
64
|
-
* @param fn - 변환 함수
|
|
65
|
-
*/
|
|
66
|
-
transform(fn: (data: Buffer) => Buffer): DduPipeline;
|
|
67
|
-
/**
|
|
68
|
-
* 커스텀 문자열 변환 단계를 추가합니다.
|
|
69
|
-
*
|
|
70
|
-
* @param fn - 변환 함수
|
|
71
|
-
*/
|
|
72
|
-
transformString(fn: (data: string) => string): DduPipeline;
|
|
73
|
-
/**
|
|
74
|
-
* 파이프라인을 역순으로 실행할 새 파이프라인을 생성합니다.
|
|
75
|
-
*/
|
|
76
|
-
reverse(): DduPipeline;
|
|
77
|
-
/**
|
|
78
|
-
* 파이프라인을 실행합니다.
|
|
79
|
-
*
|
|
80
|
-
* @param input - 입력 데이터 (문자열 또는 Buffer)
|
|
81
|
-
* @returns 처리된 결과 (문자열 또는 Buffer)
|
|
82
|
-
*/
|
|
83
|
-
process(input: string | Buffer): string | Buffer;
|
|
84
|
-
/**
|
|
85
|
-
* 파이프라인을 실행하고 문자열로 반환합니다.
|
|
86
|
-
*/
|
|
87
|
-
processToString(input: string | Buffer, encoding?: BufferEncoding): string;
|
|
88
|
-
/**
|
|
89
|
-
* 파이프라인을 실행하고 Buffer로 반환합니다.
|
|
90
|
-
*/
|
|
91
|
-
processToBuffer(input: string | Buffer, encoding?: BufferEncoding): Buffer;
|
|
92
|
-
/**
|
|
93
|
-
* 개별 단계를 실행합니다.
|
|
94
|
-
*/
|
|
95
|
-
private executeStep;
|
|
96
|
-
private toBuffer;
|
|
97
|
-
private toString;
|
|
98
|
-
private compressData;
|
|
99
|
-
private decompressData;
|
|
100
|
-
private encryptData;
|
|
101
|
-
private decryptData;
|
|
102
|
-
/**
|
|
103
|
-
* 현재 파이프라인의 단계 수를 반환합니다.
|
|
104
|
-
*/
|
|
105
|
-
get stepCount(): number;
|
|
106
|
-
/**
|
|
107
|
-
* 파이프라인을 복제합니다.
|
|
108
|
-
*/
|
|
109
|
-
clone(): DduPipeline;
|
|
110
|
-
/**
|
|
111
|
-
* 파이프라인을 초기화합니다.
|
|
112
|
-
*/
|
|
113
|
-
clear(): DduPipeline;
|
|
114
|
-
}
|