@hydrofoil/talos 0.6.13 → 0.8.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/bin/talos.js CHANGED
@@ -1,3 +1 @@
1
- #!/usr/bin/env node
2
- import 'anylogger-debug'
3
1
  import '../index.js'
package/bin/talos.sh ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # find JS entrypoint
4
+ talos=$(node -e "console.log(require.resolve('@hydrofoil/talos/bin/talos.js'))" 2> /dev/null)
5
+
6
+ # if ts-node exists in path
7
+ if command -v ts-node &> /dev/null
8
+ then
9
+ # use ts-node
10
+ node --loader ts-node/esm/transpile-only --no-warnings "$talos" "$@"
11
+ else
12
+ # use plain node
13
+ node "$talos" "$@"
14
+ fi
package/index.d.ts CHANGED
@@ -1 +1 @@
1
- export {};
1
+ import './lib/anylogger-pino.js';
package/index.js CHANGED
@@ -1,19 +1,26 @@
1
- import { program } from 'commander';
1
+ import './lib/anylogger-pino.js';
2
+ import { program, Option } from 'commander';
2
3
  import rdf from '@zazuko/env-node';
3
4
  import { fromDirectories } from '@hydrofoil/talos-core';
4
- import { put, putVocabs } from './lib/command/index.js';
5
- import { parseExtraVocabs } from './lib/command/extraVocabs.js';
5
+ import { put } from './lib/command/index.js';
6
6
  import log from './lib/log.js';
7
7
  import resourceFilter from './lib/resourceFilter.js';
8
+ program
9
+ .addOption(new Option('-v, --verbose', 'Print more information. Can be provided multiple times')
10
+ .argParser(() => {
11
+ log.levelVal -= 10;
12
+ }))
13
+ .addOption(new Option('-s, --silent', 'Disable all logs')
14
+ .argParser(() => {
15
+ log.level = 'silent';
16
+ }));
8
17
  program.command('put [dirs...]')
9
18
  .description('Initializes the database from local resource files')
10
- .requiredOption('--api <api>')
19
+ .requiredOption('--base <base>')
11
20
  .requiredOption('--endpoint <endpoint>')
12
21
  .option('--updateEndpoint <updateEndpoint>')
13
- .option('--token <token>', 'System authentication token')
14
22
  .option('-u, --user <user>')
15
23
  .option('-p, --password <password>')
16
- .option('--apiPath <apiPath>', 'The path of the API Documentation resource', '/api')
17
24
  .action(async (dirs = ['./resources'], arg) => {
18
25
  put(dirs, arg)
19
26
  .catch((e) => {
@@ -21,21 +28,6 @@ program.command('put [dirs...]')
21
28
  process.exit(1);
22
29
  });
23
30
  });
24
- program.command('put-vocabs')
25
- .description('Inserts vocabulary graphs into the database')
26
- .option('--apiDoc <apiDoc>')
27
- .requiredOption('--endpoint <endpoint>')
28
- .option('--token <token>', 'System authentication token')
29
- .option('-u, --user <user>')
30
- .option('-p, --password <password>')
31
- .option('--extraVocabs <...extraVocab>', 'Package name and (optionally) comma-separated prefixes', parseExtraVocabs)
32
- .action((arg) => {
33
- putVocabs(arg)
34
- .catch((e) => {
35
- log(e);
36
- process.exit(1);
37
- });
38
- });
39
31
  program.command('print [dirs...]')
40
32
  .requiredOption('--base <base>')
41
33
  .option('--include-talos-meta-graph')
@@ -47,4 +39,4 @@ program.command('print [dirs...]')
47
39
  nquads.pipe(process.stdout);
48
40
  });
