@vrowser/node-polyfill 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +121 -0
  3. package/dist/crypto.d.ts +48 -0
  4. package/dist/crypto.d.ts.map +1 -0
  5. package/dist/crypto.js +232 -0
  6. package/dist/crypto.js.map +1 -0
  7. package/dist/dns.d.ts +74 -0
  8. package/dist/dns.d.ts.map +1 -0
  9. package/dist/dns.js +172 -0
  10. package/dist/dns.js.map +1 -0
  11. package/dist/dns_promises.d.ts +2 -0
  12. package/dist/dns_promises.js +3 -0
  13. package/dist/events.d.ts +99 -0
  14. package/dist/events.d.ts.map +1 -0
  15. package/dist/events.js +480 -0
  16. package/dist/events.js.map +1 -0
  17. package/dist/module.d.ts +40 -0
  18. package/dist/module.d.ts.map +1 -0
  19. package/dist/module.js +72 -0
  20. package/dist/module.js.map +1 -0
  21. package/dist/net.d.ts +38 -0
  22. package/dist/net.d.ts.map +1 -0
  23. package/dist/net.js +53 -0
  24. package/dist/net.js.map +1 -0
  25. package/dist/os.d.ts +96 -0
  26. package/dist/os.d.ts.map +1 -0
  27. package/dist/os.js +140 -0
  28. package/dist/os.js.map +1 -0
  29. package/dist/perf_hooks.d.ts +124 -0
  30. package/dist/perf_hooks.d.ts.map +1 -0
  31. package/dist/perf_hooks.js +105 -0
  32. package/dist/perf_hooks.js.map +1 -0
  33. package/dist/process.d.ts +147 -0
  34. package/dist/process.d.ts.map +1 -0
  35. package/dist/process.js +209 -0
  36. package/dist/process.js.map +1 -0
  37. package/dist/readline.d.ts +93 -0
  38. package/dist/readline.d.ts.map +1 -0
  39. package/dist/readline.js +268 -0
  40. package/dist/readline.js.map +1 -0
  41. package/dist/timers.d.ts +36 -0
  42. package/dist/timers.d.ts.map +1 -0
  43. package/dist/timers.js +54 -0
  44. package/dist/timers.js.map +1 -0
  45. package/dist/timers_promises.d.ts +22 -0
  46. package/dist/timers_promises.d.ts.map +1 -0
  47. package/dist/timers_promises.js +102 -0
  48. package/dist/timers_promises.js.map +1 -0
  49. package/dist/tty.d.ts +48 -0
  50. package/dist/tty.d.ts.map +1 -0
  51. package/dist/tty.js +67 -0
  52. package/dist/tty.js.map +1 -0
  53. package/dist/url.d.ts +39 -0
  54. package/dist/url.d.ts.map +1 -0
  55. package/dist/url.js +41 -0
  56. package/dist/url.js.map +1 -0
  57. package/dist/util.d.ts +66 -0
  58. package/dist/util.d.ts.map +1 -0
  59. package/dist/util.js +117 -0
  60. package/dist/util.js.map +1 -0
  61. package/package.json +125 -0
