@hydrofoil/talos-core 0.1.1 → 0.1.2
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/CHANGELOG.md +7 -0
- package/bootstrap.d.ts +9 -0
- package/bootstrap.js +38 -0
- package/bootstrap.ts +47 -0
- package/env.d.ts +1 -1
- package/package.json +7 -5
package/CHANGELOG.md
CHANGED
package/bootstrap.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { NamedNode, DatasetCore } from 'rdf-js';
|
|
2
|
+
import type { ResourceStore } from '@hydrofoil/resource-store';
|
|
3
|
+
type Bootstrap = {
|
|
4
|
+
store: ResourceStore;
|
|
5
|
+
dataset: DatasetCore;
|
|
6
|
+
apiUri: NamedNode;
|
|
7
|
+
};
|
|
8
|
+
export declare function bootstrap({ dataset, apiUri, store }: Bootstrap): Promise<void>;
|
|
9
|
+
export {};
|
package/bootstrap.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { isNamedNode } from 'is-graph-pointer';
|
|
2
|
+
import addAll from 'rdf-dataset-ext/addAll.js';
|
|
3
|
+
import $rdf from './env.js';
|
|
4
|
+
import log from './lib/log.js';
|
|
5
|
+
export async function bootstrap({ dataset, apiUri, store }) {
|
|
6
|
+
const graph = $rdf.clownface({ dataset, graph: $rdf.ns.talos.resources });
|
|
7
|
+
const resources = graph.has($rdf.ns.talos.action);
|
|
8
|
+
for (const resource of resources.toArray().filter(isNamedNode)) {
|
|
9
|
+
const resourceData = [...dataset.match(null, null, null, resource.term)]
|
|
10
|
+
.map(({ subject, predicate, object }) => $rdf.quad(subject, predicate, object));
|
|
11
|
+
const pointer = $rdf.clownface({
|
|
12
|
+
dataset: $rdf.dataset(resourceData),
|
|
13
|
+
})
|
|
14
|
+
.namedNode(resource.term)
|
|
15
|
+
.addOut($rdf.ns.hydra.apiDocumentation, apiUri);
|
|
16
|
+
const action = resource.out($rdf.ns.talos.action).term;
|
|
17
|
+
const exists = await store.exists(pointer.term);
|
|
18
|
+
if (exists && $rdf.ns.talos.skip.equals(action)) {
|
|
19
|
+
log(`Skipping resource ${resource}`);
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
if (exists) {
|
|
23
|
+
if ($rdf.ns.talos.merge.equals(action)) {
|
|
24
|
+
log(`Merging existing resource ${resource}`);
|
|
25
|
+
const current = await store.load(pointer.term);
|
|
26
|
+
addAll(pointer.dataset, current.dataset);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
log(`Replacing resource ${resource}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
log(`Creating resource ${resource}`);
|
|
34
|
+
}
|
|
35
|
+
await store.save(pointer);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYm9vdHN0cmFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM5QyxPQUFPLE1BQU0sTUFBTSwyQkFBMkIsQ0FBQTtBQUM5QyxPQUFPLElBQUksTUFBTSxVQUFVLENBQUE7QUFDM0IsT0FBTyxHQUFHLE1BQU0sY0FBYyxDQUFBO0FBUTlCLE1BQU0sQ0FBQyxLQUFLLFVBQVUsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWE7SUFDbkUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtJQUN6RSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2pELEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUM5RCxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckUsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUNqRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQzdCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztTQUNwQyxDQUFDO2FBQ0MsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7YUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBRWpELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFBO1FBQ3RELE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDL0MsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMvQyxHQUFHLENBQUMscUJBQXFCLFFBQVEsRUFBRSxDQUFDLENBQUE7WUFDcEMsU0FBUTtTQUNUO1FBRUQsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3RDLEdBQUcsQ0FBQyw2QkFBNkIsUUFBUSxFQUFFLENBQUMsQ0FBQTtnQkFDNUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDOUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO2FBQ3pDO2lCQUFNO2dCQUNMLEdBQUcsQ0FBQyxzQkFBc0IsUUFBUSxFQUFFLENBQUMsQ0FBQTthQUN0QztTQUNGO2FBQU07WUFDTCxHQUFHLENBQUMscUJBQXFCLFFBQVEsRUFBRSxDQUFDLENBQUE7U0FDckM7UUFFRCxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7S0FDMUI7QUFDSCxDQUFDIn0=
|
package/bootstrap.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { NamedNode, DatasetCore } from 'rdf-js'
|
|
2
|
+
import type { ResourceStore } from '@hydrofoil/resource-store'
|
|
3
|
+
import { isNamedNode } from 'is-graph-pointer'
|
|
4
|
+
import addAll from 'rdf-dataset-ext/addAll.js'
|
|
5
|
+
import $rdf from './env.js'
|
|
6
|
+
import log from './lib/log.js'
|
|
7
|
+
|
|
8
|
+
type Bootstrap = {
|
|
9
|
+
store: ResourceStore
|
|
10
|
+
dataset: DatasetCore
|
|
11
|
+
apiUri: NamedNode
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export async function bootstrap({ dataset, apiUri, store }: Bootstrap): Promise<void> {
|
|
15
|
+
const graph = $rdf.clownface({ dataset, graph: $rdf.ns.talos.resources })
|
|
16
|
+
const resources = graph.has($rdf.ns.talos.action)
|
|
17
|
+
for (const resource of resources.toArray().filter(isNamedNode)) {
|
|
18
|
+
const resourceData = [...dataset.match(null, null, null, resource.term)]
|
|
19
|
+
.map(({ subject, predicate, object }) => $rdf.quad(subject, predicate, object))
|
|
20
|
+
const pointer = $rdf.clownface({
|
|
21
|
+
dataset: $rdf.dataset(resourceData),
|
|
22
|
+
})
|
|
23
|
+
.namedNode(resource.term)
|
|
24
|
+
.addOut($rdf.ns.hydra.apiDocumentation, apiUri)
|
|
25
|
+
|
|
26
|
+
const action = resource.out($rdf.ns.talos.action).term
|
|
27
|
+
const exists = await store.exists(pointer.term)
|
|
28
|
+
if (exists && $rdf.ns.talos.skip.equals(action)) {
|
|
29
|
+
log(`Skipping resource ${resource}`)
|
|
30
|
+
continue
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (exists) {
|
|
34
|
+
if ($rdf.ns.talos.merge.equals(action)) {
|
|
35
|
+
log(`Merging existing resource ${resource}`)
|
|
36
|
+
const current = await store.load(pointer.term)
|
|
37
|
+
addAll(pointer.dataset, current.dataset)
|
|
38
|
+
} else {
|
|
39
|
+
log(`Replacing resource ${resource}`)
|
|
40
|
+
}
|
|
41
|
+
} else {
|
|
42
|
+
log(`Creating resource ${resource}`)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
await store.save(pointer)
|
|
46
|
+
}
|
|
47
|
+
}
|
package/env.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TalosNsFactory } from './lib/ns.js';
|
|
2
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<{
|
|
3
|
-
dataset: import("@zazuko/env/lib/
|
|
3
|
+
dataset: import("@zazuko/env/lib/DatasetFactoryExt.js").FactoryMethod<import("@zazuko/env/lib/DatasetExt.js").Dataset>;
|
|
4
4
|
init(this: import("@rdfjs/environment/Environment.js").Environment<any>): 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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hydrofoil/talos-core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -9,18 +9,20 @@
|
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@fcostarodrigo/walk": "^5.0.1",
|
|
12
|
-
"@zazuko/env-node": "^2.1.
|
|
12
|
+
"@zazuko/env-node": "^2.1.3",
|
|
13
13
|
"anylogger": "^1.1.0-beta.5",
|
|
14
14
|
"is-absolute-url": "^4.0.1",
|
|
15
|
+
"is-graph-pointer": "^2.1.0",
|
|
15
16
|
"mime-types": "^2.1.35",
|
|
17
|
+
"rdf-dataset-ext": "^1.0.1",
|
|
16
18
|
"replacestream": "^4.0.3"
|
|
17
19
|
},
|
|
18
20
|
"devDependencies": {
|
|
19
21
|
"@rdfjs-elements/formats-pretty": "^0.6.7",
|
|
20
|
-
"@zazuko/env": "^2",
|
|
22
|
+
"@zazuko/env": "^2.2.1",
|
|
21
23
|
"chai": "^4.3.8",
|
|
22
|
-
"get-stream": "^
|
|
23
|
-
"into-stream": "^8.0.
|
|
24
|
+
"get-stream": "^9.0.1",
|
|
25
|
+
"into-stream": "^8.0.1"
|
|
24
26
|
},
|
|
25
27
|
"repository": {
|
|
26
28
|
"type": "git",
|