@ghostry/fabricator 0.0.1 → 0.0.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.
Files changed (124) hide show
  1. package/README.md +1 -7
  2. package/dist/esm/Error/index.js +8 -0
  3. package/dist/esm/Instance/Core.js +8 -17
  4. package/dist/esm/Instance/Stack/Async.js +10 -0
  5. package/dist/esm/Instance/Stack/Sync.js +16 -0
  6. package/dist/esm/Primitive/bigint/Registry.js +12 -12
  7. package/dist/esm/Primitive/boolean/Registry.js +2 -1
  8. package/dist/esm/Primitive/date/Registry.js +15 -14
  9. package/dist/esm/Primitive/null/Registry.js +2 -1
  10. package/dist/esm/Primitive/number/Registry.js +18 -17
  11. package/dist/esm/Primitive/symbol/Registry.js +2 -1
  12. package/dist/esm/Primitive/undefined/Registry.js +2 -1
  13. package/dist/esm/Random/CallSite.js +27 -13
  14. package/dist/esm/Utility/Core.js +6 -1
  15. package/dist/esm/index.js +4 -2
  16. package/dist/esm/internal.js +2 -1
  17. package/dist/types/Adapter/Core.d.ts +29 -32
  18. package/dist/types/Adapter/Types.d.ts +78 -88
  19. package/dist/types/Bound.d.ts +15 -15
  20. package/dist/types/Distribution/index.d.ts +54 -61
  21. package/dist/types/Enumeration/Enumerate.d.ts +21 -23
  22. package/dist/types/Enumeration/Plan.d.ts +22 -26
  23. package/dist/types/Enumeration/Types.d.ts +38 -43
  24. package/dist/types/Error/index.d.ts +94 -76
  25. package/dist/types/Fabricator/Constructor.d.ts +23 -25
  26. package/dist/types/Fabricator/Types.d.ts +73 -81
  27. package/dist/types/Instance/Core.d.ts +54 -73
  28. package/dist/types/Instance/Stack/Async.d.ts +14 -0
  29. package/dist/types/Instance/Stack/Sync.d.ts +14 -0
  30. package/dist/types/Instance/Types.d.ts +91 -89
  31. package/dist/types/Primitive/always/Schema.d.ts +8 -8
  32. package/dist/types/Primitive/always/Types.d.ts +7 -7
  33. package/dist/types/Primitive/array/Registry.d.ts +10 -8
  34. package/dist/types/Primitive/array/Schema.d.ts +4 -5
  35. package/dist/types/Primitive/array/Types.d.ts +6 -6
  36. package/dist/types/Primitive/bigint/Registry.d.ts +6 -6
  37. package/dist/types/Primitive/bigint/Schema.d.ts +8 -8
  38. package/dist/types/Primitive/bigint/Types.d.ts +5 -5
  39. package/dist/types/Primitive/boolean/Outcomes.d.ts +8 -8
  40. package/dist/types/Primitive/boolean/Registry.d.ts +2 -12
  41. package/dist/types/Primitive/boolean/Schema.d.ts +8 -8
  42. package/dist/types/Primitive/boolean/Types.d.ts +3 -3
  43. package/dist/types/Primitive/choice/Fabricator.d.ts +6 -7
  44. package/dist/types/Primitive/choice/Registry.d.ts +13 -13
  45. package/dist/types/Primitive/choice/Schema.d.ts +6 -6
  46. package/dist/types/Primitive/choice/Types.d.ts +11 -11
  47. package/dist/types/Primitive/date/Registry.d.ts +25 -48
  48. package/dist/types/Primitive/date/Schema.d.ts +9 -10
  49. package/dist/types/Primitive/date/Types.d.ts +4 -4
  50. package/dist/types/Primitive/enum/Registry.d.ts +13 -13
  51. package/dist/types/Primitive/enum/Schema.d.ts +5 -5
  52. package/dist/types/Primitive/enum/Types.d.ts +17 -19
  53. package/dist/types/Primitive/namespace.d.ts +10 -10
  54. package/dist/types/Primitive/null/Registry.d.ts +2 -2
  55. package/dist/types/Primitive/null/Schema.d.ts +2 -2
  56. package/dist/types/Primitive/null/Types.d.ts +3 -3
  57. package/dist/types/Primitive/nullable/Fabricator.d.ts +7 -7
  58. package/dist/types/Primitive/nullable/Schema.d.ts +13 -13
  59. package/dist/types/Primitive/nullable/Types.d.ts +9 -10
  60. package/dist/types/Primitive/nullish/Fabricator.d.ts +12 -13
  61. package/dist/types/Primitive/nullish/Schema.d.ts +8 -8
  62. package/dist/types/Primitive/nullish/Types.d.ts +12 -13
  63. package/dist/types/Primitive/number/Registry.d.ts +20 -38
  64. package/dist/types/Primitive/number/Schema.d.ts +11 -12
  65. package/dist/types/Primitive/number/Types.d.ts +13 -13
  66. package/dist/types/Primitive/number/defaults.d.ts +3 -3
  67. package/dist/types/Primitive/object/Fabricator.d.ts +15 -15
  68. package/dist/types/Primitive/object/Registry.d.ts +8 -8
  69. package/dist/types/Primitive/object/Schema.d.ts +10 -10
  70. package/dist/types/Primitive/object/Types.d.ts +20 -22
  71. package/dist/types/Primitive/object/compute/Fabricator.d.ts +4 -5
  72. package/dist/types/Primitive/object/compute/Schema.d.ts +4 -4
  73. package/dist/types/Primitive/object/compute/Types.d.ts +19 -20
  74. package/dist/types/Primitive/object/omittable/Fabricator.d.ts +10 -10
  75. package/dist/types/Primitive/object/omittable/Outcomes.d.ts +2 -2
  76. package/dist/types/Primitive/object/omittable/Schema.d.ts +11 -11
  77. package/dist/types/Primitive/object/omittable/Types.d.ts +14 -15
  78. package/dist/types/Primitive/object/optional/Fabricator.d.ts +16 -18
  79. package/dist/types/Primitive/object/optional/Outcomes.d.ts +2 -2
  80. package/dist/types/Primitive/object/optional/Schema.d.ts +4 -4
  81. package/dist/types/Primitive/object/optional/Types.d.ts +17 -17
  82. package/dist/types/Primitive/opaque/Registry.d.ts +3 -3
  83. package/dist/types/Primitive/opaque/Schema.d.ts +8 -9
  84. package/dist/types/Primitive/record/Registry.d.ts +8 -6
  85. package/dist/types/Primitive/record/Schema.d.ts +9 -11
  86. package/dist/types/Primitive/record/Types.d.ts +25 -25
  87. package/dist/types/Primitive/recursive/Fabricator.d.ts +16 -17
  88. package/dist/types/Primitive/recursive/Registry.d.ts +6 -7
  89. package/dist/types/Primitive/recursive/Schema.d.ts +8 -8
  90. package/dist/types/Primitive/recursive/Terminate.d.ts +13 -14
  91. package/dist/types/Primitive/recursive/Types.d.ts +31 -31
  92. package/dist/types/Primitive/recursive/self/Fabricator.d.ts +11 -12
  93. package/dist/types/Primitive/recursive/self/Schema.d.ts +10 -10
  94. package/dist/types/Primitive/recursive/self/Types.d.ts +7 -8
  95. package/dist/types/Primitive/string/Constants.d.ts +12 -13
  96. package/dist/types/Primitive/string/Fabricator.d.ts +2 -2
  97. package/dist/types/Primitive/string/Registry.d.ts +10 -16
  98. package/dist/types/Primitive/string/Schema.d.ts +5 -5
  99. package/dist/types/Primitive/string/Types.d.ts +17 -17
  100. package/dist/types/Primitive/symbol/Fabricator.d.ts +2 -2
  101. package/dist/types/Primitive/symbol/Registry.d.ts +4 -11
  102. package/dist/types/Primitive/symbol/Schema.d.ts +6 -6
  103. package/dist/types/Primitive/symbol/Types.d.ts +2 -2
  104. package/dist/types/Primitive/tuple/Fabricator.d.ts +7 -8
  105. package/dist/types/Primitive/tuple/Schema.d.ts +5 -5
  106. package/dist/types/Primitive/tuple/Types.d.ts +24 -25
  107. package/dist/types/Primitive/undefinable/Fabricator.d.ts +7 -7
  108. package/dist/types/Primitive/undefinable/Schema.d.ts +13 -13
  109. package/dist/types/Primitive/undefinable/Types.d.ts +10 -10
  110. package/dist/types/Primitive/undefined/Registry.d.ts +2 -2
  111. package/dist/types/Primitive/undefined/Schema.d.ts +4 -4
  112. package/dist/types/Primitive/undefined/Types.d.ts +3 -3
  113. package/dist/types/Random/CallSite.d.ts +63 -44
  114. package/dist/types/Random/Generator/sfc32.d.ts +4 -4
  115. package/dist/types/Random/Types.d.ts +214 -236
  116. package/dist/types/Random/index.d.ts +63 -70
  117. package/dist/types/Schema/Core.d.ts +19 -21
  118. package/dist/types/Schema/Registry.d.ts +3 -3
  119. package/dist/types/Schema/Types.d.ts +41 -48
  120. package/dist/types/Types.d.ts +39 -45
  121. package/dist/types/Utility/Core.d.ts +18 -9
  122. package/dist/types/index.d.ts +110 -108
  123. package/dist/types/internal.d.ts +68 -37
  124. package/package.json +17 -5
