@_linked/core 2.6.0-next.20260509053822 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/CHANGELOG.md +54 -4
  2. package/README.md +36 -0
  3. package/lib/cjs/queries/queryDispatch.js +1 -1
  4. package/lib/cjs/queries/queryDispatch.js.map +1 -1
  5. package/lib/cjs/shapes/SHACL.d.ts +13 -0
  6. package/lib/cjs/shapes/SHACL.js +53 -5
  7. package/lib/cjs/shapes/SHACL.js.map +1 -1
  8. package/lib/cjs/sparql/{SparqlStore.d.ts → SparqlDataset.d.ts} +6 -5
  9. package/lib/cjs/sparql/{SparqlStore.js → SparqlDataset.js} +9 -8
  10. package/lib/cjs/sparql/SparqlDataset.js.map +1 -0
  11. package/lib/cjs/sparql/index.d.ts +1 -1
  12. package/lib/cjs/sparql/index.js +5 -4
  13. package/lib/cjs/sparql/index.js.map +1 -1
  14. package/lib/cjs/sparql/irToAlgebra.js +237 -41
  15. package/lib/cjs/sparql/irToAlgebra.js.map +1 -1
  16. package/lib/cjs/test-helpers/FusekiStore.d.ts +4 -4
  17. package/lib/cjs/test-helpers/FusekiStore.js +4 -4
  18. package/lib/cjs/test-helpers/FusekiStore.js.map +1 -1
  19. package/lib/cjs/test-helpers/fuseki-test-store.js +3 -0
  20. package/lib/cjs/test-helpers/fuseki-test-store.js.map +1 -1
  21. package/lib/cjs/utils/LinkedFileStorage.d.ts +3 -3
  22. package/lib/cjs/utils/LinkedFileStorage.js +21 -13
  23. package/lib/cjs/utils/LinkedFileStorage.js.map +1 -1
  24. package/lib/cjs/utils/LinkedStorage.d.ts +25 -9
  25. package/lib/cjs/utils/LinkedStorage.js +63 -44
  26. package/lib/cjs/utils/LinkedStorage.js.map +1 -1
  27. package/lib/cjs/utils/loadStores.d.ts +34 -0
  28. package/lib/cjs/utils/loadStores.js +101 -0
  29. package/lib/cjs/utils/loadStores.js.map +1 -0
  30. package/lib/cjs/utils/parseDatasetsConfig.d.ts +49 -0
  31. package/lib/cjs/utils/parseDatasetsConfig.js +110 -0
  32. package/lib/cjs/utils/parseDatasetsConfig.js.map +1 -0
  33. package/lib/esm/queries/queryDispatch.js +1 -1
  34. package/lib/esm/queries/queryDispatch.js.map +1 -1
  35. package/lib/esm/shapes/SHACL.d.ts +13 -0
  36. package/lib/esm/shapes/SHACL.js +53 -5
  37. package/lib/esm/shapes/SHACL.js.map +1 -1
  38. package/lib/esm/sparql/{SparqlStore.d.ts → SparqlDataset.d.ts} +6 -5
  39. package/lib/esm/sparql/{SparqlStore.js → SparqlDataset.js} +8 -6
  40. package/lib/esm/sparql/SparqlDataset.js.map +1 -0
  41. package/lib/esm/sparql/index.d.ts +1 -1
  42. package/lib/esm/sparql/index.js +2 -2
  43. package/lib/esm/sparql/index.js.map +1 -1
  44. package/lib/esm/sparql/irToAlgebra.js +237 -41
  45. package/lib/esm/sparql/irToAlgebra.js.map +1 -1
  46. package/lib/esm/test-helpers/FusekiStore.d.ts +4 -4
  47. package/lib/esm/test-helpers/FusekiStore.js +4 -4
  48. package/lib/esm/test-helpers/FusekiStore.js.map +1 -1
  49. package/lib/esm/test-helpers/fuseki-test-store.js +3 -0
  50. package/lib/esm/test-helpers/fuseki-test-store.js.map +1 -1
  51. package/lib/esm/utils/LinkedFileStorage.d.ts +3 -3
  52. package/lib/esm/utils/LinkedFileStorage.js +21 -13
  53. package/lib/esm/utils/LinkedFileStorage.js.map +1 -1
  54. package/lib/esm/utils/LinkedStorage.d.ts +25 -9
  55. package/lib/esm/utils/LinkedStorage.js +63 -44
  56. package/lib/esm/utils/LinkedStorage.js.map +1 -1
  57. package/lib/esm/utils/loadStores.d.ts +34 -0
  58. package/lib/esm/utils/loadStores.js +65 -0
  59. package/lib/esm/utils/loadStores.js.map +1 -0
  60. package/lib/esm/utils/parseDatasetsConfig.d.ts +49 -0
  61. package/lib/esm/utils/parseDatasetsConfig.js +107 -0
  62. package/lib/esm/utils/parseDatasetsConfig.js.map +1 -0
  63. package/package.json +1 -1
  64. package/lib/cjs/sparql/SparqlStore.js.map +0 -1
  65. package/lib/esm/sparql/SparqlStore.js.map +0 -1
