@hydrofoil/talos-core 0.2.0 → 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.js +2 -2
- package/index.js +17 -14
- package/lib/applyUpdates.js +17 -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/streamPatchTransform.d.ts +1 -0
- package/lib/streamPatchTransform.js +45 -0
- package/package.json +7 -6
- package/lib/baseIRI.d.ts +0 -1
- package/lib/baseIRI.js +0 -9
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:
|
|
43
|
+
log.info('Graphs bootstrapped: ', summary);
|
|
44
44
|
}
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYm9vdHN0cmFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM5QyxPQUFPLElBQUksTUFBTSxVQUFVLENBQUE7QUFDM0IsT0FBTyxHQUFHLE1BQU0sY0FBYyxDQUFBO0FBTzlCLE1BQU0sQ0FBQyxLQUFLLFVBQVUsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBYTtJQUMzRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFBO0lBQ3pFLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDakQsTUFBTSxPQUFPLEdBQUc7UUFDZCxPQUFPLEVBQUUsQ0FBQztRQUNWLE9BQU8sRUFBRSxDQUFDO1FBQ1YsT0FBTyxFQUFFLENBQUM7S0FDWCxDQUFBO0lBRUQsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQzlELE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyRSxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQ2pGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1lBQ25DLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtTQUNwQixDQUFDLENBQUE7UUFFRixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQTtRQUN0RCxNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQy9DLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDL0MsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO1lBQ2pCLEdBQUcsQ0FBQyxrQkFBa0IsUUFBUSxFQUFFLENBQUMsQ0FBQTtZQUNqQyxTQUFRO1NBQ1Q7UUFFRCxJQUFJLE1BQU0sRUFBRTtZQUNWLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtZQUNqQixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3RDLEdBQUcsQ0FBQywrQkFBK0IsUUFBUSxFQUFFLENBQUMsQ0FBQTtnQkFDOUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDOUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO2FBQ3hDO2lCQUFNO2dCQUNMLEdBQUcsQ0FBQyxtQkFBbUIsUUFBUSxFQUFFLENBQUMsQ0FBQTthQUNuQztTQUNGO2FBQU07WUFDTCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7WUFDakIsR0FBRyxDQUFDLGtCQUFrQixRQUFRLEVBQUUsQ0FBQyxDQUFBO1NBQ2xDO1FBRUQsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0tBQzFCO0lBRUQsR0FBRyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUM1QyxDQUFDIn0=
|
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
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(baseIri), Promise.resolve($rdf.dataset()));
|
|
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
18
|
return updatedDataset.filter(({ graph }) => {
|
|
18
19
|
return includeMetaGraph || !graph.equals($rdf.ns.talos.resources);
|
|
@@ -31,31 +32,33 @@ function setDefaultAction(dataset) {
|
|
|
31
32
|
.deleteOut($rdf.ns.talos.action)
|
|
32
33
|
.addOut($rdf.ns.talos.action, $rdf.ns.talos.overwrite);
|
|
33
34
|
}
|
|
34
|
-
function toGraphs(
|
|
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(
|
|
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
|
|
45
|
-
const
|
|
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(
|
|
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()) ?
|
|
59
|
+
const graph = quad.graph.equals($rdf.defaultGraph()) ? resourceUrl : quad.graph;
|
|
57
60
|
if (!resources.has(graph)) {
|
|
58
|
-
log.debug(
|
|
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(
|
|
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(
|
|
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(
|
|
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,
|
|
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, {
|
|
@@ -31,13 +37,16 @@ export async function applyUpdates(api, validDirs, dataset) {
|
|
|
31
37
|
});
|
|
32
38
|
}
|
|
33
39
|
results.addAll(destination);
|
|
34
|
-
log.debug(
|
|
40
|
+
log.debug(`Applied updates from ${relative}, added ${destination.size} triples`);
|
|
35
41
|
}
|
|
36
42
|
}
|
|
37
43
|
const result = $rdf.dataset([...dataset, ...results]);
|
|
38
|
-
log.info(
|
|
44
|
+
log.info(`SPARQL updates applied. Triples before: ${store.size}. Triples after: ${result.size}`);
|
|
39
45
|
return result;
|
|
40
46
|
}
|
|
47
|
+
function hasBaseIRI(query) {
|
|
48
|
+
return query.match(/^(?!\s*#)\s*BASE\s+<[^>]*>/m);
|
|
49
|
+
}
|
|
41
50
|
function getUpdates(query) {
|
|
42
51
|
switch (query.type) {
|
|
43
52
|
case types.COMPOSITE_UPDATE:
|
|
@@ -45,8 +54,8 @@ function getUpdates(query) {
|
|
|
45
54
|
case types.DELETE_INSERT:
|
|
46
55
|
return [query];
|
|
47
56
|
default:
|
|
48
|
-
log.warn(
|
|
57
|
+
log.warn(`Only update queries are supported, got ${query.type}`);
|
|
49
58
|
return [];
|
|
50
59
|
}
|
|
51
60
|
}
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHlVcGRhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwbHlVcGRhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUN2QixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFDbkIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBRTFCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUUzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFDdEQsT0FBTyxRQUFRLE1BQU0sa0JBQWtCLENBQUE7QUFDdkMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQzVCLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQTtBQUMxQixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFdkQsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQUMsR0FBVyxFQUFFLFNBQW1CLEVBQUUsT0FBb0I7SUFDdkYsTUFBTSxNQUFNLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQTtJQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDOUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxTQUFTLEVBQUU7UUFDM0IsSUFBSSxLQUFLLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxJQUFJLENB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
|
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.warn(
|
|
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.warn(
|
|
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==
|
|
@@ -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,7 +14,7 @@
|
|
|
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
19
|
"@types/n3": "^1.16.5",
|
|
20
20
|
"@types/rdf-dataset-ext": "^1.0.8",
|
|
@@ -25,15 +25,16 @@
|
|
|
25
25
|
"mime-types": "^2.1.35",
|
|
26
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.4.
|
|
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=
|