Skip to content

Commit 32e6ed1

Browse files
committed
Chore: implements Base64URL suggestion (/pieroxy/pull/127)
1 parent aec06d2 commit 32e6ed1

File tree

6 files changed

+42
-1
lines changed

6 files changed

+42
-1
lines changed

src/base64/base64URL.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { _compress } from "../_compress";
2+
import { _decompress } from "../_decompress";
3+
import { getBaseValue } from "../getBaseValue";
4+
5+
const keyStrBase64URL = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
6+
7+
export function compressToBase64URL(input: string): string {
8+
if (!input) {
9+
return "";
10+
}
11+
return _compress(input, 6, (a) => keyStrBase64URL.charAt(a));
12+
}
13+
14+
export function decompressFromBase64URL(input: string): string {
15+
if (!input) {
16+
return "";
17+
}
18+
const res = _decompress(input.length, 32, (index) => getBaseValue(keyStrBase64URL, input.charAt(index)));
19+
return res || "";
20+
}

src/base64/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export { compressToBase64 } from "./compressToBase64";
22
export { decompressFromBase64 } from "./decompressFromBase64";
33
export { compressToBetterBase64, decompressFromBetterBase64 } from "./betterBase64";
4+
export { compressToBase64URL, decompressFromBase64URL } from "./base64URL";

src/encodedURI/compressToEncodedURI.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import { _compress } from "../_compress";
22
import keyStrUriSafe from "./keyStrUriSafe";
3+
import { deprecated } from "../utils/misc";
34

45
export function compressToEncodedURIComponent(input: string | null) {
6+
deprecated("compressToEncodedURIComponent()", "v2.0.0", { replacement: "compressToBase64URL()"})
57
if (input == null) return "";
68

79
return _compress(input, 6, (a) => keyStrUriSafe.charAt(a));

src/encodedURI/decompressFromEncodedURI.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import keyStrUriSafe from "./keyStrUriSafe";
22
import { _decompress } from "../_decompress";
33
import { getBaseValue } from "../getBaseValue";
4+
import { deprecated } from "../utils/misc";
45

56
export function decompressFromEncodedURIComponent(input: string | null) {
7+
deprecated("decompressFromEncodedURIComponent()", "v2.0.0", { replacement: "decompressFromBase64URL()"})
68
if (input == null) return "";
79
if (input == "") return null;
810

src/index.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,14 @@
1010

1111
import { _compress } from "./_compress";
1212
import { _decompress } from "./_decompress";
13-
import { compressToBase64, decompressFromBase64, compressToBetterBase64, decompressFromBetterBase64 } from "./base64";
13+
import {
14+
compressToBase64,
15+
decompressFromBase64,
16+
compressToBetterBase64,
17+
decompressFromBetterBase64,
18+
compressToBase64URL,
19+
decompressFromBase64URL,
20+
} from "./base64";
1421
import { compressToEncodedURIComponent, decompressFromEncodedURIComponent } from "./encodedURI";
1522
import { compress, decompress } from "./stock";
1623
import { compressToUint8Array, decompressFromUint8Array } from "./Uint8Array";
@@ -27,6 +34,8 @@ export default {
2734
decompressFromBase64,
2835
compressToBetterBase64,
2936
decompressFromBetterBase64,
37+
compressToBase64URL,
38+
decompressFromBase64URL,
3039

3140
compressToEncodedURIComponent,
3241
decompressFromEncodedURIComponent,

tests/testFunctions.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ export function runAllTests(implementation: typeof LZString) {
3939
test_tattooBase64,
4040
);
4141

42+
runTestSet(
43+
"Base64URL Compression and Decompression",
44+
implementation.compressToBase64URL,
45+
implementation.decompressFromBase64URL,
46+
test_tattooBase64,
47+
);
48+
4249
runTestSet(
4350
"UTF16 Compression and Decompression",
4451
implementation.compressToUTF16,

0 commit comments

Comments
 (0)