@shaclmate/compiler 2.0.13 → 2.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/Compiler.d.ts +15 -0
  2. package/Compiler.js +20 -0
  3. package/ShapesGraphToAstTransformer.d.ts +18 -23
  4. package/ShapesGraphToAstTransformer.js +21 -447
  5. package/_ShapesGraphToAstTransformer/NodeShapeAstType.d.ts +3 -0
  6. package/_ShapesGraphToAstTransformer/NodeShapeAstType.js +2 -0
  7. package/_ShapesGraphToAstTransformer/index.d.ts +10 -0
  8. package/_ShapesGraphToAstTransformer/index.js +10 -0
  9. package/_ShapesGraphToAstTransformer/pickLiteral.d.ts +4 -0
  10. package/_ShapesGraphToAstTransformer/pickLiteral.js +18 -0
  11. package/_ShapesGraphToAstTransformer/propertyShapeNodeKinds.d.ts +4 -0
  12. package/_ShapesGraphToAstTransformer/propertyShapeNodeKinds.js +26 -0
  13. package/_ShapesGraphToAstTransformer/shapeAstName.d.ts +5 -0
  14. package/_ShapesGraphToAstTransformer/shapeAstName.js +28 -0
  15. package/_ShapesGraphToAstTransformer/transformNodeShapeToAstType.d.ts +6 -0
  16. package/_ShapesGraphToAstTransformer/transformNodeShapeToAstType.js +178 -0
  17. package/_ShapesGraphToAstTransformer/transformPropertyShapeToAstCompositeType.d.ts +13 -0
  18. package/_ShapesGraphToAstTransformer/transformPropertyShapeToAstCompositeType.js +200 -0
  19. package/_ShapesGraphToAstTransformer/transformPropertyShapeToAstIdentifierType.d.ts +12 -0
  20. package/_ShapesGraphToAstTransformer/transformPropertyShapeToAstIdentifierType.js +29 -0
  21. package/_ShapesGraphToAstTransformer/transformPropertyShapeToAstLiteralType.d.ts +12 -0
  22. package/_ShapesGraphToAstTransformer/transformPropertyShapeToAstLiteralType.js +43 -0
  23. package/_ShapesGraphToAstTransformer/transformPropertyShapeToAstObjectTypeProperty.d.ts +6 -0
  24. package/_ShapesGraphToAstTransformer/transformPropertyShapeToAstObjectTypeProperty.js +31 -0
  25. package/_ShapesGraphToAstTransformer/transformPropertyShapeToAstTermType.d.ts +14 -0
  26. package/_ShapesGraphToAstTransformer/transformPropertyShapeToAstTermType.js +21 -0
  27. package/_ShapesGraphToAstTransformer/transformPropertyShapeToAstType.d.ts +16 -0
  28. package/_ShapesGraphToAstTransformer/transformPropertyShapeToAstType.js +58 -0
  29. package/ast/Ast.d.ts +5 -0
  30. package/ast/CompositeType.d.ts +13 -0
  31. package/ast/CompositeType.js +2 -0
  32. package/ast/IdentifierType.d.ts +3 -6
  33. package/ast/IntersectionType.d.ts +2 -2
  34. package/ast/ListType.d.ts +53 -0
  35. package/ast/ListType.js +2 -0
  36. package/ast/LiteralType.d.ts +4 -3
  37. package/ast/Name.d.ts +1 -0
  38. package/ast/ObjectCompositeType.d.ts +22 -0
  39. package/ast/ObjectCompositeType.js +2 -0
  40. package/ast/ObjectIntersectionType.d.ts +8 -0
  41. package/ast/ObjectIntersectionType.js +2 -0
  42. package/ast/ObjectType.d.ts +91 -19
  43. package/ast/ObjectType.js +26 -1
  44. package/ast/ObjectUnionType.d.ts +19 -0
  45. package/ast/ObjectUnionType.js +2 -0
  46. package/ast/PlaceholderType.d.ts +7 -0
  47. package/ast/PlaceholderType.js +2 -0
  48. package/ast/SetType.d.ts +1 -1
  49. package/ast/TermType.d.ts +11 -0
  50. package/ast/TermType.js +2 -0
  51. package/ast/Type.d.ts +11 -3
  52. package/ast/UnionType.d.ts +3 -3
  53. package/ast/index.d.ts +6 -3
  54. package/ast/index.js +6 -3
  55. package/enums/MintingStrategy.d.ts +5 -0
  56. package/enums/MintingStrategy.js +2 -0
  57. package/enums/PropertyVisibility.d.ts +2 -0
  58. package/enums/PropertyVisibility.js +2 -0
  59. package/enums/TsFeature.d.ts +5 -0
  60. package/enums/TsFeature.js +16 -0
  61. package/enums/TsObjectDeclarationType.d.ts +5 -0
  62. package/enums/TsObjectDeclarationType.js +2 -0
  63. package/enums/index.d.ts +5 -0
  64. package/enums/index.js +5 -0
  65. package/generators/Generator.d.ts +5 -0
  66. package/generators/Generator.js +2 -0
  67. package/generators/index.d.ts +2 -2
  68. package/generators/index.js +2 -2
  69. package/generators/json/AstJsonGenerator.d.ts +4 -5
  70. package/generators/json/AstJsonGenerator.js +31 -22
  71. package/generators/ts/BooleanType.d.ts +7 -3
  72. package/generators/ts/BooleanType.js +58 -4
  73. package/generators/ts/DateTimeType.d.ts +19 -0
  74. package/generators/ts/DateTimeType.js +66 -0
  75. package/generators/ts/DeclaredType.d.ts +17 -0
  76. package/generators/ts/DeclaredType.js +10 -0
  77. package/generators/ts/IdentifierType.d.ts +7 -17
  78. package/generators/ts/IdentifierType.js +69 -60
  79. package/generators/ts/Import.d.ts +17 -0
  80. package/generators/ts/Import.js +54 -0
  81. package/generators/ts/ListType.d.ts +19 -8
  82. package/generators/ts/ListType.js +206 -44
  83. package/generators/ts/LiteralType.d.ts +13 -11
  84. package/generators/ts/LiteralType.js +36 -51
  85. package/generators/ts/NumberType.d.ts +7 -3
  86. package/generators/ts/NumberType.js +55 -4
  87. package/generators/ts/ObjectType.d.ts +48 -25
  88. package/generators/ts/ObjectType.js +234 -50
  89. package/generators/ts/ObjectUnionType.d.ts +58 -0
  90. package/generators/ts/ObjectUnionType.js +450 -0
  91. package/generators/ts/OptionType.d.ts +14 -4
  92. package/generators/ts/OptionType.js +70 -20
  93. package/generators/ts/PrimitiveType.d.ts +15 -5
  94. package/generators/ts/PrimitiveType.js +27 -31
  95. package/generators/ts/SetType.d.ts +14 -4
  96. package/generators/ts/SetType.js +108 -30
  97. package/generators/ts/SnippetDeclarations.d.ts +11 -0
  98. package/generators/ts/SnippetDeclarations.js +215 -0
  99. package/generators/ts/StringType.d.ts +8 -3
  100. package/generators/ts/StringType.js +57 -3
  101. package/generators/ts/TermType.d.ts +54 -0
  102. package/generators/ts/TermType.js +242 -0
  103. package/generators/ts/TsGenerator.d.ts +4 -12
  104. package/generators/ts/TsGenerator.js +57 -99
  105. package/generators/ts/Type.d.ts +117 -46
  106. package/generators/ts/Type.js +93 -59
  107. package/generators/ts/TypeFactory.d.ts +4 -5
  108. package/generators/ts/TypeFactory.js +224 -91
  109. package/generators/ts/UnionType.d.ts +20 -6
  110. package/generators/ts/UnionType.js +230 -120
  111. package/generators/ts/_ObjectType/IdentifierProperty.d.ts +27 -8
  112. package/generators/ts/_ObjectType/IdentifierProperty.js +153 -32
  113. package/generators/ts/_ObjectType/Property.d.ts +139 -9
  114. package/generators/ts/_ObjectType/Property.js +26 -3
  115. package/generators/ts/_ObjectType/ShaclProperty.d.ts +24 -5
  116. package/generators/ts/_ObjectType/ShaclProperty.js +103 -26
  117. package/generators/ts/_ObjectType/TypeDiscriminatorProperty.d.ts +23 -7
  118. package/generators/ts/_ObjectType/TypeDiscriminatorProperty.js +83 -14
  119. package/generators/ts/_ObjectType/classDeclaration.d.ts +2 -1
  120. package/generators/ts/_ObjectType/classDeclaration.js +79 -111
  121. package/generators/ts/_ObjectType/createFunctionDeclaration.d.ts +5 -0
  122. package/generators/ts/_ObjectType/createFunctionDeclaration.js +60 -0
  123. package/generators/ts/_ObjectType/equalsFunctionDeclaration.d.ts +2 -1
  124. package/generators/ts/_ObjectType/equalsFunctionDeclaration.js +12 -20
  125. package/generators/ts/_ObjectType/equalsFunctionOrMethodDeclaration.d.ts +11 -0
  126. package/generators/ts/_ObjectType/equalsFunctionOrMethodDeclaration.js +70 -0
  127. package/generators/ts/_ObjectType/fromJsonFunctionDeclarations.d.ts +4 -0
  128. package/generators/ts/_ObjectType/fromJsonFunctionDeclarations.js +78 -0
  129. package/generators/ts/_ObjectType/fromRdfFunctionDeclarations.d.ts +4 -0
  130. package/generators/ts/_ObjectType/fromRdfFunctionDeclarations.js +91 -0
  131. package/generators/ts/_ObjectType/hashFunctionDeclaration.d.ts +3 -3
  132. package/generators/ts/_ObjectType/hashFunctionDeclaration.js +11 -55
  133. package/generators/ts/_ObjectType/hashFunctionOrMethodDeclaration.d.ts +11 -0
  134. package/generators/ts/_ObjectType/hashFunctionOrMethodDeclaration.js +64 -0
  135. package/generators/ts/_ObjectType/index.d.ts +8 -2
  136. package/generators/ts/_ObjectType/index.js +8 -2
  137. package/generators/ts/_ObjectType/interfaceDeclaration.d.ts +3 -2
  138. package/generators/ts/_ObjectType/interfaceDeclaration.js +11 -2
  139. package/generators/ts/_ObjectType/jsonSchemaFunctionDeclaration.d.ts +5 -0
  140. package/generators/ts/_ObjectType/jsonSchemaFunctionDeclaration.js +19 -0
  141. package/generators/ts/_ObjectType/jsonUiSchemaFunctionDeclaration.d.ts +5 -0
  142. package/generators/ts/_ObjectType/jsonUiSchemaFunctionDeclaration.js +31 -0
  143. package/generators/ts/_ObjectType/jsonZodSchemaFunctionDeclaration.d.ts +5 -0
  144. package/generators/ts/_ObjectType/jsonZodSchemaFunctionDeclaration.js +37 -0
  145. package/generators/ts/_ObjectType/rdfjsTermExpression.d.ts +6 -0
  146. package/generators/ts/{rdfjsTermExpression.js → _ObjectType/rdfjsTermExpression.js} +3 -1
  147. package/generators/ts/_ObjectType/sparqlConstructQueryFunctionDeclaration.d.ts +5 -0
  148. package/generators/ts/_ObjectType/sparqlConstructQueryFunctionDeclaration.js +21 -0
  149. package/generators/ts/_ObjectType/sparqlConstructQueryStringFunctionDeclaration.d.ts +5 -0
  150. package/generators/ts/_ObjectType/sparqlConstructQueryStringFunctionDeclaration.js +20 -0
  151. package/generators/ts/_ObjectType/sparqlFunctionDeclarations.d.ts +4 -0
  152. package/generators/ts/_ObjectType/sparqlFunctionDeclarations.js +78 -0
  153. package/generators/ts/_ObjectType/toJsonFunctionDeclaration.d.ts +5 -0
  154. package/generators/ts/_ObjectType/toJsonFunctionDeclaration.js +19 -0
  155. package/generators/ts/_ObjectType/toJsonFunctionOrMethodDeclaration.d.ts +10 -0
  156. package/generators/ts/_ObjectType/toJsonFunctionOrMethodDeclaration.js +59 -0
  157. package/generators/ts/_ObjectType/toJsonReturnType.d.ts +3 -0
  158. package/generators/ts/_ObjectType/toJsonReturnType.js +19 -0
  159. package/generators/ts/_ObjectType/toRdfFunctionDeclaration.d.ts +3 -2
  160. package/generators/ts/_ObjectType/toRdfFunctionDeclaration.js +11 -45
  161. package/generators/ts/_ObjectType/toRdfFunctionOrMethodDeclaration.d.ts +10 -0
  162. package/generators/ts/_ObjectType/toRdfFunctionOrMethodDeclaration.js +67 -0
  163. package/generators/ts/objectInitializer.d.ts +2 -0
  164. package/generators/ts/objectInitializer.js +14 -0
  165. package/generators/ts/tsComment.d.ts +5 -0
  166. package/generators/ts/tsComment.js +11 -0
  167. package/generators/ts/tsName.d.ts +1 -1
  168. package/generators/ts/tsName.js +1 -0
  169. package/index.d.ts +1 -1
  170. package/index.js +1 -1
  171. package/input/NodeShape.d.ts +46 -0
  172. package/input/NodeShape.js +165 -0
  173. package/input/Ontology.d.ts +13 -0
  174. package/input/Ontology.js +30 -0
  175. package/input/PropertyShape.d.ts +15 -0
  176. package/input/PropertyShape.js +34 -0
  177. package/input/Shape.d.ts +4 -0
  178. package/input/Shape.js +2 -0
  179. package/input/ShapesGraph.d.ts +9 -0
  180. package/input/ShapesGraph.js +50 -0
  181. package/input/ancestorClassIris.d.ts +4 -0
  182. package/input/ancestorClassIris.js +21 -0
  183. package/input/descendantClassIris.d.ts +4 -0
  184. package/input/descendantClassIris.js +21 -0
  185. package/input/generated.d.ts +275 -0
  186. package/input/generated.js +1436 -0
  187. package/input/index.d.ts +7 -0
  188. package/input/index.js +7 -0
  189. package/input/tsFeatures.d.ts +10 -0
  190. package/input/tsFeatures.js +46 -0
  191. package/package.json +15 -9
  192. package/ast/MintingStrategy.d.ts +0 -8
  193. package/ast/MintingStrategy.js +0 -9
  194. package/generators/ts/Configuration.d.ts +0 -29
  195. package/generators/ts/Configuration.js +0 -40
  196. package/generators/ts/IntersectionType.d.ts +0 -14
  197. package/generators/ts/IntersectionType.js +0 -26
  198. package/generators/ts/RdfjsTermType.d.ts +0 -25
  199. package/generators/ts/RdfjsTermType.js +0 -46
  200. package/generators/ts/_ObjectType/fromRdfFunctionDeclaration.d.ts +0 -4
  201. package/generators/ts/_ObjectType/fromRdfFunctionDeclaration.js +0 -72
  202. package/generators/ts/_ObjectType/sparqlGraphPatternsClassDeclaration.d.ts +0 -4
  203. package/generators/ts/_ObjectType/sparqlGraphPatternsClassDeclaration.js +0 -46
  204. package/generators/ts/rdfjsTermExpression.d.ts +0 -5
  205. package/vocabularies/dashDataset.d.ts +0 -3
  206. package/vocabularies/dashDataset.js +0 -2370
  207. package/vocabularies/index.d.ts +0 -2
  208. package/vocabularies/index.js +0 -2
  209. package/vocabularies/shaclmate.d.ts +0 -15
  210. package/vocabularies/shaclmate.js +0 -6
