smokin 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/LICENSE +21 -0
  3. package/README.md +366 -0
  4. package/dist/dataset/dataset.d.ts +43 -0
  5. package/dist/dataset/dataset.d.ts.map +1 -0
  6. package/dist/dataset/dataset.js +63 -0
  7. package/dist/dataset/dataset.js.map +1 -0
  8. package/dist/dataset/relate.d.ts +32 -0
  9. package/dist/dataset/relate.d.ts.map +1 -0
  10. package/dist/dataset/relate.js +46 -0
  11. package/dist/dataset/relate.js.map +1 -0
  12. package/dist/foundation/axes.d.ts +92 -0
  13. package/dist/foundation/axes.d.ts.map +1 -0
  14. package/dist/foundation/axes.js +42 -0
  15. package/dist/foundation/axes.js.map +1 -0
  16. package/dist/foundation/errors.d.ts +30 -0
  17. package/dist/foundation/errors.d.ts.map +1 -0
  18. package/dist/foundation/errors.js +53 -0
  19. package/dist/foundation/errors.js.map +1 -0
  20. package/dist/foundation/hash.d.ts +16 -0
  21. package/dist/foundation/hash.d.ts.map +1 -0
  22. package/dist/foundation/hash.js +26 -0
  23. package/dist/foundation/hash.js.map +1 -0
  24. package/dist/foundation/ir.d.ts +79 -0
  25. package/dist/foundation/ir.d.ts.map +1 -0
  26. package/dist/foundation/ir.js +16 -0
  27. package/dist/foundation/ir.js.map +1 -0
  28. package/dist/foundation/prng.d.ts +27 -0
  29. package/dist/foundation/prng.d.ts.map +1 -0
  30. package/dist/foundation/prng.js +56 -0
  31. package/dist/foundation/prng.js.map +1 -0
  32. package/dist/foundation/types.d.ts +59 -0
  33. package/dist/foundation/types.d.ts.map +1 -0
  34. package/dist/foundation/types.js +99 -0
  35. package/dist/foundation/types.js.map +1 -0
  36. package/dist/foundation/walk.d.ts +43 -0
  37. package/dist/foundation/walk.d.ts.map +1 -0
  38. package/dist/foundation/walk.js +156 -0
  39. package/dist/foundation/walk.js.map +1 -0
  40. package/dist/generator/engine.d.ts +62 -0
  41. package/dist/generator/engine.d.ts.map +1 -0
  42. package/dist/generator/engine.js +369 -0
  43. package/dist/generator/engine.js.map +1 -0
  44. package/dist/generator/replay.d.ts +31 -0
  45. package/dist/generator/replay.d.ts.map +1 -0
  46. package/dist/generator/replay.js +66 -0
  47. package/dist/generator/replay.js.map +1 -0
  48. package/dist/generator/trace.d.ts +50 -0
  49. package/dist/generator/trace.d.ts.map +1 -0
  50. package/dist/generator/trace.js +39 -0
  51. package/dist/generator/trace.js.map +1 -0
  52. package/dist/index.d.ts +32 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +37 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/schema/composites.d.ts +91 -0
  57. package/dist/schema/composites.d.ts.map +1 -0
  58. package/dist/schema/composites.js +94 -0
  59. package/dist/schema/composites.js.map +1 -0
  60. package/dist/schema/conditional.d.ts +22 -0
  61. package/dist/schema/conditional.d.ts.map +1 -0
  62. package/dist/schema/conditional.js +29 -0
  63. package/dist/schema/conditional.js.map +1 -0
  64. package/dist/schema/decimal.d.ts +31 -0
  65. package/dist/schema/decimal.d.ts.map +1 -0
  66. package/dist/schema/decimal.js +39 -0
  67. package/dist/schema/decimal.js.map +1 -0
  68. package/dist/schema/primitives.d.ts +29 -0
  69. package/dist/schema/primitives.d.ts.map +1 -0
  70. package/dist/schema/primitives.js +44 -0
  71. package/dist/schema/primitives.js.map +1 -0
  72. package/dist/validator/parse.d.ts +17 -0
  73. package/dist/validator/parse.d.ts.map +1 -0
  74. package/dist/validator/parse.js +218 -0
  75. package/dist/validator/parse.js.map +1 -0
  76. package/package.json +59 -0