@@ -1,52 +1,34 @@
1
1
  import type { Adaptations } from "../../Adapter/Types";
2
- import { Adaptation, Kind, Meta, Produces } from "../../Types";
2
+ import { default as bigint } from "../bigint";
3
3
  import { Schema } from "./Schema";
4
- import type { Fabricated, InputWhereby, Whereby } from "./Types";
5
- declare const _default: {
6
- [Kind]: "number";
7
- [Meta]: {};
8
- [Produces]?: Fabricated;
9
- [Adaptation]?: Adaptations;
10
- as: (produce: import("../../Random/Types").Produce<Fabricated>, hints?: import("./Types").JsonSchema) => Schema<{}, Adaptations>;
11
- adapt: <const $Adapter extends import("../..").Adapter, $Returnable extends ReturnType<$Adapter["convert"]>>(adapter: $Adapter, produce: (adapting: import("../..").Adapting<Schema<{}, Adaptations>>) => $Returnable) => Schema<{}, import("../../Adapter/Types").WithAdaptations<Adaptations, import("../../Adapter/Core").AdaptationEntry<$Adapter, $Returnable>>>;
4
+ import type { InputWhereby, Whereby } from "./Types";
5
+ type ThisRegistry = Schema<{}, Adaptations> & {
6
+ /**
7
+ * A `number` drawn from `[min, max]`, either end optional. Pass a
8
+ * `distribution` to shape how values cluster within the range; without one,
9
+ * every value is equally likely.
10
+ */
12
11
  whereby: (whereby: InputWhereby) => Schema<{
13
12
  whereby: Whereby;
14
- }, {}>;
15
- integer: {
16
- [Kind]: "number";
17
- [Meta]: {
18
- integer: true;
19
- };
20
- [Produces]?: Fabricated;
21
- [Adaptation]?: {};
22
- as: (produce: import("../../Random/Types").Produce<Fabricated>, hints?: import("./Types").JsonSchema) => Schema<{
23
- integer: true;
24
- }, {}>;
25
- adapt: <const $Adapter extends import("../..").Adapter, $Returnable extends ReturnType<$Adapter["convert"]>>(adapter: $Adapter, produce: (adapting: import("../..").Adapting<Schema<{
26
- integer: true;
27
- }, {}>>) => $Returnable) => Schema<{
28
- integer: true;
29
- }, import("../../Adapter/Types").WithAdaptations<{}, import("../../Adapter/Core").AdaptationEntry<$Adapter, $Returnable>>>;
13
+ }>;
14
+ /** The same surface, restricted to integers. */
15
+ integer: Schema<{
16
+ integer: true;
17
+ }> & {
30
18
  whereby: (whereby: InputWhereby) => Schema<{
31
19
  integer: true;
32
20
  whereby: Whereby;
33
- }, {}>;
21
+ }>;
34
22
  /**
35
- * A monotonically increasing counter starting at 1, fresh per `construct()`.
23
+ * A monotonically increasing counter starting at 1, fresh per
24
+ * `construct()`.
36
25
  */
37
26
  sequence: Schema<{
38
27
  sequence: true;
39
28
  integer: true;
40
- }, {}>;
41
- big: {
42
- [Kind]: "bigint";
43
- whereby: (whereby: import("../bigint").InputWhereby) => import("../bigint").Schema<{
44
- whereby: import("../bigint").Whereby;
45
- }, {}>;
46
- as: (produce: import("../../Random/Types").Produce<import("../bigint").Fabricated>) => import("../bigint").Schema<{
47
- produce: import("../../Random/Types").Produce<bigint>;
48
- }, {}>;
49
- };
29
+ }>;
30
+ big: typeof bigint;
50
31
  };
