@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
package/enums/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export * from "./MintingStrategy.js";
2
+ export * from "./PropertyVisibility.js";
3
+ export * from "./TsFeature.js";
4
+ export * from "./TsObjectDeclarationType.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,5 @@
1
+ import type { Ast } from "../ast/Ast.js";
2
+ export interface Generator {
3
+ generate(ast: Ast): string;
4
+ }
5
+ //# sourceMappingURL=Generator.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Generator.js.map
@@ -1,3 +1,3 @@
1
- export * as json from "./json";
2
- export * as ts from "./ts";
1
+ export * as json from "./json/index.js";
2
+ export * as ts from "./ts/index.js";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1,3 +1,3 @@
1
- export * as json from "./json";
2
- export * as ts from "./ts";
1
+ export * as json from "./json/index.js";
2
+ export * as ts from "./ts/index.js";
3
3
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,6 @@
1
- import type * as ast from "../../ast";
2
- export declare class AstJsonGenerator {
3
- private readonly ast;
4
- constructor(ast: ast.Ast);
5
- generate(): string;
1
+ import type * as ast from "../../ast/index.js";
2
+ import type { Generator } from "../Generator.js";
3
+ export declare class AstJsonGenerator implements Generator {
4
+ generate(ast: ast.Ast): string;
6
5
  }
7
6
  //# sourceMappingURL=AstJsonGenerator.d.ts.map
@@ -1,4 +1,3 @@
1
- import * as shaclAst from "@shaclmate/shacl-ast";
2
1
  function nameToJson(name) {
3
2
  return {
4
3
  curie: name.curie.extract(),
@@ -7,16 +6,6 @@ function nameToJson(name) {
7
6
  shaclmateName: name.shaclmateName.extract(),
8
7
  };
9
8
  }
10
- function nodeKindToJson(nodeKind) {
11
- switch (nodeKind) {
12
- case shaclAst.NodeKind.BLANK_NODE:
13
- return "BlankNode";
14
- case shaclAst.NodeKind.IRI:
15
- return "NamedNode";
16
- case shaclAst.NodeKind.LITERAL:
17
- return "Literal";
18
- }
19
- }
20
9
  function termToJson(term) {
21
10
  switch (term.termType) {
22
11
  case "BlankNode":
@@ -38,9 +27,9 @@ function typeToJson(type) {
38
27
  switch (type.kind) {
39
28
  case "IdentifierType":
40
29
  return {
41
- hasValue: type.hasValue.map(termToJson).extract(),
30
+ hasValue: type.hasValues.map(termToJson),
42
31
  kind: type.kind,
43
- nodeKinds: [...type.nodeKinds].map(nodeKindToJson),
32
+ nodeKinds: [...type.nodeKinds],
44
33
  };
45
34
  case "IntersectionType":
46
35
  case "UnionType":
@@ -48,10 +37,17 @@ function typeToJson(type) {
48
37
  kind: type.kind,
49
38
  types: type.memberTypes.map((type) => typeToJson(type)),
50
39
  };
40
+ case "ListType": {
41
+ return {
42
+ itemType: typeToJson(type.itemType),
43
+ kind: type.kind,
44
+ mutable: type.mutable.extract(),
45
+ };
46
+ }
51
47
  case "LiteralType": {
52
48
  return {
53
49
  datatype: type.datatype.extract(),
54
- hasValue: type.hasValue.map(termToJson).extract(),
50
+ hasValue: type.hasValues.map(termToJson),
55
51
  kind: type.kind,
56
52
  maxExclusive: type.maxExclusive.map(termToJson).extract(),
57
53
  maxInclusive: type.maxInclusive.map(termToJson).extract(),
@@ -59,40 +55,53 @@ function typeToJson(type) {
59
55
  minInclusive: type.minInclusive.map(termToJson).extract(),
60
56
  };
61
57
  }
58
+ case "ObjectIntersectionType":
59
+ case "ObjectUnionType":
60
+ return {
61
+ kind: type.kind,
62
+ name: nameToJson(type.name),
63
+ types: type.memberTypes.map((type) => typeToJson(type)),
64
+ };
62
65
  case "ObjectType":
63
66
  return {
67
+ fromRdfType: type.fromRdfType.map(termToJson).extract(),
64
68
  kind: type.kind,
65
- listItemType: type.listItemType.map(typeToJson).extract(),
66
69
  name: nameToJson(type.name),
67
70
  parentObjectTypes: type.parentObjectTypes.length > 0
68
71
  ? type.parentObjectTypes.map((type) => nameToJson(type.name))
69
72
  : undefined,
70
- nodeKinds: [...type.nodeKinds].map(nodeKindToJson),
71
- rdfType: type.rdfType.map(termToJson).extract(),
73
+ nodeKinds: [...type.nodeKinds],
74
+ toRdfTypes: type.toRdfTypes.length > 0
75
+ ? type.toRdfTypes.map(termToJson)
76
+ : undefined,
72
77
  };
73
78
  case "OptionType":
74
79
  return {
75
80
  itemType: typeToJson(type.itemType),
76
81
  kind: type.kind,
77
82
  };
83
+ case "PlaceholderType":
84
+ throw new Error(type.kind);
78
85
  case "SetType":
79
86
  return {
80
87
  itemType: typeToJson(type.itemType),
81
88
  kind: type.kind,
82
89
  };
90
+ case "TermType":
91
+ return {
92
+ kind: type.kind,
93
+ };
83
94
  }
84
95
  }
85
96
  export class AstJsonGenerator {
86
- constructor(ast) {
87
- this.ast = ast;
88
- }
89
- generate() {
97
+ generate(ast) {
90
98
  return JSON.stringify({
91
- objectTypes: this.ast.objectTypes.map((objectType) => ({
99
+ objectTypes: ast.objectTypes.map((objectType) => ({
92
100
  kind: objectType.kind,
93
101
  name: nameToJson(objectType.name),
94
102
  properties: objectType.properties.map((property) => ({
95
103
  name: nameToJson(property.name),
104
+ mutable: property.mutable.extract(),
96
105
  path: property.path.iri.value,
97
106
  type: typeToJson(property.type),
98
107
  })),
@@ -1,7 +1,11 @@
1
1
  import { PrimitiveType } from "./PrimitiveType.js";
2
- export declare class BooleanType extends PrimitiveType {
2
+ import type { Type } from "./Type.js";
3
+ export declare class BooleanType extends PrimitiveType<boolean> {
4
+ readonly kind = "BooleanType";
5
+ get conversions(): readonly Type.Conversion[];
3
6
  get name(): string;
4
- fromRdfResourceValueExpression({ variables, }: Parameters<PrimitiveType["fromRdfResourceValueExpression"]>[0]): string;
5
- hashStatements({ variables, }: Parameters<PrimitiveType["hashStatements"]>[0]): readonly string[];
7
+ jsonZodSchema({ variables, }: Parameters<Type["jsonZodSchema"]>[0]): ReturnType<Type["jsonZodSchema"]>;
8
+ propertyFromRdfResourceValueExpression({ variables, }: Parameters<PrimitiveType<boolean>["propertyFromRdfResourceValueExpression"]>[0]): string;
9
+ toRdfExpression({ variables, }: Parameters<PrimitiveType<string>["toRdfExpression"]>[0]): string;
6
10
  }
7
11
  //# sourceMappingURL=BooleanType.d.ts.map
@@ -1,13 +1,67 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Memoize } from "typescript-memoize";
1
8
  import { PrimitiveType } from "./PrimitiveType.js";
9
+ import { objectInitializer } from "./objectInitializer.js";
2
10
  export class BooleanType extends PrimitiveType {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.kind = "BooleanType";
14
+ }
15
+ get conversions() {
16
+ const conversions = [
17
+ {
18
+ conversionExpression: (value) => value,
19
+ sourceTypeCheckExpression: (value) => `typeof ${value} === "boolean"`,
20
+ sourceTypeName: this.name,
21
+ },
22
+ ];
23
+ this.primitiveDefaultValue.ifJust((defaultValue) => {
24
+ conversions.push({
25
+ conversionExpression: () => defaultValue.toString(),
26
+ sourceTypeCheckExpression: (value) => `typeof ${value} === "undefined"`,
27
+ sourceTypeName: "undefined",
28
+ });
29
+ });
30
+ return conversions;
31
+ }
3
32
  get name() {
33
+ if (this.primitiveIn.length > 0) {
34
+ return this.primitiveIn.map((value) => value.toString()).join(" | ");
35
+ }
4
36
  return "boolean";
5
37
  }
6
- fromRdfResourceValueExpression({ variables, }) {
7
- return `${variables.resourceValue}.toBoolean()`;
38
+ jsonZodSchema({ variables, }) {
39
+ if (this.primitiveIn.length === 1) {
40
+ return `${variables.zod}.literal(${this.primitiveIn[0]})`;
41
+ }
42
+ return `${variables.zod}.boolean()`;
43
+ }
44
+ propertyFromRdfResourceValueExpression({ variables, }) {
45
+ let expression = `${variables.resourceValue}.toBoolean()`;
46
+ if (this.primitiveIn.length === 1) {
47
+ expression = `${expression}.chain(value => value === ${this.primitiveIn[0]} ? purify.Either.of(value) : purify.Left(new rdfjsResource.Resource.MistypedValueError(${objectInitializer({ actualValue: "rdfLiteral.toRdf(value)", expectedValueType: JSON.stringify(this.name), focusResource: variables.resource, predicate: variables.predicate })})))`;
48
+ }
49
+ return expression;
8
50
  }
9
- hashStatements({ variables, }) {
10
- return [`${variables.hasher}.update(${variables.value}.toString());`];
51
+ toRdfExpression({ variables, }) {
52
+ return this.primitiveDefaultValue
53
+ .map((defaultValue) => {
54
+ if (defaultValue) {
55
+ // If the default is true, only serialize the value if it's false
56
+ return `!${variables.value} ? false : undefined`;
57
+ }
58
+ // If the default is false, only serialize the value if it's true
59
+ return `${variables.value} ? true : undefined`;
60
+ })
61
+ .orDefault(variables.value);
11
62
  }
12
63
  }
64
+ __decorate([
65
+ Memoize()
66
+ ], BooleanType.prototype, "name", null);
13
67
  //# sourceMappingURL=BooleanType.js.map
@@ -0,0 +1,19 @@
1
+ import type { TsFeature } from "../../enums/index.js";
2
+ import { PrimitiveType } from "./PrimitiveType.js";
3
+ import type { Type } from "./Type.js";
4
+ export declare class DateTimeType extends PrimitiveType<Date> {
5
+ readonly equalsFunction = "dateEquals";
6
+ readonly kind = "DateTimeType";
7
+ readonly mutable = true;
8
+ get conversions(): readonly Type.Conversion[];
9
+ get jsonName(): string;
10
+ get name(): string;
11
+ fromJsonExpression({ variables, }: Parameters<Type["fromJsonExpression"]>[0]): string;
12
+ hashStatements({ variables, }: Parameters<Type["hashStatements"]>[0]): readonly string[];
13
+ jsonZodSchema({ variables, }: Parameters<Type["jsonZodSchema"]>[0]): ReturnType<Type["jsonZodSchema"]>;
14
+ propertyFromRdfResourceValueExpression({ variables, }: Parameters<PrimitiveType<number>["propertyFromRdfResourceValueExpression"]>[0]): string;
15
+ snippetDeclarations(features: Set<TsFeature>): readonly string[];
16
+ toJsonExpression({ variables, }: Parameters<PrimitiveType<Date>["toJsonExpression"]>[0]): string;
17
+ toRdfExpression({ variables, }: Parameters<PrimitiveType<Date>["toRdfExpression"]>[0]): string;
18
+ }
19
+ //# sourceMappingURL=DateTimeType.d.ts.map
@@ -0,0 +1,66 @@
1
+ import { PrimitiveType } from "./PrimitiveType.js";
2
+ import { SnippetDeclarations } from "./SnippetDeclarations.js";
3
+ import { objectInitializer } from "./objectInitializer.js";
4
+ export class DateTimeType extends PrimitiveType {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.equalsFunction = "dateEquals";
8
+ this.kind = "DateTimeType";
9
+ this.mutable = true;
10
+ }
11
+ get conversions() {
12
+ const conversions = [
13
+ {
14
+ conversionExpression: (value) => value,
15
+ sourceTypeCheckExpression: (value) => `typeof ${value} === "object" && ${value} instanceof Date`,
16
+ sourceTypeName: this.name,
17
+ },
18
+ ];
19
+ this.primitiveDefaultValue.ifJust((defaultValue) => {
20
+ conversions.push({
21
+ conversionExpression: () => `new Date("${defaultValue.toISOString()}")`,
22
+ sourceTypeCheckExpression: (value) => `typeof ${value} === "undefined"`,
23
+ sourceTypeName: "undefined",
24
+ });
25
+ });
26
+ return conversions;
27
+ }
28
+ get jsonName() {
29
+ return "string";
30
+ }
31
+ get name() {
32
+ return "Date";
33
+ }
34
+ fromJsonExpression({ variables, }) {
35
+ return `new Date(${variables.value})`;
36
+ }
37
+ hashStatements({ variables, }) {
38
+ return [`${variables.hasher}.update(${variables.value}.toISOString());`];
39
+ }
40
+ jsonZodSchema({ variables, }) {
41
+ return `${variables.zod}.string().datetime()`;
42
+ }
43
+ propertyFromRdfResourceValueExpression({ variables, }) {
44
+ let expression = `${variables.resourceValue}.toDate()`;
45
+ if (this.primitiveIn.length > 0) {
46
+ expression = `${expression}.chain(value => { ${this.primitiveIn.map((value) => `if (value.getTime() === ${value.getTime()}) { return purify.Either.of(value); }`).join(" ")} return purify.Left(new rdfjsResource.Resource.MistypedValueError(${objectInitializer({ actualValue: "rdfLiteral.toRdf(value)", expectedValueType: JSON.stringify(this.name), focusResource: variables.resource, predicate: variables.predicate })})); })`;
47
+ }
48
+ return expression;
49
+ }
50
+ snippetDeclarations(features) {
51
+ const snippetDeclarations = [];
52
+ if (features.has("equals")) {
53
+ snippetDeclarations.push(SnippetDeclarations.dateEquals);
54
+ }
55
+ return snippetDeclarations;
56
+ }
57
+ toJsonExpression({ variables, }) {
58
+ return `${variables.value}.toISOString()`;
59
+ }
60
+ toRdfExpression({ variables, }) {
61
+ return this.primitiveDefaultValue
62
+ .map((defaultValue) => `${variables.value}.getTime() !== ${defaultValue.getTime()} ? ${variables.value} : undefined`)
63
+ .orDefault(variables.value);
64
+ }
65
+ }
66
+ //# sourceMappingURL=DateTimeType.js.map
@@ -0,0 +1,17 @@
1
+ import type { ClassDeclarationStructure, InterfaceDeclarationStructure, ModuleDeclarationStructure, TypeAliasDeclarationStructure } from "ts-morph";
2
+ import type { TsFeature } from "../../enums/index.js";
3
+ import type { Import } from "./Import.js";
4
+ import { Type } from "./Type.js";
5
+ export declare abstract class DeclaredType extends Type {
6
+ abstract readonly declarationImports: readonly Import[];
7
+ abstract readonly declarations: readonly (ClassDeclarationStructure | InterfaceDeclarationStructure | ModuleDeclarationStructure | TypeAliasDeclarationStructure)[];
8
+ readonly export: boolean;
9
+ readonly features: Set<TsFeature>;
10
+ readonly name: string;
11
+ constructor({ export_, features, name, ...superParameters }: {
12
+ export_: boolean;
13
+ features: Set<TsFeature>;
14
+ name: string;
15
+ } & ConstructorParameters<typeof Type>[0]);
16
+ }
17
+ //# sourceMappingURL=DeclaredType.d.ts.map
@@ -0,0 +1,10 @@
1
+ import { Type } from "./Type.js";
2
+ export class DeclaredType extends Type {
3
+ constructor({ export_, features, name, ...superParameters }) {
4
+ super(superParameters);
5
+ this.export = export_;
6
+ this.features = features;
7
+ this.name = name;
8
+ }
9
+ }
10
+ //# sourceMappingURL=DeclaredType.js.map
@@ -1,23 +1,13 @@
1
1
  import type { BlankNode, NamedNode } from "@rdfjs/types";
2
- import { NodeKind } from "@shaclmate/shacl-ast";
3
- import { Maybe } from "purify-ts";
4
- import { RdfjsTermType } from "./RdfjsTermType.js";
5
- import type { Type } from "./Type";
6
- export declare class IdentifierType extends RdfjsTermType<BlankNode | NamedNode> {
2
+ import { TermType } from "./TermType.js";
3
+ export declare class IdentifierType extends TermType<BlankNode | NamedNode> {
7
4
  readonly kind = "IdentifierType";
8
- private readonly nodeKinds;
9
- constructor({ nodeKinds, ...superParameters }: {
10
- nodeKinds: Set<NodeKind.BLANK_NODE | NodeKind.IRI>;
11
- } & ConstructorParameters<typeof RdfjsTermType<BlankNode | NamedNode>>[0]);
12
- get conversions(): readonly Type.Conversion[];
13
- get discriminatorProperty(): Maybe<Type.DiscriminatorProperty>;
14
5
  get isNamedNodeKind(): boolean;
6
+ get jsonName(): string;
15
7
  get name(): string;
16
- hashStatements({ variables, }: Parameters<Type["hashStatements"]>[0]): readonly string[];
17
- protected fromRdfResourceValueExpression({ variables, }: {
18
- variables: {
19
- resourceValue: string;
20
- };
21
- }): string;
8
+ fromJsonExpression({ variables, }: Parameters<TermType<BlankNode | NamedNode>["fromJsonExpression"]>[0]): string;
9
+ jsonZodSchema({ variables, }: Parameters<TermType<BlankNode | NamedNode>["jsonZodSchema"]>[0]): ReturnType<TermType<BlankNode | NamedNode>["jsonZodSchema"]>;
10
+ toJsonExpression({ variables, }: Parameters<TermType<BlankNode | NamedNode>["toJsonExpression"]>[0]): string;
11
+ protected propertyFromRdfResourceValueExpression({ variables, }: Parameters<TermType<BlankNode | NamedNode>["propertyFromRdfResourceValueExpression"]>[0]): string;
22
12
  }
23
13
  //# sourceMappingURL=IdentifierType.d.ts.map
@@ -4,77 +4,86 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { NodeKind } from "@shaclmate/shacl-ast";
8
- import { Maybe } from "purify-ts";
9
- import { invariant } from "ts-invariant";
10
7
  import { Memoize } from "typescript-memoize";
11
- import { RdfjsTermType } from "./RdfjsTermType.js";
12
- import { rdfjsTermExpression } from "./rdfjsTermExpression";
13
- export class IdentifierType extends RdfjsTermType {
14
- constructor({ nodeKinds, ...superParameters }) {
15
- super(superParameters);
8
+ import { TermType } from "./TermType.js";
9
+ export class IdentifierType extends TermType {
10
+ constructor() {
11
+ super(...arguments);
16
12
  this.kind = "IdentifierType";
17
- this.nodeKinds = new Set([...nodeKinds]);
18
- invariant(this.nodeKinds.size > 0);
19
- }
20
- get conversions() {
21
- return this.defaultValue
22
- .map((defaultValue) => [
23
- {
24
- conversionExpression: () => rdfjsTermExpression(defaultValue, this.configuration),
25
- sourceTypeName: "undefined",
26
- },
27
- {
28
- conversionExpression: (value) => value,
29
- sourceTypeCheck: (value) => `typeof ${value} === "object"`,
30
- sourceTypeName: this.name,
31
- },
32
- ])
33
- .orDefault(super.conversions);
34
- }
35
- get discriminatorProperty() {
36
- return Maybe.of({
37
- name: "termType",
38
- type: "string",
39
- values: [...this.nodeKinds].map((nodeKind) => {
40
- switch (nodeKind) {
41
- case NodeKind.BLANK_NODE:
42
- return "BlankNode";
43
- case NodeKind.IRI:
44
- return "NamedNode";
45
- }
46
- }),
47
- });
48
13
  }
49
14
  get isNamedNodeKind() {
50
- return this.nodeKinds.size === 1 && this.nodeKinds.has(NodeKind.IRI);
15
+ return this.nodeKinds.size === 1 && this.nodeKinds.has("NamedNode");
16
+ }
17
+ get jsonName() {
18
+ if (this.in_.length > 0 && this.isNamedNodeKind) {
19
+ // Treat sh:in as a union of the IRIs
20
+ // rdfjs.NamedNode<"http://example.com/1" | "http://example.com/2">
21
+ return `{ readonly "@id": ${this.in_.map((iri) => `"${iri.value}"`).join(" | ")} }`;
22
+ }
23
+ return `{ readonly "@id": string }`;
51
24
  }
52
25
  get name() {
53
- const names = [];
54
- if (this.nodeKinds.has(NodeKind.BLANK_NODE)) {
55
- names.push("rdfjs.BlankNode");
26
+ if (this.in_.length > 0 && this.isNamedNodeKind) {
27
+ // Treat sh:in as a union of the IRIs
28
+ // rdfjs.NamedNode<"http://example.com/1" | "http://example.com/2">
29
+ return `rdfjs.NamedNode<${this.in_
30
+ .map((iri) => `"${iri.value}"`)
31
+ .join(" | ")}>`;
32
+ }
33
+ return `(${[...this.nodeKinds]
34
+ .map((nodeKind) => `rdfjs.${nodeKind}`)
35
+ .join(" | ")})`;
36
+ }
37
+ fromJsonExpression({ variables, }) {
38
+ const valueToBlankNode = `${this.dataFactoryVariable}.blankNode(${variables.value}["@id"].substring(2))`;
39
+ const valueToNamedNode = `${this.dataFactoryVariable}.namedNode(${variables.value}["@id"])`;
40
+ if (this.nodeKinds.size === 2) {
41
+ return `(${variables.value}["@id"].startsWith("_:") ? ${valueToBlankNode} : ${valueToNamedNode})`;
56
42
  }
57
- if (this.nodeKinds.has(NodeKind.IRI)) {
58
- names.push("rdfjs.NamedNode");
43
+ switch ([...this.nodeKinds][0]) {
44
+ case "BlankNode":
45
+ return valueToBlankNode;
46
+ case "NamedNode":
47
+ return valueToNamedNode;
59
48
  }
60
- return names.join(" | ");
61
49
  }
62
- hashStatements({ variables, }) {
63
- return [
64
- `${variables.hasher}.update(rdfjsResource.Resource.Identifier.toString(${variables.value}));`,
65
- ];
50
+ jsonZodSchema({ variables, }) {
51
+ let idSchema;
52
+ if (this.in_.length > 0 && this.isNamedNodeKind) {
53
+ // Treat sh:in as a union of the IRIs
54
+ // rdfjs.NamedNode<"http://example.com/1" | "http://example.com/2">
55
+ idSchema = `${variables.zod}.enum(${JSON.stringify(this.in_.map((iri) => iri.value))})`;
56
+ }
57
+ else {
58
+ idSchema = `${variables.zod}.string().min(1)`;
59
+ }
60
+ return `${variables.zod}.object({ "@id": ${idSchema} })`;
61
+ }
62
+ toJsonExpression({ variables, }) {
63
+ const valueToBlankNode = `{ "@id": \`_:\${${variables.value}.value}\` }`;
64
+ const valueToNamedNode = `{ "@id": ${variables.value}.value }`;
65
+ if (this.nodeKinds.size === 2) {
66
+ return `(${variables.value}.termType === "BlankNode" ? ${valueToBlankNode} : ${valueToNamedNode})`;
67
+ }
68
+ switch ([...this.nodeKinds][0]) {
69
+ case "BlankNode":
70
+ return valueToBlankNode;
71
+ case "NamedNode":
72
+ return valueToNamedNode;
73
+ }
66
74
  }
67
- fromRdfResourceValueExpression({ variables, }) {
68
- switch (this.name) {
69
- case "rdfjs.BlankNode":
70
- throw new Error("not implemented");
71
- case "rdfjs.NamedNode":
72
- return `${variables.resourceValue}.toIri()`;
73
- case "rdfjs.BlankNode | rdfjs.NamedNode":
74
- return `${variables.resourceValue}.toIdentifier()`;
75
- default:
76
- throw new Error(`not implemented: ${this.name}`);
75
+ propertyFromRdfResourceValueExpression({ variables, }) {
76
+ if (this.nodeKinds.size === 2) {
77
+ return `${variables.resourceValue}.toIdentifier()`;
78
+ }
79
+ if (this.isNamedNodeKind) {
80
+ let expression = `${variables.resourceValue}.toIri()`;
81
+ if (this.in_.length > 0) {
82
+ expression = `${expression}.chain(iri => { switch (iri.value) { ${this.in_.map((iri) => `case "${iri.value}": return purify.Either.of<rdfjsResource.Resource.ValueError, ${this.name}>(iri as rdfjs.NamedNode<"${iri.value}">);`).join(" ")} default: return purify.Left(new rdfjsResource.Resource.MistypedValueError({ actualValue: iri, expectedValueType: ${JSON.stringify(this.name)}, focusResource: ${variables.resource}, predicate: ${variables.predicate} })); } } )`;
83
+ }
84
+ return expression;
77
85
  }
86
+ throw new Error(`not implemented: ${this.name}`);
78
87
  }
79
88
  }
80
89
  __decorate([
@@ -0,0 +1,17 @@
1
+ import { type ImportDeclarationStructure } from "ts-morph";
2
+ export type Import = ImportDeclarationStructure | string;
3
+ /**
4
+ * Singleton values for common imports.
5
+ */
6
+ export declare namespace Import {
7
+ const PURIFY: Import;
8
+ const RDF_LITERAL: Import;
9
+ const RDFJS_RESOURCE: Import;
10
+ const RDFJS_TYPES: Import;
11
+ const SHA256: Import;
12
+ const SPARQLJS: Import;
13
+ const UUID: Import;
14
+ const ZOD: Import;
15
+ const ZOD_TO_JSON_SCHEMA: Import;
16
+ }
17
+ //# sourceMappingURL=Import.d.ts.map
@@ -0,0 +1,54 @@
1
+ import { StructureKind } from "ts-morph";
2
+ /**
3
+ * Singleton values for common imports.
4
+ */
5
+ export var Import;
6
+ (function (Import) {
7
+ Import.PURIFY = {
8
+ kind: StructureKind.ImportDeclaration,
9
+ moduleSpecifier: "purify-ts",
10
+ namespaceImport: "purify",
11
+ };
12
+ Import.RDF_LITERAL = {
13
+ kind: StructureKind.ImportDeclaration,
14
+ moduleSpecifier: "rdf-literal",
15
+ namespaceImport: "rdfLiteral",
16
+ };
17
+ Import.RDFJS_RESOURCE = {
18
+ kind: StructureKind.ImportDeclaration,
19
+ moduleSpecifier: "rdfjs-resource",
20
+ namespaceImport: "rdfjsResource",
21
+ };
22
+ Import.RDFJS_TYPES = {
23
+ isTypeOnly: true,
24
+ kind: StructureKind.ImportDeclaration,
25
+ moduleSpecifier: "@rdfjs/types",
26
+ namespaceImport: "rdfjs",
27
+ };
28
+ Import.SHA256 = {
29
+ kind: StructureKind.ImportDeclaration,
30
+ moduleSpecifier: "js-sha256",
31
+ namedImports: ["sha256"],
32
+ };
33
+ Import.SPARQLJS = {
34
+ kind: StructureKind.ImportDeclaration,
35
+ moduleSpecifier: "sparqljs",
36
+ namespaceImport: "sparqljs",
37
+ };
38
+ Import.UUID = {
39
+ kind: StructureKind.ImportDeclaration,
40
+ moduleSpecifier: "uuid",
41
+ namespaceImport: "uuid",
42
+ };
43
+ Import.ZOD = {
44
+ kind: StructureKind.ImportDeclaration,
45
+ moduleSpecifier: "zod",
46
+ namedImports: [{ alias: "zod", name: "z" }],
47
+ };
48
+ Import.ZOD_TO_JSON_SCHEMA = {
49
+ kind: StructureKind.ImportDeclaration,
50
+ moduleSpecifier: "zod-to-json-schema",
51
+ namedImports: [{ name: "zodToJsonSchema" }],
52
+ };
53
+ })(Import || (Import = {}));
54
+ //# sourceMappingURL=Import.js.map