@hegeldev/hegel 0.1.0 → 0.1.2
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/dist/generators/combinators.d.ts +1 -1
- package/dist/generators/combinators.d.ts.map +1 -1
- package/dist/generators/combinators.js.map +1 -1
- package/dist/generators/strings.d.ts +2 -2
- package/dist/generators/strings.d.ts.map +1 -1
- package/package.json +7 -2
- package/dist/binary.d.ts +0 -27
- package/dist/binary.d.ts.map +0 -1
- package/dist/binary.js +0 -50
- package/dist/binary.js.map +0 -1
- package/dist/collections.d.ts +0 -114
- package/dist/collections.d.ts.map +0 -1
- package/dist/collections.js +0 -313
- package/dist/collections.js.map +0 -1
- package/dist/combinators.d.ts +0 -34
- package/dist/combinators.d.ts.map +0 -1
- package/dist/combinators.js +0 -152
- package/dist/combinators.js.map +0 -1
- package/dist/conformance.d.ts +0 -31
- package/dist/conformance.d.ts.map +0 -1
- package/dist/conformance.js +0 -60
- package/dist/conformance.js.map +0 -1
- package/dist/derive.d.ts +0 -225
- package/dist/derive.d.ts.map +0 -1
- package/dist/derive.js +0 -296
- package/dist/derive.js.map +0 -1
- package/dist/embedded.d.ts +0 -38
- package/dist/embedded.d.ts.map +0 -1
- package/dist/embedded.js +0 -237
- package/dist/embedded.js.map +0 -1
- package/dist/floats.d.ts +0 -57
- package/dist/floats.d.ts.map +0 -1
- package/dist/floats.js +0 -100
- package/dist/floats.js.map +0 -1
- package/dist/formats.d.ts +0 -62
- package/dist/formats.d.ts.map +0 -1
- package/dist/formats.js +0 -164
- package/dist/formats.js.map +0 -1
- package/dist/generator.d.ts +0 -80
- package/dist/generator.d.ts.map +0 -1
- package/dist/generator.js +0 -128
- package/dist/generator.js.map +0 -1
- package/dist/generators/primitives.d.ts +0 -138
- package/dist/generators/primitives.d.ts.map +0 -1
- package/dist/generators/primitives.js +0 -240
- package/dist/generators/primitives.js.map +0 -1
- package/dist/generators.d.ts +0 -408
- package/dist/generators.d.ts.map +0 -1
- package/dist/generators.js +0 -898
- package/dist/generators.js.map +0 -1
- package/dist/install.d.ts +0 -6
- package/dist/install.d.ts.map +0 -1
- package/dist/install.js +0 -91
- package/dist/install.js.map +0 -1
- package/dist/integers.d.ts +0 -37
- package/dist/integers.d.ts.map +0 -1
- package/dist/integers.js +0 -63
- package/dist/integers.js.map +0 -1
- package/dist/labels.d.ts +0 -21
- package/dist/labels.d.ts.map +0 -1
- package/dist/labels.js +0 -20
- package/dist/labels.js.map +0 -1
- package/dist/objects.d.ts +0 -39
- package/dist/objects.d.ts.map +0 -1
- package/dist/objects.js +0 -98
- package/dist/objects.js.map +0 -1
- package/dist/primitives.d.ts +0 -14
- package/dist/primitives.d.ts.map +0 -1
- package/dist/primitives.js +0 -51
- package/dist/primitives.js.map +0 -1
- package/dist/spans.d.ts +0 -23
- package/dist/spans.d.ts.map +0 -1
- package/dist/spans.js +0 -51
- package/dist/spans.js.map +0 -1
- package/dist/strings.d.ts +0 -67
- package/dist/strings.d.ts.map +0 -1
- package/dist/strings.js +0 -107
- package/dist/strings.js.map +0 -1
package/dist/derive.js
DELETED
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Type-directed generator derivation for the Hegel library.
|
|
3
|
-
*
|
|
4
|
-
* TypeScript erases interface and type information at compile time, but
|
|
5
|
-
* **classes** persist at runtime with real constructors and field names.
|
|
6
|
-
* This module uses TypeScript legacy decorators (`experimentalDecorators`)
|
|
7
|
-
* to associate generators with class fields. Users annotate their class
|
|
8
|
-
* with `@field(gen)` on each property, then call `deriveGenerator(MyClass)`
|
|
9
|
-
* to get a composite generator that builds instances by generating each
|
|
10
|
-
* field independently.
|
|
11
|
-
*
|
|
12
|
-
* For plain-object records (no class needed), use {@link recordGenerator}.
|
|
13
|
-
*
|
|
14
|
-
* For sum types (discriminated unions), {@link variantGenerator} builds
|
|
15
|
-
* a generator that picks a variant uniformly at random and produces an
|
|
16
|
-
* object with the discriminant tag and generated fields.
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```ts
|
|
20
|
-
* class Point {
|
|
21
|
-
* \@field(floats(-100, 100))
|
|
22
|
-
* x!: number;
|
|
23
|
-
*
|
|
24
|
-
* \@field(floats(-100, 100))
|
|
25
|
-
* y!: number;
|
|
26
|
-
* }
|
|
27
|
-
*
|
|
28
|
-
* const gen = deriveGenerator(Point);
|
|
29
|
-
* // draw(gen) returns a Point instance with random x, y
|
|
30
|
-
* ```
|
|
31
|
-
*
|
|
32
|
-
* @packageDocumentation
|
|
33
|
-
*/
|
|
34
|
-
import { Generator, BasicGenerator } from "./generators/index.js";
|
|
35
|
-
import { startSpan, stopSpan, Labels } from "./runner.js";
|
|
36
|
-
/**
|
|
37
|
-
* Map from constructor → ordered list of field metadata.
|
|
38
|
-
* Each class that uses `@field(...)` gets an entry here.
|
|
39
|
-
* @internal
|
|
40
|
-
*/
|
|
41
|
-
export const _classFieldMeta = new Map();
|
|
42
|
-
/** Global counter to ensure deterministic field ordering. @internal */
|
|
43
|
-
let _fieldOrder = 0;
|
|
44
|
-
/**
|
|
45
|
-
* Reset the field order counter. Only for testing.
|
|
46
|
-
* @internal
|
|
47
|
-
*/
|
|
48
|
-
export function _resetFieldOrder() {
|
|
49
|
-
_fieldOrder = 0;
|
|
50
|
-
}
|
|
51
|
-
// ---------------------------------------------------------------------------
|
|
52
|
-
// @field decorator
|
|
53
|
-
// ---------------------------------------------------------------------------
|
|
54
|
-
/**
|
|
55
|
-
* Decorator that associates a {@link Generator} with a class field.
|
|
56
|
-
*
|
|
57
|
-
* Use this on each field of a class before calling {@link deriveGenerator}.
|
|
58
|
-
* Fields are generated in decorator-application order (typically top to
|
|
59
|
-
* bottom in the class body).
|
|
60
|
-
*
|
|
61
|
-
* Requires `experimentalDecorators: true` in `tsconfig.json`.
|
|
62
|
-
*
|
|
63
|
-
* @example
|
|
64
|
-
* ```ts
|
|
65
|
-
* class User {
|
|
66
|
-
* \@field(text(1, 50))
|
|
67
|
-
* name!: string;
|
|
68
|
-
*
|
|
69
|
-
* \@field(integers(18, 120))
|
|
70
|
-
* age!: number;
|
|
71
|
-
* }
|
|
72
|
-
* ```
|
|
73
|
-
*
|
|
74
|
-
* @param gen - The generator to use for this field's values.
|
|
75
|
-
*/
|
|
76
|
-
export function field(gen) {
|
|
77
|
-
return function (target, propertyKey) {
|
|
78
|
-
const ctor = target.constructor;
|
|
79
|
-
let list = _classFieldMeta.get(ctor);
|
|
80
|
-
if (!list) {
|
|
81
|
-
list = [];
|
|
82
|
-
_classFieldMeta.set(ctor, list);
|
|
83
|
-
}
|
|
84
|
-
list.push({ name: propertyKey, generator: gen, order: _fieldOrder++ });
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
// ---------------------------------------------------------------------------
|
|
88
|
-
// DerivedGenerator
|
|
89
|
-
// ---------------------------------------------------------------------------
|
|
90
|
-
/**
|
|
91
|
-
* A generator that produces instances of a class by generating each
|
|
92
|
-
* decorated field independently.
|
|
93
|
-
*
|
|
94
|
-
* Uses a FIXED_DICT span (label 10) to group the field generations,
|
|
95
|
-
* matching the Hegel protocol's semantic for record/struct types.
|
|
96
|
-
*
|
|
97
|
-
* @typeParam T - The class type being generated.
|
|
98
|
-
*/
|
|
99
|
-
export class DerivedGenerator extends Generator {
|
|
100
|
-
/** @internal */
|
|
101
|
-
_ctor;
|
|
102
|
-
/** @internal */
|
|
103
|
-
_fields;
|
|
104
|
-
constructor(ctor, fields) {
|
|
105
|
-
super();
|
|
106
|
-
this._ctor = ctor;
|
|
107
|
-
this._fields = [...fields].sort((a, b) => a.order - b.order);
|
|
108
|
-
}
|
|
109
|
-
async doDraw(data) {
|
|
110
|
-
await startSpan(Labels.FIXED_DICT, data);
|
|
111
|
-
try {
|
|
112
|
-
const instance = new this._ctor();
|
|
113
|
-
for (const f of this._fields) {
|
|
114
|
-
instance[f.name] = await f.generator.doDraw(data);
|
|
115
|
-
}
|
|
116
|
-
return instance;
|
|
117
|
-
}
|
|
118
|
-
finally {
|
|
119
|
-
await stopSpan({}, data);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
// ---------------------------------------------------------------------------
|
|
124
|
-
// deriveGenerator
|
|
125
|
-
// ---------------------------------------------------------------------------
|
|
126
|
-
/**
|
|
127
|
-
* Derive a generator for a class from its `@field(...)` annotations.
|
|
128
|
-
*
|
|
129
|
-
* Reads the generator metadata registered by the {@link field} decorator
|
|
130
|
-
* and returns a {@link DerivedGenerator} that produces instances of the
|
|
131
|
-
* class with each field independently generated.
|
|
132
|
-
*
|
|
133
|
-
* @param ctor - The class constructor (must have a no-arg constructor).
|
|
134
|
-
* @throws {Error} If the class has no `@field` annotations.
|
|
135
|
-
*
|
|
136
|
-
* @example
|
|
137
|
-
* ```ts
|
|
138
|
-
* class Config {
|
|
139
|
-
* \@field(booleans()) debug!: boolean;
|
|
140
|
-
* \@field(integers(1, 65535)) port!: number;
|
|
141
|
-
* }
|
|
142
|
-
* const gen = deriveGenerator(Config);
|
|
143
|
-
* const cfg = await draw(gen); // Config { debug: true, port: 8080 }
|
|
144
|
-
* ```
|
|
145
|
-
*/
|
|
146
|
-
export function deriveGenerator(ctor) {
|
|
147
|
-
const fields = _classFieldMeta.get(ctor);
|
|
148
|
-
if (!fields || fields.length === 0) {
|
|
149
|
-
throw new Error(`No @field annotations found on ${ctor.name}. ` +
|
|
150
|
-
`Decorate fields with @field(generator) before calling deriveGenerator().`);
|
|
151
|
-
}
|
|
152
|
-
return new DerivedGenerator(ctor, fields);
|
|
153
|
-
}
|
|
154
|
-
// ---------------------------------------------------------------------------
|
|
155
|
-
// recordGenerator — anonymous record derivation (no class needed)
|
|
156
|
-
// ---------------------------------------------------------------------------
|
|
157
|
-
/**
|
|
158
|
-
* A generator that produces plain objects from a schema mapping.
|
|
159
|
-
*
|
|
160
|
-
* Uses a FIXED_DICT span (label 10) internally.
|
|
161
|
-
*
|
|
162
|
-
* @typeParam T - The resulting object type.
|
|
163
|
-
*/
|
|
164
|
-
export class RecordDerivedGenerator extends Generator {
|
|
165
|
-
/** @internal */
|
|
166
|
-
_entries;
|
|
167
|
-
constructor(entries) {
|
|
168
|
-
super();
|
|
169
|
-
this._entries = entries;
|
|
170
|
-
}
|
|
171
|
-
async doDraw(data) {
|
|
172
|
-
await startSpan(Labels.FIXED_DICT, data);
|
|
173
|
-
try {
|
|
174
|
-
const result = {};
|
|
175
|
-
for (const [key, gen] of this._entries) {
|
|
176
|
-
result[key] = await gen.doDraw(data);
|
|
177
|
-
}
|
|
178
|
-
return result;
|
|
179
|
-
}
|
|
180
|
-
finally {
|
|
181
|
-
await stopSpan({}, data);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Derive a generator for a plain-object record type from a schema mapping
|
|
187
|
-
* field names to generators.
|
|
188
|
-
*
|
|
189
|
-
* This is the "no-class" alternative: the user provides the structure
|
|
190
|
-
* explicitly as an object mapping field names to generators. The result
|
|
191
|
-
* is a generator that produces plain objects with the specified fields.
|
|
192
|
-
*
|
|
193
|
-
* @example
|
|
194
|
-
* ```ts
|
|
195
|
-
* const pointGen = recordGenerator({
|
|
196
|
-
* x: floats(-100, 100),
|
|
197
|
-
* y: floats(-100, 100),
|
|
198
|
-
* });
|
|
199
|
-
* const pt = await draw(pointGen); // { x: 42.5, y: -3.14 }
|
|
200
|
-
* ```
|
|
201
|
-
*
|
|
202
|
-
* @param schema - Mapping from field name to its generator.
|
|
203
|
-
* @throws {Error} If the schema has no fields.
|
|
204
|
-
*/
|
|
205
|
-
export function recordGenerator(schema) {
|
|
206
|
-
const entries = Object.entries(schema);
|
|
207
|
-
if (entries.length === 0) {
|
|
208
|
-
throw new Error("recordGenerator requires at least one field.");
|
|
209
|
-
}
|
|
210
|
-
return new RecordDerivedGenerator(entries);
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* A generator that produces values of a discriminated union type.
|
|
214
|
-
*
|
|
215
|
-
* Picks a variant uniformly at random, generates its fields, and returns
|
|
216
|
-
* an object with the discriminant key set to the variant tag, plus the
|
|
217
|
-
* generated field values spread in. Uses an ENUM_VARIANT span (label 15)
|
|
218
|
-
* for each generated value.
|
|
219
|
-
*
|
|
220
|
-
* @typeParam T - The union type being generated.
|
|
221
|
-
*/
|
|
222
|
-
export class VariantGenerator extends Generator {
|
|
223
|
-
/** @internal */
|
|
224
|
-
_variants;
|
|
225
|
-
/** @internal */
|
|
226
|
-
_discriminant;
|
|
227
|
-
/** @internal */
|
|
228
|
-
_indexGen;
|
|
229
|
-
constructor(variants, discriminant) {
|
|
230
|
-
super();
|
|
231
|
-
this._variants = variants;
|
|
232
|
-
this._discriminant = discriminant;
|
|
233
|
-
this._indexGen = new BasicGenerator({
|
|
234
|
-
type: "integer",
|
|
235
|
-
min_value: 0,
|
|
236
|
-
max_value: variants.length - 1,
|
|
237
|
-
});
|
|
238
|
-
}
|
|
239
|
-
async doDraw(data) {
|
|
240
|
-
await startSpan(Labels.ENUM_VARIANT, data);
|
|
241
|
-
try {
|
|
242
|
-
const index = await this._indexGen.doDraw(data);
|
|
243
|
-
const variant = this._variants[index];
|
|
244
|
-
if (variant.fields !== null) {
|
|
245
|
-
const fields = await variant.fields.doDraw(data);
|
|
246
|
-
return { [this._discriminant]: variant.tag, ...fields };
|
|
247
|
-
}
|
|
248
|
-
return { [this._discriminant]: variant.tag };
|
|
249
|
-
}
|
|
250
|
-
finally {
|
|
251
|
-
await stopSpan({}, data);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Derive a generator for a discriminated union (sum type).
|
|
257
|
-
*
|
|
258
|
-
* Takes a mapping from variant tag names to their field generators (or
|
|
259
|
-
* `null` for data-less variants). Returns a {@link VariantGenerator}
|
|
260
|
-
* that picks a variant uniformly at random and generates its fields.
|
|
261
|
-
*
|
|
262
|
-
* @example
|
|
263
|
-
* ```ts
|
|
264
|
-
* type Shape =
|
|
265
|
-
* | { type: "circle"; radius: number }
|
|
266
|
-
* | { type: "rectangle"; width: number; height: number };
|
|
267
|
-
*
|
|
268
|
-
* const shapeGen = variantGenerator<Shape>({
|
|
269
|
-
* circle: recordGenerator({ radius: floats(0.1, 100) }),
|
|
270
|
-
* rectangle: recordGenerator({
|
|
271
|
-
* width: floats(0.1, 100),
|
|
272
|
-
* height: floats(0.1, 100),
|
|
273
|
-
* }),
|
|
274
|
-
* });
|
|
275
|
-
*
|
|
276
|
-
* const shape = await draw(shapeGen);
|
|
277
|
-
* // { type: "circle", radius: 42.5 } or { type: "rectangle", width: 10, height: 20 }
|
|
278
|
-
* ```
|
|
279
|
-
*
|
|
280
|
-
* @param variants - Mapping from tag name to field generator (or `null`
|
|
281
|
-
* for data-less variants).
|
|
282
|
-
* @param discriminant - The discriminant property name. Defaults to `"type"`.
|
|
283
|
-
* @throws {Error} If fewer than 2 variants are provided.
|
|
284
|
-
*/
|
|
285
|
-
export function variantGenerator(variants, discriminant = "type") {
|
|
286
|
-
const entries = Object.entries(variants);
|
|
287
|
-
if (entries.length < 2) {
|
|
288
|
-
throw new Error("variantGenerator requires at least 2 variants.");
|
|
289
|
-
}
|
|
290
|
-
const defs = entries.map(([tag, gen]) => ({
|
|
291
|
-
tag,
|
|
292
|
-
fields: gen,
|
|
293
|
-
}));
|
|
294
|
-
return new VariantGenerator(defs, discriminant);
|
|
295
|
-
}
|
|
296
|
-
//# sourceMappingURL=derive.js.map
|
package/dist/derive.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"derive.js","sourceRoot":"","sources":["../src/derive.ts"],"names":[],"mappings":"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"}
|
package/dist/embedded.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
export declare enum Verbosity {
|
|
2
|
-
Quiet = "quiet",
|
|
3
|
-
Normal = "normal",
|
|
4
|
-
Verbose = "verbose",
|
|
5
|
-
Debug = "debug"
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Special error thrown by assume() to signal test rejection.
|
|
9
|
-
*/
|
|
10
|
-
export declare class RejectError extends Error {
|
|
11
|
-
constructor();
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Builder class for configuring and running Hegel tests.
|
|
15
|
-
*/
|
|
16
|
-
export declare class Hegel {
|
|
17
|
-
private testFn;
|
|
18
|
-
private _testCases;
|
|
19
|
-
private _verbosity;
|
|
20
|
-
constructor(testFn: () => void);
|
|
21
|
-
/**
|
|
22
|
-
* Set the number of test cases to run.
|
|
23
|
-
*/
|
|
24
|
-
testCases(n: number): this;
|
|
25
|
-
/**
|
|
26
|
-
* Set the verbosity level.
|
|
27
|
-
*/
|
|
28
|
-
verbosity(v: Verbosity): this;
|
|
29
|
-
/**
|
|
30
|
-
* Run the test.
|
|
31
|
-
*/
|
|
32
|
-
run(): Promise<void>;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Simple wrapper for running a Hegel test with default options.
|
|
36
|
-
*/
|
|
37
|
-
export declare function hegel(testFn: () => void): Promise<void>;
|
|
38
|
-
//# sourceMappingURL=embedded.d.ts.map
|
package/dist/embedded.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"embedded.d.ts","sourceRoot":"","sources":["../src/embedded.ts"],"names":[],"mappings":"AAkBA,oBAAY,SAAS;IACnB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;;CAKrC;AAED;;GAEG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,UAAU,CAA8B;gBAEpC,MAAM,EAAE,MAAM,IAAI;IAI9B;;OAEG;IACH,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAK1B;;OAEG;IACH,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI;IAK7B;;OAEG;IACH,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAGrB;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvD"}
|
package/dist/embedded.js
DELETED
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Embedded mode implementation for Hegel TypeScript SDK.
|
|
3
|
-
*
|
|
4
|
-
* Creates a Unix socket server, spawns the hegel CLI in client mode,
|
|
5
|
-
* and manages the test loop.
|
|
6
|
-
*/
|
|
7
|
-
import * as net from "node:net";
|
|
8
|
-
import * as fs from "node:fs";
|
|
9
|
-
import * as os from "node:os";
|
|
10
|
-
import * as path from "node:path";
|
|
11
|
-
import { spawn } from "node:child_process";
|
|
12
|
-
import { ensureHegel } from "./install.js";
|
|
13
|
-
import { setEmbeddedConnection, clearEmbeddedConnection, setIsLastRun, } from "./connection.js";
|
|
14
|
-
export var Verbosity;
|
|
15
|
-
(function (Verbosity) {
|
|
16
|
-
Verbosity["Quiet"] = "quiet";
|
|
17
|
-
Verbosity["Normal"] = "normal";
|
|
18
|
-
Verbosity["Verbose"] = "verbose";
|
|
19
|
-
Verbosity["Debug"] = "debug";
|
|
20
|
-
})(Verbosity || (Verbosity = {}));
|
|
21
|
-
/**
|
|
22
|
-
* Special error thrown by assume() to signal test rejection.
|
|
23
|
-
*/
|
|
24
|
-
export class RejectError extends Error {
|
|
25
|
-
constructor() {
|
|
26
|
-
super("HEGEL_REJECT");
|
|
27
|
-
this.name = "RejectError";
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Builder class for configuring and running Hegel tests.
|
|
32
|
-
*/
|
|
33
|
-
export class Hegel {
|
|
34
|
-
testFn;
|
|
35
|
-
_testCases = 100;
|
|
36
|
-
_verbosity = Verbosity.Normal;
|
|
37
|
-
constructor(testFn) {
|
|
38
|
-
this.testFn = testFn;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Set the number of test cases to run.
|
|
42
|
-
*/
|
|
43
|
-
testCases(n) {
|
|
44
|
-
this._testCases = n;
|
|
45
|
-
return this;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Set the verbosity level.
|
|
49
|
-
*/
|
|
50
|
-
verbosity(v) {
|
|
51
|
-
this._verbosity = v;
|
|
52
|
-
return this;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Run the test.
|
|
56
|
-
*/
|
|
57
|
-
run() {
|
|
58
|
-
return runEmbedded(this.testFn, this._testCases, this._verbosity);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Simple wrapper for running a Hegel test with default options.
|
|
63
|
-
*/
|
|
64
|
-
export function hegel(testFn) {
|
|
65
|
-
return new Hegel(testFn).run();
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Run embedded mode: create socket server, spawn hegel, handle connections.
|
|
69
|
-
* Returns a Promise that resolves when all tests complete.
|
|
70
|
-
*/
|
|
71
|
-
function runEmbedded(testFn, testCases, verbosity) {
|
|
72
|
-
return new Promise((resolve, reject) => {
|
|
73
|
-
const hegelPath = ensureHegel();
|
|
74
|
-
// Create temp directory for socket
|
|
75
|
-
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "hegel-ts-"));
|
|
76
|
-
const socketPath = path.join(tmpDir, "hegel.sock");
|
|
77
|
-
// Track exit code from hegel process
|
|
78
|
-
let hegelExitCode = 0;
|
|
79
|
-
// Track cleanup state
|
|
80
|
-
let cleaned = false;
|
|
81
|
-
const cleanup = () => {
|
|
82
|
-
if (cleaned)
|
|
83
|
-
return;
|
|
84
|
-
cleaned = true;
|
|
85
|
-
try {
|
|
86
|
-
fs.unlinkSync(socketPath);
|
|
87
|
-
}
|
|
88
|
-
catch { }
|
|
89
|
-
try {
|
|
90
|
-
fs.rmdirSync(tmpDir);
|
|
91
|
-
}
|
|
92
|
-
catch { }
|
|
93
|
-
};
|
|
94
|
-
// Create Unix socket server
|
|
95
|
-
const server = net.createServer();
|
|
96
|
-
server.listen(socketPath);
|
|
97
|
-
// Spawn hegel in client mode
|
|
98
|
-
const child = spawn(hegelPath, [
|
|
99
|
-
"--client-mode",
|
|
100
|
-
socketPath,
|
|
101
|
-
"--test-cases",
|
|
102
|
-
testCases.toString(),
|
|
103
|
-
"--no-tui",
|
|
104
|
-
"--verbosity",
|
|
105
|
-
verbosity,
|
|
106
|
-
], {
|
|
107
|
-
stdio: ["ignore", "inherit", "inherit"],
|
|
108
|
-
});
|
|
109
|
-
child.on("exit", code => {
|
|
110
|
-
if (verbosity === Verbosity.Debug) {
|
|
111
|
-
console.error(`hegel-ts: hegel exited with code ${code}`);
|
|
112
|
-
}
|
|
113
|
-
hegelExitCode = code ?? 0;
|
|
114
|
-
server.close();
|
|
115
|
-
});
|
|
116
|
-
child.on("error", err => {
|
|
117
|
-
console.error(`hegel-ts: failed to spawn hegel: ${err.message}`);
|
|
118
|
-
cleanup();
|
|
119
|
-
reject(new Error(`Failed to spawn hegel: ${err.message}`));
|
|
120
|
-
});
|
|
121
|
-
// Handle connections synchronously using a queue
|
|
122
|
-
const connectionQueue = [];
|
|
123
|
-
let processing = false;
|
|
124
|
-
let connectionCount = 0;
|
|
125
|
-
server.on("connection", socket => {
|
|
126
|
-
connectionCount++;
|
|
127
|
-
if (verbosity === Verbosity.Debug) {
|
|
128
|
-
console.error(`hegel-ts: connection #${connectionCount} received`);
|
|
129
|
-
}
|
|
130
|
-
connectionQueue.push(socket);
|
|
131
|
-
processQueue();
|
|
132
|
-
});
|
|
133
|
-
function processQueue() {
|
|
134
|
-
if (processing || connectionQueue.length === 0)
|
|
135
|
-
return;
|
|
136
|
-
processing = true;
|
|
137
|
-
const socket = connectionQueue.shift();
|
|
138
|
-
if (verbosity === Verbosity.Debug) {
|
|
139
|
-
console.error(`hegel-ts: processing connection, queue size: ${connectionQueue.length}`);
|
|
140
|
-
}
|
|
141
|
-
handleConnection(socket, testFn, verbosity)
|
|
142
|
-
.catch(err => {
|
|
143
|
-
console.error(`hegel-ts: connection error: ${err.message}`);
|
|
144
|
-
})
|
|
145
|
-
.finally(() => {
|
|
146
|
-
if (verbosity === Verbosity.Debug) {
|
|
147
|
-
console.error(`hegel-ts: connection complete`);
|
|
148
|
-
}
|
|
149
|
-
processing = false;
|
|
150
|
-
processQueue();
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
server.on("close", () => {
|
|
154
|
-
if (verbosity === Verbosity.Debug) {
|
|
155
|
-
console.error("hegel-ts: server closed");
|
|
156
|
-
}
|
|
157
|
-
cleanup();
|
|
158
|
-
if (hegelExitCode !== 0) {
|
|
159
|
-
reject(new Error(`Hegel server exited with code ${hegelExitCode}`));
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
resolve();
|
|
163
|
-
});
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Handle a single connection from hegel (one test case).
|
|
168
|
-
*/
|
|
169
|
-
async function handleConnection(socket, testFn, verbosity) {
|
|
170
|
-
return new Promise((resolve, reject) => {
|
|
171
|
-
let buffer = "";
|
|
172
|
-
const onData = (data) => {
|
|
173
|
-
buffer += data.toString();
|
|
174
|
-
// Check for complete handshake message
|
|
175
|
-
const newlineIndex = buffer.indexOf("\n");
|
|
176
|
-
if (newlineIndex === -1)
|
|
177
|
-
return;
|
|
178
|
-
const line = buffer.slice(0, newlineIndex);
|
|
179
|
-
buffer = buffer.slice(newlineIndex + 1);
|
|
180
|
-
socket.removeListener("data", onData);
|
|
181
|
-
try {
|
|
182
|
-
// Parse handshake
|
|
183
|
-
const handshake = JSON.parse(line);
|
|
184
|
-
const isLastRun = handshake.is_last_run ?? false;
|
|
185
|
-
if (verbosity === Verbosity.Debug) {
|
|
186
|
-
console.error(`hegel-ts: handshake received: is_last_run=${isLastRun}`);
|
|
187
|
-
}
|
|
188
|
-
// Send acknowledgment
|
|
189
|
-
socket.write(JSON.stringify({ type: "handshake_ack" }) + "\n");
|
|
190
|
-
// Set up connection state for generators
|
|
191
|
-
setIsLastRun(isLastRun);
|
|
192
|
-
setEmbeddedConnection(socket, buffer);
|
|
193
|
-
// Run test function
|
|
194
|
-
let result;
|
|
195
|
-
try {
|
|
196
|
-
testFn();
|
|
197
|
-
result = { type: "test_result", result: "pass" };
|
|
198
|
-
}
|
|
199
|
-
catch (err) {
|
|
200
|
-
if (err instanceof RejectError) {
|
|
201
|
-
result = { type: "test_result", result: "reject" };
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
205
|
-
result = { type: "test_result", result: "fail", message };
|
|
206
|
-
// Print error details on last run
|
|
207
|
-
if (isLastRun) {
|
|
208
|
-
console.error(`\nTest failed: ${message}`);
|
|
209
|
-
if (err instanceof Error && err.stack) {
|
|
210
|
-
console.error(err.stack);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
finally {
|
|
216
|
-
clearEmbeddedConnection();
|
|
217
|
-
}
|
|
218
|
-
if (verbosity === Verbosity.Debug) {
|
|
219
|
-
console.error(`hegel-ts: sending result: ${JSON.stringify(result)}`);
|
|
220
|
-
}
|
|
221
|
-
// Send result
|
|
222
|
-
socket.write(JSON.stringify(result) + "\n", () => {
|
|
223
|
-
socket.end();
|
|
224
|
-
resolve();
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
catch (err) {
|
|
228
|
-
socket.end();
|
|
229
|
-
reject(err);
|
|
230
|
-
}
|
|
231
|
-
};
|
|
232
|
-
socket.on("data", onData);
|
|
233
|
-
socket.on("error", reject);
|
|
234
|
-
socket.on("close", () => resolve());
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
//# sourceMappingURL=embedded.js.map
|
package/dist/embedded.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"embedded.js","sourceRoot":"","sources":["../src/embedded.ts"],"names":[],"mappings":"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"}
|
package/dist/floats.d.ts
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { JsonSchema, BaseGenerator } from "./generator.js";
|
|
2
|
-
/**
|
|
3
|
-
* Generator for floating-point values with builder pattern.
|
|
4
|
-
*/
|
|
5
|
-
export declare class FloatGenerator extends BaseGenerator<number> {
|
|
6
|
-
private readonly _min?;
|
|
7
|
-
private readonly _max?;
|
|
8
|
-
private readonly _excludeMin;
|
|
9
|
-
private readonly _excludeMax;
|
|
10
|
-
private readonly _allowNan;
|
|
11
|
-
private readonly _allowInfinity;
|
|
12
|
-
private constructor();
|
|
13
|
-
/**
|
|
14
|
-
* Create a new FloatGenerator.
|
|
15
|
-
*/
|
|
16
|
-
static create(): FloatGenerator;
|
|
17
|
-
/**
|
|
18
|
-
* Set the minimum value.
|
|
19
|
-
*/
|
|
20
|
-
min(value: number): FloatGenerator;
|
|
21
|
-
/**
|
|
22
|
-
* Set the maximum value.
|
|
23
|
-
*/
|
|
24
|
-
max(value: number): FloatGenerator;
|
|
25
|
-
/**
|
|
26
|
-
* Exclude the minimum value from the range.
|
|
27
|
-
*/
|
|
28
|
-
excludeMin(): FloatGenerator;
|
|
29
|
-
/**
|
|
30
|
-
* Exclude the maximum value from the range.
|
|
31
|
-
*/
|
|
32
|
-
excludeMax(): FloatGenerator;
|
|
33
|
-
/**
|
|
34
|
-
* Set whether NaN values can be generated.
|
|
35
|
-
*/
|
|
36
|
-
allowNan(allow: boolean): FloatGenerator;
|
|
37
|
-
/**
|
|
38
|
-
* Set whether infinity values can be generated.
|
|
39
|
-
*/
|
|
40
|
-
allowInfinity(allow: boolean): FloatGenerator;
|
|
41
|
-
generate(): number;
|
|
42
|
-
schema(): JsonSchema;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Create a generator for floating-point values.
|
|
46
|
-
*
|
|
47
|
-
* @example
|
|
48
|
-
* ```typescript
|
|
49
|
-
* // Generate any float
|
|
50
|
-
* const gen = floats();
|
|
51
|
-
*
|
|
52
|
-
* // Generate floats in a range (exclusive)
|
|
53
|
-
* const bounded = floats().min(0).max(1).excludeMin().excludeMax();
|
|
54
|
-
* ```
|
|
55
|
-
*/
|
|
56
|
-
export declare function floats(): FloatGenerator;
|
|
57
|
-
//# sourceMappingURL=floats.d.ts.map
|
package/dist/floats.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"floats.d.ts","sourceRoot":"","sources":["../src/floats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE1D;;GAEG;AACH,qBAAa,cAAe,SAAQ,aAAa,CAAC,MAAM,CAAC;IAErD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IANjC,OAAO;IAWP;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,cAAc;IAI/B;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc;IAWlC;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc;IAWlC;;OAEG;IACH,UAAU,IAAI,cAAc;IAW5B;;OAEG;IACH,UAAU,IAAI,cAAc;IAW5B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc;IAWxC;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc;IAW7C,QAAQ,IAAI,MAAM;IAIlB,MAAM,IAAI,UAAU;CAoBrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,IAAI,cAAc,CAEvC"}
|