@rdfc/js-runner 2.0.0 → 3.0.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/.editorconfig +9 -0
- package/.github/renovate.json +3 -0
- package/README.md +127 -3
- package/__tests__/channels.test.ts +131 -74
- package/__tests__/echoProcessor.test.ts +131 -0
- package/__tests__/testProcessor.test.ts +69 -0
- package/eslint.config.mjs +1 -1
- package/examples/echo/.idea/echo.iml +9 -0
- package/examples/echo/.idea/misc.xml +6 -0
- package/{.idea → examples/echo/.idea}/modules.xml +1 -1
- package/examples/echo/.idea/vcs.xml +7 -0
- package/examples/echo/.swls/config.json +1 -0
- package/examples/echo/index.ttl +3 -0
- package/examples/echo/minimal.ttl +90 -0
- package/examples/echo/shacl.ttl +9 -0
- package/examples/echo/shape.ttl +1339 -0
- package/examples/echo/test.ttl +11 -0
- package/examples/echo/untitled:/types/MyType.ttl +0 -0
- package/file:/home/silvius/Projects/mumo-pipeline/ldes/http_3A_2F_2Fdata.mumo.be_2Fstreams_2Fnodes_2Fdefault/root/index.trig +3 -0
- package/index.ttl +3 -31
- package/ldes/http_3A_2F_2Fdata.mumo.be_2Fstreams_2Fnodes_2Fdefault/root/index.trig +3 -0
- package/lib/client.js +6 -9
- package/lib/logger.d.ts +2 -2
- package/lib/logger.js +3 -3
- package/lib/reader.d.ts +8 -6
- package/lib/reader.js +135 -25
- package/lib/runner.d.ts +10 -5
- package/lib/runner.js +86 -46
- package/lib/testUtils/duplex.d.ts +25 -0
- package/lib/testUtils/duplex.js +70 -0
- package/lib/testUtils/index.d.ts +51 -0
- package/lib/testUtils/index.js +243 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/writer.d.ts +12 -5
- package/lib/writer.js +66 -13
- package/minimal.ttl +99 -0
- package/package.json +3 -3
- package/src/client.ts +8 -11
- package/src/logger.ts +3 -3
- package/src/reader.ts +207 -29
- package/src/runner.ts +128 -65
- package/src/testUtils/duplex.ts +112 -0
- package/src/testUtils/index.ts +430 -0
- package/src/writer.ts +106 -16
- package/.idea/LNKD.tech Editor.xml +0 -194
- package/.idea/codeStyles/Project.xml +0 -52
- package/.idea/codeStyles/codeStyleConfig.xml +0 -5
- package/.idea/inspectionProfiles/Project_Default.xml +0 -6
- package/.idea/js-runner.iml +0 -12
- package/.idea/vcs.xml +0 -6
- package/dist/args.d.ts +0 -4
- package/dist/args.js +0 -58
- 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 -68
- package/dist/connectors/ws.d.ts +0 -10
- package/dist/connectors/ws.js +0 -72
- package/dist/connectors.d.ts +0 -73
- package/dist/connectors.js +0 -168
- package/dist/index.cjs +0 -732
- package/dist/index.d.ts +0 -42
- package/dist/index.js +0 -83
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/util.d.ts +0 -71
- package/dist/util.js +0 -92
- package/src/jsonld.ts +0 -220
- package/src/testUtils.ts +0 -196
|
File without changes
|
package/index.ttl
CHANGED
|
@@ -8,41 +8,13 @@
|
|
|
8
8
|
@prefix sh: <http://www.w3.org/ns/shacl#>.
|
|
9
9
|
@prefix rdfc: <https://w3id.org/rdf-connect#>.
|
|
10
10
|
|
|
11
|
-
# rdfc:LogProcessor a rdfc:JsProcessor;
|
|
12
|
-
# rdfs:label "Simple Log Processor";
|
|
13
|
-
# rdfs:comment "Logs incoming messages";
|
|
14
|
-
# rdfc:entrypoint <./>;
|
|
15
|
-
# rdfc:file <./lib/util_processors.js>;
|
|
16
|
-
# rdfc:class "LogProcessor".
|
|
17
|
-
# [ ] a sh:NodeShape; sh:targetClass rdfc:LogProcessor;
|
|
18
|
-
# sh:property [
|
|
19
|
-
# sh:path rdfc:reader;
|
|
20
|
-
# sh:name "reader";
|
|
21
|
-
# sh:minCount 1;
|
|
22
|
-
# sh:maxCount 1;
|
|
23
|
-
# sh:class rdfc:Reader;
|
|
24
|
-
# ].
|
|
25
|
-
# rdfc:JsRunner a rdfc:CommandRunner;
|
|
26
|
-
# rdfc:command "npx js-runner";
|
|
27
|
-
# rdfc:processor_definition <JsProcessorShape>.
|
|
28
|
-
#
|
|
29
|
-
rdfc:JsRunner a rdfc:CommandRunner;
|
|
30
|
-
rdfc:handles rdfc:JsProcessor;
|
|
31
|
-
rdfc:command "node node_modules/@rdfc/js-runner/bin/runner.js";
|
|
32
|
-
rdfc:processor_definition <JsProcessorShape>.
|
|
33
|
-
|
|
34
11
|
rdfc:NodeRunner a rdfc:Runner;
|
|
35
12
|
rdfc:handlesSubjectsOf rdfc:jsImplementationOf;
|
|
36
|
-
rdfc:command "npx js-runner"
|
|
37
|
-
rdfc:processor_definition <JsProcessorShape>.
|
|
13
|
+
rdfc:command "npx js-runner".
|
|
38
14
|
|
|
39
|
-
|
|
40
|
-
# rdfc:command "npx js-runner";
|
|
41
|
-
# rdfc:processor_definition <JsProcessorShape>.
|
|
42
|
-
rdfc:BunRunner a rdfc:CommandRunner;
|
|
15
|
+
rdfc:BunRunner a rdfc:Runner;
|
|
43
16
|
rdfc:handlesSubjectsOf rdfc:jsImplementationOf;
|
|
44
|
-
rdfc:command "bunx js-runner"
|
|
45
|
-
rdfc:processor_definition <JsProcessorShape>.
|
|
17
|
+
rdfc:command "bunx js-runner".
|
|
46
18
|
|
|
47
19
|
sds:Activity rdfs:subClassOf prov:Activity.
|
|
48
20
|
rdfc:Processor rdfs:subClassOf sds:Activity.
|
package/lib/client.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as grpc from '@grpc/grpc-js';
|
|
2
2
|
import { promisify } from 'util';
|
|
3
3
|
import { RunnerClient } from '@rdfc/proto';
|
|
4
|
-
import
|
|
4
|
+
import { createLogger } from 'winston';
|
|
5
5
|
import { RpcTransport } from './logger.js';
|
|
6
6
|
import { Runner } from './runner.js';
|
|
7
7
|
export async function start(addr, uri) {
|
|
8
8
|
const client = new RunnerClient(addr, grpc.credentials.createInsecure());
|
|
9
|
-
const logger =
|
|
9
|
+
const logger = createLogger({
|
|
10
10
|
transports: [
|
|
11
11
|
new RpcTransport({
|
|
12
12
|
entities: [uri, 'cli'],
|
|
@@ -19,25 +19,22 @@ export async function start(addr, uri) {
|
|
|
19
19
|
const writable = promisify(stream.write.bind(stream));
|
|
20
20
|
const runner = new Runner(client, writable, uri, logger);
|
|
21
21
|
await writable({ identify: { uri } });
|
|
22
|
-
|
|
23
|
-
const processorsEnded = new Promise((res) => (processorsEnd = res));
|
|
24
|
-
(async () => {
|
|
22
|
+
await new Promise(async (res) => {
|
|
25
23
|
for await (const chunk of stream) {
|
|
26
24
|
const msg = chunk;
|
|
27
25
|
if (msg.proc) {
|
|
28
26
|
await runner.addProcessor(msg.proc);
|
|
29
27
|
}
|
|
30
28
|
if (msg.start) {
|
|
31
|
-
runner.start().then(
|
|
29
|
+
runner.start().then(res);
|
|
32
30
|
}
|
|
33
31
|
await runner.handleOrchMessage(msg);
|
|
34
32
|
}
|
|
35
33
|
logger.error('Stream ended');
|
|
36
|
-
})
|
|
37
|
-
await processorsEnded;
|
|
34
|
+
});
|
|
38
35
|
logger.info('All processors are finished');
|
|
39
36
|
stream.end();
|
|
40
37
|
client.close();
|
|
41
38
|
setTimeout(() => process.exit(0), 500);
|
|
42
39
|
}
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQTtBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ2hDLE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSxhQUFhLENBQUE7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUN0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFakMsTUFBTSxDQUFDLEtBQUssVUFBVSxLQUFLLENBQUMsSUFBWSxFQUFFLEdBQVc7SUFDbkQsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQTtJQUV4RSxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUM7UUFDMUIsVUFBVSxFQUFFO1lBQ1YsSUFBSSxZQUFZLENBQUM7Z0JBQ2YsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQztnQkFDdEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO2FBQ25DLENBQUM7U0FDSDtLQUNGLENBQUMsQ0FBQTtJQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUUvQixNQUFNLENBQUMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxDQUFBO0lBQzVDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ3JELE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBRXhELE1BQU0sUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBR3JDLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQzlCLElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ2pDLE1BQU0sR0FBRyxHQUFhLEtBQUssQ0FBQTtZQUMzQixJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDYixNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3JDLENBQUM7WUFDRCxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDZCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQzFCLENBQUM7WUFFRCxNQUFNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNyQyxDQUFDO1FBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUM5QixDQUFDLENBQUMsQ0FBQTtJQUVGLE1BQU0sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtJQUMxQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUE7SUFDWixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDZCxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZ3JwYyBmcm9tICdAZ3JwYy9ncnBjLWpzJ1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAndXRpbCdcbmltcG9ydCB7IFJ1bm5lckNsaWVudCwgVG9SdW5uZXIgfSBmcm9tICdAcmRmYy9wcm90bydcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ3dpbnN0b24nXG5pbXBvcnQgeyBScGNUcmFuc3BvcnQgfSBmcm9tICcuL2xvZ2dlcidcbmltcG9ydCB7IFJ1bm5lciB9IGZyb20gJy4vcnVubmVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnQoYWRkcjogc3RyaW5nLCB1cmk6IHN0cmluZykge1xuICBjb25zdCBjbGllbnQgPSBuZXcgUnVubmVyQ2xpZW50KGFkZHIsIGdycGMuY3JlZGVudGlhbHMuY3JlYXRlSW5zZWN1cmUoKSlcblxuICBjb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoe1xuICAgIHRyYW5zcG9ydHM6IFtcbiAgICAgIG5ldyBScGNUcmFuc3BvcnQoe1xuICAgICAgICBlbnRpdGllczogW3VyaSwgJ2NsaSddLFxuICAgICAgICBzdHJlYW06IGNsaWVudC5sb2dTdHJlYW0oKCkgPT4ge30pLFxuICAgICAgfSksXG4gICAgXSxcbiAgfSlcblxuICBjb25zdCBzdHJlYW0gPSBjbGllbnQuY29ubmVjdCgpXG5cbiAgbG9nZ2VyLmluZm8oJ0Nvbm5lY3RlZCB3aXRoIHNlcnZlciAnICsgYWRkcilcbiAgY29uc3Qgd3JpdGFibGUgPSBwcm9taXNpZnkoc3RyZWFtLndyaXRlLmJpbmQoc3RyZWFtKSlcbiAgY29uc3QgcnVubmVyID0gbmV3IFJ1bm5lcihjbGllbnQsIHdyaXRhYmxlLCB1cmksIGxvZ2dlcilcblxuICBhd2FpdCB3cml0YWJsZSh7IGlkZW50aWZ5OiB7IHVyaSB9IH0pXG5cbiAgLyogZXNsaW50LWRpc2FibGUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvciAqL1xuICBhd2FpdCBuZXcgUHJvbWlzZShhc3luYyAocmVzKSA9PiB7XG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICAgIGNvbnN0IG1zZzogVG9SdW5uZXIgPSBjaHVua1xuICAgICAgaWYgKG1zZy5wcm9jKSB7XG4gICAgICAgIGF3YWl0IHJ1bm5lci5hZGRQcm9jZXNzb3IobXNnLnByb2MpXG4gICAgICB9XG4gICAgICBpZiAobXNnLnN0YXJ0KSB7XG4gICAgICAgIHJ1bm5lci5zdGFydCgpLnRoZW4ocmVzKVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBydW5uZXIuaGFuZGxlT3JjaE1lc3NhZ2UobXNnKVxuICAgIH1cblxuICAgIGxvZ2dlci5lcnJvcignU3RyZWFtIGVuZGVkJylcbiAgfSlcblxuICBsb2dnZXIuaW5mbygnQWxsIHByb2Nlc3NvcnMgYXJlIGZpbmlzaGVkJylcbiAgc3RyZWFtLmVuZCgpXG4gIGNsaWVudC5jbG9zZSgpXG4gIHNldFRpbWVvdXQoKCkgPT4gcHJvY2Vzcy5leGl0KDApLCA1MDApXG59XG4iXX0=
|
package/lib/logger.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { LogEntry, Logger } from 'winston';
|
|
2
2
|
import Transport from 'winston-transport';
|
|
3
3
|
import * as grpc from '@grpc/grpc-js';
|
|
4
4
|
import { LogMessage } from '@rdfc/proto';
|
|
@@ -11,7 +11,7 @@ export declare class RpcTransport extends Transport {
|
|
|
11
11
|
entities: string[];
|
|
12
12
|
aliases?: string[];
|
|
13
13
|
});
|
|
14
|
-
log(info:
|
|
14
|
+
log(info: LogEntry, callback: () => void): void;
|
|
15
15
|
withEntity(entity: string): RpcTransport;
|
|
16
16
|
}
|
|
17
17
|
export declare function extendLogger(baseLogger: Logger, newEntity: string): Logger;
|
package/lib/logger.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { createLogger } from 'winston';
|
|
2
2
|
import Transport from 'winston-transport';
|
|
3
3
|
export class RpcTransport extends Transport {
|
|
4
4
|
stream;
|
|
@@ -39,11 +39,11 @@ export function extendLogger(baseLogger, newEntity) {
|
|
|
39
39
|
}
|
|
40
40
|
return t;
|
|
41
41
|
});
|
|
42
|
-
return
|
|
42
|
+
return createLogger({
|
|
43
43
|
level: baseLogger.level,
|
|
44
44
|
format: baseLogger.format,
|
|
45
45
|
defaultMeta: baseLogger.defaultMeta,
|
|
46
46
|
transports: newTransports,
|
|
47
47
|
});
|
|
48
48
|
}
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFvQixNQUFNLFNBQVMsQ0FBQTtBQUN4RCxPQUFPLFNBQVMsTUFBTSxtQkFBbUIsQ0FBQTtBQUt6QyxNQUFNLE9BQU8sWUFBYSxTQUFRLFNBQVM7SUFDeEIsTUFBTSxDQUF1QztJQUM3QyxRQUFRLENBQVU7SUFDbEIsT0FBTyxDQUFVO0lBRWxDLFlBQVksSUFJWDtRQUNDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBRXpCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQTtRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7UUFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQTtJQUNuQyxDQUFDO0lBRUQsR0FBRyxDQUFDLElBQWMsRUFBRSxRQUFvQjtRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZjtnQkFDRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87YUFDdEIsRUFDRCxRQUFRLENBQ1QsQ0FBQTtRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO1lBQ25DLFFBQVEsRUFBRSxDQUFBO1FBQ1osQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsTUFBYztRQUN2QixPQUFPLElBQUksWUFBWSxDQUFDO1lBQ3RCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO1lBQ3BDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztTQUN0QixDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLFVBQWtCLEVBQUUsU0FBaUI7SUFDaEUsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNwRCxJQUFJLENBQUMsWUFBWSxZQUFZLEVBQUUsQ0FBQztZQUM5QixPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDaEMsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFBO0lBQ1YsQ0FBQyxDQUFDLENBQUE7SUFFRixPQUFPLFlBQVksQ0FBQztRQUNsQixLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7UUFDdkIsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO1FBQ3pCLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztRQUNuQyxVQUFVLEVBQUUsYUFBYTtLQUMxQixDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCBMb2dFbnRyeSwgTG9nZ2VyIH0gZnJvbSAnd2luc3RvbidcbmltcG9ydCBUcmFuc3BvcnQgZnJvbSAnd2luc3Rvbi10cmFuc3BvcnQnXG5cbmltcG9ydCAqIGFzIGdycGMgZnJvbSAnQGdycGMvZ3JwYy1qcydcbmltcG9ydCB7IExvZ01lc3NhZ2UgfSBmcm9tICdAcmRmYy9wcm90bydcblxuZXhwb3J0IGNsYXNzIFJwY1RyYW5zcG9ydCBleHRlbmRzIFRyYW5zcG9ydCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RyZWFtOiBncnBjLkNsaWVudFdyaXRhYmxlU3RyZWFtPExvZ01lc3NhZ2U+XG4gIHByaXZhdGUgcmVhZG9ubHkgZW50aXRpZXM6IHN0cmluZ1tdXG4gIHByaXZhdGUgcmVhZG9ubHkgYWxpYXNlczogc3RyaW5nW11cblxuICBjb25zdHJ1Y3RvcihvcHRzOiB7XG4gICAgc3RyZWFtOiBncnBjLkNsaWVudFdyaXRhYmxlU3RyZWFtPExvZ01lc3NhZ2U+XG4gICAgZW50aXRpZXM6IHN0cmluZ1tdXG4gICAgYWxpYXNlcz86IHN0cmluZ1tdXG4gIH0pIHtcbiAgICBzdXBlcih7IGxldmVsOiAnZGVidWcnIH0pXG5cbiAgICB0aGlzLnN0cmVhbSA9IG9wdHMuc3RyZWFtXG4gICAgdGhpcy5lbnRpdGllcyA9IG9wdHMuZW50aXRpZXNcbiAgICB0aGlzLmFsaWFzZXMgPSBvcHRzLmFsaWFzZXMgfHwgW11cbiAgfVxuXG4gIGxvZyhpbmZvOiBMb2dFbnRyeSwgY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgICBpZiAoIXRoaXMuc3RyZWFtLmNsb3NlZCkge1xuICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBtc2c6IGluZm8ubWVzc2FnZSxcbiAgICAgICAgICBsZXZlbDogaW5mby5sZXZlbCxcbiAgICAgICAgICBlbnRpdGllczogdGhpcy5lbnRpdGllcyxcbiAgICAgICAgICBhbGlhc2VzOiB0aGlzLmFsaWFzZXMsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnT3V0cHV0IHN0cmVhbSBjbG9zZWQnKVxuICAgICAgY2FsbGJhY2soKVxuICAgIH1cbiAgfVxuXG4gIHdpdGhFbnRpdHkoZW50aXR5OiBzdHJpbmcpOiBScGNUcmFuc3BvcnQge1xuICAgIHJldHVybiBuZXcgUnBjVHJhbnNwb3J0KHtcbiAgICAgIHN0cmVhbTogdGhpcy5zdHJlYW0sXG4gICAgICBlbnRpdGllczogWy4uLnRoaXMuZW50aXRpZXMsIGVudGl0eV0sXG4gICAgICBhbGlhc2VzOiB0aGlzLmFsaWFzZXMsXG4gICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kTG9nZ2VyKGJhc2VMb2dnZXI6IExvZ2dlciwgbmV3RW50aXR5OiBzdHJpbmcpOiBMb2dnZXIge1xuICBjb25zdCBuZXdUcmFuc3BvcnRzID0gYmFzZUxvZ2dlci50cmFuc3BvcnRzLm1hcCgodCkgPT4ge1xuICAgIGlmICh0IGluc3RhbmNlb2YgUnBjVHJhbnNwb3J0KSB7XG4gICAgICByZXR1cm4gdC53aXRoRW50aXR5KG5ld0VudGl0eSlcbiAgICB9XG4gICAgcmV0dXJuIHRcbiAgfSlcblxuICByZXR1cm4gY3JlYXRlTG9nZ2VyKHtcbiAgICBsZXZlbDogYmFzZUxvZ2dlci5sZXZlbCxcbiAgICBmb3JtYXQ6IGJhc2VMb2dnZXIuZm9ybWF0LFxuICAgIGRlZmF1bHRNZXRhOiBiYXNlTG9nZ2VyLmRlZmF1bHRNZXRhLFxuICAgIHRyYW5zcG9ydHM6IG5ld1RyYW5zcG9ydHMsXG4gIH0pXG59XG4iXX0=
|
package/lib/reader.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { ReceivingMessage, ReceivingStreamMessage, RunnerClient } from '@rdfc/proto';
|
|
2
|
+
import { Logger } from 'winston';
|
|
3
|
+
import { Writable } from './runner.js';
|
|
3
4
|
export type Any = {
|
|
4
5
|
string: string;
|
|
5
6
|
} | {
|
|
@@ -18,13 +19,14 @@ export declare class ReaderInstance implements Reader {
|
|
|
18
19
|
private client;
|
|
19
20
|
readonly uri: string;
|
|
20
21
|
private logger;
|
|
21
|
-
private
|
|
22
|
-
|
|
22
|
+
private readonly notifyOrchestrator;
|
|
23
|
+
private consumers;
|
|
24
|
+
constructor(uri: string, client: RunnerClient, notifyOrchestrator: Writable, logger: Logger);
|
|
23
25
|
anys(): AsyncIterable<Any>;
|
|
24
26
|
strings(): AsyncIterable<string>;
|
|
25
27
|
buffers(): AsyncIterable<Uint8Array>;
|
|
26
28
|
streams(): AsyncIterable<AsyncGenerator<Uint8Array>>;
|
|
27
|
-
handleMsg(msg:
|
|
29
|
+
handleMsg(msg: ReceivingMessage): void;
|
|
28
30
|
close(): void;
|
|
29
|
-
handleStreamingMessage(
|
|
31
|
+
handleStreamingMessage({ channel, globalSequenceNumber, }: ReceivingStreamMessage): Promise<void>;
|
|
30
32
|
}
|
package/lib/reader.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AnyConvertor, NoConvertor, StreamConvertor, StringConvertor, } from './convertor.js';
|
|
2
|
+
import { promisify } from 'util';
|
|
2
3
|
class MyIter {
|
|
3
4
|
convertor;
|
|
4
5
|
queue = [];
|
|
@@ -6,30 +7,29 @@ class MyIter {
|
|
|
6
7
|
constructor(convertor) {
|
|
7
8
|
this.convertor = convertor;
|
|
8
9
|
}
|
|
9
|
-
push(buffer) {
|
|
10
|
+
push(buffer, onComplete) {
|
|
10
11
|
const item = this.convertor.from(buffer);
|
|
11
|
-
this.queue.push(item);
|
|
12
|
+
this.queue.push({ item, onComplete });
|
|
12
13
|
if (this.resolveNext) {
|
|
13
14
|
this.resolveNext(undefined);
|
|
14
15
|
this.resolveNext = null;
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
|
-
close() {
|
|
18
|
-
this.queue.push(undefined);
|
|
18
|
+
close(onComplete) {
|
|
19
|
+
this.queue.push({ item: undefined, onComplete });
|
|
19
20
|
if (this.resolveNext) {
|
|
20
21
|
this.resolveNext(undefined);
|
|
21
22
|
this.resolveNext = null;
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
|
-
async pushStream(chunks) {
|
|
25
|
+
async pushStream(chunks, onComplete) {
|
|
25
26
|
const stream = (async function* (stream) {
|
|
26
|
-
for await (const
|
|
27
|
-
const chunk = c;
|
|
27
|
+
for await (const chunk of stream) {
|
|
28
28
|
yield chunk.data;
|
|
29
29
|
}
|
|
30
30
|
})(chunks);
|
|
31
31
|
const item = await this.convertor.fromStream(stream);
|
|
32
|
-
this.queue.push(item);
|
|
32
|
+
this.queue.push({ item, onComplete });
|
|
33
33
|
if (this.resolveNext) {
|
|
34
34
|
this.resolveNext(undefined);
|
|
35
35
|
this.resolveNext = null;
|
|
@@ -38,10 +38,13 @@ class MyIter {
|
|
|
38
38
|
async *[Symbol.asyncIterator]() {
|
|
39
39
|
while (true) {
|
|
40
40
|
if (this.queue.length > 0) {
|
|
41
|
-
const item = this.queue.shift();
|
|
42
|
-
if (item === undefined)
|
|
41
|
+
const { item, onComplete } = this.queue.shift();
|
|
42
|
+
if (item === undefined) {
|
|
43
|
+
onComplete();
|
|
43
44
|
break;
|
|
45
|
+
}
|
|
44
46
|
yield item;
|
|
47
|
+
onComplete();
|
|
45
48
|
}
|
|
46
49
|
else {
|
|
47
50
|
await new Promise((resolve) => (this.resolveNext = resolve));
|
|
@@ -53,49 +56,156 @@ export class ReaderInstance {
|
|
|
53
56
|
client;
|
|
54
57
|
uri;
|
|
55
58
|
logger;
|
|
56
|
-
|
|
57
|
-
|
|
59
|
+
notifyOrchestrator;
|
|
60
|
+
consumers = [];
|
|
61
|
+
constructor(uri, client, notifyOrchestrator, logger) {
|
|
58
62
|
this.uri = uri;
|
|
59
63
|
this.client = client;
|
|
60
64
|
this.logger = logger;
|
|
65
|
+
this.notifyOrchestrator = notifyOrchestrator;
|
|
61
66
|
}
|
|
62
67
|
anys() {
|
|
63
68
|
const iter = new MyIter(AnyConvertor);
|
|
64
|
-
this.
|
|
69
|
+
this.consumers.push(iter);
|
|
65
70
|
return iter;
|
|
66
71
|
}
|
|
67
72
|
strings() {
|
|
68
73
|
const iter = new MyIter(StringConvertor);
|
|
69
|
-
this.
|
|
74
|
+
this.consumers.push(iter);
|
|
70
75
|
return iter;
|
|
71
76
|
}
|
|
72
77
|
buffers() {
|
|
73
78
|
const iter = new MyIter(NoConvertor);
|
|
74
|
-
this.
|
|
79
|
+
this.consumers.push(iter);
|
|
75
80
|
return iter;
|
|
76
81
|
}
|
|
77
82
|
streams() {
|
|
78
83
|
const iter = new MyIter(StreamConvertor);
|
|
79
|
-
this.
|
|
84
|
+
this.consumers.push(iter);
|
|
80
85
|
return iter;
|
|
81
86
|
}
|
|
82
87
|
handleMsg(msg) {
|
|
83
88
|
this.logger.debug(`${this.uri} handling message`);
|
|
84
|
-
|
|
85
|
-
|
|
89
|
+
const promises = [];
|
|
90
|
+
for (const iter of this.consumers) {
|
|
91
|
+
promises.push(new Promise((res) => iter.push(msg.data, () => res(null))));
|
|
86
92
|
}
|
|
93
|
+
Promise.all(promises).then(() => this.notifyOrchestrator({
|
|
94
|
+
processed: {
|
|
95
|
+
globalSequenceNumber: msg.globalSequenceNumber,
|
|
96
|
+
channel: this.uri,
|
|
97
|
+
},
|
|
98
|
+
}));
|
|
87
99
|
}
|
|
88
100
|
close() {
|
|
89
|
-
for (const iter of this.
|
|
90
|
-
iter.close();
|
|
101
|
+
for (const iter of this.consumers) {
|
|
102
|
+
iter.close(() => { });
|
|
91
103
|
}
|
|
92
104
|
}
|
|
93
|
-
handleStreamingMessage(
|
|
105
|
+
async handleStreamingMessage({ channel, globalSequenceNumber, }) {
|
|
94
106
|
this.logger.debug(`${this.uri} handling streaming message`);
|
|
95
|
-
const chunks = this.client.receiveStreamMessage(
|
|
96
|
-
|
|
97
|
-
|
|
107
|
+
const chunks = this.client.receiveStreamMessage();
|
|
108
|
+
const writeControlMessage = promisify(chunks.write.bind(chunks));
|
|
109
|
+
const consumersConsumed = [];
|
|
110
|
+
let idx = 0;
|
|
111
|
+
const messageIterators = fanoutStream(chunks, this.consumers.length, async () => {
|
|
112
|
+
await writeControlMessage({ streamSequenceNumber: idx++ });
|
|
113
|
+
});
|
|
114
|
+
for (const consumer of this.consumers) {
|
|
115
|
+
consumersConsumed.push(new Promise((res) => consumer.pushStream(messageIterators.pop(), () => res(null))));
|
|
116
|
+
}
|
|
117
|
+
await writeControlMessage({ globalSequenceNumber });
|
|
118
|
+
Promise.all(consumersConsumed).then(() => {
|
|
119
|
+
console.log('Writing processed for streaming message');
|
|
120
|
+
this.notifyOrchestrator({ processed: { globalSequenceNumber, channel } });
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
function fanoutStream(stream, numConsumers, onAllHandled) {
|
|
125
|
+
let ended = false;
|
|
126
|
+
const buffer = [];
|
|
127
|
+
const pending = [];
|
|
128
|
+
let activeConsumers = numConsumers;
|
|
129
|
+
let awaitingAck = 0;
|
|
130
|
+
function pushChunk(chunk) {
|
|
131
|
+
buffer.push(chunk);
|
|
132
|
+
flush();
|
|
133
|
+
}
|
|
134
|
+
function flush() {
|
|
135
|
+
while (buffer.length > 0 && pending.length > 0) {
|
|
136
|
+
const chunk = buffer[0];
|
|
137
|
+
const waiter = pending.shift();
|
|
138
|
+
waiter({ value: chunk, done: false });
|
|
139
|
+
awaitingAck++;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
function end() {
|
|
143
|
+
ended = true;
|
|
144
|
+
while (pending.length > 0) {
|
|
145
|
+
const waiter = pending.shift();
|
|
146
|
+
waiter({ value: undefined, done: true });
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
stream.on('data', (chunk) => {
|
|
150
|
+
pushChunk(chunk);
|
|
151
|
+
});
|
|
152
|
+
stream.on('end', () => {
|
|
153
|
+
end();
|
|
154
|
+
});
|
|
155
|
+
stream.on('error', (err) => {
|
|
156
|
+
while (pending.length > 0) {
|
|
157
|
+
const waiter = pending.shift();
|
|
158
|
+
waiter({ value: undefined, done: true });
|
|
98
159
|
}
|
|
160
|
+
throw err;
|
|
161
|
+
});
|
|
162
|
+
function makeIterable() {
|
|
163
|
+
return {
|
|
164
|
+
[Symbol.asyncIterator]() {
|
|
165
|
+
return {
|
|
166
|
+
next() {
|
|
167
|
+
if (buffer.length > 0) {
|
|
168
|
+
const chunk = buffer[0];
|
|
169
|
+
awaitingAck++;
|
|
170
|
+
return Promise.resolve({ value: chunk, done: false });
|
|
171
|
+
}
|
|
172
|
+
if (ended) {
|
|
173
|
+
return Promise.resolve({ value: undefined, done: true });
|
|
174
|
+
}
|
|
175
|
+
return new Promise((resolve) => {
|
|
176
|
+
pending.push(resolve);
|
|
177
|
+
});
|
|
178
|
+
},
|
|
179
|
+
async return() {
|
|
180
|
+
activeConsumers--;
|
|
181
|
+
if (activeConsumers === 0) {
|
|
182
|
+
end();
|
|
183
|
+
}
|
|
184
|
+
return { value: undefined, done: true };
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
async function ack() {
|
|
191
|
+
awaitingAck--;
|
|
192
|
+
if (awaitingAck === 0) {
|
|
193
|
+
buffer.shift();
|
|
194
|
+
await onAllHandled();
|
|
195
|
+
flush();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
function wrap(iterable) {
|
|
199
|
+
return {
|
|
200
|
+
async *[Symbol.asyncIterator]() {
|
|
201
|
+
for await (const item of iterable) {
|
|
202
|
+
yield item;
|
|
203
|
+
await ack();
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
};
|
|
99
207
|
}
|
|
208
|
+
const rawIterables = Array.from({ length: numConsumers }, makeIterable);
|
|
209
|
+
return rawIterables.map(wrap);
|
|
100
210
|
}
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQ0wsWUFBWSxFQUVaLFdBQVcsRUFDWCxlQUFlLEVBQ2YsZUFBZSxHQUNoQixNQUFNLGFBQWEsQ0FBQTtBQXFCcEIsTUFBTSxNQUFNO0lBQ0YsU0FBUyxDQUFjO0lBQ3ZCLEtBQUssR0FBc0IsRUFBRSxDQUFBO0lBQzdCLFdBQVcsR0FBd0MsSUFBSSxDQUFBO0lBRS9ELFlBQVksU0FBdUI7UUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7SUFDNUIsQ0FBQztJQUVELElBQUksQ0FBQyxNQUFrQjtRQUNyQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNyQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzFCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUE7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQXVDO1FBQ3RELE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBSyxTQUFTLENBQUMsRUFBRSxNQUFNO1lBQ3JDLElBQUksS0FBSyxFQUFFLE1BQU0sQ0FB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ckIsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxHQUFrQjtRQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLDZCQUE2QixDQUFDLENBQUE7UUFDM0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRyxDQUFDLENBQUE7UUFDeEQsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN6QixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2xpZW50UmVhZGFibGVTdHJlYW0gfSBmcm9tICdAZ3JwYy9ncnBjLWpzJ1xuaW1wb3J0IHsgRGF0YUNodW5rLCBNZXNzYWdlLCBSdW5uZXJDbGllbnQsIFN0cmVhbU1lc3NhZ2UgfSBmcm9tICdAcmRmYy9wcm90bydcbmltcG9ydCB3aW5zdG9uIGZyb20gJ3dpbnN0b24nXG5pbXBvcnQge1xuICBBbnlDb252ZXJ0b3IsXG4gIENvbnZlcnRvcixcbiAgTm9Db252ZXJ0b3IsXG4gIFN0cmVhbUNvbnZlcnRvcixcbiAgU3RyaW5nQ29udmVydG9yLFxufSBmcm9tICcuL2NvbnZlcnRvcidcblxuZXhwb3J0IHR5cGUgQW55ID1cbiAgfCB7XG4gICAgICBzdHJpbmc6IHN0cmluZ1xuICAgIH1cbiAgfCB7XG4gICAgICBzdHJlYW06IEFzeW5jR2VuZXJhdG9yPFVpbnQ4QXJyYXk+XG4gICAgfVxuICB8IHtcbiAgICAgIGJ1ZmZlcjogVWludDhBcnJheVxuICAgIH1cblxuZXhwb3J0IGludGVyZmFjZSBSZWFkZXIge1xuICByZWFkb25seSB1cmk6IHN0cmluZ1xuICBzdHJpbmdzKCk6IEFzeW5jSXRlcmFibGU8c3RyaW5nPlxuICBzdHJlYW1zKCk6IEFzeW5jSXRlcmFibGU8QXN5bmNHZW5lcmF0b3I8VWludDhBcnJheT4+XG4gIGJ1ZmZlcnMoKTogQXN5bmNJdGVyYWJsZTxVaW50OEFycmF5PlxuICBhbnlzKCk6IEFzeW5jSXRlcmFibGU8QW55PlxufVxuXG5jbGFzcyBNeUl0ZXI8VD4gaW1wbGVtZW50cyBBc3luY0l0ZXJhYmxlPFQ+IHtcbiAgcHJpdmF0ZSBjb252ZXJ0b3I6IENvbnZlcnRvcjxUPlxuICBwcml2YXRlIHF1ZXVlOiAoVCB8IHVuZGVmaW5lZClbXSA9IFtdXG4gIHByaXZhdGUgcmVzb2x2ZU5leHQ6ICgodmFsdWU6IHVuZGVmaW5lZCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbFxuXG4gIGNvbnN0cnVjdG9yKGNvbnZlcnRvcjogQ29udmVydG9yPFQ+KSB7XG4gICAgdGhpcy5jb252ZXJ0b3IgPSBjb252ZXJ0b3JcbiAgfVxuXG4gIHB1c2goYnVmZmVyOiBVaW50OEFycmF5KSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuY29udmVydG9yLmZyb20oYnVmZmVyKVxuICAgIHRoaXMucXVldWUucHVzaChpdGVtKVxuICAgIGlmICh0aGlzLnJlc29sdmVOZXh0KSB7XG4gICAgICB0aGlzLnJlc29sdmVOZXh0KHVuZGVmaW5lZClcbiAgICAgIHRoaXMucmVzb2x2ZU5leHQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5xdWV1ZS5wdXNoKHVuZGVmaW5lZClcbiAgICBpZiAodGhpcy5yZXNvbHZlTmV4dCkge1xuICAgICAgdGhpcy5yZXNvbHZlTmV4dCh1bmRlZmluZWQpXG4gICAgICB0aGlzLnJlc29sdmVOZXh0ID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHB1c2hTdHJlYW0oY2h1bmtzOiBDbGllbnRSZWFkYWJsZVN0cmVhbTxEYXRhQ2h1bms+KSB7XG4gICAgY29uc3Qgc3RyZWFtID0gKGFzeW5jIGZ1bmN0aW9uKiAoc3RyZWFtKSB7XG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IGMgb2Ygc3RyZWFtKSB7XG4gICAgICAgIGNvbnN0IGNodW5rOiBEYXRhQ2h1bmsgPSBjXG4gICAgICAgIHlpZWxkIGNodW5rLmRhdGFcbiAgICAgIH1cbiAgICB9KShjaHVua3MpXG4gICAgY29uc3QgaXRlbSA9IGF3YWl0IHRoaXMuY29udmVydG9yLmZyb21TdHJlYW0oc3RyZWFtKVxuICAgIHRoaXMucXVldWUucHVzaChpdGVtKVxuICAgIGlmICh0aGlzLnJlc29sdmVOZXh0KSB7XG4gICAgICB0aGlzLnJlc29sdmVOZXh0KHVuZGVmaW5lZClcbiAgICAgIHRoaXMucmVzb2x2ZU5leHQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgKltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMucXVldWUuc2hpZnQoKSFcbiAgICAgICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCkgYnJlYWtcbiAgICAgICAgeWllbGQgaXRlbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dW5kZWZpbmVkPigocmVzb2x2ZSkgPT4gKHRoaXMucmVzb2x2ZU5leHQgPSByZXNvbHZlKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlYWRlckluc3RhbmNlIGltcGxlbWVudHMgUmVhZGVyIHtcbiAgcHJpdmF0ZSBjbGllbnQ6IFJ1bm5lckNsaWVudFxuICByZWFkb25seSB1cmk6IHN0cmluZ1xuICBwcml2YXRlIGxvZ2dlcjogd2luc3Rvbi5Mb2dnZXJcblxuICBwcml2YXRlIGl0ZXJhdG9yczogTXlJdGVyPHVua25vd24+W10gPSBbXVxuXG4gIGNvbnN0cnVjdG9yKHVyaTogc3RyaW5nLCBjbGllbnQ6IFJ1bm5lckNsaWVudCwgbG9nZ2VyOiB3aW5zdG9uLkxvZ2dlcikge1xuICAgIHRoaXMudXJpID0gdXJpXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnRcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlclxuICB9XG5cbiAgYW55cygpOiBBc3luY0l0ZXJhYmxlPEFueT4ge1xuICAgIGNvbnN0IGl0ZXIgPSBuZXcgTXlJdGVyKEFueUNvbnZlcnRvcilcbiAgICB0aGlzLml0ZXJhdG9ycy5wdXNoKGl0ZXIpXG4gICAgcmV0dXJuIGl0ZXJcbiAgfVxuXG4gIHN0cmluZ3MoKTogQXN5bmNJdGVyYWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBpdGVyID0gbmV3IE15SXRlcihTdHJpbmdDb252ZXJ0b3IpXG4gICAgdGhpcy5pdGVyYXRvcnMucHVzaChpdGVyKVxuICAgIHJldHVybiBpdGVyXG4gIH1cblxuICBidWZmZXJzKCk6IEFzeW5jSXRlcmFibGU8VWludDhBcnJheT4ge1xuICAgIGNvbnN0IGl0ZXIgPSBuZXcgTXlJdGVyKE5vQ29udmVydG9yKVxuICAgIHRoaXMuaXRlcmF0b3JzLnB1c2goaXRlcilcbiAgICByZXR1cm4gaXRlclxuICB9XG5cbiAgc3RyZWFtcygpOiBBc3luY0l0ZXJhYmxlPEFzeW5jR2VuZXJhdG9yPFVpbnQ4QXJyYXk+PiB7XG4gICAgY29uc3QgaXRlciA9IG5ldyBNeUl0ZXIoU3RyZWFtQ29udmVydG9yKVxuICAgIHRoaXMuaXRlcmF0b3JzLnB1c2goaXRlcilcbiAgICByZXR1cm4gaXRlclxuICB9XG5cbiAgaGFuZGxlTXNnKG1zZzogTWVzc2FnZSkge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGAke3RoaXMudXJpfSBoYW5kbGluZyBtZXNzYWdlYClcbiAgICBmb3IgKGNvbnN0IGl0ZXIgb2YgdGhpcy5pdGVyYXRvcnMpIHtcbiAgICAgIGl0ZXIucHVzaChtc2cuZGF0YSlcbiAgICB9XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICBmb3IgKGNvbnN0IGl0ZXIgb2YgdGhpcy5pdGVyYXRvcnMpIHtcbiAgICAgIGl0ZXIuY2xvc2UoKVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVN0cmVhbWluZ01lc3NhZ2UobXNnOiBTdHJlYW1NZXNzYWdlKSB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYCR7dGhpcy51cml9IGhhbmRsaW5nIHN0cmVhbWluZyBtZXNzYWdlYClcbiAgICBjb25zdCBjaHVua3MgPSB0aGlzLmNsaWVudC5yZWNlaXZlU3RyZWFtTWVzc2FnZShtc2cuaWQhKVxuICAgIGZvciAoY29uc3QgaXRlciBvZiB0aGlzLml0ZXJhdG9ycykge1xuICAgICAgaXRlci5wdXNoU3RyZWFtKGNodW5rcylcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQ0wsWUFBWSxFQUVaLFdBQVcsRUFDWCxlQUFlLEVBQ2YsZUFBZSxHQUNoQixNQUFNLGFBQWEsQ0FBQTtBQUVwQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBMEJoQyxNQUFNLE1BQU07SUFDRixTQUFTLENBQWM7SUFDdkIsS0FBSyxHQUEwQixFQUFFLENBQUE7SUFDakMsV0FBVyxHQUF3QyxJQUFJLENBQUE7SUFFL0QsWUFBWSxTQUF1QjtRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQTtJQUM1QixDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQWtCLEVBQUUsVUFBc0I7UUFDN0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQTtRQUNyQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQXNCO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFBO1FBQ2hELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUE7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQWdDLEVBQUUsVUFBc0I7UUFFdkUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxFQUFFLE1BQU07WUFDckMsSUFBSSxLQUFLLEVBQUUsTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQTtZQUNsQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFVixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3BELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUE7UUFDckMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQTtRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUMzQixPQUFPLElBQUksRUFBRSxDQUFDO1lBQ1osSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRyxDQUFBO2dCQUNoRCxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDdkIsVUFBVSxFQUFFLENBQUE7b0JBQ1osTUFBSztnQkFDUCxDQUFDO2dCQUNELE1BQU0sSUFBSSxDQUFBO2dCQUdWLFVBQVUsRUFBRSxDQUFBO1lBQ2QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sSUFBSSxPQUFPLENBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFBO1lBQ3pFLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGNBQWM7SUFDakIsTUFBTSxDQUFjO0lBQ25CLEdBQUcsQ0FBUTtJQUNaLE1BQU0sQ0FBUTtJQUNMLGtCQUFrQixDQUFVO0lBRXJDLFNBQVMsR0FBc0IsRUFBRSxDQUFBO0lBRXpDLFlBQ0UsR0FBVyxFQUNYLE1BQW9CLEVBQ3BCLGtCQUE0QixFQUM1QixNQUFjO1FBRWQsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDZCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUE7SUFDOUMsQ0FBQztJQUVELElBQUk7UUFDRixNQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN6QixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDekIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsT0FBTztRQUNMLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3pCLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELE9BQU87UUFDTCxNQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN6QixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxTQUFTLENBQUMsR0FBcUI7UUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxDQUFBO1FBRWpELE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUNuQixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzNFLENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FDOUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQ3RCLFNBQVMsRUFBRTtnQkFDVCxvQkFBb0IsRUFBRSxHQUFHLENBQUMsb0JBQW9CO2dCQUM5QyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUc7YUFDbEI7U0FDRixDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQTtRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUdELEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxFQUMzQixPQUFPLEVBQ1Asb0JBQW9CLEdBQ0c7UUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyw2QkFBNkIsQ0FBQyxDQUFBO1FBRTNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtRQUNqRCxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQ2hFLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFBO1FBRzVCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQTtRQUNYLE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUNuQyxNQUFNLEVBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQ3JCLEtBQUssSUFBSSxFQUFFO1lBQ1QsTUFBTSxtQkFBbUIsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUM1RCxDQUFDLENBQ0YsQ0FBQTtRQUVELEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLGlCQUFpQixDQUFDLElBQUksQ0FDcEIsSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNsQixRQUFRLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUM5RCxDQUNGLENBQUE7UUFDSCxDQUFDO1FBRUQsTUFBTSxtQkFBbUIsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQTtRQUVuRCxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLHlDQUF5QyxDQUFDLENBQUE7WUFDdEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQzNFLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGO0FBTUQsU0FBUyxZQUFZLENBQ25CLE1BQStCLEVBQy9CLFlBQW9CLEVBQ3BCLFlBQXdDO0lBSXhDLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQTtJQUNqQixNQUFNLE1BQU0sR0FBUSxFQUFFLENBQUE7SUFDdEIsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFBO0lBQzVCLElBQUksZUFBZSxHQUFHLFlBQVksQ0FBQTtJQUdsQyxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUE7SUFFbkIsU0FBUyxTQUFTLENBQUMsS0FBUTtRQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2xCLEtBQUssRUFBRSxDQUFBO0lBQ1QsQ0FBQztJQUVELFNBQVMsS0FBSztRQUNaLE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDdkIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRyxDQUFBO1lBQy9CLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7WUFDckMsV0FBVyxFQUFFLENBQUE7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsR0FBRztRQUNWLEtBQUssR0FBRyxJQUFJLENBQUE7UUFDWixPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRyxDQUFBO1lBQy9CLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQVEsRUFBRSxFQUFFO1FBQzdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNsQixDQUFDLENBQUMsQ0FBQTtJQUVGLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtRQUNwQixHQUFHLEVBQUUsQ0FBQTtJQUNQLENBQUMsQ0FBQyxDQUFBO0lBRUYsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUN6QixPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRyxDQUFBO1lBQy9CLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDMUMsQ0FBQztRQUNELE1BQU0sR0FBRyxDQUFBO0lBQ1gsQ0FBQyxDQUFDLENBQUE7SUFFRixTQUFTLFlBQVk7UUFDbkIsT0FBTztZQUNMLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztnQkFDcEIsT0FBTztvQkFDTCxJQUFJO3dCQUNGLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzs0QkFDdEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBOzRCQUN2QixXQUFXLEVBQUUsQ0FBQTs0QkFDYixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFBO3dCQUN2RCxDQUFDO3dCQUNELElBQUksS0FBSyxFQUFFLENBQUM7NEJBQ1YsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTt3QkFDMUQsQ0FBQzt3QkFDRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7NEJBQzdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7d0JBQ3ZCLENBQUMsQ0FBQyxDQUFBO29CQUNKLENBQUM7b0JBQ0QsS0FBSyxDQUFDLE1BQU07d0JBQ1YsZUFBZSxFQUFFLENBQUE7d0JBQ2pCLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxDQUFDOzRCQUMxQixHQUFHLEVBQUUsQ0FBQTt3QkFDUCxDQUFDO3dCQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQTtvQkFDekMsQ0FBQztpQkFDRixDQUFBO1lBQ0gsQ0FBQztTQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQsS0FBSyxVQUFVLEdBQUc7UUFDaEIsV0FBVyxFQUFFLENBQUE7UUFDYixJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUV0QixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDZCxNQUFNLFlBQVksRUFBRSxDQUFBO1lBQ3BCLEtBQUssRUFBRSxDQUFBO1FBQ1QsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLElBQUksQ0FBQyxRQUEwQjtRQUN0QyxPQUFPO1lBQ0wsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO2dCQUMzQixJQUFJLEtBQUssRUFBRSxNQUFNLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDbEMsTUFBTSxJQUFJLENBQUE7b0JBQ1YsTUFBTSxHQUFHLEVBQUUsQ0FBQTtnQkFDYixDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUN2RSxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaWVudFJlYWRhYmxlU3RyZWFtIH0gZnJvbSAnQGdycGMvZ3JwYy1qcydcbmltcG9ydCB7XG4gIERhdGFDaHVuayxcbiAgUmVjZWl2aW5nTWVzc2FnZSxcbiAgUmVjZWl2aW5nU3RyZWFtTWVzc2FnZSxcbiAgUnVubmVyQ2xpZW50LFxufSBmcm9tICdAcmRmYy9wcm90bydcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJ3dpbnN0b24nXG5pbXBvcnQge1xuICBBbnlDb252ZXJ0b3IsXG4gIENvbnZlcnRvcixcbiAgTm9Db252ZXJ0b3IsXG4gIFN0cmVhbUNvbnZlcnRvcixcbiAgU3RyaW5nQ29udmVydG9yLFxufSBmcm9tICcuL2NvbnZlcnRvcidcbmltcG9ydCB7IFdyaXRhYmxlIH0gZnJvbSAnLi9ydW5uZXInXG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICd1dGlsJ1xuXG5leHBvcnQgdHlwZSBBbnkgPVxuICB8IHtcbiAgICAgIHN0cmluZzogc3RyaW5nXG4gICAgfVxuICB8IHtcbiAgICAgIHN0cmVhbTogQXN5bmNHZW5lcmF0b3I8VWludDhBcnJheT5cbiAgICB9XG4gIHwge1xuICAgICAgYnVmZmVyOiBVaW50OEFycmF5XG4gICAgfVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRlciB7XG4gIHJlYWRvbmx5IHVyaTogc3RyaW5nXG4gIHN0cmluZ3MoKTogQXN5bmNJdGVyYWJsZTxzdHJpbmc+XG4gIHN0cmVhbXMoKTogQXN5bmNJdGVyYWJsZTxBc3luY0dlbmVyYXRvcjxVaW50OEFycmF5Pj5cbiAgYnVmZmVycygpOiBBc3luY0l0ZXJhYmxlPFVpbnQ4QXJyYXk+XG4gIGFueXMoKTogQXN5bmNJdGVyYWJsZTxBbnk+XG59XG5cbnR5cGUgVG9kbzxUPiA9IHtcbiAgaXRlbTogVFxuICBvbkNvbXBsZXRlOiAoKSA9PiB2b2lkXG59XG5cbmNsYXNzIE15SXRlcjxUPiBpbXBsZW1lbnRzIEFzeW5jSXRlcmFibGU8VD4ge1xuICBwcml2YXRlIGNvbnZlcnRvcjogQ29udmVydG9yPFQ+XG4gIHByaXZhdGUgcXVldWU6IFRvZG88VCB8IHVuZGVmaW5lZD5bXSA9IFtdXG4gIHByaXZhdGUgcmVzb2x2ZU5leHQ6ICgodmFsdWU6IHVuZGVmaW5lZCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbFxuXG4gIGNvbnN0cnVjdG9yKGNvbnZlcnRvcjogQ29udmVydG9yPFQ+KSB7XG4gICAgdGhpcy5jb252ZXJ0b3IgPSBjb252ZXJ0b3JcbiAgfVxuXG4gIHB1c2goYnVmZmVyOiBVaW50OEFycmF5LCBvbkNvbXBsZXRlOiAoKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuY29udmVydG9yLmZyb20oYnVmZmVyKVxuICAgIHRoaXMucXVldWUucHVzaCh7IGl0ZW0sIG9uQ29tcGxldGUgfSlcbiAgICBpZiAodGhpcy5yZXNvbHZlTmV4dCkge1xuICAgICAgdGhpcy5yZXNvbHZlTmV4dCh1bmRlZmluZWQpXG4gICAgICB0aGlzLnJlc29sdmVOZXh0ID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGNsb3NlKG9uQ29tcGxldGU6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnF1ZXVlLnB1c2goeyBpdGVtOiB1bmRlZmluZWQsIG9uQ29tcGxldGUgfSlcbiAgICBpZiAodGhpcy5yZXNvbHZlTmV4dCkge1xuICAgICAgdGhpcy5yZXNvbHZlTmV4dCh1bmRlZmluZWQpXG4gICAgICB0aGlzLnJlc29sdmVOZXh0ID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHB1c2hTdHJlYW0oY2h1bmtzOiBBc3luY0l0ZXJhYmxlPERhdGFDaHVuaz4sIG9uQ29tcGxldGU6ICgpID0+IHZvaWQpIHtcbiAgICAvLyBUaGlzIGlzIGFuIGFzeW5jIGdlbmVyYXRvciB0aGF0IHRyYW5zZm9ybXMgRGF0YUNodW5rcyB0byBCdWZmZXJzXG4gICAgY29uc3Qgc3RyZWFtID0gKGFzeW5jIGZ1bmN0aW9uKiAoc3RyZWFtKSB7XG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHN0cmVhbSkge1xuICAgICAgICB5aWVsZCBjaHVuay5kYXRhXG4gICAgICB9XG4gICAgfSkoY2h1bmtzKVxuXG4gICAgY29uc3QgaXRlbSA9IGF3YWl0IHRoaXMuY29udmVydG9yLmZyb21TdHJlYW0oc3RyZWFtKVxuICAgIHRoaXMucXVldWUucHVzaCh7IGl0ZW0sIG9uQ29tcGxldGUgfSlcbiAgICBpZiAodGhpcy5yZXNvbHZlTmV4dCkge1xuICAgICAgdGhpcy5yZXNvbHZlTmV4dCh1bmRlZmluZWQpXG4gICAgICB0aGlzLnJlc29sdmVOZXh0ID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGFzeW5jICpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHsgaXRlbSwgb25Db21wbGV0ZSB9ID0gdGhpcy5xdWV1ZS5zaGlmdCgpIVxuICAgICAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb25Db21wbGV0ZSgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICB5aWVsZCBpdGVtXG4gICAgICAgIC8vIE5vdGU6IGV4ZWN1dGlvbiBwYXVzZXMgYXQgYHlpZWxkYCB1bnRpbCB0aGUgY29uc3VtZXIgY2FsbHMgYC5uZXh0KClgIGFnYWluLlxuICAgICAgICAvLyBXZSBjYWxsIG9uQ29tcGxldGUgKmFmdGVyKiByZXN1bWluZywgc28gdGhlIHByb2R1Y2VyIGtub3dzIHRoZSBpdGVtIHdhcyBhY3R1YWxseSBjb25zdW1lZC5cbiAgICAgICAgb25Db21wbGV0ZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx1bmRlZmluZWQ+KChyZXNvbHZlKSA9PiAodGhpcy5yZXNvbHZlTmV4dCA9IHJlc29sdmUpKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVhZGVySW5zdGFuY2UgaW1wbGVtZW50cyBSZWFkZXIge1xuICBwcml2YXRlIGNsaWVudDogUnVubmVyQ2xpZW50XG4gIHJlYWRvbmx5IHVyaTogc3RyaW5nXG4gIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXJcbiAgcHJpdmF0ZSByZWFkb25seSBub3RpZnlPcmNoZXN0cmF0b3I6IFdyaXRhYmxlXG5cbiAgcHJpdmF0ZSBjb25zdW1lcnM6IE15SXRlcjx1bmtub3duPltdID0gW11cblxuICBjb25zdHJ1Y3RvcihcbiAgICB1cmk6IHN0cmluZyxcbiAgICBjbGllbnQ6IFJ1bm5lckNsaWVudCxcbiAgICBub3RpZnlPcmNoZXN0cmF0b3I6IFdyaXRhYmxlLFxuICAgIGxvZ2dlcjogTG9nZ2VyLFxuICApIHtcbiAgICB0aGlzLnVyaSA9IHVyaVxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXJcbiAgICB0aGlzLm5vdGlmeU9yY2hlc3RyYXRvciA9IG5vdGlmeU9yY2hlc3RyYXRvclxuICB9XG5cbiAgYW55cygpOiBBc3luY0l0ZXJhYmxlPEFueT4ge1xuICAgIGNvbnN0IGl0ZXIgPSBuZXcgTXlJdGVyKEFueUNvbnZlcnRvcilcbiAgICB0aGlzLmNvbnN1bWVycy5wdXNoKGl0ZXIpXG4gICAgcmV0dXJuIGl0ZXJcbiAgfVxuXG4gIHN0cmluZ3MoKTogQXN5bmNJdGVyYWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBpdGVyID0gbmV3IE15SXRlcihTdHJpbmdDb252ZXJ0b3IpXG4gICAgdGhpcy5jb25zdW1lcnMucHVzaChpdGVyKVxuICAgIHJldHVybiBpdGVyXG4gIH1cblxuICBidWZmZXJzKCk6IEFzeW5jSXRlcmFibGU8VWludDhBcnJheT4ge1xuICAgIGNvbnN0IGl0ZXIgPSBuZXcgTXlJdGVyKE5vQ29udmVydG9yKVxuICAgIHRoaXMuY29uc3VtZXJzLnB1c2goaXRlcilcbiAgICByZXR1cm4gaXRlclxuICB9XG5cbiAgc3RyZWFtcygpOiBBc3luY0l0ZXJhYmxlPEFzeW5jR2VuZXJhdG9yPFVpbnQ4QXJyYXk+PiB7XG4gICAgY29uc3QgaXRlciA9IG5ldyBNeUl0ZXIoU3RyZWFtQ29udmVydG9yKVxuICAgIHRoaXMuY29uc3VtZXJzLnB1c2goaXRlcilcbiAgICByZXR1cm4gaXRlclxuICB9XG5cbiAgaGFuZGxlTXNnKG1zZzogUmVjZWl2aW5nTWVzc2FnZSkge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGAke3RoaXMudXJpfSBoYW5kbGluZyBtZXNzYWdlYClcblxuICAgIGNvbnN0IHByb21pc2VzID0gW11cbiAgICBmb3IgKGNvbnN0IGl0ZXIgb2YgdGhpcy5jb25zdW1lcnMpIHtcbiAgICAgIHByb21pc2VzLnB1c2gobmV3IFByb21pc2UoKHJlcykgPT4gaXRlci5wdXNoKG1zZy5kYXRhLCAoKSA9PiByZXMobnVsbCkpKSlcbiAgICB9XG5cbiAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PlxuICAgICAgdGhpcy5ub3RpZnlPcmNoZXN0cmF0b3Ioe1xuICAgICAgICBwcm9jZXNzZWQ6IHtcbiAgICAgICAgICBnbG9iYWxTZXF1ZW5jZU51bWJlcjogbXNnLmdsb2JhbFNlcXVlbmNlTnVtYmVyLFxuICAgICAgICAgIGNoYW5uZWw6IHRoaXMudXJpLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKVxuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgZm9yIChjb25zdCBpdGVyIG9mIHRoaXMuY29uc3VtZXJzKSB7XG4gICAgICBpdGVyLmNsb3NlKCgpID0+IHt9KVxuICAgIH1cbiAgfVxuXG4gIC8vIFRoZXJlIGlzIGEgc3RyZWFtIG1lc3NhZ2UgYXZhaWxhYmxlIGZvciB0aGlzIHJlYWRlclxuICBhc3luYyBoYW5kbGVTdHJlYW1pbmdNZXNzYWdlKHtcbiAgICBjaGFubmVsLFxuICAgIGdsb2JhbFNlcXVlbmNlTnVtYmVyLFxuICB9OiBSZWNlaXZpbmdTdHJlYW1NZXNzYWdlKSB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYCR7dGhpcy51cml9IGhhbmRsaW5nIHN0cmVhbWluZyBtZXNzYWdlYClcblxuICAgIGNvbnN0IGNodW5rcyA9IHRoaXMuY2xpZW50LnJlY2VpdmVTdHJlYW1NZXNzYWdlKClcbiAgICBjb25zdCB3cml0ZUNvbnRyb2xNZXNzYWdlID0gcHJvbWlzaWZ5KGNodW5rcy53cml0ZS5iaW5kKGNodW5rcykpXG4gICAgY29uc3QgY29uc3VtZXJzQ29uc3VtZWQgPSBbXVxuXG4gICAgLy8gQWZ0ZXIgZWFjaCBjaHVuayBpcyBoYW5kbGVkIGJ5IGFsbCBjb25zdW1lciwgZW1pdCBhIHByb2Nlc3NlZCBtZXNzYWdlXG4gICAgbGV0IGlkeCA9IDBcbiAgICBjb25zdCBtZXNzYWdlSXRlcmF0b3JzID0gZmFub3V0U3RyZWFtKFxuICAgICAgY2h1bmtzLFxuICAgICAgdGhpcy5jb25zdW1lcnMubGVuZ3RoLFxuICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB3cml0ZUNvbnRyb2xNZXNzYWdlKHsgc3RyZWFtU2VxdWVuY2VOdW1iZXI6IGlkeCsrIH0pXG4gICAgICB9LFxuICAgIClcblxuICAgIGZvciAoY29uc3QgY29uc3VtZXIgb2YgdGhpcy5jb25zdW1lcnMpIHtcbiAgICAgIGNvbnN1bWVyc0NvbnN1bWVkLnB1c2goXG4gICAgICAgIG5ldyBQcm9taXNlKChyZXMpID0+XG4gICAgICAgICAgY29uc3VtZXIucHVzaFN0cmVhbShtZXNzYWdlSXRlcmF0b3JzLnBvcCgpISwgKCkgPT4gcmVzKG51bGwpKSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICB9XG5cbiAgICBhd2FpdCB3cml0ZUNvbnRyb2xNZXNzYWdlKHsgZ2xvYmFsU2VxdWVuY2VOdW1iZXIgfSlcblxuICAgIFByb21pc2UuYWxsKGNvbnN1bWVyc0NvbnN1bWVkKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdXcml0aW5nIHByb2Nlc3NlZCBmb3Igc3RyZWFtaW5nIG1lc3NhZ2UnKVxuICAgICAgdGhpcy5ub3RpZnlPcmNoZXN0cmF0b3IoeyBwcm9jZXNzZWQ6IHsgZ2xvYmFsU2VxdWVuY2VOdW1iZXIsIGNoYW5uZWwgfSB9KVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdGVlIGEgc3RyZWFtIGBudW1Db25zdW1lcnNgIHRpbWVzXG4gKiBXaGVuIGVhY2ggdGVlJ2Qgc3RyZWFtIGhhcyBoYW5kbGVkIGEgY2h1bmssIGNhbGwge0BsaW5rIG9uQWxsSGFuZGxlZH1cbiAqL1xuZnVuY3Rpb24gZmFub3V0U3RyZWFtPFQ+KFxuICBzdHJlYW06IENsaWVudFJlYWRhYmxlU3RyZWFtPFQ+LFxuICBudW1Db25zdW1lcnM6IG51bWJlcixcbiAgb25BbGxIYW5kbGVkOiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPixcbik6IEFzeW5jSXRlcmFibGU8VD5bXSB7XG4gIHR5cGUgV2FpdGVyID0gKHZhbHVlOiBJdGVyYXRvclJlc3VsdDxUPikgPT4gdm9pZFxuXG4gIGxldCBlbmRlZCA9IGZhbHNlXG4gIGNvbnN0IGJ1ZmZlcjogVFtdID0gW11cbiAgY29uc3QgcGVuZGluZzogV2FpdGVyW10gPSBbXVxuICBsZXQgYWN0aXZlQ29uc3VtZXJzID0gbnVtQ29uc3VtZXJzXG5cbiAgLy8gY29uc3VtZXIgYm9va2tlZXBpbmdcbiAgbGV0IGF3YWl0aW5nQWNrID0gMFxuXG4gIGZ1bmN0aW9uIHB1c2hDaHVuayhjaHVuazogVCkge1xuICAgIGJ1ZmZlci5wdXNoKGNodW5rKVxuICAgIGZsdXNoKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIHdoaWxlIChidWZmZXIubGVuZ3RoID4gMCAmJiBwZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNodW5rID0gYnVmZmVyWzBdIC8vIGtlZXAgdW50aWwgYWxsIGNvbnN1bWVycyBhY2tcbiAgICAgIGNvbnN0IHdhaXRlciA9IHBlbmRpbmcuc2hpZnQoKSFcbiAgICAgIHdhaXRlcih7IHZhbHVlOiBjaHVuaywgZG9uZTogZmFsc2UgfSlcbiAgICAgIGF3YWl0aW5nQWNrKytcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbmQoKSB7XG4gICAgZW5kZWQgPSB0cnVlXG4gICAgd2hpbGUgKHBlbmRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgd2FpdGVyID0gcGVuZGluZy5zaGlmdCgpIVxuICAgICAgd2FpdGVyKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KVxuICAgIH1cbiAgfVxuXG4gIHN0cmVhbS5vbignZGF0YScsIChjaHVuazogVCkgPT4ge1xuICAgIHB1c2hDaHVuayhjaHVuaylcbiAgfSlcblxuICBzdHJlYW0ub24oJ2VuZCcsICgpID0+IHtcbiAgICBlbmQoKVxuICB9KVxuXG4gIHN0cmVhbS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgd2hpbGUgKHBlbmRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgd2FpdGVyID0gcGVuZGluZy5zaGlmdCgpIVxuICAgICAgd2FpdGVyKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KVxuICAgIH1cbiAgICB0aHJvdyBlcnJcbiAgfSlcblxuICBmdW5jdGlvbiBtYWtlSXRlcmFibGUoKTogQXN5bmNJdGVyYWJsZTxUPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmV4dCgpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PFQ+PiB7XG4gICAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSBidWZmZXJbMF1cbiAgICAgICAgICAgICAgYXdhaXRpbmdBY2srK1xuICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgdmFsdWU6IGNodW5rLCBkb25lOiBmYWxzZSB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVuZGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgcGVuZGluZy5wdXNoKHJlc29sdmUpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgcmV0dXJuKCkge1xuICAgICAgICAgICAgYWN0aXZlQ29uc3VtZXJzLS1cbiAgICAgICAgICAgIGlmIChhY3RpdmVDb25zdW1lcnMgPT09IDApIHtcbiAgICAgICAgICAgICAgZW5kKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gYWNrKCkge1xuICAgIGF3YWl0aW5nQWNrLS1cbiAgICBpZiAoYXdhaXRpbmdBY2sgPT09IDApIHtcbiAgICAgIC8vIGFsbCBjb25zdW1lcnMgZG9uZSB3aXRoIHRoZSBjdXJyZW50IGNodW5rXG4gICAgICBidWZmZXIuc2hpZnQoKSAvLyBkcm9wIGl0XG4gICAgICBhd2FpdCBvbkFsbEhhbmRsZWQoKVxuICAgICAgZmx1c2goKSAvLyBjb250aW51ZSB3aXRoIG5leHQgY2h1bmtcbiAgICB9XG4gIH1cblxuICAvLyB3cmFwIGNvbnN1bWVyIHNvIHRoZXkgKm11c3QqIGNhbGwgYWNrKCkgYWZ0ZXIgcHJvY2Vzc2luZ1xuICBmdW5jdGlvbiB3cmFwKGl0ZXJhYmxlOiBBc3luY0l0ZXJhYmxlPFQ+KTogQXN5bmNJdGVyYWJsZTxUPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFzeW5jICpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgaXRlcmFibGUpIHtcbiAgICAgICAgICB5aWVsZCBpdGVtXG4gICAgICAgICAgYXdhaXQgYWNrKClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9XG4gIH1cblxuICBjb25zdCByYXdJdGVyYWJsZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBudW1Db25zdW1lcnMgfSwgbWFrZUl0ZXJhYmxlKVxuICByZXR1cm4gcmF3SXRlcmFibGVzLm1hcCh3cmFwKVxufVxuIl19
|
package/lib/runner.d.ts
CHANGED
|
@@ -1,26 +1,31 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FromRunner, Processor, RunnerClient, ToRunner } from '@rdfc/proto';
|
|
2
2
|
import { Reader } from './reader.js';
|
|
3
3
|
import { Writer } from './writer.js';
|
|
4
4
|
import { Processor as Proc } from './processor.js';
|
|
5
5
|
import { Logger } from 'winston';
|
|
6
6
|
import { Term } from '@rdfjs/types';
|
|
7
|
-
export type Writable = (msg:
|
|
7
|
+
export type Writable = (msg: FromRunner) => Promise<unknown>;
|
|
8
8
|
export type FullProc<C extends Proc<unknown>> = C extends Proc<infer T> ? T & C : unknown;
|
|
9
9
|
export declare class Runner {
|
|
10
10
|
private readonly readers;
|
|
11
11
|
private readonly writers;
|
|
12
12
|
private readonly client;
|
|
13
|
-
private readonly
|
|
13
|
+
private readonly notifyOrchestrator;
|
|
14
14
|
private readonly logger;
|
|
15
15
|
private shapes;
|
|
16
16
|
private quads;
|
|
17
17
|
private readonly uri;
|
|
18
18
|
private readonly processors;
|
|
19
19
|
private readonly processorTransforms;
|
|
20
|
-
constructor(client: RunnerClient,
|
|
20
|
+
constructor(client: RunnerClient, notifyOrchestrator: Writable, uri: string, logger: Logger);
|
|
21
21
|
addProcessor<P extends Proc<unknown>>(proc: Processor): Promise<FullProc<P>>;
|
|
22
22
|
start(): Promise<void>;
|
|
23
23
|
createWriter(uri: Term): Writer;
|
|
24
24
|
createReader(uri: Term): Reader;
|
|
25
|
-
handleOrchMessage(msg:
|
|
25
|
+
handleOrchMessage(msg: ToRunner): Promise<void>;
|
|
26
|
+
private handleClose;
|
|
27
|
+
private handlePipeline;
|
|
28
|
+
private handleMsg;
|
|
29
|
+
private handleStreamMsg;
|
|
30
|
+
private handleProcessed;
|
|
26
31
|
}
|