@hydrofoil/talos-core 0.1.8 → 0.3.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.
- package/bootstrap.d.ts +2 -3
- package/bootstrap.js +15 -9
- package/index.d.ts +4 -1
- package/index.js +26 -18
- package/lib/applyUpdates.js +19 -8
- package/lib/fileStream.d.ts +4 -1
- package/lib/fileStream.js +13 -27
- package/lib/iri.d.ts +1 -0
- package/lib/iri.js +9 -0
- package/lib/log.d.ts +3 -1
- package/lib/log.js +2 -1
- package/lib/streamPatchTransform.d.ts +1 -0
- package/lib/streamPatchTransform.js +45 -0
- package/package.json +10 -9
- package/lib/baseIRI.d.ts +0 -1
- package/lib/baseIRI.js +0 -9
package/bootstrap.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DatasetCore } from '@rdfjs/types';
|
|
2
2
|
import type { ResourceStore } from '@hydrofoil/resource-store';
|
|
3
3
|
type Bootstrap = {
|
|
4
4
|
store: ResourceStore;
|
|
5
5
|
dataset: DatasetCore;
|
|
6
|
-
apiUri?: NamedNode;
|
|
7
6
|
};
|
|
8
|
-
export declare function bootstrap({ dataset,
|
|
7
|
+
export declare function bootstrap({ dataset, store }: Bootstrap): Promise<void>;
|
|
9
8
|
export {};
|
package/bootstrap.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { isNamedNode } from 'is-graph-pointer';
|
|
2
2
|
import $rdf from './env.js';
|
|
3
3
|
import log from './lib/log.js';
|
|
4
|
-
export async function bootstrap({ dataset,
|
|
4
|
+
export async function bootstrap({ dataset, store }) {
|
|
5
5
|
const graph = $rdf.clownface({ dataset, graph: $rdf.ns.talos.resources });
|
|
6
6
|
const resources = graph.has($rdf.ns.talos.action);
|
|
7
|
+
const summary = {
|
|
8
|
+
created: 0,
|
|
9
|
+
updated: 0,
|
|
10
|
+
skipped: 0,
|
|
11
|
+
};
|
|
7
12
|
for (const resource of resources.toArray().filter(isNamedNode)) {
|
|
8
13
|
const resourceData = [...dataset.match(null, null, null, resource.term)]
|
|
9
14
|
.map(({ subject, predicate, object }) => $rdf.quad(subject, predicate, object));
|
|
@@ -11,29 +16,30 @@ export async function bootstrap({ dataset, apiUri, store }) {
|
|
|
11
16
|
dataset: $rdf.dataset(resourceData),
|
|
12
17
|
term: resource.term,
|
|
13
18
|
});
|
|
14
|
-
if (apiUri) {
|
|
15
|
-
pointer.addOut($rdf.ns.hydra.apiDocumentation, apiUri);
|
|
16
|
-
}
|
|
17
19
|
const action = resource.out($rdf.ns.talos.action).term;
|
|
18
20
|
const exists = await store.exists(pointer.term);
|
|
19
21
|
if (exists && $rdf.ns.talos.skip.equals(action)) {
|
|
20
|
-
|
|
22
|
+
summary.skipped++;
|
|
23
|
+
log(`Skipping graph ${resource}`);
|
|
21
24
|
continue;
|
|
22
25
|
}
|
|
23
26
|
if (exists) {
|
|
27
|
+
summary.updated++;
|
|
24
28
|
if ($rdf.ns.talos.merge.equals(action)) {
|
|
25
|
-
log(`Merging existing
|
|
29
|
+
log(`Merging with existing graph ${resource}`);
|
|
26
30
|
const current = await store.load(pointer.term);
|
|
27
31
|
pointer.dataset.addAll(current.dataset);
|
|
28
32
|
}
|
|
29
33
|
else {
|
|
30
|
-
log(`Replacing
|
|
34
|
+
log(`Replacing graph ${resource}`);
|
|
31
35
|
}
|
|
32
36
|
}
|
|
33
37
|
else {
|
|
34
|
-
|
|
38
|
+
summary.created++;
|
|
39
|
+
log(`Creating graph ${resource}`);
|
|
35
40
|
}
|
|
36
41
|
await store.save(pointer);
|
|
37
42
|
}
|
|
43
|
+
log.info('Graphs bootstrapped: ', summary);
|
|
38
44
|
}
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYm9vdHN0cmFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM5QyxPQUFPLElBQUksTUFBTSxVQUFVLENBQUE7QUFDM0IsT0FBTyxHQUFHLE1BQU0sY0FBYyxDQUFBO0FBTzlCLE1BQU0sQ0FBQyxLQUFLLFVBQVUsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBYTtJQUMzRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFBO0lBQ3pFLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDakQsTUFBTSxPQUFPLEdBQUc7UUFDZCxPQUFPLEVBQUUsQ0FBQztRQUNWLE9BQU8sRUFBRSxDQUFDO1FBQ1YsT0FBTyxFQUFFLENBQUM7S0FDWCxDQUFBO0lBRUQsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQzlELE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyRSxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQ2pGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1lBQ25DLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtTQUNwQixDQUFDLENBQUE7UUFFRixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQTtRQUN0RCxNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQy9DLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDL0MsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO1lBQ2pCLEdBQUcsQ0FBQyxrQkFBa0IsUUFBUSxFQUFFLENBQUMsQ0FBQTtZQUNqQyxTQUFRO1NBQ1Q7UUFFRCxJQUFJLE1BQU0sRUFBRTtZQUNWLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtZQUNqQixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3RDLEdBQUcsQ0FBQywrQkFBK0IsUUFBUSxFQUFFLENBQUMsQ0FBQTtnQkFDOUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDOUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO2FBQ3hDO2lCQUFNO2dCQUNMLEdBQUcsQ0FBQyxtQkFBbUIsUUFBUSxFQUFFLENBQUMsQ0FBQTthQUNuQztTQUNGO2FBQU07WUFDTCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7WUFDakIsR0FBRyxDQUFDLGtCQUFrQixRQUFRLEVBQUUsQ0FBQyxDQUFBO1NBQ2xDO1FBRUQsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0tBQzFCO0lBRUQsR0FBRyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUM1QyxDQUFDIn0=
|
package/index.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { Dataset } from '@zazuko/env/lib/DatasetExt.js';
|
|
2
2
|
declare const ns: import("@rdfjs/namespace").NamespaceBuilder<"resources" | "action" | "default" | "overwrite" | "skip" | "merge" | "environmentRepresentation" | "replace">;
|
|
3
3
|
export { ns };
|
|
4
|
-
|
|
4
|
+
interface Options {
|
|
5
|
+
includeMetaGraph?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function fromDirectories(directories: string[], baseIri: string, { includeMetaGraph }?: Options): Promise<Dataset>;
|
package/index.js
CHANGED
|
@@ -5,52 +5,60 @@ 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,
|
|
12
|
+
export async function fromDirectories(directories, baseIri, { includeMetaGraph } = { includeMetaGraph: true }) {
|
|
13
|
+
const baseIriNoSlash = baseIri.replace(/\/$/, '');
|
|
13
14
|
const validDirs = directories.filter(isValidDir);
|
|
14
|
-
const dataset = await validDirs.reduce(toGraphs(
|
|
15
|
-
const updatedDataset = await applyUpdates(
|
|
15
|
+
const dataset = await validDirs.reduce(toGraphs(new URL(baseIri)), Promise.resolve($rdf.dataset()));
|
|
16
|
+
const updatedDataset = await applyUpdates(baseIriNoSlash, validDirs, dataset);
|
|
16
17
|
setDefaultAction(updatedDataset);
|
|
17
|
-
return updatedDataset
|
|
18
|
+
return updatedDataset.filter(({ graph }) => {
|
|
19
|
+
return includeMetaGraph || !graph.equals($rdf.ns.talos.resources);
|
|
20
|
+
});
|
|
18
21
|
}
|
|
19
22
|
function setDefaultAction(dataset) {
|
|
20
23
|
const metaGraph = $rdf.clownface({ dataset, graph: $rdf.ns.talos.resources });
|
|
21
|
-
const
|
|
24
|
+
const graphsToOverwrite = [...dataset]
|
|
22
25
|
.map(({ graph }) => graph)
|
|
23
26
|
.filter(graph => {
|
|
24
27
|
const action = metaGraph.node(graph).out($rdf.ns.talos.action).term;
|
|
25
28
|
return !action || action.equals($rdf.ns.talos.default);
|
|
26
29
|
});
|
|
27
30
|
metaGraph
|
|
28
|
-
.node(
|
|
31
|
+
.node(graphsToOverwrite)
|
|
29
32
|
.deleteOut($rdf.ns.talos.action)
|
|
30
33
|
.addOut($rdf.ns.talos.action, $rdf.ns.talos.overwrite);
|
|
31
34
|
}
|
|
32
|
-
function toGraphs(
|
|
35
|
+
function toGraphs(baseIri) {
|
|
36
|
+
const baseIriNoSlash = baseIri.toString().replace(/\/$/, '');
|
|
33
37
|
return async function (previousPromise, dir) {
|
|
34
38
|
let previous = await previousPromise;
|
|
35
39
|
const dataset = $rdf.dataset();
|
|
36
|
-
log.debug(
|
|
40
|
+
log.debug(`Processing dir ${dir}`);
|
|
37
41
|
for await (const file of walk(dir)) {
|
|
42
|
+
if (file.endsWith('.ru')) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
38
45
|
const relative = path.relative(dir, file);
|
|
39
|
-
const
|
|
40
|
-
const
|
|
46
|
+
const resourcePath = resourcePathFromFilePath(relative);
|
|
47
|
+
const resourceUrl = $rdf.namedNode(resourcePath === '' ? baseIri.toString() : `${baseIriNoSlash}/${resourcePath}`);
|
|
48
|
+
const parserStream = getPatchedStream(file, dir, baseIriNoSlash, resourcePath);
|
|
41
49
|
if (!parserStream) {
|
|
42
50
|
continue;
|
|
43
51
|
}
|
|
44
|
-
log.debug(
|
|
52
|
+
log.debug(`Parsing ${relative}`);
|
|
45
53
|
const parsedResourceOptions = {};
|
|
46
54
|
parserStream.on('prefix', optionsFromPrefixes(parsedResourceOptions));
|
|
47
55
|
const resources = $rdf.termSet();
|
|
48
56
|
const resourceOptions = $rdf.clownface({ dataset: previous, graph: $rdf.ns.talos.resources });
|
|
49
57
|
try {
|
|
50
58
|
for await (const { subject, predicate, object, ...quad } of parserStream) {
|
|
51
|
-
const graph = quad.graph.equals($rdf.defaultGraph()) ?
|
|
59
|
+
const graph = quad.graph.equals($rdf.defaultGraph()) ? resourceUrl : quad.graph;
|
|
52
60
|
if (!resources.has(graph)) {
|
|
53
|
-
log.debug(
|
|
61
|
+
log.debug(`Found graph ${graph.value}`);
|
|
54
62
|
}
|
|
55
63
|
resources.add(graph);
|
|
56
64
|
dataset.add($rdf.quad(subject, predicate, object, graph));
|
|
@@ -58,7 +66,7 @@ function toGraphs(api) {
|
|
|
58
66
|
}
|
|
59
67
|
catch (e) {
|
|
60
68
|
if (e instanceof Error) {
|
|
61
|
-
log(
|
|
69
|
+
log.error(`Failed to parse ${relative}: ${e.message}`);
|
|
62
70
|
}
|
|
63
71
|
}
|
|
64
72
|
resources.forEach(id => {
|
|
@@ -81,13 +89,13 @@ function toGraphs(api) {
|
|
|
81
89
|
}
|
|
82
90
|
function isValidDir(dir) {
|
|
83
91
|
if (!fs.existsSync(dir)) {
|
|
84
|
-
log(
|
|
92
|
+
log.warn(`Skipping path ${dir} which does not exist`);
|
|
85
93
|
return false;
|
|
86
94
|
}
|
|
87
95
|
if (!fs.statSync(dir).isDirectory()) {
|
|
88
|
-
log(
|
|
96
|
+
log.warn(`Skipping path ${dir} which is not a directory`);
|
|
89
97
|
return false;
|
|
90
98
|
}
|
|
91
99
|
return true;
|
|
92
100
|
}
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxNQUFNLENBQUE7QUFDdkIsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBRW5CLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUUxQyxPQUFPLElBQUksTUFBTSxVQUFVLENBQUE7QUFDM0IsT0FBTyxHQUFHLE1BQU0sY0FBYyxDQUFBO0FBQzlCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFdkQsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFBO0FBQzdCLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQTtBQVdiLE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUFDLFdBQXFCLEVBQUUsT0FBZSxFQUFFLEVBQUUsZ0JBQWdCLEtBQWMsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUU7SUFDdEksTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDakQsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNoRCxNQUFNLE9BQU8sR0FBRyxNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ25H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
|
package/lib/applyUpdates.js
CHANGED
|
@@ -5,9 +5,11 @@ import { QueryEngine } from '@comunica/query-sparql';
|
|
|
5
5
|
import { Store } from 'n3';
|
|
6
6
|
import { translate } from 'sparqlalgebrajs';
|
|
7
7
|
import { types } from 'sparqlalgebrajs/lib/algebra.js';
|
|
8
|
+
import toString from 'stream-to-string';
|
|
8
9
|
import $rdf from '../env.js';
|
|
9
10
|
import log from './log.js';
|
|
10
|
-
import {
|
|
11
|
+
import { resourcePathFromFilePath } from './iri.js';
|
|
12
|
+
import { angleBracketTransform } from './fileStream.js';
|
|
11
13
|
export async function applyUpdates(api, validDirs, dataset) {
|
|
12
14
|
const engine = new QueryEngine();
|
|
13
15
|
const store = new Store([...dataset]);
|
|
@@ -19,9 +21,13 @@ export async function applyUpdates(api, validDirs, dataset) {
|
|
|
19
21
|
}
|
|
20
22
|
const destination = new Store();
|
|
21
23
|
const relative = path.relative(dir, file);
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
const resourcePath = resourcePathFromFilePath(relative);
|
|
25
|
+
const baseIRI = api + '/' + resourcePath + '/';
|
|
26
|
+
log.trace(`Applying updates from ${relative}`);
|
|
27
|
+
const query = await toString(fs.createReadStream(file, 'utf-8').pipe(angleBracketTransform(api, resourcePath)));
|
|
28
|
+
if (!hasBaseIRI(query)) {
|
|
29
|
+
log.info(`No BASE clause in ${relative}. Effective base IRI: ${baseIRI}`);
|
|
30
|
+
}
|
|
25
31
|
const algebra = translate(query, { quads: true, baseIRI });
|
|
26
32
|
for (const command of getUpdates(algebra)) {
|
|
27
33
|
await engine.queryVoid(command, {
|
|
@@ -30,11 +36,16 @@ export async function applyUpdates(api, validDirs, dataset) {
|
|
|
30
36
|
baseIRI,
|
|
31
37
|
});
|
|
32
38
|
}
|
|
33
|
-
log.debug('Applied updates from %s, dataset size %s', relative, store.size);
|
|
34
39
|
results.addAll(destination);
|
|
40
|
+
log.debug(`Applied updates from ${relative}, added ${destination.size} triples`);
|
|
35
41
|
}
|
|
36
42
|
}
|
|
37
|
-
|
|
43
|
+
const result = $rdf.dataset([...dataset, ...results]);
|
|
44
|
+
log.info(`SPARQL updates applied. Triples before: ${store.size}. Triples after: ${result.size}`);
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
function hasBaseIRI(query) {
|
|
48
|
+
return query.match(/^(?!\s*#)\s*BASE\s+<[^>]*>/m);
|
|
38
49
|
}
|
|
39
50
|
function getUpdates(query) {
|
|
40
51
|
switch (query.type) {
|
|
@@ -43,8 +54,8 @@ function getUpdates(query) {
|
|
|
43
54
|
case types.DELETE_INSERT:
|
|
44
55
|
return [query];
|
|
45
56
|
default:
|
|
46
|
-
log.
|
|
57
|
+
log.warn(`Only update queries are supported, got ${query.type}`);
|
|
47
58
|
return [];
|
|
48
59
|
}
|
|
49
60
|
}
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHlVcGRhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwbHlVcGRhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUN2QixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFDbkIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBRTFCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUUzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFDdEQsT0FBTyxRQUFRLE1BQU0sa0JBQWtCLENBQUE7QUFDdkMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQzVCLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQTtBQUMxQixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFdkQsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQUMsR0FBVyxFQUFFLFNBQW1CLEVBQUUsT0FBb0I7SUFDdkYsTUFBTSxNQUFNLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQTtJQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDOUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxTQUFTLEVBQUU7UUFDM0IsSUFBSSxLQUFLLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN6QixTQUFRO2FBQ1Q7WUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFBO1lBQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFBO1lBQ3pDLE1BQU0sWUFBWSxHQUFHLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ3ZELE1BQU0sT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsWUFBWSxHQUFHLEdBQUcsQ0FBQTtZQUM5QyxHQUFHLENBQUMsS0FBSyxDQUFDLHlCQUF5QixRQUFRLEVBQUUsQ0FBQyxDQUFBO1lBQzlDLE1BQU0sS0FBSyxHQUFHLE1BQU0sUUFBUSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFFL0csSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDdEIsR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsUUFBUSx5QkFBeUIsT0FBTyxFQUFFLENBQUMsQ0FBQTthQUMxRTtZQUNELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7WUFFMUQsS0FBSyxNQUFNLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3pDLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUU7b0JBQzlCLE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUM7b0JBQzdCLFdBQVc7b0JBQ1gsT0FBTztpQkFDUixDQUFDLENBQUE7YUFDSDtZQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7WUFDM0IsR0FBRyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsUUFBUSxXQUFXLFdBQVcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFBO1NBQ2pGO0tBQ0Y7SUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBRXJELEdBQUcsQ0FBQyxJQUFJLENBQUMsMkNBQTJDLEtBQUssQ0FBQyxJQUFJLG9CQUFvQixNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUNoRyxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUFhO0lBQy9CLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO0FBQ25ELENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUFnQjtJQUNsQyxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUU7UUFDbEIsS0FBSyxLQUFLLENBQUMsZ0JBQWdCO1lBQ3pCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQTtRQUN0QixLQUFLLEtBQUssQ0FBQyxhQUFhO1lBQ3RCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNoQjtZQUNFLEdBQUcsQ0FBQyxJQUFJLENBQUMsMENBQTBDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1lBQ2hFLE9BQU8sRUFBRSxDQUFBO0tBQ1o7QUFDSCxDQUFDIn0=
|
package/lib/fileStream.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
2
|
import type { Readable } from 'stream';
|
|
3
|
-
export declare
|
|
3
|
+
export declare const angleBracketTransform: (baseUri: string, resourcePath: string) => any;
|
|
4
|
+
export declare const jsonTransform: (baseUri: string, resourcePath: string) => any;
|
|
5
|
+
export declare const filePatchTransforms: Map<string, (baseUri: string, resourcePath: string) => any>;
|
|
6
|
+
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
|
-
|
|
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
|
-
|
|
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 = (
|
|
32
|
-
const jsonTransform = (
|
|
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,
|
|
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(
|
|
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)(
|
|
36
|
+
fileStream = fileStream.pipe(filePatchTransforms.get(mediaType)(baseIRI, resourcePath));
|
|
51
37
|
}
|
|
52
38
|
const parserStream = rdf.formats.parsers.import(mediaType, fileStream, {
|
|
53
|
-
baseIRI
|
|
39
|
+
baseIRI,
|
|
54
40
|
blankNodePrefix: '',
|
|
55
41
|
});
|
|
56
42
|
if (!parserStream) {
|
|
57
|
-
log(
|
|
43
|
+
log.warn(`Unsupported media type ${mediaType} from ${relative}`);
|
|
58
44
|
}
|
|
59
45
|
return parserStream;
|
|
60
46
|
}
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZVN0cmVhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZpbGVTdHJlYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBRW5CLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUN2QixPQUFPLEtBQUssSUFBSSxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLGFBQWEsTUFBTSxlQUFlLENBQUE7QUFDekMsT0FBTyxhQUFhLE1BQU0saUJBQWlCLENBQUE7QUFDM0MsT0FBTyxHQUFHLE1BQU0sV0FBVyxDQUFBO0FBQzNCLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQTtBQUMxQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUU5RCxTQUFTLFFBQVEsQ0FBQyxPQUFlLEVBQUUsWUFBb0IsRUFBRSxDQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDdkUsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFBO0lBRXpELE9BQU8sQ0FBQyxDQUFVLEVBQUUsS0FBYSxFQUFFLEVBQUU7UUFDbkMsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDeEIsT0FBTyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUE7U0FDMUI7UUFFRCxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQTtJQUNwQyxDQUFDLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxPQUFlLEVBQUUsWUFBb0IsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLDREQUE0RCxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO0FBQ3RNLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQWUsRUFBRSxZQUFvQixFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFFNUosTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDekMsQ0FBQyxhQUFhLEVBQUUscUJBQXFCLENBQUM7SUFDdEMsQ0FBQyx1QkFBdUIsRUFBRSxxQkFBcUIsQ0FBQztJQUNoRCxDQUFDLHFCQUFxQixFQUFFLHFCQUFxQixDQUFDO0lBQzlDLENBQUMsa0JBQWtCLEVBQUUscUJBQXFCLENBQUM7SUFDM0MsQ0FBQyxxQkFBcUIsRUFBRSxhQUFhLENBQUM7Q0FDdkMsQ0FBQyxDQUFBO0FBRUYsTUFBTSxVQUFVLGdCQUFnQixDQUFDLElBQVksRUFBRSxHQUFXLEVBQUUsT0FBZSxFQUFFLFlBQW9CO0lBQy9GLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ3pDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDbkMsSUFBSSxDQUFDLFNBQVMsRUFBRTtRQUNkLEdBQUcsQ0FBQyxJQUFJLENBQUMsMkNBQTJDLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDL0QsT0FBTyxJQUFJLENBQUE7S0FDWjtJQUVELElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUMxQyxJQUFJLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUN0QyxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFFLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUE7S0FDekY7SUFFRCxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRTtRQUNyRSxPQUFPO1FBQ1AsZUFBZSxFQUFFLEVBQUU7S0FDcEIsQ0FBQyxDQUFBO0lBRUYsSUFBSSxDQUFDLFlBQVksRUFBRTtRQUNqQixHQUFHLENBQUMsSUFBSSxDQUFDLDBCQUEwQixTQUFTLFNBQVMsUUFBUSxFQUFFLENBQUMsQ0FBQTtLQUNqRTtJQUVELE9BQU8sWUFBMEMsQ0FBQTtBQUNuRCxDQUFDIn0=
|
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==
|
package/lib/log.d.ts
CHANGED
package/lib/log.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import Debugger from 'anylogger';
|
|
2
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2
3
|
export default Debugger('talos');
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sUUFBUSxNQUFNLFdBQVcsQ0FBQTtBQUVoQyw4REFBOEQ7QUFDOUQsZUFBZ0IsUUFBeUMsQ0FBQyxPQUFPLENBQUMsQ0FBQSJ9
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtUGF0Y2hUcmFuc2Zvcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdHJlYW1QYXRjaFRyYW5zZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsa0JBQWtCLENBQUMsT0FBZSxFQUFFLFlBQW9CO0lBQ3RFLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ25DLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUUvRCxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFBO0tBQzFEO0lBQ0QsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQTtLQUM1RDtJQUVELE9BQU8sQ0FBQyxJQUFZLEVBQUUsRUFBRTtRQUN0QixJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7WUFDaEIsT0FBTyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUE7U0FDN0I7UUFDRCxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsSUFBSSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksWUFBWSxLQUFLLEVBQUUsRUFBRTtZQUN4RCxPQUFPLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtTQUM3QjtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN4QixPQUFPLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFBO1NBQ25HO1FBRUQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFHLFFBQVEsRUFBRSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFDOUUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7WUFDdkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDMUQsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7YUFDaEI7WUFDRCxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtTQUN0QjtRQUVELE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUMvRixDQUFDLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsUUFBa0IsRUFBRSxZQUFzQjtJQUM1RCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDL0IsS0FBSyxNQUFNLE9BQU8sSUFBSSxZQUFZLEVBQUU7UUFDbEMsSUFBSSxPQUFPLEtBQUssR0FBRyxFQUFFO1lBQ25CLFNBQVE7U0FDVDtRQUNELElBQUksT0FBTyxLQUFLLElBQUksRUFBRTtZQUNwQixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUE7WUFDWixTQUFRO1NBQ1Q7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0tBQ3JCO0lBRUQsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hydrofoil/talos-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -14,26 +14,27 @@
|
|
|
14
14
|
"*.d.ts"
|
|
15
15
|
],
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@comunica/query-sparql": "^
|
|
17
|
+
"@comunica/query-sparql": "^4.0.2",
|
|
18
18
|
"@fcostarodrigo/walk": "^6.0.1",
|
|
19
|
-
"@types/n3": "^1.16.
|
|
19
|
+
"@types/n3": "^1.16.5",
|
|
20
20
|
"@types/rdf-dataset-ext": "^1.0.8",
|
|
21
21
|
"@zazuko/env-node": "^2.1.3",
|
|
22
|
-
"anylogger": "^1.
|
|
22
|
+
"anylogger": "^1.0.11",
|
|
23
23
|
"is-absolute-url": "^4.0.1",
|
|
24
24
|
"is-graph-pointer": "^2.1.0",
|
|
25
25
|
"mime-types": "^2.1.35",
|
|
26
|
-
"n3": "^1.
|
|
26
|
+
"n3": "^1.21.0",
|
|
27
27
|
"replacestream": "^4.0.3",
|
|
28
|
-
"sparqlalgebrajs": "^4.3.8"
|
|
28
|
+
"sparqlalgebrajs": "^4.3.8",
|
|
29
|
+
"stream-to-string": "^1.2.1"
|
|
29
30
|
},
|
|
30
31
|
"devDependencies": {
|
|
31
32
|
"@rdfjs-elements/formats-pretty": "^0.6.7",
|
|
32
|
-
"@zazuko/env": "^2.2
|
|
33
|
-
"chai": "^
|
|
33
|
+
"@zazuko/env": "^2.4.2",
|
|
34
|
+
"chai": "^5",
|
|
34
35
|
"get-stream": "^9.0.1",
|
|
35
36
|
"into-stream": "^8.0.1",
|
|
36
|
-
"mocha-chai-jest-snapshot": "^1.1.
|
|
37
|
+
"mocha-chai-jest-snapshot": "^1.1.6"
|
|
37
38
|
},
|
|
38
39
|
"repository": {
|
|
39
40
|
"type": "git",
|
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=
|