49
41
  program.parse(process.argv);
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ25DLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFBO0FBQ2xDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFBO0FBQy9ELE9BQU8sR0FBRyxNQUFNLGNBQWMsQ0FBQTtBQUM5QixPQUFPLGNBQWMsTUFBTSx5QkFBeUIsQ0FBQTtBQUVwRCxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztLQUM3QixXQUFXLENBQUMsb0RBQW9ELENBQUM7S0FDakUsY0FBYyxDQUFDLGFBQWEsQ0FBQztLQUM3QixjQUFjLENBQUMsdUJBQXVCLENBQUM7S0FDdkMsTUFBTSxDQUFDLG1DQUFtQyxDQUFDO0tBQzNDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSw2QkFBNkIsQ0FBQztLQUN4RCxNQUFNLENBQUMsbUJBQW1CLENBQUM7S0FDM0IsTUFBTSxDQUFDLDJCQUEyQixDQUFDO0tBQ25DLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSw0Q0FBNEMsRUFBRSxNQUFNLENBQUM7S0FDbkYsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRTtJQUM1QyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztTQUNYLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ04sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQyxDQUFBO0FBRUosT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7S0FDMUIsV0FBVyxDQUFDLDZDQUE2QyxDQUFDO0tBQzFELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztLQUMzQixjQUFjLENBQUMsdUJBQXVCLENBQUM7S0FDdkMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLDZCQUE2QixDQUFDO0tBQ3hELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztLQUMzQixNQUFNLENBQUMsMkJBQTJCLENBQUM7S0FDbkMsTUFBTSxDQUFDLCtCQUErQixFQUFFLHdEQUF3RCxFQUFFLGdCQUFnQixDQUFDO0tBQ25ILE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0lBQ2QsU0FBUyxDQUFDLEdBQUcsQ0FBQztTQUNYLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ04sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQyxDQUFBO0FBRUosT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztLQUMvQixjQUFjLENBQUMsZUFBZSxDQUFDO0tBQy9CLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQztLQUNwQyxXQUFXLENBQUMsc0JBQXNCLENBQUM7S0FDbkMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDdkYsTUFBTSxPQUFPLEdBQUcsTUFBTSxlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBRWpELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDaEYsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBcUMsQ0FBQTtJQUMvRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUM3QixDQUFDLENBQUMsQ0FBQTtBQUVKLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBIn0=
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLHlCQUF5QixDQUFBO0FBRWhDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQzNDLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFBO0FBQ2xDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDNUMsT0FBTyxHQUFHLE1BQU0sY0FBYyxDQUFBO0FBQzlCLE9BQU8sY0FBYyxNQUFNLHlCQUF5QixDQUFBO0FBRXBELE9BQU87S0FDSixTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFLHdEQUF3RCxDQUFDO0tBQzdGLFNBQVMsQ0FBQyxHQUFHLEVBQUU7SUFDYixHQUF5QixDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUE7QUFDM0MsQ0FBQyxDQUFDLENBQUM7S0FDSixTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDO0tBQ3RELFNBQVMsQ0FBQyxHQUFHLEVBQUU7SUFDYixHQUF5QixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUE7QUFDN0MsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUVQLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO0tBQzdCLFdBQVcsQ0FBQyxvREFBb0QsQ0FBQztLQUNqRSxjQUFjLENBQUMsZUFBZSxDQUFDO0tBQy9CLGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQztLQUN2QyxNQUFNLENBQUMsbUNBQW1DLENBQUM7S0FDM0MsTUFBTSxDQUFDLG1CQUFtQixDQUFDO0tBQzNCLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQztLQUNuQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO0lBQzVDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1NBQ1gsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDTixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pCLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFDLENBQUE7QUFFSixPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO0tBQy9CLGNBQWMsQ0FBQyxlQUFlLENBQUM7S0FDL0IsTUFBTSxDQUFDLDRCQUE0QixDQUFDO0tBQ3BDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQztLQUNuQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUN2RixNQUFNLE9BQU8sR0FBRyxNQUFNLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFFakQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUNoRixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFxQyxDQUFBO0lBQy9HLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQzdCLENBQUMsQ0FBQyxDQUFBO0FBRUosT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUEifQ==
@@ -0,0 +1,48 @@
1
+ import pino, { levels } from 'pino'
2
+ import anylogger from 'anylogger'
3
+
4
+ const pinoLogger = pino({
5
+ transport: {
6
+ target: 'pino-pretty',
7
+ options: {
8
+ colorize: true,
9
+ destination: 2,
10
+ },
11
+ },
12
+ })
13
+
14
+ anylogger.ext = (logger) => {
15
+ for (const level in anylogger.levels) {
16
+ logger[level] = (...args) => {
17
+ if (level in pinoLogger) {
18
+ pinoLogger[level](...args)
19
+ } else {
20
+ pinoLogger.debug(...args)
21
+ }
22
+ }
23
+ }
24
+
25
+ logger.enabledFor = function (level) {
26
+ return pinoLogger.isLevelEnabled(level)
27
+ }
28
+
29
+ Object.defineProperty(logger, 'level', {
30
+ get() {
31
+ return pinoLogger.level
32
+ },
33
+ set(level) {
34
+ pinoLogger.level = level
35
+ },
36
+ })
37
+
38
+ Object.defineProperty(logger, 'levelVal', {
39
+ get() {
40
+ return pinoLogger.levelVal
41
+ },
42
+ set(levelVal) {
43
+ pinoLogger.level = levels.labels[levelVal]
44
+ },
45
+ })
46
+
47
+ return logger
48
+ }
@@ -1,9 +1,7 @@
1
1
  export { put } from './put.js';
