@hegeldev/hegel 0.2.2 → 0.3.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/README.md +10 -4
- package/dist/cbor.d.ts +15 -0
- package/dist/cbor.d.ts.map +1 -0
- package/dist/cbor.js +32 -0
- package/dist/cbor.js.map +1 -0
- package/dist/checksums.d.ts +16 -0
- package/dist/checksums.d.ts.map +1 -0
- package/dist/checksums.js +26 -0
- package/dist/checksums.js.map +1 -0
- package/dist/generators/numeric.d.ts.map +1 -1
- package/dist/generators/numeric.js +16 -7
- package/dist/generators/numeric.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/libhegel.d.ts +169 -0
- package/dist/libhegel.d.ts.map +1 -0
- package/dist/libhegel.js +338 -0
- package/dist/libhegel.js.map +1 -0
- package/dist/locate.d.ts +42 -0
- package/dist/locate.d.ts.map +1 -0
- package/dist/locate.js +94 -0
- package/dist/locate.js.map +1 -0
- package/dist/runner.d.ts +30 -22
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +150 -201
- package/dist/runner.js.map +1 -1
- package/dist/session.d.ts +16 -13
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +32 -145
- package/dist/session.js.map +1 -1
- package/dist/testCase.d.ts +7 -7
- package/dist/testCase.d.ts.map +1 -1
- package/dist/testCase.js +1 -5
- package/dist/testCase.js.map +1 -1
- package/dist/wtf8.d.ts +2 -0
- package/dist/wtf8.d.ts.map +1 -1
- package/dist/wtf8.js +2 -0
- package/dist/wtf8.js.map +1 -1
- package/native/libhegel-darwin-arm64.dylib +0 -0
- package/native/libhegel-linux-amd64.so +0 -0
- package/native/libhegel-linux-arm64.so +0 -0
- package/native/libhegel-windows-amd64.dll +0 -0
- package/native/libhegel-windows-arm64.dll +0 -0
- package/package.json +9 -11
- package/dist/connection.d.ts +0 -82
- package/dist/connection.d.ts.map +0 -1
- package/dist/connection.js +0 -231
- package/dist/connection.js.map +0 -1
- package/dist/crc32.d.ts +0 -13
- package/dist/crc32.d.ts.map +0 -1
- package/dist/crc32.js +0 -30
- package/dist/crc32.js.map +0 -1
- package/dist/protocol.d.ts +0 -25
- package/dist/protocol.d.ts.map +0 -1
- package/dist/protocol.js +0 -77
- package/dist/protocol.js.map +0 -1
- package/dist/uv-install.sh +0 -2226
- package/dist/uv.d.ts +0 -20
- package/dist/uv.d.ts.map +0 -1
- package/dist/uv.js +0 -103
- package/dist/uv.js.map +0 -1
package/dist/session.js
CHANGED
|
@@ -1,157 +1,44 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Global lazy
|
|
2
|
+
* Global lazy libhegel handle.
|
|
3
3
|
*
|
|
4
|
-
* The
|
|
5
|
-
* the process.
|
|
4
|
+
* The native library is located (and, on first use, downloaded) and loaded the
|
|
5
|
+
* first time a test runs, then reused for the lifetime of the process. Unlike
|
|
6
|
+
* the previous subprocess-based client there is no server to manage: the engine
|
|
7
|
+
* runs on a worker thread inside libhegel, owned by each run handle.
|
|
6
8
|
*
|
|
7
9
|
* @packageDocumentation
|
|
8
10
|
*/
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const SUPPORTED_PROTOCOL_MAX = "0.12";
|
|
17
|
-
const HEGEL_SERVER_COMMAND_ENV = "HEGEL_SERVER_COMMAND";
|
|
18
|
-
const HEGEL_SERVER_DIR = ".hegel";
|
|
19
|
-
function parseVersion(s) {
|
|
20
|
-
const parts = s.split(".");
|
|
21
|
-
/* v8 ignore start */
|
|
22
|
-
if (parts.length !== 2) {
|
|
23
|
-
throw new Error(`Invalid version string '${s}': expected 'major.minor' format`);
|
|
24
|
-
}
|
|
25
|
-
/* v8 ignore stop */
|
|
26
|
-
const major = parseInt(parts[0], 10);
|
|
27
|
-
const minor = parseInt(parts[1], 10);
|
|
28
|
-
/* v8 ignore start */
|
|
29
|
-
if (!Number.isFinite(major) || !Number.isFinite(minor)) {
|
|
30
|
-
throw new Error(`Invalid version string '${s}'`);
|
|
31
|
-
}
|
|
32
|
-
/* v8 ignore stop */
|
|
33
|
-
return [major, minor];
|
|
34
|
-
}
|
|
35
|
-
function versionInRange(version, min, max) {
|
|
36
|
-
const v = parseVersion(version);
|
|
37
|
-
const lo = parseVersion(min);
|
|
38
|
-
const hi = parseVersion(max);
|
|
39
|
-
/* v8 ignore start */
|
|
40
|
-
if (v[0] < lo[0] || (v[0] === lo[0] && v[1] < lo[1]))
|
|
41
|
-
return false;
|
|
42
|
-
if (v[0] > hi[0] || (v[0] === hi[0] && v[1] > hi[1]))
|
|
43
|
-
return false;
|
|
44
|
-
/* v8 ignore stop */
|
|
45
|
-
return true;
|
|
11
|
+
import { Libhegel } from "./libhegel.js";
|
|
12
|
+
import { locateLibhegel } from "./locate.js";
|
|
13
|
+
import { LIBHEGEL_VERSION } from "./checksums.js";
|
|
14
|
+
let cached = null;
|
|
15
|
+
/** Returns the `major.minor` portion of a `major.minor.patch` version. */
|
|
16
|
+
function majorMinor(version) {
|
|
17
|
+
return version.split(".").slice(0, 2).join(".");
|
|
46
18
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Verify the loaded library's version is ABI-compatible with the one this
|
|
21
|
+
* client was built against. libhegel is pre-1.0, so its C ABI can change
|
|
22
|
+
* between minor versions; we require the `major.minor` to match.
|
|
23
|
+
*/
|
|
24
|
+
export function checkVersion(actual, expected = LIBHEGEL_VERSION) {
|
|
25
|
+
if (majorMinor(actual) !== majorMinor(expected)) {
|
|
26
|
+
throw new Error(`Incompatible libhegel version: the loaded library is ${actual}, but ` +
|
|
27
|
+
`@hegeldev/hegel expects ${expected}. Update the package or the library so their ` +
|
|
28
|
+
`major.minor versions match.`);
|
|
54
29
|
}
|
|
55
|
-
const pid = process.pid;
|
|
56
|
-
const ix = logFileCounter++;
|
|
57
|
-
const path = `${HEGEL_SERVER_DIR}/server.${pid}-${ix}.log`;
|
|
58
|
-
return fs.openSync(path, "a");
|
|
59
30
|
}
|
|
60
|
-
|
|
61
|
-
export
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
this.connection = connection;
|
|
66
|
-
this._controlStream = controlStream;
|
|
67
|
-
}
|
|
68
|
-
get controlStream() {
|
|
69
|
-
return this._controlStream;
|
|
70
|
-
}
|
|
71
|
-
static get() {
|
|
72
|
-
if (session === null) {
|
|
73
|
-
session = HegelSession.init();
|
|
74
|
-
}
|
|
75
|
-
return session;
|
|
76
|
-
}
|
|
77
|
-
static init() {
|
|
78
|
-
const { command, args } = hegelCommand();
|
|
79
|
-
const logFd = serverLogFile();
|
|
80
|
-
const child = spawn(command, [...args, "--verbosity", "normal"], {
|
|
81
|
-
stdio: ["pipe", "pipe", logFd],
|
|
82
|
-
env: { ...process.env, PYTHONUNBUFFERED: "1" },
|
|
83
|
-
});
|
|
84
|
-
// Prevent Node.js from consuming pipe data via its event loop
|
|
85
|
-
child.stdout.pause();
|
|
86
|
-
child.stdin.cork();
|
|
87
|
-
// Unref the child and its pipes so they don't keep Node's event loop
|
|
88
|
-
// alive. Otherwise a plain `node script.mjs` hangs after the last
|
|
89
|
-
// Hegel.run() completes — Node waits for the subprocess, the subprocess
|
|
90
|
-
// waits for more protocol commands, and the `exit` handler that would
|
|
91
|
-
// kill the child never fires because Node never decides to exit.
|
|
92
|
-
// stdin/stdout for piped stdio are Socket instances at runtime, but
|
|
93
|
-
// TypeScript types them as Writable/Readable which don't declare unref().
|
|
94
|
-
child.unref();
|
|
95
|
-
child.stdout.unref();
|
|
96
|
-
child.stdin.unref();
|
|
97
|
-
// Extract raw file descriptors for synchronous I/O
|
|
98
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
99
|
-
const readFd = child.stdout._handle.fd;
|
|
100
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
101
|
-
const writeFd = child.stdin._handle.fd;
|
|
102
|
-
const connection = new Connection(readFd, writeFd);
|
|
103
|
-
const control = connection.controlStream();
|
|
104
|
-
// Handshake: raw bytes, not CBOR-encoded
|
|
105
|
-
const handshakePayload = Buffer.from(HANDSHAKE_STRING, "utf-8");
|
|
106
|
-
const reqId = control.sendRequest(handshakePayload);
|
|
107
|
-
const responseBytes = control.receiveReply(reqId);
|
|
108
|
-
const responseStr = responseBytes.toString("utf-8");
|
|
109
|
-
/* v8 ignore start */
|
|
110
|
-
if (!responseStr.startsWith("Hegel/")) {
|
|
111
|
-
child.kill();
|
|
112
|
-
throw new Error(`Bad handshake response: ${JSON.stringify(responseStr)}`);
|
|
113
|
-
}
|
|
114
|
-
/* v8 ignore stop */
|
|
115
|
-
const serverVersion = responseStr.slice("Hegel/".length);
|
|
116
|
-
/* v8 ignore start */
|
|
117
|
-
if (!versionInRange(serverVersion, SUPPORTED_PROTOCOL_MIN, SUPPORTED_PROTOCOL_MAX)) {
|
|
118
|
-
child.kill();
|
|
119
|
-
throw new Error(`hegel-typescript supports protocol versions ${SUPPORTED_PROTOCOL_MIN} through ${SUPPORTED_PROTOCOL_MAX}, ` +
|
|
120
|
-
`but the connected server is using protocol version ${serverVersion}`);
|
|
121
|
-
}
|
|
122
|
-
/* v8 ignore stop */
|
|
123
|
-
// Register cleanup on process exit
|
|
124
|
-
/* v8 ignore start */
|
|
125
|
-
process.on("exit", () => {
|
|
126
|
-
try {
|
|
127
|
-
child.kill();
|
|
128
|
-
}
|
|
129
|
-
catch {
|
|
130
|
-
// ignore
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
/* v8 ignore stop */
|
|
134
|
-
// Close the log fd since the child has inherited it
|
|
135
|
-
try {
|
|
136
|
-
fs.closeSync(logFd);
|
|
137
|
-
}
|
|
138
|
-
catch {
|
|
139
|
-
// ignore
|
|
140
|
-
}
|
|
141
|
-
return new HegelSession(connection, control);
|
|
142
|
-
}
|
|
31
|
+
/** Locate, load and version-check the native library. */
|
|
32
|
+
export function loadLibhegel() {
|
|
33
|
+
const lib = Libhegel.load(locateLibhegel());
|
|
34
|
+
checkVersion(lib.version());
|
|
35
|
+
return lib;
|
|
143
36
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
return { command: override, args: [] };
|
|
37
|
+
/** Returns the process-global libhegel handle, loading it on first use. */
|
|
38
|
+
export function getLibhegel() {
|
|
39
|
+
if (cached === null) {
|
|
40
|
+
cached = loadLibhegel();
|
|
149
41
|
}
|
|
150
|
-
|
|
151
|
-
// Default: use uv tool run
|
|
152
|
-
return {
|
|
153
|
-
command: findUv(),
|
|
154
|
-
args: ["tool", "run", "--from", `hegel-core==${HEGEL_SERVER_VERSION}`, "hegel"],
|
|
155
|
-
};
|
|
42
|
+
return cached;
|
|
156
43
|
}
|
|
157
44
|
//# sourceMappingURL=session.js.map
|
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,IAAI,MAAM,GAAoB,IAAI,CAAC;AAEnC,0EAA0E;AAC1E,SAAS,UAAU,CAAC,OAAe;IACjC,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,WAAmB,gBAAgB;IAC9E,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CACb,wDAAwD,MAAM,QAAQ;YACpE,2BAA2B,QAAQ,+CAA+C;YAClF,6BAA6B,CAChC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IAC5C,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,WAAW;IACzB,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,GAAG,YAAY,EAAE,CAAC;IAC1B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/testCase.d.ts
CHANGED
|
@@ -33,9 +33,12 @@ export declare const Labels: {
|
|
|
33
33
|
/**
|
|
34
34
|
* Abstraction over the data backend for a test case.
|
|
35
35
|
*
|
|
36
|
-
* The default implementation (
|
|
37
|
-
*
|
|
38
|
-
*
|
|
36
|
+
* The default implementation (NativeDataSource) drives the native libhegel
|
|
37
|
+
* test case via its C ABI. Custom implementations can be used in tests to
|
|
38
|
+
* inject specific behaviors without the engine.
|
|
39
|
+
*
|
|
40
|
+
* `status` passed to {@link DataSource.markComplete} is a `hegel_status_t`
|
|
41
|
+
* value (see {@link Status} in `libhegel.ts`).
|
|
39
42
|
*/
|
|
40
43
|
export interface DataSource {
|
|
41
44
|
generate(schema: Record<string, unknown>): unknown;
|
|
@@ -44,8 +47,7 @@ export interface DataSource {
|
|
|
44
47
|
newCollection(minSize: number, maxSize?: number): number;
|
|
45
48
|
collectionMore(collectionId: number): boolean;
|
|
46
49
|
collectionReject(collectionId: number, why?: string): void;
|
|
47
|
-
markComplete(status:
|
|
48
|
-
testAborted(): boolean;
|
|
50
|
+
markComplete(status: number, origin: string | null): void;
|
|
49
51
|
}
|
|
50
52
|
export declare class TestCase {
|
|
51
53
|
private _dataSource;
|
|
@@ -58,8 +60,6 @@ export declare class TestCase {
|
|
|
58
60
|
dataSource(): DataSource;
|
|
59
61
|
/** @internal */
|
|
60
62
|
get isLastRun(): boolean;
|
|
61
|
-
/** @internal */
|
|
62
|
-
get testAborted(): boolean;
|
|
63
63
|
/**
|
|
64
64
|
* Draw a value from a generator.
|
|
65
65
|
*/
|
package/dist/testCase.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testCase.d.ts","sourceRoot":"","sources":["../src/testCase.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,qBAAa,aAAc,SAAQ,KAAK;;CAKvC;AAED,qBAAa,WAAY,SAAQ,KAAK;;CAKrC;AAMD,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;CAgBT,CAAC;AAEX
|
|
1
|
+
{"version":3,"file":"testCase.d.ts","sourceRoot":"","sources":["../src/testCase.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,qBAAa,aAAc,SAAQ,KAAK;;CAKvC;AAED,qBAAa,WAAY,SAAQ,KAAK;;CAKrC;AAMD,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;CAgBT,CAAC;AAEX;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;IACnD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzD,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9C,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3D,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;CAC3D;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,SAAS,CAAK;IAEtB,gBAAgB;gBACJ,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO;IAKtD,gBAAgB;IAChB,UAAU,IAAI,UAAU;IAIxB,gBAAgB;IAChB,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;OAEG;IACH,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;IAWnC;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAMhC;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM3B;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAU9B;;;OAGG;IACH,QAAQ,CAAC,OAAO,UAAQ,GAAG,IAAI;CAQhC;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAElF;AAED;;;;;GAKG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,QAAQ,CAAS;gBAEb,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAM3D,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACH,IAAI,IAAI,OAAO;IAkBf;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;CAK3B"}
|
package/dist/testCase.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
import { inspect } from "node:util";
|
|
10
10
|
export class StopTestError extends Error {
|
|
11
11
|
constructor() {
|
|
12
|
-
super("
|
|
12
|
+
super("Hegel ran out of data (StopTest)");
|
|
13
13
|
this.name = "StopTestError";
|
|
14
14
|
}
|
|
15
15
|
}
|
|
@@ -57,10 +57,6 @@ export class TestCase {
|
|
|
57
57
|
get isLastRun() {
|
|
58
58
|
return this._isLastRun;
|
|
59
59
|
}
|
|
60
|
-
/** @internal */
|
|
61
|
-
get testAborted() {
|
|
62
|
-
return this._dataSource.testAborted();
|
|
63
|
-
}
|
|
64
60
|
/**
|
|
65
61
|
* Draw a value from a generator.
|
|
66
62
|
*/
|
package/dist/testCase.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testCase.js","sourceRoot":"","sources":["../src/testCase.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC;QACE,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"testCase.js","sourceRoot":"","sources":["../src/testCase.ts"],"names":[],"mappings":"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"}
|
package/dist/wtf8.d.ts
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* WTF-8 is like UTF-8 but allows encoding of surrogate codepoints
|
|
5
5
|
* (U+D800-U+DFFF). Node's `Buffer.toString("utf-8")` replaces these with
|
|
6
6
|
* U+FFFD, but JS strings are UTF-16 and can represent lone surrogates natively.
|
|
7
|
+
* libhegel returns generated strings as a CBOR tag-91 value wrapping WTF-8
|
|
8
|
+
* bytes (see `cbor.ts`), so this decoder is needed to recover the JS string.
|
|
7
9
|
*
|
|
8
10
|
* Based on the test vectors from {@link https://github.com/mathiasbynens/wtf-8}.
|
|
9
11
|
*
|
package/dist/wtf8.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wtf8.d.ts","sourceRoot":"","sources":["../src/wtf8.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"wtf8.d.ts","sourceRoot":"","sources":["../src/wtf8.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgChD"}
|
package/dist/wtf8.js
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* WTF-8 is like UTF-8 but allows encoding of surrogate codepoints
|
|
5
5
|
* (U+D800-U+DFFF). Node's `Buffer.toString("utf-8")` replaces these with
|
|
6
6
|
* U+FFFD, but JS strings are UTF-16 and can represent lone surrogates natively.
|
|
7
|
+
* libhegel returns generated strings as a CBOR tag-91 value wrapping WTF-8
|
|
8
|
+
* bytes (see `cbor.ts`), so this decoder is needed to recover the JS string.
|
|
7
9
|
*
|
|
8
10
|
* Based on the test vectors from {@link https://github.com/mathiasbynens/wtf-8}.
|
|
9
11
|
*
|
package/dist/wtf8.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wtf8.js","sourceRoot":"","sources":["../src/wtf8.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"wtf8.js","sourceRoot":"","sources":["../src/wtf8.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,EAAU,CAAC;QACf,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;YACb,EAAE,GAAG,CAAC,CAAC;YACP,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;YACpB,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAC7C,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;YACpB,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAC3E,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,CAAC;YACN,EAAE;gBACA,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAClB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC3B,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC1B,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACtB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;QACD,IAAI,EAAE,IAAI,OAAO,EAAE,CAAC;YAClB,EAAE,IAAI,OAAO,CAAC;YACd,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACpC,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,CAAC;AAC3C,CAAC"}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hegeldev/hegel",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Property-based testing for TypeScript",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -24,10 +24,12 @@
|
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
26
|
"files": [
|
|
27
|
-
"dist"
|
|
27
|
+
"dist",
|
|
28
|
+
"native"
|
|
28
29
|
],
|
|
29
30
|
"scripts": {
|
|
30
|
-
"build": "tsc
|
|
31
|
+
"build": "tsc",
|
|
32
|
+
"prepack": "node scripts/fetch-libhegel.mjs --all",
|
|
31
33
|
"test": "vitest run --coverage",
|
|
32
34
|
"lint": "prettier --check . && eslint . && tsc --noEmit",
|
|
33
35
|
"format": "prettier --write .",
|
|
@@ -41,25 +43,21 @@
|
|
|
41
43
|
"author": "David R. MacIver <david.maciver@antithesis.com>",
|
|
42
44
|
"license": "MIT",
|
|
43
45
|
"engines": {
|
|
44
|
-
"node": ">=
|
|
46
|
+
"node": ">=20.11.0"
|
|
45
47
|
},
|
|
46
48
|
"devDependencies": {
|
|
47
49
|
"@eslint/js": "^10.0.1",
|
|
48
|
-
"@types/node": "^
|
|
50
|
+
"@types/node": "^20.11.0",
|
|
49
51
|
"@vitest/coverage-v8": "^4.0.18",
|
|
50
52
|
"eslint": "^10.0.2",
|
|
51
53
|
"prettier": "^3.8.1",
|
|
52
|
-
"tsx": "^4.19.3",
|
|
53
54
|
"typedoc": "^0.28.17",
|
|
54
55
|
"typescript": "^5.9.3",
|
|
55
56
|
"typescript-eslint": "^8.56.1",
|
|
56
57
|
"vitest": "^4.0.18"
|
|
57
58
|
},
|
|
58
59
|
"dependencies": {
|
|
59
|
-
"cbor-x": "^1.6.0"
|
|
60
|
-
|
|
61
|
-
"//overrides": "fix vitest peerOptional declaring @types/node >=20, which is incompatible with us",
|
|
62
|
-
"overrides": {
|
|
63
|
-
"@types/node": "$@types/node"
|
|
60
|
+
"cbor-x": "^1.6.0",
|
|
61
|
+
"koffi": "^3.0.2"
|
|
64
62
|
}
|
|
65
63
|
}
|
package/dist/connection.d.ts
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Synchronous connection and stream multiplexing over stdio pipes.
|
|
3
|
-
*
|
|
4
|
-
* The Connection reads/writes raw bytes via file descriptors using
|
|
5
|
-
* `fs.readSync`/`fs.writeSync`. The Stream class provides request/reply
|
|
6
|
-
* semantics with CBOR encoding on top.
|
|
7
|
-
*
|
|
8
|
-
* @packageDocumentation
|
|
9
|
-
*/
|
|
10
|
-
import { type Packet } from "./protocol.js";
|
|
11
|
-
export declare class Connection {
|
|
12
|
-
private readFd;
|
|
13
|
-
private writeFd;
|
|
14
|
-
private nextStreamCounter;
|
|
15
|
-
private streamInboxes;
|
|
16
|
-
private serverExited;
|
|
17
|
-
constructor(readFd: number, writeFd: number);
|
|
18
|
-
markServerExited(): void;
|
|
19
|
-
hasServerExited(): boolean;
|
|
20
|
-
/**
|
|
21
|
-
* Read exactly `n` bytes from the pipe, blocking until available.
|
|
22
|
-
* Handles EAGAIN from non-blocking file descriptors.
|
|
23
|
-
*/
|
|
24
|
-
readExact(n: number): Buffer;
|
|
25
|
-
/**
|
|
26
|
-
* Write a packet to the server synchronously.
|
|
27
|
-
*/
|
|
28
|
-
sendPacket(packet: Packet): void;
|
|
29
|
-
/**
|
|
30
|
-
* Read packets until one for the given stream arrives.
|
|
31
|
-
* Packets for other streams are buffered in their inboxes.
|
|
32
|
-
*/
|
|
33
|
-
readPacketForStream(streamId: number): Packet;
|
|
34
|
-
/**
|
|
35
|
-
* Create a new client-initiated stream (odd ID).
|
|
36
|
-
*/
|
|
37
|
-
newStream(): Stream;
|
|
38
|
-
/**
|
|
39
|
-
* Connect to an existing server-allocated stream.
|
|
40
|
-
*/
|
|
41
|
-
connectStream(streamId: number): Stream;
|
|
42
|
-
/**
|
|
43
|
-
* Get the control stream (stream ID 0).
|
|
44
|
-
*/
|
|
45
|
-
controlStream(): Stream;
|
|
46
|
-
/**
|
|
47
|
-
* Remove buffered packets for a stream.
|
|
48
|
-
*/
|
|
49
|
-
unregisterStream(streamId: number): void;
|
|
50
|
-
}
|
|
51
|
-
export declare class Stream {
|
|
52
|
-
readonly streamId: number;
|
|
53
|
-
private connection;
|
|
54
|
-
private nextMessageId;
|
|
55
|
-
private responses;
|
|
56
|
-
private requests;
|
|
57
|
-
private closed;
|
|
58
|
-
constructor(streamId: number, connection: Connection);
|
|
59
|
-
markClosed(): void;
|
|
60
|
-
private checkClosed;
|
|
61
|
-
/**
|
|
62
|
-
* Send a request packet and return the message ID.
|
|
63
|
-
*/
|
|
64
|
-
sendRequest(payload: Buffer): number;
|
|
65
|
-
/**
|
|
66
|
-
* Send a reply to an incoming request.
|
|
67
|
-
*/
|
|
68
|
-
writeReply(messageId: number, payload: Buffer): void;
|
|
69
|
-
/**
|
|
70
|
-
* Wait for a reply to a previously sent request.
|
|
71
|
-
*/
|
|
72
|
-
receiveReply(messageId: number): Buffer;
|
|
73
|
-
/**
|
|
74
|
-
* Wait for an incoming request from the server.
|
|
75
|
-
*/
|
|
76
|
-
receiveRequest(): [number, Buffer];
|
|
77
|
-
/**
|
|
78
|
-
* Close this stream gracefully.
|
|
79
|
-
*/
|
|
80
|
-
close(): void;
|
|
81
|
-
}
|
|
82
|
-
//# sourceMappingURL=connection.d.ts.map
|
package/dist/connection.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,KAAK,MAAM,EAKZ,MAAM,eAAe,CAAC;AAgBvB,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAK3C,gBAAgB,IAAI,IAAI;IAIxB,eAAe,IAAI,OAAO;IAI1B;;;OAGG;IACH,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IA2B5B;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKhC;;;OAGG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAyB7C;;OAEG;IACH,SAAS,IAAI,MAAM;IAKnB;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIvC;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;CAGzC;AAMD,qBAAa,MAAM;IACjB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,MAAM,CAAS;gBAEX,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU;IAKpD,UAAU,IAAI,IAAI;IAIlB,OAAO,CAAC,WAAW;IAMnB;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAYpC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IASpD;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAyBvC;;OAEG;IACH,cAAc,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;IAmBlC;;OAEG;IACH,KAAK,IAAI,IAAI;CAWd"}
|