xbintsc 0.3.8 → 0.3.10
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/README.md +14 -11
- package/README.zh-CN.md +13 -11
- package/dist/src/codegen/generator/calls/invocation.js +3 -0
- package/dist/src/codegen/generator/calls/invocation.js.map +1 -1
- package/dist/src/codegen/generator/context.d.ts +5 -0
- package/dist/src/codegen/generator/context.js +18 -2
- package/dist/src/codegen/generator/context.js.map +1 -1
- package/dist/src/codegen/generator/expressions/primary.js +17 -0
- package/dist/src/codegen/generator/expressions/primary.js.map +1 -1
- package/dist/src/codegen/generator/state.js +3 -0
- package/dist/src/codegen/generator/state.js.map +1 -1
- package/dist/src/codegen/generator/tables.js +3 -0
- package/dist/src/codegen/generator/tables.js.map +1 -1
- package/dist/src/driver/index.d.ts +1 -1
- package/dist/src/driver/index.js +1 -1
- package/dist/src/driver/index.js.map +1 -1
- package/dist/src/driver/paths.d.ts +7 -0
- package/dist/src/driver/paths.js +9 -0
- package/dist/src/driver/paths.js.map +1 -1
- package/dist/src/extensions/node/assert/index.d.ts +10 -0
- package/dist/src/extensions/node/assert/index.js +37 -0
- package/dist/src/extensions/node/assert/index.js.map +1 -0
- package/dist/src/extensions/node/buffer/index.js +16 -0
- package/dist/src/extensions/node/buffer/index.js.map +1 -1
- package/dist/src/extensions/node/dgram/index.js +4 -0
- package/dist/src/extensions/node/dgram/index.js.map +1 -1
- package/dist/src/extensions/node/events/index.js +1 -1
- package/dist/src/extensions/node/events/index.js.map +1 -1
- package/dist/src/extensions/node/fs/index.js +3 -1
- package/dist/src/extensions/node/fs/index.js.map +1 -1
- package/dist/src/extensions/node/fs/streams.d.ts +6 -0
- package/dist/src/extensions/node/fs/streams.js +9 -0
- package/dist/src/extensions/node/fs/streams.js.map +1 -0
- package/dist/src/extensions/node/http/index.js +3 -0
- package/dist/src/extensions/node/http/index.js.map +1 -1
- package/dist/src/extensions/node/index.js +10 -0
- package/dist/src/extensions/node/index.js.map +1 -1
- package/dist/src/extensions/node/net/index.js +7 -0
- package/dist/src/extensions/node/net/index.js.map +1 -1
- package/dist/src/extensions/node/stream/index.js +8 -0
- package/dist/src/extensions/node/stream/index.js.map +1 -1
- package/dist/src/extensions/node/stream-promises/index.d.ts +9 -0
- package/dist/src/extensions/node/stream-promises/index.js +16 -0
- package/dist/src/extensions/node/stream-promises/index.js.map +1 -0
- package/dist/src/extensions/node/test/index.d.ts +10 -0
- package/dist/src/extensions/node/test/index.js +30 -0
- package/dist/src/extensions/node/test/index.js.map +1 -0
- package/dist/src/extensions/node/worker_threads/index.d.ts +10 -0
- package/dist/src/extensions/node/worker_threads/index.js +22 -0
- package/dist/src/extensions/node/worker_threads/index.js.map +1 -0
- package/dist/src/extensions/node/zlib/index.d.ts +8 -0
- package/dist/src/extensions/node/zlib/index.js +15 -0
- package/dist/src/extensions/node/zlib/index.js.map +1 -0
- package/dist/src/extensions/registry.d.ts +6 -0
- package/dist/src/extensions/registry.js.map +1 -1
- package/dist/tests/driver/paths.test.js +11 -1
- package/dist/tests/driver/paths.test.js.map +1 -1
- package/dist/tests/e2e/compile-node.test.js +67 -1
- package/dist/tests/e2e/compile-node.test.js.map +1 -1
- package/dist/tests/e2e/compile.test.js +12 -0
- package/dist/tests/e2e/compile.test.js.map +1 -1
- package/dist/tests/e2e/node-modules.test.js +127 -3
- package/dist/tests/e2e/node-modules.test.js.map +1 -1
- package/package.json +1 -1
- package/runtime/ext_node/assert/assert.c +207 -0
- package/runtime/ext_node/crypto/crypto.c +230 -14
- package/runtime/ext_node/fs/streams.c +31 -0
- package/runtime/ext_node/stream/pipeline.c +147 -0
- package/runtime/ext_node/stream/stream.c +20 -0
- package/runtime/ext_node/test/test.c +102 -0
- package/runtime/ext_node/worker_threads/worker_threads.c +206 -0
- package/runtime/ext_node/zlib/zlib.c +19 -0
- package/runtime/xt_io.c +86 -0
- package/runtime/xt_stdlib/dispatch.inc +9 -1
- package/scripts/package-release.ts +11 -3
- package/src/codegen/generator/calls/invocation.ts +2 -0
- package/src/codegen/generator/context.ts +19 -2
- package/src/codegen/generator/expressions/primary.ts +17 -0
- package/src/codegen/generator/state.ts +3 -0
- package/src/codegen/generator/tables.ts +3 -0
- package/src/driver/index.ts +1 -1
- package/src/driver/paths.ts +14 -0
- package/src/extensions/node/assert/index.ts +44 -0
- package/src/extensions/node/buffer/index.ts +19 -0
- package/src/extensions/node/dgram/index.ts +6 -0
- package/src/extensions/node/events/index.ts +1 -1
- package/src/extensions/node/fs/index.ts +3 -1
- package/src/extensions/node/fs/streams.ts +11 -0
- package/src/extensions/node/http/index.ts +8 -0
- package/src/extensions/node/index.ts +10 -0
- package/src/extensions/node/net/index.ts +10 -0
- package/src/extensions/node/stream/index.ts +10 -0
- package/src/extensions/node/stream-promises/index.ts +18 -0
- package/src/extensions/node/test/index.ts +35 -0
- package/src/extensions/node/worker_threads/index.ts +26 -0
- package/src/extensions/node/zlib/index.ts +17 -0
- package/src/extensions/registry.ts +6 -0
|
@@ -19,6 +19,9 @@ import { osModule } from "./os/index.js";
|
|
|
19
19
|
import { processModule } from "./process/index.js";
|
|
20
20
|
import { bufferModule } from "./buffer/index.js";
|
|
21
21
|
import { streamModule } from "./stream/index.js";
|
|
22
|
+
import { streamPromisesModule } from "./stream-promises/index.js";
|
|
23
|
+
import { zlibModule } from "./zlib/index.js";
|
|
24
|
+
import { workerThreadsModule } from "./worker_threads/index.js";
|
|
22
25
|
import { netModule } from "./net/index.js";
|
|
23
26
|
import { dgramModule } from "./dgram/index.js";
|
|
24
27
|
import { httpModule } from "./http/index.js";
|
|
@@ -28,6 +31,8 @@ import { childProcessModule } from "./child_process/index.js";
|
|
|
28
31
|
import { eventsModule } from "./events/index.js";
|
|
29
32
|
import { utilModule } from "./util/index.js";
|
|
30
33
|
import { querystringModule } from "./querystring/index.js";
|
|
34
|
+
import { assertModule } from "./assert/index.js";
|
|
35
|
+
import { testModule } from "./test/index.js";
|
|
31
36
|
|
|
32
37
|
/** Every Node module the extension currently provides. */
|
|
33
38
|
const modules: readonly NodeModule[] = [
|
|
@@ -38,6 +43,9 @@ const modules: readonly NodeModule[] = [
|
|
|
38
43
|
processModule,
|
|
39
44
|
bufferModule,
|
|
40
45
|
streamModule,
|
|
46
|
+
streamPromisesModule,
|
|
47
|
+
zlibModule,
|
|
48
|
+
workerThreadsModule,
|
|
41
49
|
netModule,
|
|
42
50
|
dgramModule,
|
|
43
51
|
httpModule,
|
|
@@ -47,6 +55,8 @@ const modules: readonly NodeModule[] = [
|
|
|
47
55
|
eventsModule,
|
|
48
56
|
utilModule,
|
|
49
57
|
querystringModule,
|
|
58
|
+
assertModule,
|
|
59
|
+
testModule,
|
|
50
60
|
];
|
|
51
61
|
|
|
52
62
|
export const nodeExtension: Extension = {
|
|
@@ -8,10 +8,20 @@
|
|
|
8
8
|
|
|
9
9
|
import type { NodeModule } from "../module.js";
|
|
10
10
|
import { resolveFrom } from "../module.js";
|
|
11
|
+
import type { ModuleExports } from "../../registry.js";
|
|
12
|
+
|
|
13
|
+
const methods = ["createServer", "connect", "createConnection", "isIP", "isIPv4", "isIPv6"] as const;
|
|
14
|
+
|
|
15
|
+
const exports: ModuleExports = {
|
|
16
|
+
...Object.fromEntries(methods.map((method) => [method, { namespace: "net", method }])),
|
|
17
|
+
Server: { symbol: "xt_net_server_ctor", isConstructor: true },
|
|
18
|
+
Socket: { symbol: "xt_net_socket_ctor", isConstructor: true },
|
|
19
|
+
};
|
|
11
20
|
|
|
12
21
|
export const netModule: NodeModule = {
|
|
13
22
|
name: "net",
|
|
14
23
|
namespace: "net",
|
|
15
24
|
runtimeSources: () => [resolveFrom(import.meta.url, "../../../../runtime/ext_node/net/net.c")],
|
|
16
25
|
builtins: () => ({}),
|
|
26
|
+
exports: () => exports,
|
|
17
27
|
};
|
|
@@ -9,10 +9,20 @@
|
|
|
9
9
|
|
|
10
10
|
import type { NodeModule } from "../module.js";
|
|
11
11
|
import { resolveFrom } from "../module.js";
|
|
12
|
+
import type { ModuleExports } from "../../registry.js";
|
|
13
|
+
|
|
14
|
+
const exports: ModuleExports = {
|
|
15
|
+
Readable: { symbol: "xt_readable_ctor", isConstructor: true },
|
|
16
|
+
Writable: { symbol: "xt_writable_ctor", isConstructor: true },
|
|
17
|
+
Duplex: { symbol: "xt_duplex_ctor", isConstructor: true },
|
|
18
|
+
Transform: { symbol: "xt_transform_ctor", isConstructor: true },
|
|
19
|
+
PassThrough: { symbol: "xt_pass_through_ctor", isConstructor: true },
|
|
20
|
+
};
|
|
12
21
|
|
|
13
22
|
export const streamModule: NodeModule = {
|
|
14
23
|
name: "stream",
|
|
15
24
|
namespace: "stream",
|
|
16
25
|
runtimeSources: () => [resolveFrom(import.meta.url, "../../../../runtime/ext_node/stream/stream.c")],
|
|
17
26
|
builtins: () => ({}),
|
|
27
|
+
exports: () => exports,
|
|
18
28
|
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node's `stream/promises` module.
|
|
3
|
+
*
|
|
4
|
+
* Provides `pipeline`, implemented synchronously in
|
|
5
|
+
* `runtime/ext_node/stream/pipeline.c` and returned as an already-resolved
|
|
6
|
+
* promise so `await pipeline(...)` works.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { NodeModule } from "../module.js";
|
|
10
|
+
import { resolveFrom } from "../module.js";
|
|
11
|
+
|
|
12
|
+
export const streamPromisesModule: NodeModule = {
|
|
13
|
+
name: "stream/promises",
|
|
14
|
+
runtimeSources: () => [resolveFrom(import.meta.url, "../../../../runtime/ext_node/stream/pipeline.c")],
|
|
15
|
+
builtins: () => ({
|
|
16
|
+
pipeline: { symbol: "xt_node_stream_pipeline" },
|
|
17
|
+
}),
|
|
18
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node's `test` module (`node:test`).
|
|
3
|
+
*
|
|
4
|
+
* A minimal synchronous test runner: `test(name, fn)` executes `fn` immediately,
|
|
5
|
+
* catching assertion failures and reporting TAP output. `import test from
|
|
6
|
+
* "node:test"` binds the callable default export; `import { test }` and
|
|
7
|
+
* `test.skip` / `test.todo` / `test.only` are also provided.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { NodeModule } from "../module.js";
|
|
11
|
+
import { resolveFrom } from "../module.js";
|
|
12
|
+
import type { ModuleExports } from "../../registry.js";
|
|
13
|
+
|
|
14
|
+
const runTest = { symbol: "xt_node_test" } as const;
|
|
15
|
+
|
|
16
|
+
const exports: ModuleExports = {
|
|
17
|
+
default: runTest,
|
|
18
|
+
test: runTest,
|
|
19
|
+
it: runTest,
|
|
20
|
+
describe: runTest,
|
|
21
|
+
skip: { symbol: "xt_node_test_skip" },
|
|
22
|
+
todo: { symbol: "xt_node_test_todo" },
|
|
23
|
+
only: { symbol: "xt_node_test" },
|
|
24
|
+
before: { symbol: "xt_node_test_hook" },
|
|
25
|
+
after: { symbol: "xt_node_test_hook" },
|
|
26
|
+
beforeEach: { symbol: "xt_node_test_hook" },
|
|
27
|
+
afterEach: { symbol: "xt_node_test_hook" },
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export const testModule: NodeModule = {
|
|
31
|
+
name: "test",
|
|
32
|
+
runtimeSources: () => [resolveFrom(import.meta.url, "../../../../runtime/ext_node/test/test.c")],
|
|
33
|
+
builtins: () => ({}),
|
|
34
|
+
exports: () => exports,
|
|
35
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node's `worker_threads` module.
|
|
3
|
+
*
|
|
4
|
+
* xbintsc emulates a worker by re-running the current executable as a child
|
|
5
|
+
* process; `isMainThread`, `workerData` and `parentPort` become value bindings
|
|
6
|
+
* (nullary runtime getters) and `Worker` is a constructor. See
|
|
7
|
+
* `runtime/ext_node/worker_threads/worker_threads.c`.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { NodeModule } from "../module.js";
|
|
11
|
+
import { resolveFrom } from "../module.js";
|
|
12
|
+
import type { ModuleExports } from "../../registry.js";
|
|
13
|
+
|
|
14
|
+
const exports: ModuleExports = {
|
|
15
|
+
Worker: { symbol: "xt_worker_ctor", isConstructor: true },
|
|
16
|
+
isMainThread: { valueSymbol: "xt_worker_is_main_thread" },
|
|
17
|
+
workerData: { valueSymbol: "xt_worker_data" },
|
|
18
|
+
parentPort: { valueSymbol: "xt_worker_parent_port" },
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const workerThreadsModule: NodeModule = {
|
|
22
|
+
name: "worker_threads",
|
|
23
|
+
runtimeSources: () => [resolveFrom(import.meta.url, "../../../../runtime/ext_node/worker_threads/worker_threads.c")],
|
|
24
|
+
builtins: () => ({}),
|
|
25
|
+
exports: () => exports,
|
|
26
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node's `zlib` module.
|
|
3
|
+
*
|
|
4
|
+
* Only `createGzip()` is implemented. It returns a descriptor consumed by
|
|
5
|
+
* `stream/promises`' `pipeline`; see `runtime/ext_node/zlib/zlib.c`.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { NodeModule } from "../module.js";
|
|
9
|
+
import { resolveFrom } from "../module.js";
|
|
10
|
+
|
|
11
|
+
export const zlibModule: NodeModule = {
|
|
12
|
+
name: "zlib",
|
|
13
|
+
runtimeSources: () => [resolveFrom(import.meta.url, "../../../../runtime/ext_node/zlib/zlib.c")],
|
|
14
|
+
builtins: () => ({
|
|
15
|
+
createGzip: { symbol: "xt_node_create_gzip" },
|
|
16
|
+
}),
|
|
17
|
+
};
|
|
@@ -28,6 +28,12 @@ export interface ModuleExport {
|
|
|
28
28
|
readonly returnVoid?: boolean;
|
|
29
29
|
readonly namespace?: string;
|
|
30
30
|
readonly method?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Runtime getter used when the binding is read as a *value* rather than
|
|
33
|
+
* called (e.g. `import { isMainThread } from "worker_threads"`). The symbol
|
|
34
|
+
* has the uniform `(i32, i64*)` ABI and is invoked with no arguments.
|
|
35
|
+
*/
|
|
36
|
+
readonly valueSymbol?: string;
|
|
31
37
|
/**
|
|
32
38
|
* Marks a runtime symbol as a constructor callable with `new` (it has the
|
|
33
39
|
* `(i32, i64*)` signature). Lets `import { EventEmitter } from "events"` be
|