@@ -8,152 +8,259 @@ import { Maybe } from "purify-ts";
8
8
  import { invariant } from "ts-invariant";
9
9
  import { Memoize } from "typescript-memoize";
10
10
  import { Type } from "./Type.js";
11
- const syntheticTypeDiscriminatorPropertyName = "type";
12
- function syntheticTypeDiscriminatorValue({ type, typeIndex, }) {
13
- return `${typeIndex}-${type.name}`;
14
- }
11
+ import { objectInitializer } from "./objectInitializer.js";
15
12
  export class UnionType extends Type {
16
- constructor({ memberTypes, ...superParameters }) {
13
+ constructor({ memberTypes, name, ...superParameters }) {
17
14
  super(superParameters);
18
15
  this.kind = "UnionType";
19
16
  invariant(memberTypes.length >= 2);
20
17
  this.memberTypes = memberTypes;
18
+ this._name = name;
19
+ }
20
+ get name() {
21
+ if (typeof this._name === "undefined") {
22
+ switch (this._discriminatorProperty.kind) {
23
+ case "shared":
24
+ // If every type shares a discriminator (e.g., RDF/JS "termType" or generated ObjectType "type"),
25
+ // just join their names with "|"
26
+ this._name = `(${this.memberTypes.map((memberType) => memberType.name).join(" | ")})`;
27
+ break;
28
+ case "synthetic":
29
+ this._name = `(${this.memberTypeTraits.map((memberTypeTraits) => `{ ${this._discriminatorProperty.name}: "${memberTypeTraits.discriminatorPropertyValues[0]}", value: ${memberTypeTraits.memberType.name} }`).join(" | ")})`;
30
+ break;
31
+ }
32
+ }
33
+ return this._name;
34
+ }
35
+ get conversions() {
36
+ return [
37
+ {
38
+ conversionExpression: (value) => value,
39
+ sourceTypeCheckExpression: (value) => `typeof ${value} === "object"`,
40
+ sourceTypeName: this.name,
41
+ },
42
+ ];
21
43
  }
22
44
  get discriminatorProperty() {
23
- return this.typesSharedDiscriminatorProperty.altLazy(() => Maybe.of({
24
- name: syntheticTypeDiscriminatorPropertyName,
25
- values: this.memberTypes.map((_, typeIndex) => typeIndex.toString()),
26
- }));
45
+ return Maybe.of(this._discriminatorProperty);
27
46
  }
28
- get name() {
29
- if (this.typesSharedDiscriminatorProperty.isJust()) {
30
- // If every type shares a discriminator (e.g., RDF/JS "termType" or generated ObjectType "type"),
31
- // just join their names with "|"
32
- return `(${this.memberTypes.map((type) => type.name).join(" | ")})`;
47
+ get equalsFunction() {
48
+ return `
49
+ (left: ${this.name}, right: ${this.name}) => {
50
+ ${this.memberTypeTraits
51
+ .flatMap((memberTypeTraits) => memberTypeTraits.discriminatorPropertyValues.map((value) => `if (left.${this._discriminatorProperty.name} === "${value}" && right.${this._discriminatorProperty.name} === "${value}") {
52
+ return ${memberTypeTraits.memberType.equalsFunction}(${memberTypeTraits.payload("left")}, ${memberTypeTraits.payload("right")});
53
+ }`))
54
+ .join("\n")}
55
+
56
+ return purify.Left({ left, right, propertyName: "type", propertyValuesUnequal: { left: typeof left, right: typeof right, type: "BooleanEquals" as const }, type: "Property" as const });
57
+ }`;
58
+ }
59
+ get jsonName() {
60
+ switch (this._discriminatorProperty.kind) {
61
+ case "shared":
62
+ return this.memberTypes
63
+ .map((memberType) => memberType.jsonName)
64
+ .join(" | ");
65
+ case "synthetic":
66
+ return `(${this.memberTypeTraits.map((memberTypeTraits) => `{ ${this._discriminatorProperty.name}: "${memberTypeTraits.discriminatorPropertyValues[0]}", value: ${memberTypeTraits.memberType.jsonName} }`).join(" | ")})`;
67
+ default:
68
+ throw new RangeError(this._discriminatorProperty.kind);
33
69
  }
34
- return `(${this.memberTypes.map((type, typeIndex) => `{ ${syntheticTypeDiscriminatorPropertyName}: "${syntheticTypeDiscriminatorValue({ type, typeIndex })}", value: ${type.name} }`).join(" | ")})`;
35
- }
36
- get typesSharedDiscriminatorProperty() {
37
- // Do all the composed types share a single discriminator property?
38
- let typesSharedDiscriminatorProperty;
39
- for (const type of this.memberTypes) {
40
- const typeDiscriminatorProperty = type.discriminatorProperty.extract();
41
- if (!typeDiscriminatorProperty) {
42
- return Maybe.empty();
70
+ }
71
+ get mutable() {
72
+ return this.memberTypes.some((memberType) => memberType.mutable);
73
+ }
74
+ get _discriminatorProperty() {
75
+ let sharedDiscriminatorProperty;
76
+ for (const memberType of this.memberTypes) {
77
+ const memberTypeDiscriminatorProperty = memberType.discriminatorProperty.extract();
78
+ if (!memberTypeDiscriminatorProperty) {
79
+ sharedDiscriminatorProperty = undefined;
80
+ break;
43
81
  }
44
- if (!typesSharedDiscriminatorProperty) {
45
- typesSharedDiscriminatorProperty = {
46
- name: typeDiscriminatorProperty.name,
47
- values: typeDiscriminatorProperty.values.concat(),
82
+ if (!sharedDiscriminatorProperty) {
83
+ sharedDiscriminatorProperty = {
84
+ name: memberTypeDiscriminatorProperty.name,
85
+ values: memberTypeDiscriminatorProperty.values.concat(),
48
86
  };
49
87
  }
50
- else if (typeDiscriminatorProperty.name === typesSharedDiscriminatorProperty.name) {
51
- typesSharedDiscriminatorProperty.values =
52
- typesSharedDiscriminatorProperty.values.concat(typeDiscriminatorProperty.values);
88
+ else if (memberTypeDiscriminatorProperty.name ===
89
+ sharedDiscriminatorProperty.name) {
90
+ sharedDiscriminatorProperty.values =
91
+ sharedDiscriminatorProperty.values.concat(memberTypeDiscriminatorProperty.values);
53
92
  }
54
93
  else {
55
- return Maybe.empty();
94
+ sharedDiscriminatorProperty = undefined;
95
+ break;
56
96
  }
57
97
  }
58
- return Maybe.fromNullable(typesSharedDiscriminatorProperty);
98
+ if (sharedDiscriminatorProperty) {
99
+ return {
100
+ ...sharedDiscriminatorProperty,
101
+ kind: "shared",
102
+ };
103
+ }
104
+ return {
105
+ kind: "synthetic",
106
+ name: "type",
107
+ values: this.memberTypes.map((memberType, memberTypeIndex) => `${memberTypeIndex}-${memberType.name}`),
108
+ };
59
109
  }
60
- equalsFunction() {
61
- return `
62
- (left: ${this.name}, right: ${this.name}) => {
63
- ${this.memberTypes
64
- .flatMap((type, typeIndex) => this.typesSharedDiscriminatorProperty
65
- .map((typesSharedDiscriminatorProperty) => {
66
- // Types share a discriminator property already, use it
67
- return type.discriminatorProperty.unsafeCoerce().values.map((value) => `if (left.${typesSharedDiscriminatorProperty.name} === "${value}" && right.${typesSharedDiscriminatorProperty.name} === "${value}") {
68
- return ${type.equalsFunction()}(left, right);
69
- }`);
70
- })
71
- .orDefaultLazy(() => [
72
- // Types don't share a discriminator property, have to use the one we synthesized
73
- `if (left.${syntheticTypeDiscriminatorPropertyName} === "${syntheticTypeDiscriminatorValue({ type, typeIndex })}" && right.${syntheticTypeDiscriminatorPropertyName} === "${syntheticTypeDiscriminatorValue({ type, typeIndex })}") {
74
- return ${type.equalsFunction()}(left.value, right.value);
75
- }`,
76
- ]))
77
- .join("\n")}
78
-
79
- return purify.Left({ left, right, propertyName: "type", propertyValuesUnequal: { left: typeof left, right: typeof right, type: "BooleanEquals" }, type: "Property" });
80
- }`;
110
+ get memberTypeTraits() {
111
+ switch (this._discriminatorProperty.kind) {
112
+ case "shared":
113
+ return this.memberTypes.map((memberType) => ({
114
+ discriminatorPropertyValues: memberType.discriminatorProperty.unsafeCoerce().values,
115
+ memberType,
116
+ payload: (instance) => instance,
117
+ }));
118
+ case "synthetic":
119
+ return this.memberTypes.map((memberType, memberTypeIndex) => ({
120
+ discriminatorPropertyValues: [
121
+ `${memberTypeIndex}-${memberType.name}`,
122
+ ],
123
+ memberType,
124
+ payload: (instance) => `${instance}.value`,
125
+ }));
126
+ default:
127
+ throw new RangeError(this._discriminatorProperty.kind);
128
+ }
129
+ }
130
+ fromJsonExpression({ variables, }) {
131
+ return this.ternaryExpression({
132
+ memberTypeExpression: (memberTypeTraits) => {
133
+ let typeExpression = memberTypeTraits.memberType.fromJsonExpression({
134
+ variables: {
135
+ value: memberTypeTraits.payload(variables.value),
136
+ },
137
+ });
138
+ if (this._discriminatorProperty.kind === "synthetic") {
139
+ typeExpression = `{ ${this._discriminatorProperty.name}: "${memberTypeTraits.discriminatorPropertyValues[0]}" as const, value: ${typeExpression} }`;
140
+ }
141
+ return typeExpression;
142
+ },
143
+ variables,
144
+ });
81
145
  }
82
146
  fromRdfExpression(parameters) {
83
- let expression = "";
84
- this.memberTypes.forEach((type, typeIndex) => {
85
- let typeExpression = type.fromRdfExpression(parameters);
86
- if (!this.typesSharedDiscriminatorProperty.isJust()) {
87
- typeExpression = `${typeExpression}.map(value => ({ type: "${typeIndex}-${type.name}" as const, value }) as (${this.name}))`;
147
+ return this.memberTypeTraits.reduce((expression, memberTypeTraits) => {
148
+ let typeExpression = memberTypeTraits.memberType.fromRdfExpression(parameters);
149
+ if (this._discriminatorProperty.kind === "synthetic") {
150
+ typeExpression = `${typeExpression}.map(value => ({ ${this._discriminatorProperty.name}: "${memberTypeTraits.discriminatorPropertyValues[0]}" as const, value }) as (${this.name}))`;
88
151
  }
89
152
  typeExpression = `(${typeExpression} as purify.Either<rdfjsResource.Resource.ValueError, ${this.name}>)`;
90
- expression =
91
- expression.length > 0
92
- ? `${expression}.altLazy(() => ${typeExpression})`
93
- : typeExpression;
94
- });
95
- return expression;
153
+ return expression.length > 0
154
+ ? `${expression}.altLazy(() => ${typeExpression})`
155
+ : typeExpression;
156
+ }, "");
96
157
  }
97
- hashStatements({ variables, }) {
158
+ hashStatements({ depth, variables, }) {
98
159
  const caseBlocks = [];
99
- this.memberTypes.forEach((type, typeIndex) => {
100
- if (this.typesSharedDiscriminatorProperty.isJust()) {
101
- for (const typeDiscriminatorPropertyValue of type.discriminatorProperty.unsafeCoerce()
102
- .values) {
103
- caseBlocks.push(`case "${typeDiscriminatorPropertyValue}": { ${type.hashStatements({
104
- variables,
105
- })}; break; }`);
106
- }
107
- }
108
- else {
109
- caseBlocks.push(`case "${syntheticTypeDiscriminatorValue({
110
- type,
111
- typeIndex,
112
- })}": { ${type.hashStatements({ variables: { hasher: variables.hasher, value: `${variables}.value` } })}; break; }`);
160
+ for (const memberTypeTraits of this.memberTypeTraits) {
161
+ for (const discriminatorPropertyValue of memberTypeTraits.discriminatorPropertyValues) {
162
+ caseBlocks.push(`case "${discriminatorPropertyValue}": { ${memberTypeTraits.memberType
163
+ .hashStatements({
164
+ depth: depth + 1,
165
+ variables: {
166
+ hasher: variables.hasher,
167
+ value: `${memberTypeTraits.payload(variables.value)}`,
168
+ },
169
+ })
170
+ .join("\n")}; break; }`);
113
171
  }
114
- });
115
- const switchValue = this.typesSharedDiscriminatorProperty
116
- .map((typeSharedDiscriminatorProperty) => `${variables.value}.${typeSharedDiscriminatorProperty.name}`)
117
- .orDefaultLazy(() => `${variables.value}.${syntheticTypeDiscriminatorPropertyName}`);
118
- return [`switch (${switchValue}) { ${caseBlocks.join("\n")} }`];
119
- }
120
- propertySparqlGraphPatternExpression(parameters) {
121
- return new Type.SparqlGraphPatternExpression(`sparqlBuilder.GraphPattern.union(${this.memberTypes
122
- .map((type) => type
123
- .propertySparqlGraphPatternExpression(parameters)
124
- .toSparqlGraphPatternExpression()
125
- .toString())
126
- .join(", ")})`);
172
+ }
173
+ return [
174
+ `switch (${variables.value}.${this._discriminatorProperty.name}) { ${caseBlocks.join("\n")} }`,
175
+ ];
127
176
  }
128
- toRdfExpression({ variables, }) {
129
- let expression = "";
130
- this.memberTypes.forEach((type, typeIndex) => {
131
- if (this.typesSharedDiscriminatorProperty.isJust()) {
132
- if (expression.length === 0) {
133
- expression = type.toRdfExpression({
134
- variables,
135
- });
136
- }
137
- else {
138
- expression = `(${type.discriminatorProperty
139
- .unsafeCoerce()
140
- .values.map((value) => `${variables.value}.${this.typesSharedDiscriminatorProperty.unsafeCoerce().name} === "${value}"`)
141
- .join(" || ")}) ? ${type.toRdfExpression({ variables })} : ${expression}`;
142
- }
143
- }
144
- else {
145
- if (expression.length === 0) {
146
- expression = type.toRdfExpression({
147
- variables: { ...variables, value: `${variables.value}.value` },
148
- });
149
- }
150
- else {
151
- // No shared type discriminator between the types, use the one we synthesized
152
- expression = `(${variables.value}.${syntheticTypeDiscriminatorPropertyName} === "${syntheticTypeDiscriminatorValue({ type, typeIndex })}") ? (${type.toRdfExpression({ variables: { ...variables, value: `${variables.value}.value` } })}) : (${expression})`;
177
+ jsonZodSchema({ variables, }) {
178
+ switch (this._discriminatorProperty.kind) {
179
+ case "shared":
180
+ return `${variables.zod}.discriminatedUnion("${this._discriminatorProperty.name}", [${this.memberTypes
181
+ .map((memberType) => memberType.jsonZodSchema({ variables }))
182
+ .join(", ")}])`;
183
+ case "synthetic":
184
+ return `${variables.zod}.discriminatedUnion("${this._discriminatorProperty.name}", [${this.memberTypeTraits
185
+ .map((memberTypeTraits) => `${variables.zod}.object({ ${this._discriminatorProperty.name}: ${variables.zod}.literal("${memberTypeTraits.discriminatorPropertyValues[0]}"), value: ${memberTypeTraits.memberType.jsonZodSchema({ variables })} })`)
186
+ .join(", ")}])`;
187
+ default:
188
+ throw new RangeError(this._discriminatorProperty.kind);
189
+ }
190
+ }
191
+ sparqlConstructTemplateTriples(parameters) {
192
+ return this.memberTypes.reduce((array, memberType) => array.concat(memberType.sparqlConstructTemplateTriples(parameters)), []);
193
+ }
194
+ sparqlWherePatterns(parameters) {
195
+ let haveEmptyGroup = false; // Only need one empty group
196
+ return [
197
+ `{ patterns: [${this.memberTypes
198
+ .flatMap((memberType) => {
199
+ const groupPatterns = memberType.sparqlWherePatterns(parameters);
200
+ if (groupPatterns.length === 0) {
201
+ if (haveEmptyGroup) {
202
+ return [];
203
+ }
204
+ haveEmptyGroup = true;
205
+ return [objectInitializer({ patterns: "[]", type: '"group"' })];
153
206
  }
154
- }
207
+ return [
208
+ objectInitializer({
209
+ patterns: `[${groupPatterns.join(", ")}]`,
210
+ type: '"group"',
211
+ }),
212
+ ];
213
+ })
214
+ .join(", ")}], type: "union" }`,
215
+ ];
216
+ }
217
+ toJsonExpression({ variables, }) {
218
+ switch (this._discriminatorProperty.kind) {
219
+ case "shared":
220
+ return this.ternaryExpression({
221
+ memberTypeExpression: (memberTypeTraits) => memberTypeTraits.memberType.toJsonExpression({
222
+ variables: {
223
+ ...variables,
224
+ value: memberTypeTraits.payload(variables.value),
225
+ },
226
+ }),
227
+ variables,
228
+ });
229
+ case "synthetic":
230
+ return this.ternaryExpression({
231
+ memberTypeExpression: (memberTypeTraits) => `{ ${this._discriminatorProperty.name}: "${memberTypeTraits.discriminatorPropertyValues[0]}" as const, value: ${memberTypeTraits.memberType.toJsonExpression({
232
+ variables: {
233
+ ...variables,
234
+ value: memberTypeTraits.payload(variables.value),
235
+ },
236
+ })} }`,
237
+ variables,
238
+ });
239
+ }
240
+ }
241
+ toRdfExpression({ variables, }) {
242
+ return this.ternaryExpression({
243
+ memberTypeExpression: (memberTypeTraits) => memberTypeTraits.memberType.toRdfExpression({
244
+ variables: {
245
+ ...variables,
246
+ value: memberTypeTraits.payload(variables.value),
247
+ },
248
+ }),
249
+ variables,
155
250
  });
156
- return expression;
251
+ }
252
+ useImports(features) {
253
+ return this.memberTypes.flatMap((memberType) => memberType.useImports(features));
254
+ }
255
+ ternaryExpression({ memberTypeExpression, variables, }) {
256
+ return this.memberTypeTraits.reduce((expression, memberTypeTraits) => {
257
+ if (expression.length === 0) {
258
+ return memberTypeExpression(memberTypeTraits);
259
+ }
260
+ return `(${memberTypeTraits.discriminatorPropertyValues
261
+ .map((value) => `${variables.value}.${this._discriminatorProperty.name} === "${value}"`)
262
+ .join(" || ")}) ? ${memberTypeExpression(memberTypeTraits)} : ${expression}`;
263
+ }, "");
157
264
  }
158
265
  }
159
266
  __decorate([
@@ -161,5 +268,8 @@ __decorate([
161
268
  ], UnionType.prototype, "discriminatorProperty", null);
162
269
  __decorate([
163
270
  Memoize()
164
- ], UnionType.prototype, "typesSharedDiscriminatorProperty", null);
271
+ ], UnionType.prototype, "_discriminatorProperty", null);
272
+ __decorate([
273
+ Memoize()
274
+ ], UnionType.prototype, "memberTypeTraits", null);
165
275
  //# sourceMappingURL=UnionType.js.map
@@ -1,23 +1,42 @@
1
1
  import { Maybe } from "purify-ts";
2
- import { type GetAccessorDeclarationStructure, type OptionalKind, type PropertyDeclarationStructure, type PropertySignatureStructure } from "ts-morph";
3
- import { MintingStrategy } from "../../../ast";
2
+ import type { GetAccessorDeclarationStructure, OptionalKind, PropertyDeclarationStructure, PropertySignatureStructure } from "ts-morph";
3
+ import type { MintingStrategy, PropertyVisibility } from "../../../enums/index.js";
4
4
  import type { IdentifierType } from "../IdentifierType.js";
5
+ import { Import } from "../Import.js";
5
6
  import { Property } from "./Property.js";
6
7
  export declare class IdentifierProperty extends Property<IdentifierType> {
7
- readonly equalsFunction = "purifyHelpers.Equatable.booleanEquals";
8
+ readonly abstract: boolean;
9
+ readonly equalsFunction = "booleanEquals";
10
+ readonly mutable = false;
11
+ private readonly classDeclarationVisibility;
12
+ private readonly lazyObjectTypeMutable;
8
13
  private readonly mintingStrategy;
9
- constructor({ mintingStrategy, ...superParameters }: {
14
+ private readonly override;
15
+ constructor({ abstract, classDeclarationVisibility, lazyObjectTypeMutable, mintingStrategy, override, ...superParameters }: {
16
+ abstract: boolean;
17
+ classDeclarationVisibility: Maybe<PropertyVisibility>;
18
+ lazyObjectTypeMutable: () => boolean;
10
19
  mintingStrategy: Maybe<MintingStrategy>;
20
+ override: boolean;
11
21
  type: IdentifierType;
12
22
  } & ConstructorParameters<typeof Property>[0]);
13
- get classConstructorParametersPropertySignature(): Maybe<OptionalKind<PropertySignatureStructure>>;
14
23
  get classGetAccessorDeclaration(): Maybe<OptionalKind<GetAccessorDeclarationStructure>>;
15
- get classPropertyDeclaration(): OptionalKind<PropertyDeclarationStructure>;
24
+ get classPropertyDeclaration(): Maybe<OptionalKind<PropertyDeclarationStructure>>;
25
+ get constructorParametersPropertySignature(): Maybe<OptionalKind<PropertySignatureStructure>>;
26
+ get declarationImports(): readonly Import[];
16
27
  get interfacePropertySignature(): OptionalKind<PropertySignatureStructure>;
28
+ get jsonPropertySignature(): OptionalKind<PropertySignatureStructure>;
29
+ get snippetDeclarations(): readonly string[];
17
30
  classConstructorStatements({ variables, }: Parameters<Property<IdentifierType>["classConstructorStatements"]>[0]): readonly string[];
31
+ fromJsonStatements({ variables, }: Parameters<Property<IdentifierType>["fromJsonStatements"]>[0]): readonly string[];
18
32
  fromRdfStatements({ variables, }: Parameters<Property<IdentifierType>["fromRdfStatements"]>[0]): readonly string[];
19
- hashStatements(parameters: Parameters<Property<IdentifierType>["hashStatements"]>[0]): readonly string[];
20
- sparqlGraphPatternExpression(): Maybe<string>;
33
+ hashStatements(): readonly string[];
34
+ interfaceConstructorStatements({ variables, }: Parameters<Property<IdentifierType>["interfaceConstructorStatements"]>[0]): readonly string[];
35
+ jsonUiSchemaElement({ variables, }: Parameters<Property<IdentifierType>["jsonUiSchemaElement"]>[0]): Maybe<string>;
36
+ jsonZodSchema({ variables, }: Parameters<Property<IdentifierType>["jsonZodSchema"]>[0]): ReturnType<Property<IdentifierType>["jsonZodSchema"]>;
37
+ sparqlConstructTemplateTriples(): readonly string[];
38
+ sparqlWherePatterns(): readonly string[];
39
+ toJsonObjectMember({ variables, }: Parameters<Property<IdentifierType>["toJsonObjectMember"]>[0]): string;
21
40
  toRdfStatements(): readonly string[];
22
41
  }
23
42
  //# sourceMappingURL=IdentifierProperty.d.ts.map