@hydrofoil/talos-core 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bootstrap.js CHANGED
@@ -40,6 +40,6 @@ export async function bootstrap({ dataset, store }) {
40
40
  }
41
41
  await store.save(pointer);
42
42
  }
43
- log.info('Graphs bootstrapped: %o', summary);
43
+ log.info('Graphs bootstrapped: ', summary);
44
44
  }
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYm9vdHN0cmFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM5QyxPQUFPLElBQUksTUFBTSxVQUFVLENBQUE7QUFDM0IsT0FBTyxHQUFHLE1BQU0sY0FBYyxDQUFBO0FBTzlCLE1BQU0sQ0FBQyxLQUFLLFVBQVUsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBYTtJQUMzRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFBO0lBQ3pFLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDakQsTUFBTSxPQUFPLEdBQUc7UUFDZCxPQUFPLEVBQUUsQ0FBQztRQUNWLE9BQU8sRUFBRSxDQUFDO1FBQ1YsT0FBTyxFQUFFLENBQUM7S0FDWCxDQUFBO0lBRUQsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQzlELE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyRSxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQ2pGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1lBQ25DLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtTQUNwQixDQUFDLENBQUE7UUFFRixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQTtRQUN0RCxNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQy9DLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDL0MsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO1lBQ2pCLEdBQUcsQ0FBQyxrQkFBa0IsUUFBUSxFQUFFLENBQUMsQ0FBQTtZQUNqQyxTQUFRO1NBQ1Q7UUFFRCxJQUFJLE1BQU0sRUFBRTtZQUNWLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtZQUNqQixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3RDLEdBQUcsQ0FBQywrQkFBK0IsUUFBUSxFQUFFLENBQUMsQ0FBQTtnQkFDOUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDOUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO2FBQ3hDO2lCQUFNO2dCQUNMLEdBQUcsQ0FBQyxtQkFBbUIsUUFBUSxFQUFFLENBQUMsQ0FBQTthQUNuQztTQUNGO2FBQU07WUFDTCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7WUFDakIsR0FBRyxDQUFDLGtCQUFrQixRQUFRLEVBQUUsQ0FBQyxDQUFBO1NBQ2xDO1FBRUQsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0tBQzFCO0lBRUQsR0FBRyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUM5QyxDQUFDIn0=
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYm9vdHN0cmFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM5QyxPQUFPLElBQUksTUFBTSxVQUFVLENBQUE7QUFDM0IsT0FBTyxHQUFHLE1BQU0sY0FBYyxDQUFBO0FBTzlCLE1BQU0sQ0FBQyxLQUFLLFVBQVUsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBYTtJQUMzRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFBO0lBQ3pFLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDakQsTUFBTSxPQUFPLEdBQUc7UUFDZCxPQUFPLEVBQUUsQ0FBQztRQUNWLE9BQU8sRUFBRSxDQUFDO1FBQ1YsT0FBTyxFQUFFLENBQUM7S0FDWCxDQUFBO0lBRUQsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDL0QsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3JFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDakYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7WUFDbkMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO1NBQ3BCLENBQUMsQ0FBQTtRQUVGLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFBO1FBQ3RELE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDL0MsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtZQUNqQixHQUFHLENBQUMsa0JBQWtCLFFBQVEsRUFBRSxDQUFDLENBQUE7WUFDakMsU0FBUTtRQUNWLENBQUM7UUFFRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO1lBQ2pCLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxHQUFHLENBQUMsK0JBQStCLFFBQVEsRUFBRSxDQUFDLENBQUE7Z0JBQzlDLE1BQU0sT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzlDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUN6QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sR0FBRyxDQUFDLG1CQUFtQixRQUFRLEVBQUUsQ0FBQyxDQUFBO1lBQ3BDLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtZQUNqQixHQUFHLENBQUMsa0JBQWtCLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDbkMsQ0FBQztRQUVELE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUMzQixDQUFDO0lBRUQsR0FBRyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUM1QyxDQUFDIn0=
package/env.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { TalosNsFactory } from './lib/ns.js';
2
- declare const _default: import("@zazuko/env-core").DerivedEnvironment<import("@zazuko/env-core").DerivedEnvironment<import("@zazuko/env-core").DerivedEnvironment<import("@rdfjs/environment/Environment.js").Environment<import("@tpluscode/rdf-ns-builders").default | import("@rdfjs/namespace/Factory.js").NamespaceFactory | import("@rdfjs/formats/Factory.js").FormatsFactory | import("@rdfjs/data-model/Factory.js").default | import("clownface/Factory.js").default | import("@rdfjs/term-set/Factory.js").TermSetFactory | import("@rdfjs/term-map/Factory.js").TermMapFactory | import("@rdfjs/traverser/Factory.js").TraverserFactory>, import("@rdfjs/environment/Environment.js").Environment<{
2
+ declare const _default: import("@zazuko/env-core").DerivedEnvironment<import("@zazuko/env-core").DerivedEnvironment<import("@zazuko/env-core").DerivedEnvironment<import("@rdfjs/environment/Environment.js").Environment<import("@tpluscode/rdf-ns-builders").default | import("@rdfjs/namespace/Factory.js").NamespaceFactory | import("@rdfjs/data-model/Factory.js").default | import("@rdfjs/formats/Factory.js").FormatsFactory | import("@rdfjs/term-map/Factory.js").TermMapFactory | import("clownface/Factory.js").default | import("@rdfjs/term-set/Factory.js").TermSetFactory | import("@rdfjs/traverser/Factory.js").TraverserFactory>, import("@rdfjs/environment/Environment.js").Environment<{
3
3
  dataset: import("@zazuko/env/lib/DatasetFactoryExt.js").FactoryMethod<import("@zazuko/env/lib/DatasetExt.js").Dataset>;
4
- init(this: import("@rdfjs/environment/Environment.js").Environment<any>): void;
4
+ init(this: import("@rdfjs/environment/Environment.js").Environment<import("@rdfjs/data-model/Factory.js").default | import("@rdfjs/formats/Factory.js").FormatsFactory | import("@rdfjs/term-map/Factory.js").TermMapFactory | import("@zazuko/env/lib/DatasetFactoryExt.js").DatasetFactoryExt<import("@zazuko/env/lib/DatasetExt.js").Dataset>>): void;
5
5
  }>>, import("@rdfjs/environment/Environment.js").Environment<import("@zazuko/rdf-utils-fs/Factory.js").default | import("@rdfjs/fetch-lite/Factory.js").FetchFactory>>, import("@rdfjs/environment/Environment.js").Environment<TalosNsFactory>>;
6
6
  export default _default;
package/index.d.ts CHANGED
@@ -3,5 +3,6 @@ declare const ns: import("@rdfjs/namespace").NamespaceBuilder<"resources" | "act
3
3
  export { ns };
4
4
  interface Options {
5
5
  includeMetaGraph?: boolean;
6
+ endpoints?: Record<string, string>;
6
7
  }
7
- export declare function fromDirectories(directories: string[], baseIri: string, { includeMetaGraph }?: Options): Promise<Dataset>;
8
+ export declare function fromDirectories(directories: string[], baseIri: string, { includeMetaGraph, endpoints }?: Options): Promise<Dataset>;
package/index.js CHANGED
@@ -5,14 +5,15 @@ import $rdf from './env.js';
5
5
  import log from './lib/log.js';
6
6
  import { getPatchedStream } from './lib/fileStream.js';
7
7
  import { optionsFromPrefixes } from './lib/prefixHandler.js';
8
- import { baseIRI } from './lib/baseIRI.js';
9
8
  import { applyUpdates } from './lib/applyUpdates.js';
9
+ import { resourcePathFromFilePath } from './lib/iri.js';
10
10
  const { talos: ns } = $rdf.ns;
11
11
  export { ns };
12
- export async function fromDirectories(directories, baseIri, { includeMetaGraph } = { includeMetaGraph: true }) {
12
+ export async function fromDirectories(directories, baseIri, { includeMetaGraph = true, endpoints = {} } = {}) {
13
+ const baseIriNoSlash = baseIri.replace(/\/$/, '');
13
14
  const validDirs = directories.filter(isValidDir);
14
- const dataset = await validDirs.reduce(toGraphs(baseIri), Promise.resolve($rdf.dataset()));
15
- const updatedDataset = await applyUpdates(baseIri, validDirs, dataset);
15
+ const dataset = await validDirs.reduce(toGraphs(new URL(baseIri)), Promise.resolve($rdf.dataset()));
16
+ const updatedDataset = await applyUpdates(baseIriNoSlash, validDirs, dataset, endpoints);
16
17
  setDefaultAction(updatedDataset);
17
18
  return updatedDataset.filter(({ graph }) => {
18
19
  return includeMetaGraph || !graph.equals($rdf.ns.talos.resources);
@@ -27,35 +28,37 @@ function setDefaultAction(dataset) {
27
28
  return !action || action.equals($rdf.ns.talos.default);
28
29
  });
29
30
  metaGraph
30
- .node(graphsToOverwrite)
31
+ .node($rdf.termSet(graphsToOverwrite))
31
32
  .deleteOut($rdf.ns.talos.action)
32
33
  .addOut($rdf.ns.talos.action, $rdf.ns.talos.overwrite);
33
34
  }
34
- function toGraphs(api) {
35
+ function toGraphs(baseIri) {
36
+ const baseIriNoSlash = baseIri.toString().replace(/\/$/, '');
35
37
  return async function (previousPromise, dir) {
36
38
  let previous = await previousPromise;
37
39
  const dataset = $rdf.dataset();
38
- log.debug('Processing dir %s', dir);
40
+ log.debug(`Processing dir ${dir}`);
39
41
  for await (const file of walk(dir)) {
40
42
  if (file.endsWith('.ru')) {
41
43
  continue;
42
44
  }
43
45
  const relative = path.relative(dir, file);
44
- const url = baseIRI(relative, api);
45
- const parserStream = getPatchedStream(file, dir, api, url);
46
+ const resourcePath = resourcePathFromFilePath(relative);
47
+ const resourceUrl = $rdf.namedNode(resourcePath === '' ? baseIri.toString() : `${baseIriNoSlash}/${resourcePath}`);
48
+ const parserStream = getPatchedStream(file, dir, baseIriNoSlash, resourcePath);
46
49
  if (!parserStream) {
47
50
  continue;
48
51
  }
49
- log.debug('Parsing %s', relative);
52
+ log.debug(`Parsing ${relative}`);
50
53
  const parsedResourceOptions = {};
51
54
  parserStream.on('prefix', optionsFromPrefixes(parsedResourceOptions));
52
55
  const resources = $rdf.termSet();
53
56
  const resourceOptions = $rdf.clownface({ dataset: previous, graph: $rdf.ns.talos.resources });
54
57
  try {
55
58
  for await (const { subject, predicate, object, ...quad } of parserStream) {
56
- const graph = quad.graph.equals($rdf.defaultGraph()) ? $rdf.namedNode(url) : quad.graph;
59
+ const graph = quad.graph.equals($rdf.defaultGraph()) ? resourceUrl : quad.graph;
57
60
  if (!resources.has(graph)) {
58
- log.debug('Found graph %s', graph.value);
61
+ log.debug(`Found graph ${graph.value}`);
59
62
  }
60
63
  resources.add(graph);
61
64
  dataset.add($rdf.quad(subject, predicate, object, graph));
@@ -63,7 +66,7 @@ function toGraphs(api) {
63
66
  }
64
67
  catch (e) {
65
68
  if (e instanceof Error) {
66
- log.error('Failed to parse %s: %s', relative, e.message);
69
+ log.error(`Failed to parse ${relative}: ${e.message}`);
67
70
  }
68
71
  }
69
72
  resources.forEach(id => {
@@ -86,13 +89,13 @@ function toGraphs(api) {
86
89
  }
87
90
  function isValidDir(dir) {
88
91
  if (!fs.existsSync(dir)) {
89
- log.warn('Skipping path %s which does not exist', dir);
92
+ log.warn(`Skipping path ${dir} which does not exist`);
90
93
  return false;
91
94
  }
92
95
  if (!fs.statSync(dir).isDirectory()) {
93
- log.warn('Skipping path %s which is not a directory', dir);
96
+ log.warn(`Skipping path ${dir} which is not a directory`);
94
97
  return false;
95
98
  }
96
99
  return true;
97
100
  }
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxNQUFNLENBQUE7QUFDdkIsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBRW5CLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUUxQyxPQUFPLElBQUksTUFBTSxVQUFVLENBQUE7QUFDM0IsT0FBTyxHQUFHLE1BQU0sY0FBYyxDQUFBO0FBQzlCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFFcEQsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFBO0FBQzdCLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQTtBQVdiLE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUFDLFdBQXFCLEVBQUUsT0FBZSxFQUFFLEVBQUUsZ0JBQWdCLEtBQWMsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUU7SUFDdEksTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNoRCxNQUFNLE9BQU8sR0FBRyxNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUMxRixNQUFNLGNBQWMsR0FBRyxNQUFNLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBRXRFLGdCQUFnQixDQUFDLGNB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
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxNQUFNLENBQUE7QUFDdkIsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBRW5CLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUUxQyxPQUFPLElBQUksTUFBTSxVQUFVLENBQUE7QUFDM0IsT0FBTyxHQUFHLE1BQU0sY0FBYyxDQUFBO0FBQzlCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFdkQsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFBO0FBQzdCLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQTtBQVliLE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUFDLFdBQXFCLEVBQUUsT0FBZSxFQUFFLEVBQUUsZ0JBQWdCLEdBQUcsSUFBSSxFQUFFLFNBQVMsR0FBRyxFQUFFLEtBQWMsRUFBRTtJQUNySSxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUNqRCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ2hELE1BQU0sT0FBTyxHQUFHLE1BQU0sU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENB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
@@ -0,0 +1,7 @@
1
+ import Processor from '@hydrofoil/sparql-processor';
2
+ import type { Pattern, ServicePattern } from 'sparqljs';
3
+ export default class extends Processor {
4
+ private readonly endpoints;
5
+ constructor(endpoints: Record<string, string>);
6
+ processService(service: ServicePattern): Pattern;
7
+ }
@@ -0,0 +1,30 @@
1
+ import Processor from '@hydrofoil/sparql-processor';
2
+ import rdf from '../env.js';
3
+ import log from './log.js';
4
+ const endpointPattern = /urn:endpoint:(?<name>[^:]+)/;
5
+ export default class extends Processor {
6
+ endpoints;
7
+ constructor(endpoints) {
8
+ super(rdf);
9
+ this.endpoints = endpoints;
10
+ }
11
+ processService(service) {
12
+ if (service.name.termType === 'NamedNode' && endpointPattern.test(service.name.value)) {
13
+ const endpointName = service.name.value.match(endpointPattern)?.groups?.name;
14
+ if (endpointName) {
15
+ const endpointUrl = this.endpoints[endpointName];
16
+ if (endpointUrl) {
17
+ return {
18
+ ...service,
19
+ name: this.factory.namedNode(endpointUrl),
20
+ };
21
+ }
22
+ else {
23
+ log.warn(`Endpoint ${endpointName} not found. Set it using --remote-endpoint ${endpointName}=<url>`);
24
+ }
25
+ }
26
+ }
27
+ return super.processService(service);
28
+ }
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVlcnlQcm9jZXNzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJRdWVyeVByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVMsTUFBTSw2QkFBNkIsQ0FBQTtBQUVuRCxPQUFPLEdBQUcsTUFBTSxXQUFXLENBQUE7QUFDM0IsT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFBO0FBRTFCLE1BQU0sZUFBZSxHQUFHLDZCQUE2QixDQUFBO0FBRXJELE1BQU0sQ0FBQyxPQUFPLE1BQU8sU0FBUSxTQUFTO0lBQ1A7SUFBN0IsWUFBNkIsU0FBaUM7UUFDNUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRGlCLGNBQVMsR0FBVCxTQUFTLENBQXdCO0lBRTlELENBQUM7SUFFUSxjQUFjLENBQUMsT0FBdUI7UUFDN0MsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEYsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUE7WUFDNUUsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDakIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQTtnQkFDaEQsSUFBSSxXQUFXLEVBQUUsQ0FBQztvQkFDaEIsT0FBTzt3QkFDTCxHQUFHLE9BQU87d0JBQ1YsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQztxQkFDMUMsQ0FBQTtnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLFlBQVksOENBQThDLFlBQVksUUFBUSxDQUFDLENBQUE7Z0JBQ3RHLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN0QyxDQUFDO0NBQ0YifQ==
@@ -1,2 +1,2 @@
1
1
  import type { DatasetCore } from '@rdfjs/types';
2
- export declare function applyUpdates(api: string, validDirs: string[], dataset: DatasetCore): Promise<import("@zazuko/env/lib/DatasetExt.js").Dataset>;
2
+ export declare function applyUpdates(api: string, validDirs: string[], dataset: DatasetCore, endpoints: Record<string, string>): Promise<import("@zazuko/env/lib/DatasetExt.js").Dataset>;
@@ -3,12 +3,16 @@ import fs from 'fs';
3
3
  import { walk } from '@fcostarodrigo/walk';
4
4
  import { QueryEngine } from '@comunica/query-sparql';
5
5
  import { Store } from 'n3';
6
- import { translate } from 'sparqlalgebrajs';
7
- import { types } from 'sparqlalgebrajs/lib/algebra.js';
6
+ import { Parser, Generator } from 'sparqljs';
7
+ import toString from 'stream-to-string';
8
8
  import $rdf from '../env.js';
9
9
  import log from './log.js';
10
- import { baseIRI as getBaseIRI } from './baseIRI.js';
11
- export async function applyUpdates(api, validDirs, dataset) {
10
+ import { resourcePathFromFilePath } from './iri.js';
11
+ import { angleBracketTransform } from './fileStream.js';
12
+ import QueryProcessor from './QueryProcessor.js';
13
+ const generator = new Generator();
14
+ export async function applyUpdates(api, validDirs, dataset, endpoints) {
15
+ const queryProcessor = new QueryProcessor(endpoints);
12
16
  const engine = new QueryEngine();
13
17
  const store = new Store([...dataset]);
14
18
  const results = $rdf.dataset();
@@ -19,34 +23,49 @@ export async function applyUpdates(api, validDirs, dataset) {
19
23
  }
20
24
  const destination = new Store();
21
25
  const relative = path.relative(dir, file);
22
- const baseIRI = getBaseIRI(relative, api);
23
- log.trace('Applying updates from %s', relative);
24
- const query = fs.readFileSync(file, 'utf-8');
25
- const algebra = translate(query, { quads: true, baseIRI });
26
+ const resourcePath = resourcePathFromFilePath(relative);
27
+ const baseIRI = api + '/' + resourcePath + '/';
28
+ log.trace(`Applying updates from ${relative}`);
29
+ const query = await toString(fs.createReadStream(file, 'utf-8').pipe(angleBracketTransform(api, resourcePath)));
30
+ if (!hasBaseIRI(query)) {
31
+ log.info(`No BASE clause in ${relative}. Effective base IRI: ${baseIRI}`);
32
+ }
33
+ const parser = new Parser({ baseIRI });
34
+ const algebra = queryProcessor.process(parser.parse(query));
26
35
  for (const command of getUpdates(algebra)) {
27
- await engine.queryVoid(command, {
28
- sources: [destination, store],
29
- destination,
30
- baseIRI,
31
- });
36
+ try {
37
+ await engine.queryVoid(generator.stringify({
38
+ prefixes: algebra.prefixes,
39
+ type: 'update',
40
+ updates: [command],
41
+ }), {
42
+ sources: [destination, store],
43
+ destination,
44
+ baseIRI,
45
+ });
46
+ }
47
+ catch (error) {
48
+ log.error(`Error applying update from ${relative}: ${error}`);
49
+ }
32
50
  }
33
51
  results.addAll(destination);
34
- log.debug('Applied updates from %s, added %s triples', relative, destination.size);
52
+ log.debug(`Applied updates from ${relative}, added ${destination.size} triples`);
35
53
  }
36
54
  }
37
55
  const result = $rdf.dataset([...dataset, ...results]);
38
- log.info('SPARQL updates applied. Triples before: %s. Triples after: %s', store.size, result.size);
56
+ log.info(`SPARQL updates applied. Triples before: ${store.size}. Triples after: ${result.size}`);
39
57
  return result;
40
58
  }
59
+ function hasBaseIRI(query) {
60
+ return query.match(/^(?!\s*#)\s*BASE\s+<[^>]*>/m);
61
+ }
41
62
  function getUpdates(query) {
42
63
  switch (query.type) {
43
- case types.COMPOSITE_UPDATE:
64
+ case 'update':
44
65
  return query.updates;
45
- case types.DELETE_INSERT:
46
- return [query];
47
66
  default:
48
- log.warn('Only update queries are supported, got %s', query.type);
67
+ log.warn(`Only update queries are supported, got ${query.type}`);
49
68
  return [];
50
69
  }
51
70
  }
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHlVcGRhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwbHlVcGRhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUN2QixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFDbkIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBRTFCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUUzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFDdEQsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQzVCLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQTtBQUMxQixPQUFPLEVBQUUsT0FBTyxJQUFJLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUVwRCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FBQyxHQUFXLEVBQUUsU0FBbUIsRUFBRSxPQUFvQjtJQUN2RixNQUFNLE1BQU0sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFBO0lBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUM5QixLQUFLLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRTtRQUMzQixJQUFJLEtBQUssRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3pCLFNBQVE7YUFDVDtZQUNELE1BQU0sV0FBVyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUE7WUFDL0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDekMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUN6QyxHQUFHLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFLFFBQVEsQ0FBQyxDQUFBO1lBQy9DLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBRTVDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7WUFDMUQsS0FBSyxNQUFNLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3pDLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUU7b0JBQzlCLE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUM7b0JBQzdCLFdBQVc7b0JBQ1gsT0FBTztpQkFDUixDQUFDLENBQUE7YUFDSDtZQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7WUFDM0IsR0FBRyxDQUFDLEtBQUssQ0FBQywyQ0FBMkMsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQ25GO0tBQ0Y7SUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBRXJELEdBQUcsQ0FBQyxJQUFJLENBQUMsK0RBQStELEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDbEcsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsS0FBZ0I7SUFDbEMsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFO1FBQ2xCLEtBQUssS0FBSyxDQUFDLGdCQUFnQjtZQUN6QixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUE7UUFDdEIsS0FBSyxLQUFLLENBQUMsYUFBYTtZQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDaEI7WUFDRSxHQUFHLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNqRSxPQUFPLEVBQUUsQ0FBQTtLQUNaO0FBQ0gsQ0FBQyJ9
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHlVcGRhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwbHlVcGRhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUN2QixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFDbkIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBRzFCLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQzVDLE9BQU8sUUFBUSxNQUFNLGtCQUFrQixDQUFBO0FBQ3ZDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUM1QixPQUFPLEdBQUcsTUFBTSxVQUFVLENBQUE7QUFDMUIsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ25ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3ZELE9BQU8sY0FBYyxNQUFNLHFCQUFxQixDQUFBO0FBRWhELE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUE7QUFFakMsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQUMsR0FBVyxFQUFFLFNBQW1CLEVBQUUsT0FBb0IsRUFBRSxTQUFpQztJQUMxSCxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNwRCxNQUFNLE1BQU0sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFBO0lBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUM5QixLQUFLLE1BQU0sR0FB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
@@ -1,3 +1,5 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import type { Readable } from 'stream';
3
- export declare function getPatchedStream(file: string, cwd: string, api: string, resourceUrl: string): Readable | null;
2
+ export declare const angleBracketTransform: (baseUri: string, resourcePath: string) => any;
3
+ export declare const jsonTransform: (baseUri: string, resourcePath: string) => any;
4
+ export declare const filePatchTransforms: Map<string, (baseUri: string, resourcePath: string) => any>;
5
+ export declare function getPatchedStream(file: string, cwd: string, baseIRI: string, resourcePath: string): Readable | null;
package/lib/fileStream.js CHANGED
@@ -5,57 +5,43 @@ import replaceStream from 'replacestream';
5
5
  import isAbsoluteUrl from 'is-absolute-url';
6
6
  import rdf from '../env.js';
7
7
  import log from './log.js';
8
- function replacer(basePath, resourceUrl, s, e = s) {
8
+ import { resolveResourceUri } from './streamPatchTransform.js';
9
+ function replacer(baseUri, resourcePath, s, e = s) {
10
+ const resolve = resolveResourceUri(baseUri, resourcePath);
9
11
  return (_, match) => {
10
- let absolute;
11
12
  if (isAbsoluteUrl(match)) {
12
13
  return `${s}${match}${e}`;
13
14
  }
14
- if (match.startsWith('/') && basePath !== '/') {
15
- absolute = basePath + match;
16
- }
17
- else {
18
- absolute = new URL(match, resourceUrl).toString();
19
- if (!match.endsWith('/')) {
20
- absolute = absolute.replace(/\/?$/, '');
21
- }
22
- }
23
- const absoluteUrl = new URL(absolute, resourceUrl);
24
- if (absoluteUrl.pathname === '/' && basePath !== '/') {
25
- absoluteUrl.pathname = basePath;
26
- absolute = absoluteUrl.toString();
27
- }
28
- return `${s}${absolute}${e}`;
15
+ return `${s}${resolve(match)}${e}`;
29
16
  };
30
17
  }
31
- const angleBracketTransform = (basePath, resourceUrl) => replaceStream(/<([^>]+)>(?=([^"\\]*(\\.|"([^"\\]*\\.)*[^"\\]*"))*[^"]*$)/g, replacer(basePath, resourceUrl, '<', '>'));
32
- const jsonTransform = (basePath, resourceUrl) => replaceStream(/"([./][^"]+)"/g, replacer(basePath, resourceUrl, '"'));
33
- const filePatchTransforms = new Map([
18
+ export const angleBracketTransform = (baseUri, resourcePath) => replaceStream(/<([^>]*)>(?=([^"\\]*(\\.|"([^"\\]*\\.)*[^"\\]*"))*[^"]*$)/g, replacer(baseUri, resourcePath, '<', '>'));
19
+ export const jsonTransform = (baseUri, resourcePath) => replaceStream(/"@id": "([^"]*)"/g, replacer(baseUri, resourcePath, '"@id": "', '"'));
20
+ export const filePatchTransforms = new Map([
34
21
  ['text/turtle', angleBracketTransform],
35
22
  ['application/n-triples', angleBracketTransform],
36
23
  ['application/n-quads', angleBracketTransform],
37
24
  ['application/trig', angleBracketTransform],
38
25
  ['application/ld+json', jsonTransform],
39
26
  ]);
40
- export function getPatchedStream(file, cwd, api, resourceUrl) {
27
+ export function getPatchedStream(file, cwd, baseIRI, resourcePath) {
41
28
  const relative = path.relative(cwd, file);
42
- const basePath = new URL(api).pathname;
43
29
  const mediaType = mime.lookup(file);
44
30
  if (!mediaType) {
45
- log.warn('Could not determine media type for file %s', relative);
31
+ log.warn(`Could not determine media type for file ${relative}`);
46
32
  return null;
47
33
  }
48
34
  let fileStream = fs.createReadStream(file);
49
35
  if (filePatchTransforms.has(mediaType)) {
50
- fileStream = fileStream.pipe(filePatchTransforms.get(mediaType)(basePath, resourceUrl));
36
+ fileStream = fileStream.pipe(filePatchTransforms.get(mediaType)(baseIRI, resourcePath));
51
37
  }
52
38
  const parserStream = rdf.formats.parsers.import(mediaType, fileStream, {
53
- baseIRI: resourceUrl,
39
+ baseIRI,
54
40
  blankNodePrefix: '',
55
41
  });
56
42
  if (!parserStream) {
57
- log.warn('Unsupported media type %s from %s', mediaType, relative);
43
+ log.warn(`Unsupported media type ${mediaType} from ${relative}`);
58
44
  }
59
45
  return parserStream;
60
46
  }
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZVN0cmVhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZpbGVTdHJlYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBRW5CLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUN2QixPQUFPLEtBQUssSUFBSSxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLGFBQWEsTUFBTSxlQUFlLENBQUE7QUFDekMsT0FBTyxhQUFhLE1BQU0saUJBQWlCLENBQUE7QUFDM0MsT0FBTyxHQUFHLE1BQU0sV0FBVyxDQUFBO0FBQzNCLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQTtBQUUxQixTQUFTLFFBQVEsQ0FBQyxRQUFnQixFQUFFLFdBQW1CLEVBQUUsQ0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ3ZFLE9BQU8sQ0FBQyxDQUFVLEVBQUUsS0FBYSxFQUFFLEVBQUU7UUFDbkMsSUFBSSxRQUFnQixDQUFBO1FBQ3BCLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLE9BQU8sR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFBO1NBQzFCO1FBRUQsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsS0FBSyxHQUFHLEVBQUU7WUFDN0MsUUFBUSxHQUFHLFFBQVEsR0FBRyxLQUFLLENBQUE7U0FDNUI7YUFBTTtZQUNMLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUE7WUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3hCLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQTthQUN4QztTQUNGO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFF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
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZVN0cmVhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZpbGVTdHJlYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBRW5CLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUN2QixPQUFPLEtBQUssSUFBSSxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLGFBQWEsTUFBTSxlQUFlLENBQUE7QUFDekMsT0FBTyxhQUFhLE1BQU0saUJBQWlCLENBQUE7QUFDM0MsT0FBTyxHQUFHLE1BQU0sV0FBVyxDQUFBO0FBQzNCLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQTtBQUMxQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUU5RCxTQUFTLFFBQVEsQ0FBQyxPQUFlLEVBQUUsWUFBb0IsRUFBRSxDQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDdkUsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFBO0lBRXpELE9BQU8sQ0FBQyxDQUFVLEVBQUUsS0FBYSxFQUFFLEVBQUU7UUFDbkMsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixPQUFPLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQTtRQUMzQixDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUE7SUFDcEMsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsT0FBZSxFQUFFLFlBQW9CLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyw0REFBNEQsRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtBQUN0TSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxPQUFlLEVBQUUsWUFBb0IsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO0FBRTVKLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3pDLENBQUMsYUFBYSxFQUFFLHFCQUFxQixDQUFDO0lBQ3RDLENBQUMsdUJBQXVCLEVBQUUscUJBQXFCLENBQUM7SUFDaEQsQ0FBQyxxQkFBcUIsRUFBRSxxQkFBcUIsQ0FBQztJQUM5QyxDQUFDLGtCQUFrQixFQUFFLHFCQUFxQixDQUFDO0lBQzNDLENBQUMscUJBQXFCLEVBQUUsYUFBYSxDQUFDO0NBQ3ZDLENBQUMsQ0FBQTtBQUVGLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsR0FBVyxFQUFFLE9BQWUsRUFBRSxZQUFvQjtJQUMvRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUN6QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ25DLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLEdBQUcsQ0FBQyxJQUFJLENBQUMsMkNBQTJDLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDL0QsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzFDLElBQUksbUJBQW1CLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDdkMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFBO0lBQzFGLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRTtRQUNyRSxPQUFPO1FBQ1AsZUFBZSxFQUFFLEVBQUU7S0FDcEIsQ0FBQyxDQUFBO0lBRUYsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLEdBQUcsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLFNBQVMsU0FBUyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQ2xFLENBQUM7SUFFRCxPQUFPLFlBQTBDLENBQUE7QUFDbkQsQ0FBQyJ9
package/lib/iri.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare function resourcePathFromFilePath(resourcePath: string): string;
package/lib/iri.js ADDED
@@ -0,0 +1,9 @@
1
+ export function resourcePathFromFilePath(resourcePath) {
2
+ resourcePath = resourcePath
3
+ .replace(/\.[^.]+$/, '')
4
+ .replace(/\/?index$/, '');
5
+ return resourcePath === ''
6
+ ? ''
7
+ : encodeURI(resourcePath);
8
+ }
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXJpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaXJpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxZQUFvQjtJQUMzRCxZQUFZLEdBQUcsWUFBWTtTQUN4QixPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztTQUN2QixPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQzNCLE9BQU8sWUFBWSxLQUFLLEVBQUU7UUFDeEIsQ0FBQyxDQUFDLEVBQUU7UUFDSixDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFBO0FBQzdCLENBQUMifQ==
@@ -8,4 +8,4 @@ export function optionsFromPrefixes(options) {
8
8
  }
9
9
  };
10
10
  }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZml4SGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByZWZpeEhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLG1CQUFtQixDQUFDLE9BQWdDO0lBQ2xFLE9BQU8sQ0FBQyxNQUFjLEVBQUUsU0FBb0IsRUFBRSxFQUFFO1FBQzlDLElBQUksTUFBTSxLQUFLLE9BQU8sRUFBRTtZQUN0QixNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQy9DLElBQUksR0FBRyxJQUFJLEtBQUssRUFBRTtnQkFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFBO2FBQ3pDO1NBQ0Y7SUFDSCxDQUFDLENBQUE7QUFDSCxDQUFDIn0=
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZml4SGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByZWZpeEhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLG1CQUFtQixDQUFDLE9BQWdDO0lBQ2xFLE9BQU8sQ0FBQyxNQUFjLEVBQUUsU0FBb0IsRUFBRSxFQUFFO1FBQzlDLElBQUksTUFBTSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDL0MsSUFBSSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUMxQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQTtBQUNILENBQUMifQ==
@@ -0,0 +1 @@
1
+ export declare function resolveResourceUri(baseUri: string, resourcePath: string): (path: string) => string;
@@ -0,0 +1,45 @@
1
+ export function resolveResourceUri(baseUri, resourcePath) {
2
+ const baseUriUri = new URL(baseUri);
3
+ const basePath = baseUriUri.pathname.split('/').filter(Boolean);
4
+ if (resourcePath.endsWith('/')) {
5
+ throw new Error('Resource URL must not end with a slash');
6
+ }
7
+ if (resourcePath.startsWith('/')) {
8
+ throw new Error('Resource URL must not start with a slash');
9
+ }
10
+ return (path) => {
11
+ if (path === '/') {
12
+ return baseUriUri.toString();
13
+ }
14
+ if ((path === '' || path === '.') && resourcePath === '') {
15
+ return baseUriUri.toString();
16
+ }
17
+ if (path.startsWith('/')) {
18
+ return new URL('/' + mergePaths(basePath, path.split('/').slice(1)).join('/'), baseUri).toString();
19
+ }
20
+ const combinedPath = [...basePath, ...resourcePath.split('/').filter(Boolean)];
21
+ if (path.startsWith('#') || path === '') {
22
+ const url = new URL('/' + combinedPath.join('/'), baseUri);
23
+ if (path) {
24
+ url.hash = path;
25
+ }
26
+ return url.toString();
27
+ }
28
+ return new URL('/' + mergePaths(combinedPath, path.split('/')).join('/'), baseUri).toString();
29
+ };
30
+ }
31
+ function mergePaths(basePath, resourcePath) {
32
+ const result = basePath.slice();
33
+ for (const segment of resourcePath) {
34
+ if (segment === '.') {
35
+ continue;
36
+ }
37
+ if (segment === '..') {
38
+ result.pop();
39
+ continue;
40
+ }
41
+ result.push(segment);
42
+ }
43
+ return result;
44
+ }
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtUGF0Y2hUcmFuc2Zvcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdHJlYW1QYXRjaFRyYW5zZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsa0JBQWtCLENBQUMsT0FBZSxFQUFFLFlBQW9CO0lBQ3RFLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ25DLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUUvRCxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUE7SUFDM0QsQ0FBQztJQUNELElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQTtJQUM3RCxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQVksRUFBRSxFQUFFO1FBQ3RCLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLE9BQU8sVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFBO1FBQzlCLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsSUFBSSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksWUFBWSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3pELE9BQU8sVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFBO1FBQzlCLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QixPQUFPLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFBO1FBQ3BHLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtRQUM5RSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQzFELElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1QsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7WUFDakIsQ0FBQztZQUNELE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFBO1FBQ3ZCLENBQUM7UUFFRCxPQUFPLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDL0YsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLFFBQWtCLEVBQUUsWUFBc0I7SUFDNUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQy9CLEtBQUssTUFBTSxPQUFPLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkMsSUFBSSxPQUFPLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDcEIsU0FBUTtRQUNWLENBQUM7UUFDRCxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNyQixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUE7WUFDWixTQUFRO1FBQ1YsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDdEIsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQyJ9
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@hydrofoil/talos-core",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "type": "module",
5
5
  "main": "index.js",
6
6
  "scripts": {
7
7
  "prepack": "tsc",
8
- "test": "mocha --package ../../package.json test"
8
+ "test": "mocha"
9
9
  },
10
10
  "files": [
11
11
  "lib/**/*.js",
@@ -14,26 +14,28 @@
14
14
  "*.d.ts"
15
15
  ],
16
16
  "dependencies": {
17
- "@comunica/query-sparql": "^3.2.3",
17
+ "@comunica/query-sparql": "^4.2.0",
18
18
  "@fcostarodrigo/walk": "^6.0.1",
19
- "@types/n3": "^1.16.5",
19
+ "@hydrofoil/sparql-processor": "^0.1.5",
20
+ "@types/n3": "^1.24.2",
20
21
  "@types/rdf-dataset-ext": "^1.0.8",
21
- "@zazuko/env-node": "^2.1.3",
22
+ "@zazuko/env-node": "^3.0.0",
22
23
  "anylogger": "^1.0.11",
23
24
  "is-absolute-url": "^4.0.1",
24
25
  "is-graph-pointer": "^2.1.0",
25
- "mime-types": "^2.1.35",
26
- "n3": "^1.21.0",
26
+ "mime-types": "^3.0.1",
27
+ "n3": "^1.25.2",
27
28
  "replacestream": "^4.0.3",
28
- "sparqlalgebrajs": "^4.3.8"
29
+ "sparqljs": "^3.7.3",
30
+ "stream-to-string": "^1.2.1"
29
31
  },
30
32
  "devDependencies": {
31
33
  "@rdfjs-elements/formats-pretty": "^0.6.7",
32
- "@zazuko/env": "^2.4.1",
33
- "chai": "^4.4.1",
34
+ "@zazuko/env": "^3.0.0",
35
+ "chai": "^5",
34
36
  "get-stream": "^9.0.1",
35
37
  "into-stream": "^8.0.1",
36
- "mocha-chai-jest-snapshot": "^1.1.4"
38
+ "mocha-chai-jest-snapshot": "^1.1.6"
37
39
  },
38
40
  "repository": {
39
41
  "type": "git",
@@ -42,5 +44,8 @@
42
44
  },
43
45
  "bugs": {
44
46
  "url": "https://github.com/hypermedia-app/talos/issues"
47
+ },
48
+ "mocha": {
49
+ "extends": "../../package.json"
45
50
  }
46
51
  }
package/lib/baseIRI.d.ts DELETED
@@ -1 +0,0 @@
1
- export declare function baseIRI(resourcePath: string, api: string): string;
package/lib/baseIRI.js DELETED
@@ -1,9 +0,0 @@
1
- export function baseIRI(resourcePath, api) {
2
- resourcePath = resourcePath
3
- .replace(/\.[^.]+$/, '')
4
- .replace(/\/?index$/, '');
5
- return resourcePath === ''
6
- ? encodeURI(api)
7
- : encodeURI(`${api}/${resourcePath}`);
8
- }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZUlSSS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJhc2VJUkkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLE9BQU8sQ0FBQyxZQUFvQixFQUFFLEdBQVc7SUFDdkQsWUFBWSxHQUFHLFlBQVk7U0FDeEIsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7U0FDdkIsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUMzQixPQUFPLFlBQVksS0FBSyxFQUFFO1FBQ3hCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQTtBQUN6QyxDQUFDIn0=