@hydrofoil/talos-core 0.1.1 → 0.1.3

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 CHANGED
@@ -1,5 +1,19 @@
1
1
  # @hydrofoil/talos-core
2
2
 
3
+ ## 0.1.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 1b662a7: Make `apiUrl` optional for bootstrap. Will not set `hydra:apiDocumentation` link when not given
8
+ - 1b662a7: Remove `rdf-js`
9
+
10
+ ## 0.1.2
11
+
12
+ ### Patch Changes
13
+
14
+ - 33d941d: Moved `bootstrap.js` to core package
15
+ - 3d2bf6e: Update `get-stream`
16
+
3
17
  ## 0.1.1
4
18
 
5
19
  ### Patch Changes
package/bootstrap.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import type { NamedNode, DatasetCore } from '@rdfjs/types';
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,40 @@
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
+ term: resource.term,
14
+ });
15
+ if (apiUri) {
16
+ pointer.addOut($rdf.ns.hydra.apiDocumentation, apiUri);
17
+ }
18
+ const action = resource.out($rdf.ns.talos.action).term;
19
+ const exists = await store.exists(pointer.term);
20
+ if (exists && $rdf.ns.talos.skip.equals(action)) {
21
+ log(`Skipping resource ${resource}`);
22
+ continue;
23
+ }
24
+ if (exists) {
25
+ if ($rdf.ns.talos.merge.equals(action)) {
26
+ log(`Merging existing resource ${resource}`);
27
+ const current = await store.load(pointer.term);
28
+ addAll(pointer.dataset, current.dataset);
29
+ }
30
+ else {
31
+ log(`Replacing resource ${resource}`);
32
+ }
33
+ }
34
+ else {
35
+ log(`Creating resource ${resource}`);
36
+ }
37
+ await store.save(pointer);
38
+ }
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYm9vdHN0cmFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM5QyxPQUFPLE1BQU0sTUFBTSwyQkFBMkIsQ0FBQTtBQUM5QyxPQUFPLElBQUksTUFBTSxVQUFVLENBQUE7QUFDM0IsT0FBTyxHQUFHLE1BQU0sY0FBYyxDQUFBO0FBUTlCLE1BQU0sQ0FBQyxLQUFLLFVBQVUsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWE7SUFDbkUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtJQUN6RSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2pELEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUM5RCxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckUsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUNqRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQzdCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztZQUNuQyxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7U0FDcEIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxNQUFNLEVBQUU7WUFDVixPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFBO1NBQ3ZEO1FBRUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFDdEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMvQyxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQy9DLEdBQUcsQ0FBQyxxQkFBcUIsUUFBUSxFQUFFLENBQUMsQ0FBQTtZQUNwQyxTQUFRO1NBQ1Q7UUFFRCxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDdEMsR0FBRyxDQUFDLDZCQUE2QixRQUFRLEVBQUUsQ0FBQyxDQUFBO2dCQUM1QyxNQUFNLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUM5QyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7YUFDekM7aUJBQU07Z0JBQ0wsR0FBRyxDQUFDLHNCQUFzQixRQUFRLEVBQUUsQ0FBQyxDQUFBO2FBQ3RDO1NBQ0Y7YUFBTTtZQUNMLEdBQUcsQ0FBQyxxQkFBcUIsUUFBUSxFQUFFLENBQUMsQ0FBQTtTQUNyQztRQUVELE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtLQUMxQjtBQUNILENBQUMifQ==
package/bootstrap.ts ADDED
@@ -0,0 +1,50 @@
1
+ import type { NamedNode, DatasetCore } from '@rdfjs/types'
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
+ term: resource.term,
23
+ })
24
+
25
+ if (apiUri) {
26
+ pointer.addOut($rdf.ns.hydra.apiDocumentation, apiUri)
27
+ }
28
+
29
+ const action = resource.out($rdf.ns.talos.action).term
30
+ const exists = await store.exists(pointer.term)
31
+ if (exists && $rdf.ns.talos.skip.equals(action)) {
32
+ log(`Skipping resource ${resource}`)
33
+ continue
34
+ }
35
+
36
+ if (exists) {
37
+ if ($rdf.ns.talos.merge.equals(action)) {
38
+ log(`Merging existing resource ${resource}`)
39
+ const current = await store.load(pointer.term)
40
+ addAll(pointer.dataset, current.dataset)
41
+ } else {
42
+ log(`Replacing resource ${resource}`)
43
+ }
44
+ } else {
45
+ log(`Creating resource ${resource}`)
46
+ }
47
+
48
+ await store.save(pointer)
49
+ }
50
+ }
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/DatasetFactory.js").FactoryMethod<import("@zazuko/env/lib/DatasetExt.js").Dataset>;
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/index.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import path from 'path'
2
2
  import fs from 'fs'
3
- import { NamedNode, DatasetCore } from 'rdf-js'
3
+ import type { NamedNode, DatasetCore } from '@rdfjs/types'
4
4
  import walk from '@fcostarodrigo/walk'
5
5
  import type { Dataset } from '@zazuko/env/lib/DatasetExt.js'
6
6
  import $rdf from './env.js'
@@ -1,2 +1,2 @@
1
- import { NamedNode } from 'rdf-js';
1
+ import type { NamedNode } from '@rdfjs/types';
2
2
  export declare function optionsFromPrefixes(options: Record<string, unknown>): (prefix: string, namespace: NamedNode) => void;
@@ -1,4 +1,4 @@
1
- import { NamedNode } from 'rdf-js'
1
+ import type { NamedNode } from '@rdfjs/types'
2
2
 
3
3
  export function optionsFromPrefixes(options: Record<string, unknown>) {
4
4
  return (prefix: string, namespace: NamedNode) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hydrofoil/talos-core",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "type": "module",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -9,18 +9,21 @@
9
9
  },
10
10
  "dependencies": {
11
11
  "@fcostarodrigo/walk": "^5.0.1",
12
- "@zazuko/env-node": "^2.1.2",
12
+ "@types/rdf-dataset-ext": "^1.0.8",
13
+ "@zazuko/env-node": "^2.1.3",
13
14
  "anylogger": "^1.1.0-beta.5",
14
15
  "is-absolute-url": "^4.0.1",
16
+ "is-graph-pointer": "^2.1.0",
15
17
  "mime-types": "^2.1.35",
18
+ "rdf-dataset-ext": "^1.0.1",
16
19
  "replacestream": "^4.0.3"
17
20
  },
18
21
  "devDependencies": {
19
22
  "@rdfjs-elements/formats-pretty": "^0.6.7",
20
- "@zazuko/env": "^2",
23
+ "@zazuko/env": "^2.2.1",
21
24
  "chai": "^4.3.8",
22
- "get-stream": "^8.0.1",
23
- "into-stream": "^8.0.0"
25
+ "get-stream": "^9.0.1",
26
+ "into-stream": "^8.0.1"
24
27
  },
25
28
  "repository": {
26
29
  "type": "git",