@@ -2,18 +2,30 @@ import { CoreMap } from '../collections/CoreMap.js';
2
2
  import { CoreSet } from '../collections/CoreSet.js';
3
3
  import { setQueryDispatch } from '../queries/queryDispatch.js';
4
4
  import { getShapeClass } from './ShapeClass.js';
5
+ /**
6
+ * Primary routing layer (arch-04 §The IDataset abstraction).
7
+ *
8
+ * Resolves an incoming Linked Query to the IDataset that should handle it,
9
+ * based on the query's target shape. Composite IDatasets (gateways, routers,
10
+ * forwarders, resolvers) plug in here just like storage IDatasets do.
11
+ *
12
+ * The "Dataset" naming aligns with the IDataset contract. Earlier "Store"
13
+ * names were renamed in phase-1 — see docs/plans/002-phase-1-create-user-project-flow.md.
14
+ */
5
15
  export class LinkedStorage {
6
16
  static isInitialised() {
7
- return !!this.defaultStore;
17
+ return !!this.defaultDataset;
8
18
  }
9
- static getDefaultStore() {
10
- return this.defaultStore;
19
+ /** The catch-all IDataset for shapes with no explicit mapping. */
20
+ static getDefaultDataset() {
21
+ return this.defaultDataset;
11
22
  }
12
- static setDefaultStore(store) {
23
+ /** Set the default IDataset (catch-all for shapes with no explicit mapping). */
24
+ static setDefaultDataset(dataset) {
13
25
  var _a;
14
- this.defaultStore = store;
15
- if ((_a = this.defaultStore) === null || _a === void 0 ? void 0 : _a.init) {
16
- this.defaultStore.init();
26
+ this.defaultDataset = dataset;
27
+ if ((_a = this.defaultDataset) === null || _a === void 0 ? void 0 : _a.init) {
28
+ this.defaultDataset.init();
17
29
  }
18
30
  setQueryDispatch({
19
31
  selectQuery: (q) => this.selectQuery(q),
@@ -22,78 +34,85 @@ export class LinkedStorage {
22
34
  deleteQuery: (q) => this.deleteQuery(q),
23
35
  });
24
36
  }
25
- static setStoreForShapes(store, ...shapeClasses) {
37
+ /** Pin one or more shape classes to a specific IDataset implementer. */
38
+ static setDatasetForShapes(dataset, ...shapeClasses) {
26
39
  shapeClasses.forEach((shapeClass) => {
27
- this.shapeToStore.set(shapeClass, store);
40
+ this.shapeToDataset.set(shapeClass, dataset);
28
41
  });
29
42
  }
30
- static getStores() {
31
- const stores = new CoreSet();
32
- if (this.defaultStore) {
33
- stores.add(this.defaultStore);
43
+ /** Every IDataset known to the primary router (default + all pinned). */
44
+ static getDatasets() {
45
+ const datasets = new CoreSet();
46
+ if (this.defaultDataset) {
47
+ datasets.add(this.defaultDataset);
34
48
  }
35
- this.shapeToStore.forEach((store) => stores.add(store));
36
- return stores;
49
+ this.shapeToDataset.forEach((dataset) => datasets.add(dataset));
50
+ return datasets;
37
51
  }
38
- static getShapeToStoreMap() {
39
- return this.shapeToStore;
52
+ /** Read-only view of the shape→IDataset map. */
53
+ static getShapeToDatasetMap() {
54
+ return this.shapeToDataset;
40
55
  }
41
- static getStoreForShapeClass(shapeClass) {
56
+ /** Resolve the IDataset for a given shape class. Walks the prototype chain. */
57
+ static getDatasetForShapeClass(shapeClass) {
42
58
  let current = shapeClass !== null && shapeClass !== void 0 ? shapeClass : null;
43
59
  while (typeof current === 'function') {
44
- const store = this.shapeToStore.get(current);
45
- if (store) {
46
- return store;
60
+ const dataset = this.shapeToDataset.get(current);
61
+ if (dataset) {
62
+ return dataset;
47
63
  }
48
64
  const parent = Object.getPrototypeOf(current);
49
65
  if (parent === Function.prototype || parent === null)
50
66
  break;
51
67
  current = parent;
52
68
  }
53
- return this.defaultStore;
69
+ return this.defaultDataset;
54
70
  }
55
- static resolveStoreForQueryShape(shape) {
71
+ static resolveDatasetForQueryShape(shape) {
56
72
  if (!shape) {
57
- return this.defaultStore;
73
+ return this.defaultDataset;
58
74
  }
59
75
  if (typeof shape === 'function') {
60
- return this.getStoreForShapeClass(shape);
76
+ return this.getDatasetForShapeClass(shape);
61
77
  }
62
78
  if (typeof shape === 'string') {
63
79
  const shapeClass = getShapeClass(shape);
64
- return this.getStoreForShapeClass(shapeClass);
80
+ return this.getDatasetForShapeClass(shapeClass);
65
81
  }
66
- return this.defaultStore;
82
+ return this.defaultDataset;
67
83
  }
68
84
  static selectQuery(query) {
69
85
  var _a;
70
- const store = this.resolveStoreForQueryShape((_a = query === null || query === void 0 ? void 0 : query.root) === null || _a === void 0 ? void 0 : _a.shape);
71
- if (!(store === null || store === void 0 ? void 0 : store.selectQuery)) {
72
- return Promise.reject(new Error('No query store configured. Call LinkedStorage.setDefaultStore().'));
86
+ if (!(query === null || query === void 0 ? void 0 : query.root)) {
87
+ return Promise.reject(new Error(`Invalid select query passed to LinkedStorage.selectQuery(): missing root. Payload: ${query ? JSON.stringify(query) : 'undefined'}`));
73
88
  }
74
- return store.selectQuery(query);
89
+ const dataset = this.resolveDatasetForQueryShape((_a = query === null || query === void 0 ? void 0 : query.root) === null || _a === void 0 ? void 0 : _a.shape);
90
+ if (!(dataset === null || dataset === void 0 ? void 0 : dataset.selectQuery)) {
91
+ return Promise.reject(new Error('No query dataset configured. Call LinkedStorage.setDefaultDataset().'));
92
+ }
93
+ return dataset.selectQuery(query);
75
94
  }
76
95
  static updateQuery(query) {
77
- const store = this.resolveStoreForQueryShape(query === null || query === void 0 ? void 0 : query.shape);
78
- if (!(store === null || store === void 0 ? void 0 : store.updateQuery)) {
79
- return Promise.reject(new Error('No update handler configured on the query store.'));
96
+ const dataset = this.resolveDatasetForQueryShape(query === null || query === void 0 ? void 0 : query.shape);
97
+ if (!(dataset === null || dataset === void 0 ? void 0 : dataset.updateQuery)) {
98
+ return Promise.reject(new Error('No update handler configured on the query dataset.'));
80
99
  }
81
- return store.updateQuery(query);
100
+ return dataset.updateQuery(query);
82
101
  }
83
102
  static createQuery(query) {
84
- const store = this.resolveStoreForQueryShape(query === null || query === void 0 ? void 0 : query.shape);
85
- if (!(store === null || store === void 0 ? void 0 : store.createQuery)) {
86
- return Promise.reject(new Error('No create handler configured on the query store.'));
103
+ const dataset = this.resolveDatasetForQueryShape(query === null || query === void 0 ? void 0 : query.shape);
104
+ if (!(dataset === null || dataset === void 0 ? void 0 : dataset.createQuery)) {
105
+ return Promise.reject(new Error('No create handler configured on the query dataset.'));
87
106
  }
88
- return store.createQuery(query);
107
+ return dataset.createQuery(query);
89
108
  }
90
109
  static deleteQuery(query) {
91
- const store = this.resolveStoreForQueryShape(query === null || query === void 0 ? void 0 : query.shape);
92
- if (!(store === null || store === void 0 ? void 0 : store.deleteQuery)) {
93
- return Promise.reject(new Error('No delete handler configured on the query store.'));
110
+ const dataset = this.resolveDatasetForQueryShape(query === null || query === void 0 ? void 0 : query.shape);
111
+ if (!(dataset === null || dataset === void 0 ? void 0 : dataset.deleteQuery)) {
112
+ return Promise.reject(new Error('No delete handler configured on the query dataset.'));
94
113
  }
95
- return store.deleteQuery(query);
114
+ return dataset.deleteQuery(query);
96
115
  }
97
116
  }
98
- LinkedStorage.shapeToStore = new CoreMap();
117
+ LinkedStorage.shapeToDataset = new CoreMap();
99
118
  //# sourceMappingURL=LinkedStorage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LinkedStorage.js","sourceRoot":"","sources":["../../../src/utils/LinkedStorage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LinkedStorage.js","sourceRoot":"","sources":["../../../src/utils/LinkedStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAC,OAAO,EAAC,MAAM,2BAA2B,CAAC;AAMlD,OAAO,EAAC,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C;;;;;;;;;GASG;AACH,MAAM,OAAgB,aAAa;IAKjC,MAAM,CAAC,aAAa;QAClB,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,kEAAkE;IAClE,MAAM,CAAC,iBAAiB;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,gFAAgF;IAChF,MAAM,CAAC,iBAAiB,CAAC,OAAiB;;QACxC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,IAAI,MAAA,IAAI,CAAC,cAAc,0CAAE,IAAI,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC;QACD,gBAAgB,CAAC;YACf,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACvC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACvC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACvC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;SACxC,CAAC,CAAC;IACL,CAAC;IAED,wEAAwE;IACxE,MAAM,CAAC,mBAAmB,CAAC,OAAiB,EAAE,GAAG,YAAwB;QACvE,YAAY,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YAClC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,yEAAyE;IACzE,MAAM,CAAC,WAAW;QAChB,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAY,CAAC;QACzC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAChE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,gDAAgD;IAChD,MAAM,CAAC,oBAAoB;QACzB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,+EAA+E;IAC/E,MAAM,CAAC,uBAAuB,CAAC,UAA4B;QACzD,IAAI,OAAO,GAAoB,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,IAAI,CAAC;QAClD,OAAO,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACjD,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,MAAM,KAAK,QAAQ,CAAC,SAAS,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM;YAC5D,OAAO,GAAG,MAAM,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAEO,MAAM,CAAC,2BAA2B,CACxC,KAAgC;QAEhC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,cAAc,CAAC;QAC7B,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,WAAW,CAAa,KAAkB;;QAC/C,IAAI,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAA,EAAE,CAAC;YACjB,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CACP,sFACE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAClC,EAAE,CACH,CACF,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,0CAAE,KAAK,CAAC,CAAC;QACrE,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CAAA,EAAE,CAAC;YAC1B,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAClF,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,CAAwB,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,WAAW,CAAe,KAAkB;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAC,CAAC;QAC/D,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CAAA,EAAE,CAAC;YAC1B,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAChE,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,CAA0B,CAAC;IAC7D,CAAC;IAED,MAAM,CAAC,WAAW,CAAe,KAAkB;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAC,CAAC;QAC/D,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CAAA,EAAE,CAAC;YAC1B,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAChE,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,CAA0B,CAAC;IAC7D,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,KAAkB;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAC,CAAC;QAC/D,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CAAA,EAAE,CAAC;YAC1B,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAChE,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;;AA9Hc,4BAAc,GAC3B,IAAI,OAAO,EAAE,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { DatasetsConfig } from './parseDatasetsConfig.js';
2
+ /**
3
+ * Dynamically imports each alias's `store` (an npm specifier) and
4
+ * instantiates the resolved class with the entry's `config` verbatim —
5
+ * `new StoreClass(entry.config)`. Returns alias → store.
6
+ *
7
+ * Convention: the last segment of the `store` path is the named export
8
+ * to use (e.g. `@_linked/fuseki/shapes/FusekiStore` → `FusekiStore`).
9
+ * Falls back to the module's `default` export if the named export is
10
+ * absent. Each store class must accept a single config-object argument.
11
+ *
12
+ * Async + uses runtime dynamic import; works in Node where the module
13
+ * specifier can be resolved at runtime. Frontends should instead
14
+ * import each store class explicitly in their storage-config file and
15
+ * instantiate per alias by hand (webpack can't bundle
16
+ * `import(variableString)`).
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * import rawConfig from './linked.backend.datasets.json' assert { type: 'json' };
21
+ * import { parseDatasetsConfig } from '@_linked/core/utils/parseDatasetsConfig';
22
+ * import { loadStores } from '@_linked/core/utils/loadStores';
23
+ * import { LinkedStorage } from '@_linked/core/utils/LinkedStorage';
24
+ *
25
+ * const config = parseDatasetsConfig(rawConfig, process.env);
26
+ * const stores = await loadStores(config);
27
+ * LinkedStorage.setDefaultDataset(stores.appData);
28
+ * ```
29
+ *
30
+ * @param config Parsed config from {@link parseDatasetsConfig}.
31
+ * @returns Map of alias → constructed store instance.
32
+ * @throws If a `store` path can't be resolved to a class export.
33
+ */
34
+ export declare function loadStores<T = unknown>(config: DatasetsConfig): Promise<Record<string, T>>;
@@ -0,0 +1,65 @@
1
+ // Backend-side store loader. Lives in its own file so that frontend
2
+ // bundlers (webpack) consuming parseDatasetsConfig don't pull in the
3
+ // dynamic-import code below — webpack flags `import(variableString)` as
4
+ // a critical dependency when it can't analyse the target statically.
5
+ //
6
+ // Backends import this directly; frontends never do.
7
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
9
+ return new (P || (P = Promise))(function (resolve, reject) {
10
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
11
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
12
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
13
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
14
+ });
15
+ };
16
+ /**
17
+ * Dynamically imports each alias's `store` (an npm specifier) and
18
+ * instantiates the resolved class with the entry's `config` verbatim —
19
+ * `new StoreClass(entry.config)`. Returns alias → store.
20
+ *
21
+ * Convention: the last segment of the `store` path is the named export
22
+ * to use (e.g. `@_linked/fuseki/shapes/FusekiStore` → `FusekiStore`).
23
+ * Falls back to the module's `default` export if the named export is
24
+ * absent. Each store class must accept a single config-object argument.
25
+ *
26
+ * Async + uses runtime dynamic import; works in Node where the module
27
+ * specifier can be resolved at runtime. Frontends should instead
28
+ * import each store class explicitly in their storage-config file and
29
+ * instantiate per alias by hand (webpack can't bundle
30
+ * `import(variableString)`).
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * import rawConfig from './linked.backend.datasets.json' assert { type: 'json' };
35
+ * import { parseDatasetsConfig } from '@_linked/core/utils/parseDatasetsConfig';
36
+ * import { loadStores } from '@_linked/core/utils/loadStores';
37
+ * import { LinkedStorage } from '@_linked/core/utils/LinkedStorage';
38
+ *
39
+ * const config = parseDatasetsConfig(rawConfig, process.env);
40
+ * const stores = await loadStores(config);
41
+ * LinkedStorage.setDefaultDataset(stores.appData);
42
+ * ```
43
+ *
44
+ * @param config Parsed config from {@link parseDatasetsConfig}.
45
+ * @returns Map of alias → constructed store instance.
46
+ * @throws If a `store` path can't be resolved to a class export.
47
+ */
48
+ export function loadStores(config) {
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ var _a;
51
+ const stores = {};
52
+ for (const [alias, entry] of Object.entries(config.datasets)) {
53
+ const mod = yield import(entry.store);
54
+ const exportName = entry.store.split('/').pop();
55
+ const StoreClass = (_a = (mod && mod[exportName])) !== null && _a !== void 0 ? _a : (mod && mod.default);
56
+ if (typeof StoreClass !== 'function') {
57
+ throw new Error(`loadStores: could not resolve a class export from "${entry.store}" for alias "${alias}". ` +
58
+ `Expected a named export "${exportName}" or a default export that is a class.`);
59
+ }
60
+ stores[alias] = new StoreClass(entry.config);
61
+ }
62
+ return stores;
63
+ });
64
+ }
65
+ //# sourceMappingURL=loadStores.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadStores.js","sourceRoot":"","sources":["../../../src/utils/loadStores.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,qEAAqE;AACrE,wEAAwE;AACxE,qEAAqE;AACrE,EAAE;AACF,qDAAqD;;;;;;;;;;AAIrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAgB,UAAU,CAC9B,MAAsB;;;QAEtB,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7D,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAC;YACjD,MAAM,UAAU,GACd,MAAA,CAAC,GAAG,IAAK,GAA+B,CAAC,UAAU,CAAC,CAAC,mCACrD,CAAC,GAAG,IAAK,GAA2B,CAAC,OAAO,CAAC,CAAC;YAChD,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CACb,sDAAsD,KAAK,CAAC,KAAK,gBAAgB,KAAK,KAAK;oBACzF,4BAA4B,UAAU,wCAAwC,CACjF,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,GAAG,IAAK,UAAsC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CAAA"}
@@ -0,0 +1,49 @@
1
+ /** One entry under `datasets`. Keyed by alias name in the parent object. */
2
+ export interface DatasetEntry {
3
+ /** npm import path to the IDataset class — e.g. "@_linked/fuseki/shapes/FusekiStore". */
4
+ store: string;
5
+ /** Constructor argument forwarded to the store class. Shape is store-specific. */
6
+ config: Record<string, unknown>;
7
+ }
8
+ /** Top-level structure of linked.{backend,frontend}.datasets.json. */
9
+ export interface DatasetsConfig {
10
+ /** Alias → store entry. */
11
+ datasets: Record<string, DatasetEntry>;
12
+ /** Reserved for future top-level sections (fileStorage, services, etc.). */
13
+ [section: string]: unknown;
14
+ }
15
+ /**
16
+ * Parse + env-resolve a raw datasets config object.
17
+ *
18
+ * - Requires a top-level `datasets` object (other top-level sections are passed
19
+ * through unchanged for future extension).
20
+ * - Resolves `${VAR}` and `${VAR:-default}` placeholders against `env` recursively
21
+ * across all string leaves.
22
+ * - Strips keys starting with `_` (treated as comments / `_note` fields).
23
+ * - Throws on a referenced env var with no default that is unset or empty.
24
+ *
25
+ * Pure + browser-safe — no file I/O, no dynamic imports. Use this on both
26
+ * backend and frontend. The companion `loadStores` (separate file) does the
27
+ * runtime dynamic-import dispatch for the backend.
28
+ *
29
+ * @example Backend
30
+ * ```ts
31
+ * import rawConfig from './linked.backend.datasets.json' assert { type: 'json' };
32
+ * const config = parseDatasetsConfig(rawConfig, process.env);
33
+ * ```
34
+ *
35
+ * @example Frontend
36
+ * ```ts
37
+ * import rawConfig from './linked.frontend.datasets.json' assert { type: 'json' };
38
+ * // No runtime env in the browser; pass empty {}
39
+ * const config = parseDatasetsConfig(rawConfig, {});
40
+ * const appData = new BackendAPIStore(config.datasets.appData.config);
41
+ * ```
42
+ *
43
+ * @param raw Parsed JSON object (or anything object-shaped). Throws otherwise.
44
+ * @param env Env map. Defaults to {} (no interpolation).
45
+ * @returns Typed, env-resolved {@link DatasetsConfig}.
46
+ * @throws On missing/malformed `datasets`, on malformed alias entry, or
47
+ * on an unresolved `${VAR}` with no default.
48
+ */
49
+ export declare function parseDatasetsConfig(raw: unknown, env?: Record<string, string | undefined>): DatasetsConfig;
@@ -0,0 +1,107 @@
1
+ // Pure parser + dispatcher for linked.{backend,frontend}.datasets.json.
2
+ //
3
+ // Per the spec in docs/backlog/016-ejection-export-flow.md:
4
+ //
5
+ // {
6
+ // "datasets": {
7
+ // "<alias>": {
8
+ // "store": "<npm-import-path>",
9
+ // "config": { /* passed verbatim to the store's constructor */ }
10
+ // }
11
+ // }
12
+ // }
13
+ //
14
+ // `store` is an npm import path string (e.g. "@_linked/fuseki/shapes/FusekiStore").
15
+ // `config` is the store class's own concern — the runtime never inspects it.
16
+ // `${VAR}` / `${VAR:-default}` placeholders inside string values are resolved
17
+ // against an env map at parse time.
18
+ /**
19
+ * Parse + env-resolve a raw datasets config object.
20
+ *
21
+ * - Requires a top-level `datasets` object (other top-level sections are passed
22
+ * through unchanged for future extension).
23
+ * - Resolves `${VAR}` and `${VAR:-default}` placeholders against `env` recursively
24
+ * across all string leaves.
25
+ * - Strips keys starting with `_` (treated as comments / `_note` fields).
26
+ * - Throws on a referenced env var with no default that is unset or empty.
27
+ *
28
+ * Pure + browser-safe — no file I/O, no dynamic imports. Use this on both
29
+ * backend and frontend. The companion `loadStores` (separate file) does the
30
+ * runtime dynamic-import dispatch for the backend.
31
+ *
32
+ * @example Backend
33
+ * ```ts
34
+ * import rawConfig from './linked.backend.datasets.json' assert { type: 'json' };
35
+ * const config = parseDatasetsConfig(rawConfig, process.env);
36
+ * ```
37
+ *
38
+ * @example Frontend
39
+ * ```ts
40
+ * import rawConfig from './linked.frontend.datasets.json' assert { type: 'json' };
41
+ * // No runtime env in the browser; pass empty {}
42
+ * const config = parseDatasetsConfig(rawConfig, {});
43
+ * const appData = new BackendAPIStore(config.datasets.appData.config);
44
+ * ```
45
+ *
46
+ * @param raw Parsed JSON object (or anything object-shaped). Throws otherwise.
47
+ * @param env Env map. Defaults to {} (no interpolation).
48
+ * @returns Typed, env-resolved {@link DatasetsConfig}.
49
+ * @throws On missing/malformed `datasets`, on malformed alias entry, or
50
+ * on an unresolved `${VAR}` with no default.
51
+ */
52
+ export function parseDatasetsConfig(raw, env = {}) {
53
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
54
+ throw new Error('Invalid datasets config: expected a top-level JSON object');
55
+ }
56
+ const resolved = resolveInterpolations(raw, env);
57
+ const datasets = resolved.datasets;
58
+ if (!datasets || typeof datasets !== 'object' || Array.isArray(datasets)) {
59
+ throw new Error('Invalid datasets config: missing or malformed "datasets" section');
60
+ }
61
+ for (const [alias, entry] of Object.entries(datasets)) {
62
+ if (!entry || typeof entry !== 'object' || Array.isArray(entry)) {
63
+ throw new Error(`Invalid datasets config: alias "${alias}" must be an object`);
64
+ }
65
+ const e = entry;
66
+ if (typeof e.store !== 'string' || !e.store) {
67
+ throw new Error(`Invalid datasets config: alias "${alias}" is missing a string "store" (npm import path)`);
68
+ }
69
+ if (e.config !== undefined && (typeof e.config !== 'object' || Array.isArray(e.config))) {
70
+ throw new Error(`Invalid datasets config: alias "${alias}" "config" must be an object if present`);
71
+ }
72
+ if (e.config === undefined)
73
+ e.config = {};
74
+ }
75
+ return resolved;
76
+ }
77
+ function resolveInterpolations(value, env) {
78
+ if (typeof value === 'string')
79
+ return resolveString(value, env);
80
+ if (Array.isArray(value)) {
81
+ return value.map((v) => resolveInterpolations(v, env));
82
+ }
83
+ if (value && typeof value === 'object') {
84
+ const out = {};
85
+ for (const key of Object.keys(value)) {
86
+ if (key.startsWith('_'))
87
+ continue; // _note, _comment, ...
88
+ out[key] = resolveInterpolations(value[key], env);
89
+ }
90
+ return out;
91
+ }
92
+ return value;
93
+ }
94
+ // Matches ${VAR} or ${VAR:-default}. VAR is uppercase alphanum + underscore.
95
+ // Default text may contain anything except `}`.
96
+ const INTERP_RE = /\$\{([A-Z0-9_]+)(?::-([^}]*))?\}/g;
97
+ function resolveString(input, env) {
98
+ return input.replace(INTERP_RE, (_full, varName, defaultValue) => {
99
+ const v = env[varName];
100
+ if (v !== undefined && v !== '')
101
+ return v;
102
+ if (defaultValue !== undefined)
103
+ return defaultValue;
104
+ throw new Error(`Required env var "${varName}" is not set and has no default (referenced in datasets config)`);
105
+ });
106
+ }
107
+ //# sourceMappingURL=parseDatasetsConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseDatasetsConfig.js","sourceRoot":"","sources":["../../../src/utils/parseDatasetsConfig.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@_linked/core",
3
- "version": "2.6.0-next.20260509053822",
3
+ "version": "2.6.0",
4
4
  "license": "MIT",
5
5
  "linkedPackage": true,
6
6
  "description": "Linked.js core query and SHACL shape DSL (copy-then-prune baseline)",
@@ -1 +0,0 @@
1
- {"version":3,"file":"SparqlStore.js","sourceRoot":"","sources":["../../../src/sparql/SparqlStore.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SparqlStore.js","sourceRoot":"","sources":["../../../src/sparql/SparqlStore.ts"],"names":[],"mappings":"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"}