xbintsc 0.1.9 → 0.1.11
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 +12 -7
- package/dist/src/codegen/generator/calls.js +11 -1
- package/dist/src/codegen/generator/calls.js.map +1 -1
- package/dist/src/codegen/generator/module.js +2 -0
- package/dist/src/codegen/generator/module.js.map +1 -1
- package/dist/src/codegen/generator/state.js +19 -0
- package/dist/src/codegen/generator/state.js.map +1 -1
- package/dist/src/codegen/generator/tables.d.ts +2 -0
- package/dist/src/codegen/generator/tables.js +25 -0
- package/dist/src/codegen/generator/tables.js.map +1 -1
- package/dist/src/driver/compiler.js +1 -0
- package/dist/src/driver/compiler.js.map +1 -1
- package/dist/src/extensions/node/buffer/index.d.ts +10 -0
- package/dist/src/extensions/node/buffer/index.js +15 -0
- package/dist/src/extensions/node/buffer/index.js.map +1 -0
- package/dist/src/extensions/node/dgram/index.d.ts +8 -0
- package/dist/src/extensions/node/dgram/index.js +13 -0
- package/dist/src/extensions/node/dgram/index.js.map +1 -0
- package/dist/src/extensions/node/fs/fs-ops.d.ts +6 -0
- package/dist/src/extensions/node/fs/fs-ops.js +18 -0
- package/dist/src/extensions/node/fs/fs-ops.js.map +1 -0
- package/dist/src/extensions/node/fs/index.d.ts +3 -1
- package/dist/src/extensions/node/fs/index.js +11 -3
- package/dist/src/extensions/node/fs/index.js.map +1 -1
- package/dist/src/extensions/node/fs/write-file.d.ts +5 -0
- package/dist/src/extensions/node/fs/write-file.js +8 -0
- package/dist/src/extensions/node/fs/write-file.js.map +1 -0
- package/dist/src/extensions/node/fs-promises/index.d.ts +10 -0
- package/dist/src/extensions/node/fs-promises/index.js +37 -0
- package/dist/src/extensions/node/fs-promises/index.js.map +1 -0
- package/dist/src/extensions/node/http/index.d.ts +10 -0
- package/dist/src/extensions/node/http/index.js +18 -0
- package/dist/src/extensions/node/http/index.js.map +1 -0
- package/dist/src/extensions/node/index.d.ts +3 -1
- package/dist/src/extensions/node/index.js +28 -4
- package/dist/src/extensions/node/index.js.map +1 -1
- package/dist/src/extensions/node/net/index.d.ts +9 -0
- package/dist/src/extensions/node/net/index.js +14 -0
- package/dist/src/extensions/node/net/index.js.map +1 -0
- package/dist/src/extensions/node/os/index.d.ts +9 -0
- package/dist/src/extensions/node/os/index.js +14 -0
- package/dist/src/extensions/node/os/index.js.map +1 -0
- package/dist/src/extensions/node/path/index.d.ts +10 -0
- package/dist/src/extensions/node/path/index.js +15 -0
- package/dist/src/extensions/node/path/index.js.map +1 -0
- package/dist/src/extensions/node/process/index.d.ts +10 -0
- package/dist/src/extensions/node/process/index.js +15 -0
- package/dist/src/extensions/node/process/index.js.map +1 -0
- package/dist/src/extensions/node/stream/index.d.ts +10 -0
- package/dist/src/extensions/node/stream/index.js +15 -0
- package/dist/src/extensions/node/stream/index.js.map +1 -0
- package/dist/tests/e2e/compile.test.js +55 -0
- package/dist/tests/e2e/compile.test.js.map +1 -1
- package/dist/tests/e2e/node-modules.test.d.ts +9 -0
- package/dist/tests/e2e/node-modules.test.js +179 -0
- package/dist/tests/e2e/node-modules.test.js.map +1 -0
- package/dist/tests/extensions/registry.test.js +9 -3
- package/dist/tests/extensions/registry.test.js.map +1 -1
- package/package.json +1 -1
- package/runtime/ext_node/buffer/buffer.c +569 -0
- package/runtime/ext_node/dgram/dgram.c +337 -0
- package/runtime/ext_node/fs/fs_common.h +166 -0
- package/runtime/ext_node/fs/fs_ops.c +342 -0
- package/runtime/ext_node/fs/promises.c +60 -0
- package/runtime/ext_node/fs/read_file.c +12 -6
- package/runtime/ext_node/fs/write_file.c +47 -0
- package/runtime/ext_node/http/http.c +760 -0
- package/runtime/ext_node/net/net.c +546 -0
- package/runtime/ext_node/node_common.h +305 -0
- package/runtime/ext_node/os/os.c +165 -0
- package/runtime/ext_node/path/path.c +324 -0
- package/runtime/ext_node/process/process.c +137 -0
- package/runtime/ext_node/stream/stream.c +348 -0
- package/runtime/rt.h +19 -0
- package/runtime/xt_containers.c +2 -0
- package/runtime/xt_io.c +9 -0
- package/runtime/xt_loop.c +117 -0
- package/scripts/build-runtime.mjs +14 -0
- package/src/codegen/generator/calls.ts +13 -0
- package/src/codegen/generator/module.ts +2 -0
- package/src/codegen/generator/state.ts +19 -0
- package/src/codegen/generator/tables.ts +26 -0
- package/src/driver/compiler.ts +1 -0
- package/src/extensions/node/buffer/index.ts +17 -0
- package/src/extensions/node/dgram/index.ts +15 -0
- package/src/extensions/node/fs/fs-ops.ts +20 -0
- package/src/extensions/node/fs/index.ts +11 -3
- package/src/extensions/node/fs/write-file.ts +10 -0
- package/src/extensions/node/fs-promises/index.ts +41 -0
- package/src/extensions/node/http/index.ts +20 -0
- package/src/extensions/node/index.ts +28 -4
- package/src/extensions/node/net/index.ts +16 -0
- package/src/extensions/node/os/index.ts +16 -0
- package/src/extensions/node/path/index.ts +17 -0
- package/src/extensions/node/process/index.ts +17 -0
- package/src/extensions/node/stream/index.ts +17 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node's `http` module.
|
|
3
|
+
*
|
|
4
|
+
* `http.createServer` wraps a `net` server and parses requests into a
|
|
5
|
+
* `req`/`res` pair; `http.get`/`http.request` wrap a `net` socket and surface
|
|
6
|
+
* the response through an EventEmitter. Both are implemented in
|
|
7
|
+
* `runtime/ext_node/http/http.c`.
|
|
8
|
+
*/
|
|
9
|
+
import { resolveFrom } from "../module.js";
|
|
10
|
+
export const httpModule = {
|
|
11
|
+
name: "http",
|
|
12
|
+
runtimeSources: () => [
|
|
13
|
+
resolveFrom(import.meta.url, "../../../../runtime/ext_node/net/net.c"),
|
|
14
|
+
resolveFrom(import.meta.url, "../../../../runtime/ext_node/http/http.c"),
|
|
15
|
+
],
|
|
16
|
+
builtins: () => ({}),
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/extensions/node/http/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,UAAU,GAAe;IACpC,IAAI,EAAE,MAAM;IACZ,cAAc,EAAE,GAAG,EAAE,CAAC;QACpB,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,wCAAwC,CAAC;QACtE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,0CAA0C,CAAC;KACzE;IACD,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;CACrB,CAAC"}
|
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
* builtins each module implements, so `readFileSync("...")` in TypeScript
|
|
6
6
|
* resolves to the C implementation without the core compiler knowing anything
|
|
7
7
|
* about Node. Every Node module lives in its own subfolder next to this file
|
|
8
|
-
* (
|
|
8
|
+
* (`fs/`, `path/`, `os/`, `process/`, `buffer/`, `stream/`, `net/`, `dgram/`,
|
|
9
|
+
* `http/`, `fs-promises/`), with the runtime counterpart under
|
|
10
|
+
* `runtime/ext_node/`.
|
|
9
11
|
*/
|
|
10
12
|
import type { Extension } from "../registry.js";
|
|
11
13
|
export declare const nodeExtension: Extension;
|
|
@@ -5,15 +5,39 @@
|
|
|
5
5
|
* builtins each module implements, so `readFileSync("...")` in TypeScript
|
|
6
6
|
* resolves to the C implementation without the core compiler knowing anything
|
|
7
7
|
* about Node. Every Node module lives in its own subfolder next to this file
|
|
8
|
-
* (
|
|
8
|
+
* (`fs/`, `path/`, `os/`, `process/`, `buffer/`, `stream/`, `net/`, `dgram/`,
|
|
9
|
+
* `http/`, `fs-promises/`), with the runtime counterpart under
|
|
10
|
+
* `runtime/ext_node/`.
|
|
9
11
|
*/
|
|
10
12
|
import { fsModule } from "./fs/index.js";
|
|
13
|
+
import { fsPromisesModule } from "./fs-promises/index.js";
|
|
14
|
+
import { pathModule } from "./path/index.js";
|
|
15
|
+
import { osModule } from "./os/index.js";
|
|
16
|
+
import { processModule } from "./process/index.js";
|
|
17
|
+
import { bufferModule } from "./buffer/index.js";
|
|
18
|
+
import { streamModule } from "./stream/index.js";
|
|
19
|
+
import { netModule } from "./net/index.js";
|
|
20
|
+
import { dgramModule } from "./dgram/index.js";
|
|
21
|
+
import { httpModule } from "./http/index.js";
|
|
11
22
|
/** Every Node module the extension currently provides. */
|
|
12
|
-
const modules = [
|
|
23
|
+
const modules = [
|
|
24
|
+
fsModule,
|
|
25
|
+
fsPromisesModule,
|
|
26
|
+
pathModule,
|
|
27
|
+
osModule,
|
|
28
|
+
processModule,
|
|
29
|
+
bufferModule,
|
|
30
|
+
streamModule,
|
|
31
|
+
netModule,
|
|
32
|
+
dgramModule,
|
|
33
|
+
httpModule,
|
|
34
|
+
];
|
|
13
35
|
export const nodeExtension = {
|
|
14
36
|
name: "node",
|
|
15
|
-
description: "Node.js host APIs (fs,
|
|
16
|
-
|
|
37
|
+
description: "Node.js host APIs (fs, path, os, process, buffer, stream, net, dgram, http)",
|
|
38
|
+
// `http` reuses the `net` sources; de-duplicate so each C file links once.
|
|
39
|
+
runtimeSources: () => [...new Set(modules.flatMap((module) => module.runtimeSources()))],
|
|
40
|
+
linkerFlags: () => (process.platform === "win32" ? ["-lws2_32"] : []),
|
|
17
41
|
builtins: () => {
|
|
18
42
|
const merged = {};
|
|
19
43
|
for (const module of modules)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/node/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/node/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,0DAA0D;AAC1D,MAAM,OAAO,GAA0B;IACrC,QAAQ;IACR,gBAAgB;IAChB,UAAU;IACV,QAAQ;IACR,aAAa;IACb,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,WAAW;IACX,UAAU;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAc;IACtC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,6EAA6E;IAC1F,2EAA2E;IAC3E,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACxF,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,QAAQ,EAAE,GAAG,EAAE;QACb,MAAM,MAAM,GAAoC,EAAE,CAAC;QACnD,KAAK,MAAM,MAAM,IAAI,OAAO;YAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvE,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node's `net` module.
|
|
3
|
+
*
|
|
4
|
+
* TCP servers and sockets driven by the core event loop. `net.createServer`,
|
|
5
|
+
* `net.connect`/`net.createConnection` and `net.Socket`/`net.Server` are all
|
|
6
|
+
* backed by `runtime/ext_node/net/net.c`.
|
|
7
|
+
*/
|
|
8
|
+
import type { NodeModule } from "../module.js";
|
|
9
|
+
export declare const netModule: NodeModule;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node's `net` module.
|
|
3
|
+
*
|
|
4
|
+
* TCP servers and sockets driven by the core event loop. `net.createServer`,
|
|
5
|
+
* `net.connect`/`net.createConnection` and `net.Socket`/`net.Server` are all
|
|
6
|
+
* backed by `runtime/ext_node/net/net.c`.
|
|
7
|
+
*/
|
|
8
|
+
import { resolveFrom } from "../module.js";
|
|
9
|
+
export const netModule = {
|
|
10
|
+
name: "net",
|
|
11
|
+
runtimeSources: () => [resolveFrom(import.meta.url, "../../../../runtime/ext_node/net/net.c")],
|
|
12
|
+
builtins: () => ({}),
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/extensions/node/net/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC,IAAI,EAAE,KAAK;IACX,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,wCAAwC,CAAC,CAAC;IAC9F,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;CACrB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node's `os` module: host information backed by `runtime/ext_node/os`.
|
|
3
|
+
*
|
|
4
|
+
* `os` contributes no global builtins; the compiler lowers `os.<name>(...)` to
|
|
5
|
+
* `xt_os_static(<name>, argc, argv)` (see `NAMESPACE_STATICS` in
|
|
6
|
+
* `src/codegen/generator/tables.ts`). This module only links the C source.
|
|
7
|
+
*/
|
|
8
|
+
import type { NodeModule } from "../module.js";
|
|
9
|
+
export declare const osModule: NodeModule;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node's `os` module: host information backed by `runtime/ext_node/os`.
|
|
3
|
+
*
|
|
4
|
+
* `os` contributes no global builtins; the compiler lowers `os.<name>(...)` to
|
|
5
|
+
* `xt_os_static(<name>, argc, argv)` (see `NAMESPACE_STATICS` in
|
|
6
|
+
* `src/codegen/generator/tables.ts`). This module only links the C source.
|
|
7
|
+
*/
|
|
8
|
+
import { resolveFrom } from "../module.js";
|
|
9
|
+
export const osModule = {
|
|
10
|
+
name: "os",
|
|
11
|
+
runtimeSources: () => [resolveFrom(import.meta.url, "../../../../runtime/ext_node/os/os.c")],
|
|
12
|
+
builtins: () => ({}),
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/extensions/node/os/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,QAAQ,GAAe;IAClC,IAAI,EAAE,IAAI;IACV,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,sCAAsC,CAAC,CAAC;IAC5F,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;CACrB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node's `path` module: POSIX-style path helpers backed by
|
|
3
|
+
* `runtime/ext_node/path`.
|
|
4
|
+
*
|
|
5
|
+
* `path` contributes no global builtins; the compiler lowers `path.<name>(...)`
|
|
6
|
+
* to `xt_path_static(<name>, argc, argv)` (see `NAMESPACE_STATICS` in
|
|
7
|
+
* `src/codegen/generator/tables.ts`). This module only links the C source.
|
|
8
|
+
*/
|
|
9
|
+
import type { NodeModule } from "../module.js";
|
|
10
|
+
export declare const pathModule: NodeModule;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node's `path` module: POSIX-style path helpers backed by
|
|
3
|
+
* `runtime/ext_node/path`.
|
|
4
|
+
*
|
|
5
|
+
* `path` contributes no global builtins; the compiler lowers `path.<name>(...)`
|
|
6
|
+
* to `xt_path_static(<name>, argc, argv)` (see `NAMESPACE_STATICS` in
|
|
7
|
+
* `src/codegen/generator/tables.ts`). This module only links the C source.
|
|
8
|
+
*/
|
|
9
|
+
import { resolveFrom } from "../module.js";
|
|
10
|
+
export const pathModule = {
|
|
11
|
+
name: "path",
|
|
12
|
+
runtimeSources: () => [resolveFrom(import.meta.url, "../../../../runtime/ext_node/path/path.c")],
|
|
13
|
+
builtins: () => ({}),
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/extensions/node/path/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,UAAU,GAAe;IACpC,IAAI,EAAE,MAAM;IACZ,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,0CAA0C,CAAC,CAAC;IAChG,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;CACrB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node's `process` object backed by `runtime/ext_node/process`.
|
|
3
|
+
*
|
|
4
|
+
* The compiler lowers `process.<method>(...)` to
|
|
5
|
+
* `xt_process_call(<method>, argc, argv)` and `process.<property>` to
|
|
6
|
+
* `xt_process_get(<property>)` (see `NAMESPACE_STATICS` / `NAMESPACE_PROPERTIES`
|
|
7
|
+
* in `src/codegen/generator/tables.ts`). This module only links the C source.
|
|
8
|
+
*/
|
|
9
|
+
import type { NodeModule } from "../module.js";
|
|
10
|
+
export declare const processModule: NodeModule;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node's `process` object backed by `runtime/ext_node/process`.
|
|
3
|
+
*
|
|
4
|
+
* The compiler lowers `process.<method>(...)` to
|
|
5
|
+
* `xt_process_call(<method>, argc, argv)` and `process.<property>` to
|
|
6
|
+
* `xt_process_get(<property>)` (see `NAMESPACE_STATICS` / `NAMESPACE_PROPERTIES`
|
|
7
|
+
* in `src/codegen/generator/tables.ts`). This module only links the C source.
|
|
8
|
+
*/
|
|
9
|
+
import { resolveFrom } from "../module.js";
|
|
10
|
+
export const processModule = {
|
|
11
|
+
name: "process",
|
|
12
|
+
runtimeSources: () => [resolveFrom(import.meta.url, "../../../../runtime/ext_node/process/process.c")],
|
|
13
|
+
builtins: () => ({}),
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/extensions/node/process/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,aAAa,GAAe;IACvC,IAAI,EAAE,SAAS;IACf,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,gDAAgD,CAAC,CAAC;IACtG,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;CACrB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node's `stream` module.
|
|
3
|
+
*
|
|
4
|
+
* `Readable`, `Writable`, `Duplex`, `Transform` and `PassThrough` are provided
|
|
5
|
+
* as global constructors (`new Transform(...)`); `stream.Readable.from(...)`
|
|
6
|
+
* resolves through the `stream` namespace. Streams are EventEmitters backed by
|
|
7
|
+
* the C runtime's synchronous stream implementation.
|
|
8
|
+
*/
|
|
9
|
+
import type { NodeModule } from "../module.js";
|
|
10
|
+
export declare const streamModule: NodeModule;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node's `stream` module.
|
|
3
|
+
*
|
|
4
|
+
* `Readable`, `Writable`, `Duplex`, `Transform` and `PassThrough` are provided
|
|
5
|
+
* as global constructors (`new Transform(...)`); `stream.Readable.from(...)`
|
|
6
|
+
* resolves through the `stream` namespace. Streams are EventEmitters backed by
|
|
7
|
+
* the C runtime's synchronous stream implementation.
|
|
8
|
+
*/
|
|
9
|
+
import { resolveFrom } from "../module.js";
|
|
10
|
+
export const streamModule = {
|
|
11
|
+
name: "stream",
|
|
12
|
+
runtimeSources: () => [resolveFrom(import.meta.url, "../../../../runtime/ext_node/stream/stream.c")],
|
|
13
|
+
builtins: () => ({}),
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/extensions/node/stream/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,YAAY,GAAe;IACtC,IAAI,EAAE,QAAQ;IACd,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,8CAA8C,CAAC,CAAC;IACpG,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;CACrB,CAAC"}
|
|
@@ -93,6 +93,61 @@ describeWithClang("end-to-end compilation", () => {
|
|
|
93
93
|
const source = `console.log(readFileSync(${JSON.stringify(dataPath)}));`;
|
|
94
94
|
expect(runProgram(source, { extensions: true })).toBe("from a file");
|
|
95
95
|
});
|
|
96
|
+
it("writes and manages files through the node extension", () => {
|
|
97
|
+
const base = join(workdir, `fsops_${Math.random().toString(36).slice(2)}`);
|
|
98
|
+
const source = `
|
|
99
|
+
const base = ${JSON.stringify(base)};
|
|
100
|
+
mkdirSync(base + "/a/b", { recursive: true });
|
|
101
|
+
writeFileSync(base + "/a/b/file.txt", "hello");
|
|
102
|
+
appendFileSync(base + "/a/b/file.txt", " world");
|
|
103
|
+
console.log(readFileSync(base + "/a/b/file.txt"));
|
|
104
|
+
console.log(readFileSync(base + "/a/b/file.txt", "hex"));
|
|
105
|
+
console.log(existsSync(base + "/a/b/file.txt"), existsSync(base + "/missing"));
|
|
106
|
+
copyFileSync(base + "/a/b/file.txt", base + "/a/copy.txt");
|
|
107
|
+
renameSync(base + "/a/copy.txt", base + "/a/moved.txt");
|
|
108
|
+
console.log(readdirSync(base + "/a").sort().join(","));
|
|
109
|
+
const info = statSync(base + "/a/b/file.txt");
|
|
110
|
+
console.log(info.size, info.isFile(), info.isDirectory());
|
|
111
|
+
rmSync(base + "/a", { recursive: true });
|
|
112
|
+
console.log(existsSync(base + "/a"));
|
|
113
|
+
`;
|
|
114
|
+
expect(runProgram(source, { extensions: true })).toBe("hello world\n68656c6c6f20776f726c64\ntrue false\nb,moved.txt\n11 true false\nfalse");
|
|
115
|
+
});
|
|
116
|
+
it("supports hex and base64 encodings for fs reads and writes", () => {
|
|
117
|
+
const base = workdir;
|
|
118
|
+
const source = `
|
|
119
|
+
const base = ${JSON.stringify(base)};
|
|
120
|
+
const hexPath = base + "/encoding_${Math.random().toString(36).slice(2)}.hex.txt";
|
|
121
|
+
const b64Path = base + "/encoding_${Math.random().toString(36).slice(2)}.b64.txt";
|
|
122
|
+
writeFileSync(hexPath, "68656c6c6f", "hex");
|
|
123
|
+
writeFileSync(b64Path, "aGVsbG8=", "base64");
|
|
124
|
+
console.log(readFileSync(hexPath), readFileSync(b64Path));
|
|
125
|
+
console.log(readFileSync(hexPath, "base64"));
|
|
126
|
+
rmSync(hexPath);
|
|
127
|
+
rmSync(b64Path);
|
|
128
|
+
`;
|
|
129
|
+
expect(runProgram(source, { extensions: true })).toBe("hello hello\naGVsbG8=");
|
|
130
|
+
});
|
|
131
|
+
it("provides the path module", () => {
|
|
132
|
+
const source = `
|
|
133
|
+
console.log(path.join("a", "b", "..", "c"));
|
|
134
|
+
console.log(path.resolve("/tmp", "a", "..", "b"));
|
|
135
|
+
console.log(path.dirname("/x/y/z.txt"), path.basename("/x/y/z.txt"), path.extname("/x/y/z.txt"));
|
|
136
|
+
console.log(path.basename("/foo/bar.test.js", ".js"));
|
|
137
|
+
console.log(path.normalize("/a//b/./c/../d"));
|
|
138
|
+
console.log(path.isAbsolute("/a"), path.isAbsolute("a"));
|
|
139
|
+
console.log(path.relative("/a/b/c", "/a/d"));
|
|
140
|
+
`;
|
|
141
|
+
expect(runProgram(source, { extensions: true })).toBe("a/c\n/tmp/b\n/x/y z.txt .txt\nbar.test\n/a/b/d\ntrue false\n../../d");
|
|
142
|
+
});
|
|
143
|
+
it("provides the os and process modules", () => {
|
|
144
|
+
const source = `
|
|
145
|
+
console.log(os.platform().length > 0, os.arch().length > 0, os.homedir().length > 0, os.tmpdir().length > 0);
|
|
146
|
+
console.log(process.platform.length > 0, process.arch.length > 0, process.pid > 0, process.cwd().length > 0);
|
|
147
|
+
console.log(Object.keys(process.env).length > 0, process.argv.length >= 1);
|
|
148
|
+
`;
|
|
149
|
+
expect(runProgram(source, { extensions: true })).toBe("true true true true\ntrue true true true\ntrue true");
|
|
150
|
+
});
|
|
96
151
|
it("supports switch statements with fall-through", () => {
|
|
97
152
|
const source = `
|
|
98
153
|
function size(n: number): string {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.test.js","sourceRoot":"","sources":["../../../tests/e2e/compile.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,iBAAiB,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;AAEhE,iBAAiB,CAAC,wBAAwB,EAAE,GAAG,EAAE;IAC/C,IAAI,OAAe,CAAC;IACpB,IAAI,QAAgB,CAAC;IAErB,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;QACtD,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,EAAE;QACZ,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,SAAS,UAAU,CAAC,MAAc,EAAE,UAAmD,EAAE;QACvF,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,SAAS,cAAc,CACrB,MAAc,EACd,UAAmD,EAAE;QAErD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;QAC1C,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpG,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE;YAC1B,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;YAC5B,QAAQ;YACR,UAAU;SACX,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACxE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IACvF,CAAC;IAED,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,MAAM,GAAG;;;;;;KAMd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,MAAM,GAAG;;;;;;;KAOd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG;;;;;;;;;;KAUd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,MAAM,GAAG;;;KAGd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3C,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,4BAA4B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;QACzE,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,MAAM,GAAG;;;;;;;;;;;;;KAad,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG;;;;;;;;KAQd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,MAAM,GAAG;;;;;KAKd,CAAC;QACF,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAChF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,MAAM,GAAG;;;;;;;;;;;;;KAad,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG;;;;;;;;;KASd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG;;;;;KAKd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;KAsBd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,MAAM,GAAG;;;;;;KAMd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;KAwBd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;KAmBd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,MAAM,GAAG;;;;;;;;;;;;;;KAcd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAC7B,2EAA2E,CAC5E,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,aAAa,CACX,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EAC5B;;;;;;;;OAQC,CACF,CAAC;QACF,MAAM,MAAM,GAAG;;;;KAId,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"compile.test.js","sourceRoot":"","sources":["../../../tests/e2e/compile.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* End-to-end tests for the Node compatibility modules that need real host I/O:
|
|
3
|
+
* `buffer`, `fs/promises`, `stream`, `net`, `dgram` and `http`.
|
|
4
|
+
*
|
|
5
|
+
* Every program is compiled to a native binary and executed. The event-loop
|
|
6
|
+
* based modules open servers on an ephemeral port (`listen(0)` / `bind(0)`) so
|
|
7
|
+
* the tests stay hermetic. Skipped when no clang-compatible compiler is found.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* End-to-end tests for the Node compatibility modules that need real host I/O:
|
|
3
|
+
* `buffer`, `fs/promises`, `stream`, `net`, `dgram` and `http`.
|
|
4
|
+
*
|
|
5
|
+
* Every program is compiled to a native binary and executed. The event-loop
|
|
6
|
+
* based modules open servers on an ephemeral port (`listen(0)` / `bind(0)`) so
|
|
7
|
+
* the tests stay hermetic. Skipped when no clang-compatible compiler is found.
|
|
8
|
+
*/
|
|
9
|
+
import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
10
|
+
import { tmpdir } from "node:os";
|
|
11
|
+
import { join } from "node:path";
|
|
12
|
+
import { spawnSync } from "node:child_process";
|
|
13
|
+
import { afterAll, beforeAll, describe, expect, it } from "vitest";
|
|
14
|
+
import { build } from "../../src/driver/compiler.js";
|
|
15
|
+
import { createDefaultRegistry } from "../../src/extensions/registry.js";
|
|
16
|
+
import { nodeExtension } from "../../src/extensions/node/index.js";
|
|
17
|
+
import { hasClang } from "../helpers.js";
|
|
18
|
+
const describeWithClang = hasClang() ? describe : describe.skip;
|
|
19
|
+
describeWithClang("node compatibility modules", () => {
|
|
20
|
+
let workdir;
|
|
21
|
+
let cacheDir;
|
|
22
|
+
beforeAll(() => {
|
|
23
|
+
workdir = mkdtempSync(join(tmpdir(), "xbintsc-node-mods-"));
|
|
24
|
+
cacheDir = join(workdir, ".cache");
|
|
25
|
+
});
|
|
26
|
+
afterAll(() => {
|
|
27
|
+
rmSync(workdir, { recursive: true, force: true });
|
|
28
|
+
});
|
|
29
|
+
function run(source) {
|
|
30
|
+
const entry = join(workdir, `program_${Math.random().toString(36).slice(2)}.ts`);
|
|
31
|
+
writeFileSync(entry, source);
|
|
32
|
+
const extensions = createDefaultRegistry().register(nodeExtension);
|
|
33
|
+
// `force` keeps the runtime objects honest: the whole-program cache does
|
|
34
|
+
// not key on the C sources, only the generated object files do.
|
|
35
|
+
const result = build(entry, { emit: "exe", outDir: join(workdir, "out"), cacheDir, extensions, force: true });
|
|
36
|
+
expect(result.diagnostics.filter((d) => d.category === "error")).toEqual([]);
|
|
37
|
+
const executed = spawnSync(result.outputPath, [], { encoding: "utf8", timeout: 20000 });
|
|
38
|
+
return { stdout: executed.stdout ?? "", stderr: executed.stderr ?? "", status: executed.status };
|
|
39
|
+
}
|
|
40
|
+
it("implements Buffer construction and instance methods", () => {
|
|
41
|
+
const source = `
|
|
42
|
+
const buf = Buffer.from("hello");
|
|
43
|
+
console.log(buf.toString(), buf.length, Buffer.isBuffer(buf));
|
|
44
|
+
console.log(Buffer.alloc(4, 65).toString());
|
|
45
|
+
console.log(Buffer.from("deadbeef", "hex").toString("hex"));
|
|
46
|
+
console.log(Buffer.concat([Buffer.from("foo"), Buffer.from("bar")]).toString());
|
|
47
|
+
const wide = Buffer.alloc(4);
|
|
48
|
+
wide.writeUInt32BE(305419896, 0);
|
|
49
|
+
console.log(wide.readUInt32BE(0), wide.toString("hex"));
|
|
50
|
+
`;
|
|
51
|
+
const { status, stdout } = run(source);
|
|
52
|
+
expect(status).toBe(0);
|
|
53
|
+
expect(stdout.trim()).toBe(["hello 5 true", "AAAA", "deadbeef", "foobar", "305419896 12345678"].join("\n"));
|
|
54
|
+
});
|
|
55
|
+
it("wraps fs operations in promises", () => {
|
|
56
|
+
const target = join(workdir, `promise_${Math.random().toString(36).slice(2)}.txt`);
|
|
57
|
+
const source = `
|
|
58
|
+
async function main(): Promise<void> {
|
|
59
|
+
await writeFile(${JSON.stringify(target)}, "hello promises");
|
|
60
|
+
const data = await readFile(${JSON.stringify(target)});
|
|
61
|
+
const info = await stat(${JSON.stringify(target)});
|
|
62
|
+
console.log(data, info.size, info.isFile());
|
|
63
|
+
await rm(${JSON.stringify(target)});
|
|
64
|
+
}
|
|
65
|
+
main();
|
|
66
|
+
`;
|
|
67
|
+
const { status, stdout } = run(source);
|
|
68
|
+
expect(status).toBe(0);
|
|
69
|
+
expect(stdout.trim()).toBe("hello promises 14 true");
|
|
70
|
+
});
|
|
71
|
+
it("streams data through Readable, Transform and pipe", () => {
|
|
72
|
+
const source = `
|
|
73
|
+
const readable = new Readable();
|
|
74
|
+
readable.on("data", (chunk: string) => console.log("data", chunk));
|
|
75
|
+
readable.on("end", () => console.log("end"));
|
|
76
|
+
readable.push("hello");
|
|
77
|
+
readable.push(null);
|
|
78
|
+
|
|
79
|
+
const transform = new Transform({ transform(chunk: string, enc: string, cb: (err: unknown, out: string) => void) {
|
|
80
|
+
cb(null, chunk.toUpperCase());
|
|
81
|
+
} });
|
|
82
|
+
transform.on("data", (chunk: string) => console.log("upper", chunk));
|
|
83
|
+
transform.write("abc");
|
|
84
|
+
|
|
85
|
+
const source = new Readable();
|
|
86
|
+
const sink = new Writable();
|
|
87
|
+
sink.on("finish", () => console.log("piped"));
|
|
88
|
+
source.pipe(sink);
|
|
89
|
+
source.push("payload");
|
|
90
|
+
source.push(null);
|
|
91
|
+
`;
|
|
92
|
+
const { status, stdout } = run(source);
|
|
93
|
+
expect(status).toBe(0);
|
|
94
|
+
expect(stdout.trim().split("\n")).toEqual(["data hello", "end", "upper ABC", "piped"]);
|
|
95
|
+
});
|
|
96
|
+
it("exchanges data over a TCP server and client", () => {
|
|
97
|
+
const source = `
|
|
98
|
+
const server = net.createServer((socket: any) => {
|
|
99
|
+
socket.on("data", (data: string) => {
|
|
100
|
+
socket.write("echo:" + data);
|
|
101
|
+
socket.end();
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
server.listen(0, () => {
|
|
105
|
+
const client = net.connect(server.address().port, "127.0.0.1");
|
|
106
|
+
client.on("data", (data: string) => console.log("client", data));
|
|
107
|
+
client.on("end", () => {
|
|
108
|
+
console.log("end");
|
|
109
|
+
server.close();
|
|
110
|
+
});
|
|
111
|
+
client.write("ping");
|
|
112
|
+
});
|
|
113
|
+
`;
|
|
114
|
+
const { status, stdout } = run(source);
|
|
115
|
+
expect(status).toBe(0);
|
|
116
|
+
expect(stdout.trim().split("\n")).toEqual(["client echo:ping", "end"]);
|
|
117
|
+
});
|
|
118
|
+
it("exchanges a datagram over UDP", () => {
|
|
119
|
+
const source = `
|
|
120
|
+
const server = dgram.createSocket("udp4");
|
|
121
|
+
server.on("message", (msg: string, rinfo: any) => {
|
|
122
|
+
server.send("pong:" + msg, rinfo.port, rinfo.address);
|
|
123
|
+
});
|
|
124
|
+
server.bind(0, () => {
|
|
125
|
+
const client = dgram.createSocket("udp4");
|
|
126
|
+
client.on("message", (msg: string) => {
|
|
127
|
+
console.log(msg);
|
|
128
|
+
client.close();
|
|
129
|
+
server.close();
|
|
130
|
+
});
|
|
131
|
+
client.send("ping", server.address().port, "127.0.0.1");
|
|
132
|
+
});
|
|
133
|
+
`;
|
|
134
|
+
const { status, stdout } = run(source);
|
|
135
|
+
expect(status).toBe(0);
|
|
136
|
+
expect(stdout.trim()).toBe("pong:ping");
|
|
137
|
+
});
|
|
138
|
+
it("serves HTTP requests and reads responses", () => {
|
|
139
|
+
const source = `
|
|
140
|
+
const server = http.createServer((req: any, res: any) => {
|
|
141
|
+
let body = "";
|
|
142
|
+
req.on("data", (chunk: string) => { body += chunk; });
|
|
143
|
+
req.on("end", () => {
|
|
144
|
+
res.writeHead(200, { "Content-Type": "text/plain" });
|
|
145
|
+
res.end("hello " + req.url + " " + body);
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
server.listen(0, () => {
|
|
149
|
+
const port = server.address().port;
|
|
150
|
+
http.get("http://127.0.0.1:" + port + "/world", (res: any) => {
|
|
151
|
+
let body = "";
|
|
152
|
+
console.log("status", res.statusCode);
|
|
153
|
+
res.on("data", (chunk: string) => { body += chunk; });
|
|
154
|
+
res.on("end", () => {
|
|
155
|
+
console.log("get", body);
|
|
156
|
+
const req = http.request({ host: "127.0.0.1", port, path: "/submit", method: "POST" }, (res2: any) => {
|
|
157
|
+
let reply = "";
|
|
158
|
+
res2.on("data", (chunk: string) => { reply += chunk; });
|
|
159
|
+
res2.on("end", () => {
|
|
160
|
+
console.log("post", reply);
|
|
161
|
+
server.close();
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
req.write("payload");
|
|
165
|
+
req.end();
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
`;
|
|
170
|
+
const { status, stdout } = run(source);
|
|
171
|
+
expect(status).toBe(0);
|
|
172
|
+
expect(stdout.trim().split("\n")).toEqual([
|
|
173
|
+
"status 200",
|
|
174
|
+
"get hello /world ",
|
|
175
|
+
"post hello /submit payload",
|
|
176
|
+
]);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
//# sourceMappingURL=node-modules.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-modules.test.js","sourceRoot":"","sources":["../../../tests/e2e/node-modules.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,8 @@ describe("ExtensionRegistry", () => {
|
|
|
28
28
|
const builtins = registry.builtins();
|
|
29
29
|
expect(builtins.print?.symbol).toBe("xt_println");
|
|
30
30
|
expect(builtins.readFileSync?.symbol).toBe("xt_node_read_text_file");
|
|
31
|
+
expect(builtins.writeFileSync?.symbol).toBe("xt_node_write_file");
|
|
32
|
+
expect(builtins.existsSync?.symbol).toBe("xt_node_exists");
|
|
31
33
|
});
|
|
32
34
|
it("collects runtime sources and linker flags", () => {
|
|
33
35
|
const registry = new ExtensionRegistry().register(demoExtension);
|
|
@@ -38,10 +40,14 @@ describe("ExtensionRegistry", () => {
|
|
|
38
40
|
expect(coreExtension.builtins?.().print?.symbol).toBe("xt_println");
|
|
39
41
|
expect(createDefaultRegistry().has("core")).toBe(true);
|
|
40
42
|
});
|
|
41
|
-
it("node extension points at the ext C
|
|
43
|
+
it("node extension points at the ext C sources", () => {
|
|
42
44
|
const sources = nodeExtension.runtimeSources?.() ?? [];
|
|
43
|
-
expect(sources).
|
|
44
|
-
expect(sources
|
|
45
|
+
expect(sources.length).toBeGreaterThanOrEqual(6);
|
|
46
|
+
expect(sources.some((s) => /ext_node[\\/]fs[\\/]read_file\.c$/.test(s))).toBe(true);
|
|
47
|
+
expect(sources.some((s) => /ext_node[\\/]fs[\\/]fs_ops\.c$/.test(s))).toBe(true);
|
|
48
|
+
expect(sources.some((s) => /ext_node[\\/]path[\\/]path\.c$/.test(s))).toBe(true);
|
|
49
|
+
expect(sources.some((s) => /ext_node[\\/]os[\\/]os\.c$/.test(s))).toBe(true);
|
|
50
|
+
expect(sources.some((s) => /ext_node[\\/]process[\\/]process\.c$/.test(s))).toBe(true);
|
|
45
51
|
});
|
|
46
52
|
});
|
|
47
53
|
//# sourceMappingURL=registry.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../../tests/extensions/registry.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,aAAa,EAAkB,MAAM,kCAAkC,CAAC;AAC3H,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAEnE,MAAM,aAAa,GAAc;IAC/B,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;IAChG,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,aAAa,CAAC;IACrC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC;CAC9B,CAAC;AAEF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,QAAQ,GAAG,IAAI,iBAAiB,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACjE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACjE,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACjE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../../tests/extensions/registry.test.ts"],"names":[],"mappings":"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"}
|