@ghostry/fabricator 0.0.1
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/LICENSE +21 -0
- package/README.md +47 -0
- package/dist/esm/Adapter/Core.js +47 -0
- package/dist/esm/Adapter/Types.js +1 -0
- package/dist/esm/Bound.js +81 -0
- package/dist/esm/Distribution/index.js +200 -0
- package/dist/esm/Enumeration/Enumerate.js +103 -0
- package/dist/esm/Enumeration/Plan.js +286 -0
- package/dist/esm/Enumeration/Types.js +1 -0
- package/dist/esm/Error/index.js +201 -0
- package/dist/esm/Fabricator/Constructor.js +328 -0
- package/dist/esm/Fabricator/Types.js +1 -0
- package/dist/esm/Instance/Core.js +119 -0
- package/dist/esm/Instance/Types.js +1 -0
- package/dist/esm/Primitive/always/Fabricator.js +13 -0
- package/dist/esm/Primitive/always/Registry.js +11 -0
- package/dist/esm/Primitive/always/Schema.js +10 -0
- package/dist/esm/Primitive/always/Types.js +1 -0
- package/dist/esm/Primitive/always/index.js +5 -0
- package/dist/esm/Primitive/array/Fabricator.js +45 -0
- package/dist/esm/Primitive/array/Registry.js +26 -0
- package/dist/esm/Primitive/array/Schema.js +17 -0
- package/dist/esm/Primitive/array/Types.js +1 -0
- package/dist/esm/Primitive/array/index.js +5 -0
- package/dist/esm/Primitive/bigint/Fabricator.js +54 -0
- package/dist/esm/Primitive/bigint/Registry.js +31 -0
- package/dist/esm/Primitive/bigint/Schema.js +17 -0
- package/dist/esm/Primitive/bigint/Types.js +1 -0
- package/dist/esm/Primitive/bigint/index.js +5 -0
- package/dist/esm/Primitive/boolean/Fabricator.js +44 -0
- package/dist/esm/Primitive/boolean/Outcomes.js +5 -0
- package/dist/esm/Primitive/boolean/Registry.js +11 -0
- package/dist/esm/Primitive/boolean/Schema.js +33 -0
- package/dist/esm/Primitive/boolean/Types.js +1 -0
- package/dist/esm/Primitive/boolean/index.js +6 -0
- package/dist/esm/Primitive/choice/Fabricator.js +37 -0
- package/dist/esm/Primitive/choice/Registry.js +38 -0
- package/dist/esm/Primitive/choice/Schema.js +17 -0
- package/dist/esm/Primitive/choice/Types.js +1 -0
- package/dist/esm/Primitive/choice/index.js +5 -0
- package/dist/esm/Primitive/date/Fabricator.js +86 -0
- package/dist/esm/Primitive/date/Registry.js +61 -0
- package/dist/esm/Primitive/date/Schema.js +17 -0
- package/dist/esm/Primitive/date/Types.js +1 -0
- package/dist/esm/Primitive/date/index.js +5 -0
- package/dist/esm/Primitive/enum/Fabricator.js +33 -0
- package/dist/esm/Primitive/enum/Registry.js +33 -0
- package/dist/esm/Primitive/enum/Schema.js +17 -0
- package/dist/esm/Primitive/enum/Types.js +1 -0
- package/dist/esm/Primitive/enum/index.js +5 -0
- package/dist/esm/Primitive/index.js +24 -0
- package/dist/esm/Primitive/namespace.js +21 -0
- package/dist/esm/Primitive/null/Fabricator.js +14 -0
- package/dist/esm/Primitive/null/Registry.js +8 -0
- package/dist/esm/Primitive/null/Schema.js +10 -0
- package/dist/esm/Primitive/null/Types.js +1 -0
- package/dist/esm/Primitive/null/index.js +5 -0
- package/dist/esm/Primitive/nullable/Fabricator.js +58 -0
- package/dist/esm/Primitive/nullable/Outcomes.js +5 -0
- package/dist/esm/Primitive/nullable/Registry.js +13 -0
- package/dist/esm/Primitive/nullable/Schema.js +36 -0
- package/dist/esm/Primitive/nullable/Types.js +1 -0
- package/dist/esm/Primitive/nullable/index.js +6 -0
- package/dist/esm/Primitive/nullish/Fabricator.js +64 -0
- package/dist/esm/Primitive/nullish/Outcomes.js +6 -0
- package/dist/esm/Primitive/nullish/Registry.js +13 -0
- package/dist/esm/Primitive/nullish/Schema.js +36 -0
- package/dist/esm/Primitive/nullish/Types.js +1 -0
- package/dist/esm/Primitive/nullish/index.js +6 -0
- package/dist/esm/Primitive/number/Fabricator.js +73 -0
- package/dist/esm/Primitive/number/Registry.js +59 -0
- package/dist/esm/Primitive/number/Schema.js +18 -0
- package/dist/esm/Primitive/number/Types.js +1 -0
- package/dist/esm/Primitive/number/defaults.js +21 -0
- package/dist/esm/Primitive/number/index.js +5 -0
- package/dist/esm/Primitive/object/Fabricator.js +77 -0
- package/dist/esm/Primitive/object/Registry.js +146 -0
- package/dist/esm/Primitive/object/Schema.js +18 -0
- package/dist/esm/Primitive/object/Types.js +1 -0
- package/dist/esm/Primitive/object/compute/Fabricator.js +24 -0
- package/dist/esm/Primitive/object/compute/Registry.js +15 -0
- package/dist/esm/Primitive/object/compute/Schema.js +13 -0
- package/dist/esm/Primitive/object/compute/Types.js +1 -0
- package/dist/esm/Primitive/object/compute/index.js +5 -0
- package/dist/esm/Primitive/object/index.js +9 -0
- package/dist/esm/Primitive/object/omittable/Fabricator.js +57 -0
- package/dist/esm/Primitive/object/omittable/Outcomes.js +5 -0
- package/dist/esm/Primitive/object/omittable/Registry.js +13 -0
- package/dist/esm/Primitive/object/omittable/Schema.js +36 -0
- package/dist/esm/Primitive/object/omittable/Types.js +1 -0
- package/dist/esm/Primitive/object/omittable/index.js +6 -0
- package/dist/esm/Primitive/object/optional/Fabricator.js +55 -0
- package/dist/esm/Primitive/object/optional/Outcomes.js +6 -0
- package/dist/esm/Primitive/object/optional/Registry.js +13 -0
- package/dist/esm/Primitive/object/optional/Schema.js +36 -0
- package/dist/esm/Primitive/object/optional/Types.js +1 -0
- package/dist/esm/Primitive/object/optional/index.js +6 -0
- package/dist/esm/Primitive/opaque/Fabricator.js +19 -0
- package/dist/esm/Primitive/opaque/Registry.js +11 -0
- package/dist/esm/Primitive/opaque/Schema.js +10 -0
- package/dist/esm/Primitive/opaque/Types.js +1 -0
- package/dist/esm/Primitive/opaque/index.js +5 -0
- package/dist/esm/Primitive/record/Fabricator.js +55 -0
- package/dist/esm/Primitive/record/Registry.js +26 -0
- package/dist/esm/Primitive/record/Schema.js +17 -0
- package/dist/esm/Primitive/record/Types.js +1 -0
- package/dist/esm/Primitive/record/index.js +5 -0
- package/dist/esm/Primitive/recursive/Fabricator.js +33 -0
- package/dist/esm/Primitive/recursive/Registry.js +20 -0
- package/dist/esm/Primitive/recursive/Schema.js +10 -0
- package/dist/esm/Primitive/recursive/Terminate.js +236 -0
- package/dist/esm/Primitive/recursive/Types.js +1 -0
- package/dist/esm/Primitive/recursive/index.js +7 -0
- package/dist/esm/Primitive/recursive/self/Fabricator.js +15 -0
- package/dist/esm/Primitive/recursive/self/Registry.js +9 -0
- package/dist/esm/Primitive/recursive/self/Schema.js +10 -0
- package/dist/esm/Primitive/recursive/self/Types.js +1 -0
- package/dist/esm/Primitive/recursive/self/index.js +5 -0
- package/dist/esm/Primitive/string/Constants.js +73 -0
- package/dist/esm/Primitive/string/Fabricator.js +109 -0
- package/dist/esm/Primitive/string/Registry.js +25 -0
- package/dist/esm/Primitive/string/Schema.js +18 -0
- package/dist/esm/Primitive/string/Types.js +1 -0
- package/dist/esm/Primitive/string/index.js +6 -0
- package/dist/esm/Primitive/symbol/Fabricator.js +33 -0
- package/dist/esm/Primitive/symbol/Registry.js +17 -0
- package/dist/esm/Primitive/symbol/Schema.js +17 -0
- package/dist/esm/Primitive/symbol/Types.js +1 -0
- package/dist/esm/Primitive/symbol/index.js +5 -0
- package/dist/esm/Primitive/tuple/Fabricator.js +33 -0
- package/dist/esm/Primitive/tuple/Registry.js +13 -0
- package/dist/esm/Primitive/tuple/Schema.js +17 -0
- package/dist/esm/Primitive/tuple/Types.js +1 -0
- package/dist/esm/Primitive/tuple/index.js +5 -0
- package/dist/esm/Primitive/undefinable/Fabricator.js +58 -0
- package/dist/esm/Primitive/undefinable/Outcomes.js +5 -0
- package/dist/esm/Primitive/undefinable/Registry.js +13 -0
- package/dist/esm/Primitive/undefinable/Schema.js +36 -0
- package/dist/esm/Primitive/undefinable/Types.js +1 -0
- package/dist/esm/Primitive/undefinable/index.js +6 -0
- package/dist/esm/Primitive/undefined/Fabricator.js +16 -0
- package/dist/esm/Primitive/undefined/Registry.js +8 -0
- package/dist/esm/Primitive/undefined/Schema.js +10 -0
- package/dist/esm/Primitive/undefined/Types.js +1 -0
- package/dist/esm/Primitive/undefined/index.js +5 -0
- package/dist/esm/Random/CallSite.js +56 -0
- package/dist/esm/Random/Generator/sfc32.js +16 -0
- package/dist/esm/Random/Types.js +1 -0
- package/dist/esm/Random/index.js +151 -0
- package/dist/esm/Schema/Core.js +68 -0
- package/dist/esm/Schema/Registry.js +17 -0
- package/dist/esm/Schema/Types.js +1 -0
- package/dist/esm/Types.js +11 -0
- package/dist/esm/Utility/Core.js +36 -0
- package/dist/esm/Utility/DeepMerge.js +18 -0
- package/dist/esm/Utility/Digest.js +28 -0
- package/dist/esm/Utility/ShallowMerge.js +13 -0
- package/dist/esm/Utility/Types.js +1 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/internal.js +5 -0
- package/dist/types/Adapter/Core.d.ts +64 -0
- package/dist/types/Adapter/Types.d.ts +145 -0
- package/dist/types/Bound.d.ts +68 -0
- package/dist/types/Distribution/index.d.ts +157 -0
- package/dist/types/Enumeration/Enumerate.d.ts +35 -0
- package/dist/types/Enumeration/Plan.d.ts +44 -0
- package/dist/types/Enumeration/Types.d.ts +86 -0
- package/dist/types/Error/index.d.ts +541 -0
- package/dist/types/Fabricator/Constructor.d.ts +43 -0
- package/dist/types/Fabricator/Types.d.ts +150 -0
- package/dist/types/Instance/Core.d.ts +98 -0
- package/dist/types/Instance/Types.d.ts +167 -0
- package/dist/types/Primitive/always/Fabricator.d.ts +19 -0
- package/dist/types/Primitive/always/Registry.d.ts +3 -0
- package/dist/types/Primitive/always/Schema.d.ts +19 -0
- package/dist/types/Primitive/always/Types.d.ts +23 -0
- package/dist/types/Primitive/always/index.d.ts +5 -0
- package/dist/types/Primitive/array/Fabricator.d.ts +22 -0
- package/dist/types/Primitive/array/Registry.d.ts +18 -0
- package/dist/types/Primitive/array/Schema.d.ts +23 -0
- package/dist/types/Primitive/array/Types.d.ts +44 -0
- package/dist/types/Primitive/array/index.d.ts +5 -0
- package/dist/types/Primitive/bigint/Fabricator.d.ts +19 -0
- package/dist/types/Primitive/bigint/Registry.d.ts +19 -0
- package/dist/types/Primitive/bigint/Schema.d.ts +27 -0
- package/dist/types/Primitive/bigint/Types.d.ts +33 -0
- package/dist/types/Primitive/bigint/index.d.ts +5 -0
- package/dist/types/Primitive/boolean/Fabricator.d.ts +19 -0
- package/dist/types/Primitive/boolean/Outcomes.d.ts +12 -0
- package/dist/types/Primitive/boolean/Registry.d.ts +14 -0
- package/dist/types/Primitive/boolean/Schema.d.ts +28 -0
- package/dist/types/Primitive/boolean/Types.d.ts +26 -0
- package/dist/types/Primitive/boolean/index.d.ts +6 -0
- package/dist/types/Primitive/choice/Fabricator.d.ts +32 -0
- package/dist/types/Primitive/choice/Registry.d.ts +38 -0
- package/dist/types/Primitive/choice/Schema.d.ts +24 -0
- package/dist/types/Primitive/choice/Types.d.ts +35 -0
- package/dist/types/Primitive/choice/index.d.ts +5 -0
- package/dist/types/Primitive/date/Fabricator.d.ts +19 -0
- package/dist/types/Primitive/date/Registry.d.ts +82 -0
- package/dist/types/Primitive/date/Schema.d.ts +28 -0
- package/dist/types/Primitive/date/Types.d.ts +34 -0
- package/dist/types/Primitive/date/index.d.ts +5 -0
- package/dist/types/Primitive/enum/Fabricator.d.ts +19 -0
- package/dist/types/Primitive/enum/Registry.d.ts +39 -0
- package/dist/types/Primitive/enum/Schema.d.ts +23 -0
- package/dist/types/Primitive/enum/Types.d.ts +44 -0
- package/dist/types/Primitive/enum/index.d.ts +5 -0
- package/dist/types/Primitive/index.d.ts +28 -0
- package/dist/types/Primitive/namespace.d.ts +38 -0
- package/dist/types/Primitive/null/Fabricator.d.ts +19 -0
- package/dist/types/Primitive/null/Registry.d.ts +3 -0
- package/dist/types/Primitive/null/Schema.d.ts +16 -0
- package/dist/types/Primitive/null/Types.d.ts +15 -0
- package/dist/types/Primitive/null/index.d.ts +5 -0
- package/dist/types/Primitive/nullable/Fabricator.d.ts +31 -0
- package/dist/types/Primitive/nullable/Outcomes.d.ts +9 -0
- package/dist/types/Primitive/nullable/Registry.d.ts +3 -0
- package/dist/types/Primitive/nullable/Schema.d.ts +36 -0
- package/dist/types/Primitive/nullable/Types.d.ts +48 -0
- package/dist/types/Primitive/nullable/index.d.ts +6 -0
- package/dist/types/Primitive/nullish/Fabricator.d.ts +36 -0
- package/dist/types/Primitive/nullish/Outcomes.d.ts +9 -0
- package/dist/types/Primitive/nullish/Registry.d.ts +3 -0
- package/dist/types/Primitive/nullish/Schema.d.ts +36 -0
- package/dist/types/Primitive/nullish/Types.d.ts +58 -0
- package/dist/types/Primitive/nullish/index.d.ts +6 -0
- package/dist/types/Primitive/number/Fabricator.d.ts +19 -0
- package/dist/types/Primitive/number/Registry.d.ts +52 -0
- package/dist/types/Primitive/number/Schema.d.ts +32 -0
- package/dist/types/Primitive/number/Types.d.ts +56 -0
- package/dist/types/Primitive/number/defaults.d.ts +18 -0
- package/dist/types/Primitive/number/index.d.ts +5 -0
- package/dist/types/Primitive/object/Fabricator.d.ts +56 -0
- package/dist/types/Primitive/object/Registry.d.ts +23 -0
- package/dist/types/Primitive/object/Schema.d.ts +41 -0
- package/dist/types/Primitive/object/Types.d.ts +85 -0
- package/dist/types/Primitive/object/compute/Fabricator.d.ts +31 -0
- package/dist/types/Primitive/object/compute/Registry.d.ts +4 -0
- package/dist/types/Primitive/object/compute/Schema.d.ts +21 -0
- package/dist/types/Primitive/object/compute/Types.d.ts +56 -0
- package/dist/types/Primitive/object/compute/index.d.ts +5 -0
- package/dist/types/Primitive/object/index.d.ts +8 -0
- package/dist/types/Primitive/object/omittable/Fabricator.d.ts +37 -0
- package/dist/types/Primitive/object/omittable/Outcomes.d.ts +9 -0
- package/dist/types/Primitive/object/omittable/Registry.d.ts +3 -0
- package/dist/types/Primitive/object/omittable/Schema.d.ts +32 -0
- package/dist/types/Primitive/object/omittable/Types.d.ts +57 -0
- package/dist/types/Primitive/object/omittable/index.d.ts +6 -0
- package/dist/types/Primitive/object/optional/Fabricator.d.ts +45 -0
- package/dist/types/Primitive/object/optional/Outcomes.d.ts +9 -0
- package/dist/types/Primitive/object/optional/Registry.d.ts +3 -0
- package/dist/types/Primitive/object/optional/Schema.d.ts +32 -0
- package/dist/types/Primitive/object/optional/Types.d.ts +72 -0
- package/dist/types/Primitive/object/optional/index.d.ts +6 -0
- package/dist/types/Primitive/opaque/Fabricator.d.ts +19 -0
- package/dist/types/Primitive/opaque/Registry.d.ts +12 -0
- package/dist/types/Primitive/opaque/Schema.d.ts +22 -0
- package/dist/types/Primitive/opaque/Types.d.ts +18 -0
- package/dist/types/Primitive/opaque/index.d.ts +5 -0
- package/dist/types/Primitive/record/Fabricator.d.ts +25 -0
- package/dist/types/Primitive/record/Registry.d.ts +17 -0
- package/dist/types/Primitive/record/Schema.d.ts +27 -0
- package/dist/types/Primitive/record/Types.d.ts +85 -0
- package/dist/types/Primitive/record/index.d.ts +5 -0
- package/dist/types/Primitive/recursive/Fabricator.d.ts +47 -0
- package/dist/types/Primitive/recursive/Registry.d.ts +22 -0
- package/dist/types/Primitive/recursive/Schema.d.ts +21 -0
- package/dist/types/Primitive/recursive/Terminate.d.ts +20 -0
- package/dist/types/Primitive/recursive/Types.d.ts +82 -0
- package/dist/types/Primitive/recursive/index.d.ts +6 -0
- package/dist/types/Primitive/recursive/self/Fabricator.d.ts +29 -0
- package/dist/types/Primitive/recursive/self/Registry.d.ts +7 -0
- package/dist/types/Primitive/recursive/self/Schema.d.ts +20 -0
- package/dist/types/Primitive/recursive/self/Types.d.ts +28 -0
- package/dist/types/Primitive/recursive/self/index.d.ts +5 -0
- package/dist/types/Primitive/string/Constants.d.ts +58 -0
- package/dist/types/Primitive/string/Fabricator.d.ts +24 -0
- package/dist/types/Primitive/string/Registry.d.ts +44 -0
- package/dist/types/Primitive/string/Schema.d.ts +65 -0
- package/dist/types/Primitive/string/Types.d.ts +77 -0
- package/dist/types/Primitive/string/index.d.ts +6 -0
- package/dist/types/Primitive/symbol/Fabricator.d.ts +24 -0
- package/dist/types/Primitive/symbol/Registry.d.ts +16 -0
- package/dist/types/Primitive/symbol/Schema.d.ts +24 -0
- package/dist/types/Primitive/symbol/Types.d.ts +19 -0
- package/dist/types/Primitive/symbol/index.d.ts +5 -0
- package/dist/types/Primitive/tuple/Fabricator.d.ts +37 -0
- package/dist/types/Primitive/tuple/Registry.d.ts +3 -0
- package/dist/types/Primitive/tuple/Schema.d.ts +24 -0
- package/dist/types/Primitive/tuple/Types.d.ts +53 -0
- package/dist/types/Primitive/tuple/index.d.ts +5 -0
- package/dist/types/Primitive/undefinable/Fabricator.d.ts +31 -0
- package/dist/types/Primitive/undefinable/Outcomes.d.ts +9 -0
- package/dist/types/Primitive/undefinable/Registry.d.ts +3 -0
- package/dist/types/Primitive/undefinable/Schema.d.ts +36 -0
- package/dist/types/Primitive/undefinable/Types.d.ts +48 -0
- package/dist/types/Primitive/undefinable/index.d.ts +6 -0
- package/dist/types/Primitive/undefined/Fabricator.d.ts +19 -0
- package/dist/types/Primitive/undefined/Registry.d.ts +3 -0
- package/dist/types/Primitive/undefined/Schema.d.ts +16 -0
- package/dist/types/Primitive/undefined/Types.d.ts +15 -0
- package/dist/types/Primitive/undefined/index.d.ts +5 -0
- package/dist/types/Random/CallSite.d.ts +59 -0
- package/dist/types/Random/Generator/sfc32.d.ts +10 -0
- package/dist/types/Random/Types.d.ts +384 -0
- package/dist/types/Random/index.d.ts +107 -0
- package/dist/types/Schema/Core.d.ts +44 -0
- package/dist/types/Schema/Registry.d.ts +20 -0
- package/dist/types/Schema/Types.d.ts +70 -0
- package/dist/types/Types.d.ts +78 -0
- package/dist/types/Utility/Core.d.ts +35 -0
- package/dist/types/Utility/DeepMerge.d.ts +14 -0
- package/dist/types/Utility/Digest.d.ts +9 -0
- package/dist/types/Utility/ShallowMerge.d.ts +6 -0
- package/dist/types/Utility/Types.d.ts +4 -0
- package/dist/types/index.d.ts +186 -0
- package/dist/types/internal.d.ts +64 -0
- package/package.json +53 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { weighted } from "../../Distribution/index.js";
|
|
2
|
+
import { toStreamFromTrace } from "../../Random/index.js";
|
|
3
|
+
import { Children, Kind, Meta } from "../../Types.js";
|
|
4
|
+
import { never } from "../../Utility/Core.js";
|
|
5
|
+
import { Schema } from "./Schema.js";
|
|
6
|
+
function Fabricator(context, source) {
|
|
7
|
+
var _ref, _ref1;
|
|
8
|
+
var _meta_weights, _meta_weights1;
|
|
9
|
+
const { schema, algorithm, trace } = context;
|
|
10
|
+
const meta = schema[Meta];
|
|
11
|
+
const rehydrated = Schema(schema);
|
|
12
|
+
if (meta.produce) {
|
|
13
|
+
const stream = toStreamFromTrace(algorithm, trace);
|
|
14
|
+
const produce = meta.produce;
|
|
15
|
+
return {
|
|
16
|
+
[Kind]: "nullable",
|
|
17
|
+
[Meta]: meta,
|
|
18
|
+
trace,
|
|
19
|
+
[Children]: source,
|
|
20
|
+
fabricate: ()=>produce({
|
|
21
|
+
random: stream,
|
|
22
|
+
clock: trace.clock
|
|
23
|
+
}),
|
|
24
|
+
schema: rehydrated
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const stream = toStreamFromTrace(algorithm, trace);
|
|
28
|
+
const pick = weighted([
|
|
29
|
+
[
|
|
30
|
+
null != (_ref = null == (_meta_weights = meta.weights) ? void 0 : _meta_weights.null) ? _ref : 1,
|
|
31
|
+
"null"
|
|
32
|
+
],
|
|
33
|
+
[
|
|
34
|
+
null != (_ref1 = null == (_meta_weights1 = meta.weights) ? void 0 : _meta_weights1.value) ? _ref1 : 1,
|
|
35
|
+
"value"
|
|
36
|
+
]
|
|
37
|
+
], stream, "T.nullable");
|
|
38
|
+
const fabricate = ()=>{
|
|
39
|
+
const picked = pick();
|
|
40
|
+
switch(picked){
|
|
41
|
+
case "value":
|
|
42
|
+
return source.fabricate();
|
|
43
|
+
case "null":
|
|
44
|
+
return null;
|
|
45
|
+
default:
|
|
46
|
+
return never(picked);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
return {
|
|
50
|
+
[Kind]: "nullable",
|
|
51
|
+
[Meta]: meta,
|
|
52
|
+
trace,
|
|
53
|
+
[Children]: source,
|
|
54
|
+
fabricate,
|
|
55
|
+
schema: rehydrated
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export { Fabricator };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { toSchema } from "../../Schema/Core.js";
|
|
2
|
+
import { Kind, Meta } from "../../Types.js";
|
|
3
|
+
import { Schema } from "./Schema.js";
|
|
4
|
+
function Registry(definition) {
|
|
5
|
+
const normalized = toSchema(definition);
|
|
6
|
+
return Schema({
|
|
7
|
+
[Kind]: "nullable",
|
|
8
|
+
[Meta]: {
|
|
9
|
+
definition: normalized
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
export default Registry;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { withAdaptations } from "../../Adapter/Core.js";
|
|
2
|
+
import { assertDrawableKeyedWeights } from "../../Distribution/index.js";
|
|
3
|
+
import { Kind, Meta } from "../../Types.js";
|
|
4
|
+
import { outcomes } from "./Outcomes.js";
|
|
5
|
+
function Schema(schema) {
|
|
6
|
+
return {
|
|
7
|
+
...schema,
|
|
8
|
+
[Kind]: "nullable",
|
|
9
|
+
as: (produce)=>Schema({
|
|
10
|
+
...schema,
|
|
11
|
+
[Meta]: {
|
|
12
|
+
...schema[Meta],
|
|
13
|
+
produce
|
|
14
|
+
}
|
|
15
|
+
}),
|
|
16
|
+
weighted: (weights)=>{
|
|
17
|
+
const merged = {
|
|
18
|
+
...schema[Meta].weights,
|
|
19
|
+
...weights
|
|
20
|
+
};
|
|
21
|
+
assertDrawableKeyedWeights("T.nullable.weighted", outcomes, merged);
|
|
22
|
+
return Schema({
|
|
23
|
+
...schema,
|
|
24
|
+
[Meta]: {
|
|
25
|
+
...schema[Meta],
|
|
26
|
+
weights: merged
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
},
|
|
30
|
+
adapt: (adapter, produce)=>Schema(withAdaptations(schema, adapter, produce))
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function isNullableSchema(candidate) {
|
|
34
|
+
return "nullable" === candidate[Kind];
|
|
35
|
+
}
|
|
36
|
+
export { Schema, isNullableSchema };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { weighted } from "../../Distribution/index.js";
|
|
2
|
+
import { toStreamFromTrace } from "../../Random/index.js";
|
|
3
|
+
import { Children, Kind, Meta } from "../../Types.js";
|
|
4
|
+
import { never } from "../../Utility/Core.js";
|
|
5
|
+
import { Schema } from "./Schema.js";
|
|
6
|
+
function Fabricator(context, source) {
|
|
7
|
+
var _ref, _ref1, _ref2;
|
|
8
|
+
var _meta_weights, _meta_weights1, _meta_weights2;
|
|
9
|
+
const { schema, algorithm, trace } = context;
|
|
10
|
+
const meta = schema[Meta];
|
|
11
|
+
const rehydrated = Schema(schema);
|
|
12
|
+
if (meta.produce) {
|
|
13
|
+
const stream = toStreamFromTrace(algorithm, trace);
|
|
14
|
+
const produce = meta.produce;
|
|
15
|
+
return {
|
|
16
|
+
[Kind]: "nullish",
|
|
17
|
+
[Meta]: meta,
|
|
18
|
+
trace,
|
|
19
|
+
[Children]: source,
|
|
20
|
+
fabricate: ()=>produce({
|
|
21
|
+
random: stream,
|
|
22
|
+
clock: trace.clock
|
|
23
|
+
}),
|
|
24
|
+
schema: rehydrated
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const stream = toStreamFromTrace(algorithm, trace);
|
|
28
|
+
const pick = weighted([
|
|
29
|
+
[
|
|
30
|
+
null != (_ref = null == (_meta_weights = meta.weights) ? void 0 : _meta_weights.null) ? _ref : 1,
|
|
31
|
+
"null"
|
|
32
|
+
],
|
|
33
|
+
[
|
|
34
|
+
null != (_ref1 = null == (_meta_weights1 = meta.weights) ? void 0 : _meta_weights1.undefined) ? _ref1 : 1,
|
|
35
|
+
"undefined"
|
|
36
|
+
],
|
|
37
|
+
[
|
|
38
|
+
null != (_ref2 = null == (_meta_weights2 = meta.weights) ? void 0 : _meta_weights2.value) ? _ref2 : 1,
|
|
39
|
+
"value"
|
|
40
|
+
]
|
|
41
|
+
], stream, "T.nullish");
|
|
42
|
+
const fabricate = ()=>{
|
|
43
|
+
const picked = pick();
|
|
44
|
+
switch(picked){
|
|
45
|
+
case "value":
|
|
46
|
+
return source.fabricate();
|
|
47
|
+
case "null":
|
|
48
|
+
return null;
|
|
49
|
+
case "undefined":
|
|
50
|
+
return;
|
|
51
|
+
default:
|
|
52
|
+
return never(picked);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
return {
|
|
56
|
+
[Kind]: "nullish",
|
|
57
|
+
[Meta]: meta,
|
|
58
|
+
trace,
|
|
59
|
+
[Children]: source,
|
|
60
|
+
fabricate,
|
|
61
|
+
schema: rehydrated
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export { Fabricator };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { toSchema } from "../../Schema/Core.js";
|
|
2
|
+
import { Kind, Meta } from "../../Types.js";
|
|
3
|
+
import { Schema } from "./Schema.js";
|
|
4
|
+
function Registry(definition) {
|
|
5
|
+
const normalized = toSchema(definition);
|
|
6
|
+
return Schema({
|
|
7
|
+
[Kind]: "nullish",
|
|
8
|
+
[Meta]: {
|
|
9
|
+
definition: normalized
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
export default Registry;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { withAdaptations } from "../../Adapter/Core.js";
|
|
2
|
+
import { assertDrawableKeyedWeights } from "../../Distribution/index.js";
|
|
3
|
+
import { Kind, Meta } from "../../Types.js";
|
|
4
|
+
import { outcomes } from "./Outcomes.js";
|
|
5
|
+
function Schema(schema) {
|
|
6
|
+
return {
|
|
7
|
+
...schema,
|
|
8
|
+
[Kind]: "nullish",
|
|
9
|
+
as: (produce)=>Schema({
|
|
10
|
+
...schema,
|
|
11
|
+
[Meta]: {
|
|
12
|
+
...schema[Meta],
|
|
13
|
+
produce
|
|
14
|
+
}
|
|
15
|
+
}),
|
|
16
|
+
weighted: (weights)=>{
|
|
17
|
+
const merged = {
|
|
18
|
+
...schema[Meta].weights,
|
|
19
|
+
...weights
|
|
20
|
+
};
|
|
21
|
+
assertDrawableKeyedWeights("T.nullish.weighted", outcomes, merged);
|
|
22
|
+
return Schema({
|
|
23
|
+
...schema,
|
|
24
|
+
[Meta]: {
|
|
25
|
+
...schema[Meta],
|
|
26
|
+
weights: merged
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
},
|
|
30
|
+
adapt: (adapter, produce)=>Schema(withAdaptations(schema, adapter, produce))
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function isNullishSchema(candidate) {
|
|
34
|
+
return "nullish" === candidate[Kind];
|
|
35
|
+
}
|
|
36
|
+
export { Schema, isNullishSchema };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { constrainContinuous, effectiveDiscrete } from "../../Bound.js";
|
|
2
|
+
import { Distribution, sampler } from "../../Distribution/index.js";
|
|
3
|
+
import { toStreamFromTrace } from "../../Random/index.js";
|
|
4
|
+
import { Kind, Meta } from "../../Types.js";
|
|
5
|
+
import { unboundedContinuous, unboundedDiscrete } from "./defaults.js";
|
|
6
|
+
import { Schema } from "./Schema.js";
|
|
7
|
+
function Fabricator(context) {
|
|
8
|
+
var _ref, _ref1, _range_distribution;
|
|
9
|
+
var _meta_whereby, _meta_whereby1, _meta_whereby2;
|
|
10
|
+
const { schema, algorithm, trace } = context;
|
|
11
|
+
const meta = schema[Meta];
|
|
12
|
+
const rehydrated = Schema({
|
|
13
|
+
...schema,
|
|
14
|
+
[Meta]: meta
|
|
15
|
+
});
|
|
16
|
+
if (meta.produce) {
|
|
17
|
+
const stream = toStreamFromTrace(algorithm, trace);
|
|
18
|
+
const produce = meta.produce;
|
|
19
|
+
return {
|
|
20
|
+
[Kind]: "number",
|
|
21
|
+
[Meta]: meta,
|
|
22
|
+
trace,
|
|
23
|
+
fabricate: ()=>produce({
|
|
24
|
+
random: stream,
|
|
25
|
+
clock: trace.clock
|
|
26
|
+
}),
|
|
27
|
+
schema: rehydrated
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
if (meta.sequence) {
|
|
31
|
+
let next = 1;
|
|
32
|
+
return {
|
|
33
|
+
[Kind]: "number",
|
|
34
|
+
[Meta]: meta,
|
|
35
|
+
trace,
|
|
36
|
+
fabricate: ()=>next++,
|
|
37
|
+
schema: rehydrated
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
const stream = toStreamFromTrace(algorithm, trace);
|
|
41
|
+
const defaults = meta.integer ? unboundedDiscrete : unboundedContinuous;
|
|
42
|
+
const range = {
|
|
43
|
+
min: null != (_ref = null == (_meta_whereby = meta.whereby) ? void 0 : _meta_whereby.min) ? _ref : defaults.min,
|
|
44
|
+
max: null != (_ref1 = null == (_meta_whereby1 = meta.whereby) ? void 0 : _meta_whereby1.max) ? _ref1 : defaults.max,
|
|
45
|
+
distribution: null == (_meta_whereby2 = meta.whereby) ? void 0 : _meta_whereby2.distribution
|
|
46
|
+
};
|
|
47
|
+
const distribution = null != (_range_distribution = range.distribution) ? _range_distribution : Distribution.uniform();
|
|
48
|
+
if (meta.integer) {
|
|
49
|
+
const { min, max } = effectiveDiscrete(range.min, range.max);
|
|
50
|
+
const draw = sampler(distribution, {
|
|
51
|
+
min,
|
|
52
|
+
max: max + 1
|
|
53
|
+
}, stream);
|
|
54
|
+
return {
|
|
55
|
+
[Kind]: "number",
|
|
56
|
+
[Meta]: meta,
|
|
57
|
+
trace,
|
|
58
|
+
fabricate: ()=>Math.min(max, Math.floor(draw())),
|
|
59
|
+
schema: rehydrated
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
[Kind]: "number",
|
|
64
|
+
[Meta]: meta,
|
|
65
|
+
trace,
|
|
66
|
+
fabricate: constrainContinuous(sampler(distribution, {
|
|
67
|
+
min: range.min.value,
|
|
68
|
+
max: range.max.value
|
|
69
|
+
}, stream), range.min, range.max),
|
|
70
|
+
schema: rehydrated
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export { Fabricator };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { assertNonemptyContinuous, assertNonemptyDiscrete, toBound } from "../../Bound.js";
|
|
2
|
+
import { Adaptation, Kind, Meta, Produces } from "../../Types.js";
|
|
3
|
+
import bigint from "../bigint/index.js";
|
|
4
|
+
import { unboundedContinuous, unboundedDiscrete } from "./defaults.js";
|
|
5
|
+
import { Schema } from "./Schema.js";
|
|
6
|
+
function toWhereby(input, integer) {
|
|
7
|
+
const min = void 0 === input.min ? void 0 : toBound(input.min);
|
|
8
|
+
const max = void 0 === input.max ? void 0 : toBound(input.max);
|
|
9
|
+
const defaults = integer ? unboundedDiscrete : unboundedContinuous;
|
|
10
|
+
const label = integer ? "T.number.integer.whereby" : "T.number.whereby";
|
|
11
|
+
if (integer) assertNonemptyDiscrete(label, null != min ? min : defaults.min, null != max ? max : defaults.max);
|
|
12
|
+
else assertNonemptyContinuous(label, null != min ? min : defaults.min, null != max ? max : defaults.max);
|
|
13
|
+
return void 0 === input.distribution ? {
|
|
14
|
+
min,
|
|
15
|
+
max
|
|
16
|
+
} : {
|
|
17
|
+
min,
|
|
18
|
+
max,
|
|
19
|
+
distribution: input.distribution
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const Registry = {
|
|
23
|
+
...Schema({
|
|
24
|
+
[Kind]: "number",
|
|
25
|
+
[Meta]: {},
|
|
26
|
+
[Produces]: void 0,
|
|
27
|
+
[Adaptation]: void 0
|
|
28
|
+
}),
|
|
29
|
+
whereby: (whereby)=>Schema({
|
|
30
|
+
[Kind]: "number",
|
|
31
|
+
[Meta]: {
|
|
32
|
+
whereby: toWhereby(whereby, false)
|
|
33
|
+
}
|
|
34
|
+
}),
|
|
35
|
+
integer: {
|
|
36
|
+
...Schema({
|
|
37
|
+
[Kind]: "number",
|
|
38
|
+
[Meta]: {
|
|
39
|
+
integer: true
|
|
40
|
+
}
|
|
41
|
+
}),
|
|
42
|
+
whereby: (whereby)=>Schema({
|
|
43
|
+
[Kind]: "number",
|
|
44
|
+
[Meta]: {
|
|
45
|
+
integer: true,
|
|
46
|
+
whereby: toWhereby(whereby, true)
|
|
47
|
+
}
|
|
48
|
+
}),
|
|
49
|
+
sequence: Schema({
|
|
50
|
+
[Kind]: "number",
|
|
51
|
+
[Meta]: {
|
|
52
|
+
sequence: true,
|
|
53
|
+
integer: true
|
|
54
|
+
}
|
|
55
|
+
}),
|
|
56
|
+
big: bigint
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
export default Registry;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { withAdaptations } from "../../Adapter/Core.js";
|
|
2
|
+
import { Kind, Meta } from "../../Types.js";
|
|
3
|
+
function Schema(schema) {
|
|
4
|
+
return {
|
|
5
|
+
...schema,
|
|
6
|
+
[Kind]: "number",
|
|
7
|
+
as: (produce, hints)=>Schema({
|
|
8
|
+
...schema,
|
|
9
|
+
[Meta]: {
|
|
10
|
+
...schema[Meta],
|
|
11
|
+
produce,
|
|
12
|
+
hints
|
|
13
|
+
}
|
|
14
|
+
}),
|
|
15
|
+
adapt: (adapter, produce)=>Schema(withAdaptations(schema, adapter, produce))
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export { Schema };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const unboundedContinuous = {
|
|
2
|
+
min: {
|
|
3
|
+
value: -Number.MAX_VALUE,
|
|
4
|
+
exclusive: false
|
|
5
|
+
},
|
|
6
|
+
max: {
|
|
7
|
+
value: Number.MAX_VALUE,
|
|
8
|
+
exclusive: false
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
const unboundedDiscrete = {
|
|
12
|
+
min: {
|
|
13
|
+
value: -Number.MAX_SAFE_INTEGER,
|
|
14
|
+
exclusive: false
|
|
15
|
+
},
|
|
16
|
+
max: {
|
|
17
|
+
value: Number.MAX_SAFE_INTEGER,
|
|
18
|
+
exclusive: false
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
export { unboundedContinuous, unboundedDiscrete };
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { FabricatorError } from "../../Error/index.js";
|
|
2
|
+
import { toStreamFromTrace } from "../../Random/index.js";
|
|
3
|
+
import { Children, Kind, Meta, Omitted } from "../../Types.js";
|
|
4
|
+
import { isPollutionKey } from "../../Utility/Core.js";
|
|
5
|
+
import { isObjectComputeFabricator } from "./compute/Fabricator.js";
|
|
6
|
+
import { isObjectOmittableFabricator } from "./omittable/Fabricator.js";
|
|
7
|
+
import { isObjectOptionalFabricator } from "./optional/Fabricator.js";
|
|
8
|
+
function isObjectFabricator(candidate) {
|
|
9
|
+
return "object" === candidate[Kind];
|
|
10
|
+
}
|
|
11
|
+
function Fabricator(context, fields) {
|
|
12
|
+
const { schema, algorithm, trace } = context;
|
|
13
|
+
const meta = schema[Meta];
|
|
14
|
+
if (meta.produce) {
|
|
15
|
+
const stream = toStreamFromTrace(algorithm, trace);
|
|
16
|
+
const produce = meta.produce;
|
|
17
|
+
const fabricate = (overrides, config)=>{
|
|
18
|
+
const produced = produce({
|
|
19
|
+
random: stream,
|
|
20
|
+
clock: trace.clock
|
|
21
|
+
});
|
|
22
|
+
if (!overrides) return produced;
|
|
23
|
+
if ((null == config ? void 0 : config.validate) !== false) schema.override(overrides);
|
|
24
|
+
const result = {
|
|
25
|
+
...produced,
|
|
26
|
+
...overrides
|
|
27
|
+
};
|
|
28
|
+
for (const [k, v] of Object.entries(overrides))if (v === Omitted) delete result[k];
|
|
29
|
+
return result;
|
|
30
|
+
};
|
|
31
|
+
return {
|
|
32
|
+
[Kind]: "object",
|
|
33
|
+
[Meta]: meta,
|
|
34
|
+
trace,
|
|
35
|
+
[Children]: fields,
|
|
36
|
+
fabricate,
|
|
37
|
+
schema
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
const fabricate = (overrides, config)=>{
|
|
41
|
+
if (overrides && (null == config ? void 0 : config.validate) !== false) schema.override(overrides);
|
|
42
|
+
const fabricated = {};
|
|
43
|
+
const deferred = [];
|
|
44
|
+
for (const [k, v] of Object.entries(fields)){
|
|
45
|
+
if (isPollutionKey(k)) throw new FabricatorError.PrototypePollutionError(k);
|
|
46
|
+
if (overrides && k in overrides) {
|
|
47
|
+
const value = overrides[k];
|
|
48
|
+
if (value === Omitted) continue;
|
|
49
|
+
fabricated[k] = isObjectFabricator(v) ? v.fabricate(value, {
|
|
50
|
+
validate: false
|
|
51
|
+
}) : value;
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (isObjectOmittableFabricator(v) || isObjectOptionalFabricator(v)) {
|
|
55
|
+
const value = v.fabricate();
|
|
56
|
+
if (value !== Omitted) fabricated[k] = value;
|
|
57
|
+
} else if (isObjectComputeFabricator(v)) deferred.push([
|
|
58
|
+
k,
|
|
59
|
+
v
|
|
60
|
+
]);
|
|
61
|
+
else fabricated[k] = v.fabricate();
|
|
62
|
+
}
|
|
63
|
+
for (const [k, v] of deferred)fabricated[k] = v.fabricate({
|
|
64
|
+
fabricated
|
|
65
|
+
});
|
|
66
|
+
return fabricated;
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
[Kind]: "object",
|
|
70
|
+
[Meta]: schema[Meta],
|
|
71
|
+
trace,
|
|
72
|
+
[Children]: fields,
|
|
73
|
+
fabricate,
|
|
74
|
+
schema
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export { Fabricator, isObjectFabricator };
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { mergeAdaptations } from "../../Adapter/Core.js";
|
|
2
|
+
import { FabricatorError } from "../../Error/index.js";
|
|
3
|
+
import { toSchema, violatesKind } from "../../Schema/Core.js";
|
|
4
|
+
import { Adaptation, Fixed, Kind, Meta, Omitted } from "../../Types.js";
|
|
5
|
+
import { isPlainObject } from "../../Utility/Core.js";
|
|
6
|
+
import { shallowMerge } from "../../Utility/ShallowMerge.js";
|
|
7
|
+
import { isNullableSchema } from "../nullable/Schema.js";
|
|
8
|
+
import { isNullishSchema } from "../nullish/Schema.js";
|
|
9
|
+
import { isUndefinableSchema } from "../undefinable/Schema.js";
|
|
10
|
+
import compute_0, { isObjectComputeSchema } from "./compute/index.js";
|
|
11
|
+
import { isObjectOmittableSchema } from "./omittable/Schema.js";
|
|
12
|
+
import { isObjectOptionalSchema } from "./optional/Schema.js";
|
|
13
|
+
import { Schema, isObjectSchema } from "./Schema.js";
|
|
14
|
+
function normalizeDefinition(definition) {
|
|
15
|
+
return Object.fromEntries(Object.entries(definition).map(([k, v])=>[
|
|
16
|
+
k,
|
|
17
|
+
toSchema(v)
|
|
18
|
+
]));
|
|
19
|
+
}
|
|
20
|
+
function make(definition, refinements, adaptations) {
|
|
21
|
+
const schema = Schema({
|
|
22
|
+
[Kind]: "object",
|
|
23
|
+
[Meta]: {
|
|
24
|
+
definition,
|
|
25
|
+
refinements
|
|
26
|
+
},
|
|
27
|
+
...adaptations ? {
|
|
28
|
+
[Adaptation]: adaptations
|
|
29
|
+
} : void 0,
|
|
30
|
+
extend: (extender)=>{
|
|
31
|
+
const extension = normalizeDefinition(extender({
|
|
32
|
+
base: definition
|
|
33
|
+
}));
|
|
34
|
+
const merged = shallowMerge(definition, extension);
|
|
35
|
+
return make(merged, refinements, adaptations);
|
|
36
|
+
},
|
|
37
|
+
refine: (refiner)=>{
|
|
38
|
+
const compute = compute_0();
|
|
39
|
+
const refinement = normalizeDefinition(refiner({
|
|
40
|
+
base: schema,
|
|
41
|
+
compute
|
|
42
|
+
}));
|
|
43
|
+
return make(shallowMerge(definition, refinement), [
|
|
44
|
+
...refinements,
|
|
45
|
+
refinement
|
|
46
|
+
], adaptations);
|
|
47
|
+
},
|
|
48
|
+
adapt: (adapter, produce)=>make(definition, refinements, mergeAdaptations(adaptations, adapter, produce)),
|
|
49
|
+
override: (override)=>{
|
|
50
|
+
const overridden = {
|
|
51
|
+
...definition
|
|
52
|
+
};
|
|
53
|
+
for (const key of Object.keys(override)){
|
|
54
|
+
const fieldSchema = definition[key];
|
|
55
|
+
if (!fieldSchema) throw new FabricatorError.UnknownOverrideFieldError(key, Object.keys(definition));
|
|
56
|
+
const value = override[key];
|
|
57
|
+
if (isObjectSchema(fieldSchema)) {
|
|
58
|
+
if (!isPlainObject(value)) throw new FabricatorError.InvalidOverrideValueError(key, "object", value);
|
|
59
|
+
overridden[key] = toSchema(rehydrate(fieldSchema).override(value));
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (isObjectOmittableSchema(fieldSchema)) {
|
|
63
|
+
if (value === Omitted) {
|
|
64
|
+
overridden[key] = {
|
|
65
|
+
...toSchema(fieldSchema),
|
|
66
|
+
[Fixed]: Omitted
|
|
67
|
+
};
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const innerKind = fieldSchema[Meta].definition[Kind];
|
|
71
|
+
if (violatesKind(innerKind, value)) throw new FabricatorError.InvalidOverrideValueError(key, innerKind, value);
|
|
72
|
+
overridden[key] = {
|
|
73
|
+
...toSchema(fieldSchema),
|
|
74
|
+
[Fixed]: value
|
|
75
|
+
};
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (isObjectOptionalSchema(fieldSchema)) {
|
|
79
|
+
if (value === Omitted || void 0 === value) {
|
|
80
|
+
overridden[key] = {
|
|
81
|
+
...toSchema(fieldSchema),
|
|
82
|
+
[Fixed]: value
|
|
83
|
+
};
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const innerKind = fieldSchema[Meta].definition[Kind];
|
|
87
|
+
if (violatesKind(innerKind, value)) throw new FabricatorError.InvalidOverrideValueError(key, innerKind, value);
|
|
88
|
+
overridden[key] = {
|
|
89
|
+
...toSchema(fieldSchema),
|
|
90
|
+
[Fixed]: value
|
|
91
|
+
};
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (isUndefinableSchema(fieldSchema)) {
|
|
95
|
+
if (void 0 !== value) {
|
|
96
|
+
const innerKind = fieldSchema[Meta].definition[Kind];
|
|
97
|
+
if (violatesKind(innerKind, value)) throw new FabricatorError.InvalidOverrideValueError(key, innerKind, value);
|
|
98
|
+
}
|
|
99
|
+
overridden[key] = {
|
|
100
|
+
...toSchema(fieldSchema),
|
|
101
|
+
[Fixed]: value
|
|
102
|
+
};
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (isNullableSchema(fieldSchema)) {
|
|
106
|
+
if (null !== value) {
|
|
107
|
+
const innerKind = fieldSchema[Meta].definition[Kind];
|
|
108
|
+
if (violatesKind(innerKind, value)) throw new FabricatorError.InvalidOverrideValueError(key, innerKind, value);
|
|
109
|
+
}
|
|
110
|
+
overridden[key] = {
|
|
111
|
+
...toSchema(fieldSchema),
|
|
112
|
+
[Fixed]: value
|
|
113
|
+
};
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
if (isNullishSchema(fieldSchema)) {
|
|
117
|
+
if (null != value) {
|
|
118
|
+
const innerKind = fieldSchema[Meta].definition[Kind];
|
|
119
|
+
if (violatesKind(innerKind, value)) throw new FabricatorError.InvalidOverrideValueError(key, innerKind, value);
|
|
120
|
+
}
|
|
121
|
+
overridden[key] = {
|
|
122
|
+
...toSchema(fieldSchema),
|
|
123
|
+
[Fixed]: value
|
|
124
|
+
};
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (value === Omitted) throw new FabricatorError.IllegalOmittedOverrideError(key, fieldSchema[Kind]);
|
|
128
|
+
const kind = isObjectComputeSchema(fieldSchema) ? fieldSchema[Meta].source[Kind] : fieldSchema[Kind];
|
|
129
|
+
if (violatesKind(kind, value)) throw new FabricatorError.InvalidOverrideValueError(key, kind, value);
|
|
130
|
+
overridden[key] = {
|
|
131
|
+
...toSchema(fieldSchema),
|
|
132
|
+
[Fixed]: value
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return make(overridden, refinements, adaptations);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
return schema;
|
|
139
|
+
}
|
|
140
|
+
function rehydrate(schema) {
|
|
141
|
+
const rehydrated = make(schema[Meta].definition, schema[Meta].refinements, schema[Adaptation]);
|
|
142
|
+
return schema[Meta].produce ? rehydrated.as(schema[Meta].produce) : rehydrated;
|
|
143
|
+
}
|
|
144
|
+
const Registry = (definition)=>make(normalizeDefinition(definition), []);
|
|
145
|
+
export default Registry;
|
|
146
|
+
export { rehydrate };
|