tsondb 0.5.18 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/bin/tsondb.js +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/node/config.d.ts +20 -0
- package/dist/src/node/config.js +5 -0
- package/dist/src/node/index.d.ts +3 -2
- package/dist/src/node/index.js +13 -8
- package/dist/src/node/renderers/jsonschema/render.d.ts +1 -1
- package/dist/src/node/renderers/jsonschema/render.js +12 -7
- package/dist/src/node/renderers/ts/render.d.ts +1 -1
- package/dist/src/node/renderers/ts/render.js +12 -6
- package/dist/src/node/schema/Node.d.ts +100 -29
- package/dist/src/node/schema/Node.js +268 -61
- package/dist/src/node/schema/Schema.js +96 -1
- package/dist/src/node/schema/TypeParameter.d.ts +7 -9
- package/dist/src/node/schema/TypeParameter.js +7 -5
- package/dist/src/node/schema/declarations/Declaration.d.ts +10 -28
- package/dist/src/node/schema/declarations/Declaration.js +8 -110
- package/dist/src/node/schema/declarations/EntityDecl.d.ts +48 -48
- package/dist/src/node/schema/declarations/EntityDecl.js +15 -12
- package/dist/src/node/schema/declarations/EnumDecl.d.ts +14 -17
- package/dist/src/node/schema/declarations/EnumDecl.js +12 -12
- package/dist/src/node/schema/declarations/TypeAliasDecl.d.ts +8 -14
- package/dist/src/node/schema/declarations/TypeAliasDecl.js +10 -11
- package/dist/src/node/schema/index.d.ts +0 -2
- package/dist/src/node/schema/index.js +0 -1
- package/dist/src/node/schema/types/Type.d.ts +19 -42
- package/dist/src/node/schema/types/Type.js +29 -167
- package/dist/src/node/schema/types/generic/ArrayType.d.ts +5 -14
- package/dist/src/node/schema/types/generic/ArrayType.js +15 -20
- package/dist/src/node/schema/types/generic/EnumType.d.ts +5 -17
- package/dist/src/node/schema/types/generic/EnumType.js +12 -20
- package/dist/src/node/schema/types/generic/ObjectType.d.ts +5 -19
- package/dist/src/node/schema/types/generic/ObjectType.js +11 -15
- package/dist/src/node/schema/types/primitives/BooleanType.d.ts +7 -8
- package/dist/src/node/schema/types/primitives/BooleanType.js +5 -4
- package/dist/src/node/schema/types/primitives/DateType.d.ts +6 -8
- package/dist/src/node/schema/types/primitives/DateType.js +5 -4
- package/dist/src/node/schema/types/primitives/FloatType.d.ts +9 -21
- package/dist/src/node/schema/types/primitives/FloatType.js +5 -4
- package/dist/src/node/schema/types/primitives/IntegerType.d.ts +9 -21
- package/dist/src/node/schema/types/primitives/IntegerType.js +5 -4
- package/dist/src/node/schema/types/primitives/StringType.d.ts +6 -10
- package/dist/src/node/schema/types/primitives/StringType.js +5 -4
- package/dist/src/node/schema/types/references/ChildEntitiesType.d.ts +18 -0
- package/dist/src/node/schema/types/references/ChildEntitiesType.js +18 -0
- package/dist/src/node/schema/types/references/IncludeIdentifierType.d.ts +7 -13
- package/dist/src/node/schema/types/references/IncludeIdentifierType.js +12 -12
- package/dist/src/node/schema/types/references/NestedEntityMapType.d.ts +7 -17
- package/dist/src/node/schema/types/references/NestedEntityMapType.js +11 -13
- package/dist/src/node/schema/types/references/ReferenceIdentifierType.d.ts +4 -10
- package/dist/src/node/schema/types/references/ReferenceIdentifierType.js +3 -5
- package/dist/src/node/schema/types/references/TypeArgumentType.d.ts +5 -10
- package/dist/src/node/schema/types/references/TypeArgumentType.js +10 -5
- package/dist/src/node/server/api/declarations.js +24 -6
- package/dist/src/node/server/api/index.js +11 -0
- package/dist/src/node/server/api/instances.js +9 -6
- package/dist/src/node/server/index.d.ts +6 -1
- package/dist/src/node/server/index.js +7 -3
- package/dist/src/node/server/init.d.ts +2 -1
- package/dist/src/node/server/init.js +11 -11
- package/dist/src/node/server/utils/childInstances.d.ts +4 -0
- package/dist/src/node/server/utils/childInstances.js +41 -0
- package/dist/src/node/server/utils/instanceOperations.d.ts +8 -0
- package/dist/src/node/server/utils/instanceOperations.js +107 -0
- package/dist/src/node/server/utils/locales.d.ts +2 -0
- package/dist/src/node/server/utils/locales.js +8 -0
- package/dist/src/node/utils/childInstances.d.ts +32 -0
- package/dist/src/node/utils/childInstances.js +164 -0
- package/dist/src/node/utils/displayName.d.ts +2 -1
- package/dist/src/node/utils/displayName.js +5 -4
- package/dist/src/node/utils/files.d.ts +5 -0
- package/dist/src/node/utils/files.js +9 -0
- package/dist/src/node/utils/instanceOperations.d.ts +14 -0
- package/dist/src/node/utils/instanceOperations.js +88 -0
- package/dist/src/node/utils/instances.d.ts +1 -1
- package/dist/src/node/utils/instances.js +12 -6
- package/dist/src/node/utils/references.d.ts +3 -1
- package/dist/src/node/utils/references.js +43 -18
- package/dist/src/node/utils/referencesWorker.d.ts +5 -0
- package/dist/src/node/utils/referencesWorker.js +22 -0
- package/dist/src/node/utils/workers.d.ts +15 -0
- package/dist/src/node/utils/workers.js +90 -0
- package/dist/src/shared/api.d.ts +14 -1
- package/dist/src/shared/schema/Node.d.ts +63 -0
- package/dist/src/shared/schema/Node.js +128 -0
- package/dist/src/shared/schema/TypeParameter.d.ts +9 -0
- package/dist/src/shared/schema/TypeParameter.js +2 -0
- package/dist/src/shared/schema/declarations/Declaration.d.ts +21 -0
- package/dist/src/shared/schema/declarations/Declaration.js +4 -0
- package/dist/src/shared/schema/declarations/EntityDecl.d.ts +32 -0
- package/dist/src/shared/schema/declarations/EntityDecl.js +8 -0
- package/dist/src/shared/schema/declarations/EnumDecl.d.ts +11 -0
- package/dist/src/shared/schema/declarations/EnumDecl.js +9 -0
- package/dist/src/shared/schema/declarations/TypeAliasDecl.d.ts +11 -0
- package/dist/src/shared/schema/declarations/TypeAliasDecl.js +7 -0
- package/dist/src/shared/schema/types/ArrayType.d.ts +11 -0
- package/dist/src/shared/schema/types/ArrayType.js +8 -0
- package/dist/src/shared/schema/types/BooleanType.d.ts +7 -0
- package/dist/src/shared/schema/types/BooleanType.js +2 -0
- package/dist/src/shared/schema/types/ChildEntitiesType.d.ts +8 -0
- package/dist/src/shared/schema/types/ChildEntitiesType.js +2 -0
- package/dist/src/shared/schema/types/DateType.d.ts +8 -0
- package/dist/src/shared/schema/types/DateType.js +2 -0
- package/dist/src/shared/schema/types/EnumType.d.ts +14 -0
- package/dist/src/shared/schema/types/EnumType.js +28 -0
- package/dist/src/shared/schema/types/FloatType.d.ts +11 -0
- package/dist/src/shared/schema/types/FloatType.js +2 -0
- package/dist/src/shared/schema/types/IncludeIdentifierType.d.ts +11 -0
- package/dist/src/shared/schema/types/IncludeIdentifierType.js +13 -0
- package/dist/src/shared/schema/types/IntegerType.d.ts +11 -0
- package/dist/src/shared/schema/types/IntegerType.js +2 -0
- package/dist/src/shared/schema/types/NestedEntityMapType.d.ts +17 -0
- package/dist/src/shared/schema/types/NestedEntityMapType.js +14 -0
- package/dist/src/shared/schema/types/ObjectType.d.ts +19 -0
- package/dist/src/shared/schema/types/ObjectType.js +14 -0
- package/dist/src/shared/schema/types/ReferenceIdentifierType.d.ts +8 -0
- package/dist/src/shared/schema/types/ReferenceIdentifierType.js +2 -0
- package/dist/src/shared/schema/types/StringType.d.ts +10 -0
- package/dist/src/shared/schema/types/StringType.js +2 -0
- package/dist/src/shared/schema/types/Type.d.ts +20 -0
- package/dist/src/shared/schema/types/TypeArgumentType.d.ts +12 -0
- package/dist/src/shared/schema/types/TypeArgumentType.js +7 -0
- package/dist/src/shared/utils/array.d.ts +4 -0
- package/dist/src/shared/utils/array.js +30 -0
- package/dist/src/shared/utils/async.d.ts +8 -0
- package/dist/src/shared/utils/async.js +35 -0
- package/dist/src/shared/utils/compare.js +3 -3
- package/dist/src/shared/utils/displayName.d.ts +6 -2
- package/dist/src/shared/utils/displayName.js +21 -8
- package/dist/src/shared/utils/instances.d.ts +2 -3
- package/dist/src/shared/utils/instances.js +3 -1
- package/dist/src/shared/utils/markdown.d.ts +4 -0
- package/dist/src/shared/utils/markdown.js +173 -110
- package/dist/src/shared/utils/object.d.ts +2 -0
- package/dist/src/shared/utils/object.js +2 -0
- package/dist/src/shared/utils/result.d.ts +8 -2
- package/dist/src/shared/utils/result.js +1 -1
- package/dist/src/web/api/declarations.d.ts +26 -0
- package/dist/src/web/api/declarations.js +51 -0
- package/dist/src/web/api/git.d.ts +14 -0
- package/dist/src/web/api/git.js +20 -0
- package/dist/src/web/api/index.d.ts +1 -0
- package/dist/src/web/api/index.js +2 -0
- package/dist/src/web/api/instances.d.ts +2 -0
- package/dist/src/web/api/instances.js +2 -0
- package/dist/src/web/components/Git.js +19 -16
- package/dist/src/web/components/InstanceRouteSkeleton.d.ts +42 -0
- package/dist/src/web/components/InstanceRouteSkeleton.js +114 -0
- package/dist/src/web/components/Layout.js +3 -2
- package/dist/src/web/components/ModalDialog.d.ts +3 -0
- package/dist/src/web/components/ModalDialog.js +16 -0
- package/dist/src/web/components/Settings.d.ts +2 -0
- package/dist/src/web/components/Settings.js +47 -0
- package/dist/src/web/components/typeInputs/ArrayTypeInput.d.ts +3 -11
- package/dist/src/web/components/typeInputs/ArrayTypeInput.js +5 -4
- package/dist/src/web/components/typeInputs/BooleanTypeInput.d.ts +3 -6
- package/dist/src/web/components/typeInputs/BooleanTypeInput.js +2 -2
- package/dist/src/web/components/typeInputs/ChildEntitiesTypeInput.d.ts +6 -0
- package/dist/src/web/components/typeInputs/ChildEntitiesTypeInput.js +27 -0
- package/dist/src/web/components/typeInputs/DateTypeInput.d.ts +3 -6
- package/dist/src/web/components/typeInputs/DateTypeInput.js +2 -2
- package/dist/src/web/components/typeInputs/EnumTypeInput.d.ts +3 -11
- package/dist/src/web/components/typeInputs/EnumTypeInput.js +55 -22
- package/dist/src/web/components/typeInputs/FloatTypeInput.d.ts +3 -6
- package/dist/src/web/components/typeInputs/FloatTypeInput.js +2 -2
- package/dist/src/web/components/typeInputs/GenericTypeArgumentIdentifierTypeInput.d.ts +3 -4
- package/dist/src/web/components/typeInputs/IncludeIdentifierTypeInput.d.ts +3 -11
- package/dist/src/web/components/typeInputs/IncludeIdentifierTypeInput.js +3 -2
- package/dist/src/web/components/typeInputs/IntegerTypeInput.d.ts +3 -6
- package/dist/src/web/components/typeInputs/IntegerTypeInput.js +2 -2
- package/dist/src/web/components/typeInputs/NestedEntityMapTypeInput.d.ts +3 -11
- package/dist/src/web/components/typeInputs/NestedEntityMapTypeInput.js +5 -4
- package/dist/src/web/components/typeInputs/ObjectTypeInput.d.ts +3 -11
- package/dist/src/web/components/typeInputs/ObjectTypeInput.js +8 -5
- package/dist/src/web/components/typeInputs/ReferenceIdentifierTypeInput.d.ts +3 -8
- package/dist/src/web/components/typeInputs/ReferenceIdentifierTypeInput.js +2 -2
- package/dist/src/web/components/typeInputs/StringTypeInput.d.ts +3 -6
- package/dist/src/web/components/typeInputs/StringTypeInput.js +3 -3
- package/dist/src/web/components/typeInputs/TypeInput.d.ts +12 -4
- package/dist/src/web/components/typeInputs/TypeInput.js +22 -17
- package/dist/src/web/components/typeInputs/utils/ValidationErrors.d.ts +1 -0
- package/dist/src/web/components/typeInputs/utils/ValidationErrors.js +1 -3
- package/dist/src/web/context/config.d.ts +11 -0
- package/dist/src/web/context/config.js +6 -0
- package/dist/src/web/context/entities.d.ts +8 -5
- package/dist/src/web/context/entities.js +1 -1
- package/dist/src/web/context/settings.d.ts +8 -0
- package/dist/src/web/context/settings.js +10 -0
- package/dist/src/web/hooks/useEntityFromRoute.d.ts +1 -1
- package/dist/src/web/hooks/useEntityFromRoute.js +2 -2
- package/dist/src/web/hooks/useInstanceNamesByEntity.d.ts +1 -1
- package/dist/src/web/hooks/useInstanceNamesByEntity.js +4 -2
- package/dist/src/web/hooks/useMappedAPIResource.js +2 -4
- package/dist/src/web/hooks/useSecondaryDeclarations.d.ts +1 -1
- package/dist/src/web/hooks/useSecondaryDeclarations.js +8 -4
- package/dist/src/web/hooks/useSettings.d.ts +10 -0
- package/dist/src/web/hooks/useSettings.js +51 -0
- package/dist/src/web/index.js +11 -5
- package/dist/src/web/routes/CreateInstance.js +40 -79
- package/dist/src/web/routes/Entity.js +42 -19
- package/dist/src/web/routes/Home.js +24 -5
- package/dist/src/web/routes/Instance.js +34 -85
- package/dist/src/web/utils/InlineMarkdown.d.ts +1 -1
- package/dist/src/web/utils/InlineMarkdown.js +13 -1
- package/dist/src/web/utils/api.d.ts +25 -0
- package/dist/src/web/utils/api.js +34 -0
- package/dist/src/web/utils/typeSkeleton.d.ts +1 -1
- package/dist/src/web/utils/typeSkeleton.js +2 -0
- package/package.json +2 -1
- package/public/css/styles.css +171 -12
- package/dist/src/node/schema/types/primitives/NumericType.d.ts +0 -6
- package/dist/src/node/schema/types/primitives/NumericType.js +0 -2
- package/dist/src/node/schema/types/primitives/PrimitiveType.d.ts +0 -6
- package/dist/src/node/schema/validation/type.d.ts +0 -4
- package/dist/src/node/schema/validation/type.js +0 -1
- package/dist/src/node/server/api/instanceOperations.d.ts +0 -6
- package/dist/src/node/server/api/instanceOperations.js +0 -93
- package/dist/src/shared/config.d.ts +0 -11
- package/dist/src/shared/config.js +0 -1
- package/dist/src/web/api.d.ts +0 -24
- package/dist/src/web/api.js +0 -201
- /package/dist/src/{node/schema/types/primitives/PrimitiveType.js → shared/schema/types/Type.js} +0 -0
|
@@ -1,91 +1,35 @@
|
|
|
1
1
|
import { assertExhaustive } from "../../../shared/utils/typeSafety.js";
|
|
2
|
-
import { isDecl } from "../declarations/Declaration.js";
|
|
3
2
|
import { NodeKind } from "../Node.js";
|
|
4
|
-
import { formatArrayValue
|
|
5
|
-
import { formatEnumType
|
|
6
|
-
import { formatObjectValue
|
|
7
|
-
import { formatBooleanValue
|
|
8
|
-
import { formatDateValue
|
|
9
|
-
import { formatFloatValue
|
|
10
|
-
import { formatIntegerValue
|
|
11
|
-
import { formatStringValue
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
case NodeKind.ArrayType:
|
|
19
|
-
return validateArrayType(helpers, type, value);
|
|
20
|
-
case NodeKind.ObjectType:
|
|
21
|
-
return validateObjectType(helpers, type, value);
|
|
22
|
-
case NodeKind.BooleanType:
|
|
23
|
-
return validateBooleanType(helpers, type, value);
|
|
24
|
-
case NodeKind.DateType:
|
|
25
|
-
return validateDateType(helpers, type, value);
|
|
26
|
-
case NodeKind.FloatType:
|
|
27
|
-
return validateFloatType(helpers, type, value);
|
|
28
|
-
case NodeKind.IntegerType:
|
|
29
|
-
return validateIntegerType(helpers, type, value);
|
|
30
|
-
case NodeKind.StringType:
|
|
31
|
-
return validateStringType(helpers, type, value);
|
|
32
|
-
case NodeKind.TypeArgumentType:
|
|
33
|
-
return validateTypeArgumentType(helpers, type, value);
|
|
34
|
-
case NodeKind.ReferenceIdentifierType:
|
|
35
|
-
return validateReferenceIdentifierType(helpers, type, value);
|
|
36
|
-
case NodeKind.IncludeIdentifierType:
|
|
37
|
-
return validateIncludeIdentifierType(helpers, type, value);
|
|
38
|
-
case NodeKind.NestedEntityMapType:
|
|
39
|
-
return validateNestedEntityMapType(helpers, type, value);
|
|
40
|
-
case NodeKind.EnumType:
|
|
41
|
-
return validateEnumType(helpers, type, value);
|
|
42
|
-
default:
|
|
43
|
-
return assertExhaustive(type);
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
export const resolveTypeArgumentsInType = (args, type) => {
|
|
47
|
-
switch (type.kind) {
|
|
48
|
-
case NodeKind.ArrayType:
|
|
49
|
-
return resolveTypeArgumentsInArrayType(args, type);
|
|
50
|
-
case NodeKind.ObjectType:
|
|
51
|
-
return resolveTypeArgumentsInObjectType(args, type);
|
|
52
|
-
case NodeKind.BooleanType:
|
|
53
|
-
case NodeKind.DateType:
|
|
54
|
-
case NodeKind.FloatType:
|
|
55
|
-
case NodeKind.IntegerType:
|
|
56
|
-
case NodeKind.StringType:
|
|
57
|
-
return type;
|
|
58
|
-
case NodeKind.TypeArgumentType:
|
|
59
|
-
return resolveTypeArgumentsInTypeArgumentType(args, type);
|
|
60
|
-
case NodeKind.ReferenceIdentifierType:
|
|
61
|
-
return resolveTypeArgumentsInReferenceIdentifierType(args, type);
|
|
62
|
-
case NodeKind.IncludeIdentifierType:
|
|
63
|
-
return resolveTypeArgumentsInIncludeIdentifierType(args, type);
|
|
64
|
-
case NodeKind.NestedEntityMapType:
|
|
65
|
-
return resolveTypeArgumentsInNestedEntityMapType(args, type);
|
|
66
|
-
case NodeKind.EnumType:
|
|
67
|
-
return resolveTypeArgumentsInEnumType(args, type);
|
|
68
|
-
default:
|
|
69
|
-
return assertExhaustive(type);
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
export function walkTypeNodeTree(callbackFn, type) {
|
|
3
|
+
import { formatArrayValue } from "./generic/ArrayType.js";
|
|
4
|
+
import { formatEnumType } from "./generic/EnumType.js";
|
|
5
|
+
import { formatObjectValue } from "./generic/ObjectType.js";
|
|
6
|
+
import { formatBooleanValue } from "./primitives/BooleanType.js";
|
|
7
|
+
import { formatDateValue } from "./primitives/DateType.js";
|
|
8
|
+
import { formatFloatValue } from "./primitives/FloatType.js";
|
|
9
|
+
import { formatIntegerValue } from "./primitives/IntegerType.js";
|
|
10
|
+
import { formatStringValue } from "./primitives/StringType.js";
|
|
11
|
+
import { formatChildEntitiesValue } from "./references/ChildEntitiesType.js";
|
|
12
|
+
import { formatIncludeIdentifierValue } from "./references/IncludeIdentifierType.js";
|
|
13
|
+
import { formatNestedEntityMapValue } from "./references/NestedEntityMapType.js";
|
|
14
|
+
import { formatReferenceIdentifierValue } from "./references/ReferenceIdentifierType.js";
|
|
15
|
+
import { formatTypeArgumentValue } from "./references/TypeArgumentType.js";
|
|
16
|
+
export function walkTypeNodeTree(callbackFn, type, parentTypes, parentDecl) {
|
|
73
17
|
switch (type.kind) {
|
|
74
18
|
case NodeKind.ArrayType: {
|
|
75
|
-
callbackFn(type);
|
|
76
|
-
walkTypeNodeTree(callbackFn, type.items);
|
|
19
|
+
callbackFn(type, parentTypes, parentDecl);
|
|
20
|
+
walkTypeNodeTree(callbackFn, type.items, [...parentTypes, type], parentDecl);
|
|
77
21
|
return;
|
|
78
22
|
}
|
|
79
23
|
case NodeKind.ObjectType: {
|
|
80
|
-
callbackFn(type);
|
|
24
|
+
callbackFn(type, parentTypes, parentDecl);
|
|
81
25
|
Object.values(type.properties).forEach(prop => {
|
|
82
|
-
walkTypeNodeTree(callbackFn, prop.type);
|
|
26
|
+
walkTypeNodeTree(callbackFn, prop.type, [...parentTypes, type], parentDecl);
|
|
83
27
|
});
|
|
84
28
|
return;
|
|
85
29
|
}
|
|
86
30
|
case NodeKind.NestedEntityMapType: {
|
|
87
|
-
callbackFn(type);
|
|
88
|
-
walkTypeNodeTree(callbackFn, type.type.value);
|
|
31
|
+
callbackFn(type, parentTypes, parentDecl);
|
|
32
|
+
walkTypeNodeTree(callbackFn, type.type.value, [...parentTypes, type], parentDecl);
|
|
89
33
|
return;
|
|
90
34
|
}
|
|
91
35
|
case NodeKind.BooleanType:
|
|
@@ -94,22 +38,23 @@ export function walkTypeNodeTree(callbackFn, type) {
|
|
|
94
38
|
case NodeKind.IntegerType:
|
|
95
39
|
case NodeKind.StringType:
|
|
96
40
|
case NodeKind.TypeArgumentType:
|
|
97
|
-
case NodeKind.ReferenceIdentifierType:
|
|
98
|
-
|
|
41
|
+
case NodeKind.ReferenceIdentifierType:
|
|
42
|
+
case NodeKind.ChildEntitiesType: {
|
|
43
|
+
callbackFn(type, parentTypes, parentDecl);
|
|
99
44
|
return;
|
|
100
45
|
}
|
|
101
46
|
case NodeKind.IncludeIdentifierType: {
|
|
102
|
-
callbackFn(type);
|
|
47
|
+
callbackFn(type, parentTypes, parentDecl);
|
|
103
48
|
type.args.forEach(arg => {
|
|
104
|
-
walkTypeNodeTree(callbackFn, arg);
|
|
49
|
+
walkTypeNodeTree(callbackFn, arg, [...parentTypes, type], parentDecl);
|
|
105
50
|
});
|
|
106
51
|
return;
|
|
107
52
|
}
|
|
108
53
|
case NodeKind.EnumType: {
|
|
109
|
-
callbackFn(type);
|
|
54
|
+
callbackFn(type, parentTypes, parentDecl);
|
|
110
55
|
Object.values(type.values).forEach(value => {
|
|
111
56
|
if (value.type) {
|
|
112
|
-
walkTypeNodeTree(callbackFn, value.type);
|
|
57
|
+
walkTypeNodeTree(callbackFn, value.type, [...parentTypes, type], parentDecl);
|
|
113
58
|
}
|
|
114
59
|
});
|
|
115
60
|
return;
|
|
@@ -118,31 +63,6 @@ export function walkTypeNodeTree(callbackFn, type) {
|
|
|
118
63
|
return assertExhaustive(type);
|
|
119
64
|
}
|
|
120
65
|
}
|
|
121
|
-
export const getParentDecl = (type) => {
|
|
122
|
-
if (type.parent === undefined) {
|
|
123
|
-
return undefined;
|
|
124
|
-
}
|
|
125
|
-
else if (isDecl(type.parent)) {
|
|
126
|
-
return type.parent;
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
return getParentDecl(type.parent);
|
|
130
|
-
}
|
|
131
|
-
};
|
|
132
|
-
/**
|
|
133
|
-
* Sets the `parent` property of the passed `type` to the passed `parentNode`.
|
|
134
|
-
*
|
|
135
|
-
* The property is set on the instance. It does not create a new instance.
|
|
136
|
-
*/
|
|
137
|
-
export const setParent = (type, parentNode) => {
|
|
138
|
-
;
|
|
139
|
-
type.parent = parentNode;
|
|
140
|
-
return type;
|
|
141
|
-
};
|
|
142
|
-
export const removeParentKey = (type) => {
|
|
143
|
-
const { parent: _parent, ...rest } = type;
|
|
144
|
-
return rest;
|
|
145
|
-
};
|
|
146
66
|
export const findTypeAtPath = (type, path) => {
|
|
147
67
|
const [head, ...tail] = path;
|
|
148
68
|
if (head === undefined) {
|
|
@@ -159,66 +79,6 @@ export const findTypeAtPath = (type, path) => {
|
|
|
159
79
|
}
|
|
160
80
|
return undefined;
|
|
161
81
|
};
|
|
162
|
-
export const serializeType = type => {
|
|
163
|
-
switch (type.kind) {
|
|
164
|
-
case NodeKind.ArrayType:
|
|
165
|
-
return serializeArrayType(type);
|
|
166
|
-
case NodeKind.ObjectType:
|
|
167
|
-
return serializeObjectType(type);
|
|
168
|
-
case NodeKind.BooleanType:
|
|
169
|
-
return serializeBooleanType(type);
|
|
170
|
-
case NodeKind.DateType:
|
|
171
|
-
return serializeDateType(type);
|
|
172
|
-
case NodeKind.FloatType:
|
|
173
|
-
return serializeFloatType(type);
|
|
174
|
-
case NodeKind.IntegerType:
|
|
175
|
-
return serializeIntegerType(type);
|
|
176
|
-
case NodeKind.StringType:
|
|
177
|
-
return serializeStringType(type);
|
|
178
|
-
case NodeKind.TypeArgumentType:
|
|
179
|
-
return serializeTypeArgumentType(type);
|
|
180
|
-
case NodeKind.ReferenceIdentifierType:
|
|
181
|
-
return serializeReferenceIdentifierType(type);
|
|
182
|
-
case NodeKind.IncludeIdentifierType:
|
|
183
|
-
return serializeIncludeIdentifierType(type);
|
|
184
|
-
case NodeKind.NestedEntityMapType:
|
|
185
|
-
return serializeNestedEntityMapType(type);
|
|
186
|
-
case NodeKind.EnumType:
|
|
187
|
-
return serializeEnumType(type);
|
|
188
|
-
default:
|
|
189
|
-
return assertExhaustive(type);
|
|
190
|
-
}
|
|
191
|
-
};
|
|
192
|
-
export const getReferencesForType = (type, value) => {
|
|
193
|
-
switch (type.kind) {
|
|
194
|
-
case NodeKind.ArrayType:
|
|
195
|
-
return getReferencesForArrayType(type, value);
|
|
196
|
-
case NodeKind.ObjectType:
|
|
197
|
-
return getReferencesForObjectType(type, value);
|
|
198
|
-
case NodeKind.BooleanType:
|
|
199
|
-
return getReferencesForBooleanType(type, value);
|
|
200
|
-
case NodeKind.DateType:
|
|
201
|
-
return getReferencesForDateType(type, value);
|
|
202
|
-
case NodeKind.FloatType:
|
|
203
|
-
return getReferencesForFloatType(type, value);
|
|
204
|
-
case NodeKind.IntegerType:
|
|
205
|
-
return getReferencesForIntegerType(type, value);
|
|
206
|
-
case NodeKind.StringType:
|
|
207
|
-
return getReferencesForStringType(type, value);
|
|
208
|
-
case NodeKind.TypeArgumentType:
|
|
209
|
-
return getReferencesForTypeArgumentType(type, value);
|
|
210
|
-
case NodeKind.ReferenceIdentifierType:
|
|
211
|
-
return getReferencesForReferenceIdentifierType(type, value);
|
|
212
|
-
case NodeKind.IncludeIdentifierType:
|
|
213
|
-
return getReferencesForIncludeIdentifierType(type, value);
|
|
214
|
-
case NodeKind.NestedEntityMapType:
|
|
215
|
-
return getReferencesForNestedEntityMapType(type, value);
|
|
216
|
-
case NodeKind.EnumType:
|
|
217
|
-
return getReferencesForEnumType(type, value);
|
|
218
|
-
default:
|
|
219
|
-
return assertExhaustive(type);
|
|
220
|
-
}
|
|
221
|
-
};
|
|
222
82
|
export const formatValue = (type, value) => {
|
|
223
83
|
switch (type.kind) {
|
|
224
84
|
case NodeKind.ArrayType:
|
|
@@ -245,6 +105,8 @@ export const formatValue = (type, value) => {
|
|
|
245
105
|
return formatReferenceIdentifierValue(type, value);
|
|
246
106
|
case NodeKind.EnumType:
|
|
247
107
|
return formatEnumType(type, value);
|
|
108
|
+
case NodeKind.ChildEntitiesType:
|
|
109
|
+
return formatChildEntitiesValue(type, value);
|
|
248
110
|
default:
|
|
249
111
|
return assertExhaustive(type);
|
|
250
112
|
}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import type { GetNestedDeclarations } from "../../
|
|
2
|
-
import type { GetReferences, Node, Serializer } from "../../Node.ts";
|
|
1
|
+
import type { GetNestedDeclarations, GetReferences, Predicate, Serializer, TypeArgumentsResolver, Validator } from "../../Node.ts";
|
|
3
2
|
import { NodeKind } from "../../Node.ts";
|
|
4
|
-
import type {
|
|
5
|
-
import type { BaseType, SerializedBaseType, SerializedType, StructureFormatter, Type } from "../Type.ts";
|
|
3
|
+
import type { BaseType, StructureFormatter, Type } from "../Type.ts";
|
|
6
4
|
export interface ArrayType<T extends Type = Type> extends BaseType {
|
|
7
5
|
kind: NodeKind["ArrayType"];
|
|
8
6
|
minItems?: number;
|
|
@@ -10,23 +8,16 @@ export interface ArrayType<T extends Type = Type> extends BaseType {
|
|
|
10
8
|
uniqueItems?: boolean;
|
|
11
9
|
items: T;
|
|
12
10
|
}
|
|
13
|
-
export interface SerializedArrayType<T extends SerializedType = SerializedType> extends SerializedBaseType {
|
|
14
|
-
kind: NodeKind["ArrayType"];
|
|
15
|
-
minItems?: number;
|
|
16
|
-
maxItems?: number;
|
|
17
|
-
uniqueItems?: boolean;
|
|
18
|
-
items: T;
|
|
19
|
-
}
|
|
20
11
|
export declare const ArrayType: <T extends Type>(items: T, options?: {
|
|
21
12
|
minItems?: number;
|
|
22
13
|
maxItems?: number;
|
|
23
14
|
uniqueItems?: boolean;
|
|
24
15
|
}) => ArrayType<T>;
|
|
25
16
|
export { ArrayType as Array };
|
|
26
|
-
export declare const isArrayType:
|
|
17
|
+
export declare const isArrayType: Predicate<ArrayType>;
|
|
27
18
|
export declare const getNestedDeclarationsInArrayType: GetNestedDeclarations<ArrayType>;
|
|
28
19
|
export declare const validateArrayType: Validator<ArrayType>;
|
|
29
|
-
export declare const resolveTypeArgumentsInArrayType:
|
|
30
|
-
export declare const serializeArrayType: Serializer<ArrayType
|
|
20
|
+
export declare const resolveTypeArgumentsInArrayType: TypeArgumentsResolver<ArrayType>;
|
|
21
|
+
export declare const serializeArrayType: Serializer<ArrayType>;
|
|
31
22
|
export declare const getReferencesForArrayType: GetReferences<ArrayType>;
|
|
32
23
|
export declare const formatArrayValue: StructureFormatter<ArrayType>;
|
|
@@ -2,23 +2,18 @@ import { parallelizeErrors } from "../../../../shared/utils/validation.js";
|
|
|
2
2
|
import { validateArrayConstraints } from "../../../../shared/validation/array.js";
|
|
3
3
|
import { wrapErrorsIfAny } from "../../../utils/error.js";
|
|
4
4
|
import { json, key } from "../../../utils/errorFormatting.js";
|
|
5
|
-
import { getNestedDeclarations } from "../../
|
|
6
|
-
import { NodeKind } from "../../Node.js";
|
|
5
|
+
import { getNestedDeclarations, getReferences, NodeKind, resolveTypeArguments, serializeNode, validateType, } from "../../Node.js";
|
|
7
6
|
import { validateOption } from "../../validation/options.js";
|
|
8
|
-
import { formatValue
|
|
9
|
-
export const ArrayType = (items, options = {}) => {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
};
|
|
17
|
-
setParent(type.items, type);
|
|
18
|
-
return type;
|
|
19
|
-
};
|
|
7
|
+
import { formatValue } from "../Type.js";
|
|
8
|
+
export const ArrayType = (items, options = {}) => ({
|
|
9
|
+
...options,
|
|
10
|
+
kind: NodeKind.ArrayType,
|
|
11
|
+
minItems: validateOption(options.minItems, "minItems", option => Number.isInteger(option) && option >= 0),
|
|
12
|
+
maxItems: validateOption(options.maxItems, "maxItems", option => Number.isInteger(option) && option >= 0),
|
|
13
|
+
items,
|
|
14
|
+
});
|
|
20
15
|
export { ArrayType as Array };
|
|
21
|
-
export const isArrayType =
|
|
16
|
+
export const isArrayType = node => node.kind === NodeKind.ArrayType;
|
|
22
17
|
export const getNestedDeclarationsInArrayType = (addedDecls, type) => getNestedDeclarations(addedDecls, type.items);
|
|
23
18
|
export const validateArrayType = (helpers, type, value) => {
|
|
24
19
|
if (!Array.isArray(value)) {
|
|
@@ -26,15 +21,15 @@ export const validateArrayType = (helpers, type, value) => {
|
|
|
26
21
|
}
|
|
27
22
|
return parallelizeErrors([
|
|
28
23
|
...validateArrayConstraints(type, value),
|
|
29
|
-
...value.map((item, index) => wrapErrorsIfAny(`at index ${key(index.toString(), helpers.useStyling)}`,
|
|
24
|
+
...value.map((item, index) => wrapErrorsIfAny(`at index ${key(index.toString(), helpers.useStyling)}`, validateType(helpers, type.items, item))),
|
|
30
25
|
]);
|
|
31
26
|
};
|
|
32
|
-
export const resolveTypeArgumentsInArrayType = (args, type) => ArrayType(
|
|
27
|
+
export const resolveTypeArgumentsInArrayType = (args, type) => ArrayType(resolveTypeArguments(args, type.items), {
|
|
33
28
|
...type,
|
|
34
29
|
});
|
|
35
30
|
export const serializeArrayType = type => ({
|
|
36
|
-
...
|
|
37
|
-
items:
|
|
31
|
+
...type,
|
|
32
|
+
items: serializeNode(type.items),
|
|
38
33
|
});
|
|
39
|
-
export const getReferencesForArrayType = (type, value) => Array.isArray(value) ? value.flatMap(item =>
|
|
34
|
+
export const getReferencesForArrayType = (type, value) => Array.isArray(value) ? value.flatMap(item => getReferences(type.items, item)) : [];
|
|
40
35
|
export const formatArrayValue = (type, value) => Array.isArray(value) ? value.map(item => formatValue(type.items, item)) : value;
|
|
@@ -1,39 +1,27 @@
|
|
|
1
|
-
import type { GetNestedDeclarations } from "../../
|
|
2
|
-
import type { GetReferences, Node, Serializer } from "../../Node.ts";
|
|
1
|
+
import type { GetNestedDeclarations, GetReferences, Predicate, Serializer, TypeArgumentsResolver, Validator } from "../../Node.ts";
|
|
3
2
|
import { NodeKind } from "../../Node.ts";
|
|
4
|
-
import type {
|
|
5
|
-
import type { BaseType, SerializedBaseType, SerializedType, StructureFormatter, Type } from "../Type.ts";
|
|
3
|
+
import type { BaseType, StructureFormatter, Type } from "../Type.ts";
|
|
6
4
|
export interface EnumType<T extends Record<string, EnumCaseDecl> = Record<string, EnumCaseDecl>> extends BaseType {
|
|
7
5
|
kind: NodeKind["EnumType"];
|
|
8
6
|
values: T;
|
|
9
7
|
}
|
|
10
|
-
export interface SerializedEnumType<T extends Record<string, SerializedEnumCaseDecl> = Record<string, SerializedEnumCaseDecl>> extends SerializedBaseType {
|
|
11
|
-
kind: NodeKind["EnumType"];
|
|
12
|
-
values: T;
|
|
13
|
-
}
|
|
14
8
|
export declare const EnumType: <T extends Record<string, EnumCaseDecl> = Record<string, EnumCaseDecl>>(values: T) => EnumType<T>;
|
|
15
|
-
export declare const isEnumType:
|
|
9
|
+
export declare const isEnumType: Predicate<EnumType>;
|
|
16
10
|
export declare const getNestedDeclarationsInEnumType: GetNestedDeclarations<EnumType>;
|
|
17
11
|
export declare const validateEnumType: Validator<EnumType>;
|
|
18
|
-
export declare const resolveTypeArgumentsInEnumType:
|
|
12
|
+
export declare const resolveTypeArgumentsInEnumType: TypeArgumentsResolver<EnumType>;
|
|
19
13
|
export interface EnumCaseDecl<T extends Type | null = Type | null> {
|
|
20
14
|
kind: NodeKind["EnumCaseDecl"];
|
|
21
15
|
type: T;
|
|
22
16
|
comment?: string;
|
|
23
17
|
isDeprecated?: boolean;
|
|
24
18
|
}
|
|
25
|
-
export interface SerializedEnumCaseDecl<T extends SerializedType | null = SerializedType | null> {
|
|
26
|
-
kind: NodeKind["EnumCaseDecl"];
|
|
27
|
-
type: T;
|
|
28
|
-
comment?: string;
|
|
29
|
-
isDeprecated?: boolean;
|
|
30
|
-
}
|
|
31
19
|
export declare const EnumCaseDecl: <T extends Type | null>(options: {
|
|
32
20
|
type: T;
|
|
33
21
|
comment?: string;
|
|
34
22
|
isDeprecated?: boolean;
|
|
35
23
|
}) => EnumCaseDecl<T>;
|
|
36
24
|
export { EnumCaseDecl as EnumCase };
|
|
37
|
-
export declare const serializeEnumType: Serializer<EnumType
|
|
25
|
+
export declare const serializeEnumType: Serializer<EnumType>;
|
|
38
26
|
export declare const getReferencesForEnumType: GetReferences<EnumType>;
|
|
39
27
|
export declare const formatEnumType: StructureFormatter<EnumType>;
|
|
@@ -2,21 +2,13 @@ import { discriminatorKey } from "../../../../shared/enum.js";
|
|
|
2
2
|
import { parallelizeErrors } from "../../../../shared/utils/validation.js";
|
|
3
3
|
import { wrapErrorsIfAny } from "../../../utils/error.js";
|
|
4
4
|
import { json, key } from "../../../utils/errorFormatting.js";
|
|
5
|
-
import { getNestedDeclarations } from "../../
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
};
|
|
13
|
-
type.values = Object.fromEntries(Object.entries(values).map(([caseName, caseDef]) => [
|
|
14
|
-
caseName,
|
|
15
|
-
{ ...caseDef, type: caseDef.type === null ? null : { ...caseDef.type, parent: type } },
|
|
16
|
-
]));
|
|
17
|
-
return type;
|
|
18
|
-
};
|
|
19
|
-
export const isEnumType = (node) => node.kind === NodeKind.EnumType;
|
|
5
|
+
import { getNestedDeclarations, getReferences, NodeKind, resolveTypeArguments, serializeNode, validateType, } from "../../Node.js";
|
|
6
|
+
import { formatValue } from "../Type.js";
|
|
7
|
+
export const EnumType = (values) => ({
|
|
8
|
+
kind: NodeKind.EnumType,
|
|
9
|
+
values,
|
|
10
|
+
});
|
|
11
|
+
export const isEnumType = node => node.kind === NodeKind.EnumType;
|
|
20
12
|
export const getNestedDeclarationsInEnumType = (addedDecls, type) => Object.values(type.values).reduce((acc, caseMember) => caseMember.type === null ? acc : getNestedDeclarations(acc, caseMember.type), addedDecls);
|
|
21
13
|
export const validateEnumType = (helpers, type, value) => {
|
|
22
14
|
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
@@ -50,7 +42,7 @@ export const validateEnumType = (helpers, type, value) => {
|
|
|
50
42
|
];
|
|
51
43
|
}
|
|
52
44
|
return parallelizeErrors([
|
|
53
|
-
wrapErrorsIfAny(`at enum case ${key(`"${caseName}"`, helpers.useStyling)}`,
|
|
45
|
+
wrapErrorsIfAny(`at enum case ${key(`"${caseName}"`, helpers.useStyling)}`, validateType(helpers, associatedType, value[caseName])),
|
|
54
46
|
]);
|
|
55
47
|
}
|
|
56
48
|
return [];
|
|
@@ -59,7 +51,7 @@ export const resolveTypeArgumentsInEnumType = (args, type) => EnumType(Object.fr
|
|
|
59
51
|
key,
|
|
60
52
|
{
|
|
61
53
|
...caseMember,
|
|
62
|
-
type: type === null ? null :
|
|
54
|
+
type: type === null ? null : resolveTypeArguments(args, type),
|
|
63
55
|
},
|
|
64
56
|
])));
|
|
65
57
|
export const EnumCaseDecl = (options) => ({
|
|
@@ -68,12 +60,12 @@ export const EnumCaseDecl = (options) => ({
|
|
|
68
60
|
});
|
|
69
61
|
export { EnumCaseDecl as EnumCase };
|
|
70
62
|
export const serializeEnumType = type => ({
|
|
71
|
-
...
|
|
63
|
+
...type,
|
|
72
64
|
values: Object.fromEntries(Object.entries(type.values).map(([key, caseMember]) => [
|
|
73
65
|
key,
|
|
74
66
|
{
|
|
75
67
|
...caseMember,
|
|
76
|
-
type: caseMember.type === null ? null :
|
|
68
|
+
type: caseMember.type === null ? null : serializeNode(caseMember.type),
|
|
77
69
|
},
|
|
78
70
|
])),
|
|
79
71
|
});
|
|
@@ -90,7 +82,7 @@ export const getReferencesForEnumType = (type, value) => {
|
|
|
90
82
|
type.values[enumCase] !== undefined &&
|
|
91
83
|
type.values[enumCase].type !== null &&
|
|
92
84
|
enumCase in value
|
|
93
|
-
?
|
|
85
|
+
? getReferences(type.values[enumCase].type, value[enumCase])
|
|
94
86
|
: [];
|
|
95
87
|
};
|
|
96
88
|
export const formatEnumType = (type, value) => {
|
|
@@ -1,29 +1,22 @@
|
|
|
1
1
|
import type { ObjectConstraints } from "../../../../shared/validation/object.ts";
|
|
2
|
-
import type { GetNestedDeclarations } from "../../
|
|
3
|
-
import type { GetReferences, Node, Serializer } from "../../Node.ts";
|
|
2
|
+
import type { GetNestedDeclarations, GetReferences, Predicate, Serialized, TypeArgumentsResolver, Validator } from "../../Node.ts";
|
|
4
3
|
import { NodeKind } from "../../Node.ts";
|
|
5
|
-
import type {
|
|
6
|
-
import type { BaseType, SerializedBaseType, SerializedType, StructureFormatter, Type } from "../Type.ts";
|
|
4
|
+
import type { BaseType, StructureFormatter, Type } from "../Type.ts";
|
|
7
5
|
type TConstraint = Record<string, MemberDecl>;
|
|
8
6
|
export interface ObjectType<T extends TConstraint = TConstraint> extends BaseType, ObjectConstraints {
|
|
9
7
|
kind: NodeKind["ObjectType"];
|
|
10
8
|
properties: T;
|
|
11
9
|
}
|
|
12
|
-
type TSerializedConstraint = Record<string, SerializedMemberDecl>;
|
|
13
|
-
export interface SerializedObjectType<T extends TSerializedConstraint = TSerializedConstraint> extends SerializedBaseType, ObjectConstraints {
|
|
14
|
-
kind: NodeKind["ObjectType"];
|
|
15
|
-
properties: T;
|
|
16
|
-
}
|
|
17
10
|
export declare const ObjectType: <T extends TConstraint>(properties: T, options?: {
|
|
18
11
|
additionalProperties?: boolean;
|
|
19
12
|
minProperties?: number;
|
|
20
13
|
maxProperties?: number;
|
|
21
14
|
}) => ObjectType<T>;
|
|
22
15
|
export { ObjectType as Object };
|
|
23
|
-
export declare const isObjectType:
|
|
16
|
+
export declare const isObjectType: Predicate<ObjectType>;
|
|
24
17
|
export declare const getNestedDeclarationsInObjectType: GetNestedDeclarations<ObjectType>;
|
|
25
18
|
export declare const validateObjectType: Validator<ObjectType>;
|
|
26
|
-
export declare const resolveTypeArgumentsInObjectType:
|
|
19
|
+
export declare const resolveTypeArgumentsInObjectType: TypeArgumentsResolver<ObjectType>;
|
|
27
20
|
export interface MemberDecl<T extends Type = Type, R extends boolean = boolean> {
|
|
28
21
|
kind: NodeKind["MemberDecl"];
|
|
29
22
|
isRequired: R;
|
|
@@ -31,13 +24,6 @@ export interface MemberDecl<T extends Type = Type, R extends boolean = boolean>
|
|
|
31
24
|
comment?: string;
|
|
32
25
|
isDeprecated?: boolean;
|
|
33
26
|
}
|
|
34
|
-
export interface SerializedMemberDecl<T extends SerializedType = SerializedType, R extends boolean = boolean> {
|
|
35
|
-
kind: NodeKind["MemberDecl"];
|
|
36
|
-
isRequired: R;
|
|
37
|
-
type: T;
|
|
38
|
-
comment?: string;
|
|
39
|
-
isDeprecated?: boolean;
|
|
40
|
-
}
|
|
41
27
|
export declare const Required: <T extends Type>(options: {
|
|
42
28
|
comment?: string;
|
|
43
29
|
isDeprecated?: boolean;
|
|
@@ -48,6 +34,6 @@ export declare const Optional: <T extends Type>(options: {
|
|
|
48
34
|
isDeprecated?: boolean;
|
|
49
35
|
type: T;
|
|
50
36
|
}) => MemberDecl<T, false>;
|
|
51
|
-
export declare const serializeObjectType:
|
|
37
|
+
export declare const serializeObjectType: <P extends TConstraint>(type: ObjectType<P>) => Serialized<ObjectType<P>>;
|
|
52
38
|
export declare const getReferencesForObjectType: GetReferences<ObjectType>;
|
|
53
39
|
export declare const formatObjectValue: StructureFormatter<ObjectType>;
|
|
@@ -3,10 +3,10 @@ import { parallelizeErrors } from "../../../../shared/utils/validation.js";
|
|
|
3
3
|
import { validateObjectConstraints } from "../../../../shared/validation/object.js";
|
|
4
4
|
import { wrapErrorsIfAny } from "../../../utils/error.js";
|
|
5
5
|
import { json, key as keyColor } from "../../../utils/errorFormatting.js";
|
|
6
|
-
import { getNestedDeclarations } from "../../
|
|
7
|
-
import { NodeKind } from "../../Node.js";
|
|
6
|
+
import { getNestedDeclarations, getReferences, NodeKind, resolveTypeArguments, serializeNode, validateType, } from "../../Node.js";
|
|
8
7
|
import { validateOption } from "../../validation/options.js";
|
|
9
|
-
import {
|
|
8
|
+
import { isChildEntitiesType } from "../references/ChildEntitiesType.js";
|
|
9
|
+
import { formatValue } from "../Type.js";
|
|
10
10
|
const keyPattern = /^[a-zA-Z0-9][a-zA-Z0-9_]*$/;
|
|
11
11
|
export const ObjectType = (properties, options = {}) => {
|
|
12
12
|
const type = {
|
|
@@ -20,19 +20,17 @@ export const ObjectType = (properties, options = {}) => {
|
|
|
20
20
|
if (!keyPattern.test(key)) {
|
|
21
21
|
throw new TypeError(`Invalid object key "${key}". Object keys must not start with an underscore and may only contain letters, digits and underscores. (Pattern: ${keyPattern.source})`);
|
|
22
22
|
}
|
|
23
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
24
|
-
setParent(properties[key].type, type);
|
|
25
23
|
});
|
|
26
24
|
return type;
|
|
27
25
|
};
|
|
28
26
|
export { ObjectType as Object };
|
|
29
|
-
export const isObjectType =
|
|
27
|
+
export const isObjectType = node => node.kind === NodeKind.ObjectType;
|
|
30
28
|
export const getNestedDeclarationsInObjectType = (addedDecls, type) => Object.values(type.properties).reduce((acc, prop) => getNestedDeclarations(acc, prop.type), addedDecls);
|
|
31
29
|
export const validateObjectType = (helpers, type, value) => {
|
|
32
30
|
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
33
31
|
return [TypeError(`expected an object, but got ${json(value, helpers.useStyling)}`)];
|
|
34
32
|
}
|
|
35
|
-
const expectedKeys = Object.keys(type.properties);
|
|
33
|
+
const expectedKeys = Object.keys(type.properties).filter(key => type.properties[key] !== undefined && !isChildEntitiesType(type.properties[key].type));
|
|
36
34
|
return parallelizeErrors([
|
|
37
35
|
...validateObjectConstraints(type, expectedKeys, value),
|
|
38
36
|
...expectedKeys.map(key => {
|
|
@@ -42,13 +40,13 @@ export const validateObjectType = (helpers, type, value) => {
|
|
|
42
40
|
return TypeError(`missing required property ${keyColor(`"${key}"`, helpers.useStyling)}`);
|
|
43
41
|
}
|
|
44
42
|
else if (prop.isRequired || value[key] !== undefined) {
|
|
45
|
-
return wrapErrorsIfAny(`at object key ${keyColor(`"${key}"`, helpers.useStyling)}`,
|
|
43
|
+
return wrapErrorsIfAny(`at object key ${keyColor(`"${key}"`, helpers.useStyling)}`, validateType(helpers, prop.type, value[key]));
|
|
46
44
|
}
|
|
47
45
|
return undefined;
|
|
48
46
|
}),
|
|
49
47
|
]);
|
|
50
48
|
};
|
|
51
|
-
export const resolveTypeArgumentsInObjectType = (args, type) => ObjectType(Object.fromEntries(Object.entries(type.properties).map(([key, config]) => [key, { ...config, type:
|
|
49
|
+
export const resolveTypeArgumentsInObjectType = (args, type) => ObjectType(Object.fromEntries(Object.entries(type.properties).map(([key, config]) => [key, { ...config, type: resolveTypeArguments(args, config.type) }])), {
|
|
52
50
|
...type,
|
|
53
51
|
});
|
|
54
52
|
const MemberDecl = (isRequired, type, comment, isDeprecated) => ({
|
|
@@ -60,20 +58,18 @@ const MemberDecl = (isRequired, type, comment, isDeprecated) => ({
|
|
|
60
58
|
});
|
|
61
59
|
export const Required = (options) => MemberDecl(true, options.type, options.comment, options.isDeprecated);
|
|
62
60
|
export const Optional = (options) => MemberDecl(false, options.type, options.comment, options.isDeprecated);
|
|
63
|
-
export const serializeObjectType = type => ({
|
|
64
|
-
...
|
|
61
|
+
export const serializeObjectType = (type) => ({
|
|
62
|
+
...type,
|
|
65
63
|
properties: Object.fromEntries(Object.entries(type.properties).map(([key, prop]) => [
|
|
66
64
|
key,
|
|
67
65
|
{
|
|
68
66
|
...prop,
|
|
69
|
-
type:
|
|
67
|
+
type: serializeNode(prop.type),
|
|
70
68
|
},
|
|
71
69
|
])),
|
|
72
70
|
});
|
|
73
71
|
export const getReferencesForObjectType = (type, value) => typeof value === "object" && value !== null
|
|
74
|
-
? Object.entries(value).flatMap(([key, propValue]) =>
|
|
75
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
76
|
-
key in type.properties ? getReferencesForType(type.properties[key].type, propValue) : [])
|
|
72
|
+
? Object.entries(value).flatMap(([key, propValue]) => type.properties[key] ? getReferences(type.properties[key].type, propValue) : [])
|
|
77
73
|
: [];
|
|
78
74
|
export const formatObjectValue = (type, value) => typeof value === "object" && value !== null && !Array.isArray(value)
|
|
79
75
|
? sortObjectKeys(Object.fromEntries(Object.entries(value).map(([key, item]) => [
|
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { GetNestedDeclarations, TypeArgumentsResolver } from "../../index.ts";
|
|
2
|
+
import type { GetReferences, Predicate, Serializer, Validator } from "../../Node.ts";
|
|
2
3
|
import { NodeKind } from "../../Node.ts";
|
|
3
|
-
import type {
|
|
4
|
-
import type { BaseType, SerializedBaseType, StructureFormatter } from "../Type.ts";
|
|
4
|
+
import type { BaseType, StructureFormatter } from "../Type.ts";
|
|
5
5
|
export interface BooleanType extends BaseType {
|
|
6
6
|
kind: NodeKind["BooleanType"];
|
|
7
7
|
}
|
|
8
|
-
export interface SerializedBooleanType extends SerializedBaseType {
|
|
9
|
-
kind: NodeKind["BooleanType"];
|
|
10
|
-
}
|
|
11
8
|
export declare const BooleanType: () => BooleanType;
|
|
12
9
|
export { BooleanType as Boolean };
|
|
13
|
-
export declare const isBooleanType:
|
|
10
|
+
export declare const isBooleanType: Predicate<BooleanType>;
|
|
11
|
+
export declare const getNestedDeclarationsInBooleanType: GetNestedDeclarations<BooleanType>;
|
|
14
12
|
export declare const validateBooleanType: Validator<BooleanType>;
|
|
15
|
-
export declare const
|
|
13
|
+
export declare const resolveTypeArgumentsInBooleanType: TypeArgumentsResolver<BooleanType>;
|
|
14
|
+
export declare const serializeBooleanType: Serializer<BooleanType>;
|
|
16
15
|
export declare const getReferencesForBooleanType: GetReferences<BooleanType>;
|
|
17
16
|
export declare const formatBooleanValue: StructureFormatter<BooleanType>;
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { json } from "../../../utils/errorFormatting.js";
|
|
2
2
|
import { NodeKind } from "../../Node.js";
|
|
3
|
-
import { removeParentKey } from "../Type.js";
|
|
4
3
|
export const BooleanType = () => ({
|
|
5
4
|
kind: NodeKind.BooleanType,
|
|
6
5
|
});
|
|
7
6
|
export { BooleanType as Boolean };
|
|
8
|
-
export const isBooleanType =
|
|
7
|
+
export const isBooleanType = node => node.kind === NodeKind.BooleanType;
|
|
8
|
+
export const getNestedDeclarationsInBooleanType = addedDecls => addedDecls;
|
|
9
9
|
export const validateBooleanType = (helpers, _type, value) => {
|
|
10
10
|
if (typeof value !== "boolean") {
|
|
11
11
|
return [TypeError(`expected a boolean value, but got ${json(value, helpers.useStyling)}`)];
|
|
12
12
|
}
|
|
13
13
|
return [];
|
|
14
14
|
};
|
|
15
|
-
export const
|
|
16
|
-
export const
|
|
15
|
+
export const resolveTypeArgumentsInBooleanType = (_args, type) => type;
|
|
16
|
+
export const serializeBooleanType = type => type;
|
|
17
|
+
export const getReferencesForBooleanType = () => [];
|
|
17
18
|
export const formatBooleanValue = (_type, value) => value;
|