@@ -0,0 +1,369 @@
1
+ /**
2
+ * Generator engine — turns a SchemaNode + context into a deterministic value.
3
+ *
4
+ * Phase 2 wires the 8 data-schema axes (Z_PLAN §4.5) into the pipeline.
5
+ * Resolution priority during sampling (Z_PLAN §4.6.1):
6
+ *
7
+ * 1. invariants (rejection-sample until they hold; bounded by MAX_ATTEMPTS)
8
+ * 2. identity (handled at dataset layer; not seen here)
9
+ * 3. derived (computed from sibling/root context — skip sampling entirely)
10
+ * 4. conditional (union / discriminated branch selection)
11
+ * 5. domain (closed candidate set)
12
+ * 6. distribution (weighted / normal / typical)
13
+ * 7. type (fall-back bounds from the IR)
14
+ */
15
+ import { SchemaConflictError } from '../foundation/errors.js';
16
+ import { mulberry32, rngFromString } from '../foundation/prng.js';
17
+ const DEFAULT_SEED = 'smokin';
18
+ const MAX_ATTEMPTS = 100;
19
+ /**
20
+ * Generate a value that conforms to the given schema.
21
+ *
22
+ * Deterministic: identical `schema` + `options.seed` always yields the same
23
+ * value, on every machine, every run.
24
+ */
25
+ export const mock = (schema, options = {}) => {
26
+ const seedKey = typeof options.seed === 'number' ? String(options.seed) : (options.seed ?? DEFAULT_SEED);
27
+ const rng = typeof options.seed === 'number' ? mulberry32(options.seed) : rngFromString(seedKey);
28
+ const state = {
29
+ rng,
30
+ rootSeed: seedKey,
31
+ root: undefined,
32
+ ...(options.input !== undefined ? { input: options.input } : {}),
33
+ ...(options.index !== undefined ? { rootIndex: options.index } : {}),
34
+ ...(options.trace !== undefined ? { trace: options.trace } : {}),
35
+ ...(options.stableBy !== undefined ? { stableBy: options.stableBy } : {}),
36
+ };
37
+ const value = generateNode(schema._node, [], EMPTY_PARENT, state);
38
+ state.root = value;
39
+ return value;
40
+ };
41
+ /**
42
+ * Pick the rng to use for a single leaf sample.
43
+ *
44
+ * Falls back to the shared `state.rng` unless `stableBy` is configured and
45
+ * returns a non-empty string for the current node — in which case a fresh
46
+ * deterministic rng is seeded by `${key}:${path}`.
47
+ */
48
+ const pickLeafRng = (state, parent, path) => {
49
+ if (state.stableBy === undefined)
50
+ return state.rng;
51
+ const key = state.stableBy(makeCtx(state, parent, path));
52
+ if (key == null || key === '')
53
+ return state.rng;
54
+ return rngFromString(`${key}:${path.join('.')}`);
55
+ };
56
+ const EMPTY_PARENT = Object.freeze({});
57
+ /** Find the nearest numeric element walking the path from the end. */
58
+ const nearestNumericIndex = (path) => {
59
+ for (let i = path.length - 1; i >= 0; i -= 1) {
60
+ const seg = path[i];
61
+ if (typeof seg === 'number')
62
+ return seg;
63
+ }
64
+ return undefined;
65
+ };
66
+ const makeCtx = (state, parent, path) => {
67
+ const pathIndex = nearestNumericIndex(path);
68
+ const effectiveIndex = pathIndex ?? state.rootIndex;
69
+ const ctx = {
70
+ root: state.root,
71
+ parent,
72
+ seed: `${state.rootSeed}:${path.join('.')}`,
73
+ };
74
+ if (effectiveIndex !== undefined)
75
+ ctx.index = effectiveIndex;
76
+ if (state.input !== undefined)
77
+ ctx.input = state.input;
78
+ return ctx;
79
+ };
80
+ // ──────────────────────────────────────────────────────────────────────────
81
+ // pipeline entry
82
+ // ──────────────────────────────────────────────────────────────────────────
83
+ export const generateNode = (node, path, parent, state) => {
84
+ const mods = node.mods;
85
+ const axes = mods?.axes;
86
+ const trace = state.trace;
87
+ if (mods?.hasDefault === true && state.rng.next() < 0.2) {
88
+ trace?.emit({ path, axis: 'default' });
89
+ return mods.defaultValue;
90
+ }
91
+ if (mods?.optional === true && state.rng.next() < 0.1) {
92
+ trace?.emit({ path, axis: 'optional-skip' });
93
+ return undefined;
94
+ }
95
+ if (mods?.nullable === true && state.rng.next() < 0.1) {
96
+ trace?.emit({ path, axis: 'nullable-null' });
97
+ return null;
98
+ }
99
+ // derived field — bypass sampling entirely.
100
+ if (axes?.derived !== undefined) {
101
+ const v = runDerived(axes.derived, parent, path, state);
102
+ trace?.emit({ path, axis: 'derived' });
103
+ return v;
104
+ }
105
+ // eventually overrides (A6) — fire when ctx.index hits the cadence.
106
+ const idx = nearestNumericIndex(path) ?? state.rootIndex;
107
+ const eve = applyEventually(axes?.eventually, idx);
108
+ if (eve.hit) {
109
+ trace?.emit({ path, axis: 'eventually' });
110
+ return eve.value;
111
+ }
112
+ // occasionally overrides — stack before base sampling.
113
+ const occ = applyOccasionally(axes?.occasionally, state.rng);
114
+ if (occ.hit) {
115
+ trace?.emit({ path, axis: 'occasionally' });
116
+ return occ.value;
117
+ }
118
+ const invariants = axes?.invariants ?? [];
119
+ for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt += 1) {
120
+ const value = sampleByKind(node, axes, path, parent, state);
121
+ if (invariants.length === 0) {
122
+ trace?.emit({ path, axis: axisOfSample(node, axes) });
123
+ return value;
124
+ }
125
+ const ctx = makeCtx(state, parent, path);
126
+ if (invariants.every((inv) => inv(value, ctx))) {
127
+ trace?.emit({ path, axis: 'invariant-pass', attempts: attempt + 1 });
128
+ return value;
129
+ }
130
+ }
131
+ trace?.emit({ path, axis: 'invariant-fail', attempts: MAX_ATTEMPTS });
132
+ throw new SchemaConflictError(`invariant unsatisfied after ${MAX_ATTEMPTS} attempts`, path, 'relax the invariant or narrow the distribution / domain');
133
+ };
134
+ /** Classify which sampling axis was used (for trace annotations). */
135
+ const axisOfSample = (node, axes) => {
136
+ if (axes?.domain !== undefined)
137
+ return 'domain';
138
+ if (axes?.distribution !== undefined)
139
+ return 'distribution';
140
+ // composite kinds are bucketed under 'type' since their children get their own entries.
141
+ void node;
142
+ return 'type';
143
+ };
144
+ const runDerived = (fn, parent, path, state) => {
145
+ return fn(makeCtx(state, parent, path));
146
+ };
147
+ const applyOccasionally = (overrides, rng) => {
148
+ if (overrides === undefined)
149
+ return { hit: false };
150
+ for (const o of overrides) {
151
+ if (rng.next() < o.p)
152
+ return { hit: true, value: o.value };
153
+ }
154
+ return { hit: false };
155
+ };
156
+ const applyEventually = (overrides, index) => {
157
+ if (overrides === undefined || index === undefined)
158
+ return { hit: false };
159
+ for (const o of overrides) {
160
+ const offset = o.offset ?? 0;
161
+ if (((index - offset) % o.every + o.every) % o.every === 0 && index >= offset) {
162
+ return { hit: true, value: o.value };
163
+ }
164
+ }
165
+ return { hit: false };
166
+ };
167
+ // ──────────────────────────────────────────────────────────────────────────
168
+ // per-kind sampling
169
+ // ──────────────────────────────────────────────────────────────────────────
170
+ const sampleByKind = (node, axes, path, parent, state) => {
171
+ // Leaf sampling may use a stable per-path rng if `stableBy` opts in.
172
+ // Composites (object/array/tuple/union) keep using `state.rng` for shape
173
+ // decisions (length, branch); their children re-enter this fn and may opt-in.
174
+ const leafRng = () => pickLeafRng(state, parent, path);
175
+ if (axes?.domain !== undefined) {
176
+ const fromDomain = sampleFromDomain(axes.domain, parent, leafRng());
177
+ if (fromDomain !== undefined)
178
+ return fromDomain;
179
+ }
180
+ switch (node.kind) {
181
+ case 'string':
182
+ return genString(node, leafRng());
183
+ case 'number':
184
+ return genNumber(node, axes?.distribution, leafRng(), path);
185
+ case 'decimal':
186
+ return genDecimal(node, axes?.distribution, leafRng(), path);
187
+ case 'boolean':
188
+ return leafRng().next() < 0.5;
189
+ case 'null':
190
+ return null;
191
+ case 'literal':
192
+ return node.value;
193
+ case 'enum':
194
+ return sampleDiscrete(node.values, axes?.distribution, leafRng());
195
+ case 'array':
196
+ return genArray(node, path, state);
197
+ case 'object':
198
+ return genObject(node, path, state);
199
+ case 'tuple':
200
+ return node.items.map((item, i) => generateNode(item, [...path, i], parent, state));
201
+ case 'union': {
202
+ const choice = state.rng.pick(node.options);
203
+ return generateNode(choice, path, parent, state);
204
+ }
205
+ }
206
+ };
207
+ // ──────────────────────────────────────────────────────────────────────────
208
+ // domain / distribution helpers
209
+ // ──────────────────────────────────────────────────────────────────────────
210
+ const sampleFromDomain = (domain, parent, rng) => {
211
+ if (domain.kind === 'values') {
212
+ if (domain.values.length === 0)
213
+ return undefined;
214
+ return rng.pick(domain.values);
215
+ }
216
+ const keyVal = parent[domain.fromField];
217
+ if (typeof keyVal !== 'string')
218
+ return undefined;
219
+ const candidates = domain.map[keyVal];
220
+ if (candidates === undefined || candidates.length === 0)
221
+ return undefined;
222
+ return rng.pick(candidates);
223
+ };
224
+ const sampleDiscrete = (values, dist, rng) => {
225
+ if (dist?.kind === 'weighted') {
226
+ const picked = pickWeighted(dist.weights, rng);
227
+ if (picked !== undefined && (typeof picked === 'string' || typeof picked === 'number')) {
228
+ return picked;
229
+ }
230
+ }
231
+ return rng.pick(values);
232
+ };
233
+ const pickWeighted = (weights, rng) => {
234
+ let total = 0;
235
+ for (const [, w] of weights)
236
+ total += Math.max(0, w);
237
+ if (total <= 0)
238
+ return undefined;
239
+ let r = rng.next() * total;
240
+ for (const [v, w] of weights) {
241
+ r -= Math.max(0, w);
242
+ if (r <= 0)
243
+ return v;
244
+ }
245
+ return weights[weights.length - 1]?.[0];
246
+ };
247
+ const sampleNormal = (mean, stddev, rng) => {
248
+ const u1 = Math.max(rng.next(), Number.EPSILON);
249
+ const u2 = rng.next();
250
+ const z = Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);
251
+ return mean + z * stddev;
252
+ };
253
+ const clamp = (n, min, max) => n < min ? min : n > max ? max : n;
254
+ // ──────────────────────────────────────────────────────────────────────────
255
+ // per-type
256
+ // ──────────────────────────────────────────────────────────────────────────
257
+ const ALPHANUM = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
258
+ const genString = (node, rng) => {
259
+ const minLen = node.min ?? 4;
260
+ const maxLen = node.max ?? Math.max(minLen, 12);
261
+ const len = rng.int(minLen, maxLen);
262
+ let out = '';
263
+ for (let i = 0; i < len; i += 1)
264
+ out += ALPHANUM[rng.int(0, ALPHANUM.length - 1)];
265
+ return out;
266
+ };
267
+ const genNumber = (node, dist, rng, path) => {
268
+ const min = node.min ?? 0;
269
+ const max = node.max ?? (node.int ? 100 : 1);
270
+ if (min > max) {
271
+ throw new SchemaConflictError(`number: min (${min}) > max (${max})`, path, 'swap min/max');
272
+ }
273
+ let raw;
274
+ if (dist?.kind === 'normal') {
275
+ raw = clamp(sampleNormal(dist.mean, dist.stddev, rng), min, max);
276
+ }
277
+ else if (dist?.kind === 'typical') {
278
+ const from = clamp(dist.from, min, max);
279
+ const to = clamp(dist.to, min, max);
280
+ raw = from + rng.next() * (to - from);
281
+ }
282
+ else if (node.int) {
283
+ return rng.int(min, max);
284
+ }
285
+ else {
286
+ return min + rng.next() * (max - min);
287
+ }
288
+ return node.int ? Math.round(raw) : raw;
289
+ };
290
+ const genDecimal = (node, dist, rng, path) => {
291
+ const minStr = node.min ?? '0';
292
+ const maxStr = node.max ?? defaultDecimalMax(node.precision, node.scale);
293
+ const minN = Number(minStr);
294
+ const maxN = Number(maxStr);
295
+ if (!Number.isFinite(minN) || !Number.isFinite(maxN)) {
296
+ throw new SchemaConflictError(`decimal: non-numeric bounds min=${minStr} max=${maxStr}`, path);
297
+ }
298
+ if (minN > maxN) {
299
+ throw new SchemaConflictError(`decimal: min (${minStr}) > max (${maxStr})`, path, 'swap min/max');
300
+ }
301
+ let v;
302
+ if (dist?.kind === 'normal') {
303
+ v = clamp(sampleNormal(dist.mean, dist.stddev, rng), minN, maxN);
304
+ }
305
+ else if (dist?.kind === 'typical') {
306
+ const from = clamp(dist.from, minN, maxN);
307
+ const to = clamp(dist.to, minN, maxN);
308
+ v = from + rng.next() * (to - from);
309
+ }
310
+ else {
311
+ v = minN + rng.next() * (maxN - minN);
312
+ }
313
+ return formatDecimal(v, node.scale);
314
+ };
315
+ const defaultDecimalMax = (precision, scale) => {
316
+ const intDigits = precision - scale;
317
+ return '9'.repeat(Math.max(intDigits, 1));
318
+ };
319
+ const formatDecimal = (n, scale) => {
320
+ if (scale <= 20)
321
+ return n.toFixed(scale);
322
+ const base = n.toFixed(20);
323
+ return base + '0'.repeat(scale - 20);
324
+ };
325
+ const genArray = (node, path, state) => {
326
+ let len;
327
+ if (node.length !== undefined) {
328
+ len = node.length;
329
+ }
330
+ else {
331
+ const minL = node.minLength ?? 1;
332
+ const maxL = node.maxLength ?? Math.max(minL, 5);
333
+ if (minL > maxL) {
334
+ throw new SchemaConflictError(`array: minLength (${minL}) > maxLength (${maxL})`, path);
335
+ }
336
+ len = state.rng.int(minL, maxL);
337
+ }
338
+ const out = [];
339
+ for (let i = 0; i < len; i += 1) {
340
+ out.push(generateNode(node.item, [...path, i], EMPTY_PARENT, state));
341
+ }
342
+ return out;
343
+ };
344
+ const genObject = (node, path, state) => {
345
+ // Two-pass: non-derived first (so derived can read them), derived last.
346
+ const keys = Object.keys(node.fields);
347
+ const derivedKeys = [];
348
+ const out = {};
349
+ for (const key of keys) {
350
+ const field = node.fields[key];
351
+ if (field.mods?.axes?.derived !== undefined) {
352
+ derivedKeys.push(key);
353
+ continue;
354
+ }
355
+ const value = generateNode(field, [...path, key], out, state);
356
+ if (value === undefined && field.mods?.optional === true)
357
+ continue;
358
+ out[key] = value;
359
+ }
360
+ for (const key of derivedKeys) {
361
+ const field = node.fields[key];
362
+ const value = generateNode(field, [...path, key], out, state);
363
+ if (value === undefined && field.mods?.optional === true)
364
+ continue;
365
+ out[key] = value;
366
+ }
367
+ return out;
368
+ };
369
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/generator/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Replay / snapshot helpers (A3) — thin layer over `mock()` for tests.
3
+ *
4
+ * `replay(schema, opts)` returns a function bound to a fixed (seed, input)
5
+ * pair. Calling it twice always returns deep-equal values; the function is
6
+ * the canonical way to assert determinism in test suites.
7
+ *
8
+ * `expectStable(schema, opts)` runs the generator twice and throws if the
9
+ * outputs differ — surfaces non-determinism introduced by misuse of
10
+ * `derivedFrom` (e.g. reading `Date.now()`).
11
+ */
12
+ import { type MockOptions } from './engine.js';
13
+ import type { Infer, Schema } from '../foundation/types.js';
14
+ /** A reusable, deterministic generator bound to a fixed seed/input. */
15
+ export type Replay<S extends Schema> = {
16
+ /** Generate the value (always identical for identical bound options). */
17
+ (): Infer<S>;
18
+ /** The frozen options used by this replay. */
19
+ readonly options: Readonly<MockOptions>;
20
+ };
21
+ /** Build a deterministic, repeatedly-callable generator. */
22
+ export declare const replay: <S extends Schema<unknown>>(schema: S, options?: MockOptions) => Replay<S>;
23
+ /**
24
+ * Run the generator twice with identical inputs and assert deep equality.
25
+ * Returns the produced value on success; throws on divergence.
26
+ *
27
+ * This is the executable form of smokin's determinism contract — use it in
28
+ * regression suites to catch non-deterministic `derivedFrom` callbacks.
29
+ */
30
+ export declare const expectStable: <S extends Schema<unknown>>(schema: S, options?: MockOptions) => Infer<S>;
31
+ //# sourceMappingURL=replay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/generator/replay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAQ,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAE3D,uEAAuE;AACvE,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,MAAM,IAAI;IACrC,yEAAyE;IACzE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAA;IACZ,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAA;CACxC,CAAA;AAED,4DAA4D;AAC5D,eAAO,MAAM,MAAM,sCAA8B,CAAC,YAAW,WAAW,KAAQ,OAAO,CAAC,CAKvF,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,sCAA8B,CAAC,YAAW,WAAW,KAAQ,MAAM,CAAC,CAU5F,CAAA"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Replay / snapshot helpers (A3) — thin layer over `mock()` for tests.
3
+ *
4
+ * `replay(schema, opts)` returns a function bound to a fixed (seed, input)
5
+ * pair. Calling it twice always returns deep-equal values; the function is
6
+ * the canonical way to assert determinism in test suites.
7
+ *
8
+ * `expectStable(schema, opts)` runs the generator twice and throws if the
9
+ * outputs differ — surfaces non-determinism introduced by misuse of
10
+ * `derivedFrom` (e.g. reading `Date.now()`).
11
+ */
12
+ import { mock } from './engine.js';
13
+ /** Build a deterministic, repeatedly-callable generator. */
14
+ export const replay = (schema, options = {}) => {
15
+ const frozen = Object.freeze({ ...options });
16
+ const fn = (() => mock(schema, frozen));
17
+ Object.defineProperty(fn, 'options', { value: frozen, enumerable: true });
18
+ return fn;
19
+ };
20
+ /**
21
+ * Run the generator twice with identical inputs and assert deep equality.
22
+ * Returns the produced value on success; throws on divergence.
23
+ *
24
+ * This is the executable form of smokin's determinism contract — use it in
25
+ * regression suites to catch non-deterministic `derivedFrom` callbacks.
26
+ */
27
+ export const expectStable = (schema, options = {}) => {
28
+ const a = mock(schema, options);
29
+ const b = mock(schema, options);
30
+ if (!deepEqual(a, b)) {
31
+ throw new Error('expectStable: generator produced different values for identical seed/input — ' +
32
+ 'likely a non-deterministic derivedFrom callback (e.g. Date.now, Math.random, network).');
33
+ }
34
+ return a;
35
+ };
36
+ const deepEqual = (a, b) => {
37
+ if (Object.is(a, b))
38
+ return true;
39
+ if (typeof a !== typeof b)
40
+ return false;
41
+ if (a === null || b === null)
42
+ return false;
43
+ if (typeof a !== 'object')
44
+ return false;
45
+ if (Array.isArray(a)) {
46
+ if (!Array.isArray(b) || a.length !== b.length)
47
+ return false;
48
+ for (let i = 0; i < a.length; i += 1)
49
+ if (!deepEqual(a[i], b[i]))
50
+ return false;
51
+ return true;
52
+ }
53
+ if (Array.isArray(b))
54
+ return false;
55
+ const ao = a;
56
+ const bo = b;
57
+ const ak = Object.keys(ao);
58
+ const bk = Object.keys(bo);
59
+ if (ak.length !== bk.length)
60
+ return false;
61
+ for (const k of ak)
62
+ if (!deepEqual(ao[k], bo[k]))
63
+ return false;
64
+ return true;
65
+ };
66
+ //# sourceMappingURL=replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/generator/replay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,IAAI,EAAoB,MAAM,aAAa,CAAA;AAWpD,4DAA4D;AAC5D,MAAM,CAAC,MAAM,MAAM,GAAG,CAAmB,MAAS,EAAE,UAAuB,EAAE,EAAa,EAAE;IAC1F,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAA;IAC5C,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAyB,CAAA;IAC/D,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;IACzE,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAmB,MAAS,EAAE,UAAuB,EAAE,EAAY,EAAE;IAC/F,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,+EAA+E;YAC7E,wFAAwF,CAC3F,CAAA;IACH,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,CAAC,CAAU,EAAE,CAAU,EAAW,EAAE;IACpD,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAChC,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC;QAAE,OAAO,KAAK,CAAA;IACvC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAC1C,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACvC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAA;QAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAA;QAC9E,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAA;IAClC,MAAM,EAAE,GAAG,CAA4B,CAAA;IACvC,MAAM,EAAE,GAAG,CAA4B,CAAA;IACvC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC1B,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IACzC,KAAK,MAAM,CAAC,IAAI,EAAE;QAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;IAC9D,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Trace collector (A2) — records which axis fired at each path during a
3
+ * single `mock()` call.
4
+ *
5
+ * The trace is a read-only audit of the generator's decisions. It is the
6
+ * *executable* form of the formal axis-priority model declared in
7
+ * Z_PLAN §4.6.1: every produced value is annotated with the axis that won.
8
+ *
9
+ * Usage:
10
+ *
11
+ * const trace = createTrace()
12
+ * const value = mock(schema, { seed: 's', trace })
13
+ * console.log(trace.entries) // → TraceEntry[]
14
+ */
15
+ /**
16
+ * Which axis decided a value at a given path.
17
+ *
18
+ * - `default` : pure value (`undefined` slot in optional/default)
19
+ * - `optional-skip` : optional field rolled `undefined`
20
+ * - `nullable-null` : nullable field rolled `null`
21
+ * - `derived` : produced by `derivedFrom(...)`
22
+ * - `occasionally` : forced by an `occasionally(...)` override
23
+ * - `eventually` : forced by an `eventually(...)` override (modulo `index`)
24
+ * - `invariant-pass` : sampled then accepted by all `invariant(...)`
25
+ * - `invariant-fail` : retry exhausted before invariants held
26
+ * - `domain` : sampled from `in([...])` candidate set
27
+ * - `distribution` : sampled via `weighted|normal|typically`
28
+ * - `type` : fell through to type-default sampling
29
+ */
30
+ export type TraceAxis = 'default' | 'optional-skip' | 'nullable-null' | 'derived' | 'occasionally' | 'eventually' | 'invariant-pass' | 'invariant-fail' | 'domain' | 'distribution' | 'type';
31
+ export type TraceEntry = {
32
+ readonly path: readonly (string | number)[];
33
+ readonly axis: TraceAxis;
34
+ /** Attempts taken before invariants accepted (only meaningful when invariants run). */
35
+ readonly attempts?: number;
36
+ /** Free-form annotation (e.g. distribution kind, picked literal). */
37
+ readonly note?: string;
38
+ };
39
+ export type TraceCollector = {
40
+ /** Append a single entry. Called by the engine — do not call from user code. */
41
+ readonly emit: (entry: TraceEntry) => void;
42
+ /** Read-only view of entries collected so far. */
43
+ readonly entries: readonly TraceEntry[];
44
+ /** All paths where a specific axis fired. */
45
+ readonly axisFiredAt: (axis: TraceAxis) => readonly (readonly (string | number)[])[];
46
+ /** Pretty multi-line dump (one entry per line, JSON-pointer-style paths). */
47
+ readonly format: () => string;
48
+ };
49
+ export declare const createTrace: () => TraceCollector;
50
+ //# sourceMappingURL=trace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/generator/trace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,eAAe,GACf,eAAe,GACf,SAAS,GACT,cAAc,GACd,YAAY,GACZ,gBAAgB,GAChB,gBAAgB,GAChB,QAAQ,GACR,cAAc,GACd,MAAM,CAAA;AAEV,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IAC3C,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,uFAAuF;IACvF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IAC1C,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAA;IACvC,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAA;IACpF,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,WAAW,QAAO,cAuB9B,CAAA"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Trace collector (A2) — records which axis fired at each path during a
3
+ * single `mock()` call.
4
+ *
5
+ * The trace is a read-only audit of the generator's decisions. It is the
6
+ * *executable* form of the formal axis-priority model declared in
7
+ * Z_PLAN §4.6.1: every produced value is annotated with the axis that won.
8
+ *
9
+ * Usage:
10
+ *
11
+ * const trace = createTrace()
12
+ * const value = mock(schema, { seed: 's', trace })
13
+ * console.log(trace.entries) // → TraceEntry[]
14
+ */
15
+ export const createTrace = () => {
16
+ const entries = [];
17
+ return {
18
+ emit(entry) {
19
+ entries.push(entry);
20
+ },
21
+ get entries() {
22
+ return entries;
23
+ },
24
+ axisFiredAt(axis) {
25
+ return entries.filter((e) => e.axis === axis).map((e) => e.path);
26
+ },
27
+ format() {
28
+ return entries
29
+ .map((e) => {
30
+ const ptr = '/' + e.path.map((p) => String(p)).join('/');
31
+ const attempts = e.attempts !== undefined ? ` attempts=${e.attempts}` : '';
32
+ const note = e.note !== undefined ? ` (${e.note})` : '';
33
+ return `${ptr.padEnd(40)} ${e.axis}${attempts}${note}`;
34
+ })
35
+ .join('\n');
36
+ },
37
+ };
38
+ };
39
+ //# sourceMappingURL=trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/generator/trace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAkDH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAmB,EAAE;IAC9C,MAAM,OAAO,GAAiB,EAAE,CAAA;IAChC,OAAO;QACL,IAAI,CAAC,KAAK;YACR,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;QACD,IAAI,OAAO;YACT,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,WAAW,CAAC,IAAI;YACd,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAClE,CAAC;QACD,MAAM;YACJ,OAAO,OAAO;iBACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACxD,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;gBAC1E,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;gBACvD,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAA;YACxD,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAA;QACf,CAAC;KACF,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * smokin — Zero-dependency data schema DSL.
3
+ *
4
+ * Public surface:
5
+ * - schema DSL (primitives, composites, decimal, conditional)
6
+ * - data-schema axes (distribution, derived, invariants, domain,
7
+ * discriminated unions, dataset with identity, eventually, correlate)
8
+ * - generator (`mock`) + validator (`parse`/`safeParse`)
9
+ * - debug / determinism (`createTrace`, `replay`, `expectStable`)
10
+ * - cross-dataset FK (`relate`)
11
+ * - extensibility (`walkSchema`, `fromIR`, low-level PRNG, IR types) for
12
+ * third-party packages (CLI, OpenAPI ingestion, zod adapters, …)
13
+ *
14
+ * smokin intentionally ships NO HTTP/server/framework integration. Wire it
15
+ * into your transport of choice (Fastify/Express/msw/node:http) in ~80 LOC.
16
+ */
17
+ export { str, num, int, bool, null_, StringSchema, NumberSchema } from './schema/primitives.js';
18
+ export { decimal, DecimalSchema } from './schema/decimal.js';
19
+ export { obj, arr, tuple, union, literal, enum_, ObjectSchema, ArraySchema, TupleSchema, UnionSchema, LiteralSchema, EnumSchema, } from './schema/composites.js';
20
+ export { discriminated } from './schema/conditional.js';
21
+ export { mock, type MockOptions, type StableByFn } from './generator/engine.js';
22
+ export { parse, safeParse, type SafeParseResult } from './validator/parse.js';
23
+ export { createTrace, type TraceAxis, type TraceCollector, type TraceEntry, } from './generator/trace.js';
24
+ export { replay, expectStable, type Replay } from './generator/replay.js';
25
+ export { mockDataset, identityFor, type DatasetOptions } from './dataset/dataset.js';
26
+ export { relate, type RelateOptions } from './dataset/relate.js';
27
+ export { Schema, type Infer, type Modifiers, type SchemaNode } from './foundation/types.js';
28
+ export type { Axes, DerivedFn, Distribution, DomainConstraint, EventuallyOverride, GenContext, InvariantFn, NormalDistribution, OccasionalOverride, TypicalDistribution, WeightedDistribution, } from './foundation/axes.js';
29
+ export { ConformError, SchemaConflictError, type Issue } from './foundation/errors.js';
30
+ export { walkSchema, fromIR, type SchemaVisitor, type WalkPath } from './foundation/walk.js';
31
+ export { mulberry32, rngFromString, seedFromString, type Rng } from './foundation/prng.js';
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAC/F,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EACL,GAAG,EACH,GAAG,EACH,KAAK,EACL,KAAK,EACL,OAAO,EACP,KAAK,EACL,YAAY,EACZ,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,EACb,UAAU,GACX,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAGvD,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAC/E,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC7E,OAAO,EACL,WAAW,EACX,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,UAAU,GAChB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAGzE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACpF,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGhE,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAC3F,YAAY,EACV,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,sBAAsB,CAAA;AAG7B,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,KAAK,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAGtF,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC5F,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,GAAG,EAAE,MAAM,sBAAsB,CAAA"}