-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #20 from nats-io/direct-esm
[CHANGE] self processing the tweetnacl cjs module rather than use esm.sh as the size differential is huge
- Loading branch information
Showing
7 changed files
with
1,331 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,21 +1,43 @@ | ||
// this scripts parses the version of tweetnacl referenced | ||
// and uses the https://esm.sh service to convert it to an | ||
// esm module which we download from fastly and cache locally | ||
|
||
// this scripts parses the version of tweetnacl library | ||
// copies some of the source files from the library | ||
// while attribution of its origin, shims if necessary, | ||
// and reworking it to allow running it in different | ||
// runtimes | ||
import data from "../package.json" assert { type: "json" }; | ||
const version = data.dependencies["tweetnacl"]; | ||
|
||
async function get(u: string): Promise<string> { | ||
const r = await fetch(u); | ||
if (!r.ok) { | ||
return Promise.reject(new Error(`error fetching ${u}`)); | ||
} | ||
return await r.text(); | ||
} | ||
async function copyFromModulesDir( | ||
from: string, | ||
preamble = "", | ||
tail = "", | ||
): Promise<void> { | ||
const head = `// this source from node_modules/tweetnacl@${version}/${from}\n | ||
// deno-lint-ignore-file | ||
// deno-fmt-ignore-file | ||
const version = data.dependencies["tweetnacl"]; | ||
const url = `https://esm.sh/tweetnacl@${version}?target=es2022`; | ||
const code = await get(url); | ||
await Deno.writeTextFile(`${Deno.cwd()}/modules/esm/tweetnacl.js`, code, {create: true}); | ||
`; | ||
|
||
let src = await Deno.readTextFile( | ||
`${Deno.cwd()}/node_modules/tweetnacl/${from}`, | ||
); | ||
|
||
src = src.replaceAll("self", "globalThis"); | ||
|
||
await Deno.writeTextFile( | ||
`${Deno.cwd()}/modules/esm/${from}`, | ||
head + preamble + src + tail, | ||
{ | ||
create: true, | ||
}, | ||
); | ||
} | ||
|
||
await copyFromModulesDir( | ||
"nacl.js", | ||
"", | ||
` | ||
//added by nkeys.js export it | ||
export const nacl = globalThis.nacl; | ||
`, | ||
); | ||
await copyFromModulesDir("nacl.d.ts"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
// this source from node_modules/[email protected]/nacl.d.ts | ||
|
||
// deno-lint-ignore-file | ||
// deno-fmt-ignore-file | ||
|
||
// Type definitions for TweetNaCl.js | ||
|
||
export as namespace nacl; | ||
|
||
declare var nacl: nacl; | ||
export = nacl; | ||
|
||
declare namespace nacl { | ||
export interface BoxKeyPair { | ||
publicKey: Uint8Array; | ||
secretKey: Uint8Array; | ||
} | ||
|
||
export interface SignKeyPair { | ||
publicKey: Uint8Array; | ||
secretKey: Uint8Array; | ||
} | ||
|
||
export interface secretbox { | ||
(msg: Uint8Array, nonce: Uint8Array, key: Uint8Array): Uint8Array; | ||
open(box: Uint8Array, nonce: Uint8Array, key: Uint8Array): Uint8Array | null; | ||
readonly keyLength: number; | ||
readonly nonceLength: number; | ||
readonly overheadLength: number; | ||
} | ||
|
||
export interface scalarMult { | ||
(n: Uint8Array, p: Uint8Array): Uint8Array; | ||
base(n: Uint8Array): Uint8Array; | ||
readonly scalarLength: number; | ||
readonly groupElementLength: number; | ||
} | ||
|
||
namespace boxProps { | ||
export interface open { | ||
(msg: Uint8Array, nonce: Uint8Array, publicKey: Uint8Array, secretKey: Uint8Array): Uint8Array | null; | ||
after(box: Uint8Array, nonce: Uint8Array, key: Uint8Array): Uint8Array | null; | ||
} | ||
|
||
export interface keyPair { | ||
(): BoxKeyPair; | ||
fromSecretKey(secretKey: Uint8Array): BoxKeyPair; | ||
} | ||
} | ||
|
||
export interface box { | ||
(msg: Uint8Array, nonce: Uint8Array, publicKey: Uint8Array, secretKey: Uint8Array): Uint8Array; | ||
before(publicKey: Uint8Array, secretKey: Uint8Array): Uint8Array; | ||
after(msg: Uint8Array, nonce: Uint8Array, key: Uint8Array): Uint8Array; | ||
open: boxProps.open; | ||
keyPair: boxProps.keyPair; | ||
readonly publicKeyLength: number; | ||
readonly secretKeyLength: number; | ||
readonly sharedKeyLength: number; | ||
readonly nonceLength: number; | ||
readonly overheadLength: number; | ||
} | ||
|
||
namespace signProps { | ||
export interface detached { | ||
(msg: Uint8Array, secretKey: Uint8Array): Uint8Array; | ||
verify(msg: Uint8Array, sig: Uint8Array, publicKey: Uint8Array): boolean; | ||
} | ||
|
||
export interface keyPair { | ||
(): SignKeyPair; | ||
fromSecretKey(secretKey: Uint8Array): SignKeyPair; | ||
fromSeed(secretKey: Uint8Array): SignKeyPair; | ||
} | ||
} | ||
|
||
export interface sign { | ||
(msg: Uint8Array, secretKey: Uint8Array): Uint8Array; | ||
open(signedMsg: Uint8Array, publicKey: Uint8Array): Uint8Array | null; | ||
detached: signProps.detached; | ||
keyPair: signProps.keyPair; | ||
readonly publicKeyLength: number; | ||
readonly secretKeyLength: number; | ||
readonly seedLength: number; | ||
readonly signatureLength: number; | ||
} | ||
|
||
export interface hash { | ||
(msg: Uint8Array): Uint8Array; | ||
readonly hashLength: number; | ||
} | ||
} | ||
|
||
declare interface nacl { | ||
randomBytes(n: number): Uint8Array; | ||
secretbox: nacl.secretbox; | ||
scalarMult: nacl.scalarMult; | ||
box: nacl.box; | ||
sign: nacl.sign; | ||
hash: nacl.hash; | ||
verify(x: Uint8Array, y: Uint8Array): boolean; | ||
setPRNG(fn: (x: Uint8Array, n: number) => void): void; | ||
} |
Oops, something went wrong.