almostnode 0.1.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.
- package/LICENSE +21 -0
- package/README.md +731 -0
- package/dist/__sw__.js +394 -0
- package/dist/ai-chatbot-demo-entry.d.ts +6 -0
- package/dist/ai-chatbot-demo-entry.d.ts.map +1 -0
- package/dist/ai-chatbot-demo.d.ts +42 -0
- package/dist/ai-chatbot-demo.d.ts.map +1 -0
- package/dist/assets/runtime-worker-D9x_Ddwz.js +60543 -0
- package/dist/assets/runtime-worker-D9x_Ddwz.js.map +1 -0
- package/dist/convex-app-demo-entry.d.ts +6 -0
- package/dist/convex-app-demo-entry.d.ts.map +1 -0
- package/dist/convex-app-demo.d.ts +68 -0
- package/dist/convex-app-demo.d.ts.map +1 -0
- package/dist/cors-proxy.d.ts +46 -0
- package/dist/cors-proxy.d.ts.map +1 -0
- package/dist/create-runtime.d.ts +42 -0
- package/dist/create-runtime.d.ts.map +1 -0
- package/dist/demo.d.ts +6 -0
- package/dist/demo.d.ts.map +1 -0
- package/dist/dev-server.d.ts +97 -0
- package/dist/dev-server.d.ts.map +1 -0
- package/dist/frameworks/next-dev-server.d.ts +202 -0
- package/dist/frameworks/next-dev-server.d.ts.map +1 -0
- package/dist/frameworks/vite-dev-server.d.ts +85 -0
- package/dist/frameworks/vite-dev-server.d.ts.map +1 -0
- package/dist/index.cjs +14965 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +71 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +14867 -0
- package/dist/index.mjs.map +1 -0
- package/dist/next-demo.d.ts +49 -0
- package/dist/next-demo.d.ts.map +1 -0
- package/dist/npm/index.d.ts +71 -0
- package/dist/npm/index.d.ts.map +1 -0
- package/dist/npm/registry.d.ts +66 -0
- package/dist/npm/registry.d.ts.map +1 -0
- package/dist/npm/resolver.d.ts +52 -0
- package/dist/npm/resolver.d.ts.map +1 -0
- package/dist/npm/tarball.d.ts +29 -0
- package/dist/npm/tarball.d.ts.map +1 -0
- package/dist/runtime-interface.d.ts +90 -0
- package/dist/runtime-interface.d.ts.map +1 -0
- package/dist/runtime.d.ts +103 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/sandbox-helpers.d.ts +43 -0
- package/dist/sandbox-helpers.d.ts.map +1 -0
- package/dist/sandbox-runtime.d.ts +65 -0
- package/dist/sandbox-runtime.d.ts.map +1 -0
- package/dist/server-bridge.d.ts +89 -0
- package/dist/server-bridge.d.ts.map +1 -0
- package/dist/shims/assert.d.ts +51 -0
- package/dist/shims/assert.d.ts.map +1 -0
- package/dist/shims/async_hooks.d.ts +37 -0
- package/dist/shims/async_hooks.d.ts.map +1 -0
- package/dist/shims/buffer.d.ts +20 -0
- package/dist/shims/buffer.d.ts.map +1 -0
- package/dist/shims/child_process-browser.d.ts +92 -0
- package/dist/shims/child_process-browser.d.ts.map +1 -0
- package/dist/shims/child_process.d.ts +93 -0
- package/dist/shims/child_process.d.ts.map +1 -0
- package/dist/shims/chokidar.d.ts +55 -0
- package/dist/shims/chokidar.d.ts.map +1 -0
- package/dist/shims/cluster.d.ts +52 -0
- package/dist/shims/cluster.d.ts.map +1 -0
- package/dist/shims/crypto.d.ts +122 -0
- package/dist/shims/crypto.d.ts.map +1 -0
- package/dist/shims/dgram.d.ts +34 -0
- package/dist/shims/dgram.d.ts.map +1 -0
- package/dist/shims/diagnostics_channel.d.ts +80 -0
- package/dist/shims/diagnostics_channel.d.ts.map +1 -0
- package/dist/shims/dns.d.ts +87 -0
- package/dist/shims/dns.d.ts.map +1 -0
- package/dist/shims/domain.d.ts +25 -0
- package/dist/shims/domain.d.ts.map +1 -0
- package/dist/shims/esbuild.d.ts +105 -0
- package/dist/shims/esbuild.d.ts.map +1 -0
- package/dist/shims/events.d.ts +37 -0
- package/dist/shims/events.d.ts.map +1 -0
- package/dist/shims/fs.d.ts +115 -0
- package/dist/shims/fs.d.ts.map +1 -0
- package/dist/shims/fsevents.d.ts +67 -0
- package/dist/shims/fsevents.d.ts.map +1 -0
- package/dist/shims/http.d.ts +217 -0
- package/dist/shims/http.d.ts.map +1 -0
- package/dist/shims/http2.d.ts +81 -0
- package/dist/shims/http2.d.ts.map +1 -0
- package/dist/shims/https.d.ts +36 -0
- package/dist/shims/https.d.ts.map +1 -0
- package/dist/shims/inspector.d.ts +25 -0
- package/dist/shims/inspector.d.ts.map +1 -0
- package/dist/shims/module.d.ts +22 -0
- package/dist/shims/module.d.ts.map +1 -0
- package/dist/shims/net.d.ts +100 -0
- package/dist/shims/net.d.ts.map +1 -0
- package/dist/shims/os.d.ts +159 -0
- package/dist/shims/os.d.ts.map +1 -0
- package/dist/shims/path.d.ts +72 -0
- package/dist/shims/path.d.ts.map +1 -0
- package/dist/shims/perf_hooks.d.ts +50 -0
- package/dist/shims/perf_hooks.d.ts.map +1 -0
- package/dist/shims/process.d.ts +93 -0
- package/dist/shims/process.d.ts.map +1 -0
- package/dist/shims/querystring.d.ts +23 -0
- package/dist/shims/querystring.d.ts.map +1 -0
- package/dist/shims/readdirp.d.ts +52 -0
- package/dist/shims/readdirp.d.ts.map +1 -0
- package/dist/shims/readline.d.ts +62 -0
- package/dist/shims/readline.d.ts.map +1 -0
- package/dist/shims/rollup.d.ts +34 -0
- package/dist/shims/rollup.d.ts.map +1 -0
- package/dist/shims/sentry.d.ts +163 -0
- package/dist/shims/sentry.d.ts.map +1 -0
- package/dist/shims/stream.d.ts +181 -0
- package/dist/shims/stream.d.ts.map +1 -0
- package/dist/shims/tls.d.ts +53 -0
- package/dist/shims/tls.d.ts.map +1 -0
- package/dist/shims/tty.d.ts +30 -0
- package/dist/shims/tty.d.ts.map +1 -0
- package/dist/shims/url.d.ts +64 -0
- package/dist/shims/url.d.ts.map +1 -0
- package/dist/shims/util.d.ts +106 -0
- package/dist/shims/util.d.ts.map +1 -0
- package/dist/shims/v8.d.ts +73 -0
- package/dist/shims/v8.d.ts.map +1 -0
- package/dist/shims/vfs-adapter.d.ts +126 -0
- package/dist/shims/vfs-adapter.d.ts.map +1 -0
- package/dist/shims/vm.d.ts +45 -0
- package/dist/shims/vm.d.ts.map +1 -0
- package/dist/shims/worker_threads.d.ts +66 -0
- package/dist/shims/worker_threads.d.ts.map +1 -0
- package/dist/shims/ws.d.ts +66 -0
- package/dist/shims/ws.d.ts.map +1 -0
- package/dist/shims/zlib.d.ts +161 -0
- package/dist/shims/zlib.d.ts.map +1 -0
- package/dist/transform.d.ts +24 -0
- package/dist/transform.d.ts.map +1 -0
- package/dist/virtual-fs.d.ts +226 -0
- package/dist/virtual-fs.d.ts.map +1 -0
- package/dist/vite-demo.d.ts +35 -0
- package/dist/vite-demo.d.ts.map +1 -0
- package/dist/vite-sw.js +132 -0
- package/dist/worker/runtime-worker.d.ts +8 -0
- package/dist/worker/runtime-worker.d.ts.map +1 -0
- package/dist/worker-runtime.d.ts +50 -0
- package/dist/worker-runtime.d.ts.map +1 -0
- package/package.json +85 -0
- package/src/ai-chatbot-demo-entry.ts +244 -0
- package/src/ai-chatbot-demo.ts +509 -0
- package/src/convex-app-demo-entry.ts +1107 -0
- package/src/convex-app-demo.ts +1316 -0
- package/src/cors-proxy.ts +81 -0
- package/src/create-runtime.ts +147 -0
- package/src/demo.ts +304 -0
- package/src/dev-server.ts +274 -0
- package/src/frameworks/next-dev-server.ts +2224 -0
- package/src/frameworks/vite-dev-server.ts +702 -0
- package/src/index.ts +101 -0
- package/src/next-demo.ts +1784 -0
- package/src/npm/index.ts +347 -0
- package/src/npm/registry.ts +152 -0
- package/src/npm/resolver.ts +385 -0
- package/src/npm/tarball.ts +209 -0
- package/src/runtime-interface.ts +103 -0
- package/src/runtime.ts +1046 -0
- package/src/sandbox-helpers.ts +173 -0
- package/src/sandbox-runtime.ts +252 -0
- package/src/server-bridge.ts +426 -0
- package/src/shims/assert.ts +664 -0
- package/src/shims/async_hooks.ts +86 -0
- package/src/shims/buffer.ts +75 -0
- package/src/shims/child_process-browser.ts +217 -0
- package/src/shims/child_process.ts +463 -0
- package/src/shims/chokidar.ts +313 -0
- package/src/shims/cluster.ts +67 -0
- package/src/shims/crypto.ts +830 -0
- package/src/shims/dgram.ts +47 -0
- package/src/shims/diagnostics_channel.ts +196 -0
- package/src/shims/dns.ts +172 -0
- package/src/shims/domain.ts +58 -0
- package/src/shims/esbuild.ts +805 -0
- package/src/shims/events.ts +195 -0
- package/src/shims/fs.ts +803 -0
- package/src/shims/fsevents.ts +63 -0
- package/src/shims/http.ts +904 -0
- package/src/shims/http2.ts +96 -0
- package/src/shims/https.ts +86 -0
- package/src/shims/inspector.ts +30 -0
- package/src/shims/module.ts +82 -0
- package/src/shims/net.ts +359 -0
- package/src/shims/os.ts +195 -0
- package/src/shims/path.ts +199 -0
- package/src/shims/perf_hooks.ts +92 -0
- package/src/shims/process.ts +346 -0
- package/src/shims/querystring.ts +97 -0
- package/src/shims/readdirp.ts +228 -0
- package/src/shims/readline.ts +110 -0
- package/src/shims/rollup.ts +80 -0
- package/src/shims/sentry.ts +133 -0
- package/src/shims/stream.ts +1126 -0
- package/src/shims/tls.ts +95 -0
- package/src/shims/tty.ts +64 -0
- package/src/shims/url.ts +171 -0
- package/src/shims/util.ts +312 -0
- package/src/shims/v8.ts +113 -0
- package/src/shims/vfs-adapter.ts +402 -0
- package/src/shims/vm.ts +83 -0
- package/src/shims/worker_threads.ts +111 -0
- package/src/shims/ws.ts +382 -0
- package/src/shims/zlib.ts +289 -0
- package/src/transform.ts +313 -0
- package/src/types/external.d.ts +67 -0
- package/src/virtual-fs.ts +903 -0
- package/src/vite-demo.ts +577 -0
- package/src/worker/runtime-worker.ts +128 -0
- package/src/worker-runtime.ts +145 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* http2 shim - HTTP/2 is not available in browser
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { EventEmitter } from './events';
|
|
6
|
+
|
|
7
|
+
export class Http2Session extends EventEmitter {
|
|
8
|
+
close(_callback?: () => void): void {
|
|
9
|
+
if (_callback) setTimeout(_callback, 0);
|
|
10
|
+
}
|
|
11
|
+
destroy(_error?: Error, _code?: number): void {}
|
|
12
|
+
get destroyed(): boolean { return false; }
|
|
13
|
+
get encrypted(): boolean { return false; }
|
|
14
|
+
get closed(): boolean { return false; }
|
|
15
|
+
ping(_callback: (err: Error | null, duration: number, payload: Buffer) => void): boolean {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
ref(): void {}
|
|
19
|
+
unref(): void {}
|
|
20
|
+
setTimeout(_msecs: number, _callback?: () => void): void {}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export class ClientHttp2Session extends Http2Session {}
|
|
24
|
+
export class ServerHttp2Session extends Http2Session {}
|
|
25
|
+
|
|
26
|
+
export class Http2Stream extends EventEmitter {
|
|
27
|
+
close(_code?: number, _callback?: () => void): void {}
|
|
28
|
+
get id(): number { return 0; }
|
|
29
|
+
get pending(): boolean { return false; }
|
|
30
|
+
get destroyed(): boolean { return false; }
|
|
31
|
+
get closed(): boolean { return false; }
|
|
32
|
+
priority(_options: unknown): void {}
|
|
33
|
+
setTimeout(_msecs: number, _callback?: () => void): void {}
|
|
34
|
+
end(_data?: unknown, _encoding?: string, _callback?: () => void): void {}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export class Http2ServerRequest extends EventEmitter {}
|
|
38
|
+
export class Http2ServerResponse extends EventEmitter {
|
|
39
|
+
writeHead(_statusCode: number, _headers?: object): this { return this; }
|
|
40
|
+
end(_data?: unknown): void {}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function createServer(_options?: unknown, _onRequestHandler?: unknown): EventEmitter {
|
|
44
|
+
return new EventEmitter();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function createSecureServer(_options?: unknown, _onRequestHandler?: unknown): EventEmitter {
|
|
48
|
+
return new EventEmitter();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function connect(_authority: string, _options?: unknown, _listener?: () => void): ClientHttp2Session {
|
|
52
|
+
return new ClientHttp2Session();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export const constants = {
|
|
56
|
+
NGHTTP2_SESSION_SERVER: 0,
|
|
57
|
+
NGHTTP2_SESSION_CLIENT: 1,
|
|
58
|
+
HTTP2_HEADER_STATUS: ':status',
|
|
59
|
+
HTTP2_HEADER_METHOD: ':method',
|
|
60
|
+
HTTP2_HEADER_AUTHORITY: ':authority',
|
|
61
|
+
HTTP2_HEADER_SCHEME: ':scheme',
|
|
62
|
+
HTTP2_HEADER_PATH: ':path',
|
|
63
|
+
HTTP_STATUS_OK: 200,
|
|
64
|
+
HTTP_STATUS_NOT_FOUND: 404,
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export function getDefaultSettings(): object {
|
|
68
|
+
return {};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function getPackedSettings(_settings?: object): Buffer {
|
|
72
|
+
return Buffer.from('');
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function getUnpackedSettings(_buf: Buffer): object {
|
|
76
|
+
return {};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export const sensitiveHeaders = Symbol('sensitiveHeaders');
|
|
80
|
+
|
|
81
|
+
export default {
|
|
82
|
+
Http2Session,
|
|
83
|
+
ClientHttp2Session,
|
|
84
|
+
ServerHttp2Session,
|
|
85
|
+
Http2Stream,
|
|
86
|
+
Http2ServerRequest,
|
|
87
|
+
Http2ServerResponse,
|
|
88
|
+
createServer,
|
|
89
|
+
createSecureServer,
|
|
90
|
+
connect,
|
|
91
|
+
constants,
|
|
92
|
+
getDefaultSettings,
|
|
93
|
+
getPackedSettings,
|
|
94
|
+
getUnpackedSettings,
|
|
95
|
+
sensitiveHeaders,
|
|
96
|
+
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js https module shim
|
|
3
|
+
* Re-exports http module functionality with https protocol default
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
Server,
|
|
8
|
+
IncomingMessage,
|
|
9
|
+
ServerResponse,
|
|
10
|
+
ClientRequest,
|
|
11
|
+
createServer,
|
|
12
|
+
STATUS_CODES,
|
|
13
|
+
METHODS,
|
|
14
|
+
getServer,
|
|
15
|
+
getAllServers,
|
|
16
|
+
setServerListenCallback,
|
|
17
|
+
setServerCloseCallback,
|
|
18
|
+
_createClientRequest,
|
|
19
|
+
Agent,
|
|
20
|
+
globalAgent,
|
|
21
|
+
} from './http';
|
|
22
|
+
|
|
23
|
+
import type { RequestOptions, AgentOptions } from './http';
|
|
24
|
+
|
|
25
|
+
// Re-export all http types and classes
|
|
26
|
+
export {
|
|
27
|
+
Server,
|
|
28
|
+
IncomingMessage,
|
|
29
|
+
ServerResponse,
|
|
30
|
+
ClientRequest,
|
|
31
|
+
createServer,
|
|
32
|
+
STATUS_CODES,
|
|
33
|
+
METHODS,
|
|
34
|
+
getServer,
|
|
35
|
+
getAllServers,
|
|
36
|
+
setServerListenCallback,
|
|
37
|
+
setServerCloseCallback,
|
|
38
|
+
Agent,
|
|
39
|
+
globalAgent,
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export type { AgentOptions };
|
|
43
|
+
|
|
44
|
+
export type { RequestOptions };
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Create an HTTPS client request
|
|
48
|
+
*/
|
|
49
|
+
export function request(
|
|
50
|
+
urlOrOptions: string | URL | RequestOptions,
|
|
51
|
+
optionsOrCallback?: RequestOptions | ((res: IncomingMessage) => void),
|
|
52
|
+
callback?: (res: IncomingMessage) => void
|
|
53
|
+
): ClientRequest {
|
|
54
|
+
return _createClientRequest(urlOrOptions, optionsOrCallback, callback, 'https');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Make an HTTPS GET request
|
|
59
|
+
*/
|
|
60
|
+
export function get(
|
|
61
|
+
urlOrOptions: string | URL | RequestOptions,
|
|
62
|
+
optionsOrCallback?: RequestOptions | ((res: IncomingMessage) => void),
|
|
63
|
+
callback?: (res: IncomingMessage) => void
|
|
64
|
+
): ClientRequest {
|
|
65
|
+
const req = _createClientRequest(urlOrOptions, optionsOrCallback, callback, 'https');
|
|
66
|
+
req.end();
|
|
67
|
+
return req;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export default {
|
|
71
|
+
Server,
|
|
72
|
+
IncomingMessage,
|
|
73
|
+
ServerResponse,
|
|
74
|
+
ClientRequest,
|
|
75
|
+
createServer,
|
|
76
|
+
request,
|
|
77
|
+
get,
|
|
78
|
+
STATUS_CODES,
|
|
79
|
+
METHODS,
|
|
80
|
+
getServer,
|
|
81
|
+
getAllServers,
|
|
82
|
+
setServerListenCallback,
|
|
83
|
+
setServerCloseCallback,
|
|
84
|
+
Agent,
|
|
85
|
+
globalAgent,
|
|
86
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* inspector shim - V8 inspector is not available in browser
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { EventEmitter } from './events';
|
|
6
|
+
|
|
7
|
+
export class Session extends EventEmitter {
|
|
8
|
+
connect(): void {}
|
|
9
|
+
connectToMainThread(): void {}
|
|
10
|
+
disconnect(): void {}
|
|
11
|
+
post(_method: string, _params?: object, _callback?: (err: Error | null, result?: object) => void): void {
|
|
12
|
+
if (_callback) setTimeout(() => _callback(null, {}), 0);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function open(_port?: number, _host?: string, _wait?: boolean): void {}
|
|
17
|
+
export function close(): void {}
|
|
18
|
+
export function url(): string | undefined { return undefined; }
|
|
19
|
+
export function waitForDebugger(): void {}
|
|
20
|
+
|
|
21
|
+
export const console = globalThis.console;
|
|
22
|
+
|
|
23
|
+
export default {
|
|
24
|
+
Session,
|
|
25
|
+
open,
|
|
26
|
+
close,
|
|
27
|
+
url,
|
|
28
|
+
waitForDebugger,
|
|
29
|
+
console,
|
|
30
|
+
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js module shim
|
|
3
|
+
* Provides basic module system functionality
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import * as pathShim from './path';
|
|
7
|
+
|
|
8
|
+
export function createRequire(filename: string): (id: string) => unknown {
|
|
9
|
+
// Return a require function that can be used by modules
|
|
10
|
+
return function require(id: string): unknown {
|
|
11
|
+
throw new Error(`Cannot find module '${id}' from '${filename}'`);
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const builtinModules = [
|
|
16
|
+
'assert',
|
|
17
|
+
'buffer',
|
|
18
|
+
'child_process',
|
|
19
|
+
'cluster',
|
|
20
|
+
'console',
|
|
21
|
+
'constants',
|
|
22
|
+
'crypto',
|
|
23
|
+
'dgram',
|
|
24
|
+
'dns',
|
|
25
|
+
'domain',
|
|
26
|
+
'events',
|
|
27
|
+
'fs',
|
|
28
|
+
'http',
|
|
29
|
+
'https',
|
|
30
|
+
'module',
|
|
31
|
+
'net',
|
|
32
|
+
'os',
|
|
33
|
+
'path',
|
|
34
|
+
'perf_hooks',
|
|
35
|
+
'process',
|
|
36
|
+
'punycode',
|
|
37
|
+
'querystring',
|
|
38
|
+
'readline',
|
|
39
|
+
'repl',
|
|
40
|
+
'stream',
|
|
41
|
+
'string_decoder',
|
|
42
|
+
'sys',
|
|
43
|
+
'timers',
|
|
44
|
+
'tls',
|
|
45
|
+
'tty',
|
|
46
|
+
'url',
|
|
47
|
+
'util',
|
|
48
|
+
'v8',
|
|
49
|
+
'vm',
|
|
50
|
+
'worker_threads',
|
|
51
|
+
'zlib',
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
export function isBuiltin(moduleName: string): boolean {
|
|
55
|
+
// Strip node: prefix if present
|
|
56
|
+
const name = moduleName.startsWith('node:') ? moduleName.slice(5) : moduleName;
|
|
57
|
+
return builtinModules.includes(name);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export const _cache: Record<string, unknown> = {};
|
|
61
|
+
export const _extensions: Record<string, unknown> = {
|
|
62
|
+
'.js': () => {},
|
|
63
|
+
'.json': () => {},
|
|
64
|
+
'.node': () => {},
|
|
65
|
+
};
|
|
66
|
+
export const _pathCache: Record<string, string> = {};
|
|
67
|
+
|
|
68
|
+
export function syncBuiltinESMExports(): void {
|
|
69
|
+
// No-op in browser
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export const Module = {
|
|
73
|
+
createRequire,
|
|
74
|
+
builtinModules,
|
|
75
|
+
isBuiltin,
|
|
76
|
+
_cache,
|
|
77
|
+
_extensions,
|
|
78
|
+
_pathCache,
|
|
79
|
+
syncBuiltinESMExports,
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export default Module;
|
package/src/shims/net.ts
ADDED
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js net module shim
|
|
3
|
+
* Basic Socket and Server classes for virtual networking
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { EventEmitter, EventListener } from './events';
|
|
7
|
+
import { Duplex, Buffer } from './stream';
|
|
8
|
+
|
|
9
|
+
export interface AddressInfo {
|
|
10
|
+
address: string;
|
|
11
|
+
family: string;
|
|
12
|
+
port: number;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface SocketOptions {
|
|
16
|
+
allowHalfOpen?: boolean;
|
|
17
|
+
readable?: boolean;
|
|
18
|
+
writable?: boolean;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface ServerOptions {
|
|
22
|
+
allowHalfOpen?: boolean;
|
|
23
|
+
pauseOnConnect?: boolean;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface ListenOptions {
|
|
27
|
+
port?: number;
|
|
28
|
+
host?: string;
|
|
29
|
+
backlog?: number;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Virtual Socket implementation
|
|
34
|
+
*/
|
|
35
|
+
export class Socket extends Duplex {
|
|
36
|
+
private _connecting: boolean = false;
|
|
37
|
+
private _connected: boolean = false;
|
|
38
|
+
private _destroyed: boolean = false;
|
|
39
|
+
private _remoteAddress: string = '';
|
|
40
|
+
private _remotePort: number = 0;
|
|
41
|
+
private _localAddress: string = '127.0.0.1';
|
|
42
|
+
private _localPort: number = 0;
|
|
43
|
+
|
|
44
|
+
localAddress: string = '127.0.0.1';
|
|
45
|
+
localPort: number = 0;
|
|
46
|
+
remoteAddress?: string;
|
|
47
|
+
remotePort?: number;
|
|
48
|
+
remoteFamily?: string;
|
|
49
|
+
connecting: boolean = false;
|
|
50
|
+
destroyed: boolean = false;
|
|
51
|
+
readyState: string = 'closed';
|
|
52
|
+
|
|
53
|
+
constructor(options?: SocketOptions) {
|
|
54
|
+
super();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
connect(
|
|
58
|
+
portOrOptions: number | { port: number; host?: string },
|
|
59
|
+
hostOrCallback?: string | (() => void),
|
|
60
|
+
callback?: () => void
|
|
61
|
+
): this {
|
|
62
|
+
let port: number;
|
|
63
|
+
let host: string = '127.0.0.1';
|
|
64
|
+
let cb: (() => void) | undefined;
|
|
65
|
+
|
|
66
|
+
if (typeof portOrOptions === 'number') {
|
|
67
|
+
port = portOrOptions;
|
|
68
|
+
if (typeof hostOrCallback === 'string') {
|
|
69
|
+
host = hostOrCallback;
|
|
70
|
+
cb = callback;
|
|
71
|
+
} else {
|
|
72
|
+
cb = hostOrCallback;
|
|
73
|
+
}
|
|
74
|
+
} else {
|
|
75
|
+
port = portOrOptions.port;
|
|
76
|
+
host = portOrOptions.host || '127.0.0.1';
|
|
77
|
+
cb = typeof hostOrCallback === 'function' ? hostOrCallback : callback;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
this._connecting = true;
|
|
81
|
+
this.connecting = true;
|
|
82
|
+
this._remoteAddress = host;
|
|
83
|
+
this._remotePort = port;
|
|
84
|
+
this.remoteAddress = host;
|
|
85
|
+
this.remotePort = port;
|
|
86
|
+
this.remoteFamily = 'IPv4';
|
|
87
|
+
this.readyState = 'opening';
|
|
88
|
+
|
|
89
|
+
// Simulate async connection
|
|
90
|
+
queueMicrotask(() => {
|
|
91
|
+
this._connecting = false;
|
|
92
|
+
this._connected = true;
|
|
93
|
+
this.connecting = false;
|
|
94
|
+
this.readyState = 'open';
|
|
95
|
+
this.emit('connect');
|
|
96
|
+
if (cb) cb();
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
return this;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
address(): AddressInfo | null {
|
|
103
|
+
if (!this._connected) return null;
|
|
104
|
+
return {
|
|
105
|
+
address: this._localAddress,
|
|
106
|
+
family: 'IPv4',
|
|
107
|
+
port: this._localPort,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
setEncoding(encoding: BufferEncoding): this {
|
|
112
|
+
return this;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
setTimeout(timeout: number, callback?: () => void): this {
|
|
116
|
+
if (callback) {
|
|
117
|
+
this.once('timeout', callback);
|
|
118
|
+
}
|
|
119
|
+
return this;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
setNoDelay(noDelay?: boolean): this {
|
|
123
|
+
return this;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
setKeepAlive(enable?: boolean, initialDelay?: number): this {
|
|
127
|
+
return this;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
ref(): this {
|
|
131
|
+
return this;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
unref(): this {
|
|
135
|
+
return this;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
destroy(error?: Error): this {
|
|
139
|
+
if (this._destroyed) return this;
|
|
140
|
+
|
|
141
|
+
this._destroyed = true;
|
|
142
|
+
this._connected = false;
|
|
143
|
+
this.destroyed = true;
|
|
144
|
+
this.readyState = 'closed';
|
|
145
|
+
|
|
146
|
+
if (error) {
|
|
147
|
+
this.emit('error', error);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
queueMicrotask(() => {
|
|
151
|
+
this.emit('close', !!error);
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
return this;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Internal: simulate receiving data from remote
|
|
158
|
+
_receiveData(data: Buffer | string): void {
|
|
159
|
+
const buffer = typeof data === 'string' ? Buffer.from(data) : data;
|
|
160
|
+
this.push(buffer);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Internal: signal end of remote data
|
|
164
|
+
_receiveEnd(): void {
|
|
165
|
+
this.push(null);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Virtual Server implementation
|
|
171
|
+
*/
|
|
172
|
+
export class Server extends EventEmitter {
|
|
173
|
+
private _listening: boolean = false;
|
|
174
|
+
private _address: AddressInfo | null = null;
|
|
175
|
+
private _connections: Set<Socket> = new Set();
|
|
176
|
+
private _maxConnections: number = Infinity;
|
|
177
|
+
|
|
178
|
+
listening: boolean = false;
|
|
179
|
+
maxConnections?: number;
|
|
180
|
+
|
|
181
|
+
constructor(
|
|
182
|
+
optionsOrConnectionListener?: ServerOptions | ((socket: Socket) => void),
|
|
183
|
+
connectionListener?: (socket: Socket) => void
|
|
184
|
+
) {
|
|
185
|
+
super();
|
|
186
|
+
|
|
187
|
+
let listener: ((socket: Socket) => void) | undefined;
|
|
188
|
+
|
|
189
|
+
if (typeof optionsOrConnectionListener === 'function') {
|
|
190
|
+
listener = optionsOrConnectionListener;
|
|
191
|
+
} else {
|
|
192
|
+
listener = connectionListener;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
if (listener) {
|
|
196
|
+
this.on('connection', listener as EventListener);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
listen(
|
|
201
|
+
portOrOptions?: number | ListenOptions,
|
|
202
|
+
hostOrCallback?: string | number | (() => void),
|
|
203
|
+
backlogOrCallback?: number | (() => void),
|
|
204
|
+
callback?: () => void
|
|
205
|
+
): this {
|
|
206
|
+
let port: number = 0;
|
|
207
|
+
let host: string = '0.0.0.0';
|
|
208
|
+
let cb: (() => void) | undefined;
|
|
209
|
+
|
|
210
|
+
if (typeof portOrOptions === 'number') {
|
|
211
|
+
port = portOrOptions;
|
|
212
|
+
|
|
213
|
+
if (typeof hostOrCallback === 'string') {
|
|
214
|
+
host = hostOrCallback;
|
|
215
|
+
if (typeof backlogOrCallback === 'function') {
|
|
216
|
+
cb = backlogOrCallback;
|
|
217
|
+
} else {
|
|
218
|
+
cb = callback;
|
|
219
|
+
}
|
|
220
|
+
} else if (typeof hostOrCallback === 'function') {
|
|
221
|
+
cb = hostOrCallback;
|
|
222
|
+
} else if (typeof hostOrCallback === 'number') {
|
|
223
|
+
// backlog
|
|
224
|
+
cb = typeof backlogOrCallback === 'function' ? backlogOrCallback : callback;
|
|
225
|
+
} else {
|
|
226
|
+
// hostOrCallback is undefined, check if callback is in third position
|
|
227
|
+
if (typeof backlogOrCallback === 'function') {
|
|
228
|
+
cb = backlogOrCallback;
|
|
229
|
+
} else if (typeof callback === 'function') {
|
|
230
|
+
cb = callback;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
} else if (portOrOptions) {
|
|
234
|
+
port = portOrOptions.port || 0;
|
|
235
|
+
host = portOrOptions.host || '0.0.0.0';
|
|
236
|
+
cb = typeof hostOrCallback === 'function' ? hostOrCallback : callback;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// Assign random port if 0
|
|
240
|
+
if (port === 0) {
|
|
241
|
+
port = 3000 + Math.floor(Math.random() * 1000);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
this._address = {
|
|
245
|
+
address: host,
|
|
246
|
+
family: 'IPv4',
|
|
247
|
+
port,
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
this._listening = true;
|
|
251
|
+
this.listening = true;
|
|
252
|
+
|
|
253
|
+
queueMicrotask(() => {
|
|
254
|
+
this.emit('listening');
|
|
255
|
+
if (cb) cb();
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
return this;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
address(): AddressInfo | null {
|
|
262
|
+
return this._address;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
close(callback?: (err?: Error) => void): this {
|
|
266
|
+
this._listening = false;
|
|
267
|
+
this.listening = false;
|
|
268
|
+
|
|
269
|
+
// Close all connections
|
|
270
|
+
for (const socket of this._connections) {
|
|
271
|
+
socket.destroy();
|
|
272
|
+
}
|
|
273
|
+
this._connections.clear();
|
|
274
|
+
|
|
275
|
+
queueMicrotask(() => {
|
|
276
|
+
this.emit('close');
|
|
277
|
+
if (callback) callback();
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
return this;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
getConnections(callback: (err: Error | null, count: number) => void): void {
|
|
284
|
+
callback(null, this._connections.size);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
ref(): this {
|
|
288
|
+
return this;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
unref(): this {
|
|
292
|
+
return this;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
// Internal: handle incoming connection
|
|
296
|
+
_handleConnection(socket: Socket): void {
|
|
297
|
+
if (!this._listening) {
|
|
298
|
+
socket.destroy();
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
this._connections.add(socket);
|
|
303
|
+
|
|
304
|
+
socket.on('close', () => {
|
|
305
|
+
this._connections.delete(socket);
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
this.emit('connection', socket);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
export function createServer(
|
|
313
|
+
optionsOrConnectionListener?: ServerOptions | ((socket: Socket) => void),
|
|
314
|
+
connectionListener?: (socket: Socket) => void
|
|
315
|
+
): Server {
|
|
316
|
+
return new Server(optionsOrConnectionListener, connectionListener);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
export function createConnection(
|
|
320
|
+
portOrOptions: number | { port: number; host?: string },
|
|
321
|
+
hostOrCallback?: string | (() => void),
|
|
322
|
+
callback?: () => void
|
|
323
|
+
): Socket {
|
|
324
|
+
const socket = new Socket();
|
|
325
|
+
return socket.connect(portOrOptions, hostOrCallback as string, callback);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
export const connect = createConnection;
|
|
329
|
+
|
|
330
|
+
export function isIP(input: string): number {
|
|
331
|
+
// Simple IPv4 check
|
|
332
|
+
if (/^(\d{1,3}\.){3}\d{1,3}$/.test(input)) {
|
|
333
|
+
return 4;
|
|
334
|
+
}
|
|
335
|
+
// Simple IPv6 check
|
|
336
|
+
if (/^([0-9a-fA-F]{0,4}:){2,7}[0-9a-fA-F]{0,4}$/.test(input)) {
|
|
337
|
+
return 6;
|
|
338
|
+
}
|
|
339
|
+
return 0;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
export function isIPv4(input: string): boolean {
|
|
343
|
+
return isIP(input) === 4;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
export function isIPv6(input: string): boolean {
|
|
347
|
+
return isIP(input) === 6;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
export default {
|
|
351
|
+
Socket,
|
|
352
|
+
Server,
|
|
353
|
+
createServer,
|
|
354
|
+
createConnection,
|
|
355
|
+
connect,
|
|
356
|
+
isIP,
|
|
357
|
+
isIPv4,
|
|
358
|
+
isIPv6,
|
|
359
|
+
};
|