51
32
  };
52
- export default _default;
33
+ declare const registry: ThisRegistry;
34
+ export default registry;
@@ -3,17 +3,16 @@ import type { Adaptations, Adapter, Adapting, WithAdaptations } from "../../Adap
3
3
  import type { Produce } from "../../Random/Types";
4
4
  import type { Core, Fabricated, JsonSchema, Meta as ThisMeta } from "./Types";
5
5
  /**
6
- * Buildable `number` recipe: a range/distribution (`whereby`, absent for
7
- * the full-range bare form), `integer` for whole-number semantics, a
8
- * `sequence` counter, or opaque production via `as`. `construct()` derives
9
- * `fabricate` from this data — no variant carries its own closure until
10
- * it's built.
6
+ * Buildable `number` recipe: a range/distribution (`whereby`, absent for the
7
+ * full-range bare form), `integer` for whole-number semantics, a `sequence`
8
+ * counter, or opaque production via `as`. `construct()` derives `fabricate`
9
+ * from this data — no variant carries its own closure until it's built.
11
10
  *
12
- * `$Meta` is generic (defaulting to the full `Meta` union) so builder
13
- * return types stay narrow — e.g. `T.number.integer.sequence` types as
14
- * `Schema<{ sequence: true; integer: true }>`, not the widened `Schema`, so
15
- * a downstream conditional (`ToTypeBox`) can still tell an integer schema
16
- * apart from a bare one.
11
+ * `$Meta` is generic (defaulting to the full `Meta` union) so builder return
12
+ * types stay narrow — e.g. `T.number.integer.sequence` types as `Schema<{
13
+ * sequence: true; integer: true }>`, not the widened `Schema`, so a downstream
14
+ * conditional (`ToTypeBox`) can still tell an integer schema apart from a bare
15
+ * one.
17
16
  */
18
17
  export interface Schema<$Meta extends ThisMeta = ThisMeta, $Adaptations extends Adaptations = {}> extends Core<$Meta, $Adaptations> {
19
18
  /**
@@ -24,8 +23,8 @@ export interface Schema<$Meta extends ThisMeta = ThisMeta, $Adaptations extends
24
23
  */
25
24
  as: (produce: Produce<Fabricated>, hints?: JsonSchema) => Schema<$Meta, $Adaptations>;
26
25
  /**
27
- * Override what this schema maps to in one or more external schema
28
- * libraries — see `string/Schema.ts`'s `adapt` for the full contract.
26
+ * Override what this schema maps to in one or more external schema libraries
27
+ * — see `string/Schema.ts`'s `adapt` for the full contract.
29
28
  */
30
29
  adapt: <const $Adapter extends Adapter, $Returnable extends ReturnType<$Adapter["convert"]>>(adapter: $Adapter, produce: (adapting: Adapting<Schema<$Meta, $Adaptations>>) => $Returnable) => Schema<$Meta, WithAdaptations<$Adaptations, AdaptationEntry<$Adapter, $Returnable>>>;
31
30
  }
@@ -4,9 +4,9 @@ import type { Distribution } from "../../Distribution";
4
4
  import type { Produce } from "../../Random/Types";
5
5
  import type { Adaptation, Kind, Meta, Produces } from "../../Types";
6
6
  /**
7
- * Call-site `{ min, max }` — scalars are inclusive. Either end may be
8
- * omitted; a missing end is unbounded (the same policy as a bare
9
- * `T.number`), not a default of `0`.
7
+ * Call-site `{ min, max }` — scalars are inclusive. Either end may be omitted;
8
+ * a missing end is unbounded (the same policy as a bare `T.number`), not a
9
+ * default of `0`.
10
10
  */
