@rdfc/js-runner 1.0.0 → 2.0.0-alpha.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/.husky/pre-commit +6 -0
- package/.prettierrc +4 -0
- package/README.md +3 -38
- package/__tests__/channels.test.ts +133 -0
- package/bin/runner.js +8 -0
- package/eslint.config.mjs +21 -0
- package/examples/echo/package-lock.json +80 -0
- package/examples/echo/package.json +18 -0
- package/examples/echo/pipeline.ttl +30 -0
- package/examples/echo/processors.ttl +84 -0
- package/examples/echo/src/processors.ts +75 -0
- package/examples/echo/test.ttl +14 -0
- package/examples/echo/tsconfig.json +114 -0
- package/examples/echo/untitled:/types/MyType.ttl +0 -0
- package/index.ttl +63 -0
- package/jest.config.js +2 -0
- package/lib/client.d.ts +1 -0
- package/lib/client.js +43 -0
- package/lib/convertor.d.ts +9 -0
- package/lib/convertor.js +51 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.js +5 -0
- package/lib/jsonld.d.ts +17 -0
- package/lib/jsonld.js +134 -0
- package/lib/logger.d.ts +15 -0
- package/lib/logger.js +27 -0
- package/lib/processor.d.ts +19 -0
- package/lib/processor.js +13 -0
- package/lib/reader.d.ts +29 -0
- package/lib/reader.js +110 -0
- package/lib/runner.d.ts +25 -0
- package/lib/runner.js +111 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/lib/util_processors.d.ts +11 -0
- package/lib/util_processors.js +13 -0
- package/lib/writer.d.ts +25 -0
- package/lib/writer.js +57 -0
- package/package.json +49 -51
- package/src/client.ts +52 -0
- package/src/convertor.ts +59 -0
- package/src/index.ts +4 -0
- package/src/jsonld.ts +217 -0
- package/src/logger.ts +38 -0
- package/src/processor.ts +39 -0
- package/src/reader.ts +148 -0
- package/src/runner.ts +186 -0
- package/src/util_processors.ts +20 -0
- package/src/writer.ts +89 -0
- package/tsconfig.json +33 -0
- package/vite.config.ts +10 -0
- package/LICENSE +0 -21
- package/bin/js-runner.js +0 -4
- package/channels/file.ttl +0 -37
- package/channels/http.ttl +0 -59
- package/channels/kafka.ttl +0 -98
- package/channels/ws.ttl +0 -33
- package/dist/args.d.ts +0 -4
- package/dist/args.js +0 -59
- package/dist/connectors/file.d.ts +0 -15
- package/dist/connectors/file.js +0 -89
- package/dist/connectors/http.d.ts +0 -14
- package/dist/connectors/http.js +0 -82
- package/dist/connectors/kafka.d.ts +0 -48
- package/dist/connectors/kafka.js +0 -64
- package/dist/connectors/ws.d.ts +0 -10
- package/dist/connectors/ws.js +0 -69
- package/dist/connectors.d.ts +0 -54
- package/dist/connectors.js +0 -145
- package/dist/index.cjs +0 -677
- package/dist/index.d.ts +0 -33
- package/dist/index.js +0 -74
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/util.d.ts +0 -43
- package/dist/util.js +0 -75
- package/ontology.ttl +0 -169
- package/processor/echo.ttl +0 -38
- package/processor/resc.ttl +0 -34
- package/processor/send.ttl +0 -40
- package/processor/test.js +0 -35
package/index.ttl
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
@prefix prov: <http://www.w3.org/ns/prov#>.
|
|
2
|
+
@prefix sds: <https://w3id.org/sds#>.
|
|
3
|
+
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
|
|
4
|
+
@prefix owl: <http://www.w3.org/2002/07/owl#>.
|
|
5
|
+
@prefix rdfl: <https://w3id.org/rdf-lens/ontology#>.
|
|
6
|
+
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
|
|
7
|
+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
|
|
8
|
+
@prefix sh: <http://www.w3.org/ns/shacl#>.
|
|
9
|
+
@prefix rdfc: <https://w3id.org/rdf-connect/ontology#>.
|
|
10
|
+
|
|
11
|
+
# rdfc:JsRunner a rdfc:CommandRunner;
|
|
12
|
+
# rdfc:command "npx js-runner";
|
|
13
|
+
# rdfc:processor_definition <JsProcessorShape>.
|
|
14
|
+
#
|
|
15
|
+
rdfc:JsRunner a rdfc:CommandRunner;
|
|
16
|
+
rdfc:handles rdfc:JsProcessor;
|
|
17
|
+
rdfc:handlesSubjectsOf rdfc:jsImplementationOf;
|
|
18
|
+
rdfc:command "npx js-runner";
|
|
19
|
+
rdfc:processor_definition <JsProcessorShape>.
|
|
20
|
+
|
|
21
|
+
sds:Activity rdfs:subClassOf prov:Activity.
|
|
22
|
+
rdfc:Processor rdfs:subClassOf sds:Activity.
|
|
23
|
+
sds:implementationOf rdfs:subPropertyOf rdfs:subClassOf.
|
|
24
|
+
rdfc:jsImplementationOf rdfs:subPropertyOf sds:implementationOf.
|
|
25
|
+
|
|
26
|
+
# rdfc:LogProcessor sds:jsImplementationOf rdfc:Processor;
|
|
27
|
+
# rdfs:label "Simple Log Processor";
|
|
28
|
+
# rdfs:comment "Logs incoming messages";
|
|
29
|
+
# rdfc:entrypoint <./>;
|
|
30
|
+
# rdfc:file <./lib/util_processors.js>;
|
|
31
|
+
# rdfc:class "LogProcessor".
|
|
32
|
+
#
|
|
33
|
+
# [ ] a sh:NodeShape;
|
|
34
|
+
# sh:targetClass rdfc:LogProcessor;
|
|
35
|
+
# sh:property [
|
|
36
|
+
# sh:path rdfc:reader;
|
|
37
|
+
# sh:name "reader";
|
|
38
|
+
# sh:minCount 1;
|
|
39
|
+
# sh:maxCount 1;
|
|
40
|
+
# sh:class rdfc:Reader;
|
|
41
|
+
# ].
|
|
42
|
+
|
|
43
|
+
[ ] a sh:NodeShape;
|
|
44
|
+
sh:targetClass <JsProcessorShape>;
|
|
45
|
+
sh:property [
|
|
46
|
+
sh:path rdfc:entrypoint;
|
|
47
|
+
sh:name "location";
|
|
48
|
+
sh:minCount 1;
|
|
49
|
+
sh:maxCount 1;
|
|
50
|
+
sh:datatype xsd:iri;
|
|
51
|
+
], [
|
|
52
|
+
sh:path rdfc:file;
|
|
53
|
+
sh:name "file";
|
|
54
|
+
sh:minCount 1;
|
|
55
|
+
sh:maxCount 1;
|
|
56
|
+
sh:datatype xsd:string;
|
|
57
|
+
], [
|
|
58
|
+
sh:path rdfc:class;
|
|
59
|
+
sh:name "clazz";
|
|
60
|
+
sh:maxCount 1;
|
|
61
|
+
sh:datatype xsd:string;
|
|
62
|
+
].
|
|
63
|
+
|
package/jest.config.js
ADDED
package/lib/client.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function start(addr: string, uri: string): Promise<void>;
|
package/lib/client.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import * as grpc from '@grpc/grpc-js';
|
|
2
|
+
import { promisify } from 'util';
|
|
3
|
+
import { RunnerClient } from '@rdfc/proto';
|
|
4
|
+
import winston from 'winston';
|
|
5
|
+
import { RpcTransport } from './logger.js';
|
|
6
|
+
import { Runner } from './runner.js';
|
|
7
|
+
export async function start(addr, uri) {
|
|
8
|
+
const client = new RunnerClient(addr, grpc.credentials.createInsecure());
|
|
9
|
+
const logger = winston.createLogger({
|
|
10
|
+
transports: [
|
|
11
|
+
new RpcTransport({
|
|
12
|
+
entities: [uri, 'cli'],
|
|
13
|
+
stream: client.logStream(() => { }),
|
|
14
|
+
}),
|
|
15
|
+
],
|
|
16
|
+
});
|
|
17
|
+
const stream = client.connect();
|
|
18
|
+
logger.info('Connected with server ' + addr);
|
|
19
|
+
const writable = promisify(stream.write.bind(stream));
|
|
20
|
+
const runner = new Runner(client, writable, uri, logger);
|
|
21
|
+
await writable({ identify: { uri } });
|
|
22
|
+
let processorsEnd;
|
|
23
|
+
const processorsEnded = new Promise((res) => (processorsEnd = res));
|
|
24
|
+
(async () => {
|
|
25
|
+
for await (const chunk of stream) {
|
|
26
|
+
const msg = chunk;
|
|
27
|
+
if (msg.proc) {
|
|
28
|
+
await runner.addProcessor(msg.proc);
|
|
29
|
+
}
|
|
30
|
+
if (msg.start) {
|
|
31
|
+
runner.start().then(processorsEnd);
|
|
32
|
+
}
|
|
33
|
+
await runner.handleOrchMessage(msg);
|
|
34
|
+
}
|
|
35
|
+
logger.error('Stream ended');
|
|
36
|
+
})();
|
|
37
|
+
await processorsEnded;
|
|
38
|
+
logger.info('All processors are finished');
|
|
39
|
+
stream.end();
|
|
40
|
+
client.close();
|
|
41
|
+
process.exit(0);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQTtBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ2hDLE9BQU8sRUFBRSxZQUFZLEVBQWlCLE1BQU0sYUFBYSxDQUFBO0FBQ3pELE9BQU8sT0FBTyxNQUFNLFNBQVMsQ0FBQTtBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFakMsTUFBTSxDQUFDLEtBQUssVUFBVSxLQUFLLENBQUMsSUFBWSxFQUFFLEdBQVc7SUFDbkQsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQTtJQUV4RSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ2xDLFVBQVUsRUFBRTtZQUNWLElBQUksWUFBWSxDQUFDO2dCQUNmLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUM7Z0JBQ3RCLE1BQU0sRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQzthQUNuQyxDQUFDO1NBQ0g7S0FDRixDQUFDLENBQUE7SUFFRixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUE7SUFFL0IsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsQ0FBQTtJQUM1QyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUNyRCxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUV4RCxNQUFNLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUVyQyxJQUFJLGFBQXVDLENBQUE7SUFDM0MsTUFBTSxlQUFlLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQ2xFO0lBQUEsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNYLElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ2pDLE1BQU0sR0FBRyxHQUFrQixLQUFLLENBQUE7WUFDaEMsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNyQyxDQUFDO1lBQ0QsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtZQUNwQyxDQUFDO1lBRUQsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDckMsQ0FBQztRQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDOUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUVKLE1BQU0sZUFBZSxDQUFBO0lBRXJCLE1BQU0sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtJQUMxQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUE7SUFDWixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDZCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBncnBjIGZyb20gJ0BncnBjL2dycGMtanMnXG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICd1dGlsJ1xuaW1wb3J0IHsgUnVubmVyQ2xpZW50LCBSdW5uZXJNZXNzYWdlIH0gZnJvbSAnQHJkZmMvcHJvdG8nXG5pbXBvcnQgd2luc3RvbiBmcm9tICd3aW5zdG9uJ1xuaW1wb3J0IHsgUnBjVHJhbnNwb3J0IH0gZnJvbSAnLi9sb2dnZXInXG5pbXBvcnQgeyBSdW5uZXIgfSBmcm9tICcuL3J1bm5lcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0KGFkZHI6IHN0cmluZywgdXJpOiBzdHJpbmcpIHtcbiAgY29uc3QgY2xpZW50ID0gbmV3IFJ1bm5lckNsaWVudChhZGRyLCBncnBjLmNyZWRlbnRpYWxzLmNyZWF0ZUluc2VjdXJlKCkpXG5cbiAgY29uc3QgbG9nZ2VyID0gd2luc3Rvbi5jcmVhdGVMb2dnZXIoe1xuICAgIHRyYW5zcG9ydHM6IFtcbiAgICAgIG5ldyBScGNUcmFuc3BvcnQoe1xuICAgICAgICBlbnRpdGllczogW3VyaSwgJ2NsaSddLFxuICAgICAgICBzdHJlYW06IGNsaWVudC5sb2dTdHJlYW0oKCkgPT4ge30pLFxuICAgICAgfSksXG4gICAgXSxcbiAgfSlcblxuICBjb25zdCBzdHJlYW0gPSBjbGllbnQuY29ubmVjdCgpXG5cbiAgbG9nZ2VyLmluZm8oJ0Nvbm5lY3RlZCB3aXRoIHNlcnZlciAnICsgYWRkcilcbiAgY29uc3Qgd3JpdGFibGUgPSBwcm9taXNpZnkoc3RyZWFtLndyaXRlLmJpbmQoc3RyZWFtKSlcbiAgY29uc3QgcnVubmVyID0gbmV3IFJ1bm5lcihjbGllbnQsIHdyaXRhYmxlLCB1cmksIGxvZ2dlcilcblxuICBhd2FpdCB3cml0YWJsZSh7IGlkZW50aWZ5OiB7IHVyaSB9IH0pXG5cbiAgbGV0IHByb2Nlc3NvcnNFbmQhOiAodjogdW5rbm93bikgPT4gdW5rbm93blxuICBjb25zdCBwcm9jZXNzb3JzRW5kZWQgPSBuZXcgUHJvbWlzZSgocmVzKSA9PiAocHJvY2Vzc29yc0VuZCA9IHJlcykpXG4gIDsoYXN5bmMgKCkgPT4ge1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgICBjb25zdCBtc2c6IFJ1bm5lck1lc3NhZ2UgPSBjaHVua1xuICAgICAgaWYgKG1zZy5wcm9jKSB7XG4gICAgICAgIGF3YWl0IHJ1bm5lci5hZGRQcm9jZXNzb3IobXNnLnByb2MpXG4gICAgICB9XG4gICAgICBpZiAobXNnLnN0YXJ0KSB7XG4gICAgICAgIHJ1bm5lci5zdGFydCgpLnRoZW4ocHJvY2Vzc29yc0VuZClcbiAgICAgIH1cblxuICAgICAgYXdhaXQgcnVubmVyLmhhbmRsZU9yY2hNZXNzYWdlKG1zZylcbiAgICB9XG5cbiAgICBsb2dnZXIuZXJyb3IoJ1N0cmVhbSBlbmRlZCcpXG4gIH0pKClcblxuICBhd2FpdCBwcm9jZXNzb3JzRW5kZWRcblxuICBsb2dnZXIuaW5mbygnQWxsIHByb2Nlc3NvcnMgYXJlIGZpbmlzaGVkJylcbiAgc3RyZWFtLmVuZCgpXG4gIGNsaWVudC5jbG9zZSgpXG4gIHByb2Nlc3MuZXhpdCgwKVxufVxuIl19
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Any } from './reader.js';
|
|
2
|
+
export interface Convertor<T> {
|
|
3
|
+
from(buffer: Uint8Array): T;
|
|
4
|
+
fromStream(stream: AsyncIterable<Uint8Array>): Promise<T>;
|
|
5
|
+
}
|
|
6
|
+
export declare const AnyConvertor: Convertor<Any>;
|
|
7
|
+
export declare const StringConvertor: Convertor<string>;
|
|
8
|
+
export declare const StreamConvertor: Convertor<AsyncGenerator<Uint8Array>>;
|
|
9
|
+
export declare const NoConvertor: Convertor<Uint8Array>;
|
package/lib/convertor.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
const decoder = new TextDecoder();
|
|
2
|
+
export const AnyConvertor = {
|
|
3
|
+
from: function (buffer) {
|
|
4
|
+
return {
|
|
5
|
+
buffer,
|
|
6
|
+
};
|
|
7
|
+
},
|
|
8
|
+
fromStream: async function (inp) {
|
|
9
|
+
const stream = (async function* () {
|
|
10
|
+
yield* inp;
|
|
11
|
+
})();
|
|
12
|
+
return { stream };
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
export const StringConvertor = {
|
|
16
|
+
from(buffer) {
|
|
17
|
+
return decoder.decode(buffer);
|
|
18
|
+
},
|
|
19
|
+
async fromStream(stream) {
|
|
20
|
+
const chunks = [];
|
|
21
|
+
for await (const chunk of stream) {
|
|
22
|
+
chunks.push(chunk);
|
|
23
|
+
}
|
|
24
|
+
return decoder.decode(Buffer.concat(chunks));
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
export const StreamConvertor = {
|
|
28
|
+
from(buffer) {
|
|
29
|
+
return (async function* () {
|
|
30
|
+
yield buffer;
|
|
31
|
+
})();
|
|
32
|
+
},
|
|
33
|
+
async fromStream(stream) {
|
|
34
|
+
return (async function* () {
|
|
35
|
+
yield* stream;
|
|
36
|
+
})();
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
export const NoConvertor = {
|
|
40
|
+
from(buffer) {
|
|
41
|
+
return buffer;
|
|
42
|
+
},
|
|
43
|
+
async fromStream(stream) {
|
|
44
|
+
const chunks = [];
|
|
45
|
+
for await (const chunk of stream) {
|
|
46
|
+
chunks.push(chunk);
|
|
47
|
+
}
|
|
48
|
+
return Buffer.concat(chunks);
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnZlcnRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFBO0FBTWpDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBbUI7SUFDMUMsSUFBSSxFQUFFLFVBQVUsTUFBa0I7UUFDaEMsT0FBTztZQUNMLE1BQU07U0FDUCxDQUFBO0lBQ0gsQ0FBQztJQUNELFVBQVUsRUFBRSxLQUFLLFdBQVcsR0FBOEI7UUFDeEQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQztZQUM3QixLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUE7UUFDWixDQUFDLENBQUMsRUFBRSxDQUFBO1FBQ0osT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFBO0lBQ25CLENBQUM7Q0FDRixDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFzQjtJQUNoRCxJQUFJLENBQUMsTUFBTTtRQUNULE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMvQixDQUFDO0lBQ0QsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNO1FBQ3JCLE1BQU0sTUFBTSxHQUFpQixFQUFFLENBQUE7UUFDL0IsSUFBSSxLQUFLLEVBQUUsTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFDakMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNwQixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUM5QyxDQUFDO0NBQ0YsQ0FBQTtBQUNELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBMEM7SUFDcEUsSUFBSSxDQUFDLE1BQU07UUFDVCxPQUFPLENBQUMsS0FBSyxTQUFTLENBQUM7WUFDckIsTUFBTSxNQUFNLENBQUE7UUFDZCxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ04sQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTTtRQUNyQixPQUFPLENBQUMsS0FBSyxTQUFTLENBQUM7WUFDckIsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFBO1FBQ2YsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNOLENBQUM7Q0FDRixDQUFBO0FBQ0QsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUEwQjtJQUNoRCxJQUFJLENBQUMsTUFBTTtRQUNULE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztJQUNELEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTTtRQUNyQixNQUFNLE1BQU0sR0FBaUIsRUFBRSxDQUFBO1FBQy9CLElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDcEIsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUM5QixDQUFDO0NBQ0YsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFueSB9IGZyb20gJy4vcmVhZGVyJ1xuXG5jb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcbmV4cG9ydCBpbnRlcmZhY2UgQ29udmVydG9yPFQ+IHtcbiAgZnJvbShidWZmZXI6IFVpbnQ4QXJyYXkpOiBUXG4gIGZyb21TdHJlYW0oc3RyZWFtOiBBc3luY0l0ZXJhYmxlPFVpbnQ4QXJyYXk+KTogUHJvbWlzZTxUPlxufVxuXG5leHBvcnQgY29uc3QgQW55Q29udmVydG9yOiBDb252ZXJ0b3I8QW55PiA9IHtcbiAgZnJvbTogZnVuY3Rpb24gKGJ1ZmZlcjogVWludDhBcnJheSk6IEFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1ZmZlcixcbiAgICB9XG4gIH0sXG4gIGZyb21TdHJlYW06IGFzeW5jIGZ1bmN0aW9uIChpbnA6IEFzeW5jSXRlcmFibGU8VWludDhBcnJheT4pOiBQcm9taXNlPEFueT4ge1xuICAgIGNvbnN0IHN0cmVhbSA9IChhc3luYyBmdW5jdGlvbiogKCkge1xuICAgICAgeWllbGQqIGlucFxuICAgIH0pKClcbiAgICByZXR1cm4geyBzdHJlYW0gfVxuICB9LFxufVxuXG5leHBvcnQgY29uc3QgU3RyaW5nQ29udmVydG9yOiBDb252ZXJ0b3I8c3RyaW5nPiA9IHtcbiAgZnJvbShidWZmZXIpIHtcbiAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGUoYnVmZmVyKVxuICB9LFxuICBhc3luYyBmcm9tU3RyZWFtKHN0cmVhbSkge1xuICAgIGNvbnN0IGNodW5rczogVWludDhBcnJheVtdID0gW11cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHN0cmVhbSkge1xuICAgICAgY2h1bmtzLnB1c2goY2h1bmspXG4gICAgfVxuICAgIHJldHVybiBkZWNvZGVyLmRlY29kZShCdWZmZXIuY29uY2F0KGNodW5rcykpXG4gIH0sXG59XG5leHBvcnQgY29uc3QgU3RyZWFtQ29udmVydG9yOiBDb252ZXJ0b3I8QXN5bmNHZW5lcmF0b3I8VWludDhBcnJheT4+ID0ge1xuICBmcm9tKGJ1ZmZlcikge1xuICAgIHJldHVybiAoYXN5bmMgZnVuY3Rpb24qICgpIHtcbiAgICAgIHlpZWxkIGJ1ZmZlclxuICAgIH0pKClcbiAgfSxcblxuICBhc3luYyBmcm9tU3RyZWFtKHN0cmVhbSkge1xuICAgIHJldHVybiAoYXN5bmMgZnVuY3Rpb24qICgpIHtcbiAgICAgIHlpZWxkKiBzdHJlYW1cbiAgICB9KSgpXG4gIH0sXG59XG5leHBvcnQgY29uc3QgTm9Db252ZXJ0b3I6IENvbnZlcnRvcjxVaW50OEFycmF5PiA9IHtcbiAgZnJvbShidWZmZXIpIHtcbiAgICByZXR1cm4gYnVmZmVyXG4gIH0sXG4gIGFzeW5jIGZyb21TdHJlYW0oc3RyZWFtKSB7XG4gICAgY29uc3QgY2h1bmtzOiBVaW50OEFycmF5W10gPSBbXVxuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgICBjaHVua3MucHVzaChjaHVuaylcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKVxuICB9LFxufVxuIl19
|
package/lib/index.d.ts
ADDED
package/lib/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './client.js';
|
|
2
|
+
export * from './writer.js';
|
|
3
|
+
export * from './reader.js';
|
|
4
|
+
export * from './processor.js';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxVQUFVLENBQUE7QUFDeEIsY0FBYyxVQUFVLENBQUE7QUFDeEIsY0FBYyxVQUFVLENBQUE7QUFDeEIsY0FBYyxhQUFhLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NsaWVudCdcbmV4cG9ydCAqIGZyb20gJy4vd3JpdGVyJ1xuZXhwb3J0ICogZnJvbSAnLi9yZWFkZXInXG5leHBvcnQgKiBmcm9tICcuL3Byb2Nlc3NvcidcbiJdfQ==
|
package/lib/jsonld.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { OrchestratorMessage, RunnerClient } from '@rdfc/proto';
|
|
2
|
+
import { ReaderInstance } from './reader.js';
|
|
3
|
+
import { WriterInstance } from './writer.js';
|
|
4
|
+
import { Logger } from 'winston';
|
|
5
|
+
export type RunnerItems = {
|
|
6
|
+
readers: {
|
|
7
|
+
[uri: string]: ReaderInstance[];
|
|
8
|
+
};
|
|
9
|
+
writers: {
|
|
10
|
+
[uri: string]: WriterInstance[];
|
|
11
|
+
};
|
|
12
|
+
client: RunnerClient;
|
|
13
|
+
write: Writable;
|
|
14
|
+
};
|
|
15
|
+
type Writable = (msg: OrchestratorMessage) => Promise<unknown>;
|
|
16
|
+
export declare function parse_jsonld(args: string, logger: Logger, items: RunnerItems): Promise<unknown>;
|
|
17
|
+
export {};
|
package/lib/jsonld.js
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { createNamespace, createUriAndTermNamespace } from '@treecg/types';
|
|
2
|
+
import { ReaderInstance } from './reader.js';
|
|
3
|
+
import { WriterInstance } from './writer.js';
|
|
4
|
+
import { JsonLdParser } from 'jsonld-streaming-parser';
|
|
5
|
+
import { pred, ShaclPath } from 'rdf-lens';
|
|
6
|
+
import { NamedNode } from 'n3';
|
|
7
|
+
const RDFL = createUriAndTermNamespace('https://w3id.org/rdf-lens/ontology#', 'CBD', 'Path', 'PathLens', 'Context', 'TypedExtract', 'EnvVariable', 'envKey', 'envDefault', 'datatype');
|
|
8
|
+
const RDFC = createNamespace('https://w3id.org/rdf-connect/ontology#', (x) => x, 'Reader', 'Writer');
|
|
9
|
+
function as_string_array(obj) {
|
|
10
|
+
const out = Array.isArray(obj) ? obj : [obj];
|
|
11
|
+
return out.filter((x) => typeof x === 'string');
|
|
12
|
+
}
|
|
13
|
+
function cbdToQuads(value) {
|
|
14
|
+
const quads = [];
|
|
15
|
+
const parser = new JsonLdParser();
|
|
16
|
+
const promise = new Promise((res, rej) => parser
|
|
17
|
+
.on('end', () => res({ value: quads }))
|
|
18
|
+
.on('error', (e) => rej(e))
|
|
19
|
+
.on('data', (q) => {
|
|
20
|
+
quads.push(q);
|
|
21
|
+
}));
|
|
22
|
+
if (value instanceof Object && '@type' in value) {
|
|
23
|
+
delete value['@type'];
|
|
24
|
+
}
|
|
25
|
+
parser.write(JSON.stringify(value));
|
|
26
|
+
parser.end();
|
|
27
|
+
return promise;
|
|
28
|
+
}
|
|
29
|
+
async function cbdToPath(value) {
|
|
30
|
+
const qs = (await cbdToQuads({
|
|
31
|
+
'@id': 'http://example.com/ns#me1234',
|
|
32
|
+
'http://example.com/ns#innerPred': value,
|
|
33
|
+
})).value;
|
|
34
|
+
const path = pred(new NamedNode('http://example.com/ns#innerPred'))
|
|
35
|
+
.one()
|
|
36
|
+
.then(ShaclPath)
|
|
37
|
+
.execute({
|
|
38
|
+
quads: qs,
|
|
39
|
+
id: new NamedNode('http://example.com/ns#me1234'),
|
|
40
|
+
});
|
|
41
|
+
return { value: path };
|
|
42
|
+
}
|
|
43
|
+
async function jsonldToQuads(value) {
|
|
44
|
+
const qs = (await cbdToQuads({
|
|
45
|
+
'@id': 'http://example.com/ns#me1234',
|
|
46
|
+
'http://example.com/ns#innerPred': value,
|
|
47
|
+
})).value;
|
|
48
|
+
const idx = qs.findIndex((x) => x.predicate.equals(new NamedNode('http://example.com/ns#innerPred')) &&
|
|
49
|
+
x.subject.equals(new NamedNode('http://example.com/ns#me1234')));
|
|
50
|
+
if (idx < 0)
|
|
51
|
+
throw 'This cannot happen';
|
|
52
|
+
const id = qs[idx].object;
|
|
53
|
+
qs.splice(idx, 1);
|
|
54
|
+
return {
|
|
55
|
+
quads: qs,
|
|
56
|
+
id,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function revive(_key, value, logger, promises, runnerItems) {
|
|
60
|
+
if (typeof value === 'object') {
|
|
61
|
+
const types = as_string_array(value['@type'] || []);
|
|
62
|
+
const ids = as_string_array(value['@id'] || [])[0] || '';
|
|
63
|
+
if (types.includes(RDFC.Reader)) {
|
|
64
|
+
if (runnerItems.readers[ids] === undefined) {
|
|
65
|
+
runnerItems.readers[ids] = [];
|
|
66
|
+
}
|
|
67
|
+
const reader = new ReaderInstance(ids, runnerItems.client, logger);
|
|
68
|
+
runnerItems.readers[ids].push(reader);
|
|
69
|
+
return reader;
|
|
70
|
+
}
|
|
71
|
+
if (types.includes(RDFC.Writer)) {
|
|
72
|
+
if (runnerItems.writers[ids] === undefined) {
|
|
73
|
+
runnerItems.writers[ids] = [];
|
|
74
|
+
}
|
|
75
|
+
const writer = new WriterInstance(ids, runnerItems.client, runnerItems.write, logger);
|
|
76
|
+
runnerItems.writers[ids].push(writer);
|
|
77
|
+
return writer;
|
|
78
|
+
}
|
|
79
|
+
if (types.includes(RDFL.CBD)) {
|
|
80
|
+
return cbdToQuads(value);
|
|
81
|
+
}
|
|
82
|
+
if (types.includes(RDFL.Path)) {
|
|
83
|
+
return cbdToPath(value);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
Object.entries(value).forEach(([k, v]) => {
|
|
87
|
+
if (v instanceof Promise) {
|
|
88
|
+
logger.info('Found promise');
|
|
89
|
+
promises.push(v.then((x) => {
|
|
90
|
+
logger.info('Setting field ' + k);
|
|
91
|
+
value[k] = x.value;
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
return value;
|
|
96
|
+
}
|
|
97
|
+
function expandArgs(args, cont, logger) {
|
|
98
|
+
const context = args['@context'];
|
|
99
|
+
if (!context)
|
|
100
|
+
return;
|
|
101
|
+
for (const key of Object.keys(args)) {
|
|
102
|
+
if (key == '@context')
|
|
103
|
+
continue;
|
|
104
|
+
const ctxObj = context[key];
|
|
105
|
+
if (!ctxObj) {
|
|
106
|
+
logger.debug("Didn't find ctx things for " + key);
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
logger.debug('Did find ctx things for ' +
|
|
110
|
+
key +
|
|
111
|
+
' ' +
|
|
112
|
+
JSON.stringify(ctxObj) +
|
|
113
|
+
': ' +
|
|
114
|
+
JSON.stringify(Object.entries(args[key]).map(([k, v]) => {
|
|
115
|
+
let x = 'object';
|
|
116
|
+
try {
|
|
117
|
+
x = JSON.stringify(v);
|
|
118
|
+
}
|
|
119
|
+
catch (e) { }
|
|
120
|
+
return k + ': ' + x;
|
|
121
|
+
})));
|
|
122
|
+
expandArgs(args[key], cont, logger);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
export async function parse_jsonld(args, logger, items) {
|
|
126
|
+
const promises = [];
|
|
127
|
+
logger.info(args);
|
|
128
|
+
const cont = await jsonldToQuads(JSON.parse(args));
|
|
129
|
+
const out = JSON.parse(args, (k, v) => revive(k, v, logger, promises, items));
|
|
130
|
+
await Promise.all(promises);
|
|
131
|
+
expandArgs(out, cont, logger);
|
|
132
|
+
return out;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2pzb25sZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUV6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDdEQsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLElBQUksQ0FBQTtBQVM5QixNQUFNLElBQUksR0FBRyx5QkFBeUIsQ0FDcEMscUNBQXFDLEVBQ3JDLEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUNWLFNBQVMsRUFDVCxjQUFjLEVBQ2QsYUFBYSxFQUNiLFFBQVEsRUFDUixZQUFZLEVBQ1osVUFBVSxDQUNYLENBQUE7QUFHRCxNQUFNLElBQUksR0FBRyxlQUFlLENBQzFCLHdDQUF3QyxFQUN4QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUNSLFFBQVEsRUFDUixRQUFRLENBQ1QsQ0FBQTtBQUVELFNBQVMsZUFBZSxDQUFDLEdBQVk7SUFDbkMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzVDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUE7QUFDakQsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEtBQWM7SUFDaEMsTUFBTSxLQUFLLEdBQVcsRUFBRSxDQUFBO0lBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7SUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQW9CLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQzFELE1BQU07U0FDSCxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ3RDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxQixFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDaEIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNmLENBQUMsQ0FBQyxDQUNMLENBQUE7SUFFRCxJQUFJLEtBQUssWUFBWSxNQUFNLElBQUksT0FBTyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ2hELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3ZCLENBQUM7SUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUNuQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUE7SUFDWixPQUFPLE9BQU8sQ0FBQTtBQUNoQixDQUFDO0FBRUQsS0FBSyxVQUFVLFNBQVMsQ0FBQyxLQUFjO0lBQ3JDLE1BQU0sRUFBRSxHQUFHLENBQ1QsTUFBTSxVQUFVLENBQUM7UUFDZixLQUFLLEVBQUUsOEJBQThCO1FBQ3JDLGlDQUFpQyxFQUFFLEtBQUs7S0FDekMsQ0FBQyxDQUNILENBQUMsS0FBSyxDQUFBO0lBRVAsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7U0FDaEUsR0FBRyxFQUFFO1NBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUNmLE9BQU8sQ0FBQztRQUNQLEtBQUssRUFBRSxFQUFFO1FBQ1QsRUFBRSxFQUFFLElBQUksU0FBUyxDQUFDLDhCQUE4QixDQUFDO0tBQ2xELENBQUMsQ0FBQTtJQUNKLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUE7QUFDeEIsQ0FBQztBQUdELEtBQUssVUFBVSxhQUFhLENBQUMsS0FBYztJQUN6QyxNQUFNLEVBQUUsR0FBRyxDQUNULE1BQU0sVUFBVSxDQUFDO1FBQ2YsS0FBSyxFQUFFLDhCQUE4QjtRQUNyQyxpQ0FBaUMsRUFBRSxLQUFLO0tBQ3pDLENBQUMsQ0FDSCxDQUFDLEtBQUssQ0FBQTtJQUVQLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQ3RCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSixDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FDbEUsQ0FBQTtJQUNELElBQUksR0FBRyxHQUFHLENBQUM7UUFBRSxNQUFNLG9CQUFvQixDQUFBO0lBQ3ZDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUE7SUFFekIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFFakIsT0FBTztRQUNMLEtBQUssRUFBRSxFQUFFO1FBQ1QsRUFBRTtLQUNILENBQUE7QUFDSCxDQUFDO0FBR0QsU0FBUyxNQUFNLENBQ2IsSUFBWSxFQUNaLEtBQVUsRUFDVixNQUFjLEVBQ2QsUUFBNEIsRUFDNUIsV0FBd0I7SUFFeEIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQ25ELE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO1FBRXhELElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzNDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFBO1lBQy9CLENBQUM7WUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQTtZQUNsRSxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNyQyxPQUFPLE1BQU0sQ0FBQTtRQUNmLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDaEMsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMzQyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtZQUMvQixDQUFDO1lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQy9CLEdBQUcsRUFDSCxXQUFXLENBQUMsTUFBTSxFQUNsQixXQUFXLENBQUMsS0FBSyxFQUNqQixNQUFNLENBQ1AsQ0FBQTtZQUNELFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ3JDLE9BQU8sTUFBTSxDQUFBO1FBQ2YsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3QixPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUMxQixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlCLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUE7WUFDNUIsUUFBUSxDQUFDLElBQUksQ0FDWCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQTtnQkFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUE7WUFDcEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUVGLE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQUtELFNBQVMsVUFBVSxDQUFDLElBQVMsRUFBRSxJQUFVLEVBQUUsTUFBYztJQUN2RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDaEMsSUFBSSxDQUFDLE9BQU87UUFBRSxPQUFNO0lBRXBCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3BDLElBQUksR0FBRyxJQUFJLFVBQVU7WUFBRSxTQUFRO1FBQy9CLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUMzQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsS0FBSyxDQUFDLDZCQUE2QixHQUFHLEdBQUcsQ0FBQyxDQUFBO1lBQ2pELFNBQVE7UUFDVixDQUFDO1FBRUQsTUFBTSxDQUFDLEtBQUssQ0FDViwwQkFBMEI7WUFDeEIsR0FBRztZQUNILEdBQUc7WUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUN0QixJQUFJO1lBQ0osSUFBSSxDQUFDLFNBQVMsQ0FDWixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQTtnQkFDaEIsSUFBSSxDQUFDO29CQUNILENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUN2QixDQUFDO2dCQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQSxDQUFDO2dCQUVkLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUE7WUFDckIsQ0FBQyxDQUFDLENBQ0gsQ0FDSixDQUFBO1FBRUQsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDckMsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FDaEMsSUFBWSxFQUNaLE1BQWMsRUFDZCxLQUFrQjtJQUVsQixNQUFNLFFBQVEsR0FBdUIsRUFBRSxDQUFBO0lBQ3ZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDakIsTUFBTSxJQUFJLEdBQUcsTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBRTdFLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUUzQixVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUM3QixPQUFPLEdBQUcsQ0FBQTtBQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcmNoZXN0cmF0b3JNZXNzYWdlLCBSdW5uZXJDbGllbnQgfSBmcm9tICdAcmRmYy9wcm90bydcbmltcG9ydCB7IGNyZWF0ZU5hbWVzcGFjZSwgY3JlYXRlVXJpQW5kVGVybU5hbWVzcGFjZSB9IGZyb20gJ0B0cmVlY2cvdHlwZXMnXG5pbXBvcnQgeyBSZWFkZXJJbnN0YW5jZSB9IGZyb20gJy4vcmVhZGVyJ1xuaW1wb3J0IHsgV3JpdGVySW5zdGFuY2UgfSBmcm9tICcuL3dyaXRlcidcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJ3dpbnN0b24nXG5pbXBvcnQgeyBKc29uTGRQYXJzZXIgfSBmcm9tICdqc29ubGQtc3RyZWFtaW5nLXBhcnNlcidcbmltcG9ydCB7IHByZWQsIFNoYWNsUGF0aCB9IGZyb20gJ3JkZi1sZW5zJ1xuaW1wb3J0IHsgUXVhZCwgVGVybSB9IGZyb20gJ0ByZGZqcy90eXBlcydcbmltcG9ydCB7IE5hbWVkTm9kZSB9IGZyb20gJ24zJ1xuXG5leHBvcnQgdHlwZSBSdW5uZXJJdGVtcyA9IHtcbiAgcmVhZGVyczogeyBbdXJpOiBzdHJpbmddOiBSZWFkZXJJbnN0YW5jZVtdIH1cbiAgd3JpdGVyczogeyBbdXJpOiBzdHJpbmddOiBXcml0ZXJJbnN0YW5jZVtdIH1cbiAgY2xpZW50OiBSdW5uZXJDbGllbnRcbiAgd3JpdGU6IFdyaXRhYmxlXG59XG5cbmNvbnN0IFJERkwgPSBjcmVhdGVVcmlBbmRUZXJtTmFtZXNwYWNlKFxuICAnaHR0cHM6Ly93M2lkLm9yZy9yZGYtbGVucy9vbnRvbG9neSMnLFxuICAnQ0JEJyxcbiAgJ1BhdGgnLFxuICAnUGF0aExlbnMnLFxuICAnQ29udGV4dCcsXG4gICdUeXBlZEV4dHJhY3QnLFxuICAnRW52VmFyaWFibGUnLFxuICAnZW52S2V5JyxcbiAgJ2VudkRlZmF1bHQnLFxuICAnZGF0YXR5cGUnLFxuKVxuXG50eXBlIFdyaXRhYmxlID0gKG1zZzogT3JjaGVzdHJhdG9yTWVzc2FnZSkgPT4gUHJvbWlzZTx1bmtub3duPlxuY29uc3QgUkRGQyA9IGNyZWF0ZU5hbWVzcGFjZShcbiAgJ2h0dHBzOi8vdzNpZC5vcmcvcmRmLWNvbm5lY3Qvb250b2xvZ3kjJyxcbiAgKHgpID0+IHgsXG4gICdSZWFkZXInLFxuICAnV3JpdGVyJyxcbilcblxuZnVuY3Rpb24gYXNfc3RyaW5nX2FycmF5KG9iajogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgY29uc3Qgb3V0ID0gQXJyYXkuaXNBcnJheShvYmopID8gb2JqIDogW29ial1cbiAgcmV0dXJuIG91dC5maWx0ZXIoKHgpID0+IHR5cGVvZiB4ID09PSAnc3RyaW5nJylcbn1cblxuZnVuY3Rpb24gY2JkVG9RdWFkcyh2YWx1ZTogdW5rbm93bikge1xuICBjb25zdCBxdWFkczogUXVhZFtdID0gW11cbiAgY29uc3QgcGFyc2VyID0gbmV3IEpzb25MZFBhcnNlcigpXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTx7IHZhbHVlOiBRdWFkW10gfT4oKHJlcywgcmVqKSA9PlxuICAgIHBhcnNlclxuICAgICAgLm9uKCdlbmQnLCAoKSA9PiByZXMoeyB2YWx1ZTogcXVhZHMgfSkpXG4gICAgICAub24oJ2Vycm9yJywgKGUpID0+IHJlaihlKSlcbiAgICAgIC5vbignZGF0YScsIChxKSA9PiB7XG4gICAgICAgIHF1YWRzLnB1c2gocSlcbiAgICAgIH0pLFxuICApXG5cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmICdAdHlwZScgaW4gdmFsdWUpIHtcbiAgICBkZWxldGUgdmFsdWVbJ0B0eXBlJ11cbiAgfVxuICBwYXJzZXIud3JpdGUoSlNPTi5zdHJpbmdpZnkodmFsdWUpKVxuICBwYXJzZXIuZW5kKClcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2JkVG9QYXRoKHZhbHVlOiB1bmtub3duKTogUHJvbWlzZTx7IHZhbHVlOiB1bmtub3duIH0+IHtcbiAgY29uc3QgcXMgPSAoXG4gICAgYXdhaXQgY2JkVG9RdWFkcyh7XG4gICAgICAnQGlkJzogJ2h0dHA6Ly9leGFtcGxlLmNvbS9ucyNtZTEyMzQnLFxuICAgICAgJ2h0dHA6Ly9leGFtcGxlLmNvbS9ucyNpbm5lclByZWQnOiB2YWx1ZSxcbiAgICB9KVxuICApLnZhbHVlXG5cbiAgY29uc3QgcGF0aCA9IHByZWQobmV3IE5hbWVkTm9kZSgnaHR0cDovL2V4YW1wbGUuY29tL25zI2lubmVyUHJlZCcpKVxuICAgIC5vbmUoKVxuICAgIC50aGVuKFNoYWNsUGF0aClcbiAgICAuZXhlY3V0ZSh7XG4gICAgICBxdWFkczogcXMsXG4gICAgICBpZDogbmV3IE5hbWVkTm9kZSgnaHR0cDovL2V4YW1wbGUuY29tL25zI21lMTIzNCcpLFxuICAgIH0pXG4gIHJldHVybiB7IHZhbHVlOiBwYXRoIH1cbn1cblxudHlwZSBDb250ID0geyBxdWFkczogUXVhZFtdOyBpZDogVGVybSB9XG5hc3luYyBmdW5jdGlvbiBqc29ubGRUb1F1YWRzKHZhbHVlOiB1bmtub3duKTogUHJvbWlzZTxDb250PiB7XG4gIGNvbnN0IHFzID0gKFxuICAgIGF3YWl0IGNiZFRvUXVhZHMoe1xuICAgICAgJ0BpZCc6ICdodHRwOi8vZXhhbXBsZS5jb20vbnMjbWUxMjM0JyxcbiAgICAgICdodHRwOi8vZXhhbXBsZS5jb20vbnMjaW5uZXJQcmVkJzogdmFsdWUsXG4gICAgfSlcbiAgKS52YWx1ZVxuXG4gIGNvbnN0IGlkeCA9IHFzLmZpbmRJbmRleChcbiAgICAoeCkgPT5cbiAgICAgIHgucHJlZGljYXRlLmVxdWFscyhuZXcgTmFtZWROb2RlKCdodHRwOi8vZXhhbXBsZS5jb20vbnMjaW5uZXJQcmVkJykpICYmXG4gICAgICB4LnN1YmplY3QuZXF1YWxzKG5ldyBOYW1lZE5vZGUoJ2h0dHA6Ly9leGFtcGxlLmNvbS9ucyNtZTEyMzQnKSksXG4gIClcbiAgaWYgKGlkeCA8IDApIHRocm93ICdUaGlzIGNhbm5vdCBoYXBwZW4nXG4gIGNvbnN0IGlkID0gcXNbaWR4XS5vYmplY3RcblxuICBxcy5zcGxpY2UoaWR4LCAxKVxuXG4gIHJldHVybiB7XG4gICAgcXVhZHM6IHFzLFxuICAgIGlkLFxuICB9XG59XG5cbi8qIGVzbGludC1kaXNhYmxlICBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5mdW5jdGlvbiByZXZpdmUoXG4gIF9rZXk6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgbG9nZ2VyOiBMb2dnZXIsXG4gIHByb21pc2VzOiBQcm9taXNlPHVua25vd24+W10sXG4gIHJ1bm5lckl0ZW1zOiBSdW5uZXJJdGVtcyxcbik6IGFueSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgdHlwZXMgPSBhc19zdHJpbmdfYXJyYXkodmFsdWVbJ0B0eXBlJ10gfHwgW10pXG4gICAgY29uc3QgaWRzID0gYXNfc3RyaW5nX2FycmF5KHZhbHVlWydAaWQnXSB8fCBbXSlbMF0gfHwgJydcblxuICAgIGlmICh0eXBlcy5pbmNsdWRlcyhSREZDLlJlYWRlcikpIHtcbiAgICAgIGlmIChydW5uZXJJdGVtcy5yZWFkZXJzW2lkc10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBydW5uZXJJdGVtcy5yZWFkZXJzW2lkc10gPSBbXVxuICAgICAgfVxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IFJlYWRlckluc3RhbmNlKGlkcywgcnVubmVySXRlbXMuY2xpZW50LCBsb2dnZXIpXG4gICAgICBydW5uZXJJdGVtcy5yZWFkZXJzW2lkc10ucHVzaChyZWFkZXIpXG4gICAgICByZXR1cm4gcmVhZGVyXG4gICAgfVxuXG4gICAgaWYgKHR5cGVzLmluY2x1ZGVzKFJERkMuV3JpdGVyKSkge1xuICAgICAgaWYgKHJ1bm5lckl0ZW1zLndyaXRlcnNbaWRzXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJ1bm5lckl0ZW1zLndyaXRlcnNbaWRzXSA9IFtdXG4gICAgICB9XG4gICAgICBjb25zdCB3cml0ZXIgPSBuZXcgV3JpdGVySW5zdGFuY2UoXG4gICAgICAgIGlkcyxcbiAgICAgICAgcnVubmVySXRlbXMuY2xpZW50LFxuICAgICAgICBydW5uZXJJdGVtcy53cml0ZSxcbiAgICAgICAgbG9nZ2VyLFxuICAgICAgKVxuICAgICAgcnVubmVySXRlbXMud3JpdGVyc1tpZHNdLnB1c2god3JpdGVyKVxuICAgICAgcmV0dXJuIHdyaXRlclxuICAgIH1cblxuICAgIGlmICh0eXBlcy5pbmNsdWRlcyhSREZMLkNCRCkpIHtcbiAgICAgIHJldHVybiBjYmRUb1F1YWRzKHZhbHVlKVxuICAgIH1cblxuICAgIGlmICh0eXBlcy5pbmNsdWRlcyhSREZMLlBhdGgpKSB7XG4gICAgICByZXR1cm4gY2JkVG9QYXRoKHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIE9iamVjdC5lbnRyaWVzKHZhbHVlKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICBpZiAodiBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdGb3VuZCBwcm9taXNlJylcbiAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgIHYudGhlbigoeCkgPT4ge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKCdTZXR0aW5nIGZpZWxkICcgKyBrKVxuICAgICAgICAgIHZhbHVlW2tdID0geC52YWx1ZVxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIHZhbHVlXG59XG5cbnR5cGUgQXJnID0ge1xuICBbaWQ6IHN0cmluZ106IGFueVxufVxuZnVuY3Rpb24gZXhwYW5kQXJncyhhcmdzOiBBcmcsIGNvbnQ6IENvbnQsIGxvZ2dlcjogTG9nZ2VyKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBhcmdzWydAY29udGV4dCddXG4gIGlmICghY29udGV4dCkgcmV0dXJuXG5cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoYXJncykpIHtcbiAgICBpZiAoa2V5ID09ICdAY29udGV4dCcpIGNvbnRpbnVlXG4gICAgY29uc3QgY3R4T2JqID0gY29udGV4dFtrZXldXG4gICAgaWYgKCFjdHhPYmopIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIkRpZG4ndCBmaW5kIGN0eCB0aGluZ3MgZm9yIFwiICsga2V5KVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICAnRGlkIGZpbmQgY3R4IHRoaW5ncyBmb3IgJyArXG4gICAgICAgIGtleSArXG4gICAgICAgICcgJyArXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGN0eE9iaikgK1xuICAgICAgICAnOiAnICtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoYXJnc1trZXldKS5tYXAoKFtrLCB2XSkgPT4ge1xuICAgICAgICAgICAgbGV0IHggPSAnb2JqZWN0J1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgeCA9IEpTT04uc3RyaW5naWZ5KHYpXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgICAgICAgICByZXR1cm4gayArICc6ICcgKyB4XG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgKVxuXG4gICAgZXhwYW5kQXJncyhhcmdzW2tleV0sIGNvbnQsIGxvZ2dlcilcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFyc2VfanNvbmxkKFxuICBhcmdzOiBzdHJpbmcsXG4gIGxvZ2dlcjogTG9nZ2VyLFxuICBpdGVtczogUnVubmVySXRlbXMsXG4pOiBQcm9taXNlPHVua25vd24+IHtcbiAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj5bXSA9IFtdXG4gIGxvZ2dlci5pbmZvKGFyZ3MpXG4gIGNvbnN0IGNvbnQgPSBhd2FpdCBqc29ubGRUb1F1YWRzKEpTT04ucGFyc2UoYXJncykpXG4gIGNvbnN0IG91dCA9IEpTT04ucGFyc2UoYXJncywgKGssIHYpID0+IHJldml2ZShrLCB2LCBsb2dnZXIsIHByb21pc2VzLCBpdGVtcykpXG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG5cbiAgZXhwYW5kQXJncyhvdXQsIGNvbnQsIGxvZ2dlcilcbiAgcmV0dXJuIG91dFxufVxuIl19
|
package/lib/logger.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import winston from 'winston';
|
|
2
|
+
import Transport from 'winston-transport';
|
|
3
|
+
import * as grpc from '@grpc/grpc-js';
|
|
4
|
+
import { LogMessage } from '@rdfc/proto';
|
|
5
|
+
export declare class RpcTransport extends Transport {
|
|
6
|
+
private readonly stream;
|
|
7
|
+
private readonly entities;
|
|
8
|
+
private readonly aliases;
|
|
9
|
+
constructor(opts: {
|
|
10
|
+
stream: grpc.ClientWritableStream<LogMessage>;
|
|
11
|
+
entities: string[];
|
|
12
|
+
aliases?: string[];
|
|
13
|
+
});
|
|
14
|
+
log(info: winston.LogEntry, callback: () => void): void;
|
|
15
|
+
}
|
package/lib/logger.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import Transport from 'winston-transport';
|
|
2
|
+
export class RpcTransport extends Transport {
|
|
3
|
+
stream;
|
|
4
|
+
entities;
|
|
5
|
+
aliases;
|
|
6
|
+
constructor(opts) {
|
|
7
|
+
super({ level: 'debug' });
|
|
8
|
+
this.stream = opts.stream;
|
|
9
|
+
this.entities = opts.entities;
|
|
10
|
+
this.aliases = opts.aliases || [];
|
|
11
|
+
}
|
|
12
|
+
log(info, callback) {
|
|
13
|
+
if (!this.stream.closed) {
|
|
14
|
+
this.stream.write({
|
|
15
|
+
msg: info.message,
|
|
16
|
+
level: info.level,
|
|
17
|
+
entities: this.entities,
|
|
18
|
+
aliases: this.aliases,
|
|
19
|
+
}, callback);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
console.log('Output stream closed');
|
|
23
|
+
callback();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLFNBQVMsTUFBTSxtQkFBbUIsQ0FBQTtBQUl6QyxNQUFNLE9BQU8sWUFBYSxTQUFRLFNBQVM7SUFDeEIsTUFBTSxDQUF1QztJQUM3QyxRQUFRLENBQVU7SUFDbEIsT0FBTyxDQUFVO0lBQ2xDLFlBQVksSUFJWDtRQUNDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBRXpCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQTtRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7UUFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQTtJQUNuQyxDQUFDO0lBRUQsR0FBRyxDQUFDLElBQXNCLEVBQUUsUUFBb0I7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2Y7Z0JBQ0UsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2pCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2FBQ3RCLEVBQ0QsUUFBUSxDQUNULENBQUE7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtZQUNuQyxRQUFRLEVBQUUsQ0FBQTtRQUNaLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgd2luc3RvbiBmcm9tICd3aW5zdG9uJ1xuaW1wb3J0IFRyYW5zcG9ydCBmcm9tICd3aW5zdG9uLXRyYW5zcG9ydCdcblxuaW1wb3J0ICogYXMgZ3JwYyBmcm9tICdAZ3JwYy9ncnBjLWpzJ1xuaW1wb3J0IHsgTG9nTWVzc2FnZSB9IGZyb20gJ0ByZGZjL3Byb3RvJ1xuZXhwb3J0IGNsYXNzIFJwY1RyYW5zcG9ydCBleHRlbmRzIFRyYW5zcG9ydCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RyZWFtOiBncnBjLkNsaWVudFdyaXRhYmxlU3RyZWFtPExvZ01lc3NhZ2U+XG4gIHByaXZhdGUgcmVhZG9ubHkgZW50aXRpZXM6IHN0cmluZ1tdXG4gIHByaXZhdGUgcmVhZG9ubHkgYWxpYXNlczogc3RyaW5nW11cbiAgY29uc3RydWN0b3Iob3B0czoge1xuICAgIHN0cmVhbTogZ3JwYy5DbGllbnRXcml0YWJsZVN0cmVhbTxMb2dNZXNzYWdlPlxuICAgIGVudGl0aWVzOiBzdHJpbmdbXVxuICAgIGFsaWFzZXM/OiBzdHJpbmdbXVxuICB9KSB7XG4gICAgc3VwZXIoeyBsZXZlbDogJ2RlYnVnJyB9KVxuXG4gICAgdGhpcy5zdHJlYW0gPSBvcHRzLnN0cmVhbVxuICAgIHRoaXMuZW50aXRpZXMgPSBvcHRzLmVudGl0aWVzXG4gICAgdGhpcy5hbGlhc2VzID0gb3B0cy5hbGlhc2VzIHx8IFtdXG4gIH1cblxuICBsb2coaW5mbzogd2luc3Rvbi5Mb2dFbnRyeSwgY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgICBpZiAoIXRoaXMuc3RyZWFtLmNsb3NlZCkge1xuICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBtc2c6IGluZm8ubWVzc2FnZSxcbiAgICAgICAgICBsZXZlbDogaW5mby5sZXZlbCxcbiAgICAgICAgICBlbnRpdGllczogdGhpcy5lbnRpdGllcyxcbiAgICAgICAgICBhbGlhc2VzOiB0aGlzLmFsaWFzZXMsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnT3V0cHV0IHN0cmVhbSBjbG9zZWQnKVxuICAgICAgY2FsbGJhY2soKVxuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Logger } from 'winston';
|
|
2
|
+
import { Reader } from './reader.js';
|
|
3
|
+
import { Writer } from './writer.js';
|
|
4
|
+
export type Primitive = string | number | Writer | Reader | ProcessorArgs;
|
|
5
|
+
export type ProcessorArgs = {
|
|
6
|
+
[id: string]: Primitive | Primitive[];
|
|
7
|
+
};
|
|
8
|
+
export type BGetter<T> = {
|
|
9
|
+
[K in keyof T]: T[K];
|
|
10
|
+
};
|
|
11
|
+
export declare abstract class Processor<T> {
|
|
12
|
+
protected readonly args: T;
|
|
13
|
+
protected readonly logger: Logger;
|
|
14
|
+
constructor(args: T, logger: Logger);
|
|
15
|
+
protected get<K extends keyof T>(key: K): T[K];
|
|
16
|
+
abstract init(this: T & this): Promise<void>;
|
|
17
|
+
abstract transform(this: T & this): Promise<void>;
|
|
18
|
+
abstract produce(this: T & this): Promise<void>;
|
|
19
|
+
}
|
package/lib/processor.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export class Processor {
|
|
2
|
+
args;
|
|
3
|
+
logger;
|
|
4
|
+
constructor(args, logger) {
|
|
5
|
+
Object.assign(this, args);
|
|
6
|
+
this.args = args;
|
|
7
|
+
this.logger = logger;
|
|
8
|
+
}
|
|
9
|
+
get(key) {
|
|
10
|
+
return this.args[key];
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Byb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFhQSxNQUFNLE9BQWdCLFNBQVM7SUFDVixJQUFJLENBQUc7SUFDUCxNQUFNLENBQVE7SUFFakMsWUFBWSxJQUFPLEVBQUUsTUFBYztRQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtJQUN0QixDQUFDO0lBRVMsR0FBRyxDQUFvQixHQUFNO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN2QixDQUFDO0NBYUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2dnZXIgfSBmcm9tICd3aW5zdG9uJ1xuaW1wb3J0IHsgUmVhZGVyIH0gZnJvbSAnLi9yZWFkZXInXG5pbXBvcnQgeyBXcml0ZXIgfSBmcm9tICcuL3dyaXRlcidcblxuZXhwb3J0IHR5cGUgUHJpbWl0aXZlID0gc3RyaW5nIHwgbnVtYmVyIHwgV3JpdGVyIHwgUmVhZGVyIHwgUHJvY2Vzc29yQXJnc1xuXG5leHBvcnQgdHlwZSBQcm9jZXNzb3JBcmdzID0ge1xuICBbaWQ6IHN0cmluZ106IFByaW1pdGl2ZSB8IFByaW1pdGl2ZVtdXG59XG5leHBvcnQgdHlwZSBCR2V0dGVyPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUHJvY2Vzc29yPFQ+IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFyZ3M6IFQgLy8gU3RvcmUgYXJncyBzYWZlbHlcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvZ2dlcjogTG9nZ2VyXG5cbiAgY29uc3RydWN0b3IoYXJnczogVCwgbG9nZ2VyOiBMb2dnZXIpIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGFyZ3MpXG4gICAgdGhpcy5hcmdzID0gYXJnc1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyXG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0PEsgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IEspOiBUW0tdIHtcbiAgICByZXR1cm4gdGhpcy5hcmdzW2tleV1cbiAgfVxuXG4gIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIChhbmQgYXdhaXRlZCksIHdoZW4gY3JlYXRpbmcgYSBwcm9jZXNzb3JcbiAgLy8gVGhpcyBpcyB0aGUgcGVyZmVjdCBsb2NhdGlvbiB0byBzdGFydCB0aGluZ3MgbGlrZSBkYXRhYmFzZSBjb25uZWN0aW9uc1xuICBhYnN0cmFjdCBpbml0KHRoaXM6IFQgJiB0aGlzKTogUHJvbWlzZTx2b2lkPlxuXG4gIC8vIEZ1bmN0aW9uIHRvIHN0YXJ0IHJlYWRpbmcgY2hhbm5lbHNcbiAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2ggcHJvY2Vzc29yIGJlZm9yZSBfcHJvZHVjZV8gaXMgY2FsbGVkXG4gIGFic3RyYWN0IHRyYW5zZm9ybSh0aGlzOiBUICYgdGhpcyk6IFByb21pc2U8dm9pZD5cblxuICAvLyBGdW5jdGlvbiB0byBzdGFydCB0aGUgcHJvZHVjdGlvbiBvZiBkYXRhLCBzdGFydGluZyB0aGUgcGlwZWxpbmVcbiAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHByb2Nlc3NvcnMgYXJlIGNvbXBsZXRlbHkgc2V0dXBcbiAgYWJzdHJhY3QgcHJvZHVjZSh0aGlzOiBUICYgdGhpcyk6IFByb21pc2U8dm9pZD5cbn1cbiJdfQ==
|
package/lib/reader.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Message, RunnerClient, StreamMessage } from '@rdfc/proto';
|
|
2
|
+
import winston from 'winston';
|
|
3
|
+
export type Any = {
|
|
4
|
+
string: string;
|
|
5
|
+
} | {
|
|
6
|
+
stream: AsyncGenerator<Uint8Array>;
|
|
7
|
+
} | {
|
|
8
|
+
buffer: Uint8Array;
|
|
9
|
+
};
|
|
10
|
+
export interface Reader {
|
|
11
|
+
strings(): AsyncIterable<string>;
|
|
12
|
+
streams(): AsyncIterable<AsyncGenerator<Uint8Array>>;
|
|
13
|
+
buffers(): AsyncIterable<Uint8Array>;
|
|
14
|
+
anys(): AsyncIterable<Any>;
|
|
15
|
+
}
|
|
16
|
+
export declare class ReaderInstance implements Reader {
|
|
17
|
+
private client;
|
|
18
|
+
private uri;
|
|
19
|
+
private logger;
|
|
20
|
+
private iterators;
|
|
21
|
+
constructor(uri: string, client: RunnerClient, logger: winston.Logger);
|
|
22
|
+
anys(): AsyncIterable<Any>;
|
|
23
|
+
strings(): AsyncIterable<string>;
|
|
24
|
+
buffers(): AsyncIterable<Uint8Array>;
|
|
25
|
+
streams(): AsyncIterable<AsyncGenerator<Uint8Array>>;
|
|
26
|
+
handleMsg(msg: Message): void;
|
|
27
|
+
close(): void;
|
|
28
|
+
handleStreamingMessage(msg: StreamMessage): void;
|
|
29
|
+
}
|
package/lib/reader.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { AnyConvertor, NoConvertor, StreamConvertor, StringConvertor, } from './convertor.js';
|
|
2
|
+
class MyIter {
|
|
3
|
+
convertor;
|
|
4
|
+
queue = [];
|
|
5
|
+
resolveNext = null;
|
|
6
|
+
constructor(convertor) {
|
|
7
|
+
this.convertor = convertor;
|
|
8
|
+
}
|
|
9
|
+
push(buffer) {
|
|
10
|
+
const item = this.convertor.from(buffer);
|
|
11
|
+
if (this.resolveNext) {
|
|
12
|
+
this.resolveNext(item);
|
|
13
|
+
this.resolveNext = null;
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
this.queue.push(item);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
close() {
|
|
20
|
+
if (this.resolveNext) {
|
|
21
|
+
this.resolveNext(undefined);
|
|
22
|
+
this.resolveNext = null;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
this.queue.push(undefined);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async pushStream(chunks) {
|
|
29
|
+
const stream = (async function* (stream) {
|
|
30
|
+
for await (const c of stream) {
|
|
31
|
+
const chunk = c;
|
|
32
|
+
yield chunk.data;
|
|
33
|
+
}
|
|
34
|
+
})(chunks);
|
|
35
|
+
const item = await this.convertor.fromStream(stream);
|
|
36
|
+
if (this.resolveNext) {
|
|
37
|
+
this.resolveNext(item);
|
|
38
|
+
this.resolveNext = null;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.queue.push(item);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async *[Symbol.asyncIterator]() {
|
|
45
|
+
while (true) {
|
|
46
|
+
if (this.queue.length > 0) {
|
|
47
|
+
const item = this.queue.shift();
|
|
48
|
+
if (item === undefined)
|
|
49
|
+
break;
|
|
50
|
+
yield item;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const item = await new Promise((resolve) => (this.resolveNext = resolve));
|
|
54
|
+
if (item === undefined)
|
|
55
|
+
break;
|
|
56
|
+
yield item;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export class ReaderInstance {
|
|
62
|
+
client;
|
|
63
|
+
uri;
|
|
64
|
+
logger;
|
|
65
|
+
iterators = [];
|
|
66
|
+
constructor(uri, client, logger) {
|
|
67
|
+
this.uri = uri;
|
|
68
|
+
this.client = client;
|
|
69
|
+
this.logger = logger;
|
|
70
|
+
}
|
|
71
|
+
anys() {
|
|
72
|
+
const iter = new MyIter(AnyConvertor);
|
|
73
|
+
this.iterators.push(iter);
|
|
74
|
+
return iter;
|
|
75
|
+
}
|
|
76
|
+
strings() {
|
|
77
|
+
const iter = new MyIter(StringConvertor);
|
|
78
|
+
this.iterators.push(iter);
|
|
79
|
+
return iter;
|
|
80
|
+
}
|
|
81
|
+
buffers() {
|
|
82
|
+
const iter = new MyIter(NoConvertor);
|
|
83
|
+
this.iterators.push(iter);
|
|
84
|
+
return iter;
|
|
85
|
+
}
|
|
86
|
+
streams() {
|
|
87
|
+
const iter = new MyIter(StreamConvertor);
|
|
88
|
+
this.iterators.push(iter);
|
|
89
|
+
return iter;
|
|
90
|
+
}
|
|
91
|
+
handleMsg(msg) {
|
|
92
|
+
this.logger.debug(`${this.uri} handling message`);
|
|
93
|
+
for (const iter of this.iterators) {
|
|
94
|
+
iter.push(msg.data);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
close() {
|
|
98
|
+
for (const iter of this.iterators) {
|
|
99
|
+
iter.close();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
handleStreamingMessage(msg) {
|
|
103
|
+
this.logger.debug(`${this.uri} handling streaming message`);
|
|
104
|
+
const chunks = this.client.receiveStreamMessage(msg.id);
|
|
105
|
+
for (const iter of this.iterators) {
|
|
106
|
+
iter.pushStream(chunks);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQ0wsWUFBWSxFQUVaLFdBQVcsRUFDWCxlQUFlLEVBQ2YsZUFBZSxHQUNoQixNQUFNLGFBQWEsQ0FBQTtBQW9CcEIsTUFBTSxNQUFNO0lBQ0YsU0FBUyxDQUFjO0lBQ3ZCLEtBQUssR0FBc0IsRUFBRSxDQUFBO0lBQzdCLFdBQVcsR0FBNEMsSUFBSSxDQUFBO0lBRW5FLFlBQVksU0FBdUI7UUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7SUFDNUIsQ0FBQztJQUVELElBQUksQ0FBQyxNQUFrQjtRQUNyQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN4QyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQTtRQUN6QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUF1QztRQUN0RCxNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQUssU0FBUyxDQUFD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QUksQ0FBQyxHQUFHLG1CQUFtQixDQUFDLENBQUE7UUFDakQsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDckIsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxHQUFrQjtRQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLDZCQUE2QixDQUFDLENBQUE7UUFDM0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRyxDQUFDLENBQUE7UUFDeEQsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN6QixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2xpZW50UmVhZGFibGVTdHJlYW0gfSBmcm9tICdAZ3JwYy9ncnBjLWpzJ1xuaW1wb3J0IHsgRGF0YUNodW5rLCBNZXNzYWdlLCBSdW5uZXJDbGllbnQsIFN0cmVhbU1lc3NhZ2UgfSBmcm9tICdAcmRmYy9wcm90bydcbmltcG9ydCB3aW5zdG9uIGZyb20gJ3dpbnN0b24nXG5pbXBvcnQge1xuICBBbnlDb252ZXJ0b3IsXG4gIENvbnZlcnRvcixcbiAgTm9Db252ZXJ0b3IsXG4gIFN0cmVhbUNvbnZlcnRvcixcbiAgU3RyaW5nQ29udmVydG9yLFxufSBmcm9tICcuL2NvbnZlcnRvcidcblxuZXhwb3J0IHR5cGUgQW55ID1cbiAgfCB7XG4gICAgICBzdHJpbmc6IHN0cmluZ1xuICAgIH1cbiAgfCB7XG4gICAgICBzdHJlYW06IEFzeW5jR2VuZXJhdG9yPFVpbnQ4QXJyYXk+XG4gICAgfVxuICB8IHtcbiAgICAgIGJ1ZmZlcjogVWludDhBcnJheVxuICAgIH1cblxuZXhwb3J0IGludGVyZmFjZSBSZWFkZXIge1xuICBzdHJpbmdzKCk6IEFzeW5jSXRlcmFibGU8c3RyaW5nPlxuICBzdHJlYW1zKCk6IEFzeW5jSXRlcmFibGU8QXN5bmNHZW5lcmF0b3I8VWludDhBcnJheT4+XG4gIGJ1ZmZlcnMoKTogQXN5bmNJdGVyYWJsZTxVaW50OEFycmF5PlxuICBhbnlzKCk6IEFzeW5jSXRlcmFibGU8QW55PlxufVxuXG5jbGFzcyBNeUl0ZXI8VD4gaW1wbGVtZW50cyBBc3luY0l0ZXJhYmxlPFQ+IHtcbiAgcHJpdmF0ZSBjb252ZXJ0b3I6IENvbnZlcnRvcjxUPlxuICBwcml2YXRlIHF1ZXVlOiAoVCB8IHVuZGVmaW5lZClbXSA9IFtdXG4gIHByaXZhdGUgcmVzb2x2ZU5leHQ6ICgodmFsdWU6IFQgfCB1bmRlZmluZWQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGxcblxuICBjb25zdHJ1Y3Rvcihjb252ZXJ0b3I6IENvbnZlcnRvcjxUPikge1xuICAgIHRoaXMuY29udmVydG9yID0gY29udmVydG9yXG4gIH1cblxuICBwdXNoKGJ1ZmZlcjogVWludDhBcnJheSkge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNvbnZlcnRvci5mcm9tKGJ1ZmZlcilcbiAgICBpZiAodGhpcy5yZXNvbHZlTmV4dCkge1xuICAgICAgdGhpcy5yZXNvbHZlTmV4dChpdGVtKVxuICAgICAgdGhpcy5yZXNvbHZlTmV4dCA9IG51bGxcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWV1ZS5wdXNoKGl0ZW0pXG4gICAgfVxuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgaWYgKHRoaXMucmVzb2x2ZU5leHQpIHtcbiAgICAgIHRoaXMucmVzb2x2ZU5leHQodW5kZWZpbmVkKVxuICAgICAgdGhpcy5yZXNvbHZlTmV4dCA9IG51bGxcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWV1ZS5wdXNoKHVuZGVmaW5lZClcbiAgICB9XG4gIH1cblxuICBhc3luYyBwdXNoU3RyZWFtKGNodW5rczogQ2xpZW50UmVhZGFibGVTdHJlYW08RGF0YUNodW5rPikge1xuICAgIGNvbnN0IHN0cmVhbSA9IChhc3luYyBmdW5jdGlvbiogKHN0cmVhbSkge1xuICAgICAgZm9yIGF3YWl0IChjb25zdCBjIG9mIHN0cmVhbSkge1xuICAgICAgICBjb25zdCBjaHVuazogRGF0YUNodW5rID0gY1xuICAgICAgICB5aWVsZCBjaHVuay5kYXRhXG4gICAgICB9XG4gICAgfSkoY2h1bmtzKVxuICAgIGNvbnN0IGl0ZW0gPSBhd2FpdCB0aGlzLmNvbnZlcnRvci5mcm9tU3RyZWFtKHN0cmVhbSlcbiAgICBpZiAodGhpcy5yZXNvbHZlTmV4dCkge1xuICAgICAgdGhpcy5yZXNvbHZlTmV4dChpdGVtKVxuICAgICAgdGhpcy5yZXNvbHZlTmV4dCA9IG51bGxcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWV1ZS5wdXNoKGl0ZW0pXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgKltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMucXVldWUuc2hpZnQoKSFcbiAgICAgICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCkgYnJlYWtcbiAgICAgICAgeWllbGQgaXRlbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGF3YWl0IG5ldyBQcm9taXNlPFQgfCB1bmRlZmluZWQ+KFxuICAgICAgICAgIChyZXNvbHZlKSA9PiAodGhpcy5yZXNvbHZlTmV4dCA9IHJlc29sdmUpLFxuICAgICAgICApXG4gICAgICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQpIGJyZWFrXG4gICAgICAgIHlpZWxkIGl0ZW1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlYWRlckluc3RhbmNlIGltcGxlbWVudHMgUmVhZGVyIHtcbiAgcHJpdmF0ZSBjbGllbnQ6IFJ1bm5lckNsaWVudFxuICBwcml2YXRlIHVyaTogc3RyaW5nXG4gIHByaXZhdGUgbG9nZ2VyOiB3aW5zdG9uLkxvZ2dlclxuXG4gIHByaXZhdGUgaXRlcmF0b3JzOiBNeUl0ZXI8dW5rbm93bj5bXSA9IFtdXG5cbiAgY29uc3RydWN0b3IodXJpOiBzdHJpbmcsIGNsaWVudDogUnVubmVyQ2xpZW50LCBsb2dnZXI6IHdpbnN0b24uTG9nZ2VyKSB7XG4gICAgdGhpcy51cmkgPSB1cmlcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudFxuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyXG4gIH1cblxuICBhbnlzKCk6IEFzeW5jSXRlcmFibGU8QW55PiB7XG4gICAgY29uc3QgaXRlciA9IG5ldyBNeUl0ZXIoQW55Q29udmVydG9yKVxuICAgIHRoaXMuaXRlcmF0b3JzLnB1c2goaXRlcilcbiAgICByZXR1cm4gaXRlclxuICB9XG5cbiAgc3RyaW5ncygpOiBBc3luY0l0ZXJhYmxlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl0ZXIgPSBuZXcgTXlJdGVyKFN0cmluZ0NvbnZlcnRvcilcbiAgICB0aGlzLml0ZXJhdG9ycy5wdXNoKGl0ZXIpXG4gICAgcmV0dXJuIGl0ZXJcbiAgfVxuXG4gIGJ1ZmZlcnMoKTogQXN5bmNJdGVyYWJsZTxVaW50OEFycmF5PiB7XG4gICAgY29uc3QgaXRlciA9IG5ldyBNeUl0ZXIoTm9Db252ZXJ0b3IpXG4gICAgdGhpcy5pdGVyYXRvcnMucHVzaChpdGVyKVxuICAgIHJldHVybiBpdGVyXG4gIH1cblxuICBzdHJlYW1zKCk6IEFzeW5jSXRlcmFibGU8QXN5bmNHZW5lcmF0b3I8VWludDhBcnJheT4+IHtcbiAgICBjb25zdCBpdGVyID0gbmV3IE15SXRlcihTdHJlYW1Db252ZXJ0b3IpXG4gICAgdGhpcy5pdGVyYXRvcnMucHVzaChpdGVyKVxuICAgIHJldHVybiBpdGVyXG4gIH1cblxuICBoYW5kbGVNc2cobXNnOiBNZXNzYWdlKSB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYCR7dGhpcy51cml9IGhhbmRsaW5nIG1lc3NhZ2VgKVxuICAgIGZvciAoY29uc3QgaXRlciBvZiB0aGlzLml0ZXJhdG9ycykge1xuICAgICAgaXRlci5wdXNoKG1zZy5kYXRhKVxuICAgIH1cbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGZvciAoY29uc3QgaXRlciBvZiB0aGlzLml0ZXJhdG9ycykge1xuICAgICAgaXRlci5jbG9zZSgpXG4gICAgfVxuICB9XG5cbiAgaGFuZGxlU3RyZWFtaW5nTWVzc2FnZShtc2c6IFN0cmVhbU1lc3NhZ2UpIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgJHt0aGlzLnVyaX0gaGFuZGxpbmcgc3RyZWFtaW5nIG1lc3NhZ2VgKVxuICAgIGNvbnN0IGNodW5rcyA9IHRoaXMuY2xpZW50LnJlY2VpdmVTdHJlYW1NZXNzYWdlKG1zZy5pZCEpXG4gICAgZm9yIChjb25zdCBpdGVyIG9mIHRoaXMuaXRlcmF0b3JzKSB7XG4gICAgICBpdGVyLnB1c2hTdHJlYW0oY2h1bmtzKVxuICAgIH1cbiAgfVxufVxuIl19
|
package/lib/runner.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { OrchestratorMessage, Processor, RunnerClient, RunnerMessage } from '@rdfc/proto';
|
|
2
|
+
import { Reader } from './reader.js';
|
|
3
|
+
import { Writer } from './writer.js';
|
|
4
|
+
import { Logger } from 'winston';
|
|
5
|
+
import { Term } from '@rdfjs/types';
|
|
6
|
+
type Writable = (msg: OrchestratorMessage) => Promise<unknown>;
|
|
7
|
+
export declare class Runner {
|
|
8
|
+
private readonly readers;
|
|
9
|
+
private readonly writers;
|
|
10
|
+
private readonly client;
|
|
11
|
+
private readonly write;
|
|
12
|
+
private readonly logger;
|
|
13
|
+
private shapes;
|
|
14
|
+
private quads;
|
|
15
|
+
private readonly uri;
|
|
16
|
+
private readonly processors;
|
|
17
|
+
private readonly processorTransforms;
|
|
18
|
+
constructor(client: RunnerClient, write: Writable, uri: string, logger: Logger);
|
|
19
|
+
addProcessor(proc: Processor): Promise<void>;
|
|
20
|
+
start(): Promise<void>;
|
|
21
|
+
createWriter(uri: Term): Writer;
|
|
22
|
+
createReader(uri: Term): Reader;
|
|
23
|
+
handleOrchMessage(msg: RunnerMessage): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
export {};
|