package/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2025 kazuya kawaguchi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
6
+ this software and associated documentation files (the "Software"), to deal in
7
+ the Software without restriction, including without limitation the rights to
8
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ the Software, and to permit persons to whom the Software is furnished to do so,
10
+ subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,121 @@
1
+ # @vrowser/node-polyfill
2
+
3
+ Browser-compatible Node.js module polyfills for vrowser.
4
+
5
+ ## Features
6
+
7
+ - Individual subpath exports for tree-shaking
8
+ - Browser / Service Worker ready
9
+ - Full `EventEmitter` with Node.js v23+ features
10
+ - ANSI cursor/clear functions for `readline`
11
+ - Promise-based timer APIs with `AbortSignal` support
12
+ - TypeScript support with full type definitions
13
+
14
+ ## 💿 Installation
15
+
16
+ ```sh
17
+ # npm
18
+ npm install --save @vrowser/node-polyfill
19
+
20
+ # pnpm
21
+ pnpm add @vrowser/node-polyfill
22
+
23
+ # yarn
24
+ yarn add @vrowser/node-polyfill
25
+
26
+ # deno
27
+ deno add npm:@vrowser/node-polyfill
28
+
29
+ # bun
30
+ bun add @vrowser/node-polyfill
31
+ ```
32
+
33
+ ## 🚀 Usage
34
+
35
+ ### Direct Usage
36
+
37
+ ```ts
38
+ import { EventEmitter, once, on } from '@vrowser/node-polyfill/events'
39
+ import { clearLine, cursorTo, createInterface } from '@vrowser/node-polyfill/readline'
40
+ import { setTimeout as delay } from '@vrowser/node-polyfill/timers/promises'
41
+
42
+ const ee = new EventEmitter()
43
+ ee.on('data', msg => console.log(msg))
44
+ ee.emit('data', 'hello')
45
+
46
+ // Promise-based once
47
+ const [value] = await once(ee, 'result')
48
+
49
+ // Async timer
50
+ await delay(1000, 'done')
51
+ ```
52
+
53
+ ### As Node.js Module Polyfill (Vite/Vitest/Rolldown)
54
+
55
+ ```ts
56
+ // vite.config.ts / vitest.config.ts / rolldown.config.ts
57
+ export default defineConfig({
58
+ resolve: {
59
+ alias: {
60
+ 'node:url': '@vrowser/node-polyfill/url',
61
+ 'node:util': '@vrowser/node-polyfill/util',
62
+ 'node:events': '@vrowser/node-polyfill/events',
63
+ 'node:perf_hooks': '@vrowser/node-polyfill/perf_hooks',
64
+ 'node:os': '@vrowser/node-polyfill/os',
65
+ 'node:dns': '@vrowser/node-polyfill/dns',
66
+ 'node:dns/promises': '@vrowser/node-polyfill/dns/promises',
67
+ 'node:process': '@vrowser/node-polyfill/process',
68
+ 'node:readline': '@vrowser/node-polyfill/readline',
69
+ 'node:timers': '@vrowser/node-polyfill/timers',
70
+ 'node:timers/promises': '@vrowser/node-polyfill/timers/promises'
71
+ }
72
+ }
73
+ })
74
+ ```
75
+
76
+ ## API
77
+
78
+ ### Entry Points
79
+
80
+ | Entry Point | Node.js Module | Description |
81
+ | ---------------------------------------- | ---------------------- | ------------------------------------------------------------------------------------------------- |
82
+ | `@vrowser/node-polyfill/url` | `node:url` | `fileURLToPath`, `pathToFileURL`, `URL` |
83
+ | `@vrowser/node-polyfill/util` | `node:util` | `promisify`, `inspect`, `stripVTControlCharacters` |
84
+ | `@vrowser/node-polyfill/events` | `node:events` | `EventEmitter`, `once`, `on`, `addAbortListener`, `getEventListeners` |
85
+ | `@vrowser/node-polyfill/perf_hooks` | `node:perf_hooks` | `performance`, `PerformanceObserver`, stubs for `monitorEventLoopDelay`, `createHistogram` |
86
+ | `@vrowser/node-polyfill/os` | `node:os` | `endianness`, `hostname`, `platform`, `availableParallelism`, stubs for `getPriority`, `userInfo` |
87
+ | `@vrowser/node-polyfill/dns` | `node:dns` | Stub implementations for all DNS APIs |
88
+ | `@vrowser/node-polyfill/dns/promises` | `node:dns/promises` | Promise-based DNS stubs |
89
+ | `@vrowser/node-polyfill/process` | `node:process` | `cwd`/`chdir`, `nextTick`, `hrtime`, `env`, `stdout`/`stderr`/`stdin` stubs |
90
+ | `@vrowser/node-polyfill/readline` | `node:readline` | ANSI cursor/clear, `Interface`, promises API with `Readline` utility |
91
+ | `@vrowser/node-polyfill/timers` | `node:timers` | `setTimeout`/`setInterval`, `setImmediate` (MessageChannel fallback) |
92
+ | `@vrowser/node-polyfill/timers/promises` | `node:timers/promises` | Promise `setTimeout`/`setImmediate`, async iterator `setInterval`, `scheduler` |
93
+
94
+ ### Implementation Notes
95
+
96
+ **Fully implemented** (browser-native or equivalent):
97
+
98
+ - `url` - `fileURLToPath`/`pathToFileURL` with Windows path support
99
+ - `events` - Complete `EventEmitter` with `captureRejections`, `errorMonitor`, async `once`/`on`, `addAbortListener`
100
+ - `perf_hooks` - Browser-native `performance`, `PerformanceObserver` via `globalThis`
101
+ - `readline` - ANSI escape sequences for terminal control, `Interface` with async iteration
102
+ - `timers` - Native re-exports with `setImmediate` polyfill via `MessageChannel`
103
+ - `timers/promises` - Promise/AsyncIterator APIs with `AbortSignal` support
104
+
105
+ **Stub implementations** (browser-safe defaults):
106
+
107
+ - `os` - Returns browser defaults (`platform: 'browser'`, `arch: 'javascript'`)
108
+ - `dns` - Returns stub values (`127.0.0.1` for `lookup`, empty arrays for `resolve*`)
109
+ - `process` - Minimal process with `cwd`/`chdir`, `env`, `nextTick`, `hrtime.bigint()`
110
+
111
+ ## 🤝 Sponsors
112
+
113
+ <p align="center">
114
+ <a href="https://cdn.jsdelivr.net/gh/kazupon/sponsors/sponsors.svg">
115
+ <img alt="sponsor" src='https://cdn.jsdelivr.net/gh/kazupon/sponsors/sponsors.svg'/>
116
+ </a>
117
+ </p>
118
+
119
+ ## ©️ License
120
+
121
+ [MIT](http://opensource.org/licenses/MIT)
@@ -0,0 +1,48 @@
1
+ //#region src/crypto.d.ts
2
+ /**
3
+ * `node:crypto` compatible entry point
4
+ *
5
+ * Provides synchronous hash functions for browser/Worker environments.
6
+ * Uses a pure JavaScript SHA-256 implementation since Web Crypto API is async-only.
7
+ *
8
+ * @module crypto
9
+ */
10
+ declare class Hash {
11
+ private _data;
12
+ private _algorithm;
13
+ constructor(algorithm: string);
14
+ update(data: string | Uint8Array, _encoding?: string): this;
15
+ digest(encoding?: string): string | Uint8Array;
16
+ private _computeHash;
17
+ }
18
+ /**
19
+ * Create a Hash instance for the given algorithm.
20
+ * Supports SHA-256 natively. Other algorithms fall back to SHA-256.
21
+ */
22
+ declare function createHash(algorithm: string): Hash;
23
+ /**
24
+ * Compute a hash in one shot (Node.js 21+ API).
25
+ * @param algorithm - Hash algorithm (e.g. 'sha256')
26
+ * @param data - Data to hash
27
+ * @param encoding - Output encoding ('hex', 'base64')
28
+ */
29
+ declare function hash(algorithm: string, data: string | Uint8Array, encoding?: string): string;
30
+ /**
31
+ * Generate a random UUID (v4).
32
+ * Delegates to the browser's built-in crypto.randomUUID().
33
+ */
34
+ declare function randomUUID(): string;
35
+ /**
36
+ * Get random bytes.
37
+ * Delegates to the browser's built-in crypto.getRandomValues().
38
+ */
39
+ declare function randomBytes(size: number): Uint8Array;
40
+ declare const _default: {
41
+ createHash: typeof createHash;
42
+ hash: typeof hash;
43
+ randomUUID: typeof randomUUID;
44
+ randomBytes: typeof randomBytes;
45
+ };
46
+ //#endregion
47
+ export { createHash, _default as default, hash, randomBytes, randomUUID };
48
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","names":[],"sources":["../src/crypto.ts"],"sourcesContent":[],"mappings":";;;AAsMA;AAUA;AAYA;AAQA;AAIC;;cAhGK,IAAA;;;;wBAQkB;sCASc;;;;;;;iBA6CtB,UAAA,qBAA+B;;;;;;;iBAU/B,IAAA,mCAEC;;;;;iBAUD,UAAA,CAAA;;;;;iBAQA,WAAA,gBAA2B;cAI1C"}
package/dist/crypto.js ADDED
@@ -0,0 +1,232 @@
1
+ //#region src/crypto.ts
2
+ /**
3
+ * `node:crypto` compatible entry point
4
+ *
5
+ * Provides synchronous hash functions for browser/Worker environments.
6
+ * Uses a pure JavaScript SHA-256 implementation since Web Crypto API is async-only.
7
+ *
8
+ * @module crypto
9
+ */
10
+ /**
11
+ * @author kazuya kawaguchi (a.k.a. kazupon)
12
+ * @license MIT
13
+ */
14
+ const K = new Uint32Array([
15
+ 1116352408,
16
+ 1899447441,
17
+ 3049323471,
18
+ 3921009573,
19
+ 961987163,
20
+ 1508970993,
21
+ 2453635748,
22
+ 2870763221,
23
+ 3624381080,
24
+ 310598401,
25
+ 607225278,
26
+ 1426881987,
27
+ 1925078388,
28
+ 2162078206,
29
+ 2614888103,
30
+ 3248222580,
31
+ 3835390401,
32
+ 4022224774,
33
+ 264347078,
34
+ 604807628,
35
+ 770255983,
36
+ 1249150122,
37
+ 1555081692,
38
+ 1996064986,
39
+ 2554220882,
40
+ 2821834349,
41
+ 2952996808,
42
+ 3210313671,
43
+ 3336571891,
44
+ 3584528711,
45
+ 113926993,
46
+ 338241895,
47
+ 666307205,
48
+ 773529912,
49
+ 1294757372,
50
+ 1396182291,
51
+ 1695183700,
52
+ 1986661051,
53
+ 2177026350,
54
+ 2456956037,
55
+ 2730485921,
56
+ 2820302411,
57
+ 3259730800,
58
+ 3345764771,
59
+ 3516065817,
60
+ 3600352804,
61
+ 4094571909,
62
+ 275423344,
63
+ 430227734,
64
+ 506948616,
65
+ 659060556,
66
+ 883997877,
67
+ 958139571,
68
+ 1322822218,
69
+ 1537002063,
70
+ 1747873779,
71
+ 1955562222,
72
+ 2024104815,
73
+ 2227730452,
74
+ 2361852424,
75
+ 2428436474,
76
+ 2756734187,
77
+ 3204031479,
78
+ 3329325298
79
+ ]);
80
+ function sha256(data) {
81
+ let h0 = 1779033703;
82
+ let h1 = 3144134277;
83
+ let h2 = 1013904242;
84
+ let h3 = 2773480762;
85
+ let h4 = 1359893119;
86
+ let h5 = 2600822924;
87
+ let h6 = 528734635;
88
+ let h7 = 1541459225;
89
+ const bitLen = data.length * 8;
90
+ const padded = new Uint8Array(Math.ceil((data.length + 9) / 64) * 64);
91
+ padded.set(data);
92
+ padded[data.length] = 128;
93
+ const view = new DataView(padded.buffer);
94
+ view.setUint32(padded.length - 4, bitLen, false);
95
+ const w = new Uint32Array(64);
96
+ for (let offset = 0; offset < padded.length; offset += 64) {
97
+ for (let i = 0; i < 16; i++) w[i] = view.getUint32(offset + i * 4, false);
98
+ for (let i = 16; i < 64; i++) {
99
+ const s0 = (rotr(w[i - 15], 7) ^ rotr(w[i - 15], 18) ^ w[i - 15] >>> 3) >>> 0;
100
+ const s1 = (rotr(w[i - 2], 17) ^ rotr(w[i - 2], 19) ^ w[i - 2] >>> 10) >>> 0;
101
+ w[i] = w[i - 16] + s0 + w[i - 7] + s1 >>> 0;
102
+ }
103
+ let a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7;
104
+ for (let i = 0; i < 64; i++) {
105
+ const S1 = (rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25)) >>> 0;
106
+ const ch = (e & f ^ ~e & g) >>> 0;
107
+ const temp1 = h + S1 + ch + K[i] + w[i] >>> 0;
108
+ const temp2 = ((rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22)) >>> 0) + ((a & b ^ a & c ^ b & c) >>> 0) >>> 0;
109
+ h = g;
110
+ g = f;
111
+ f = e;
112
+ e = d + temp1 >>> 0;
113
+ d = c;
114
+ c = b;
115
+ b = a;
116
+ a = temp1 + temp2 >>> 0;
117
+ }
118
+ h0 = h0 + a >>> 0;
119
+ h1 = h1 + b >>> 0;
120
+ h2 = h2 + c >>> 0;
121
+ h3 = h3 + d >>> 0;
122
+ h4 = h4 + e >>> 0;
123
+ h5 = h5 + f >>> 0;
124
+ h6 = h6 + g >>> 0;
125
+ h7 = h7 + h >>> 0;
126
+ }
127
+ const result = new Uint8Array(32);
128
+ const rv = new DataView(result.buffer);
129
+ rv.setUint32(0, h0, false);
130
+ rv.setUint32(4, h1, false);
131
+ rv.setUint32(8, h2, false);
132
+ rv.setUint32(12, h3, false);
133
+ rv.setUint32(16, h4, false);
134
+ rv.setUint32(20, h5, false);
135
+ rv.setUint32(24, h6, false);
136
+ rv.setUint32(28, h7, false);
137
+ return result;
138
+ }
139
+ function rotr(x, n) {
140
+ return (x >>> n | x << 32 - n) >>> 0;
141
+ }
142
+ function toHex(bytes) {
143
+ let hex = "";
144
+ for (let i = 0; i < bytes.length; i++) hex += bytes[i].toString(16).padStart(2, "0");
145
+ return hex;
146
+ }
147
+ function toBase64(bytes) {
148
+ let binary = "";
149
+ for (let i = 0; i < bytes.length; i++) binary += String.fromCharCode(bytes[i]);
150
+ return btoa(binary);
151
+ }
152
+ function textToBytes(text) {
153
+ return new TextEncoder().encode(text);
154
+ }
155
+ var Hash = class {
156
+ _data = [];
157
+ _algorithm;
158
+ constructor(algorithm) {
159
+ this._algorithm = algorithm.toLowerCase();
160
+ }
161
+ update(data, _encoding) {
162
+ if (typeof data === "string") this._data.push(textToBytes(data));
163
+ else this._data.push(data);
164
+ return this;
165
+ }
166
+ digest(encoding) {
167
+ const totalLength = this._data.reduce((sum, chunk) => sum + chunk.length, 0);
168
+ const combined = new Uint8Array(totalLength);
169
+ let offset = 0;
170
+ for (const chunk of this._data) {
171
+ combined.set(chunk, offset);
172
+ offset += chunk.length;
173
+ }
174
+ const hashed = this._computeHash(combined);
175
+ switch (encoding) {
176
+ case "hex": return toHex(hashed);
177
+ case "base64": return toBase64(hashed);
178
+ case "buffer":
179
+ case void 0: return hashed;
180
+ default: return toHex(hashed);
181
+ }
182
+ }
183
+ _computeHash(data) {
184
+ switch (this._algorithm) {
185
+ case "sha256":
186
+ case "sha-256": return sha256(data);
187
+ default: return sha256(data);
188
+ }
189
+ }
190
+ };
191
+ /**
192
+ * Create a Hash instance for the given algorithm.
193
+ * Supports SHA-256 natively. Other algorithms fall back to SHA-256.
194
+ */
195
+ function createHash(algorithm) {
196
+ return new Hash(algorithm);
197
+ }
198
+ /**
199
+ * Compute a hash in one shot (Node.js 21+ API).
200
+ * @param algorithm - Hash algorithm (e.g. 'sha256')
201
+ * @param data - Data to hash
202
+ * @param encoding - Output encoding ('hex', 'base64')
203
+ */
204
+ function hash(algorithm, data, encoding = "hex") {
205
+ return createHash(algorithm).update(data).digest(encoding);
206
+ }
207
+ /**
208
+ * Generate a random UUID (v4).
209
+ * Delegates to the browser's built-in crypto.randomUUID().
210
+ */
211
+ function randomUUID() {
212
+ return globalThis.crypto.randomUUID();
213
+ }
214
+ /**
215
+ * Get random bytes.
216
+ * Delegates to the browser's built-in crypto.getRandomValues().
217
+ */
218
+ function randomBytes(size) {
219
+ const bytes = new Uint8Array(size);
220
+ globalThis.crypto.getRandomValues(bytes);
221
+ return bytes;
222
+ }
223
+ var crypto_default = {
224
+ createHash,
225
+ hash,
226
+ randomUUID,
227
+ randomBytes
228
+ };
229
+
230
+ //#endregion
231
+ export { createHash, crypto_default as default, hash, randomBytes, randomUUID };
232
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","names":[],"sources":["../src/crypto.ts"],"sourcesContent":["/**\n * `node:crypto` compatible entry point\n *\n * Provides synchronous hash functions for browser/Worker environments.\n * Uses a pure JavaScript SHA-256 implementation since Web Crypto API is async-only.\n *\n * @module crypto\n */\n\n/**\n * @author kazuya kawaguchi (a.k.a. kazupon)\n * @license MIT\n */\n\n// --- Pure JS SHA-256 implementation ---\n// Based on the FIPS 180-4 specification\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n])\n\nfunction sha256(data: Uint8Array): Uint8Array {\n let h0 = 0x6a09e667\n let h1 = 0xbb67ae85\n let h2 = 0x3c6ef372\n let h3 = 0xa54ff53a\n let h4 = 0x510e527f\n let h5 = 0x9b05688c\n let h6 = 0x1f83d9ab\n let h7 = 0x5be0cd19\n\n // Pre-processing: add padding\n const bitLen = data.length * 8\n const padded = new Uint8Array(Math.ceil((data.length + 9) / 64) * 64)\n padded.set(data)\n padded[data.length] = 0x80\n const view = new DataView(padded.buffer)\n view.setUint32(padded.length - 4, bitLen, false)\n\n const w = new Uint32Array(64)\n\n for (let offset = 0; offset < padded.length; offset += 64) {\n for (let i = 0; i < 16; i++) {\n w[i] = view.getUint32(offset + i * 4, false)\n }\n for (let i = 16; i < 64; i++) {\n const s0 = (rotr(w[i - 15]!, 7) ^ rotr(w[i - 15]!, 18) ^ (w[i - 15]! >>> 3)) >>> 0\n const s1 = (rotr(w[i - 2]!, 17) ^ rotr(w[i - 2]!, 19) ^ (w[i - 2]! >>> 10)) >>> 0\n w[i] = (w[i - 16]! + s0 + w[i - 7]! + s1) >>> 0\n }\n\n let a = h0,\n b = h1,\n c = h2,\n d = h3,\n e = h4,\n f = h5,\n g = h6,\n h = h7\n\n for (let i = 0; i < 64; i++) {\n const S1 = (rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25)) >>> 0\n const ch = ((e & f) ^ (~e & g)) >>> 0\n const temp1 = (h + S1 + ch + K[i]! + w[i]!) >>> 0\n const S0 = (rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22)) >>> 0\n const maj = ((a & b) ^ (a & c) ^ (b & c)) >>> 0\n const temp2 = (S0 + maj) >>> 0\n\n h = g\n g = f\n f = e\n e = (d + temp1) >>> 0\n d = c\n c = b\n b = a\n a = (temp1 + temp2) >>> 0\n }\n\n h0 = (h0 + a) >>> 0\n h1 = (h1 + b) >>> 0\n h2 = (h2 + c) >>> 0\n h3 = (h3 + d) >>> 0\n h4 = (h4 + e) >>> 0\n h5 = (h5 + f) >>> 0\n h6 = (h6 + g) >>> 0\n h7 = (h7 + h) >>> 0\n }\n\n const result = new Uint8Array(32)\n const rv = new DataView(result.buffer)\n rv.setUint32(0, h0, false)\n rv.setUint32(4, h1, false)\n rv.setUint32(8, h2, false)\n rv.setUint32(12, h3, false)\n rv.setUint32(16, h4, false)\n rv.setUint32(20, h5, false)\n rv.setUint32(24, h6, false)\n rv.setUint32(28, h7, false)\n return result\n}\n\nfunction rotr(x: number, n: number): number {\n return ((x >>> n) | (x << (32 - n))) >>> 0\n}\n\n// --- Encoding utilities ---\n\nfunction toHex(bytes: Uint8Array): string {\n let hex = ''\n for (let i = 0; i < bytes.length; i++) {\n hex += bytes[i]!.toString(16).padStart(2, '0')\n }\n return hex\n}\n\nfunction toBase64(bytes: Uint8Array): string {\n let binary = ''\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]!)\n }\n return btoa(binary)\n}\n\nfunction textToBytes(text: string): Uint8Array {\n return new TextEncoder().encode(text)\n}\n\n// --- Hash class (createHash API) ---\n\nclass Hash {\n private _data: Uint8Array[] = []\n private _algorithm: string\n\n constructor(algorithm: string) {\n this._algorithm = algorithm.toLowerCase()\n }\n\n update(data: string | Uint8Array, _encoding?: string): this {\n if (typeof data === 'string') {\n this._data.push(textToBytes(data))\n } else {\n this._data.push(data)\n }\n return this\n }\n\n digest(encoding?: string): string | Uint8Array {\n // Concatenate all data\n const totalLength = this._data.reduce((sum, chunk) => sum + chunk.length, 0)\n const combined = new Uint8Array(totalLength)\n let offset = 0\n for (const chunk of this._data) {\n combined.set(chunk, offset)\n offset += chunk.length\n }\n\n const hashed = this._computeHash(combined)\n\n switch (encoding) {\n case 'hex':\n return toHex(hashed)\n case 'base64':\n return toBase64(hashed)\n case 'buffer':\n case undefined:\n return hashed\n default:\n return toHex(hashed)\n }\n }\n\n private _computeHash(data: Uint8Array): Uint8Array {\n switch (this._algorithm) {\n case 'sha256':\n case 'sha-256':\n return sha256(data)\n // For unsupported algorithms (md4, md5, sha1, sha512),\n // fall back to sha256 — the hash won't match Node.js output\n // but will produce a consistent, unique digest for the same input.\n default:\n return sha256(data)\n }\n }\n}\n\n// --- Public API ---\n\n/**\n * Create a Hash instance for the given algorithm.\n * Supports SHA-256 natively. Other algorithms fall back to SHA-256.\n */\nexport function createHash(algorithm: string): Hash {\n return new Hash(algorithm)\n}\n\n/**\n * Compute a hash in one shot (Node.js 21+ API).\n * @param algorithm - Hash algorithm (e.g. 'sha256')\n * @param data - Data to hash\n * @param encoding - Output encoding ('hex', 'base64')\n */\nexport function hash(\n algorithm: string,\n data: string | Uint8Array,\n encoding: string = 'hex'\n): string {\n return createHash(algorithm).update(data).digest(encoding) as string\n}\n\n/**\n * Generate a random UUID (v4).\n * Delegates to the browser's built-in crypto.randomUUID().\n */\nexport function randomUUID(): string {\n return globalThis.crypto.randomUUID()\n}\n\n/**\n * Get random bytes.\n * Delegates to the browser's built-in crypto.getRandomValues().\n */\nexport function randomBytes(size: number): Uint8Array {\n const bytes = new Uint8Array(size)\n globalThis.crypto.getRandomValues(bytes)\n return bytes\n}\n\nexport default {\n createHash,\n hash,\n randomUUID,\n randomBytes\n}\n"],"mappings":"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"}
package/dist/dns.d.ts ADDED
@@ -0,0 +1,74 @@
1
+ //#region src/dns.d.ts
2
+ /**
3
+ * `node:dns` compatible entry point
4
+ *
5
+ * All APIs are stubs since DNS resolution is not available in browsers.
6
+ * Callback-based APIs invoke the callback asynchronously with stub values.
7
+ * Promise-based APIs resolve with stub values.
8
+ *
9
+ * @module dns
10
+ */
11
+ /**
12
+ * @author kazuya kawaguchi (a.k.a. kazupon)
13
+ * @license MIT
14
+ */
15
+ declare const NODATA = "ENODATA";
16
+ declare const FORMERR = "EFORMERR";
17
+ declare const SERVFAIL = "ESERVFAIL";
18
+ declare const NOTFOUND = "ENOTFOUND";
19
+ declare const NOTIMP = "ENOTIMP";
20
+ declare const REFUSED = "EREFUSED";
21
+ declare const BADQUERY = "EBADQUERY";
22
+ declare const BADNAME = "EBADNAME";
23
+ declare const BADFAMILY = "EBADFAMILY";
24
+ declare const BADRESP = "EBADRESP";
25
+ declare const CONNREFUSED = "ECONNREFUSED";
26
+ declare const TIMEOUT = "ETIMEOUT";
27
+ declare const EOF = "EOF";
28
+ declare const FILE = "EFILE";
29
+ declare const NOMEM = "ENOMEM";
30
+ declare const DESTRUCTION = "EDESTRUCTION";
31
+ declare const BADSTR = "EBADSTR";
32
+ declare const BADFLAGS = "EBADFLAGS";
33
+ declare const NONAME = "ENONAME";
34
+ declare const BADHINTS = "EBADHINTS";
35
+ declare const NOTINITIALIZED = "ENOTINITIALIZED";
36
+ declare const LOADIPHLPAPI = "ELOADIPHLPAPI";
37
+ declare const ADDRGETNETWORKPARAMS = "EADDRGETNETWORKPARAMS";
38
+ declare const CANCELLED = "ECANCELLED";
39
+ declare const ADDRCONFIG = 0;
40
+ declare const ALL = 1;
41
+ declare const V4MAPPED = 2;
42
+ type Callback = (...args: unknown[]) => void;
43
+ interface LookupOptions {
44
+ family?: number | string;
45
+ hints?: number;
46
+ all?: boolean;
47
+ verbatim?: boolean;
48
+ order?: string;
49
+ }
50
+ declare function _cbEmpty(_h: string, cb: Callback): void;
51
+ declare function getServers(): string[];
52
+ declare function setServers(_servers: string[]): void;
53
+ declare function getDefaultResultOrder(): string;
54
+ declare function setDefaultResultOrder(order: string): void;
55
+ declare function lookup(_hostname: string, optionsOrCallback?: LookupOptions | Callback, callback?: Callback): void;
56
+ declare function lookupService(_address: string, _port: number, callback: Callback): void;
57
+ declare function resolve(_hostname: string, rrtypeOrCallback?: string | Callback, callback?: Callback): void;
58
+ declare function resolve4(_hostname: string, optionsOrCallback?: object | Callback, callback?: Callback): void;
59
+ declare function resolve6(_hostname: string, optionsOrCallback?: object | Callback, callback?: Callback): void;
60
+ declare function reverse(_ip: string, callback: Callback): void;
61
+ declare class Resolver {
62
+ cancel(): void;
63
+ setLocalAddress(_ipv4: string, _ipv6?: string): void;
64
+ getServers(): string[];
65
+ setServers(_servers: string[]): void;
66
+ resolve(h: string, rOrCb?: string | Callback, cb?: Callback): void;
67
+ resolve4(h: string, oOrCb?: object | Callback, cb?: Callback): void;
68
+ resolve6(h: string, oOrCb?: object | Callback, cb?: Callback): void;
69
+ reverse(ip: string, cb: Callback): void;
70
+ }
71
+ declare const promises: Record<string, unknown>;
72
+ //#endregion
73
+ export { ADDRCONFIG, ADDRGETNETWORKPARAMS, ALL, BADFAMILY, BADFLAGS, BADHINTS, BADNAME, BADQUERY, BADRESP, BADSTR, CANCELLED, CONNREFUSED, DESTRUCTION, EOF, FILE, FORMERR, LOADIPHLPAPI, NODATA, NOMEM, NONAME, NOTFOUND, NOTIMP, NOTINITIALIZED, REFUSED, Resolver, SERVFAIL, TIMEOUT, V4MAPPED, getDefaultResultOrder, getServers, lookup, lookupService, promises, resolve, resolve4, resolve6, _cbEmpty as resolveAny, _cbEmpty as resolveCaa, _cbEmpty as resolveCname, _cbEmpty as resolveMx, _cbEmpty as resolveNaptr, _cbEmpty as resolveNs, _cbEmpty as resolvePtr, _cbEmpty as resolveSoa, _cbEmpty as resolveSrv, _cbEmpty as resolveTlsa, _cbEmpty as resolveTxt, reverse, setDefaultResultOrder, setServers };
74
+ //# sourceMappingURL=dns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dns.d.ts","names":[],"sources":["../src/dns.ts"],"sourcesContent":[],"mappings":";;;;;;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa,cARA,MAAA,GAQS,SAAA;AACT,cARA,OAAA,GAQO,UAAA;AACP,cARA,QAAA,GAQW,WAAA;AACX,cARA,QAAA,GAQO,WAAA;AACP,cARA,MAAA,GAQG,SAAA;AACH,cARA,OAAA,GAQI,UAAA;AACJ,cARA,QAAA,GAQK,WAAA;AACL,cARA,OAAA,GAQW,UAAA;AACX,cARA,SAAA,GAQM,YAAA;AACN,cARA,OAAA,GAQQ,UAAA;AACR,cARA,WAAA,GAQM,cAAA;AACN,cARA,OAAA,GAQQ,UAAA;AACR,cARA,GAAA,GAQc,KAAA;AACd,cARA,IAAA,GAQY,OAAA;AACZ,cARA,KAAA,GAQoB,QAAA;AACpB,cARA,WAAA,GAQS,cAAA;AAET,cATA,MAAA,GASU,SAAA;AACV,cATA,QAAA,GASG,WAAA;AACH,cATA,MAAA,GASQ,SAAA;AAEhB,cAVQ,QAAA,GAUA,WAAA;AAEH,cAXG,cAAA,GAWU,iBAAA;AAgBd,cA1BI,YAAA,GA0BqB,eAAQ;AAyB1B,cAlDH,oBAAA,GAkDa,uBAAA;AAIV,cArDH,SAAA,GAqDa,YAAA;AAEV,cArDH,UAAA,GAqDwB,CAAA;AAIrB,cAxDH,GAAA,GAwDG,CAAqB;AAIrB,cA3DH,QAAA,GA2DS,CAAA;KAzDjB,QAAA,GA2DiB,CAAA,GAAA,IAAA,EAAA,OAAA,EAAA,EAAA,GAAA,IAAA;UAzDZ,aAAA,CAyD4B;EACzB,MAAA,CAAA,EAAA,MAAA,GAAA,MAAA;EAAQ,KAAA,CAAA,EAAA,MAAA;EAcL,GAAA,CAAA,EAAA,OAAA;EAIA,QAAA,CAAA,EAAO,OAAA;EAWP,KAAA,CAAA,EAAA,MAAQ;AAYxB;AA0BA,iBA7GS,QAAA,CA6Gc,EAAwB,EAAA,MAAQ,EAAA,EAAA,EA7GrB,QA6GqB,CAAA,EAAA,IAAA;AAI1C,iBAxFG,UAAA,CAAA,CAwFK,EAAA,MAAA,EAAA;AAQiB,iBA5FtB,UAAA,CA4FsB,QAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA;AAAe,iBA1FrC,qBAAA,CAAA,CA0FqC,EAAA,MAAA;AAGd,iBAzFvB,qBAAA,CAyFuB,KAAA,EAAA,MAAA,CAAA,EAAA,IAAA;AAAe,iBArFtC,MAAA,CAqFsC,SAAA,EAAA,MAAA,EAAA,iBAAA,CAAA,EAnFhC,aAmFgC,GAnFhB,QAmFgB,EAAA,QAAA,CAAA,EAlFzC,QAkFyC,CAAA,EAAA,IAAA;AAGf,iBAvEvB,aAAA,CAuEuB,QAAA,EAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAvEkC,QAuElC,CAAA,EAAA,IAAA;AAAe,iBAnEtC,OAAA,CAmEsC,SAAA,EAAA,MAAA,EAAA,gBAAA,CAAA,EAAA,MAAA,GAjExB,QAiEwB,EAAA,QAAA,CAAA,EAhEzC,QAgEyC,CAAA,EAAA,IAAA;AAG5B,iBA3DV,QAAA,CA2DU,SAAA,EAAA,MAAA,EAAA,iBAAA,CAAA,EAAA,MAAA,GAzDK,QAyDL,EAAA,QAAA,CAAA,EAxDb,QAwDa,CAAA,EAAA,IAAA;AAAQ,iBA/ClB,QAAA,CA+CkB,SAAA,EAAA,MAAA,EAAA,iBAAA,CAAA,EAAA,MAAA,GA7CH,QA6CG,EAAA,QAAA,CAAA,EA5CrB,QA4CqB,CAAA,EAAA,IAAA;iBArBlB,OAAA,wBAA+B;cAIlC,QAAA;;;;;sCAQyB,eAAe;uCAGd,eAAe;uCAGf,eAAe;0BAG5B;;cAuCb,UAsBR"}