Skip to content

Commit b45e494

Browse files
committed
Add a cross-platform base64 encoder/decoder
1 parent 3673193 commit b45e494

File tree

6 files changed

+126
-1
lines changed

6 files changed

+126
-1
lines changed

packages/util-base64-browser/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "@aws/util-base64-browser",
33
"private": true,
44
"version": "0.0.1",
5-
"description": "A cross-platform Base64 <-> UInt8Array converter",
5+
"description": "A pure JS Base64 <-> UInt8Array converter",
66
"main": "index.js",
77
"scripts": {
88
"prepublishOnly": "tsc",
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/node_modules/
2+
*.js
3+
*.js.map
4+
*.d.ts
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import { fromBase64, toBase64 } from "../";
2+
3+
jest.mock("@aws/util-base64-browser", () => {
4+
return {
5+
fromBase64: jest.fn(),
6+
toBase64: jest.fn()
7+
};
8+
});
9+
import {
10+
fromBase64 as browserFromBase64,
11+
toBase64 as browserToBase64
12+
} from "@aws/util-base64-browser";
13+
14+
jest.mock("@aws/util-base64-node", () => {
15+
return {
16+
fromBase64: jest.fn(),
17+
toBase64: jest.fn()
18+
};
19+
});
20+
import {
21+
fromBase64 as nodeFromBase64,
22+
toBase64 as nodeToBase64
23+
} from "@aws/util-base64-node";
24+
25+
jest.mock("@aws/is-node", () => {
26+
return { isNode: jest.fn() };
27+
});
28+
import { isNode } from "@aws/is-node";
29+
30+
beforeEach(() => {
31+
(browserFromBase64 as any).mockReset();
32+
(browserToBase64 as any).mockReset();
33+
(nodeFromBase64 as any).mockReset();
34+
(nodeToBase64 as any).mockReset();
35+
(isNode as any).mockReset();
36+
});
37+
38+
describe("implementation selection", () => {
39+
it("should use the node implementation in node", () => {
40+
(isNode as any).mockReturnValue(true);
41+
42+
fromBase64("foo");
43+
expect((nodeFromBase64 as any).mock.calls.length).toBe(1);
44+
expect((browserFromBase64 as any).mock.calls.length).toBe(0);
45+
46+
toBase64(new Uint8Array(0));
47+
expect((nodeToBase64 as any).mock.calls.length).toBe(1);
48+
expect((browserToBase64 as any).mock.calls.length).toBe(0);
49+
});
50+
51+
it("should use the browser implementation elsewhere", () => {
52+
(isNode as any).mockReturnValue(false);
53+
54+
fromBase64("foo");
55+
expect((nodeFromBase64 as any).mock.calls.length).toBe(0);
56+
expect((browserFromBase64 as any).mock.calls.length).toBe(1);
57+
58+
toBase64(new Uint8Array(0));
59+
expect((nodeToBase64 as any).mock.calls.length).toBe(0);
60+
expect((browserToBase64 as any).mock.calls.length).toBe(1);
61+
});
62+
});
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { isNode } from "@aws/is-node";
2+
import {
3+
fromBase64 as browserFromBase64,
4+
toBase64 as browserToBase64
5+
} from "@aws/util-base64-browser";
6+
import {
7+
fromBase64 as nodeFromBase64,
8+
toBase64 as nodeToBase64
9+
} from "@aws/util-base64-node";
10+
11+
export function fromBase64(input: string): Uint8Array {
12+
if (isNode()) {
13+
return nodeFromBase64(input);
14+
}
15+
16+
return browserFromBase64(input);
17+
}
18+
19+
export function toBase64(input: Uint8Array): string {
20+
if (isNode()) {
21+
return nodeToBase64(input);
22+
}
23+
24+
return browserToBase64(input);
25+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"name": "@aws/util-base64-universal",
3+
"private": true,
4+
"version": "0.0.1",
5+
"description": "A cross-platform Base64 <-> UInt8Array converter",
6+
"main": "index.js",
7+
"scripts": {
8+
"prepublishOnly": "tsc",
9+
"pretest": "tsc",
10+
"test": "jest"
11+
},
12+
"author": "[email protected]",
13+
"license": "UNLICENSED",
14+
"dependencies": {
15+
"@aws/is-node": "^0.0.1",
16+
"@aws/util-base64-browser": "^0.0.1",
17+
"@aws/util-base64-node": "^0.0.1"
18+
},
19+
"devDependencies": {
20+
"@types/jest": "^19.2.2",
21+
"@types/node": "^7.0.12",
22+
"jest": "^19.0.2",
23+
"typescript": "^2.3"
24+
}
25+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"compilerOptions": {
3+
"target": "es5",
4+
"module": "commonjs",
5+
"declaration": true,
6+
"sourceMap": true,
7+
"strict": true
8+
}
9+
}

0 commit comments

Comments
 (0)