Skip to content

Commit 26afe66

Browse files
authored
Merge pull request #32 from AIGNE-io/master
fix: add support for commonjs module
2 parents fc813b7 + 6d02d2c commit 26afe66

File tree

4 files changed

+24
-13
lines changed

4 files changed

+24
-13
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ dist/
66
.vscode/
77
src/index.browser.ts
88
src/index.node.ts
9+
src/index.node.cts
910
browser-test/index.out.js

package.json

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,21 @@
77
"browser": "dist/index.browser.js",
88
"type": "module",
99
"types": "dist/index.node.d.ts",
10+
"exports": {
11+
".": {
12+
"browser": "./dist/index.browser.js",
13+
"node": {
14+
"import": "./dist/index.node.js",
15+
"require": "./dist/index.node.cjs"
16+
}
17+
}
18+
},
1019
"files": [
1120
"dist/"
1221
],
1322
"scripts": {
1423
"watch": "tsc --watch --declaration",
15-
"preprocess": "env=browser diverge -f src/index.ts src/index.browser.ts && env=node diverge -f src/index.ts src/index.node.ts",
24+
"preprocess": "env=browser diverge -f src/index.ts src/index.browser.ts && env=node diverge -f src/index.ts src/index.node.ts && env=node diverge -f src/index.ts src/index.node.cts",
1625
"build": "npm run preprocess && tsc --declaration",
1726
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
1827
"test:bundle": "esbuild browser-test/index.js --bundle --outfile=browser-test/index.out.js"

src/index.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,34 @@
11
import type { webcrypto } from 'node:crypto';
22

3-
let crypto: webcrypto.Crypto;
3+
let crypto: webcrypto.Crypto | Promise<webcrypto.Crypto>;
44

55
// diverge:if env=browser
66
crypto = globalThis.crypto; // web browsers
77
// diverge:else
88
crypto =
99
globalThis.crypto?.webcrypto ?? // Node.js 16 REPL has globalThis.crypto as node:crypto
10-
globalThis.crypto ?? // Node.js 18+
11-
(await import("node:crypto")).webcrypto; // Node.js 16 non-REPL
10+
globalThis.crypto ?? // Node.js 18+
11+
import("node:crypto").then(m => m.webcrypto); // Node.js 16 non-REPL
1212
// diverge:fi
1313

1414
/**
1515
* Creates an array of length `size` of random bytes
1616
* @param size
1717
* @returns Array of random ints (0 to 255)
1818
*/
19-
function getRandomValues(size: number) {
20-
return crypto.getRandomValues(new Uint8Array(size));
19+
async function getRandomValues(size: number) {
20+
return (await crypto).getRandomValues(new Uint8Array(size));
2121
}
2222

2323
/** Generate cryptographically strong random string
2424
* @param size The desired length of the string
2525
* @returns The random string
2626
*/
27-
function random(size: number) {
27+
async function random(size: number) {
2828
const mask =
2929
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~";
3030
let result = "";
31-
const randomUints = getRandomValues(size);
31+
const randomUints = await getRandomValues(size);
3232
for (let i = 0; i < size; i++) {
3333
// cap the value of the randomIndex to mask.length - 1
3434
const randomIndex = randomUints[i] % mask.length;
@@ -41,16 +41,16 @@ function random(size: number) {
4141
* @param length Length of the verifier
4242
* @returns A random verifier `length` characters long
4343
*/
44-
function generateVerifier(length: number): string {
45-
return random(length);
44+
async function generateVerifier(length: number): Promise<string> {
45+
return await random(length);
4646
}
4747

4848
/** Generate a PKCE code challenge from a code verifier
4949
* @param code_verifier
5050
* @returns The base64 url encoded code challenge
5151
*/
5252
export async function generateChallenge(code_verifier: string) {
53-
const buffer = await crypto.subtle.digest(
53+
const buffer = await (await crypto).subtle.digest(
5454
"SHA-256",
5555
new TextEncoder().encode(code_verifier)
5656
);
@@ -77,7 +77,7 @@ export default async function pkceChallenge(length?: number): Promise<{
7777
throw `Expected a length between 43 and 128. Received ${length}.`;
7878
}
7979

80-
const verifier = generateVerifier(length);
80+
const verifier = await generateVerifier(length);
8181
const challenge = await generateChallenge(verifier);
8282

8383
return {

tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
},
1010
"files": [
1111
"src/index.browser.ts",
12-
"src/index.node.ts"
12+
"src/index.node.ts",
13+
"src/index.node.cts"
1314
]
1415
}

0 commit comments

Comments
 (0)