2
- export { putVocabs } from './put-vocabs.js';
3
2
  export interface Command {
4
3
  endpoint: string;
5
4
  updateEndpoint?: string;
6
- token?: string;
7
5
  user?: string;
8
6
  password?: string;
9
7
  }
@@ -1,3 +1,2 @@
1
1
  export { put } from './put.js';
2
- export { putVocabs } from './put-vocabs.js';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQSJ9
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sVUFBVSxDQUFBIn0=
@@ -1,8 +1,5 @@
1
- import type nodeFetch from 'node-fetch';
2
1
  import type { Command } from './index.js';
3
2
  export interface Put extends Command {
4
- api: string;
5
- apiPath?: string;
6
- fetch?: typeof nodeFetch;
3
+ base: string;
7
4
  }
8
- export declare function put(directories: string[], { token, api, endpoint, updateEndpoint, user, password, apiPath, fetch }: Put): Promise<void>;
5
+ export declare function put(directories: string[], { base, endpoint, updateEndpoint, user, password }: Put): Promise<void>;
@@ -3,13 +3,10 @@ import { ResourcePerGraphStore } from '@hydrofoil/resource-store';
3
3
  import StreamClient from 'sparql-http-client';
4
4
  import { fromDirectories } from '@hydrofoil/talos-core';
5
5
  import { bootstrap } from '@hydrofoil/talos-core/bootstrap.js';
