ldkit 2.3.0 → 2.4.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.
Files changed (239) hide show
  1. package/esm/cli.d.ts +3 -0
  2. package/esm/cli.d.ts.map +1 -0
  3. package/esm/cli.js +117 -0
  4. package/{types → esm}/library/asynciterator.d.ts +1 -0
  5. package/esm/library/asynciterator.d.ts.map +1 -0
  6. package/{types → esm}/library/decoder.d.ts +1 -0
  7. package/esm/library/decoder.d.ts.map +1 -0
  8. package/{types → esm}/library/encoder.d.ts +1 -0
  9. package/esm/library/encoder.d.ts.map +1 -0
  10. package/{types → esm}/library/engine/mod.d.ts +1 -0
  11. package/esm/library/engine/mod.d.ts.map +1 -0
  12. package/{types → esm}/library/engine/query_engine.d.ts +1 -0
  13. package/esm/library/engine/query_engine.d.ts.map +1 -0
  14. package/{types → esm}/library/engine/query_engine_proxy.d.ts +1 -0
  15. package/esm/library/engine/query_engine_proxy.d.ts.map +1 -0
  16. package/{types → esm}/library/engine/query_resolvers.d.ts +2 -1
  17. package/esm/library/engine/query_resolvers.d.ts.map +1 -0
  18. package/{types → esm}/library/engine/types.d.ts +1 -0
  19. package/esm/library/engine/types.d.ts.map +1 -0
  20. package/{types → esm}/library/lens/lens.d.ts +1 -0
  21. package/esm/library/lens/lens.d.ts.map +1 -0
  22. package/esm/library/lens/mod.d.ts +2 -0
  23. package/esm/library/lens/mod.d.ts.map +1 -0
  24. package/{types → esm}/library/lens/query_builder.d.ts +1 -0
  25. package/esm/library/lens/query_builder.d.ts.map +1 -0
  26. package/{types → esm}/library/lens/search_helper.d.ts +1 -0
  27. package/esm/library/lens/search_helper.d.ts.map +1 -0
  28. package/{types → esm}/library/lens/types.d.ts +1 -0
  29. package/esm/library/lens/types.d.ts.map +1 -0
  30. package/{types → esm}/library/lens/update_helper.d.ts +1 -0
  31. package/esm/library/lens/update_helper.d.ts.map +1 -0
  32. package/{types → esm}/library/namespace.d.ts +1 -0
  33. package/esm/library/namespace.d.ts.map +1 -0
  34. package/{types → esm}/library/options.d.ts +26 -25
  35. package/esm/library/options.d.ts.map +1 -0
  36. package/{types → esm}/library/rdf.d.ts +4 -3
  37. package/esm/library/rdf.d.ts.map +1 -0
  38. package/{types → esm}/library/schema/data_types.d.ts +1 -0
  39. package/esm/library/schema/data_types.d.ts.map +1 -0
  40. package/{types → esm}/library/schema/interface.d.ts +1 -0
  41. package/esm/library/schema/interface.d.ts.map +1 -0
  42. package/{types → esm}/library/schema/mod.d.ts +1 -0
  43. package/esm/library/schema/mod.d.ts.map +1 -0
  44. package/{types → esm}/library/schema/schema.d.ts +1 -0
  45. package/esm/library/schema/schema.d.ts.map +1 -0
  46. package/{types → esm}/library/schema/search.d.ts +1 -0
  47. package/esm/library/schema/search.d.ts.map +1 -0
  48. package/{types → esm}/library/schema/utils.d.ts +1 -0
  49. package/esm/library/schema/utils.d.ts.map +1 -0
  50. package/{types → esm}/library/sparql/escape.d.ts +1 -0
  51. package/esm/library/sparql/escape.d.ts.map +1 -0
  52. package/{types → esm}/library/sparql/mod.d.ts +1 -0
  53. package/esm/library/sparql/mod.d.ts.map +1 -0
  54. package/{types → esm}/library/sparql/sparql_expression_builders.d.ts +1 -0
  55. package/esm/library/sparql/sparql_expression_builders.d.ts.map +1 -0
  56. package/{types → esm}/library/sparql/sparql_query_builders.d.ts +1 -0
  57. package/esm/library/sparql/sparql_query_builders.d.ts.map +1 -0
  58. package/{types → esm}/library/sparql/sparql_shared_builders.d.ts +1 -0
  59. package/esm/library/sparql/sparql_shared_builders.d.ts.map +1 -0
  60. package/{types → esm}/library/sparql/sparql_tag.d.ts +1 -0
  61. package/esm/library/sparql/sparql_tag.d.ts.map +1 -0
  62. package/{types → esm}/library/sparql/sparql_update_builders.d.ts +1 -0
  63. package/esm/library/sparql/sparql_update_builders.d.ts.map +1 -0
  64. package/{types → esm}/library/sparql/stringify.d.ts +1 -0
  65. package/esm/library/sparql/stringify.d.ts.map +1 -0
  66. package/{types → esm}/library/translator.d.ts +1 -0
  67. package/esm/library/translator.d.ts.map +1 -0
  68. package/{types → esm}/library/utils.d.ts +1 -0
  69. package/esm/library/utils.d.ts.map +1 -0
  70. package/{types → esm}/mod.d.ts +1 -0
  71. package/esm/mod.d.ts.map +1 -0
  72. package/esm/namespaces/dbo.d.ts +11 -0
  73. package/esm/namespaces/dbo.d.ts.map +1 -0
  74. package/esm/namespaces/dc.d.ts +11 -0
  75. package/esm/namespaces/dc.d.ts.map +1 -0
  76. package/esm/namespaces/dcterms.d.ts +11 -0
  77. package/esm/namespaces/dcterms.d.ts.map +1 -0
  78. package/esm/namespaces/foaf.d.ts +11 -0
  79. package/esm/namespaces/foaf.d.ts.map +1 -0
  80. package/esm/namespaces/foaf.js +12 -0
  81. package/esm/namespaces/gr.d.ts +11 -0
  82. package/esm/namespaces/gr.d.ts.map +1 -0
  83. package/esm/namespaces/ldkit.d.ts +11 -0
  84. package/esm/namespaces/ldkit.d.ts.map +1 -0
  85. package/esm/namespaces/owl.d.ts +11 -0
  86. package/esm/namespaces/owl.d.ts.map +1 -0
  87. package/esm/namespaces/rdf.d.ts +11 -0
  88. package/esm/namespaces/rdf.d.ts.map +1 -0
  89. package/esm/namespaces/rdfs.d.ts +11 -0
  90. package/esm/namespaces/rdfs.d.ts.map +1 -0
  91. package/esm/namespaces/schema.d.ts +11 -0
  92. package/esm/namespaces/schema.d.ts.map +1 -0
  93. package/esm/namespaces/sioc.d.ts +11 -0
  94. package/esm/namespaces/sioc.d.ts.map +1 -0
  95. package/esm/namespaces/skos.d.ts +11 -0
  96. package/esm/namespaces/skos.d.ts.map +1 -0
  97. package/esm/namespaces/xsd.d.ts +11 -0
  98. package/esm/namespaces/xsd.d.ts.map +1 -0
  99. package/{types → esm}/namespaces.d.ts +1 -0
  100. package/esm/namespaces.d.ts.map +1 -0
  101. package/{types → esm}/rdf.d.ts +1 -0
  102. package/esm/rdf.d.ts.map +1 -0
  103. package/esm/scripts/context_to_schema.d.ts +12 -0
  104. package/esm/scripts/context_to_schema.d.ts.map +1 -0
  105. package/esm/scripts/context_to_schema.js +152 -0
  106. package/esm/scripts/schema_to_script.d.ts +19 -0
  107. package/esm/scripts/schema_to_script.d.ts.map +1 -0
  108. package/esm/scripts/schema_to_script.js +222 -0
  109. package/esm/scripts/shex_to_schema.d.ts +6 -0
  110. package/esm/scripts/shex_to_schema.d.ts.map +1 -0
  111. package/esm/scripts/shex_to_schema.js +233 -0
  112. package/esm/scripts/shexj_types.d.ts +537 -0
  113. package/esm/scripts/shexj_types.d.ts.map +1 -0
  114. package/esm/scripts/shexj_types.js +2 -0
  115. package/{types → esm}/sparql.d.ts +1 -0
  116. package/esm/sparql.d.ts.map +1 -0
  117. package/package.json +23 -40
  118. package/script/cli.d.ts +3 -0
  119. package/script/cli.d.ts.map +1 -0
  120. package/script/cli.js +119 -0
  121. package/script/library/asynciterator.d.ts +30 -0
  122. package/script/library/asynciterator.d.ts.map +1 -0
  123. package/script/library/decoder.d.ts +7 -0
  124. package/script/library/decoder.d.ts.map +1 -0
  125. package/script/library/encoder.d.ts +8 -0
  126. package/script/library/encoder.d.ts.map +1 -0
  127. package/script/library/engine/mod.d.ts +3 -0
  128. package/script/library/engine/mod.d.ts.map +1 -0
  129. package/script/library/engine/query_engine.d.ts +58 -0
  130. package/script/library/engine/query_engine.d.ts.map +1 -0
  131. package/script/library/engine/query_engine_proxy.d.ts +12 -0
  132. package/script/library/engine/query_engine_proxy.d.ts.map +1 -0
  133. package/script/library/engine/query_resolvers.d.ts +11 -0
  134. package/script/library/engine/query_resolvers.d.ts.map +1 -0
  135. package/script/library/engine/types.d.ts +24 -0
  136. package/script/library/engine/types.d.ts.map +1 -0
  137. package/script/library/lens/lens.d.ts +416 -0
  138. package/script/library/lens/lens.d.ts.map +1 -0
  139. package/script/library/lens/lens.js +2 -2
  140. package/script/library/lens/mod.d.ts +2 -0
  141. package/script/library/lens/mod.d.ts.map +1 -0
  142. package/script/library/lens/query_builder.d.ts +23 -0
  143. package/script/library/lens/query_builder.d.ts.map +1 -0
  144. package/script/library/lens/search_helper.d.ts +22 -0
  145. package/script/library/lens/search_helper.d.ts.map +1 -0
  146. package/script/library/lens/types.d.ts +9 -0
  147. package/script/library/lens/types.d.ts.map +1 -0
  148. package/script/library/lens/update_helper.d.ts +24 -0
  149. package/script/library/lens/update_helper.d.ts.map +1 -0
  150. package/script/library/namespace.d.ts +42 -0
  151. package/script/library/namespace.d.ts.map +1 -0
  152. package/script/library/namespace.js +1 -2
  153. package/script/library/options.d.ts +72 -0
  154. package/script/library/options.d.ts.map +1 -0
  155. package/script/library/options.js +3 -4
  156. package/script/library/rdf.d.ts +78 -0
  157. package/script/library/rdf.d.ts.map +1 -0
  158. package/script/library/schema/data_types.d.ts +57 -0
  159. package/script/library/schema/data_types.d.ts.map +1 -0
  160. package/script/library/schema/interface.d.ts +88 -0
  161. package/script/library/schema/interface.d.ts.map +1 -0
  162. package/script/library/schema/mod.d.ts +6 -0
  163. package/script/library/schema/mod.d.ts.map +1 -0
  164. package/script/library/schema/schema.d.ts +38 -0
  165. package/script/library/schema/schema.d.ts.map +1 -0
  166. package/script/library/schema/search.d.ts +21 -0
  167. package/script/library/schema/search.d.ts.map +1 -0
  168. package/script/library/schema/utils.d.ts +4 -0
  169. package/script/library/schema/utils.d.ts.map +1 -0
  170. package/script/library/sparql/escape.d.ts +2 -0
  171. package/script/library/sparql/escape.d.ts.map +1 -0
  172. package/script/library/sparql/mod.d.ts +5 -0
  173. package/script/library/sparql/mod.d.ts.map +1 -0
  174. package/script/library/sparql/sparql_expression_builders.d.ts +20 -0
  175. package/script/library/sparql/sparql_expression_builders.d.ts.map +1 -0
  176. package/script/library/sparql/sparql_query_builders.d.ts +105 -0
  177. package/script/library/sparql/sparql_query_builders.d.ts.map +1 -0
  178. package/script/library/sparql/sparql_shared_builders.d.ts +17 -0
  179. package/script/library/sparql/sparql_shared_builders.d.ts.map +1 -0
  180. package/script/library/sparql/sparql_tag.d.ts +32 -0
  181. package/script/library/sparql/sparql_tag.d.ts.map +1 -0
  182. package/script/library/sparql/sparql_update_builders.d.ts +91 -0
  183. package/script/library/sparql/sparql_update_builders.d.ts.map +1 -0
  184. package/script/library/sparql/stringify.d.ts +7 -0
  185. package/script/library/sparql/stringify.d.ts.map +1 -0
  186. package/script/library/translator.d.ts +39 -0
  187. package/script/library/translator.d.ts.map +1 -0
  188. package/script/library/translator.js +3 -4
  189. package/script/library/utils.d.ts +2 -0
  190. package/script/library/utils.d.ts.map +1 -0
  191. package/script/mod.d.ts +7 -0
  192. package/script/mod.d.ts.map +1 -0
  193. package/{types → script}/namespaces/dbo.d.ts +1 -0
  194. package/script/namespaces/dbo.d.ts.map +1 -0
  195. package/{types → script}/namespaces/dc.d.ts +1 -0
  196. package/script/namespaces/dc.d.ts.map +1 -0
  197. package/{types → script}/namespaces/dcterms.d.ts +1 -0
  198. package/script/namespaces/dcterms.d.ts.map +1 -0
  199. package/script/namespaces/foaf.d.ts +11 -0
  200. package/script/namespaces/foaf.d.ts.map +1 -0
  201. package/script/namespaces/foaf.js +12 -0
  202. package/{types → script}/namespaces/gr.d.ts +1 -0
  203. package/script/namespaces/gr.d.ts.map +1 -0
  204. package/{types → script}/namespaces/ldkit.d.ts +1 -0
  205. package/script/namespaces/ldkit.d.ts.map +1 -0
  206. package/{types → script}/namespaces/owl.d.ts +1 -0
  207. package/script/namespaces/owl.d.ts.map +1 -0
  208. package/{types → script}/namespaces/rdf.d.ts +1 -0
  209. package/script/namespaces/rdf.d.ts.map +1 -0
  210. package/{types → script}/namespaces/rdfs.d.ts +1 -0
  211. package/script/namespaces/rdfs.d.ts.map +1 -0
  212. package/{types → script}/namespaces/schema.d.ts +1 -0
  213. package/script/namespaces/schema.d.ts.map +1 -0
  214. package/{types → script}/namespaces/sioc.d.ts +1 -0
  215. package/script/namespaces/sioc.d.ts.map +1 -0
  216. package/{types → script}/namespaces/skos.d.ts +1 -0
  217. package/script/namespaces/skos.d.ts.map +1 -0
  218. package/{types → script}/namespaces/xsd.d.ts +1 -0
  219. package/script/namespaces/xsd.d.ts.map +1 -0
  220. package/script/namespaces.d.ts +31 -0
  221. package/script/namespaces.d.ts.map +1 -0
  222. package/script/rdf.d.ts +15 -0
  223. package/script/rdf.d.ts.map +1 -0
  224. package/script/scripts/context_to_schema.d.ts +12 -0
  225. package/script/scripts/context_to_schema.d.ts.map +1 -0
  226. package/script/scripts/context_to_schema.js +155 -0
  227. package/script/scripts/schema_to_script.d.ts +19 -0
  228. package/script/scripts/schema_to_script.d.ts.map +1 -0
  229. package/script/scripts/schema_to_script.js +225 -0
  230. package/script/scripts/shex_to_schema.d.ts +6 -0
  231. package/script/scripts/shex_to_schema.d.ts.map +1 -0
  232. package/script/scripts/shex_to_schema.js +241 -0
  233. package/script/scripts/shexj_types.d.ts +537 -0
  234. package/script/scripts/shexj_types.d.ts.map +1 -0
  235. package/script/scripts/shexj_types.js +3 -0
  236. package/script/sparql.d.ts +15 -0
  237. package/script/sparql.d.ts.map +1 -0
  238. package/types/library/lens/mod.d.ts +0 -1
  239. package/types/namespaces/foaf.d.ts +0 -10
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.schemaToScript = schemaToScript;
4
+ const namespaces_js_1 = require("../namespaces.js");
5
+ const NAMESPACES = [
6
+ namespaces_js_1.dbo,
7
+ namespaces_js_1.dc,
8
+ namespaces_js_1.dcterms,
9
+ namespaces_js_1.foaf,
10
+ namespaces_js_1.gr,
11
+ namespaces_js_1.ldkit,
12
+ namespaces_js_1.owl,
13
+ namespaces_js_1.rdf,
14
+ namespaces_js_1.rdfs,
15
+ namespaces_js_1.schema,
16
+ namespaces_js_1.sioc,
17
+ namespaces_js_1.skos,
18
+ namespaces_js_1.xsd,
19
+ ];
20
+ function schemaToScript(schemas) {
21
+ const printer = new SchemaPrinter();
22
+ return printer.print(schemas);
23
+ }
24
+ class SchemaPrinter {
25
+ constructor() {
26
+ Object.defineProperty(this, "usedNamespaces", {
27
+ enumerable: true,
28
+ configurable: true,
29
+ writable: true,
30
+ value: new Set()
31
+ });
32
+ Object.defineProperty(this, "space", {
33
+ enumerable: true,
34
+ configurable: true,
35
+ writable: true,
36
+ value: " "
37
+ });
38
+ }
39
+ print(schemas) {
40
+ const orderedSchemas = this.orderSchemasByDependencies(schemas);
41
+ const printedSchemas = [];
42
+ for (const schema of orderedSchemas) {
43
+ this.extractNamespaces(schema);
44
+ const printedSchema = this.printSchema(schema);
45
+ printedSchemas.push(printedSchema);
46
+ }
47
+ if (this.usedNamespaces.size > 0) {
48
+ printedSchemas.unshift(this.printImports());
49
+ }
50
+ return printedSchemas.join("\n");
51
+ }
52
+ orderSchemasByDependencies(schemas) {
53
+ const orderedSchemas = [];
54
+ const processedSchemas = new Set();
55
+ const dependencies = schemas.map((schema) => {
56
+ return {
57
+ schemaName: schema.name,
58
+ dependencies: this.getSchemaDependencies(schema),
59
+ };
60
+ });
61
+ let unresolved = schemas.length;
62
+ while (unresolved > 0) {
63
+ let progress = false;
64
+ for (const info of dependencies) {
65
+ if (processedSchemas.has(info.schemaName)) {
66
+ continue;
67
+ }
68
+ const allDepsProcessed = info.dependencies.every((dep) => processedSchemas.has(dep));
69
+ if (allDepsProcessed) {
70
+ orderedSchemas.push(schemas.find((schema) => schema.name === info.schemaName));
71
+ processedSchemas.add(info.schemaName);
72
+ unresolved--;
73
+ progress = true;
74
+ }
75
+ }
76
+ if (!progress) {
77
+ throw new Error("Circular dependency detected");
78
+ }
79
+ }
80
+ return orderedSchemas;
81
+ }
82
+ getSchemaDependencies(schema) {
83
+ const dependencies = [];
84
+ for (const property of Object.values(schema.properties)) {
85
+ if (property.schemaRef) {
86
+ dependencies.push(property.schemaRef);
87
+ }
88
+ if (property.schema) {
89
+ dependencies.push(...this.getSchemaDependencies(property.schema));
90
+ }
91
+ }
92
+ return dependencies;
93
+ }
94
+ extractNamespace(value) {
95
+ if (value === "@id") {
96
+ this.usedNamespaces.add(this.printPrefix(namespaces_js_1.ldkit));
97
+ return;
98
+ }
99
+ for (const namespace of NAMESPACES) {
100
+ if (value.startsWith(namespace.$iri)) {
101
+ this.usedNamespaces.add(this.printPrefix(namespace));
102
+ return;
103
+ }
104
+ }
105
+ }
106
+ extractNamespaces(schema) {
107
+ for (const typeValue of schema.type) {
108
+ this.extractNamespace(typeValue);
109
+ }
110
+ for (const property of Object.values(schema.properties)) {
111
+ this.extractNamespace(property.id);
112
+ if (property.type) {
113
+ this.extractNamespace(property.type);
114
+ }
115
+ if (property.schema) {
116
+ this.extractNamespaces(property.schema);
117
+ }
118
+ }
119
+ }
120
+ printImports() {
121
+ const namespacesString = Array.from(this.usedNamespaces)
122
+ .toSorted()
123
+ .join(", ");
124
+ return `import { ${namespacesString} } from "ldkit/namespaces";\n`;
125
+ }
126
+ printSchema(schema) {
127
+ const type = this.printType(schema);
128
+ const properties = this.printProperties(schema);
129
+ return [
130
+ `export const ${schema.name} = {`,
131
+ this.indent(type),
132
+ this.indent(properties),
133
+ `} as const;\n`,
134
+ ].filter(Boolean).join("\n");
135
+ }
136
+ printSubSchema(schema) {
137
+ const type = this.printType(schema);
138
+ const properties = this.printProperties(schema);
139
+ return [
140
+ `"@schema": {`,
141
+ this.indent(type),
142
+ this.indent(properties),
143
+ `},`,
144
+ ].filter(Boolean).join("\n");
145
+ }
146
+ printProperties(schema) {
147
+ if (Object.keys(schema.properties).length === 0) {
148
+ return null;
149
+ }
150
+ return Object.entries(schema.properties)
151
+ .map(([key, prop]) => this.printProperty(key, prop))
152
+ .join("\n");
153
+ }
154
+ printProperty(key, prop) {
155
+ if (!prop.schema && !prop.schemaRef &&
156
+ !prop.optional && !prop.array &&
157
+ !prop.multilang && !prop.inverse &&
158
+ (!prop.type || prop.type === namespaces_js_1.xsd.string)) {
159
+ return `${this.printKey(key)}: ${this.printPrefixed(prop.id)},`;
160
+ }
161
+ const builder = [
162
+ `${this.printKey(key)}: {`,
163
+ this.indent(`"@id": ${this.printPrefixed(prop.id)},`),
164
+ ];
165
+ if (prop.type) {
166
+ builder.push(this.indent(`"@type": ${this.printPrefixed(prop.type)},`));
167
+ }
168
+ if (prop.schema) {
169
+ const subSchema = this.printSubSchema(prop.schema);
170
+ builder.push(this.indent(subSchema));
171
+ }
172
+ else if (prop.schemaRef) {
173
+ builder.push(this.indent(`"@schema": ${prop.schemaRef},`));
174
+ }
175
+ const flags = ["optional", "array", "multilang", "inverse"];
176
+ for (const flag of flags) {
177
+ if (prop[flag]) {
178
+ builder.push(this.indent(`"@${flag}": true,`));
179
+ }
180
+ }
181
+ builder.push("},");
182
+ return builder.join("\n");
183
+ }
184
+ printType(schema) {
185
+ if (schema.type.length === 0) {
186
+ return null;
187
+ }
188
+ if (schema.type.length === 1) {
189
+ return `"@type": ${this.printPrefixed(schema.type[0])},`;
190
+ }
191
+ return [
192
+ `"@type": [`,
193
+ ...schema.type.map((type) => ` ${this.printPrefixed(type)},`),
194
+ `],`,
195
+ ].join("\n");
196
+ }
197
+ printPrefix(namespace) {
198
+ return namespace.$prefix.substring(0, namespace.$prefix.length - 1);
199
+ }
200
+ printPrefixed(value) {
201
+ if (value === "@id") {
202
+ return `${this.printPrefix(namespaces_js_1.ldkit)}.IRI`;
203
+ }
204
+ for (const namespace of NAMESPACES) {
205
+ if (value.startsWith(namespace.$iri)) {
206
+ return `${this.printPrefix(namespace)}.${value.substring(namespace.$iri.length)}`;
207
+ }
208
+ }
209
+ return `"${value}"`;
210
+ }
211
+ printKey(key) {
212
+ if (key.match(/^[a-zA-Z0-9_]+$/)) {
213
+ return key;
214
+ }
215
+ return `"${key}"`;
216
+ }
217
+ indent(text) {
218
+ if (text === null) {
219
+ return null;
220
+ }
221
+ return text.split("\n")
222
+ .map((line) => `${this.space}${line}`)
223
+ .join("\n");
224
+ }
225
+ }
@@ -0,0 +1,6 @@
1
+ import { SchemaSpec } from "./schema_to_script.js";
2
+ import type { Schema as ShexSchema } from "./shexj_types.js";
3
+ export declare function shexcToShexj(shexc: string): ShexSchema;
4
+ export declare function shexjToSchema(shexj: ShexSchema): SchemaSpec[];
5
+ export declare function shexcToSchema(shexc: string): SchemaSpec[];
6
+ //# sourceMappingURL=shex_to_schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shex_to_schema.d.ts","sourceRoot":"","sources":["../../src/scripts/shex_to_schema.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAEV,MAAM,IAAI,UAAU,EAMrB,MAAM,kBAAkB,CAAC;AAG1B,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAItD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,EAAE,CAG7D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAGzD"}
@@ -0,0 +1,241 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.shexcToShexj = shexcToShexj;
7
+ exports.shexjToSchema = shexjToSchema;
8
+ exports.shexcToSchema = shexcToSchema;
9
+ const parser_1 = __importDefault(require("@shexjs/parser"));
10
+ const namespaces_js_1 = require("../namespaces.js");
11
+ function shexcToShexj(shexc) {
12
+ // Parse the Shexc string using the ShexJS parser
13
+ const baseIri = "";
14
+ return parser_1.default.construct(baseIri).parse(shexc);
15
+ }
16
+ function shexjToSchema(shexj) {
17
+ const converter = new ShexConverter();
18
+ return converter.process(shexj);
19
+ }
20
+ function shexcToSchema(shexc) {
21
+ const shexj = shexcToShexj(shexc);
22
+ return shexjToSchema(shexj);
23
+ }
24
+ class ShexConverter {
25
+ constructor() {
26
+ Object.defineProperty(this, "schemas", {
27
+ enumerable: true,
28
+ configurable: true,
29
+ writable: true,
30
+ value: new Map()
31
+ });
32
+ Object.defineProperty(this, "shexj", {
33
+ enumerable: true,
34
+ configurable: true,
35
+ writable: true,
36
+ value: void 0
37
+ });
38
+ Object.defineProperty(this, "idMapping", {
39
+ enumerable: true,
40
+ configurable: true,
41
+ writable: true,
42
+ value: new Map()
43
+ });
44
+ }
45
+ process(shexj) {
46
+ this.shexj = shexj;
47
+ this.buildIdMapping();
48
+ this.visit(this.shexj, {});
49
+ return [...this.schemas.values()];
50
+ }
51
+ visit(nodeOrRef, context) {
52
+ if (nodeOrRef === undefined) {
53
+ return;
54
+ }
55
+ const isRef = typeof nodeOrRef === "string";
56
+ const node = isRef ? this.idMapping.get(nodeOrRef) : nodeOrRef;
57
+ if (typeof node !== "object" || node === null) {
58
+ return;
59
+ }
60
+ if (Array.isArray(node)) {
61
+ for (const item of node) {
62
+ this.visit(item, context);
63
+ }
64
+ return;
65
+ }
66
+ switch (node.type) {
67
+ case "Schema":
68
+ if (!node.shapes) {
69
+ throw new Error("No shapes found in ShexJ schema");
70
+ }
71
+ this.visit(node.shapes, {});
72
+ break;
73
+ case "ShapeDecl":
74
+ if (context.shapeAnd || context.shapeOr) {
75
+ this.visit(node.shapeExpr, context);
76
+ }
77
+ else if (isRef) {
78
+ context.property.schemaRef = this.getSuffix(node.id);
79
+ }
80
+ else {
81
+ const schema = this.createSchema(node.id);
82
+ this.visit(node.shapeExpr, { schema });
83
+ }
84
+ break;
85
+ case "Shape":
86
+ if (context.property) {
87
+ const schema = this.createAnonymousSchema();
88
+ context.property.schema = schema;
89
+ this.visit(node.expression, {
90
+ ...context,
91
+ property: undefined,
92
+ schema,
93
+ });
94
+ }
95
+ else {
96
+ const schema = context.schema ??
97
+ this.createSchema(node.id);
98
+ this.visit(node.expression, { ...context, schema });
99
+ }
100
+ break;
101
+ case "ShapeAnd": {
102
+ const root = !context.shapeAnd && !context.shapeOr;
103
+ const schema = root ? this.createAnonymousSchema() : context.schema;
104
+ if (root) {
105
+ if (context.property) {
106
+ context.property.schema = schema;
107
+ }
108
+ this.visit(node.shapeExprs, {
109
+ schema,
110
+ shapeAnd: true,
111
+ });
112
+ }
113
+ else {
114
+ this.visit(node.shapeExprs, { ...context, shapeAnd: true, schema });
115
+ }
116
+ break;
117
+ }
118
+ case "ShapeOr": {
119
+ const root = !context.shapeAnd && !context.shapeOr;
120
+ const schema = root ? this.createAnonymousSchema() : context.schema;
121
+ if (root) {
122
+ if (context.property) {
123
+ context.property.schema = schema;
124
+ }
125
+ this.visit(node.shapeExprs, {
126
+ schema,
127
+ shapeOr: true,
128
+ });
129
+ }
130
+ else {
131
+ this.visit(node.shapeExprs, { ...context, shapeOr: true, schema });
132
+ }
133
+ break;
134
+ }
135
+ case "EachOf":
136
+ this.visit(node.expressions, context);
137
+ break;
138
+ case "OneOf":
139
+ this.visit(node.expressions, { ...context, optional: true });
140
+ break;
141
+ case "TripleConstraint": {
142
+ if (node.predicate === namespaces_js_1.rdf.type) {
143
+ if (!context.shapeOr) {
144
+ this.visit(node.valueExpr, { ...context, type: true });
145
+ }
146
+ break;
147
+ }
148
+ const property = {
149
+ id: node.predicate,
150
+ };
151
+ if (node.min === 0 || context.optional || context.shapeOr) {
152
+ property.optional = true;
153
+ }
154
+ if (node.max && node.max > 1 || node.max === -1) {
155
+ property.array = true;
156
+ }
157
+ if (node.inverse) {
158
+ property.inverse = true;
159
+ }
160
+ const name = this.getSuffix(node.predicate);
161
+ context.schema.properties[name] = property;
162
+ this.visit(node.valueExpr, { ...context, property });
163
+ break;
164
+ }
165
+ case "NodeConstraint": {
166
+ if (context.type) {
167
+ if (node.values?.length) {
168
+ context.schema.type.push(node.values[0]);
169
+ }
170
+ }
171
+ else if (context.property) {
172
+ const property = context.property;
173
+ if (node.nodeKind === "iri") { // IRI
174
+ property.type = namespaces_js_1.ldkit.IRI;
175
+ }
176
+ else if (node.datatype) { // literal
177
+ property.type = node.datatype;
178
+ }
179
+ else if (node.values?.length) { // enumeration
180
+ const first = node.values[0];
181
+ if (typeof first === "string") {
182
+ property.type = namespaces_js_1.ldkit.IRI;
183
+ }
184
+ else if (typeof first === "object" && first.type !== undefined) {
185
+ property.type = first.type;
186
+ }
187
+ }
188
+ }
189
+ break;
190
+ }
191
+ }
192
+ }
193
+ createSchema(id) {
194
+ if (this.schemas.has(id)) {
195
+ throw new Error(`Duplicate schema ID: ${id}`);
196
+ }
197
+ const name = this.getSuffix(id);
198
+ const schema = {
199
+ name,
200
+ type: [],
201
+ properties: {},
202
+ };
203
+ this.schemas.set(id, schema);
204
+ return schema;
205
+ }
206
+ createAnonymousSchema() {
207
+ return {
208
+ name: "AnonymousSchema",
209
+ type: [],
210
+ properties: {},
211
+ };
212
+ }
213
+ buildIdMapping() {
214
+ const queue = [this.shexj];
215
+ while (queue.length > 0) {
216
+ const current = queue.shift();
217
+ if (Array.isArray(current)) {
218
+ for (const item of current) {
219
+ queue.push(item);
220
+ }
221
+ }
222
+ else if (typeof current === "object" && current !== null) {
223
+ for (const [key, value] of Object.entries(current)) {
224
+ if (key === "id") {
225
+ this.idMapping.set(value, current);
226
+ }
227
+ else if (typeof value === "object") {
228
+ queue.push(value);
229
+ }
230
+ }
231
+ }
232
+ }
233
+ }
234
+ getSuffix(value) {
235
+ const cutoff = Math.max(value.lastIndexOf("#"), value.lastIndexOf("/"));
236
+ if (cutoff === -1) {
237
+ return value;
238
+ }
239
+ return value.substring(cutoff + 1);
240
+ }
241
+ }