Skip to content

Commit aec06d2

Browse files
committed
Chore: address invalid Base64 encoding (/pieroxy/issues/110)
1 parent a1e8dd0 commit aec06d2

File tree

4 files changed

+45
-4
lines changed

4 files changed

+45
-4
lines changed

src/base64/betterBase64.ts

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,33 @@
1-
import { decompressFromBase64 } from "./decompressFromBase64";
2-
import { compressToBase64 } from "./compressToBase64";
1+
import { _compress } from "../_compress";
2+
import keyStrBase64 from "./keyStrBase64";
3+
import { _decompress } from "../_decompress";
4+
import { getBaseValue } from "../getBaseValue";
35

46
export function compressToBetterBase64(input: string): string {
5-
return compressToBase64(input) || "";
7+
if (!input) {
8+
return "";
9+
}
10+
const res = _compress(input, 6, (a) => keyStrBase64.charAt(a));
11+
12+
// To produce valid Base64
13+
switch (res.length % 3) {
14+
case 0:
15+
return res;
16+
case 1:
17+
return res + "==";
18+
case 2:
19+
return res + "=";
20+
default: // When could this happen ?
21+
console.warn("Something in compressToBetterBase64() is very very wrong.");
22+
return "";
23+
}
24+
625
}
726

827
export function decompressFromBetterBase64(input: string): string {
9-
return decompressFromBase64(input) || "";
28+
if (!input) {
29+
return "";
30+
}
31+
const res = _decompress(input.length, 32, (index) => getBaseValue(keyStrBase64, input.charAt(index)));
32+
return res || "";
1033
}

src/base64/compressToBase64.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 keyStrBase64 from "./keyStrBase64";
3+
import { deprecated } from "../utils/misc";
34

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

src/base64/decompressFromBase64.ts

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

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

src/utils/misc.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
type VERSIONS = "v2.0.0"
2+
3+
export function deprecated(
4+
thing: string,
5+
version: VERSIONS,
6+
opts?: { aggressive?: boolean; replacement?: string }
7+
): void {
8+
let notice = `LZString | ${thing} is deprecated as of: ${version}`
9+
if (opts?.replacement) {
10+
notice += ` - Please use ${opts.replacement} instead`
11+
}
12+
console.error(notice)
13+
if (window && opts?.aggressive) alert(notice)
14+
}

0 commit comments

Comments
 (0)