6
- import { deleteApi } from '../deleteApi.js';
7
- export async function put(directories, { token, api, endpoint, updateEndpoint, user, password, apiPath = '/api', fetch }) {
8
- const apiUri = $rdf.namedNode(`${api}${apiPath}`);
9
- const dataset = await fromDirectories(directories, api);
6
+ export async function put(directories, { base, endpoint, updateEndpoint, user, password }) {
7
+ const dataset = await fromDirectories(directories, base);
10
8
  await bootstrap({
11
9
  dataset,
12
- apiUri,
13
10
  store: new ResourcePerGraphStore(new StreamClient({
14
11
  endpointUrl: endpoint,
15
12
  updateUrl: updateEndpoint || endpoint,
@@ -17,6 +14,5 @@ export async function put(directories, { token, api, endpoint, updateEndpoint, u
17
14
  password,
18
15
  }), $rdf),
19
16
  });
20
- await deleteApi({ apiUri, token, fetch });
21
17
  }
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLDhCQUE4QixDQUFBO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ2pFLE9BQU8sWUFBWSxNQUFNLG9CQUFvQixDQUFBO0FBRTdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUE7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBUzNDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsR0FBRyxDQUFDLFdBQXFCLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBTztJQUNySSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFFakQsTUFBTSxPQUFPLEdBQUcsTUFBTSxlQUFlLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBRXZELE1BQU0sU0FBUyxDQUFDO1FBQ2QsT0FBTztRQUNQLE1BQU07UUFDTixLQUFLLEVBQUUsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLFlBQVksQ0FBQztZQUNoRCxXQUFXLEVBQUUsUUFBUTtZQUNyQixTQUFTLEVBQUUsY0FBYyxJQUFJLFFBQVE7WUFDckMsSUFBSTtZQUNKLFFBQVE7U0FDVCxDQUFDLEVBQUUsSUFBSSxDQUFDO0tBQ1YsQ0FBQyxDQUFBO0lBRUYsTUFBTSxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7QUFDM0MsQ0FBQyJ9
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLDhCQUE4QixDQUFBO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ2pFLE9BQU8sWUFBWSxNQUFNLG9CQUFvQixDQUFBO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUE7QUFPOUQsTUFBTSxDQUFDLEtBQUssVUFBVSxHQUFHLENBQUMsV0FBcUIsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQU87SUFDdEcsTUFBTSxPQUFPLEdBQUcsTUFBTSxlQUFlLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBRXhELE1BQU0sU0FBUyxDQUFDO1FBQ2QsT0FBTztRQUNQLEtBQUssRUFBRSxJQUFJLHFCQUFxQixDQUFDLElBQUksWUFBWSxDQUFDO1lBQ2hELFdBQVcsRUFBRSxRQUFRO1lBQ3JCLFNBQVMsRUFBRSxjQUFjLElBQUksUUFBUTtZQUNyQyxJQUFJO1lBQ0osUUFBUTtTQUNULENBQUMsRUFBRSxJQUFJLENBQUM7S0FDVixDQUFDLENBQUE7QUFDSixDQUFDIn0=
@@ -28,7 +28,7 @@ function insertVocab(client, allPrefixes) {
28
28
  ${[...vocab].map(toTriple)}
29
29
  }`;
30
30
  const query = sparql `DROP SILENT GRAPH <${namespace.value}>;\n${insert}`.toString();
31
- log('Inserting vocab %s', namespace.value);
31
+ log(`Inserting vocab ${namespace.value}`);
32
32
  return client.query.update(query);
33
33
  };
34
34
  }
@@ -42,4 +42,4 @@ export async function insertVocabs(options, { extraVocabs = [] }) {
42
42
  };
43
43
  await Promise.all(Object.entries(datasets).map(insertVocab(client, allPrefixes)));
44
44
  }
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zZXJ0Vm9jYWJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW5zZXJ0Vm9jYWJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sWUFBWSxNQUFNLG9CQUFvQixDQUFBO0FBRTdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxJQUFJLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDakYsT0FBTyxFQUFFLFFBQVEsSUFBSSxpQkFBaUIsRUFBRSxZQUFZLElBQUkscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUM5RyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQzlDLE9BQU8sSUFBSSxNQUFNLDhCQUE4QixDQUFBO0FBQy9DLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQTtBQU8xQixTQUFTLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFRO0lBQ3BELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQzlDLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxNQUFvQixFQUFFLFdBQTRCO0lBQ3pFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzdDLE1BQU0sUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFBO1FBQy9CLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUU3RSxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUV6QyxPQUFPO1lBQ0wsR0FBRyxRQUFRO1lBQ1gsR0FBRyxNQUFNLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDaEQsQ0FBQTtJQUNILENBQUMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUE4QixFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ3RELENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxNQUFvQixFQUFFLFdBQTRCO0lBQ3JFLE9BQU8sS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBb0MsRUFBaUIsRUFBRTtRQUNqRixJQUFJLENBQUMsS0FBSztZQUFFLE9BQU07UUFFbEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUVyRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFBLFVBQVUsU0FBUyxDQUFDLEtBQUs7UUFDL0MsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7TUFDMUIsQ0FBQTtRQUNGLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQSxzQkFBc0IsU0FBUyxDQUFDLEtBQUssT0FBTyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtRQUVuRixHQUFHLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzFDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDbkMsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsWUFBWSxDQUFDLE9BQTRCLEVBQUUsRUFBRSxXQUFXLEdBQUcsRUFBRSxFQUFrQztJQUNuSCxNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUV4QyxNQUFNLFdBQVcsR0FBb0IsRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLGlCQUFpQixFQUFFLENBQUE7SUFFMUUsTUFBTSxRQUFRLEdBQUc7UUFDZixHQUFHLE1BQU0sZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDaEYsR0FBRyxNQUFNLHFCQUFxQixFQUFFO1FBQ2hDLEdBQUcsTUFBTSxlQUFlLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQztLQUNuRCxDQUFBO0lBRUQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ25GLENBQUMifQ==
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zZXJ0Vm9jYWJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW5zZXJ0Vm9jYWJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sWUFBWSxNQUFNLG9CQUFvQixDQUFBO0FBRTdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxJQUFJLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDakYsT0FBTyxFQUFFLFFBQVEsSUFBSSxpQkFBaUIsRUFBRSxZQUFZLElBQUkscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUM5RyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQzlDLE9BQU8sSUFBSSxNQUFNLDhCQUE4QixDQUFBO0FBQy9DLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQTtBQU8xQixTQUFTLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFRO0lBQ3BELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQzlDLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxNQUFvQixFQUFFLFdBQTRCO0lBQ3pFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzdDLE1BQU0sUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFBO1FBQy9CLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUU3RSxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUV6QyxPQUFPO1lBQ0wsR0FBRyxRQUFRO1lBQ1gsR0FBRyxNQUFNLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDaEQsQ0FBQTtJQUNILENBQUMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUE4QixFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ3RELENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxNQUFvQixFQUFFLFdBQTRCO0lBQ3JFLE9BQU8sS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBb0MsRUFBaUIsRUFBRTtRQUNqRixJQUFJLENBQUMsS0FBSztZQUFFLE9BQU07UUFFbEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUVyRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFBLFVBQVUsU0FBUyxDQUFDLEtBQUs7UUFDL0MsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7TUFDMUIsQ0FBQTtRQUNGLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQSxzQkFBc0IsU0FBUyxDQUFDLEtBQUssT0FBTyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtRQUVuRixHQUFHLENBQUMsbUJBQW1CLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO1FBQ3pDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDbkMsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsWUFBWSxDQUFDLE9BQTRCLEVBQUUsRUFBRSxXQUFXLEdBQUcsRUFBRSxFQUFrQztJQUNuSCxNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUV4QyxNQUFNLFdBQVcsR0FBb0IsRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLGlCQUFpQixFQUFFLENBQUE7SUFFMUUsTUFBTSxRQUFRLEdBQUc7UUFDZixHQUFHLE1BQU0sZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDaEYsR0FBRyxNQUFNLHFCQUFxQixFQUFFO1FBQ2hDLEdBQUcsTUFBTSxlQUFlLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQztLQUNuRCxDQUFBO0lBRUQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ25GLENBQUMifQ==
@@ -0,0 +1,8 @@
1
+ import { Duplex } from 'node:stream'
2
+ export default async (options) => {
3
+ return Duplex.from(async function * () {
4
+ for await (const chunk of options.source) {
5
+ yield chunk
6
+ }
7
+ })
8
+ }
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@hydrofoil/talos",
3
- "version": "0.6.13",
3
+ "version": "0.8.0",
4
4
  "main": "index.js",
5
5
  "type": "module",
6
6
  "bin": {
7
- "talos": "bin/talos.js"
7
+ "talos": "bin/talos.sh"
8
8
  },
9
9
  "scripts": {
10
10
  "prepack": "tsc",
@@ -25,24 +25,25 @@
25
25
  "url": "https://github.com/hypermedia-app/talos/issues"
26
26
  },
27
27
  "dependencies": {
28
- "@hydrofoil/resource-store": "^0.2.1",
29
- "@hydrofoil/talos-core": "^0.1.7",
28
+ "@hydrofoil/resource-store": "^0.2.2",
29
+ "@hydrofoil/talos-core": "^0.3.0",
30
30
  "@hydrofoil/vocabularies": "^2.1.1",
31
31
  "@tpluscode/rdf-string": "^1.3.0",
32
- "@tpluscode/sparql-builder": "^2.0.4",
32
+ "@tpluscode/sparql-builder": "^3",
33
33
  "@zazuko/env-node": "^2.1.3",
34
- "@zazuko/vocabularies": "^2.1.0",
34
+ "@zazuko/vocabularies": "^2.1.1",
35
35
  "@zazuko/vocabulary-extras": "^2.0.6",
36
- "anylogger-debug": "^1.1.0-beta.5",
36
+ "anylogger": "^1.0.11",
37
37
  "commander": "^12",
38
- "debug": "^4.3.5",
39
38
  "node-fetch": "^3.3.0",
39
+ "pino": "^9.4.0",
40
+ "pino-pretty": "^11.2.2",
40
41
  "sparql-http-client": "^3.0.0"
41
42
  },
42
43
  "devDependencies": {
43
44
  "@tpluscode/rdf-ns-builders": "^4.1.0",
44
- "chai": "^4.4.1",
45
- "mocha-chai-jest-snapshot": "^1.1.4",
45
+ "chai": "^5",
46
+ "mocha-chai-jest-snapshot": "^1.1.6",
46
47
  "rdf-dataset-ext": "^1.0.1",
47
48
  "sinon": "^17"
48
49
  }
@@ -1,2 +0,0 @@
1
- import type { ExtraVocab } from '../insertVocabs.js';
2
- export declare function parseExtraVocabs(value: string, vocabs?: ExtraVocab[]): ExtraVocab[];
@@ -1,11 +0,0 @@
1
- export function parseExtraVocabs(value, vocabs = []) {
2
- const [packageName, ...prefixes] = value.split(',');
3
- return [
4
- ...vocabs,
5
- {
6
- package: packageName,
7
- prefixes: prefixes.map(p => p.trim()).filter(p => !!p),
8
- },
9
- ];
10
- }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmFWb2NhYnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJleHRyYVZvY2Ficy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsS0FBYSxFQUFFLFNBQXVCLEVBQUU7SUFDdkUsTUFBTSxDQUFDLFdBQVcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFbkQsT0FBTztRQUNMLEdBQUcsTUFBTTtRQUNUO1lBQ0UsT0FBTyxFQUFFLFdBQVc7WUFDcEIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZEO0tBQ0YsQ0FBQTtBQUNILENBQUMifQ==
@@ -1,7 +0,0 @@
1
- import type { ExtraVocab } from '../insertVocabs.js';
2
- import type { Command } from './index.js';
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>;
@@ -1,21 +0,0 @@
1
- import $rdf from '@hydrofoil/talos-core/env.js';
2
- import { insertVocabs } from '../insertVocabs.js';
3
- import { deleteApi } from '../deleteApi.js';
4
- import log from '../log.js';
5
- export async function putVocabs({ token, endpoint, user, password, extraVocabs, apiDoc }) {
6
- await insertVocabs({
7
- endpointUrl: endpoint,
8
- updateUrl: endpoint,
9
- user,
10
- password,
11
- }, {
12
- extraVocabs,
13
- }).then(() => log('Inserted vocabularies'));
14
- if (apiDoc) {
15
- await deleteApi({
16
- apiUri: $rdf.namedNode(apiDoc),
17
- token,
18
- });
19
- }
20
- }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHV0LXZvY2Ficy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInB1dC12b2NhYnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sOEJBQThCLENBQUE7QUFFL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUMzQyxPQUFPLEdBQUcsTUFBTSxXQUFXLENBQUE7QUFRM0IsTUFBTSxDQUFDLEtBQUssVUFBVSxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBYTtJQUNqRyxNQUFNLFlBQVksQ0FBQztRQUNqQixXQUFXLEVBQUUsUUFBUTtRQUNyQixTQUFTLEVBQUUsUUFBUTtRQUNuQixJQUFJO1FBQ0osUUFBUTtLQUNULEVBQUU7UUFDRCxXQUFXO0tBQ1osQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFBO0lBRTNDLElBQUksTUFBTSxFQUFFO1FBQ1YsTUFBTSxTQUFTLENBQUM7WUFDZCxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDOUIsS0FBSztTQUNOLENBQUMsQ0FBQTtLQUNIO0FBQ0gsQ0FBQyJ9
@@ -1,9 +0,0 @@
1
- import type { NamedNode } from '@rdfjs/types';
2
- import nodeFetch from 'node-fetch';
3
- interface DeleteApi {
4
- token?: string;
5
- apiUri: NamedNode;
6
- fetch?: typeof nodeFetch;
7
- }
8
- export declare function deleteApi({ apiUri, token, fetch }: DeleteApi): Promise<void>;
9
- export {};
package/lib/deleteApi.js DELETED
@@ -1,22 +0,0 @@
1
- import nodeFetch from 'node-fetch';
2
- import log from './log.js';
3
- export async function deleteApi({ apiUri, token, fetch = nodeFetch }) {
4
- if (token) {
5
- const res = await fetch(apiUri.value, {
6
- method: 'DELETE',
7
- headers: {
8
- Authorization: `System ${token}`,
9
- },
10
- });
11
- if (res.ok) {
12
- log('Reset hydra:ApiDocumentation');
13
- }
14
- else {
15
- log('Failed to reset hydra:ApiDocumentation: %s', await res.text());
16
- }
17
- }
18
- else {
19
- log('No System token provided. API restart may be necessary for changes to be applied');
20
- }
21
- }
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlQXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVsZXRlQXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLEdBQUcsTUFBTSxVQUFVLENBQUE7QUFRMUIsTUFBTSxDQUFDLEtBQUssVUFBVSxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxTQUFTLEVBQWM7SUFDOUUsSUFBSSxLQUFLLEVBQUU7UUFDVCxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQ3BDLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLE9BQU8sRUFBRTtnQkFDUCxhQUFhLEVBQUUsVUFBVSxLQUFLLEVBQUU7YUFDakM7U0FDRixDQUFDLENBQUE7UUFFRixJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUU7WUFDVixHQUFHLENBQUMsOEJBQThCLENBQUMsQ0FBQTtTQUNwQzthQUFNO1lBQ0wsR0FBRyxDQUFDLDRDQUE0QyxFQUFFLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7U0FDcEU7S0FDRjtTQUFNO1FBQ0wsR0FBRyxDQUFDLGtGQUFrRixDQUFDLENBQUE7S0FDeEY7QUFDSCxDQUFDIn0=