@hydrofoil/talos 0.3.4

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 ADDED
@@ -0,0 +1,80 @@
1
+ # @hydrofoil/talos
2
+
3
+ ## 0.3.4
4
+
5
+ ### Patch Changes
6
+
7
+ - 432ec61: `put`: skip invalid directories with warning
8
+
9
+ ## 0.3.3
10
+
11
+ ### Patch Changes
12
+
13
+ - bd43f68: Dots in resource path caused the URI to be cut short
14
+
15
+ ## 0.3.2
16
+
17
+ ### Patch Changes
18
+
19
+ - 6d68a5d: Resource paths were not encoded which caused Bad Request on SPARQL Update if they contained spaces or other characters not allowed in URLs
20
+
21
+ ## 0.3.1
22
+
23
+ ### Patch Changes
24
+
25
+ - b3e24eb: Upgrade `@hydrofoil/vocabularies`
26
+ - Updated dependencies [b3e24eb]
27
+ - @hydrofoil/knossos@0.2.3
28
+
29
+ ## 0.3.0
30
+
31
+ ### Minor Changes
32
+
33
+ - 2883c1c: Split `put --resources` and `put --vocabs` into separate commands
34
+
35
+ ## 0.2.1
36
+
37
+ ### Patch Changes
38
+
39
+ - ad1932f: Add option to put additional vocabs from compatible packages
40
+
41
+ ## 0.2.0
42
+
43
+ ### Minor Changes
44
+
45
+ - c51aa59: Add `hydra:apiDocumentation` to bootstrapped resources
46
+
47
+ ## 0.1.2
48
+
49
+ ### Patch Changes
50
+
51
+ - Updated dependencies [73ca0a8]
52
+ - Updated dependencies [634fd08]
53
+ - Updated dependencies [233b408]
54
+ - Updated dependencies [090d840]
55
+ - Updated dependencies [4cf1b24]
56
+ - Updated dependencies [ea8c6f9]
57
+ - @hydrofoil/knossos@0.2.0
58
+
59
+ ## 0.1.1
60
+
61
+ ### Patch Changes
62
+
63
+ - 3f6cdb8: CLI command would fail on syntax error
64
+ - Updated dependencies [b4906f2]
65
+ - Updated dependencies [699c630]
66
+ - Updated dependencies [3f6cdb8]
67
+ - @hydrofoil/knossos@0.1.1
68
+
69
+ ## 0.1.0
70
+
71
+ ### Minor Changes
72
+
73
+ - 8df3380: First version
74
+ - 2a8cebf: SHACL vocabulary inserted by default
75
+
76
+ ### Patch Changes
77
+
78
+ - Updated dependencies [8ca0bbf]
79
+ - Updated dependencies [8df3380]
80
+ - @hydrofoil/knossos@0.1.0
package/bin/talos.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ require('..')
package/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/index.js ADDED
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const commander_1 = __importDefault(require("commander"));
7
+ const command_1 = require("./lib/command");
8
+ const extraVocabs_1 = require("./lib/command/extraVocabs");
9
+ const log_1 = require("./lib/log");
10
+ commander_1.default.command('put [dirs...]')
11
+ .description('Initializes the database from local resource files')
12
+ .requiredOption('--api <api>')
13
+ .requiredOption('--endpoint <endpoint>')
14
+ .option('--token <token>', 'System authentication token')
15
+ .option('-u, --user <user>')
16
+ .option('-p, --password <password>')
17
+ .option('--apiPath <apiPath>', 'The path of the API Documentation resource', '/api')
18
+ .action(async (dirs, arg) => {
19
+ command_1.put(dirs.length ? dirs : ['./resources'], arg)
20
+ .catch((e) => {
21
+ log_1.log(e);
22
+ process.exit(1);
23
+ });
24
+ });
25
+ commander_1.default.command('put-vocabs')
26
+ .description('Inserts vocabulary graphs into the database')
27
+ .requiredOption('--apiDoc <apiDoc>')
28
+ .requiredOption('--endpoint <endpoint>')
29
+ .option('--token <token>', 'System authentication token')
30
+ .option('-u, --user <user>')
31
+ .option('-p, --password <password>')
32
+ .option('--extraVocabs <...extraVocab>', 'Package name and (optionally) comma-separated prefixes', extraVocabs_1.parseExtraVocabs)
33
+ .action((arg) => {
34
+ command_1.putVocabs(arg)
35
+ .catch((e) => {
36
+ log_1.log(e);
37
+ process.exit(1);
38
+ });
39
+ });
40
+ commander_1.default.parse(process.argv);
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDBEQUErQjtBQUMvQiwyQ0FBOEM7QUFDOUMsMkRBQTREO0FBQzVELG1DQUErQjtBQUUvQixtQkFBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUM7S0FDN0IsV0FBVyxDQUFDLG9EQUFvRCxDQUFDO0tBQ2pFLGNBQWMsQ0FBQyxhQUFhLENBQUM7S0FDN0IsY0FBYyxDQUFDLHVCQUF1QixDQUFDO0tBQ3ZDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSw2QkFBNkIsQ0FBQztLQUN4RCxNQUFNLENBQUMsbUJBQW1CLENBQUM7S0FDM0IsTUFBTSxDQUFDLDJCQUEyQixDQUFDO0tBQ25DLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSw0Q0FBNEMsRUFBRSxNQUFNLENBQUM7S0FDbkYsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7SUFDMUIsYUFBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUM7U0FDM0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDWCxTQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDTixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pCLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFDLENBQUE7QUFFSixtQkFBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7S0FDMUIsV0FBVyxDQUFDLDZDQUE2QyxDQUFDO0tBQzFELGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQztLQUNuQyxjQUFjLENBQUMsdUJBQXVCLENBQUM7S0FDdkMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLDZCQUE2QixDQUFDO0tBQ3hELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztLQUMzQixNQUFNLENBQUMsMkJBQTJCLENBQUM7S0FDbkMsTUFBTSxDQUFDLCtCQUErQixFQUFFLHdEQUF3RCxFQUFFLDhCQUFnQixDQUFDO0tBQ25ILE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0lBQ2QsbUJBQVMsQ0FBQyxHQUFHLENBQUM7U0FDWCxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNYLFNBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakIsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUMsQ0FBQTtBQUVKLG1CQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQSJ9
@@ -0,0 +1,9 @@
1
+ import { NamedNode } from 'rdf-js';
2
+ import { StreamClientOptions } from 'sparql-http-client';
3
+ declare type Options = StreamClientOptions & {
4
+ api: string;
5
+ apiUri: NamedNode;
6
+ cwd: string;
7
+ };
8
+ export declare function bootstrap({ api, apiUri, cwd, ...options }: Options): Promise<void>;
9
+ export {};
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.bootstrap = void 0;
26
+ const path_1 = __importDefault(require("path"));
27
+ const fs = __importStar(require("fs"));
28
+ const walk_1 = __importDefault(require("@fcostarodrigo/walk"));
29
+ const mime = __importStar(require("mime-types"));
30
+ const sparql_http_client_1 = __importDefault(require("sparql-http-client"));
31
+ const rdf_ext_1 = __importDefault(require("rdf-ext"));
32
+ const formats_common_1 = require("@rdfjs/formats-common");
33
+ const clownface_1 = __importDefault(require("clownface"));
34
+ const store_1 = require("@hydrofoil/knossos/lib/store");
35
+ const strict_1 = require("@tpluscode/rdf-ns-builders/strict");
36
+ const log_1 = require("./log");
37
+ async function bootstrap({ api, apiUri, cwd, ...options }) {
38
+ const store = new store_1.ResourcePerGraphStore(new sparql_http_client_1.default(options));
39
+ for await (const file of walk_1.default(cwd)) {
40
+ const relative = path_1.default.relative(cwd, file);
41
+ const resourcePath = path_1.default.relative(cwd, file)
42
+ .replace(/\.[^.]+$/, '')
43
+ .replace(/\/?index$/, '');
44
+ const url = encodeURI(`${api}/${resourcePath}`);
45
+ const mediaType = mime.lookup(file);
46
+ if (!mediaType) {
47
+ log_1.log('Could not determine media type for file %s', relative);
48
+ continue;
49
+ }
50
+ const parserStream = formats_common_1.parsers.import(mediaType, fs.createReadStream(file), {
51
+ baseIRI: url,
52
+ });
53
+ if (!parserStream) {
54
+ log_1.log('Unsupported media type %s from %s', mediaType, relative);
55
+ continue;
56
+ }
57
+ let dataset;
58
+ try {
59
+ dataset = await rdf_ext_1.default.dataset().import(parserStream);
60
+ }
61
+ catch (e) {
62
+ log_1.log('Failed to parse %s: %s', relative, e.message);
63
+ continue;
64
+ }
65
+ const pointer = clownface_1.default({ dataset })
66
+ .namedNode(url)
67
+ .addOut(strict_1.hydra.apiDocumentation, apiUri);
68
+ if (await store.exists(pointer.term)) {
69
+ log_1.log(`Replacing resource ${url}`);
70
+ }
71
+ else {
72
+ log_1.log(`Creating resource ${url}`);
73
+ }
74
+ await store.save(pointer);
75
+ }
76
+ }
77
+ exports.bootstrap = bootstrap;
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYm9vdHN0cmFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnREFBdUI7QUFDdkIsdUNBQXdCO0FBRXhCLCtEQUFzQztBQUN0QyxpREFBa0M7QUFDbEMsNEVBQXNFO0FBQ3RFLHNEQUEwQjtBQUMxQiwwREFBK0M7QUFDL0MsMERBQWlDO0FBQ2pDLHdEQUFvRTtBQUNwRSw4REFBeUQ7QUFDekQsK0JBQTJCO0FBUXBCLEtBQUssVUFBVSxTQUFTLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBVztJQUN2RSxNQUFNLEtBQUssR0FBRyxJQUFJLDZCQUFxQixDQUFDLElBQUksNEJBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBRWxFLElBQUksS0FBSyxFQUFFLE1BQU0sSUFBSSxJQUFJLGNBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNsQyxNQUFNLFFBQVEsR0FBRyxjQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN6QyxNQUFNLFlBQVksR0FBRyxjQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7YUFDMUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7YUFDdkIsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUUzQixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQTtRQUUvQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ25DLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDZCxTQUFHLENBQUMsNENBQTRDLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDM0QsU0FBUTtTQUNUO1FBRUQsTUFBTSxZQUFZLEdBQUcsd0JBQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN4RSxPQUFPLEVBQUUsR0FBRztTQUNiLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDakIsU0FBRyxDQUFDLG1DQUFtQyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUM3RCxTQUFRO1NBQ1Q7UUFFRCxJQUFJLE9BQW9CLENBQUE7UUFDeEIsSUFBSTtZQUNGLE9BQU8sR0FBRyxNQUFNLGlCQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO1NBQ3BEO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixTQUFHLENBQUMsd0JBQXdCLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUNsRCxTQUFRO1NBQ1Q7UUFFRCxNQUFNLE9BQU8sR0FBRyxtQkFBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUM7YUFDbkMsU0FBUyxDQUFDLEdBQUcsQ0FBQzthQUNkLE1BQU0sQ0FBQyxjQUFLLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFFekMsSUFBSSxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3BDLFNBQUcsQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUMsQ0FBQTtTQUNqQzthQUFNO1lBQ0wsU0FBRyxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQyxDQUFBO1NBQ2hDO1FBRUQsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0tBQzFCO0FBQ0gsQ0FBQztBQTdDRCw4QkE2Q0MifQ==
@@ -0,0 +1,2 @@
1
+ import { ExtraVocab } from '../insertVocabs';
2
+ export declare function parseExtraVocabs(value: string, vocabs?: ExtraVocab[]): ExtraVocab[];
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseExtraVocabs = void 0;
4
+ function parseExtraVocabs(value, vocabs = []) {
5
+ const [packageName, ...prefixes] = value.split(',');
6
+ return [
7
+ ...vocabs,
8
+ {
9
+ package: packageName,
10
+ prefixes: prefixes.map(p => p.trim()).filter(p => !!p),
11
+ },
12
+ ];
13
+ }
14
+ exports.parseExtraVocabs = parseExtraVocabs;
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmFWb2NhYnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJleHRyYVZvY2Ficy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxTQUFnQixnQkFBZ0IsQ0FBQyxLQUFhLEVBQUUsU0FBdUIsRUFBRTtJQUN2RSxNQUFNLENBQUMsV0FBVyxFQUFFLEdBQUcsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUVuRCxPQUFPO1FBQ0wsR0FBRyxNQUFNO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsV0FBVztZQUNwQixRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkQ7S0FDRixDQUFBO0FBQ0gsQ0FBQztBQVZELDRDQVVDIn0=
@@ -0,0 +1,8 @@
1
+ export { put } from './put';
2
+ export { putVocabs } from './put-vocabs';
3
+ export interface Command {
4
+ endpoint: string;
5
+ token?: string;
6
+ user?: string;
7
+ password?: string;
8
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.putVocabs = exports.put = void 0;
4
+ var put_1 = require("./put");
5
+ Object.defineProperty(exports, "put", { enumerable: true, get: function () { return put_1.put; } });
6
+ var put_vocabs_1 = require("./put-vocabs");
7
+ Object.defineProperty(exports, "putVocabs", { enumerable: true, get: function () { return put_vocabs_1.putVocabs; } });
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBMkI7QUFBbEIsMEZBQUEsR0FBRyxPQUFBO0FBQ1osMkNBQXdDO0FBQS9CLHVHQUFBLFNBQVMsT0FBQSJ9
@@ -0,0 +1,7 @@
1
+ import { ExtraVocab } from '../insertVocabs';
2
+ import type { Command } from '.';
3
+ export interface PutVocabs extends Command {
4
+ apiDoc?: string;
5
+ extraVocabs?: Array<ExtraVocab>;
6
+ }
7
+ export declare function putVocabs({ token, endpoint, user, password, extraVocabs, apiDoc }: PutVocabs): Promise<void>;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.putVocabs = void 0;
7
+ const rdf_ext_1 = __importDefault(require("rdf-ext"));
8
+ const insertVocabs_1 = require("../insertVocabs");
9
+ const deleteApi_1 = require("../deleteApi");
10
+ const log_1 = require("../log");
11
+ async function putVocabs({ token, endpoint, user, password, extraVocabs, apiDoc }) {
12
+ await insertVocabs_1.insertVocabs({
13
+ endpointUrl: endpoint,
14
+ updateUrl: endpoint,
15
+ user,
16
+ password,
17
+ }, {
18
+ extraVocabs,
19
+ }).then(() => log_1.log('Inserted vocabularies'));
20
+ if (apiDoc) {
21
+ await deleteApi_1.deleteApi({
22
+ apiUri: rdf_ext_1.default.namedNode(apiDoc),
23
+ token,
24
+ });
25
+ }
26
+ }
27
+ exports.putVocabs = putVocabs;
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHV0LXZvY2Ficy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInB1dC12b2NhYnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsc0RBQTBCO0FBQzFCLGtEQUEwRDtBQUMxRCw0Q0FBd0M7QUFDeEMsZ0NBQTRCO0FBUXJCLEtBQUssVUFBVSxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBYTtJQUNqRyxNQUFNLDJCQUFZLENBQUM7UUFDakIsV0FBVyxFQUFFLFFBQVE7UUFDckIsU0FBUyxFQUFFLFFBQVE7UUFDbkIsSUFBSTtRQUNKLFFBQVE7S0FDVCxFQUFFO1FBQ0QsV0FBVztLQUNaLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQTtJQUUzQyxJQUFJLE1BQU0sRUFBRTtRQUNWLE1BQU0scUJBQVMsQ0FBQztZQUNkLE1BQU0sRUFBRSxpQkFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDOUIsS0FBSztTQUNOLENBQUMsQ0FBQTtLQUNIO0FBQ0gsQ0FBQztBQWhCRCw4QkFnQkMifQ==
@@ -0,0 +1,6 @@
1
+ import type { Command } from '.';
2
+ export interface Put extends Command {
3
+ api: string;
4
+ apiPath?: string;
5
+ }
6
+ export declare function put(directories: string[], { token, api, endpoint, user, password, apiPath }: Put): Promise<void>;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.put = void 0;
26
+ const path_1 = __importDefault(require("path"));
27
+ const fs = __importStar(require("fs"));
28
+ const rdf_ext_1 = __importDefault(require("rdf-ext"));
29
+ const bootstrap_1 = require("../bootstrap");
30
+ const deleteApi_1 = require("../deleteApi");
31
+ const log_1 = require("../log");
32
+ async function put(directories, { token, api, endpoint, user, password, apiPath }) {
33
+ const apiUri = rdf_ext_1.default.namedNode(`${api}${apiPath}`);
34
+ for (const dir of directories) {
35
+ const cwd = path_1.default.resolve(process.cwd(), dir);
36
+ if (!fs.existsSync(cwd)) {
37
+ log_1.log('Skipping path %s which does not exist', dir);
38
+ continue;
39
+ }
40
+ if (!fs.statSync(cwd).isDirectory()) {
41
+ log_1.log('Skipping path %s which is not a directory', dir);
42
+ continue;
43
+ }
44
+ await bootstrap_1.bootstrap({
45
+ api,
46
+ apiUri,
47
+ cwd,
48
+ endpointUrl: endpoint,
49
+ updateUrl: endpoint,
50
+ user,
51
+ password,
52
+ });
53
+ }
54
+ await deleteApi_1.deleteApi({ apiUri, token });
55
+ }
56
+ exports.put = put;
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnREFBdUI7QUFDdkIsdUNBQXdCO0FBQ3hCLHNEQUEwQjtBQUMxQiw0Q0FBd0M7QUFDeEMsNENBQXdDO0FBQ3hDLGdDQUE0QjtBQVFyQixLQUFLLFVBQVUsR0FBRyxDQUFDLFdBQXFCLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBTztJQUNyRyxNQUFNLE1BQU0sR0FBRyxpQkFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ2pELEtBQUssTUFBTSxHQUFHLElBQUksV0FBVyxFQUFFO1FBQzdCLE1BQU0sR0FBRyxHQUFHLGNBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBRTVDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZCLFNBQUcsQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUNqRCxTQUFRO1NBQ1Q7UUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNuQyxTQUFHLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFDckQsU0FBUTtTQUNUO1FBRUQsTUFBTSxxQkFBUyxDQUFDO1lBQ2QsR0FBRztZQUNILE1BQU07WUFDTixHQUFHO1lBQ0gsV0FBVyxFQUFFLFFBQVE7WUFDckIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsSUFBSTtZQUNKLFFBQVE7U0FDVCxDQUFDLENBQUE7S0FDSDtJQUVELE1BQU0scUJBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFBO0FBQ3BDLENBQUM7QUExQkQsa0JBMEJDIn0=
@@ -0,0 +1,7 @@
1
+ import { NamedNode } from 'rdf-js';
2
+ interface DeleteApi {
3
+ token?: string;
4
+ apiUri: NamedNode;
5
+ }
6
+ export declare function deleteApi({ apiUri, token }: DeleteApi): Promise<void>;
7
+ export {};
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.deleteApi = void 0;
7
+ const node_fetch_1 = __importDefault(require("node-fetch"));
8
+ const log_1 = require("./log");
9
+ async function deleteApi({ apiUri, token }) {
10
+ if (token) {
11
+ const res = await node_fetch_1.default(apiUri.value, {
12
+ method: 'DELETE',
13
+ headers: {
14
+ Authorization: `System ${token}`,
15
+ },
16
+ });
17
+ if (res.ok) {
18
+ log_1.log('Reset hydra:ApiDocumentation');
19
+ }
20
+ else {
21
+ log_1.log('Failed to reset hydra:ApiDocumentation: %s', await res.text());
22
+ }
23
+ }
24
+ else {
25
+ log_1.log('No System token provided. API restart may be necessary for changes to be applied');
26
+ }
27
+ }
28
+ exports.deleteApi = deleteApi;
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlQXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVsZXRlQXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLDREQUE4QjtBQUM5QiwrQkFBMkI7QUFPcEIsS0FBSyxVQUFVLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWM7SUFDM0QsSUFBSSxLQUFLLEVBQUU7UUFDVCxNQUFNLEdBQUcsR0FBRyxNQUFNLG9CQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtZQUNwQyxNQUFNLEVBQUUsUUFBUTtZQUNoQixPQUFPLEVBQUU7Z0JBQ1AsYUFBYSxFQUFFLFVBQVUsS0FBSyxFQUFFO2FBQ2pDO1NBQ0YsQ0FBQyxDQUFBO1FBRUYsSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQ1YsU0FBRyxDQUFDLDhCQUE4QixDQUFDLENBQUE7U0FDcEM7YUFBTTtZQUNMLFNBQUcsQ0FBQyw0Q0FBNEMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1NBQ3BFO0tBQ0Y7U0FBTTtRQUNMLFNBQUcsQ0FBQyxrRkFBa0YsQ0FBQyxDQUFBO0tBQ3hGO0FBQ0gsQ0FBQztBQWpCRCw4QkFpQkMifQ==
@@ -0,0 +1,8 @@
1
+ import { StreamClientOptions } from 'sparql-http-client';
2
+ export interface ExtraVocab {
3
+ package: string;
4
+ prefixes?: string[];
5
+ }
6
+ export declare function insertVocabs(options: StreamClientOptions, { extraVocabs }: {
7
+ extraVocabs?: ExtraVocab[];
8
+ }): Promise<void>;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.insertVocabs = void 0;
26
+ const sparql_http_client_1 = __importDefault(require("sparql-http-client"));
27
+ const rdf_vocabularies_1 = require("@zazuko/rdf-vocabularies");
28
+ const vocabularies_1 = require("@hydrofoil/vocabularies");
29
+ const sparql_builder_1 = require("@tpluscode/sparql-builder");
30
+ const rdf_string_1 = require("@tpluscode/rdf-string");
31
+ const rdf_ext_1 = __importDefault(require("rdf-ext"));
32
+ const log_1 = require("./log");
33
+ function toTriple({ subject, predicate, object }) {
34
+ return rdf_ext_1.default.triple(subject, predicate, object);
35
+ }
36
+ function loadExtraVocabs(vocabs) {
37
+ return vocabs.reduce(async (previous, vocab) => {
38
+ const datasets = await previous;
39
+ const { vocabularies } = await Promise.resolve().then(() => __importStar(require(vocab.package)));
40
+ return {
41
+ ...datasets,
42
+ ...await vocabularies({ only: vocab.prefixes }),
43
+ };
44
+ }, Promise.resolve({}));
45
+ }
46
+ function insertVocab(client) {
47
+ return async ([prefix, vocab]) => {
48
+ if (!vocab)
49
+ return;
50
+ const namespace = rdf_ext_1.default.namedNode(rdf_vocabularies_1.prefixes[prefix]);
51
+ const insert = sparql_builder_1.INSERT.DATA `GRAPH <${namespace.value}> {
52
+ ${vocab.map(toTriple).toString()}
53
+ }`;
54
+ const query = rdf_string_1.sparql `DROP SILENT GRAPH <${namespace.value}>;\n${insert}`.toString();
55
+ log_1.log('Inserting vocab %s', namespace.value);
56
+ return client.query.update(query);
57
+ };
58
+ }
59
+ async function insertVocabs(options, { extraVocabs = [] }) {
60
+ const client = new sparql_http_client_1.default(options);
61
+ const datasets = {
62
+ ...await rdf_vocabularies_1.vocabularies({ only: ['hydra', 'acl', 'as', 'rdf', 'rdfs', 'sh'] }),
63
+ ...await vocabularies_1.vocabularies(),
64
+ ...await loadExtraVocabs(extraVocabs),
65
+ };
66
+ await Promise.all(Object.entries(datasets).map(insertVocab(client)));
67
+ }
68
+ exports.insertVocabs = insertVocabs;
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zZXJ0Vm9jYWJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW5zZXJ0Vm9jYWJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSw0RUFBc0U7QUFDdEUsK0RBQXFGO0FBQ3JGLDBEQUErRTtBQUMvRSw4REFBa0Q7QUFDbEQsc0RBQThDO0FBQzlDLHNEQUEwQjtBQUUxQiwrQkFBMkI7QUFPM0IsU0FBUyxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBUTtJQUNwRCxPQUFPLGlCQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUE7QUFDaEQsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLE1BQW9CO0lBQzNDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzdDLE1BQU0sUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFBO1FBQy9CLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyx3REFBYSxLQUFLLENBQUMsT0FBTyxHQUFDLENBQUE7UUFFcEQsT0FBTztZQUNMLEdBQUcsUUFBUTtZQUNYLEdBQUcsTUFBTSxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2hELENBQUE7SUFDSCxDQUFDLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBNkIsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUNyRCxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsTUFBb0I7SUFDdkMsT0FBTyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFtQyxFQUFpQixFQUFFO1FBQ2hGLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTTtRQUVsQixNQUFNLFNBQVMsR0FBRyxpQkFBSSxDQUFDLFNBQVMsQ0FBQywyQkFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFFbEQsTUFBTSxNQUFNLEdBQUcsdUJBQU0sQ0FBQyxJQUFJLENBQUEsVUFBVSxTQUFTLENBQUMsS0FBSztRQUMvQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBRTtNQUNoQyxDQUFBO1FBQ0YsTUFBTSxLQUFLLEdBQUcsbUJBQU0sQ0FBQSxzQkFBc0IsU0FBUyxDQUFDLEtBQUssT0FBTyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtRQUVuRixTQUFHLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzFDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDbkMsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSxZQUFZLENBQUMsT0FBNEIsRUFBRSxFQUFFLFdBQVcsR0FBRyxFQUFFLEVBQWtDO0lBQ25ILE1BQU0sTUFBTSxHQUFHLElBQUksNEJBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUV4QyxNQUFNLFFBQVEsR0FBRztRQUNmLEdBQUcsTUFBTSwrQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNoRixHQUFHLE1BQU0sMkJBQXFCLEVBQUU7UUFDaEMsR0FBRyxNQUFNLGVBQWUsQ0FBQyxXQUFXLENBQUM7S0FDdEMsQ0FBQTtJQUVELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3RFLENBQUM7QUFWRCxvQ0FVQyJ9
package/lib/log.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import debug from 'debug';
2
+ export declare const log: debug.Debugger;
package/lib/log.js ADDED
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.log = void 0;
7
+ const debug_1 = __importDefault(require("debug"));
8
+ exports.log = debug_1.default('talos');
9
+ exports.log.enabled = true;
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUF5QjtBQUVaLFFBQUEsR0FBRyxHQUFHLGVBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQUNqQyxXQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQSJ9
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@hydrofoil/talos",
3
+ "version": "0.3.4",
4
+ "main": "index.js",
5
+ "bin": {
6
+ "talos": "bin/talos.js"
7
+ },
8
+ "scripts": {
9
+ "prepare": "tsc"
10
+ },
11
+ "files": [
12
+ "lib/**/*.js",
13
+ "*.js",
14
+ "*.d.ts"
15
+ ],
16
+ "dependencies": {
17
+ "@fcostarodrigo/walk": "^5.0.1",
18
+ "@hydrofoil/knossos": "^0.2.3",
19
+ "@hydrofoil/vocabularies": "^0.2.0",
20
+ "@rdfjs/formats-common": "^2.1.0",
21
+ "@tpluscode/rdf-ns-builders": "^1.0.0",
22
+ "@tpluscode/rdf-string": "^0.2.24",
23
+ "@tpluscode/sparql-builder": "^0.3.12",
24
+ "@zazuko/rdf-vocabularies": "*",
25
+ "clownface": "^1.2.0",
26
+ "commander": "^6.1.0",
27
+ "debug": "^4.3.1",
28
+ "mime-types": "^2.1.30",
29
+ "node-fetch": "^2.6.1",
30
+ "rdf-ext": "^1.3.1",
31
+ "sparql-http-client": "^2.2.3"
32
+ },
33
+ "devDependencies": {
34
+ "@rdfjs/namespace": "^1.1.0",
35
+ "@types/mime-types": "^2.1.0",
36
+ "@wikibus/vocabularies": "^0.2.1",
37
+ "chai": "^4.3.4",
38
+ "sinon": "^9"
39
+ }
40
+ }
package/readme.md ADDED
@@ -0,0 +1,3 @@
1
+ # @knossos/talos
2
+
3
+ See [https://creta.hypermedia.app/#/talos](https://creta.hypermedia.app/#/talos)