11
11
  export type InputWhereby = {
12
12
  min?: InputBound<number> | undefined;
@@ -14,8 +14,8 @@ export type InputWhereby = {
14
14
  distribution?: Distribution | undefined;
15
15
  };
16
16
  /**
17
- * Stored `{ min, max }` — each present end is a canonical {@link Bound}.
18
- * An omitted end stays omitted (fabricate fills the unbounded cap; adapters
17
+ * Stored `{ min, max }` — each present end is a canonical {@link Bound}. An
18
+ * omitted end stays omitted (fabricate fills the unbounded cap; adapters
19
19
  * forward only the ends that were named).
20
20
  */
21
21
  export type Whereby = {
@@ -27,19 +27,19 @@ export type Fabricated = number;
27
27
  /**
28
28
  * JSON-Schema keywords that constrain a number value — carried as neutral,
29
29
  * schema-library-agnostic hints (see the builder's `as`). The numeric range
30
- * lives on `whereby` as {@link Bound}s, which adapters forward; `hints`
31
- * holds only the orthogonal constraints not expressible there.
30
+ * lives on `whereby` as {@link Bound}s, which adapters forward; `hints` holds
31
+ * only the orthogonal constraints not expressible there.
32
32
  */
33
33
  export type JsonSchema = {
34
34
  multipleOf?: number;
35
35
  };
36
36
  /**
37
- * A ranged number — `whereby` is absent on the full-range form, `integer`
38
- * (a literal, not widened to `boolean`) selects whole-number semantics, or
39
- * a sequence counter (`sequence`, always paired with `integer: true`, since
40
- * a counter only ever yields whole numbers), optionally overridden by an
41
- * opaque `as` production — carried alongside the rest rather than replacing
42
- * it, so a prior scoping survives `as` for future validation.
37
+ * A ranged number — `whereby` is absent on the full-range form, `integer` (a
38
+ * literal, not widened to `boolean`) selects whole-number semantics, or a
39
+ * sequence counter (`sequence`, always paired with `integer: true`, since a
40
+ * counter only ever yields whole numbers), optionally overridden by an opaque
41
+ * `as` production — carried alongside the rest rather than replacing it, so a
42
+ * prior scoping survives `as` for future validation.
43
43
  */
44
44
  export type Meta = {
45
45
  whereby?: Whereby;
@@ -1,8 +1,8 @@
1
1
  import type { Bound } from "../../Bound";
2
2
  /**
3
- * Inclusive caps a missing `whereby` end draws against. Not stored on the
4
- * bare schema — `T.number` / `T.number.integer` carry no `whereby` until
5
- * one is named, and an omitted end stays omitted on `[Meta]`.
3
+ * Inclusive caps a missing `whereby` end draws against. Not stored on the bare
4
+ * schema — `T.number` / `T.number.integer` carry no `whereby` until one is
5
+ * named, and an omitted end stays omitted on `[Meta]`.
6
6
  */
7
7
  export declare const unboundedContinuous: {
8
8
  min: Bound<number>;
@@ -22,8 +22,8 @@ export type Fabricator<$Schema extends {
22
22
  * never drawing fresh (see `Fabricator()` below). `config.validate` defaults
23
23
  * to `true`, delegated to `schema.override(overrides)`'s existing recursive
24
24
  * checks (result unused); `{ validate: false }` skips that — used internally
25
- * when recursing into an already-validated nested override, also available
26
- * to a caller who already knows their overrides are valid.
25
+ * when recursing into an already-validated nested override, also available to
26
+ * a caller who already knows their overrides are valid.
27
27
  */
28
28
  fabricate: (overrides?: Override<$Schema[typeof Meta]["definition"]>, config?: {
29
29
  validate?: boolean;
@@ -36,21 +36,21 @@ export type Fields = Record<string, BaseFabricator<unknown>>;
36
36
  * built by `Constructor.ts` — which owns recursion into nested Schemas, so
37
37
  * `object` never calls `construct()` and there's no import cycle with
38
38
  * `Constructor.ts`. Schema-baked `.override()`-marked fields (`[Fixed]` in
39
- * `Types.ts`) are already resolved into literal-valued `fields` entries
40
- * before they reach here. `fabricate`'s `overrides` (below) is a separate
41
- * per-call mechanism; the two compose.
39
+ * `Types.ts`) are already resolved into literal-valued `fields` entries before
40
+ * they reach here. `fabricate`'s `overrides` (below) is a separate per-call
41
+ * mechanism; the two compose.
42
42
  *
43
43
  * `schema` is echoed as `.schema` unchanged — callers wanting a
44
- * `toSchema`-normalized Fabricator (no `extend`/`refine`/`override`) pass
45
- * that; `Constructor.ts`'s `make` passes `object.rehydrate(...)` so a
46
- * top-level built Fabricator's `.schema` still composes.
44
+ * `toSchema`-normalized Fabricator (no `extend`/`refine`/`override`) pass that;
45
+ * `Constructor.ts`'s `make` passes `object.rehydrate(...)` so a top-level built
46
+ * Fabricator's `.schema` still composes.
47
47
  *
48
- * A compute-kind field (from `.refine()`) needs the rest of the object
49
- * already fabricated (`object/compute/Fabricator.ts`), which isn't available
50
- * until every ordinary field has resolved. Two phases: ordinary fields
51
- * first, then compute fields against the accumulated result, in definition
52
- * order (a compute field can see an earlier compute field's value, not a
53
- * later one) — unless covered by `overrides`, in which case it resolves in
54
- * phase 1 like any other overridden field.
48
+ * A compute-kind field (from `.refine()`) needs the rest of the object already
49
+ * fabricated (`object/compute/Fabricator.ts`), which isn't available until
50
+ * every ordinary field has resolved. Two phases: ordinary fields first, then
51
+ * compute fields against the accumulated result, in definition order (a compute
52
+ * field can see an earlier compute field's value, not a later one) — unless
53
+ * covered by `overrides`, in which case it resolves in phase 1 like any other
54
+ * overridden field.
55
55
  */
56
56
  export declare function Fabricator<$Definition extends Definition>(context: FabricatorContext<Schema<$Definition>>, fields: Fields): Fabricator<Schema<$Definition>>;
@@ -4,20 +4,20 @@ import { Schema } from "./Schema";
4
4
  import type { Definition, Meta as ThisMeta } from "./Types";
5
5
  /**
6
6
  * Rebuild a full `object` Schema — with `extend`/`refine` restored — from
7
- * anything already reduced to this kind's `[Meta]` (a bare Schema, or a
8
- * built Fabricator normalized via `toSchema`). `toSchema` alone only keeps
7
+ * anything already reduced to this kind's `[Meta]` (a bare Schema, or a built
8
+ * Fabricator normalized via `toSchema`). `toSchema` alone only keeps
9
9
  * `[Kind]`/`[Meta]`, enough to fabricate from but not to derive a subtype —
10
10
  * this is what lets a built Fabricator's `.schema` still compose via
11
11
  * `extend`/`refine` (`Constructor.ts`'s `make`). Reattaches `produce` via
12
- * `.as(...)` when present, so a `toSchema`-stripped, `.as(...)`-produced
13
- * schema doesn't lose its custom producer — and carries `[Adaptation]` for
14
- * the same reason: without it, `.override(...)` on a nested adapted
15
- * `object` field (which round-trips through here) and a built Fabricator's
16
- * `.schema` would both silently come back unadapted.
12
+ * `.as(...)` when present, so a `toSchema`-stripped, `.as(...)`-produced schema
13
+ * doesn't lose its custom producer — and carries `[Adaptation]` for the same
14
+ * reason: without it, `.override(...)` on a nested adapted `object` field
15
+ * (which round-trips through here) and a built Fabricator's `.schema` would
16
+ * both silently come back unadapted.
17
17
  */
18
18
  export declare function rehydrate<$Definition extends Definition, $Adaptations extends Adaptations = {}>(schema: {
19
19
  [Meta]: ThisMeta<$Definition>;
20
20
  readonly [Adaptation]?: $Adaptations;
21
21
  }): Schema<$Definition, $Adaptations>;
22
+ declare const _default: <const $Definition extends Definition>(definition: $Definition) => Schema<$Definition>;
22
23
  export default _default;
23
- declare function _default<const $Definition extends Definition>(definition: $Definition): Schema<$Definition>;
@@ -17,25 +17,25 @@ export interface Schema<$Definition extends Definition = Definition, $Adaptation
17
17
  * Layer an opaque production on this schema's existing `[Meta]` — carrying
18
18
  * `definition`/`refinements` forward, not discarding them, so
19
19
  * `extend`/`refine`/`override` keep working (they drop the custom producer
20
- * again, falling back to definition-based fabrication) and a later
21
- * `.as(...)` (or future validation of `produce`) still has the definition
22
- * to check against.
20
+ * again, falling back to definition-based fabrication) and a later `.as(...)`
21
+ * (or future validation of `produce`) still has the definition to check
22
+ * against.
23
23
  */
24
24
  as: (produce: Produce<Fabricated<$Definition>>) => Schema<$Definition, $Adaptations>;
25
25
  /**
26
- * Override what this schema maps to in one or more external schema
27
- * libraries — see `string/Schema.ts`'s `adapt` for the full contract.
28
- * Carried through `extend`/`refine`/`override`, which all reduce to a
29
- * fresh `make(...)` (`Registry.ts`) over this same schema.
26
+ * Override what this schema maps to in one or more external schema libraries
27
+ * — see `string/Schema.ts`'s `adapt` for the full contract. Carried through
28
+ * `extend`/`refine`/`override`, which all reduce to a fresh `make(...)`
29
+ * (`Registry.ts`) over this same schema.
30
30
  */
31
31
  adapt: <const $Adapter extends Adapter, $Returnable extends ReturnType<$Adapter["convert"]>>(adapter: $Adapter, produce: (adapting: Adapting<Schema<$Definition, $Adaptations>>) => $Returnable) => Schema<$Definition, WithAdaptations<$Adaptations, AdaptationEntry<$Adapter, $Returnable>>>;
32
32
  }
33
33
  /**
34
- * Unlike every other kind, `adapt` is *not* added here but by `Registry.ts`'s
34
+ * Unlike every other kind, `adapt` is _not_ added here but by `Registry.ts`'s
35
35
  * `make` alongside `extend`/`refine`/`override`: those three rebuild from
36
36
  * `definition`/`refinements` rather than deriving from this object, so the
37
- * adaptation map has to be threaded through `make` itself or chaining one
38
- * of them would drop it (see `make`'s `adapt`).
37
+ * adaptation map has to be threaded through `make` itself or chaining one of
38
+ * them would drop it (see `make`'s `adapt`).
39
39
  */
40
40
  export declare function Schema<$Definition extends Definition, $Adaptations extends Adaptations = {}>(schema: Omit<Schema<$Definition, $Adaptations>, "as">): Schema<$Definition, $Adaptations>;
41
41
  export declare function isObjectSchema(candidate: AnySchema): candidate is Schema;
@@ -8,10 +8,10 @@ export type Definition<$Schema = AnySchema> = {
8
8
  [_ in string]: $Schema;
9
9
  };
10
10
  /**
11
- * Constraint for a refinement's values. The source schema differs per
12
- * property, so it must be `any` (not `AnySchema`) to stay assignable across
13
- * every property's own `$Source`. Constraint only: precise types still flow
14
- * via `$Refinement`.
11
+ * Constraint for a refinement's values. The source schema differs per property,
12
+ * so it must be `any` (not `AnySchema`) to stay assignable across every
13
+ * property's own `$Source`. Constraint only: precise types still flow via
14
+ * `$Refinement`.
15
15
  */
16
16
  export type Refinement<$Definition extends Definition> = Definition<ComputeSchema<Fabricated<$Definition>, any>>;
17
17
  export type Extender<$Definition extends Definition, $Extension extends Definition> = (params: {
@@ -21,12 +21,11 @@ export type Refinements = ReadonlyArray<Definition>;
21
21
  /**
22
22
  * Every `object.omittable`- or `object.optional`-kind field's key, so
23
23
  * `Fabricated` can mark exactly those `?:` instead of required — matching
24
- * runtime, where a field whose roll lands on omission never has its key
25
- * appear (`object/omittable/Fabricator.ts`, `object/optional/Fabricator.ts`).
24
+ * runtime, where a field whose roll lands on omission never has its key appear
25
+ * (`object/omittable/Fabricator.ts`, `object/optional/Fabricator.ts`).
26
26
  * `object.optional`'s `ValueOf` already carries `| undefined` (its
27
- * `Fabricated`), so combined with the `?:` here a field lands on
28
- * `{ a?: T | undefined }` — omitted, present-as-`undefined`, or
29
- * present-with-a-value.
27
+ * `Fabricated`), so combined with the `?:` here a field lands on `{ a?: T |
28
+ * undefined }` — omitted, present-as-`undefined`, or present-with-a-value.
30
29
  */
31
30
  type OmittableKeys<$Definition extends Definition> = {
32
31
  [$K in keyof $Definition]: $Definition[$K] extends {
@@ -39,19 +38,18 @@ export type Fabricated<$Definition extends Definition, $Bindings extends unknown
39
38
  [$K in OmittableKeys<$Definition>]?: ValueOf<$Definition[$K], $Bindings>;
40
39
  }>;
41
40
  /**
42
- * The shape `.override()` accepts: every field optional, so a present key
43
- * skips generation for that field. A nested `object`-kind field recurses
44
- * into its own `Override` (deep-merge); an `object.omittable` or
45
- * `object.optional` field additionally accepts `Omitted`, to force that
46
- * field off rather than only forcing a value on (`object.optional` already
47
- * accepts `undefined` via `ValueOf`); every other field — including
48
- * `object.compute` — is a full-replacement leaf, typed as whatever it
49
- * fabricates to (`ValueOf`).
41
+ * The shape `.override()` accepts: every field optional, so a present key skips
42
+ * generation for that field. A nested `object`-kind field recurses into its own
43
+ * `Override` (deep-merge); an `object.omittable` or `object.optional` field
44
+ * additionally accepts `Omitted`, to force that field off rather than only
45
+ * forcing a value on (`object.optional` already accepts `undefined` via
46
+ * `ValueOf`); every other field — including `object.compute` — is a
47
+ * full-replacement leaf, typed as whatever it fabricates to (`ValueOf`).
50
48
  *
51
49
  * Checked via a bare structural `[Kind]`/`[Meta]` shape, never `Schema`/
52
- * `Fabricator` — either carries `refine`'s contravariant use of
53
- * `$Definition`, and referencing it here would leak that contravariance
54
- * into every recursive `Override` instantiation.
50
+ * `Fabricator` — either carries `refine`'s contravariant use of `$Definition`,
51
+ * and referencing it here would leak that contravariance into every recursive
52
+ * `Override` instantiation.
55
53
  */
56
54
  export type Override<$Definition extends Definition> = Pretty<{
57
55
  [$K in keyof $Definition]?: $Definition[$K] extends {
@@ -64,8 +62,8 @@ export type Override<$Definition extends Definition> = Pretty<{
64
62
  } ? ValueOf<$Definition[$K]> | typeof Omitted : ValueOf<$Definition[$K]>;
65
63
  }>;
66
64
  /**
67
- * `definition`/`refinements` stay required regardless of `produce` — an
68
- * opaque `as` production layers on top rather than replacing them, so
65
+ * `definition`/`refinements` stay required regardless of `produce` — an opaque
66
+ * `as` production layers on top rather than replacing them, so
69
67
  * `extend`/`refine`/`override` and `ToTypeBox`'s structural derivation keep
70
68
  * working, and a prior definition survives `as` for future validation of
71
69
  * `produce`.
@@ -22,10 +22,9 @@ export type Fabricator<$Fabricated, $Source extends Source, $Adaptations extends
22
22
  export declare function isObjectComputeFabricator(candidate: BaseFabricator<unknown>): candidate is Fabricator<unknown, Source>;
23
23
  /**
24
24
  * Turn an `object.compute` Schema into a live Fabricator. Unlike every other
25
- * kind, there's nothing of `source` to build here — a computed field's
26
- * value comes entirely from `resolve`, given the rest of the object. The
27
- * node still records `trace` so it can be rebuilt from a parent field's
28
- * captured trace; `.fabricate()` without the parent object throws
29
- * `DetachedComputeError`.
25
+ * kind, there's nothing of `source` to build here — a computed field's value
26
+ * comes entirely from `resolve`, given the rest of the object. The node still
27
+ * records `trace` so it can be rebuilt from a parent field's captured trace;
28
+ * `.fabricate()` without the parent object throws `DetachedComputeError`.
30
29
  */
31
30
  export declare function Fabricator<$Fabricated, $Source extends Source>(context: FabricatorContext<Schema<$Fabricated, $Source>>): Fabricator<$Fabricated, $Source>;
@@ -10,10 +10,10 @@ export type Computer<$Definition extends object.Definition> = <const $Source ext
10
10
  };
11
11
  export interface Schema<$Fabricated, $Source extends Source, $Adaptations extends Adaptations = {}> extends Core<$Fabricated, $Source, $Adaptations> {
12
12
  /**
13
- * Override what this schema maps to in one or more external schema
14
- * libraries — see `string/Schema.ts`'s `adapt` for the full contract.
15
- * Adapting the computed field itself, rather than the `source` it derives
16
- * its shape from, is the way to say the two differ.
13
+ * Override what this schema maps to in one or more external schema libraries
14
+ * — see `string/Schema.ts`'s `adapt` for the full contract. Adapting the
15
+ * computed field itself, rather than the `source` it derives its shape from,
16
+ * is the way to say the two differ.
17
17
  */
18
18
  adapt: <const $Adapter extends Adapter, $Returnable extends ReturnType<$Adapter["convert"]>>(adapter: $Adapter, produce: (adapting: Adapting<Schema<$Fabricated, $Source, $Adaptations>>) => $Returnable) => Schema<$Fabricated, $Source, WithAdaptations<$Adaptations, AdaptationEntry<$Adapter, $Returnable>>>;
19
19
  }
@@ -3,22 +3,22 @@ import type { AnySchema, ValueOf } from "../../../Schema/Types";
3
3
  import { Kind, type Adaptation, type Meta, type Produces } from "../../../Types";
4
4
  /**
5
5
  * A builder that can mint a Schema via `as` — e.g. `T.string`, `T.bigint`.
6
- * `compute` accepts one alongside a plain Schema so a caller needn't
7
- * satisfy a `whereby` just to name a computed field's type: the resolver
8
- * supplies the value, so the field's length/range is irrelevant.
6
+ * `compute` accepts one alongside a plain Schema so a caller needn't satisfy a
7
+ * `whereby` just to name a computed field's type: the resolver supplies the
8
+ * value, so the field's length/range is irrelevant.
9
9
  */
10
10
  export type Builder<$Schema extends AnySchema = AnySchema> = {
11
11
  [Kind]: $Schema[typeof Kind];
12
12
  as: (produce: () => any) => $Schema;
13
13
  };
14
14
  /**
15
- * A `compute` source: the Schema whose value and shape a computed field
16
- * adopts, or a builder that denotes one.
15
+ * A `compute` source: the Schema whose value and shape a computed field adopts,
16
+ * or a builder that denotes one.
17
17
  */
18
18
  export type Source = AnySchema | Builder;
19
19
  /**
20
- * The Schema a source denotes: a plain Schema is itself; a builder is
21
- * the Schema its `as` mints.
20
+ * The Schema a source denotes: a plain Schema is itself; a builder is the
21
+ * Schema its `as` mints.
22
22
  */
23
23
  export type Denoted<$Source> = $Source extends AnySchema ? $Source : $Source extends Builder<infer $Schema> ? $Schema : never;
24
24
  /**
@@ -26,20 +26,19 @@ export type Denoted<$Source> = $Source extends AnySchema ? $Source : $Source ext
26
26
  */
27
27
  export type Resolved<$Source, $Bindings extends unknown[] = []> = ValueOf<Denoted<$Source>, $Bindings>;
28
28
  /**
29
- * Source and resolver are stored raw — the source whether a Schema or a
30
- * builder (both carry a `[Kind]`, which is all schema derivation needs),
31
- * and the resolver as plain data from the moment
32
- * `compute(source).as(resolve)` is called: `compute` never builds anything,
33
- * so unlike a Fabricator's closure there's nothing lossy about storing it.
34
- * `source` is only used for its shape/type (`Adapter/TypeBox` reflects a
35
- * computed field as its source's shape, unless the field itself is
36
- * adapted) the resolver draws entirely from `fabricated`, never from
37
- * `source`, which may not even have a buildable recipe (a bare
38
- * `T.string`/`T.bigint`).
29
+ * Source and resolver are stored raw — the source whether a Schema or a builder
30
+ * (both carry a `[Kind]`, which is all schema derivation needs), and the
31
+ * resolver as plain data from the moment `compute(source).as(resolve)` is
32
+ * called: `compute` never builds anything, so unlike a Fabricator's closure
33
+ * there's nothing lossy about storing it. `source` is only used for its
34
+ * shape/type (`Adapter/TypeBox` reflects a computed field as its source's
35
+ * shape, unless the field itself is adapted) — the resolver draws entirely from
36
+ * `fabricated`, never from `source`, which may not even have a buildable recipe
37
+ * (a bare `T.string`/`T.bigint`).
39
38
  *
40
- * Unlike every other kind's `Meta`, this one is generic over the *enclosing
41
- * object's* fabricated type as well as the source — that is what the
42
- * resolver is handed.
39
+ * Unlike every other kind's `Meta`, this one is generic over the _enclosing
40
+ * object's_ fabricated type as well as the source — that is what the resolver
41
+ * is handed.
43
42
  */
44
43
  export type Meta<$Fabricated, $Source extends Source> = {
45
44
  source: $Source;
@@ -16,22 +16,22 @@ export type Fabricator<$Schema extends {
16
16
  [Children]: BaseFabricator<any>;
17
17
  readonly [Adaptation]?: AdaptationsOf<$Schema>;
18
18
  /**
19
- * `Omitted` on the empty roll (or when an `.as(...)` producer returns it)
20
- * read only by `object/Fabricator.ts`'s fabricate loop, which omits the
21
- * key entirely rather than writing `undefined`. Fabricating this outside
22
- * a parent `object` hands the sentinel straight back.
19
+ * `Omitted` on the empty roll (or when an `.as(...)` producer returns it)
20
+ * read only by `object/Fabricator.ts`'s fabricate loop, which omits the key
21
+ * entirely rather than writing `undefined`. Fabricating this outside a parent
22
+ * `object` hands the sentinel straight back.
23
23
  */
24
24
  fabricate: () => Resolved<$Schema[typeof Meta]["definition"]>;
25
25
  };
26
26
  export declare function isObjectOmittableFabricator(candidate: BaseFabricator<unknown>): candidate is Fabricator;
27
27
  /**
28
- * A presence roll on this field's private stream, drawn only when present
29
- * is decided — an omission roll never advances `source`'s stream, and since
28
+ * A presence roll on this field's private stream, drawn only when present is
29
+ * decided — an omission roll never advances `source`'s stream, and since
30
30
  * `source` is already dispatched into its own independent stream by
31
- * `Constructor.ts` regardless of this roll, skipping its draw here can
32
- * never perturb any other field's reproducibility (`Random/index.ts`'s
31
+ * `Constructor.ts` regardless of this roll, skipping its draw here can never
32
+ * perturb any other field's reproducibility (`Random/index.ts`'s
33
33
  * `toStreamFromTrace`: every field's stream is private from the moment it's
34
- * minted). 50/50 by default; `.weighted(...)` (`Schema.ts`) reweights
35
- * either outcome relative to that same default of `1`.
34
+ * minted). 50/50 by default; `.weighted(...)` (`Schema.ts`) reweights either
35
+ * outcome relative to that same default of `1`.
36
36
  */
37
37
  export declare function Fabricator<$Definition extends Definition>(context: FabricatorContext<Schema<$Definition>>, source: BaseFabricator<any>): Fabricator<Schema<$Definition>>;
@@ -1,6 +1,6 @@
1
1
  /**
2
- * The two outcomes an omittable field's presence roll can land on. Also
3
- * the key space `.weighted(...)` weighs — see `Types.ts`'s `Weights`.
2
+ * The two outcomes an omittable field's presence roll can land on. Also the key
3
+ * space `.weighted(...)` weighs — see `Types.ts`'s `Weights`.
4
4
  *
5
5
  * Lives here rather than `Types.ts` so that file stays type-only (see
6
6
  * `boolean/Outcomes.ts`).
@@ -6,25 +6,25 @@ import type { Core, Definition, Resolved, Weights } from "./Types";
6
6
  export interface Schema<$Definition extends Definition = Definition, $Adaptations extends Adaptations = {}> extends Core<$Definition, $Adaptations> {
7
7
  /**
8
8
  * Layer an opaque production on this schema's existing `[Meta]` — carrying
9
- * `definition` forward, not discarding it, so a later `.as(...)` (or
10
- * future validation of `produce`) still has it to check against.
11
- * `produce` may return `Omitted`, so custom presence logic composes the
12
- * same way the built-in roll does.
9
+ * `definition` forward, not discarding it, so a later `.as(...)` (or future
10
+ * validation of `produce`) still has it to check against. `produce` may
11
+ * return `Omitted`, so custom presence logic composes the same way the
12
+ * built-in roll does.
13
13
  */
14
14
  as: (produce: Produce<Resolved<$Definition>>) => Schema<$Definition, $Adaptations>;
15
15
  /**
16
16
  * Reweight the built-in presence roll. Keys are optional — an omitted key
17
- * keeps baseline weight `1`, the same weight the 50/50 split already uses
18
- * but that baseline is still relative to whatever else is specified, so
17
+ * keeps baseline weight `1`, the same weight the 50/50 split already uses
18
+ * but that baseline is still relative to whatever else is specified, so
19
19
  * `.weighted({ omitted: 0.1 })` shifts both outcomes' shares, not just
20
- * `omitted`'s (see `Types.ts`'s `Weights`). Chaining `.weighted(...)`
21
- * merges into previous weights rather than replacing them, the same
22
- * layering `.as(...)` uses for `produce`.
20
+ * `omitted`'s (see `Types.ts`'s `Weights`). Chaining `.weighted(...)` merges
21
+ * into previous weights rather than replacing them, the same layering
22
+ * `.as(...)` uses for `produce`.
23
23
  */
24
24
  weighted: (weights: Weights) => Schema<$Definition, $Adaptations>;
25
25
  /**
26
- * Override what this schema maps to in one or more external schema
27
- * libraries — see `string/Schema.ts`'s `adapt` for the full contract.
26
+ * Override what this schema maps to in one or more external schema libraries
27
+ * — see `string/Schema.ts`'s `adapt` for the full contract.
28
28
  */
29
29
  adapt: <const $Adapter extends Adapter, $Returnable extends ReturnType<$Adapter["convert"]>>(adapter: $Adapter, produce: (adapting: Adapting<Schema<$Definition, $Adaptations>>) => $Returnable) => Schema<$Definition, WithAdaptations<$Adaptations, AdaptationEntry<$Adapter, $Returnable>>>;
30
30
  }
@@ -3,32 +3,31 @@ import type { Produce } from "../../../Random/Types";
3
3
  import type { AnySchema, ValueOf } from "../../../Schema/Types";
4
4
  import { Kind, Meta, Omitted, type Adaptation, type Produces } from "../../../Types";
5
5
  /**
6
- * The wrapped field's own Schema — the value type an omittable field
7
- * produces when its presence roll comes up present.
6
+ * The wrapped field's own Schema — the value type an omittable field produces
7
+ * when its presence roll comes up present.
8
8
  */
9
9
  export type Definition = AnySchema;
10
10
  export type Fabricated<$Definition extends Definition, $Bindings extends unknown[] = []> = ValueOf<$Definition, $Bindings>;
11
11
  /**
12
- * What an omittable field's Fabricator returns: the wrapped value, or
13
- * `Omitted` when it should not appear — whether from the built-in presence
14
- * roll or, via `.as(...)`, an opaque producer.
12
+ * What an omittable field's Fabricator returns: the wrapped value, or `Omitted`
13
+ * when it should not appear — whether from the built-in presence roll or, via
14
+ * `.as(...)`, an opaque producer.
15
15
  */
16
16
  export type Resolved<$Definition extends Definition> = Fabricated<$Definition> | typeof Omitted;
17
17
  export type { Outcome } from "./Outcomes";
18
18
  /**
19
- * Relative weights for `.weighted(...)`, keyed by `Outcome`. Keys optional —
20
- * an omitted key falls back to baseline `1`, the same weight the 50/50
21
- * split already uses. Values are relative, exactly like `weighted()`
19
+ * Relative weights for `.weighted(...)`, keyed by `Outcome`. Keys optional — an
20
+ * omitted key falls back to baseline `1`, the same weight the 50/50 split
21
+ * already uses. Values are relative, exactly like `weighted()`
22
22
  * (`Distribution/index.ts`) — they need not sum to one, and are fed to
23
23
  * `weighted()` unchanged alongside each unspecified key's baseline `1`.
24
24
  *
25
- * Specifying one outcome's weight shifts the *other* outcome's resulting
26
- * probability too, even though its weight stays at `1` — its share of the
27
- * total still moves, since the total changed. `.weighted({ omitted: 0.1 })`
28
- * is not "10% omitted, 90% present" — with `value` at default `1`, the
29
- * split is `0.1 / 1.1 ≈ 9.1%` omitted, `≈90.9%` present. No independent
30
- * "absolute probability" mode; weights are only meaningful relative to the
31
- * full set in play.
25
+ * Specifying one outcome's weight shifts the _other_ outcome's resulting
26
+ * probability too, even though its weight stays at `1` — its share of the total
27
+ * still moves, since the total changed. `.weighted({ omitted: 0.1 })` is not
28
+ * "10% omitted, 90% present" — with `value` at default `1`, the split is `0.1 /
29
+ * 1.1 ≈ 9.1%` omitted, `≈90.9%` present. No independent "absolute probability"
30
+ * mode; weights are only meaningful relative to the full set in play.
32
31
  */
33
32
  export type Weights = {
34
33
  omitted: number;