@duplojs/lang 0.0.1-beta.8 → 0.1.0-beta.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/dist/array/concat.d.ts +2 -2
- package/dist/array/flat.d.ts +1 -1
- package/dist/array/flatMap.d.ts +2 -2
- package/dist/array/from.d.ts +1 -1
- package/dist/array/length.d.ts +3 -2
- package/dist/array/push.d.ts +4 -2
- package/dist/chrono/operators/addTime.d.ts +2 -4
- package/dist/common/constraint/cast/index.d.ts +5 -5
- package/dist/common/constraint/cast/string.d.ts +4 -0
- package/dist/common/constraint/infer/index.d.ts +2 -1
- package/dist/common/constraint/infer/string.d.ts +1 -0
- package/dist/common/constraint/types/index.d.ts +1 -0
- package/dist/common/constraint/types/maybe.d.ts +2 -0
- package/dist/common/formData.d.ts +2 -1
- package/dist/common/memo.cjs +3 -2
- package/dist/common/memo.mjs +3 -2
- package/dist/common/memoPromise.cjs +3 -2
- package/dist/common/memoPromise.mjs +3 -2
- package/dist/common/timeout.cjs +2 -2
- package/dist/common/timeout.d.ts +1 -1
- package/dist/common/timeout.mjs +2 -2
- package/dist/common/types/applyPromiseIf.d.ts +1 -0
- package/dist/common/types/index.d.ts +2 -0
- package/dist/common/types/isObject.d.ts +8 -0
- package/dist/common/types/json.d.ts +12 -1
- package/dist/dataStructure/common/codec/base.cjs +2 -2
- package/dist/dataStructure/common/codec/base.mjs +2 -2
- package/dist/dataStructure/common/codec/defaults/string.cjs +1 -1
- package/dist/dataStructure/common/codec/defaults/string.d.ts +1 -1
- package/dist/dataStructure/common/codec/defaults/string.mjs +1 -1
- package/dist/dataStructure/common/{error.cjs → error/base.cjs} +22 -5
- package/dist/dataStructure/common/{error.d.ts → error/base.d.ts} +18 -9
- package/dist/dataStructure/common/{error.mjs → error/base.mjs} +21 -6
- package/dist/dataStructure/common/error/defaultInterpreter.cjs +87 -0
- package/dist/dataStructure/common/error/defaultInterpreter.d.ts +60 -0
- package/dist/dataStructure/common/error/defaultInterpreter.mjs +86 -0
- package/dist/dataStructure/common/error/index.d.ts +3 -0
- package/dist/dataStructure/common/error/interpreter.cjs +44 -0
- package/dist/dataStructure/common/error/interpreter.d.ts +32 -0
- package/dist/dataStructure/common/error/interpreter.mjs +44 -0
- package/dist/dataStructure/common/index.d.ts +0 -1
- package/dist/dataStructure/constraint/defaults/allowedCharacters.d.ts +1 -3
- package/dist/dataStructure/constraint/types/constraints.d.ts +1 -0
- package/dist/dataStructure/fundamentalType/types/fundamentalTypes.d.ts +1 -0
- package/dist/dataStructure/helpers/extend.cjs +1 -1
- package/dist/dataStructure/helpers/extend.d.ts +1 -1
- package/dist/dataStructure/helpers/extend.mjs +1 -1
- package/dist/dataStructure/helpers/index.d.ts +6 -2
- package/dist/dataStructure/helpers/isNullable.cjs +12 -0
- package/dist/dataStructure/helpers/isNullable.d.ts +2 -0
- package/dist/dataStructure/helpers/isNullable.mjs +12 -0
- package/dist/dataStructure/helpers/isOptional.cjs +12 -0
- package/dist/dataStructure/helpers/isOptional.d.ts +2 -0
- package/dist/dataStructure/helpers/isOptional.mjs +12 -0
- package/dist/dataStructure/helpers/partial.cjs +1 -1
- package/dist/dataStructure/helpers/partial.mjs +1 -1
- package/dist/dataStructure/helpers/required.cjs +1 -1
- package/dist/dataStructure/helpers/required.mjs +1 -1
- package/dist/dataStructure/helpers/typeStructureIdentifier.cjs +14 -0
- package/dist/dataStructure/helpers/typeStructureIdentifier.d.ts +6 -0
- package/dist/dataStructure/helpers/typeStructureIdentifier.mjs +14 -0
- package/dist/dataStructure/helpers/unwrapLazy.cjs +9 -0
- package/dist/dataStructure/helpers/unwrapLazy.d.ts +2 -0
- package/dist/dataStructure/helpers/unwrapLazy.mjs +9 -0
- package/dist/dataStructure/index.cjs +56 -35
- package/dist/dataStructure/index.mjs +18 -5
- package/dist/dataStructure/structure/base.cjs +31 -19
- package/dist/dataStructure/structure/base.d.ts +16 -16
- package/dist/dataStructure/structure/base.mjs +25 -13
- package/dist/dataStructure/structure/defaults/array.cjs +10 -0
- package/dist/dataStructure/structure/defaults/array.d.ts +1 -1
- package/dist/dataStructure/structure/defaults/array.mjs +10 -0
- package/dist/dataStructure/structure/defaults/lazy.cjs +1 -0
- package/dist/dataStructure/structure/defaults/lazy.d.ts +1 -1
- package/dist/dataStructure/structure/defaults/lazy.mjs +1 -0
- package/dist/dataStructure/structure/defaults/nonEncodableString.cjs +1 -0
- package/dist/dataStructure/structure/defaults/nonEncodableString.mjs +1 -0
- package/dist/dataStructure/structure/defaults/object.cjs +18 -7
- package/dist/dataStructure/structure/defaults/object.d.ts +3 -2
- package/dist/dataStructure/structure/defaults/object.mjs +18 -7
- package/dist/dataStructure/structure/defaults/record.cjs +20 -7
- package/dist/dataStructure/structure/defaults/record.d.ts +1 -1
- package/dist/dataStructure/structure/defaults/record.mjs +20 -7
- package/dist/dataStructure/structure/defaults/type.cjs +1 -0
- package/dist/dataStructure/structure/defaults/type.d.ts +1 -1
- package/dist/dataStructure/structure/defaults/type.mjs +1 -0
- package/dist/dataStructure/structure/defaults/union.cjs +26 -6
- package/dist/dataStructure/structure/defaults/union.d.ts +1 -1
- package/dist/dataStructure/structure/defaults/union.mjs +21 -1
- package/dist/dataStructure/structure/types/value.d.ts +2 -0
- package/dist/dataStructure/type/types/types.d.ts +1 -0
- package/dist/either/index.cjs +29 -7
- package/dist/either/index.d.ts +4 -0
- package/dist/either/index.mjs +22 -8
- package/dist/either/left/create.d.ts +2 -1
- package/dist/either/left/index.d.ts +3 -2
- package/dist/either/left/none.cjs +15 -0
- package/dist/either/left/none.d.ts +7 -0
- package/dist/either/left/none.mjs +14 -0
- package/dist/either/matchInformationOtherwise.d.ts +1 -1
- package/dist/either/rewriteInformation.cjs +22 -0
- package/dist/either/rewriteInformation.d.ts +14 -0
- package/dist/either/rewriteInformation.mjs +22 -0
- package/dist/either/right/asyncGroup.cjs +2 -2
- package/dist/either/right/asyncGroup.mjs +2 -2
- package/dist/either/right/create.d.ts +2 -1
- package/dist/either/right/group.cjs +1 -1
- package/dist/either/right/group.mjs +1 -1
- package/dist/either/right/index.d.ts +6 -5
- package/dist/either/right/some.cjs +15 -0
- package/dist/either/right/some.d.ts +7 -0
- package/dist/either/right/some.mjs +14 -0
- package/dist/either/toMaybe.cjs +12 -0
- package/dist/either/toMaybe.d.ts +5 -0
- package/dist/either/toMaybe.mjs +12 -0
- package/dist/either/types/index.d.ts +1 -0
- package/dist/either/types/mayBe.d.ts +3 -0
- package/dist/either/unwrapOr.cjs +14 -0
- package/dist/either/unwrapOr.d.ts +8 -0
- package/dist/either/unwrapOr.mjs +14 -0
- package/dist/either/unwrapOtherwise.cjs +14 -0
- package/dist/either/unwrapOtherwise.d.ts +8 -0
- package/dist/either/unwrapOtherwise.mjs +14 -0
- package/dist/generator/reduce.cjs +2 -1
- package/dist/generator/reduce.mjs +1 -1
- package/dist/invocation/evidence.d.ts +1 -1
- package/dist/invocation/flow/base.cjs +4 -4
- package/dist/invocation/flow/base.d.ts +1 -1
- package/dist/invocation/flow/base.mjs +4 -4
- package/dist/invocation/flow/controller/defaults/debounce.cjs +1 -1
- package/dist/invocation/flow/controller/defaults/debounce.mjs +1 -1
- package/dist/invocation/flow/controller/defaults/throttling.cjs +1 -1
- package/dist/invocation/flow/controller/defaults/throttling.mjs +1 -1
- package/dist/invocation/index.cjs +18 -8
- package/dist/invocation/index.d.ts +3 -1
- package/dist/invocation/index.mjs +12 -6
- package/dist/invocation/reader.cjs +30 -0
- package/dist/invocation/reader.d.ts +30 -0
- package/dist/invocation/reader.mjs +29 -0
- package/dist/invocation/resolver.cjs +31 -0
- package/dist/invocation/resolver.d.ts +14 -0
- package/dist/invocation/resolver.mjs +31 -0
- package/dist/invocation/signature.cjs +8 -0
- package/dist/invocation/signature.d.ts +7 -0
- package/dist/invocation/signature.mjs +8 -0
- package/dist/modeling/entity/base.cjs +22 -11
- package/dist/modeling/entity/base.d.ts +16 -8
- package/dist/modeling/entity/base.mjs +16 -5
- package/dist/modeling/entity/helper.d.ts +6 -8
- package/dist/modeling/entity/namespace.cjs +0 -2
- package/dist/modeling/entity/namespace.d.ts +0 -2
- package/dist/modeling/entity/namespace.mjs +0 -2
- package/dist/modeling/fact/base.cjs +36 -0
- package/dist/modeling/fact/base.d.ts +29 -0
- package/dist/modeling/fact/base.mjs +35 -0
- package/dist/modeling/fact/index.d.ts +1 -0
- package/dist/modeling/flag/base.cjs +2 -6
- package/dist/modeling/flag/base.d.ts +10 -11
- package/dist/modeling/flag/base.mjs +2 -6
- package/dist/modeling/index.cjs +17 -12
- package/dist/modeling/index.d.ts +1 -0
- package/dist/modeling/index.mjs +5 -2
- package/dist/modeling/newType/base.cjs +12 -11
- package/dist/modeling/newType/base.d.ts +8 -8
- package/dist/modeling/newType/base.mjs +6 -5
- package/dist/modeling/taggedObject/base.cjs +22 -11
- package/dist/modeling/taggedObject/base.d.ts +12 -7
- package/dist/modeling/taggedObject/base.mjs +16 -5
- package/dist/object/assign.d.ts +3 -3
- package/dist/object/deepOverride.cjs +33 -0
- package/dist/object/deepOverride.d.ts +20 -0
- package/dist/object/deepOverride.mjs +33 -0
- package/dist/object/entries.d.ts +3 -3
- package/dist/object/index.cjs +4 -1
- package/dist/object/index.d.ts +1 -0
- package/dist/object/index.mjs +4 -2
- package/dist/object/isSimple.cjs +1 -1
- package/dist/object/isSimple.mjs +1 -1
- package/dist/object/keys.d.ts +1 -1
- package/dist/object/override.cjs +1 -1
- package/dist/object/override.d.ts +5 -2
- package/dist/object/override.mjs +1 -1
- package/dist/object/types/assign.d.ts +2 -0
- package/dist/object/types/forbiddenKey.d.ts +1 -1
- package/dist/object/types/forbiddenUndefinedProps.d.ts +3 -0
- package/dist/object/types/hasKeySignature.d.ts +1 -0
- package/dist/object/types/index.d.ts +6 -2
- package/dist/object/types/keyofWithoutSignature.d.ts +3 -0
- package/dist/object/types/override.d.ts +4 -0
- package/dist/object/types/split.d.ts +2 -2
- package/dist/object/values.d.ts +1 -1
- package/dist/path/create.cjs +11 -0
- package/dist/path/create.d.ts +3 -0
- package/dist/path/create.mjs +11 -0
- package/dist/path/createAbsolute.cjs +12 -0
- package/dist/path/createAbsolute.d.ts +3 -0
- package/dist/path/createAbsolute.mjs +12 -0
- package/dist/path/createAbsoluteOrThrow.cjs +22 -0
- package/dist/path/createAbsoluteOrThrow.d.ts +9 -0
- package/dist/path/createAbsoluteOrThrow.mjs +21 -0
- package/dist/path/createOrThrow.cjs +22 -0
- package/dist/path/createOrThrow.d.ts +9 -0
- package/dist/path/createOrThrow.mjs +21 -0
- package/dist/path/createSegment.cjs +12 -0
- package/dist/path/createSegment.d.ts +3 -0
- package/dist/path/createSegment.mjs +12 -0
- package/dist/path/createSegmentOrThrow.cjs +22 -0
- package/dist/path/createSegmentOrThrow.d.ts +9 -0
- package/dist/path/createSegmentOrThrow.mjs +21 -0
- package/dist/path/declareAbsolutePath.cjs +6 -0
- package/dist/path/declareAbsolutePath.d.ts +3 -0
- package/dist/path/declareAbsolutePath.mjs +6 -0
- package/dist/path/declarePath.cjs +6 -0
- package/dist/path/declarePath.d.ts +3 -0
- package/dist/path/declarePath.mjs +6 -0
- package/dist/path/declareSegment.cjs +6 -0
- package/dist/path/declareSegment.d.ts +3 -0
- package/dist/path/declareSegment.mjs +6 -0
- package/dist/path/index.cjs +39 -3
- package/dist/path/index.d.ts +10 -0
- package/dist/path/index.mjs +27 -4
- package/dist/path/kind.cjs +4 -0
- package/dist/path/kind.d.ts +2 -0
- package/dist/path/kind.mjs +5 -0
- package/dist/pattern/index.cjs +6 -0
- package/dist/pattern/index.d.ts +2 -0
- package/dist/pattern/index.mjs +5 -1
- package/dist/pattern/match/builder.cjs +1 -1
- package/dist/pattern/match/builder.mjs +1 -1
- package/dist/pattern/matchWithEntityOtherwise.d.ts +2 -2
- package/dist/pattern/matchWithFact.cjs +12 -0
- package/dist/pattern/matchWithFact.d.ts +12 -0
- package/dist/pattern/matchWithFact.mjs +12 -0
- package/dist/pattern/matchWithFactOtherwise.cjs +13 -0
- package/dist/pattern/matchWithFactOtherwise.d.ts +14 -0
- package/dist/pattern/matchWithFactOtherwise.mjs +13 -0
- package/dist/pattern/matchWithNumber.d.ts +4 -4
- package/dist/pattern/matchWithNumberOtherwise.d.ts +4 -4
- package/dist/pattern/matchWithString.d.ts +4 -4
- package/dist/pattern/matchWithStringOtherwise.d.ts +4 -4
- package/dist/pattern/matchWithTaggedObjectOtherwise.d.ts +2 -2
- package/dist/pattern/types/complexUnMatchedValue/getIncompleteUnion.d.ts +8 -8
- package/dist/string/capitalize.d.ts +1 -1
- package/dist/string/concat.d.ts +2 -2
- package/dist/string/constraints/allowedCharacters.d.ts +3 -3
- package/dist/string/isComposedOf.cjs +0 -1
- package/dist/string/isComposedOf.d.ts +5 -8
- package/dist/string/isComposedOf.mjs +0 -1
- package/dist/string/prepend.d.ts +2 -2
- package/dist/string/split.cjs +1 -0
- package/dist/string/split.d.ts +3 -3
- package/dist/string/split.mjs +1 -0
- package/dist/string/toLowerCase.d.ts +1 -1
- package/dist/string/toUpperCase.d.ts +1 -1
- package/dist/string/types/IsAllowedString.d.ts +5 -0
- package/dist/string/types/index.d.ts +1 -0
- package/dist/string/uncapitalize.d.ts +1 -1
- package/dist/tuple/types/map.d.ts +1 -1
- package/package.json +16 -30
- package/dist/dataStructure/common/errorInterpreter.cjs +0 -45
- package/dist/dataStructure/common/errorInterpreter.d.ts +0 -32
- package/dist/dataStructure/common/errorInterpreter.mjs +0 -45
- package/dist/invocation/useCase.cjs +0 -26
- package/dist/invocation/useCase.d.ts +0 -28
- package/dist/invocation/useCase.mjs +0 -25
- package/dist/object/types/assignObjects.d.ts +0 -2
- /package/{README.md → README} +0 -0
|
@@ -5,7 +5,7 @@ import { right } from "../../either/right/create.mjs";
|
|
|
5
5
|
import { simpleClone } from "../../common/simpleClone.mjs";
|
|
6
6
|
import { createKind } from "../kind.mjs";
|
|
7
7
|
import { ErrorSymbol, SuccessSymbol } from "../common/resultSymbol.mjs";
|
|
8
|
-
import { createGetErrorHandler } from "../common/error.mjs";
|
|
8
|
+
import { ErrorPromise, createGetErrorHandler } from "../common/error/base.mjs";
|
|
9
9
|
//#region scripts/dataStructure/structure/base.ts
|
|
10
10
|
var StructureClass = class StructureClass {
|
|
11
11
|
constructor() {}
|
|
@@ -23,7 +23,7 @@ var StructureClass = class StructureClass {
|
|
|
23
23
|
};
|
|
24
24
|
const structureKind = createKind("structure");
|
|
25
25
|
function createStructure(kindHandler, createConstructor) {
|
|
26
|
-
const init = (definition, { executeCheck, executeEncode, executeDecode, isAsynchronous }, ...rest) => {
|
|
26
|
+
const init = (definition, { executeCheck, executeEncode, executeDecode, executeParse, isAsynchronous }, ...rest) => {
|
|
27
27
|
let cachedIsAsynchronous = void 0;
|
|
28
28
|
const self = StructureClass.init({
|
|
29
29
|
...Object.fromEntries(Object.entries(rest[0] ?? {}).map(([key, prop]) => typeof prop === "function" ? [key, (...args) => prop(self, ...args)] : [key, prop])),
|
|
@@ -35,12 +35,14 @@ function createStructure(kindHandler, createConstructor) {
|
|
|
35
35
|
executeCheck,
|
|
36
36
|
executeEncode,
|
|
37
37
|
executeDecode,
|
|
38
|
+
executeParse,
|
|
38
39
|
isAsynchronous
|
|
39
40
|
}, ...rest),
|
|
40
41
|
executeConstraints: (data, errorHandler) => definition.constraints.reduce((accumulator, constraint) => callThen(accumulator, (result) => result === ErrorSymbol ? ErrorSymbol : callThen(constraint.executeCheck(data), (constraintResult) => constraintResult === ErrorSymbol ? errorHandler?.().addIssue(self, data, constraint) ?? ErrorSymbol : SuccessSymbol)), SuccessSymbol),
|
|
41
42
|
executeCheck: (data, errorHandler) => callThen(executeCheck(self, data, errorHandler), (result) => result === ErrorSymbol ? ErrorSymbol : self.executeConstraints(data, errorHandler)),
|
|
42
43
|
executeEncode: (codecContext, data, errorHandler) => executeEncode(self, codecContext, data, errorHandler),
|
|
43
44
|
executeDecode: (codecContext, data, errorHandler) => executeDecode(self, codecContext, data, errorHandler),
|
|
45
|
+
executeParse: (codecContext, data, errorHandler) => executeParse(self, codecContext, data, errorHandler),
|
|
44
46
|
isAsynchronous: () => {
|
|
45
47
|
if (cachedIsAsynchronous !== void 0) return cachedIsAsynchronous;
|
|
46
48
|
cachedIsAsynchronous = false;
|
|
@@ -52,7 +54,7 @@ function createStructure(kindHandler, createConstructor) {
|
|
|
52
54
|
check: (data) => {
|
|
53
55
|
const errorHandler = createGetErrorHandler();
|
|
54
56
|
const result = self.executeCheck(data, errorHandler);
|
|
55
|
-
if (result instanceof Promise) return left("async-error",
|
|
57
|
+
if (result instanceof Promise) return left("async-error", new ErrorPromise());
|
|
56
58
|
if (result === ErrorSymbol) return left("check-error", errorHandler().createError());
|
|
57
59
|
return right("check-success", data);
|
|
58
60
|
},
|
|
@@ -66,41 +68,51 @@ function createStructure(kindHandler, createConstructor) {
|
|
|
66
68
|
if (result instanceof Promise || result === ErrorSymbol) return false;
|
|
67
69
|
return true;
|
|
68
70
|
},
|
|
69
|
-
encode: (codecs, data) =>
|
|
70
|
-
asyncEncode: (codecs, data) => self.asyncUnsafeEncode(codecs, data),
|
|
71
|
-
unsafeEncode: (codecs, data) => {
|
|
71
|
+
encode: (codecs, data) => {
|
|
72
72
|
const errorHandler = createGetErrorHandler();
|
|
73
73
|
const result = self.executeEncode(codecs.context.value, data, errorHandler);
|
|
74
|
-
if (result instanceof Promise) return left("async-error",
|
|
74
|
+
if (result instanceof Promise) return left("async-error", new ErrorPromise());
|
|
75
75
|
if (result === ErrorSymbol) return left("encode-error", errorHandler().createError());
|
|
76
76
|
return right("encode-success", result);
|
|
77
77
|
},
|
|
78
|
-
|
|
78
|
+
asyncEncode: async (codecs, data) => {
|
|
79
79
|
const errorHandler = createGetErrorHandler();
|
|
80
80
|
const result = await self.executeEncode(codecs.context.value, data, errorHandler);
|
|
81
81
|
if (result === ErrorSymbol) return left("encode-error", errorHandler().createError());
|
|
82
82
|
return right("encode-success", result);
|
|
83
83
|
},
|
|
84
|
-
decode: (codecs, data) =>
|
|
85
|
-
asyncDecode: (codecs, data) => self.asyncUnsafeDecode(codecs, data),
|
|
86
|
-
unsafeDecode: (codecs, data) => {
|
|
84
|
+
decode: (codecs, data) => {
|
|
87
85
|
const errorHandler = createGetErrorHandler();
|
|
88
86
|
const result = self.executeDecode(codecs.context.value, data, errorHandler);
|
|
89
|
-
if (result instanceof Promise) return left("async-error",
|
|
87
|
+
if (result instanceof Promise) return left("async-error", new ErrorPromise());
|
|
90
88
|
if (result === ErrorSymbol) return left("decode-error", errorHandler().createError());
|
|
91
89
|
return right("decode-success", result);
|
|
92
90
|
},
|
|
93
|
-
|
|
91
|
+
asyncDecode: async (codecs, data) => {
|
|
94
92
|
const errorHandler = createGetErrorHandler();
|
|
95
93
|
const result = await self.executeDecode(codecs.context.value, data, errorHandler);
|
|
96
94
|
if (result === ErrorSymbol) return left("decode-error", errorHandler().createError());
|
|
97
95
|
return right("decode-success", result);
|
|
98
96
|
},
|
|
97
|
+
parse: (data, codecs) => {
|
|
98
|
+
const errorHandler = createGetErrorHandler();
|
|
99
|
+
const result = self.executeParse(codecs?.context.value ?? /* @__PURE__ */ new Map(), data, errorHandler);
|
|
100
|
+
if (result instanceof Promise) return left("async-error", new ErrorPromise());
|
|
101
|
+
if (result === ErrorSymbol) return left("parse-error", errorHandler().createError());
|
|
102
|
+
return right("parse-success", result);
|
|
103
|
+
},
|
|
104
|
+
asyncParse: async (data, codecs) => {
|
|
105
|
+
const errorHandler = createGetErrorHandler();
|
|
106
|
+
const result = await self.executeParse(codecs?.context.value ?? /* @__PURE__ */ new Map(), data, errorHandler);
|
|
107
|
+
if (result === ErrorSymbol) return left("parse-error", errorHandler().createError());
|
|
108
|
+
return right("parse-success", result);
|
|
109
|
+
},
|
|
99
110
|
contract: () => self,
|
|
100
111
|
clone: () => init(simpleClone(definition), {
|
|
101
112
|
executeCheck,
|
|
102
113
|
executeEncode,
|
|
103
114
|
executeDecode,
|
|
115
|
+
executeParse,
|
|
104
116
|
isAsynchronous
|
|
105
117
|
}, ...rest),
|
|
106
118
|
setMessage: (message) => {
|
|
@@ -37,6 +37,16 @@ const ArrayStructure = require_base.createStructure(arrayStructureKind, ({ init
|
|
|
37
37
|
})), []);
|
|
38
38
|
return require_callThen.callThen(decodedData, (awaitedDecodedData) => pathStage?.close() ?? (awaitedDecodedData === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : require_callThen.callThen(self.executeConstraints(awaitedDecodedData, errorHandler), (result) => result === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : awaitedDecodedData)));
|
|
39
39
|
},
|
|
40
|
+
executeParse: (self, codecContext, data, errorHandler) => {
|
|
41
|
+
if (!Array.isArray(data)) return errorHandler?.().addIssue(self, data) ?? require_resultSymbol.ErrorSymbol;
|
|
42
|
+
const pathStage = errorHandler?.().createPathStage();
|
|
43
|
+
const parsedData = data.reduce((accumulator, value, index) => require_callThen.callThen(accumulator, (awaitedAccumulator) => pathStage?.setCurrentPath(`[array: ${index}]`) ?? require_callThen.callThen(self.definition.element.executeParse(codecContext, value, errorHandler), (parsedData) => {
|
|
44
|
+
if (parsedData === require_resultSymbol.ErrorSymbol || awaitedAccumulator === require_resultSymbol.ErrorSymbol) return require_resultSymbol.ErrorSymbol;
|
|
45
|
+
awaitedAccumulator[index] = parsedData;
|
|
46
|
+
return awaitedAccumulator;
|
|
47
|
+
})), []);
|
|
48
|
+
return require_callThen.callThen(parsedData, (awaitedParsedData) => pathStage?.close() ?? (awaitedParsedData === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : require_callThen.callThen(self.executeConstraints(awaitedParsedData, errorHandler), (result) => result === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : awaitedParsedData)));
|
|
49
|
+
},
|
|
40
50
|
isAsynchronous: (self) => self.definition.element.isAsynchronous()
|
|
41
51
|
}));
|
|
42
52
|
//#endregion
|
|
@@ -13,6 +13,6 @@ export declare const arrayStructureKind: DKind.Handler<DKind.Definition<"@Duploj
|
|
|
13
13
|
export interface ArrayStructureDefinition<GenericConstraints extends readonly Constraint[] = readonly Constraint[]> extends StructureDefinition<GenericConstraints> {
|
|
14
14
|
readonly element: Structure;
|
|
15
15
|
}
|
|
16
|
-
export interface ArrayStructure<GenericValue extends readonly unknown[] = readonly unknown[], GenericConstraints extends readonly Constraint<GenericValue>[] = readonly Constraint<GenericValue>[]> extends DCommon.Forward<Structure<GenericValue, ArrayStructureDefinition<GenericConstraints>> & DKind.Kind<typeof arrayStructureKind>> {
|
|
16
|
+
export interface ArrayStructure<out GenericValue extends readonly unknown[] = readonly unknown[], out GenericConstraints extends readonly Constraint<GenericValue>[] = readonly Constraint<GenericValue>[]> extends DCommon.Forward<Structure<GenericValue, ArrayStructureDefinition<GenericConstraints>> & DKind.Kind<typeof arrayStructureKind>> {
|
|
17
17
|
}
|
|
18
18
|
export declare const ArrayStructure: <GenericElement extends Structure, const GenericConstraints extends readonly Constraint<readonly StructureValue<GenericElement>[]>[]>(element: GenericElement, constraints: GenericConstraints) => NoInfer<ArrayStructure<readonly StructureValue<GenericElement>[], readonly [...GenericConstraints]>>;
|
|
@@ -37,6 +37,16 @@ const ArrayStructure = createStructure(arrayStructureKind, ({ init }) => (elemen
|
|
|
37
37
|
})), []);
|
|
38
38
|
return callThen(decodedData, (awaitedDecodedData) => pathStage?.close() ?? (awaitedDecodedData === ErrorSymbol ? ErrorSymbol : callThen(self.executeConstraints(awaitedDecodedData, errorHandler), (result) => result === ErrorSymbol ? ErrorSymbol : awaitedDecodedData)));
|
|
39
39
|
},
|
|
40
|
+
executeParse: (self, codecContext, data, errorHandler) => {
|
|
41
|
+
if (!Array.isArray(data)) return errorHandler?.().addIssue(self, data) ?? ErrorSymbol;
|
|
42
|
+
const pathStage = errorHandler?.().createPathStage();
|
|
43
|
+
const parsedData = data.reduce((accumulator, value, index) => callThen(accumulator, (awaitedAccumulator) => pathStage?.setCurrentPath(`[array: ${index}]`) ?? callThen(self.definition.element.executeParse(codecContext, value, errorHandler), (parsedData) => {
|
|
44
|
+
if (parsedData === ErrorSymbol || awaitedAccumulator === ErrorSymbol) return ErrorSymbol;
|
|
45
|
+
awaitedAccumulator[index] = parsedData;
|
|
46
|
+
return awaitedAccumulator;
|
|
47
|
+
})), []);
|
|
48
|
+
return callThen(parsedData, (awaitedParsedData) => pathStage?.close() ?? (awaitedParsedData === ErrorSymbol ? ErrorSymbol : callThen(self.executeConstraints(awaitedParsedData, errorHandler), (result) => result === ErrorSymbol ? ErrorSymbol : awaitedParsedData)));
|
|
49
|
+
},
|
|
40
50
|
isAsynchronous: (self) => self.definition.element.isAsynchronous()
|
|
41
51
|
}));
|
|
42
52
|
//#endregion
|
|
@@ -17,6 +17,7 @@ const LazyStructure = require_base.createStructure(lazyStructureKind, ({ init })
|
|
|
17
17
|
executeCheck: (self, data, errorHandler) => self.definition.getter.value.executeCheck(data, errorHandler),
|
|
18
18
|
executeEncode: (self, codecContext, data, errorHandler) => require_callThen.callThen(self.definition.getter.value.executeEncode(codecContext, data, errorHandler), (encodedData) => encodedData === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : require_callThen.callThen(self.executeConstraints(data, errorHandler), (result) => result === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : encodedData)),
|
|
19
19
|
executeDecode: (self, codecContext, data, errorHandler) => require_callThen.callThen(self.definition.getter.value.executeDecode(codecContext, data, errorHandler), (decodedData) => decodedData === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : require_callThen.callThen(self.executeConstraints(decodedData, errorHandler), (result) => result === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : decodedData)),
|
|
20
|
+
executeParse: (self, codecContext, data, errorHandler) => require_callThen.callThen(self.definition.getter.value.executeParse(codecContext, data, errorHandler), (parsedData) => parsedData === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : require_callThen.callThen(self.executeConstraints(parsedData, errorHandler), (result) => result === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : parsedData)),
|
|
20
21
|
isAsynchronous: (self) => self.definition.getter.value.isAsynchronous()
|
|
21
22
|
}));
|
|
22
23
|
//#endregion
|
|
@@ -7,6 +7,6 @@ export declare const lazyStructureKind: DKind.Handler<DKind.Definition<"@Duplojs
|
|
|
7
7
|
export interface LazyStructureDefinition<GenericConstraints extends readonly Constraint[] = readonly Constraint[]> extends StructureDefinition<GenericConstraints> {
|
|
8
8
|
readonly getter: DCommon.Memoized<Structure>;
|
|
9
9
|
}
|
|
10
|
-
export interface LazyStructure<GenericValue extends unknown = unknown, GenericConstraints extends readonly Constraint<GenericValue>[] = readonly Constraint<GenericValue>[]> extends DCommon.Forward<Structure<GenericValue, LazyStructureDefinition<GenericConstraints>> & DKind.Kind<typeof lazyStructureKind>> {
|
|
10
|
+
export interface LazyStructure<out GenericValue extends unknown = unknown, out GenericConstraints extends readonly Constraint<GenericValue>[] = readonly Constraint<GenericValue>[]> extends DCommon.Forward<Structure<GenericValue, LazyStructureDefinition<GenericConstraints>> & DKind.Kind<typeof lazyStructureKind>> {
|
|
11
11
|
}
|
|
12
12
|
export declare const LazyStructure: <GenericStructure extends Structure, const GenericConstraints extends readonly Constraint<StructureValue<GenericStructure>>[]>(getStructure: () => GenericStructure, constraints: GenericConstraints) => NoInfer<LazyStructure<StructureValue<GenericStructure>, readonly [...GenericConstraints]>>;
|
|
@@ -17,6 +17,7 @@ const LazyStructure = createStructure(lazyStructureKind, ({ init }) => (getStruc
|
|
|
17
17
|
executeCheck: (self, data, errorHandler) => self.definition.getter.value.executeCheck(data, errorHandler),
|
|
18
18
|
executeEncode: (self, codecContext, data, errorHandler) => callThen(self.definition.getter.value.executeEncode(codecContext, data, errorHandler), (encodedData) => encodedData === ErrorSymbol ? ErrorSymbol : callThen(self.executeConstraints(data, errorHandler), (result) => result === ErrorSymbol ? ErrorSymbol : encodedData)),
|
|
19
19
|
executeDecode: (self, codecContext, data, errorHandler) => callThen(self.definition.getter.value.executeDecode(codecContext, data, errorHandler), (decodedData) => decodedData === ErrorSymbol ? ErrorSymbol : callThen(self.executeConstraints(decodedData, errorHandler), (result) => result === ErrorSymbol ? ErrorSymbol : decodedData)),
|
|
20
|
+
executeParse: (self, codecContext, data, errorHandler) => callThen(self.definition.getter.value.executeParse(codecContext, data, errorHandler), (parsedData) => parsedData === ErrorSymbol ? ErrorSymbol : callThen(self.executeConstraints(parsedData, errorHandler), (result) => result === ErrorSymbol ? ErrorSymbol : parsedData)),
|
|
20
21
|
isAsynchronous: (self) => self.definition.getter.value.isAsynchronous()
|
|
21
22
|
}));
|
|
22
23
|
//#endregion
|
|
@@ -10,6 +10,7 @@ const NonEncodableStringStructure = require_base.createStructure(nonEncodableStr
|
|
|
10
10
|
executeCheck: (self, data, errorHandler) => data === self.definition.value ? require_resultSymbol.SuccessSymbol : errorHandler?.().addIssue(self, data) ?? require_resultSymbol.ErrorSymbol,
|
|
11
11
|
executeEncode: (self, codecContext, data, errorHandler) => data === self.definition.value ? data : errorHandler?.().addIssue(self, data) ?? require_resultSymbol.ErrorSymbol,
|
|
12
12
|
executeDecode: (self, codecContext, data, errorHandler) => data === self.definition.value ? data : errorHandler?.().addIssue(self, data) ?? require_resultSymbol.ErrorSymbol,
|
|
13
|
+
executeParse: (self, codecContext, data, errorHandler) => self.executeDecode(codecContext, data, errorHandler),
|
|
13
14
|
isAsynchronous: () => false
|
|
14
15
|
}));
|
|
15
16
|
//#endregion
|
|
@@ -10,6 +10,7 @@ const NonEncodableStringStructure = createStructure(nonEncodableStringStructureK
|
|
|
10
10
|
executeCheck: (self, data, errorHandler) => data === self.definition.value ? SuccessSymbol : errorHandler?.().addIssue(self, data) ?? ErrorSymbol,
|
|
11
11
|
executeEncode: (self, codecContext, data, errorHandler) => data === self.definition.value ? data : errorHandler?.().addIssue(self, data) ?? ErrorSymbol,
|
|
12
12
|
executeDecode: (self, codecContext, data, errorHandler) => data === self.definition.value ? data : errorHandler?.().addIssue(self, data) ?? ErrorSymbol,
|
|
13
|
+
executeParse: (self, codecContext, data, errorHandler) => self.executeDecode(codecContext, data, errorHandler),
|
|
13
14
|
isAsynchronous: () => false
|
|
14
15
|
}));
|
|
15
16
|
//#endregion
|
|
@@ -7,10 +7,11 @@ const require_base = require("../base.cjs");
|
|
|
7
7
|
//#region scripts/dataStructure/structure/defaults/object.ts
|
|
8
8
|
const objectStructureKind = require_kind.createKind("object-structure");
|
|
9
9
|
const ObjectStructure = require_base.createStructure(objectStructureKind, ({ init }) => (shape, constraints) => init({
|
|
10
|
-
|
|
10
|
+
optimizedShape: require_memo.memo(() => Object.entries(shape).map(([key, value]) => ({
|
|
11
11
|
key,
|
|
12
12
|
value
|
|
13
13
|
}))),
|
|
14
|
+
shape,
|
|
14
15
|
keys: Object.keys(shape),
|
|
15
16
|
constraints
|
|
16
17
|
}, {
|
|
@@ -18,7 +19,7 @@ const ObjectStructure = require_base.createStructure(objectStructureKind, ({ ini
|
|
|
18
19
|
if (!require_isSimple.isSimple(data) || Object.getOwnPropertySymbols(data).length !== 0) return errorHandler?.().addIssue(self, data) ?? require_resultSymbol.ErrorSymbol;
|
|
19
20
|
if (Object.keys(data).some((value) => !self.definition.keys.includes(value))) return errorHandler?.().addIssue(self, data) ?? require_resultSymbol.ErrorSymbol;
|
|
20
21
|
const pathStage = errorHandler?.().createPathStage();
|
|
21
|
-
const result = self.definition.
|
|
22
|
+
const result = self.definition.optimizedShape.value.reduce((accumulator, entry) => require_callThen.callThen(accumulator, (awaitedAccumulator) => pathStage?.setCurrentPath(entry.key) ?? require_callThen.callThen(entry.value.executeCheck(data[entry.key], errorHandler), (result) => result === require_resultSymbol.ErrorSymbol || awaitedAccumulator === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : require_resultSymbol.SuccessSymbol)), require_resultSymbol.SuccessSymbol);
|
|
22
23
|
return require_callThen.callThen(result, (awaitedResult) => {
|
|
23
24
|
pathStage?.close();
|
|
24
25
|
return awaitedResult;
|
|
@@ -28,9 +29,9 @@ const ObjectStructure = require_base.createStructure(objectStructureKind, ({ ini
|
|
|
28
29
|
if (!require_isSimple.isSimple(data) || Object.getOwnPropertySymbols(data).length !== 0) return errorHandler?.().addIssue(self, data) ?? require_resultSymbol.ErrorSymbol;
|
|
29
30
|
if (Object.keys(data).some((value) => !self.definition.keys.includes(value))) return errorHandler?.().addIssue(self, data) ?? require_resultSymbol.ErrorSymbol;
|
|
30
31
|
const pathStage = errorHandler?.().createPathStage();
|
|
31
|
-
const encodedData = self.definition.
|
|
32
|
+
const encodedData = self.definition.optimizedShape.value.reduce((accumulator, entry) => require_callThen.callThen(accumulator, (awaitedAccumulator) => pathStage?.setCurrentPath(entry.key) ?? require_callThen.callThen(entry.value.executeEncode(codecContext, data[entry.key], errorHandler), (encodedData) => {
|
|
32
33
|
if (encodedData === require_resultSymbol.ErrorSymbol || awaitedAccumulator === require_resultSymbol.ErrorSymbol) return require_resultSymbol.ErrorSymbol;
|
|
33
|
-
awaitedAccumulator[entry.key] = encodedData;
|
|
34
|
+
if (encodedData !== void 0) awaitedAccumulator[entry.key] = encodedData;
|
|
34
35
|
return awaitedAccumulator;
|
|
35
36
|
})), {});
|
|
36
37
|
return require_callThen.callThen(encodedData, (awaitedEncodedData) => pathStage?.close() ?? (awaitedEncodedData === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : require_callThen.callThen(self.executeConstraints(data, errorHandler), (result) => result === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : awaitedEncodedData)));
|
|
@@ -39,14 +40,24 @@ const ObjectStructure = require_base.createStructure(objectStructureKind, ({ ini
|
|
|
39
40
|
if (!require_isSimple.isSimple(data) || Object.getOwnPropertySymbols(data).length !== 0) return errorHandler?.().addIssue(self, data) ?? require_resultSymbol.ErrorSymbol;
|
|
40
41
|
if (Object.keys(data).some((value) => !self.definition.keys.includes(value))) return errorHandler?.().addIssue(self, data) ?? require_resultSymbol.ErrorSymbol;
|
|
41
42
|
const pathStage = errorHandler?.().createPathStage();
|
|
42
|
-
const decodedData = self.definition.
|
|
43
|
+
const decodedData = self.definition.optimizedShape.value.reduce((accumulator, entry) => require_callThen.callThen(accumulator, (awaitedAccumulator) => pathStage?.setCurrentPath(entry.key) ?? require_callThen.callThen(entry.value.executeDecode(codecContext, data[entry.key], errorHandler), (decodedData) => {
|
|
43
44
|
if (decodedData === require_resultSymbol.ErrorSymbol || awaitedAccumulator === require_resultSymbol.ErrorSymbol) return require_resultSymbol.ErrorSymbol;
|
|
44
|
-
awaitedAccumulator[entry.key] = decodedData;
|
|
45
|
+
if (decodedData !== void 0) awaitedAccumulator[entry.key] = decodedData;
|
|
45
46
|
return awaitedAccumulator;
|
|
46
47
|
})), {});
|
|
47
48
|
return require_callThen.callThen(decodedData, (awaitedDecodedData) => pathStage?.close() ?? (awaitedDecodedData === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : require_callThen.callThen(self.executeConstraints(awaitedDecodedData, errorHandler), (result) => result === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : awaitedDecodedData)));
|
|
48
49
|
},
|
|
49
|
-
|
|
50
|
+
executeParse: (self, codecContext, data, errorHandler) => {
|
|
51
|
+
if (!require_isSimple.isSimple(data)) return errorHandler?.().addIssue(self, data) ?? require_resultSymbol.ErrorSymbol;
|
|
52
|
+
const pathStage = errorHandler?.().createPathStage();
|
|
53
|
+
const parsedData = self.definition.optimizedShape.value.reduce((accumulator, entry) => require_callThen.callThen(accumulator, (awaitedAccumulator) => pathStage?.setCurrentPath(entry.key) ?? require_callThen.callThen(entry.value.executeParse(codecContext, data[entry.key], errorHandler), (parsedData) => {
|
|
54
|
+
if (parsedData === require_resultSymbol.ErrorSymbol || awaitedAccumulator === require_resultSymbol.ErrorSymbol) return require_resultSymbol.ErrorSymbol;
|
|
55
|
+
if (parsedData !== void 0) awaitedAccumulator[entry.key] = parsedData;
|
|
56
|
+
return awaitedAccumulator;
|
|
57
|
+
})), {});
|
|
58
|
+
return require_callThen.callThen(parsedData, (awaitedParsedData) => pathStage?.close() ?? (awaitedParsedData === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : require_callThen.callThen(self.executeConstraints(awaitedParsedData, errorHandler), (result) => result === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : awaitedParsedData)));
|
|
59
|
+
},
|
|
60
|
+
isAsynchronous: (self) => self.definition.optimizedShape.value.some((entry) => entry.value.isAsynchronous())
|
|
50
61
|
}));
|
|
51
62
|
//#endregion
|
|
52
63
|
exports.ObjectStructure = ObjectStructure;
|
|
@@ -22,9 +22,10 @@ export type ShapeObjectStructureValue<GenericShape extends ShapeObjectStructure>
|
|
|
22
22
|
} extends infer InferredResult extends Record<string, unknown> ? DObject.PartialKeys<InferredResult, DObject.GetPropsWithValueExtends<InferredResult, undefined>> : never;
|
|
23
23
|
export declare const objectStructureKind: DKind.Handler<DKind.Definition<"@DuplojsLangDataStructure/object-structure", unknown>>;
|
|
24
24
|
export interface ObjectStructureDefinition<GenericConstraints extends readonly Constraint[] = readonly Constraint[]> extends StructureDefinition<GenericConstraints> {
|
|
25
|
-
readonly
|
|
25
|
+
readonly optimizedShape: DCommon.Memoized<readonly EntryShapeObjectStructure[]>;
|
|
26
|
+
readonly shape: Readonly<Record<string, Structure>>;
|
|
26
27
|
readonly keys: readonly string[];
|
|
27
28
|
}
|
|
28
|
-
export interface ObjectStructure<GenericValue extends Record<string, unknown> = Record<string, unknown>, GenericConstraints extends readonly Constraint<GenericValue>[] = readonly Constraint<GenericValue>[]> extends DCommon.Forward<Structure<GenericValue, ObjectStructureDefinition<GenericConstraints>> & DKind.Kind<typeof objectStructureKind>> {
|
|
29
|
+
export interface ObjectStructure<out GenericValue extends Record<string, unknown> = Record<string, unknown>, out GenericConstraints extends readonly Constraint<GenericValue>[] = readonly Constraint<GenericValue>[]> extends DCommon.Forward<Structure<GenericValue, ObjectStructureDefinition<GenericConstraints>> & DKind.Kind<typeof objectStructureKind>> {
|
|
29
30
|
}
|
|
30
31
|
export declare const ObjectStructure: <GenericShape extends ShapeObjectStructure, const GenericConstraints extends readonly Constraint<ShapeObjectStructureValue<GenericShape>>[]>(shape: GenericShape, constraints: GenericConstraints) => NoInfer<ObjectStructure<ShapeObjectStructureValue<GenericShape>, readonly [...GenericConstraints]>>;
|
|
@@ -7,10 +7,11 @@ import { createStructure } from "../base.mjs";
|
|
|
7
7
|
//#region scripts/dataStructure/structure/defaults/object.ts
|
|
8
8
|
const objectStructureKind = createKind("object-structure");
|
|
9
9
|
const ObjectStructure = createStructure(objectStructureKind, ({ init }) => (shape, constraints) => init({
|
|
10
|
-
|
|
10
|
+
optimizedShape: memo(() => Object.entries(shape).map(([key, value]) => ({
|
|
11
11
|
key,
|
|
12
12
|
value
|
|
13
13
|
}))),
|
|
14
|
+
shape,
|
|
14
15
|
keys: Object.keys(shape),
|
|
15
16
|
constraints
|
|
16
17
|
}, {
|
|
@@ -18,7 +19,7 @@ const ObjectStructure = createStructure(objectStructureKind, ({ init }) => (shap
|
|
|
18
19
|
if (!isSimple(data) || Object.getOwnPropertySymbols(data).length !== 0) return errorHandler?.().addIssue(self, data) ?? ErrorSymbol;
|
|
19
20
|
if (Object.keys(data).some((value) => !self.definition.keys.includes(value))) return errorHandler?.().addIssue(self, data) ?? ErrorSymbol;
|
|
20
21
|
const pathStage = errorHandler?.().createPathStage();
|
|
21
|
-
const result = self.definition.
|
|
22
|
+
const result = self.definition.optimizedShape.value.reduce((accumulator, entry) => callThen(accumulator, (awaitedAccumulator) => pathStage?.setCurrentPath(entry.key) ?? callThen(entry.value.executeCheck(data[entry.key], errorHandler), (result) => result === ErrorSymbol || awaitedAccumulator === ErrorSymbol ? ErrorSymbol : SuccessSymbol)), SuccessSymbol);
|
|
22
23
|
return callThen(result, (awaitedResult) => {
|
|
23
24
|
pathStage?.close();
|
|
24
25
|
return awaitedResult;
|
|
@@ -28,9 +29,9 @@ const ObjectStructure = createStructure(objectStructureKind, ({ init }) => (shap
|
|
|
28
29
|
if (!isSimple(data) || Object.getOwnPropertySymbols(data).length !== 0) return errorHandler?.().addIssue(self, data) ?? ErrorSymbol;
|
|
29
30
|
if (Object.keys(data).some((value) => !self.definition.keys.includes(value))) return errorHandler?.().addIssue(self, data) ?? ErrorSymbol;
|
|
30
31
|
const pathStage = errorHandler?.().createPathStage();
|
|
31
|
-
const encodedData = self.definition.
|
|
32
|
+
const encodedData = self.definition.optimizedShape.value.reduce((accumulator, entry) => callThen(accumulator, (awaitedAccumulator) => pathStage?.setCurrentPath(entry.key) ?? callThen(entry.value.executeEncode(codecContext, data[entry.key], errorHandler), (encodedData) => {
|
|
32
33
|
if (encodedData === ErrorSymbol || awaitedAccumulator === ErrorSymbol) return ErrorSymbol;
|
|
33
|
-
awaitedAccumulator[entry.key] = encodedData;
|
|
34
|
+
if (encodedData !== void 0) awaitedAccumulator[entry.key] = encodedData;
|
|
34
35
|
return awaitedAccumulator;
|
|
35
36
|
})), {});
|
|
36
37
|
return callThen(encodedData, (awaitedEncodedData) => pathStage?.close() ?? (awaitedEncodedData === ErrorSymbol ? ErrorSymbol : callThen(self.executeConstraints(data, errorHandler), (result) => result === ErrorSymbol ? ErrorSymbol : awaitedEncodedData)));
|
|
@@ -39,14 +40,24 @@ const ObjectStructure = createStructure(objectStructureKind, ({ init }) => (shap
|
|
|
39
40
|
if (!isSimple(data) || Object.getOwnPropertySymbols(data).length !== 0) return errorHandler?.().addIssue(self, data) ?? ErrorSymbol;
|
|
40
41
|
if (Object.keys(data).some((value) => !self.definition.keys.includes(value))) return errorHandler?.().addIssue(self, data) ?? ErrorSymbol;
|
|
41
42
|
const pathStage = errorHandler?.().createPathStage();
|
|
42
|
-
const decodedData = self.definition.
|
|
43
|
+
const decodedData = self.definition.optimizedShape.value.reduce((accumulator, entry) => callThen(accumulator, (awaitedAccumulator) => pathStage?.setCurrentPath(entry.key) ?? callThen(entry.value.executeDecode(codecContext, data[entry.key], errorHandler), (decodedData) => {
|
|
43
44
|
if (decodedData === ErrorSymbol || awaitedAccumulator === ErrorSymbol) return ErrorSymbol;
|
|
44
|
-
awaitedAccumulator[entry.key] = decodedData;
|
|
45
|
+
if (decodedData !== void 0) awaitedAccumulator[entry.key] = decodedData;
|
|
45
46
|
return awaitedAccumulator;
|
|
46
47
|
})), {});
|
|
47
48
|
return callThen(decodedData, (awaitedDecodedData) => pathStage?.close() ?? (awaitedDecodedData === ErrorSymbol ? ErrorSymbol : callThen(self.executeConstraints(awaitedDecodedData, errorHandler), (result) => result === ErrorSymbol ? ErrorSymbol : awaitedDecodedData)));
|
|
48
49
|
},
|
|
49
|
-
|
|
50
|
+
executeParse: (self, codecContext, data, errorHandler) => {
|
|
51
|
+
if (!isSimple(data)) return errorHandler?.().addIssue(self, data) ?? ErrorSymbol;
|
|
52
|
+
const pathStage = errorHandler?.().createPathStage();
|
|
53
|
+
const parsedData = self.definition.optimizedShape.value.reduce((accumulator, entry) => callThen(accumulator, (awaitedAccumulator) => pathStage?.setCurrentPath(entry.key) ?? callThen(entry.value.executeParse(codecContext, data[entry.key], errorHandler), (parsedData) => {
|
|
54
|
+
if (parsedData === ErrorSymbol || awaitedAccumulator === ErrorSymbol) return ErrorSymbol;
|
|
55
|
+
if (parsedData !== void 0) awaitedAccumulator[entry.key] = parsedData;
|
|
56
|
+
return awaitedAccumulator;
|
|
57
|
+
})), {});
|
|
58
|
+
return callThen(parsedData, (awaitedParsedData) => pathStage?.close() ?? (awaitedParsedData === ErrorSymbol ? ErrorSymbol : callThen(self.executeConstraints(awaitedParsedData, errorHandler), (result) => result === ErrorSymbol ? ErrorSymbol : awaitedParsedData)));
|
|
59
|
+
},
|
|
60
|
+
isAsynchronous: (self) => self.definition.optimizedShape.value.some((entry) => entry.value.isAsynchronous())
|
|
50
61
|
}));
|
|
51
62
|
//#endregion
|
|
52
63
|
export { ObjectStructure, objectStructureKind };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const require_callThen = require("../../../common/callThen.cjs");
|
|
2
|
+
const require_isSimple = require("../../../object/isSimple.cjs");
|
|
2
3
|
const require_isType = require("../../../common/isType.cjs");
|
|
3
4
|
const require_memo = require("../../../common/memo.cjs");
|
|
4
5
|
const require_kind = require("../../kind.cjs");
|
|
@@ -26,7 +27,7 @@ const RecordStructure = require_base.createStructure(recordStructureKind, ({ ini
|
|
|
26
27
|
})
|
|
27
28
|
}, {
|
|
28
29
|
executeCheck: (self, data, errorHandler) => {
|
|
29
|
-
if (
|
|
30
|
+
if (!require_isSimple.isSimple(data) || Object.getOwnPropertySymbols(data).length !== 0) return errorHandler?.().addIssue(self, data) ?? require_resultSymbol.ErrorSymbol;
|
|
30
31
|
const keyData = Object.keys(data);
|
|
31
32
|
const requiredKeys = self.definition.requiredKeys.value;
|
|
32
33
|
if (requiredKeys && keyData.some((value) => !requiredKeys.includes(value))) return errorHandler?.().addIssue(self, data) ?? require_resultSymbol.ErrorSymbol;
|
|
@@ -38,31 +39,43 @@ const RecordStructure = require_base.createStructure(recordStructureKind, ({ ini
|
|
|
38
39
|
});
|
|
39
40
|
},
|
|
40
41
|
executeEncode: (self, codecContext, data, errorHandler) => {
|
|
41
|
-
if (
|
|
42
|
+
if (!require_isSimple.isSimple(data) || Object.getOwnPropertySymbols(data).length !== 0) return errorHandler?.().addIssue(self, data) ?? require_resultSymbol.ErrorSymbol;
|
|
42
43
|
const keyData = Object.keys(data);
|
|
43
44
|
const requiredKeys = self.definition.requiredKeys.value;
|
|
44
45
|
if (requiredKeys && keyData.some((value) => !requiredKeys.includes(value))) return errorHandler?.().addIssue(self, data) ?? require_resultSymbol.ErrorSymbol;
|
|
45
46
|
const pathStage = errorHandler?.().createPathStage();
|
|
46
|
-
const encodedData = (requiredKeys ?? keyData).reduce((accumulator, key) => require_callThen.callThen(accumulator, (awaitedAccumulator) => pathStage?.setCurrentPath(`{record key: ${key}}`) ?? require_callThen.callThen(self.definition.key.executeCheck(key, errorHandler), (keyResult) => pathStage?.setCurrentPath(`{record value: ${key}}`) ?? require_callThen.callThen(self.definition.value.executeEncode(codecContext, data[key], errorHandler), (encodedValue) => {
|
|
47
|
+
const encodedData = (requiredKeys ?? keyData).reduce((accumulator, key) => key === "__proto__" ? accumulator : require_callThen.callThen(accumulator, (awaitedAccumulator) => pathStage?.setCurrentPath(`{record key: ${key}}`) ?? require_callThen.callThen(self.definition.key.executeCheck(key, errorHandler), (keyResult) => pathStage?.setCurrentPath(`{record value: ${key}}`) ?? require_callThen.callThen(self.definition.value.executeEncode(codecContext, data[key], errorHandler), (encodedValue) => {
|
|
47
48
|
if (keyResult === require_resultSymbol.ErrorSymbol || encodedValue === require_resultSymbol.ErrorSymbol || awaitedAccumulator === require_resultSymbol.ErrorSymbol) return require_resultSymbol.ErrorSymbol;
|
|
48
|
-
awaitedAccumulator[key] = encodedValue;
|
|
49
|
+
if (encodedValue !== void 0) awaitedAccumulator[key] = encodedValue;
|
|
49
50
|
return awaitedAccumulator;
|
|
50
51
|
}))), {});
|
|
51
52
|
return require_callThen.callThen(encodedData, (awaitedEncodedData) => pathStage?.close() ?? (awaitedEncodedData === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : require_callThen.callThen(self.executeConstraints(data, errorHandler), (result) => result === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : awaitedEncodedData)));
|
|
52
53
|
},
|
|
53
54
|
executeDecode: (self, codecContext, data, errorHandler) => {
|
|
54
|
-
if (
|
|
55
|
+
if (!require_isSimple.isSimple(data) || Object.getOwnPropertySymbols(data).length !== 0) return errorHandler?.().addIssue(self, data) ?? require_resultSymbol.ErrorSymbol;
|
|
55
56
|
const keyData = Object.keys(data);
|
|
56
57
|
const requiredKeys = self.definition.requiredKeys.value;
|
|
57
58
|
if (requiredKeys && keyData.some((value) => !requiredKeys.includes(value))) return errorHandler?.().addIssue(self, data) ?? require_resultSymbol.ErrorSymbol;
|
|
58
59
|
const pathStage = errorHandler?.().createPathStage();
|
|
59
|
-
const decodedData = (requiredKeys ?? keyData).reduce((accumulator, key) => require_callThen.callThen(accumulator, (awaitedAccumulator) => pathStage?.setCurrentPath(`{record key: ${key}}`) ?? require_callThen.callThen(self.definition.key.executeCheck(key, errorHandler), (keyResult) => pathStage?.setCurrentPath(`{record value: ${key}}`) ?? require_callThen.callThen(self.definition.value.executeDecode(codecContext, data[key], errorHandler), (decodedValue) => {
|
|
60
|
+
const decodedData = (requiredKeys ?? keyData).reduce((accumulator, key) => key === "__proto__" ? accumulator : require_callThen.callThen(accumulator, (awaitedAccumulator) => pathStage?.setCurrentPath(`{record key: ${key}}`) ?? require_callThen.callThen(self.definition.key.executeCheck(key, errorHandler), (keyResult) => pathStage?.setCurrentPath(`{record value: ${key}}`) ?? require_callThen.callThen(self.definition.value.executeDecode(codecContext, data[key], errorHandler), (decodedValue) => {
|
|
60
61
|
if (keyResult === require_resultSymbol.ErrorSymbol || decodedValue === require_resultSymbol.ErrorSymbol || awaitedAccumulator === require_resultSymbol.ErrorSymbol) return require_resultSymbol.ErrorSymbol;
|
|
61
|
-
awaitedAccumulator[key] = decodedValue;
|
|
62
|
+
if (decodedValue !== void 0) awaitedAccumulator[key] = decodedValue;
|
|
62
63
|
return awaitedAccumulator;
|
|
63
64
|
}))), {});
|
|
64
65
|
return require_callThen.callThen(decodedData, (awaitedDecodedData) => pathStage?.close() ?? (awaitedDecodedData === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : require_callThen.callThen(self.executeConstraints(awaitedDecodedData, errorHandler), (result) => result === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : awaitedDecodedData)));
|
|
65
66
|
},
|
|
67
|
+
executeParse: (self, codecContext, data, errorHandler) => {
|
|
68
|
+
if (!require_isSimple.isSimple(data)) return errorHandler?.().addIssue(self, data) ?? require_resultSymbol.ErrorSymbol;
|
|
69
|
+
const keyData = Object.keys(data);
|
|
70
|
+
const requiredKeys = self.definition.requiredKeys.value;
|
|
71
|
+
const pathStage = errorHandler?.().createPathStage();
|
|
72
|
+
const parsedData = (requiredKeys ?? keyData).reduce((accumulator, key) => key === "__proto__" ? accumulator : require_callThen.callThen(accumulator, (awaitedAccumulator) => pathStage?.setCurrentPath(`{record key: ${key}}`) ?? require_callThen.callThen(self.definition.key.executeCheck(key, errorHandler), (keyResult) => pathStage?.setCurrentPath(`{record value: ${key}}`) ?? require_callThen.callThen(self.definition.value.executeParse(codecContext, data[key], errorHandler), (parsedValue) => {
|
|
73
|
+
if (keyResult === require_resultSymbol.ErrorSymbol || parsedValue === require_resultSymbol.ErrorSymbol || awaitedAccumulator === require_resultSymbol.ErrorSymbol) return require_resultSymbol.ErrorSymbol;
|
|
74
|
+
if (parsedValue !== void 0) awaitedAccumulator[key] = parsedValue;
|
|
75
|
+
return awaitedAccumulator;
|
|
76
|
+
}))), {});
|
|
77
|
+
return require_callThen.callThen(parsedData, (awaitedParsedData) => pathStage?.close() ?? (awaitedParsedData === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : require_callThen.callThen(self.executeConstraints(awaitedParsedData, errorHandler), (result) => result === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : awaitedParsedData)));
|
|
78
|
+
},
|
|
66
79
|
isAsynchronous: (self) => self.definition.key.isAsynchronous() || self.definition.value.isAsynchronous()
|
|
67
80
|
}));
|
|
68
81
|
//#endregion
|
|
@@ -14,6 +14,6 @@ export interface RecordStructureDefinition<GenericConstraints extends readonly C
|
|
|
14
14
|
readonly value: Structure;
|
|
15
15
|
readonly requiredKeys: DCommon.Memoized<string[] | null>;
|
|
16
16
|
}
|
|
17
|
-
export interface RecordStructure<GenericValue extends Record<string, unknown> = Record<string, unknown>, GenericConstraints extends readonly Constraint<GenericValue>[] = readonly Constraint<GenericValue>[]> extends DCommon.Forward<Structure<GenericValue, RecordStructureDefinition<GenericConstraints>> & DKind.Kind<typeof recordStructureKind>> {
|
|
17
|
+
export interface RecordStructure<out GenericValue extends Record<string, unknown> = Record<string, unknown>, out GenericConstraints extends readonly Constraint<GenericValue>[] = readonly Constraint<GenericValue>[]> extends DCommon.Forward<Structure<GenericValue, RecordStructureDefinition<GenericConstraints>> & DKind.Kind<typeof recordStructureKind>> {
|
|
18
18
|
}
|
|
19
19
|
export declare const RecordStructure: <GenericKey extends (UnionStructure<string> | TypeStructure<string>), GenericValueStructure extends Structure, const GenericConstraints extends readonly Constraint<RecordStructureValue<GenericKey, GenericValueStructure>>[]>(key: GenericKey, value: GenericValueStructure, constraints: GenericConstraints) => NoInfer<RecordStructure<RecordStructureValue<GenericKey, GenericValueStructure>, readonly [...GenericConstraints]>>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { callThen } from "../../../common/callThen.mjs";
|
|
2
|
+
import { isSimple } from "../../../object/isSimple.mjs";
|
|
2
3
|
import { isType } from "../../../common/isType.mjs";
|
|
3
4
|
import { memo } from "../../../common/memo.mjs";
|
|
4
5
|
import { createKind } from "../../kind.mjs";
|
|
@@ -26,7 +27,7 @@ const RecordStructure = createStructure(recordStructureKind, ({ init }) => (key,
|
|
|
26
27
|
})
|
|
27
28
|
}, {
|
|
28
29
|
executeCheck: (self, data, errorHandler) => {
|
|
29
|
-
if (
|
|
30
|
+
if (!isSimple(data) || Object.getOwnPropertySymbols(data).length !== 0) return errorHandler?.().addIssue(self, data) ?? ErrorSymbol;
|
|
30
31
|
const keyData = Object.keys(data);
|
|
31
32
|
const requiredKeys = self.definition.requiredKeys.value;
|
|
32
33
|
if (requiredKeys && keyData.some((value) => !requiredKeys.includes(value))) return errorHandler?.().addIssue(self, data) ?? ErrorSymbol;
|
|
@@ -38,31 +39,43 @@ const RecordStructure = createStructure(recordStructureKind, ({ init }) => (key,
|
|
|
38
39
|
});
|
|
39
40
|
},
|
|
40
41
|
executeEncode: (self, codecContext, data, errorHandler) => {
|
|
41
|
-
if (
|
|
42
|
+
if (!isSimple(data) || Object.getOwnPropertySymbols(data).length !== 0) return errorHandler?.().addIssue(self, data) ?? ErrorSymbol;
|
|
42
43
|
const keyData = Object.keys(data);
|
|
43
44
|
const requiredKeys = self.definition.requiredKeys.value;
|
|
44
45
|
if (requiredKeys && keyData.some((value) => !requiredKeys.includes(value))) return errorHandler?.().addIssue(self, data) ?? ErrorSymbol;
|
|
45
46
|
const pathStage = errorHandler?.().createPathStage();
|
|
46
|
-
const encodedData = (requiredKeys ?? keyData).reduce((accumulator, key) => callThen(accumulator, (awaitedAccumulator) => pathStage?.setCurrentPath(`{record key: ${key}}`) ?? callThen(self.definition.key.executeCheck(key, errorHandler), (keyResult) => pathStage?.setCurrentPath(`{record value: ${key}}`) ?? callThen(self.definition.value.executeEncode(codecContext, data[key], errorHandler), (encodedValue) => {
|
|
47
|
+
const encodedData = (requiredKeys ?? keyData).reduce((accumulator, key) => key === "__proto__" ? accumulator : callThen(accumulator, (awaitedAccumulator) => pathStage?.setCurrentPath(`{record key: ${key}}`) ?? callThen(self.definition.key.executeCheck(key, errorHandler), (keyResult) => pathStage?.setCurrentPath(`{record value: ${key}}`) ?? callThen(self.definition.value.executeEncode(codecContext, data[key], errorHandler), (encodedValue) => {
|
|
47
48
|
if (keyResult === ErrorSymbol || encodedValue === ErrorSymbol || awaitedAccumulator === ErrorSymbol) return ErrorSymbol;
|
|
48
|
-
awaitedAccumulator[key] = encodedValue;
|
|
49
|
+
if (encodedValue !== void 0) awaitedAccumulator[key] = encodedValue;
|
|
49
50
|
return awaitedAccumulator;
|
|
50
51
|
}))), {});
|
|
51
52
|
return callThen(encodedData, (awaitedEncodedData) => pathStage?.close() ?? (awaitedEncodedData === ErrorSymbol ? ErrorSymbol : callThen(self.executeConstraints(data, errorHandler), (result) => result === ErrorSymbol ? ErrorSymbol : awaitedEncodedData)));
|
|
52
53
|
},
|
|
53
54
|
executeDecode: (self, codecContext, data, errorHandler) => {
|
|
54
|
-
if (
|
|
55
|
+
if (!isSimple(data) || Object.getOwnPropertySymbols(data).length !== 0) return errorHandler?.().addIssue(self, data) ?? ErrorSymbol;
|
|
55
56
|
const keyData = Object.keys(data);
|
|
56
57
|
const requiredKeys = self.definition.requiredKeys.value;
|
|
57
58
|
if (requiredKeys && keyData.some((value) => !requiredKeys.includes(value))) return errorHandler?.().addIssue(self, data) ?? ErrorSymbol;
|
|
58
59
|
const pathStage = errorHandler?.().createPathStage();
|
|
59
|
-
const decodedData = (requiredKeys ?? keyData).reduce((accumulator, key) => callThen(accumulator, (awaitedAccumulator) => pathStage?.setCurrentPath(`{record key: ${key}}`) ?? callThen(self.definition.key.executeCheck(key, errorHandler), (keyResult) => pathStage?.setCurrentPath(`{record value: ${key}}`) ?? callThen(self.definition.value.executeDecode(codecContext, data[key], errorHandler), (decodedValue) => {
|
|
60
|
+
const decodedData = (requiredKeys ?? keyData).reduce((accumulator, key) => key === "__proto__" ? accumulator : callThen(accumulator, (awaitedAccumulator) => pathStage?.setCurrentPath(`{record key: ${key}}`) ?? callThen(self.definition.key.executeCheck(key, errorHandler), (keyResult) => pathStage?.setCurrentPath(`{record value: ${key}}`) ?? callThen(self.definition.value.executeDecode(codecContext, data[key], errorHandler), (decodedValue) => {
|
|
60
61
|
if (keyResult === ErrorSymbol || decodedValue === ErrorSymbol || awaitedAccumulator === ErrorSymbol) return ErrorSymbol;
|
|
61
|
-
awaitedAccumulator[key] = decodedValue;
|
|
62
|
+
if (decodedValue !== void 0) awaitedAccumulator[key] = decodedValue;
|
|
62
63
|
return awaitedAccumulator;
|
|
63
64
|
}))), {});
|
|
64
65
|
return callThen(decodedData, (awaitedDecodedData) => pathStage?.close() ?? (awaitedDecodedData === ErrorSymbol ? ErrorSymbol : callThen(self.executeConstraints(awaitedDecodedData, errorHandler), (result) => result === ErrorSymbol ? ErrorSymbol : awaitedDecodedData)));
|
|
65
66
|
},
|
|
67
|
+
executeParse: (self, codecContext, data, errorHandler) => {
|
|
68
|
+
if (!isSimple(data)) return errorHandler?.().addIssue(self, data) ?? ErrorSymbol;
|
|
69
|
+
const keyData = Object.keys(data);
|
|
70
|
+
const requiredKeys = self.definition.requiredKeys.value;
|
|
71
|
+
const pathStage = errorHandler?.().createPathStage();
|
|
72
|
+
const parsedData = (requiredKeys ?? keyData).reduce((accumulator, key) => key === "__proto__" ? accumulator : callThen(accumulator, (awaitedAccumulator) => pathStage?.setCurrentPath(`{record key: ${key}}`) ?? callThen(self.definition.key.executeCheck(key, errorHandler), (keyResult) => pathStage?.setCurrentPath(`{record value: ${key}}`) ?? callThen(self.definition.value.executeParse(codecContext, data[key], errorHandler), (parsedValue) => {
|
|
73
|
+
if (keyResult === ErrorSymbol || parsedValue === ErrorSymbol || awaitedAccumulator === ErrorSymbol) return ErrorSymbol;
|
|
74
|
+
if (parsedValue !== void 0) awaitedAccumulator[key] = parsedValue;
|
|
75
|
+
return awaitedAccumulator;
|
|
76
|
+
}))), {});
|
|
77
|
+
return callThen(parsedData, (awaitedParsedData) => pathStage?.close() ?? (awaitedParsedData === ErrorSymbol ? ErrorSymbol : callThen(self.executeConstraints(awaitedParsedData, errorHandler), (result) => result === ErrorSymbol ? ErrorSymbol : awaitedParsedData)));
|
|
78
|
+
},
|
|
66
79
|
isAsynchronous: (self) => self.definition.key.isAsynchronous() || self.definition.value.isAsynchronous()
|
|
67
80
|
}));
|
|
68
81
|
//#endregion
|
|
@@ -18,6 +18,7 @@ const TypeStructure = require_base.createStructure(typeStructureKind, ({ init })
|
|
|
18
18
|
const codec = codecContext.get(self.definition.type.fundamentalType);
|
|
19
19
|
return require_callThen.callThen(codec ? codec.decode(data, errorHandler) : data, (decodedData) => decodedData === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : require_callThen.callThen(self.executeCheck(decodedData, errorHandler), (result) => result === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : decodedData));
|
|
20
20
|
},
|
|
21
|
+
executeParse: (self, codecContext, data, errorHandler) => self.executeDecode(codecContext, data, errorHandler),
|
|
21
22
|
isAsynchronous: (self) => self.definition.type.isAsynchronous()
|
|
22
23
|
}));
|
|
23
24
|
//#endregion
|
|
@@ -7,6 +7,6 @@ export declare const typeStructureKind: DKind.Handler<DKind.Definition<"@Duplojs
|
|
|
7
7
|
export interface TypeStructureDefinition<GenericConstraints extends readonly Constraint[] = readonly Constraint[]> extends StructureDefinition<GenericConstraints> {
|
|
8
8
|
readonly type: Type;
|
|
9
9
|
}
|
|
10
|
-
export interface TypeStructure<GenericType extends unknown = unknown, GenericConstraints extends readonly Constraint<GenericType>[] = readonly Constraint<GenericType>[]> extends DCommon.Forward<Structure<GenericType, TypeStructureDefinition<GenericConstraints>> & DKind.Kind<typeof typeStructureKind>> {
|
|
10
|
+
export interface TypeStructure<out GenericType extends unknown = unknown, out GenericConstraints extends readonly Constraint<GenericType>[] = readonly Constraint<GenericType>[]> extends DCommon.Forward<Structure<GenericType, TypeStructureDefinition<GenericConstraints>> & DKind.Kind<typeof typeStructureKind>> {
|
|
11
11
|
}
|
|
12
12
|
export declare const TypeStructure: <GenericType extends Type, const GenericConstraints extends readonly Constraint<TypeValue<GenericType>>[]>(type: GenericType, constraints: GenericConstraints) => NoInfer<TypeStructure<TypeValue<GenericType>, readonly [...GenericConstraints]>>;
|
|
@@ -18,6 +18,7 @@ const TypeStructure = createStructure(typeStructureKind, ({ init }) => (type, co
|
|
|
18
18
|
const codec = codecContext.get(self.definition.type.fundamentalType);
|
|
19
19
|
return callThen(codec ? codec.decode(data, errorHandler) : data, (decodedData) => decodedData === ErrorSymbol ? ErrorSymbol : callThen(self.executeCheck(decodedData, errorHandler), (result) => result === ErrorSymbol ? ErrorSymbol : decodedData));
|
|
20
20
|
},
|
|
21
|
+
executeParse: (self, codecContext, data, errorHandler) => self.executeDecode(codecContext, data, errorHandler),
|
|
21
22
|
isAsynchronous: (self) => self.definition.type.isAsynchronous()
|
|
22
23
|
}));
|
|
23
24
|
//#endregion
|
|
@@ -2,13 +2,13 @@ const require_callThen = require("../../../common/callThen.cjs");
|
|
|
2
2
|
const require_memo = require("../../../common/memo.cjs");
|
|
3
3
|
const require_kind = require("../../kind.cjs");
|
|
4
4
|
const require_resultSymbol = require("../../common/resultSymbol.cjs");
|
|
5
|
-
const
|
|
6
|
-
const require_base = require("../base.cjs");
|
|
5
|
+
const require_base = require("../../common/error/base.cjs");
|
|
6
|
+
const require_base$1 = require("../base.cjs");
|
|
7
7
|
const require_identifier = require("../identifier.cjs");
|
|
8
8
|
const require_lazy = require("./lazy.cjs");
|
|
9
9
|
//#region scripts/dataStructure/structure/defaults/union.ts
|
|
10
10
|
const unionStructureKind = require_kind.createKind("union-structure");
|
|
11
|
-
const UnionStructure = require_base.createStructure(unionStructureKind, ({ init }) => (values, constraints) => init({
|
|
11
|
+
const UnionStructure = require_base$1.createStructure(unionStructureKind, ({ init }) => (values, constraints) => init({
|
|
12
12
|
values: require_memo.memo(() => values.flatMap((value) => (function flatUnion(structure) {
|
|
13
13
|
if (require_identifier.structureIdentifier(structure, unionStructureKind)) return structure.definition.values.value.flatMap(flatUnion);
|
|
14
14
|
if (require_identifier.structureIdentifier(structure, require_lazy.lazyStructureKind)) return flatUnion(structure.definition.getter.value);
|
|
@@ -20,7 +20,7 @@ const UnionStructure = require_base.createStructure(unionStructureKind, ({ init
|
|
|
20
20
|
const errorHandlers = errorHandler ? [] : void 0;
|
|
21
21
|
const result = self.definition.values.value.reduce((accumulator, value, index) => require_callThen.callThen(accumulator, (awaitedAccumulator) => {
|
|
22
22
|
if (awaitedAccumulator === require_resultSymbol.SuccessSymbol) return awaitedAccumulator;
|
|
23
|
-
const subErrorHandler = errorHandler === void 0 ? void 0 :
|
|
23
|
+
const subErrorHandler = errorHandler === void 0 ? void 0 : require_base.createGetErrorHandler(errorHandler().currentPath);
|
|
24
24
|
if (errorHandlers && subErrorHandler) {
|
|
25
25
|
subErrorHandler().createPathStage().setCurrentPath(`(union: ${index})`);
|
|
26
26
|
errorHandlers.push(subErrorHandler);
|
|
@@ -40,7 +40,7 @@ const UnionStructure = require_base.createStructure(unionStructureKind, ({ init
|
|
|
40
40
|
const errorHandlers = errorHandler ? [] : void 0;
|
|
41
41
|
const encodedData = self.definition.values.value.reduce((accumulator, value, index) => require_callThen.callThen(accumulator, (awaitedAccumulator) => {
|
|
42
42
|
if (awaitedAccumulator !== require_resultSymbol.ErrorSymbol) return awaitedAccumulator;
|
|
43
|
-
const subErrorHandler = errorHandler === void 0 ? void 0 :
|
|
43
|
+
const subErrorHandler = errorHandler === void 0 ? void 0 : require_base.createGetErrorHandler(errorHandler().currentPath);
|
|
44
44
|
if (errorHandlers && subErrorHandler) {
|
|
45
45
|
subErrorHandler().createPathStage().setCurrentPath(`(union: ${index})`);
|
|
46
46
|
errorHandlers.push(subErrorHandler);
|
|
@@ -60,7 +60,7 @@ const UnionStructure = require_base.createStructure(unionStructureKind, ({ init
|
|
|
60
60
|
const errorHandlers = errorHandler ? [] : void 0;
|
|
61
61
|
const decodedData = self.definition.values.value.reduce((accumulator, value, index) => require_callThen.callThen(accumulator, (awaitedAccumulator) => {
|
|
62
62
|
if (awaitedAccumulator !== require_resultSymbol.ErrorSymbol) return awaitedAccumulator;
|
|
63
|
-
const subErrorHandler = errorHandler === void 0 ? void 0 :
|
|
63
|
+
const subErrorHandler = errorHandler === void 0 ? void 0 : require_base.createGetErrorHandler(errorHandler().currentPath);
|
|
64
64
|
if (errorHandlers && subErrorHandler) {
|
|
65
65
|
subErrorHandler().createPathStage().setCurrentPath(`(union: ${index})`);
|
|
66
66
|
errorHandlers.push(subErrorHandler);
|
|
@@ -76,6 +76,26 @@ const UnionStructure = require_base.createStructure(unionStructureKind, ({ init
|
|
|
76
76
|
return require_callThen.callThen(self.executeConstraints(awaitedDecodedData, errorHandler), (result) => result === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : awaitedDecodedData);
|
|
77
77
|
});
|
|
78
78
|
},
|
|
79
|
+
executeParse: (self, codecContext, data, errorHandler) => {
|
|
80
|
+
const errorHandlers = errorHandler ? [] : void 0;
|
|
81
|
+
const parsedData = self.definition.values.value.reduce((accumulator, value, index) => require_callThen.callThen(accumulator, (awaitedAccumulator) => {
|
|
82
|
+
if (awaitedAccumulator !== require_resultSymbol.ErrorSymbol) return awaitedAccumulator;
|
|
83
|
+
const subErrorHandler = errorHandler === void 0 ? void 0 : require_base.createGetErrorHandler(errorHandler().currentPath);
|
|
84
|
+
if (errorHandlers && subErrorHandler) {
|
|
85
|
+
subErrorHandler().createPathStage().setCurrentPath(`(union: ${index})`);
|
|
86
|
+
errorHandlers.push(subErrorHandler);
|
|
87
|
+
}
|
|
88
|
+
return value.executeParse(codecContext, data, subErrorHandler);
|
|
89
|
+
}), require_resultSymbol.ErrorSymbol);
|
|
90
|
+
return require_callThen.callThen(parsedData, (awaitedParsedData) => {
|
|
91
|
+
if (awaitedParsedData === require_resultSymbol.ErrorSymbol) {
|
|
92
|
+
if (errorHandlers) errorHandler?.().importIssues(errorHandlers);
|
|
93
|
+
errorHandler?.().addIssue(self, data);
|
|
94
|
+
return require_resultSymbol.ErrorSymbol;
|
|
95
|
+
}
|
|
96
|
+
return require_callThen.callThen(self.executeConstraints(awaitedParsedData, errorHandler), (result) => result === require_resultSymbol.ErrorSymbol ? require_resultSymbol.ErrorSymbol : awaitedParsedData);
|
|
97
|
+
});
|
|
98
|
+
},
|
|
79
99
|
isAsynchronous: (self) => self.definition.values.value.some((value) => value.isAsynchronous())
|
|
80
100
|
}));
|
|
81
101
|
//#endregion
|