@rdfc/js-runner 3.0.2 → 3.0.4-remote
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/.claude/settings.local.json +12 -0
- package/README.md +41 -1
- package/__tests__/echoProcessor.test.ts +11 -12
- package/bin/runner.js +7 -1
- package/bin/server.js +13 -0
- package/bun.lock +820 -0
- 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/package-lock.json +27 -29
- package/examples/echo/pipeline.ttl +0 -1
- package/examples/echo/processors.ttl +1 -1
- package/examples/echo/remote_pipeline.ttl +18 -0
- package/examples/echo/server.ttl +5 -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/ldes/http_3A_2F_2Fdata.mumo.be_2Fstreams_2Fnodes_2Fdefault/root/index.trig +3 -0
- package/lib/client.d.ts +2 -1
- package/lib/client.js +70 -22
- package/lib/index.d.ts +2 -0
- package/lib/index.js +3 -1
- package/lib/jsonld.d.ts +17 -0
- package/lib/jsonld.js +135 -0
- package/lib/logger.d.ts +1 -0
- package/lib/logger.js +19 -9
- package/lib/reader.d.ts +4 -1
- package/lib/reader.js +11 -3
- package/lib/runner.d.ts +6 -1
- package/lib/runner.js +43 -15
- package/lib/server.d.ts +9 -0
- package/lib/server.js +459 -0
- package/lib/state.d.ts +32 -0
- package/lib/state.js +71 -0
- package/lib/testUtils/duplex.js +1 -1
- package/lib/testUtils/index.d.ts +9 -9
- package/lib/testUtils/index.js +9 -9
- package/lib/testUtils.d.ts +24 -0
- package/lib/testUtils.js +150 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/writer.d.ts +5 -1
- package/lib/writer.js +26 -10
- package/minimal.ttl +99 -0
- package/package.json +21 -19
- package/src/client.ts +99 -24
- package/src/index.ts +2 -0
- package/src/logger.ts +15 -7
- package/src/reader.ts +19 -9
- package/src/runner.ts +61 -12
- package/src/server.ts +545 -0
- package/src/state.ts +105 -0
- package/src/testUtils/duplex.ts +1 -4
- package/src/testUtils/index.ts +25 -21
- package/src/writer.ts +36 -12
- package/.idea/LNKD.tech Editor.xml +0 -194
- package/.idea/codeStyles/Project.xml +0 -52
- package/.idea/codeStyles/codeStyleConfig.xml +0 -5
- package/.idea/copilot.data.migration.agent.xml +0 -6
- package/.idea/copilot.data.migration.ask.xml +0 -6
- package/.idea/copilot.data.migration.ask2agent.xml +0 -6
- package/.idea/copilot.data.migration.edit.xml +0 -6
- 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/jest.config.js +0 -2
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<module type="JAVA_MODULE" version="4">
|
|
3
|
+
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
|
4
|
+
<exclude-output />
|
|
5
|
+
<content url="file://$MODULE_DIR$" />
|
|
6
|
+
<orderEntry type="inheritedJdk" />
|
|
7
|
+
<orderEntry type="sourceFolder" forTests="false" />
|
|
8
|
+
</component>
|
|
9
|
+
</module>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<project version="4">
|
|
3
3
|
<component name="ProjectModuleManager">
|
|
4
4
|
<modules>
|
|
5
|
-
<module fileurl="file://$PROJECT_DIR$/.idea/
|
|
5
|
+
<module fileurl="file://$PROJECT_DIR$/.idea/echo.iml" filepath="$PROJECT_DIR$/.idea/echo.iml" />
|
|
6
6
|
</modules>
|
|
7
7
|
</component>
|
|
8
8
|
</project>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "disabled": ["shapes"] }
|
|
@@ -17,45 +17,43 @@
|
|
|
17
17
|
},
|
|
18
18
|
"../..": {
|
|
19
19
|
"name": "@rdfc/js-runner",
|
|
20
|
-
"version": "
|
|
21
|
-
"license": "
|
|
20
|
+
"version": "3.0.3",
|
|
21
|
+
"license": "MIT",
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@grpc/grpc-js": "^1.
|
|
24
|
-
"@rdfc/proto": "^0.1.
|
|
23
|
+
"@grpc/grpc-js": "^1.14.3",
|
|
24
|
+
"@rdfc/proto": "^0.1.2",
|
|
25
25
|
"@treecg/types": "^0.4.6",
|
|
26
|
-
"jsonld": "^
|
|
27
|
-
"jsonld-streaming-parser": "^5.0.
|
|
28
|
-
"n3": "^
|
|
29
|
-
"rdf-lens": "^1.3.
|
|
30
|
-
"winston": "^3.
|
|
26
|
+
"jsonld": "^9.0.0",
|
|
27
|
+
"jsonld-streaming-parser": "^5.0.1",
|
|
28
|
+
"n3": "^2.0.3",
|
|
29
|
+
"rdf-lens": "^1.3.6",
|
|
30
|
+
"winston": "^3.19.0",
|
|
31
31
|
"winston-transport": "^4.9.0"
|
|
32
32
|
},
|
|
33
33
|
"bin": {
|
|
34
|
-
"js-runner": "bin/runner.js"
|
|
34
|
+
"js-runner": "bin/runner.js",
|
|
35
|
+
"js-runner-server": "bin/server.js"
|
|
35
36
|
},
|
|
36
37
|
"devDependencies": {
|
|
37
|
-
"@eslint/js": "^
|
|
38
|
+
"@eslint/js": "^10.0.1",
|
|
38
39
|
"@rdfjs/types": "^2.0.1",
|
|
39
|
-
"@types/jest": "^29.5.14",
|
|
40
40
|
"@types/jsonld": "^1.5.15",
|
|
41
|
-
"@types/n3": "^1.
|
|
42
|
-
"@types/node": "^
|
|
43
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
44
|
-
"@typescript-eslint/parser": "^8.
|
|
45
|
-
"@vitest/coverage-v8": "^
|
|
46
|
-
"eslint": "^
|
|
47
|
-
"eslint-config-prettier": "^10.
|
|
48
|
-
"eslint-plugin-prettier": "^5.
|
|
49
|
-
"globals": "^
|
|
41
|
+
"@types/n3": "^1.26.1",
|
|
42
|
+
"@types/node": "^25.5.0",
|
|
43
|
+
"@typescript-eslint/eslint-plugin": "^8.57.1",
|
|
44
|
+
"@typescript-eslint/parser": "^8.57.1",
|
|
45
|
+
"@vitest/coverage-v8": "^4.1.0",
|
|
46
|
+
"eslint": "^10.0.2",
|
|
47
|
+
"eslint-config-prettier": "^10.1.8",
|
|
48
|
+
"eslint-plugin-prettier": "^5.5.5",
|
|
49
|
+
"globals": "^17.4.0",
|
|
50
50
|
"husky": "^9.1.7",
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"typescript-eslint": "^8.25.0",
|
|
58
|
-
"vitest": "^3.0.7"
|
|
51
|
+
"lint-staged": "^16.4.0",
|
|
52
|
+
"prettier": "^3.8.1",
|
|
53
|
+
"tsc-alias": "^1.8.16",
|
|
54
|
+
"typescript": "^5.9.3",
|
|
55
|
+
"typescript-eslint": "^8.57.1",
|
|
56
|
+
"vitest": "^4.1.0"
|
|
59
57
|
}
|
|
60
58
|
},
|
|
61
59
|
"node_modules/@rdfc/js-runner": {
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
@prefix sh: <http://www.w3.org/ns/shacl#>.
|
|
8
8
|
@prefix rdfc: <https://w3id.org/rdf-connect#>.
|
|
9
9
|
|
|
10
|
-
<> owl:imports <../../index.ttl>.
|
|
10
|
+
# <> owl:imports <../../index.ttl>.
|
|
11
11
|
rdfc:Test rdfc:jsImplementationOf rdfc:Processor;
|
|
12
12
|
rdfc:entrypoint <./>;
|
|
13
13
|
rdfc:file <./lib/processors.js>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
@prefix owl: <http://www.w3.org/2002/07/owl#>.
|
|
2
|
+
@prefix rdfc: <https://w3id.org/rdf-connect#>.
|
|
3
|
+
@prefix runner: <http://localhost:3000/>.
|
|
4
|
+
|
|
5
|
+
<> owl:imports runner:, runner:processors.ttl.
|
|
6
|
+
<> a rdfc:Pipeline;
|
|
7
|
+
rdfc:consistsOf [
|
|
8
|
+
rdfc:processor <logProc>, <sendProc>;
|
|
9
|
+
rdfc:instantiates runner:runner;
|
|
10
|
+
].
|
|
11
|
+
|
|
12
|
+
<sendProc> a rdfc:SendProcessor;
|
|
13
|
+
rdfc:msg " Hello", " World";
|
|
14
|
+
rdfc:writer <data>.
|
|
15
|
+
|
|
16
|
+
<logProc> a rdfc:LogProcessor;
|
|
17
|
+
rdfc:reader <data>.
|
|
18
|
+
|
|
File without changes
|
package/lib/client.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { State } from './state.js';
|
|
2
|
+
export declare function start(addr: string, uri: string, configPath?: string, signal?: AbortSignal, state?: State, runnerId?: string): Promise<void>;
|
package/lib/client.js
CHANGED
|
@@ -4,37 +4,85 @@ import { RunnerClient } from '@rdfc/proto';
|
|
|
4
4
|
import { createLogger } from 'winston';
|
|
5
5
|
import { RpcTransport } from './logger.js';
|
|
6
6
|
import { Runner } from './runner.js';
|
|
7
|
-
|
|
7
|
+
const GRPC_STATE_NAMES = [
|
|
8
|
+
'IDLE',
|
|
9
|
+
'CONNECTING',
|
|
10
|
+
'READY',
|
|
11
|
+
'TRANSIENT_FAILURE',
|
|
12
|
+
'SHUTDOWN',
|
|
13
|
+
];
|
|
14
|
+
function watchGrpcState(client, state, runnerId, signal) {
|
|
15
|
+
const ch = client.getChannel();
|
|
16
|
+
const update = () => {
|
|
17
|
+
if (signal.aborted)
|
|
18
|
+
return;
|
|
19
|
+
const s = ch.getConnectivityState(false);
|
|
20
|
+
state.setGrpcState(runnerId, GRPC_STATE_NAMES[s] ?? String(s));
|
|
21
|
+
if (s === grpc.connectivityState.SHUTDOWN)
|
|
22
|
+
return;
|
|
23
|
+
ch.watchConnectivityState(s, new Date(Date.now() + 3_600_000), update);
|
|
24
|
+
};
|
|
25
|
+
update();
|
|
26
|
+
}
|
|
27
|
+
export async function start(addr, uri, configPath, signal, state, runnerId) {
|
|
8
28
|
const client = new RunnerClient(addr, grpc.credentials.createInsecure());
|
|
29
|
+
const logStream = client.logStream(() => { });
|
|
9
30
|
const logger = createLogger({
|
|
10
31
|
transports: [
|
|
11
32
|
new RpcTransport({
|
|
12
33
|
entities: [uri, 'cli'],
|
|
13
|
-
stream:
|
|
34
|
+
stream: logStream,
|
|
14
35
|
}),
|
|
15
36
|
],
|
|
16
37
|
});
|
|
17
38
|
const stream = client.connect();
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
39
|
+
const closeConnection = () => {
|
|
40
|
+
stream.end();
|
|
41
|
+
logStream.end();
|
|
42
|
+
client.close();
|
|
43
|
+
};
|
|
44
|
+
const abortCtrl = signal ?? new AbortController().signal;
|
|
45
|
+
abortCtrl.addEventListener('abort', closeConnection, { once: true });
|
|
46
|
+
if (state && runnerId) {
|
|
47
|
+
watchGrpcState(client, state, runnerId, abortCtrl);
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
logger.info('Connected with server ' + addr);
|
|
51
|
+
const writable = promisify(stream.write.bind(stream));
|
|
52
|
+
const runner = new Runner(client, writable, uri, logger, configPath, state, runnerId);
|
|
53
|
+
await writable({ identify: { uri } });
|
|
54
|
+
let runnerDone = false;
|
|
55
|
+
await new Promise(async (res, rej) => {
|
|
56
|
+
try {
|
|
57
|
+
for await (const chunk of stream) {
|
|
58
|
+
const msg = chunk;
|
|
59
|
+
if (msg.proc) {
|
|
60
|
+
await runner.addProcessor(msg.proc);
|
|
61
|
+
}
|
|
62
|
+
if (msg.start) {
|
|
63
|
+
if (state && runnerId)
|
|
64
|
+
state.setStatus(runnerId, 'running');
|
|
65
|
+
runner.start().then(() => {
|
|
66
|
+
runnerDone = true;
|
|
67
|
+
res(undefined);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
await runner.handleOrchMessage(msg);
|
|
71
|
+
}
|
|
72
|
+
logger.error('Stream ended');
|
|
27
73
|
}
|
|
28
|
-
|
|
29
|
-
|
|
74
|
+
catch (err) {
|
|
75
|
+
if (runnerDone) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
rej(err);
|
|
30
79
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
setTimeout(() => process.exit(0), 500);
|
|
80
|
+
});
|
|
81
|
+
logger.info('All processors are finished');
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
abortCtrl.removeEventListener('abort', closeConnection);
|
|
85
|
+
closeConnection();
|
|
86
|
+
}
|
|
39
87
|
}
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQTtBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ2hDLE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSxhQUFhLENBQUE7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUN0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFHakMsTUFBTSxnQkFBZ0IsR0FBRztJQUN2QixNQUFNO0lBQ04sWUFBWTtJQUNaLE9BQU87SUFDUCxtQkFBbUI7SUFDbkIsVUFBVTtDQUNGLENBQUE7QUFFVixTQUFTLGNBQWMsQ0FDckIsTUFBb0IsRUFDcEIsS0FBWSxFQUNaLFFBQWdCLEVBQ2hCLE1BQW1CO0lBR25CLE1BQU0sRUFBRSxHQUFJLE1BQWMsQ0FBQyxVQUFVLEVBQWtCLENBQUE7SUFFdkQsTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFO1FBQ2xCLElBQUksTUFBTSxDQUFDLE9BQU87WUFBRSxPQUFNO1FBQzFCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN4QyxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM5RCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUTtZQUFFLE9BQU07UUFFakQsRUFBRSxDQUFDLHNCQUFzQixDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFD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QUFNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDckMsQ0FBQztnQkFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1lBQzlCLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksVUFBVSxFQUFFLENBQUM7b0JBRWYsT0FBTTtnQkFDUixDQUFDO2dCQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNWLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUVGLE1BQU0sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtJQUM1QyxDQUFDO1lBQVMsQ0FBQztRQUNULFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUE7UUFDdkQsZUFBZSxFQUFFLENBQUE7SUFDbkIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBncnBjIGZyb20gJ0BncnBjL2dycGMtanMnXG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICd1dGlsJ1xuaW1wb3J0IHsgUnVubmVyQ2xpZW50LCBUb1J1bm5lciB9IGZyb20gJ0ByZGZjL3Byb3RvJ1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnd2luc3RvbidcbmltcG9ydCB7IFJwY1RyYW5zcG9ydCB9IGZyb20gJy4vbG9nZ2VyJ1xuaW1wb3J0IHsgUnVubmVyIH0gZnJvbSAnLi9ydW5uZXInXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vc3RhdGUnXG5cbmNvbnN0IEdSUENfU1RBVEVfTkFNRVMgPSBbXG4gICdJRExFJyxcbiAgJ0NPTk5FQ1RJTkcnLFxuICAnUkVBRFknLFxuICAnVFJBTlNJRU5UX0ZBSUxVUkUnLFxuICAnU0hVVERPV04nLFxuXSBhcyBjb25zdFxuXG5mdW5jdGlvbiB3YXRjaEdycGNTdGF0ZShcbiAgY2xpZW50OiBSdW5uZXJDbGllbnQsXG4gIHN0YXRlOiBTdGF0ZSxcbiAgcnVubmVySWQ6IHN0cmluZyxcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbCxcbik6IHZvaWQge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBjb25zdCBjaCA9IChjbGllbnQgYXMgYW55KS5nZXRDaGFubmVsKCkgYXMgZ3JwYy5DaGFubmVsXG5cbiAgY29uc3QgdXBkYXRlID0gKCkgPT4ge1xuICAgIGlmIChzaWduYWwuYWJvcnRlZCkgcmV0dXJuXG4gICAgY29uc3QgcyA9IGNoLmdldENvbm5lY3Rpdml0eVN0YXRlKGZhbHNlKVxuICAgIHN0YXRlLnNldEdycGNTdGF0ZShydW5uZXJJZCwgR1JQQ19TVEFURV9OQU1FU1tzXSA/PyBTdHJpbmcocykpXG4gICAgaWYgKHMgPT09IGdycGMuY29ubmVjdGl2aXR5U3RhdGUuU0hVVERPV04pIHJldHVyblxuICAgIC8vIFdhdGNoIGZvciB0aGUgbmV4dCBzdGF0ZSBjaGFuZ2UgKDEtaG91ciBkZWFkbGluZSlcbiAgICBjaC53YXRjaENvbm5lY3Rpdml0eVN0YXRlKHMsIG5ldyBEYXRlKERhdGUubm93KCkgKyAzXzYwMF8wMDApLCB1cGRhdGUpXG4gIH1cblxuICB1cGRhdGUoKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnQoXG4gIGFkZHI6IHN0cmluZyxcbiAgdXJpOiBzdHJpbmcsXG4gIGNvbmZpZ1BhdGg/OiBzdHJpbmcsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICBzdGF0ZT86IFN0YXRlLFxuICBydW5uZXJJZD86IHN0cmluZyxcbikge1xuICBjb25zdCBjbGllbnQgPSBuZXcgUnVubmVyQ2xpZW50KGFkZHIsIGdycGMuY3JlZGVudGlhbHMuY3JlYXRlSW5zZWN1cmUoKSlcblxuICBjb25zdCBsb2dTdHJlYW0gPSBjbGllbnQubG9nU3RyZWFtKCgpID0+IHt9KVxuXG4gIGNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcih7XG4gICAgdHJhbnNwb3J0czogW1xuICAgICAgbmV3IFJwY1RyYW5zcG9ydCh7XG4gICAgICAgIGVudGl0aWVzOiBbdXJpLCAnY2xpJ10sXG4gICAgICAgIHN0cmVhbTogbG9nU3RyZWFtLFxuICAgICAgfSksXG4gICAgXSxcbiAgfSlcblxuICBjb25zdCBzdHJlYW0gPSBjbGllbnQuY29ubmVjdCgpXG5cbiAgY29uc3QgY2xvc2VDb25uZWN0aW9uID0gKCkgPT4ge1xuICAgIHN0cmVhbS5lbmQoKVxuICAgIGxvZ1N0cmVhbS5lbmQoKVxuICAgIGNsaWVudC5jbG9zZSgpXG4gIH1cblxuICBjb25zdCBhYm9ydEN0cmwgPSBzaWduYWwgPz8gbmV3IEFib3J0Q29udHJvbGxlcigpLnNpZ25hbFxuICBhYm9ydEN0cmwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBjbG9zZUNvbm5lY3Rpb24sIHsgb25jZTogdHJ1ZSB9KVxuXG4gIGlmIChzdGF0ZSAmJiBydW5uZXJJZCkge1xuICAgIHdhdGNoR3JwY1N0YXRlKGNsaWVudCwgc3RhdGUsIHJ1bm5lcklkLCBhYm9ydEN0cmwpXG4gIH1cblxuICB0cnkge1xuICAgIGxvZ2dlci5pbmZvKCdDb25uZWN0ZWQgd2l0aCBzZXJ2ZXIgJyArIGFkZHIpXG4gICAgY29uc3Qgd3JpdGFibGUgPSBwcm9taXNpZnkoc3RyZWFtLndyaXRlLmJpbmQoc3RyZWFtKSlcbiAgICBjb25zdCBydW5uZXIgPSBuZXcgUnVubmVyKFxuICAgICAgY2xpZW50LFxuICAgICAgd3JpdGFibGUsXG4gICAgICB1cmksXG4gICAgICBsb2dnZXIsXG4gICAgICBjb25maWdQYXRoLFxuICAgICAgc3RhdGUsXG4gICAgICBydW5uZXJJZCxcbiAgICApXG5cbiAgICBhd2FpdCB3cml0YWJsZSh7IGlkZW50aWZ5OiB7IHVyaSB9IH0pXG5cbiAgICBsZXQgcnVubmVyRG9uZSA9IGZhbHNlXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvciAqL1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIChyZXMsIHJlaikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICAgICAgICBjb25zdCBtc2c6IFRvUnVubmVyID0gY2h1bmtcbiAgICAgICAgICBpZiAobXNnLnByb2MpIHtcbiAgICAgICAgICAgIGF3YWl0IHJ1bm5lci5hZGRQcm9jZXNzb3IobXNnLnByb2MpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtc2cuc3RhcnQpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZSAmJiBydW5uZXJJZCkgc3RhdGUuc2V0U3RhdHVzKHJ1bm5lcklkLCAncnVubmluZycpXG4gICAgICAgICAgICBydW5uZXIuc3RhcnQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgcnVubmVyRG9uZSA9IHRydWVcbiAgICAgICAgICAgICAgcmVzKHVuZGVmaW5lZClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXdhaXQgcnVubmVyLmhhbmRsZU9yY2hNZXNzYWdlKG1zZylcbiAgICAgICAgfVxuXG4gICAgICAgIGxvZ2dlci5lcnJvcignU3RyZWFtIGVuZGVkJylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAocnVubmVyRG9uZSkge1xuICAgICAgICAgIC8vIFN0cmVhbSBlcnJvciBhZnRlciBydW5uZXIgZmluaXNoZWQgKGUuZy4gY29ubmVjdGlvbiBkcm9wcGVkIGR1cmluZyBjbGVhbnVwKSDigJQgc2FmZSB0byBpZ25vcmVcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICByZWooZXJyKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBsb2dnZXIuaW5mbygnQWxsIHByb2Nlc3NvcnMgYXJlIGZpbmlzaGVkJylcbiAgfSBmaW5hbGx5IHtcbiAgICBhYm9ydEN0cmwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBjbG9zZUNvbm5lY3Rpb24pXG4gICAgY2xvc2VDb25uZWN0aW9uKClcbiAgfVxufVxuIl19
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -4,5 +4,7 @@ export * from './reader.js';
|
|
|
4
4
|
export * from './processor.js';
|
|
5
5
|
export * from './runner.js';
|
|
6
6
|
export * from './logger.js';
|
|
7
|
+
export * from './state.js';
|
|
7
8
|
export * as reexports from './reexports.js';
|
|
8
|
-
|
|
9
|
+
export * from './server.js';
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxVQUFVLENBQUE7QUFDeEIsY0FBYyxVQUFVLENBQUE7QUFDeEIsY0FBYyxVQUFVLENBQUE7QUFDeEIsY0FBYyxhQUFhLENBQUE7QUFDM0IsY0FBYyxVQUFVLENBQUE7QUFDeEIsY0FBYyxVQUFVLENBQUE7QUFDeEIsY0FBYyxTQUFTLENBQUE7QUFFdkIsT0FBTyxLQUFLLFNBQVMsTUFBTSxhQUFhLENBQUE7QUFDeEMsY0FBYyxVQUFVLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NsaWVudCdcbmV4cG9ydCAqIGZyb20gJy4vd3JpdGVyJ1xuZXhwb3J0ICogZnJvbSAnLi9yZWFkZXInXG5leHBvcnQgKiBmcm9tICcuL3Byb2Nlc3NvcidcbmV4cG9ydCAqIGZyb20gJy4vcnVubmVyJ1xuZXhwb3J0ICogZnJvbSAnLi9sb2dnZXInXG5leHBvcnQgKiBmcm9tICcuL3N0YXRlJ1xuXG5leHBvcnQgKiBhcyByZWV4cG9ydHMgZnJvbSAnLi9yZWV4cG9ydHMnXG5leHBvcnQgKiBmcm9tICcuL3NlcnZlcidcbiJdfQ==
|
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,135 @@
|
|
|
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#', (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
|
+
}
|
|
121
|
+
return k + ': ' + x;
|
|
122
|
+
})));
|
|
123
|
+
expandArgs(args[key], cont, logger);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
export async function parse_jsonld(args, logger, items) {
|
|
127
|
+
const promises = [];
|
|
128
|
+
logger.info(args);
|
|
129
|
+
const cont = await jsonldToQuads(JSON.parse(args));
|
|
130
|
+
const out = JSON.parse(args, (k, v) => revive(k, v, logger, promises, items));
|
|
131
|
+
await Promise.all(promises);
|
|
132
|
+
expandArgs(out, cont, logger);
|
|
133
|
+
return out;
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2pzb25sZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUV6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDdEQsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLElBQUksQ0FBQTtBQVM5QixNQUFNLElBQUksR0FBRyx5QkFBeUIsQ0FDcEMscUNBQXFDLEVBQ3JDLEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUNWLFNBQVMsRUFDVCxjQUFjLEVBQ2QsYUFBYSxFQUNiLFFBQVEsRUFDUixZQUFZLEVBQ1osVUFBVSxDQUNYLENBQUE7QUFHRCxNQUFNLElBQUksR0FBRyxlQUFlLENBQzFCLCtCQUErQixFQUMvQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUNSLFFBQVEsRUFDUixRQUFRLENBQ1QsQ0FBQTtBQUVELFNBQVMsZUFBZSxDQUFDLEdBQVk7SUFDbkMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzVDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUE7QUFDakQsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEtBQWM7SUFDaEMsTUFBTSxLQUFLLEdBQVcsRUFBRSxDQUFB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USxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFFN0UsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRTNCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQzdCLE9BQU8sR0FBRyxDQUFBO0FBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9yY2hlc3RyYXRvck1lc3NhZ2UsIFJ1bm5lckNsaWVudCB9IGZyb20gJ0ByZGZjL3Byb3RvJ1xuaW1wb3J0IHsgY3JlYXRlTmFtZXNwYWNlLCBjcmVhdGVVcmlBbmRUZXJtTmFtZXNwYWNlIH0gZnJvbSAnQHRyZWVjZy90eXBlcydcbmltcG9ydCB7IFJlYWRlckluc3RhbmNlIH0gZnJvbSAnLi9yZWFkZXInXG5pbXBvcnQgeyBXcml0ZXJJbnN0YW5jZSB9IGZyb20gJy4vd3JpdGVyJ1xuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSAnd2luc3RvbidcbmltcG9ydCB7IEpzb25MZFBhcnNlciB9IGZyb20gJ2pzb25sZC1zdHJlYW1pbmctcGFyc2VyJ1xuaW1wb3J0IHsgcHJlZCwgU2hhY2xQYXRoIH0gZnJvbSAncmRmLWxlbnMnXG5pbXBvcnQgeyBRdWFkLCBUZXJtIH0gZnJvbSAnQHJkZmpzL3R5cGVzJ1xuaW1wb3J0IHsgTmFtZWROb2RlIH0gZnJvbSAnbjMnXG5cbmV4cG9ydCB0eXBlIFJ1bm5lckl0ZW1zID0ge1xuICByZWFkZXJzOiB7IFt1cmk6IHN0cmluZ106IFJlYWRlckluc3RhbmNlW10gfVxuICB3cml0ZXJzOiB7IFt1cmk6IHN0cmluZ106IFdyaXRlckluc3RhbmNlW10gfVxuICBjbGllbnQ6IFJ1bm5lckNsaWVudFxuICB3cml0ZTogV3JpdGFibGVcbn1cblxuY29uc3QgUkRGTCA9IGNyZWF0ZVVyaUFuZFRlcm1OYW1lc3BhY2UoXG4gICdodHRwczovL3czaWQub3JnL3JkZi1sZW5zL29udG9sb2d5IycsXG4gICdDQkQnLFxuICAnUGF0aCcsXG4gICdQYXRoTGVucycsXG4gICdDb250ZXh0JyxcbiAgJ1R5cGVkRXh0cmFjdCcsXG4gICdFbnZWYXJpYWJsZScsXG4gICdlbnZLZXknLFxuICAnZW52RGVmYXVsdCcsXG4gICdkYXRhdHlwZScsXG4pXG5cbnR5cGUgV3JpdGFibGUgPSAobXNnOiBPcmNoZXN0cmF0b3JNZXNzYWdlKSA9PiBQcm9taXNlPHVua25vd24+XG5jb25zdCBSREZDID0gY3JlYXRlTmFtZXNwYWNlKFxuICAnaHR0cHM6Ly93M2lkLm9yZy9yZGYtY29ubmVjdCMnLFxuICAoeCkgPT4geCxcbiAgJ1JlYWRlcicsXG4gICdXcml0ZXInLFxuKVxuXG5mdW5jdGlvbiBhc19zdHJpbmdfYXJyYXkob2JqOiB1bmtub3duKTogc3RyaW5nW10ge1xuICBjb25zdCBvdXQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBvYmogOiBbb2JqXVxuICByZXR1cm4gb3V0LmZpbHRlcigoeCkgPT4gdHlwZW9mIHggPT09ICdzdHJpbmcnKVxufVxuXG5mdW5jdGlvbiBjYmRUb1F1YWRzKHZhbHVlOiB1bmtub3duKSB7XG4gIGNvbnN0IHF1YWRzOiBRdWFkW10gPSBbXVxuICBjb25zdCBwYXJzZXIgPSBuZXcgSnNvbkxkUGFyc2VyKClcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPHsgdmFsdWU6IFF1YWRbXSB9PigocmVzLCByZWopID0+XG4gICAgcGFyc2VyXG4gICAgICAub24oJ2VuZCcsICgpID0+IHJlcyh7IHZhbHVlOiBxdWFkcyB9KSlcbiAgICAgIC5vbignZXJyb3InLCAoZSkgPT4gcmVqKGUpKVxuICAgICAgLm9uKCdkYXRhJywgKHEpID0+IHtcbiAgICAgICAgcXVhZHMucHVzaChxKVxuICAgICAgfSksXG4gIClcblxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgJ0B0eXBlJyBpbiB2YWx1ZSkge1xuICAgIGRlbGV0ZSB2YWx1ZVsnQHR5cGUnXVxuICB9XG4gIHBhcnNlci53cml0ZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpXG4gIHBhcnNlci5lbmQoKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5hc3luYyBmdW5jdGlvbiBjYmRUb1BhdGgodmFsdWU6IHVua25vd24pOiBQcm9taXNlPHsgdmFsdWU6IHVua25vd24gfT4ge1xuICBjb25zdCBxcyA9IChcbiAgICBhd2FpdCBjYmRUb1F1YWRzKHtcbiAgICAgICdAaWQnOiAnaHR0cDovL2V4YW1wbGUuY29tL25zI21lMTIzNCcsXG4gICAgICAnaHR0cDovL2V4YW1wbGUuY29tL25zI2lubmVyUHJlZCc6IHZhbHVlLFxuICAgIH0pXG4gICkudmFsdWVcblxuICBjb25zdCBwYXRoID0gcHJlZChuZXcgTmFtZWROb2RlKCdodHRwOi8vZXhhbXBsZS5jb20vbnMjaW5uZXJQcmVkJykpXG4gICAgLm9uZSgpXG4gICAgLnRoZW4oU2hhY2xQYXRoKVxuICAgIC5leGVjdXRlKHtcbiAgICAgIHF1YWRzOiBxcyxcbiAgICAgIGlkOiBuZXcgTmFtZWROb2RlKCdodHRwOi8vZXhhbXBsZS5jb20vbnMjbWUxMjM0JyksXG4gICAgfSlcbiAgcmV0dXJuIHsgdmFsdWU6IHBhdGggfVxufVxuXG50eXBlIENvbnQgPSB7IHF1YWRzOiBRdWFkW107IGlkOiBUZXJtIH1cbmFzeW5jIGZ1bmN0aW9uIGpzb25sZFRvUXVhZHModmFsdWU6IHVua25vd24pOiBQcm9taXNlPENvbnQ+IHtcbiAgY29uc3QgcXMgPSAoXG4gICAgYXdhaXQgY2JkVG9RdWFkcyh7XG4gICAgICAnQGlkJzogJ2h0dHA6Ly9leGFtcGxlLmNvbS9ucyNtZTEyMzQnLFxuICAgICAgJ2h0dHA6Ly9leGFtcGxlLmNvbS9ucyNpbm5lclByZWQnOiB2YWx1ZSxcbiAgICB9KVxuICApLnZhbHVlXG5cbiAgY29uc3QgaWR4ID0gcXMuZmluZEluZGV4KFxuICAgICh4KSA9PlxuICAgICAgeC5wcmVkaWNhdGUuZXF1YWxzKG5ldyBOYW1lZE5vZGUoJ2h0dHA6Ly9leGFtcGxlLmNvbS9ucyNpbm5lclByZWQnKSkgJiZcbiAgICAgIHguc3ViamVjdC5lcXVhbHMobmV3IE5hbWVkTm9kZSgnaHR0cDovL2V4YW1wbGUuY29tL25zI21lMTIzNCcpKSxcbiAgKVxuICBpZiAoaWR4IDwgMCkgdGhyb3cgJ1RoaXMgY2Fubm90IGhhcHBlbidcbiAgY29uc3QgaWQgPSBxc1tpZHhdLm9iamVjdFxuXG4gIHFzLnNwbGljZShpZHgsIDEpXG5cbiAgcmV0dXJuIHtcbiAgICBxdWFkczogcXMsXG4gICAgaWQsXG4gIH1cbn1cblxuLyogZXNsaW50LWRpc2FibGUgIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmZ1bmN0aW9uIHJldml2ZShcbiAgX2tleTogc3RyaW5nLFxuICB2YWx1ZTogYW55LFxuICBsb2dnZXI6IExvZ2dlcixcbiAgcHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj5bXSxcbiAgcnVubmVySXRlbXM6IFJ1bm5lckl0ZW1zLFxuKTogYW55IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCB0eXBlcyA9IGFzX3N0cmluZ19hcnJheSh2YWx1ZVsnQHR5cGUnXSB8fCBbXSlcbiAgICBjb25zdCBpZHMgPSBhc19zdHJpbmdfYXJyYXkodmFsdWVbJ0BpZCddIHx8IFtdKVswXSB8fCAnJ1xuXG4gICAgaWYgKHR5cGVzLmluY2x1ZGVzKFJERkMuUmVhZGVyKSkge1xuICAgICAgaWYgKHJ1bm5lckl0ZW1zLnJlYWRlcnNbaWRzXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJ1bm5lckl0ZW1zLnJlYWRlcnNbaWRzXSA9IFtdXG4gICAgICB9XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgUmVhZGVySW5zdGFuY2UoaWRzLCBydW5uZXJJdGVtcy5jbGllbnQsIGxvZ2dlcilcbiAgICAgIHJ1bm5lckl0ZW1zLnJlYWRlcnNbaWRzXS5wdXNoKHJlYWRlcilcbiAgICAgIHJldHVybiByZWFkZXJcbiAgICB9XG5cbiAgICBpZiAodHlwZXMuaW5jbHVkZXMoUkRGQy5Xcml0ZXIpKSB7XG4gICAgICBpZiAocnVubmVySXRlbXMud3JpdGVyc1tpZHNdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcnVubmVySXRlbXMud3JpdGVyc1tpZHNdID0gW11cbiAgICAgIH1cbiAgICAgIGNvbnN0IHdyaXRlciA9IG5ldyBXcml0ZXJJbnN0YW5jZShcbiAgICAgICAgaWRzLFxuICAgICAgICBydW5uZXJJdGVtcy5jbGllbnQsXG4gICAgICAgIHJ1bm5lckl0ZW1zLndyaXRlLFxuICAgICAgICBsb2dnZXIsXG4gICAgICApXG4gICAgICBydW5uZXJJdGVtcy53cml0ZXJzW2lkc10ucHVzaCh3cml0ZXIpXG4gICAgICByZXR1cm4gd3JpdGVyXG4gICAgfVxuXG4gICAgaWYgKHR5cGVzLmluY2x1ZGVzKFJERkwuQ0JEKSkge1xuICAgICAgcmV0dXJuIGNiZFRvUXVhZHModmFsdWUpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVzLmluY2x1ZGVzKFJERkwuUGF0aCkpIHtcbiAgICAgIHJldHVybiBjYmRUb1BhdGgodmFsdWUpXG4gICAgfVxuICB9XG5cbiAgT2JqZWN0LmVudHJpZXModmFsdWUpLmZvckVhY2goKFtrLCB2XSkgPT4ge1xuICAgIGlmICh2IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgbG9nZ2VyLmluZm8oJ0ZvdW5kIHByb21pc2UnKVxuICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgdi50aGVuKCh4KSA9PiB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oJ1NldHRpbmcgZmllbGQgJyArIGspXG4gICAgICAgICAgdmFsdWVba10gPSB4LnZhbHVlXG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gdmFsdWVcbn1cblxudHlwZSBBcmcgPSB7XG4gIFtpZDogc3RyaW5nXTogYW55XG59XG5mdW5jdGlvbiBleHBhbmRBcmdzKGFyZ3M6IEFyZywgY29udDogQ29udCwgbG9nZ2VyOiBMb2dnZXIpIHtcbiAgY29uc3QgY29udGV4dCA9IGFyZ3NbJ0Bjb250ZXh0J11cbiAgaWYgKCFjb250ZXh0KSByZXR1cm5cblxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhhcmdzKSkge1xuICAgIGlmIChrZXkgPT0gJ0Bjb250ZXh0JykgY29udGludWVcbiAgICBjb25zdCBjdHhPYmogPSBjb250ZXh0W2tleV1cbiAgICBpZiAoIWN0eE9iaikge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiRGlkbid0IGZpbmQgY3R4IHRoaW5ncyBmb3IgXCIgKyBrZXkpXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICdEaWQgZmluZCBjdHggdGhpbmdzIGZvciAnICtcbiAgICAgICAga2V5ICtcbiAgICAgICAgJyAnICtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoY3R4T2JqKSArXG4gICAgICAgICc6ICcgK1xuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBPYmplY3QuZW50cmllcyhhcmdzW2tleV0pLm1hcCgoW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICBsZXQgeCA9ICdvYmplY3QnXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB4ID0gSlNPTi5zdHJpbmdpZnkodilcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgfSBjYXRjaCAoX2U6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgLy8gZGVmYXVsdCBpcyBzZXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGsgKyAnOiAnICsgeFxuICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgIClcblxuICAgIGV4cGFuZEFyZ3MoYXJnc1trZXldLCBjb250LCBsb2dnZXIpXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhcnNlX2pzb25sZChcbiAgYXJnczogc3RyaW5nLFxuICBsb2dnZXI6IExvZ2dlcixcbiAgaXRlbXM6IFJ1bm5lckl0ZW1zLFxuKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIGNvbnN0IHByb21pc2VzOiBQcm9taXNlPHVua25vd24+W10gPSBbXVxuICBsb2dnZXIuaW5mbyhhcmdzKVxuICBjb25zdCBjb250ID0gYXdhaXQganNvbmxkVG9RdWFkcyhKU09OLnBhcnNlKGFyZ3MpKVxuICBjb25zdCBvdXQgPSBKU09OLnBhcnNlKGFyZ3MsIChrLCB2KSA9PiByZXZpdmUoaywgdiwgbG9nZ2VyLCBwcm9taXNlcywgaXRlbXMpKVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuXG4gIGV4cGFuZEFyZ3Mob3V0LCBjb250LCBsb2dnZXIpXG4gIHJldHVybiBvdXRcbn1cbiJdfQ==
|
package/lib/logger.d.ts
CHANGED
package/lib/logger.js
CHANGED
|
@@ -4,25 +4,35 @@ export class RpcTransport extends Transport {
|
|
|
4
4
|
stream;
|
|
5
5
|
entities;
|
|
6
6
|
aliases;
|
|
7
|
+
draining;
|
|
7
8
|
constructor(opts) {
|
|
8
9
|
super({ level: 'debug' });
|
|
9
10
|
this.stream = opts.stream;
|
|
10
11
|
this.entities = opts.entities;
|
|
11
12
|
this.aliases = opts.aliases || [];
|
|
13
|
+
this.draining = true;
|
|
14
|
+
this.stream.on('drain', () => {
|
|
15
|
+
this.draining = true;
|
|
16
|
+
});
|
|
12
17
|
}
|
|
13
18
|
log(info, callback) {
|
|
14
|
-
if (!this.stream.closed) {
|
|
15
|
-
this.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
if (!this.stream.closed && !this.stream.destroyed && this.stream.writable) {
|
|
20
|
+
if (this.draining) {
|
|
21
|
+
const ok = this.stream.write({
|
|
22
|
+
msg: info.message,
|
|
23
|
+
level: info.level,
|
|
24
|
+
entities: this.entities,
|
|
25
|
+
aliases: this.aliases,
|
|
26
|
+
});
|
|
27
|
+
if (!ok) {
|
|
28
|
+
this.draining = false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
21
31
|
}
|
|
22
32
|
else {
|
|
23
33
|
console.log('Output stream closed');
|
|
24
|
-
callback();
|
|
25
34
|
}
|
|
35
|
+
callback();
|
|
26
36
|
}
|
|
27
37
|
withEntity(entity) {
|
|
28
38
|
return new RpcTransport({
|
|
@@ -46,4 +56,4 @@ export function extendLogger(baseLogger, newEntity) {
|
|
|
46
56
|
transports: newTransports,
|
|
47
57
|
});
|
|
48
58
|
}
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFvQixNQUFNLFNBQVMsQ0FBQTtBQUN4RCxPQUFPLFNBQVMsTUFBTSxtQkFBbUIsQ0FBQTtBQUt6QyxNQUFNLE9BQU8sWUFBYSxTQUFRLFNBQVM7SUFDeEIsTUFBTSxDQUF1QztJQUM3QyxRQUFRLENBQVU7SUFDbEIsT0FBTyxDQUFVO0lBQzFCLFFBQVEsQ0FBUztJQUV6QixZQUFZLElBSVg7UUFDQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUV6QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUE7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO1FBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7UUFFcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtRQUN0QixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxHQUFHLENBQUMsSUFBYyxFQUFFLFFBQW9CO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO29CQUMzQixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87b0JBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87aUJBQ3RCLENBQUMsQ0FBQTtnQkFDRixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ1IsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUE7Z0JBQ3ZCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUE7UUFDckMsQ0FBQztRQUNELFFBQVEsRUFBRSxDQUFBO0lBQ1osQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFjO1FBQ3ZCLE9BQU8sSUFBSSxZQUFZLENBQUM7WUFDdEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7WUFDcEMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsVUFBa0IsRUFBRSxTQUFpQjtJQUNoRSxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ3BELElBQUksQ0FBQyxZQUFZLFlBQVksRUFBRSxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNoQyxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUE7SUFDVixDQUFDLENBQUMsQ0FBQTtJQUVGLE9BQU8sWUFBWSxDQUFDO1FBQ2xCLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSztRQUN2QixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07UUFDekIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO1FBQ25DLFVBQVUsRUFBRSxhQUFhO0tBQzFCLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVMb2dnZXIsIExvZ0VudHJ5LCBMb2dnZXIgfSBmcm9tICd3aW5zdG9uJ1xuaW1wb3J0IFRyYW5zcG9ydCBmcm9tICd3aW5zdG9uLXRyYW5zcG9ydCdcblxuaW1wb3J0ICogYXMgZ3JwYyBmcm9tICdAZ3JwYy9ncnBjLWpzJ1xuaW1wb3J0IHsgTG9nTWVzc2FnZSB9IGZyb20gJ0ByZGZjL3Byb3RvJ1xuXG5leHBvcnQgY2xhc3MgUnBjVHJhbnNwb3J0IGV4dGVuZHMgVHJhbnNwb3J0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdHJlYW06IGdycGMuQ2xpZW50V3JpdGFibGVTdHJlYW08TG9nTWVzc2FnZT5cbiAgcHJpdmF0ZSByZWFkb25seSBlbnRpdGllczogc3RyaW5nW11cbiAgcHJpdmF0ZSByZWFkb25seSBhbGlhc2VzOiBzdHJpbmdbXVxuICBwcml2YXRlIGRyYWluaW5nOiBib29sZWFuXG5cbiAgY29uc3RydWN0b3Iob3B0czoge1xuICAgIHN0cmVhbTogZ3JwYy5DbGllbnRXcml0YWJsZVN0cmVhbTxMb2dNZXNzYWdlPlxuICAgIGVudGl0aWVzOiBzdHJpbmdbXVxuICAgIGFsaWFzZXM/OiBzdHJpbmdbXVxuICB9KSB7XG4gICAgc3VwZXIoeyBsZXZlbDogJ2RlYnVnJyB9KVxuXG4gICAgdGhpcy5zdHJlYW0gPSBvcHRzLnN0cmVhbVxuICAgIHRoaXMuZW50aXRpZXMgPSBvcHRzLmVudGl0aWVzXG4gICAgdGhpcy5hbGlhc2VzID0gb3B0cy5hbGlhc2VzIHx8IFtdXG4gICAgdGhpcy5kcmFpbmluZyA9IHRydWVcblxuICAgIHRoaXMuc3RyZWFtLm9uKCdkcmFpbicsICgpID0+IHtcbiAgICAgIHRoaXMuZHJhaW5pbmcgPSB0cnVlXG4gICAgfSlcbiAgfVxuXG4gIGxvZyhpbmZvOiBMb2dFbnRyeSwgY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgICBpZiAoIXRoaXMuc3RyZWFtLmNsb3NlZCAmJiAhdGhpcy5zdHJlYW0uZGVzdHJveWVkICYmIHRoaXMuc3RyZWFtLndyaXRhYmxlKSB7XG4gICAgICBpZiAodGhpcy5kcmFpbmluZykge1xuICAgICAgICBjb25zdCBvayA9IHRoaXMuc3RyZWFtLndyaXRlKHtcbiAgICAgICAgICBtc2c6IGluZm8ubWVzc2FnZSxcbiAgICAgICAgICBsZXZlbDogaW5mby5sZXZlbCxcbiAgICAgICAgICBlbnRpdGllczogdGhpcy5lbnRpdGllcyxcbiAgICAgICAgICBhbGlhc2VzOiB0aGlzLmFsaWFzZXMsXG4gICAgICAgIH0pXG4gICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICB0aGlzLmRyYWluaW5nID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnT3V0cHV0IHN0cmVhbSBjbG9zZWQnKVxuICAgIH1cbiAgICBjYWxsYmFjaygpXG4gIH1cblxuICB3aXRoRW50aXR5KGVudGl0eTogc3RyaW5nKTogUnBjVHJhbnNwb3J0IHtcbiAgICByZXR1cm4gbmV3IFJwY1RyYW5zcG9ydCh7XG4gICAgICBzdHJlYW06IHRoaXMuc3RyZWFtLFxuICAgICAgZW50aXRpZXM6IFsuLi50aGlzLmVudGl0aWVzLCBlbnRpdHldLFxuICAgICAgYWxpYXNlczogdGhpcy5hbGlhc2VzLFxuICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZExvZ2dlcihiYXNlTG9nZ2VyOiBMb2dnZXIsIG5ld0VudGl0eTogc3RyaW5nKTogTG9nZ2VyIHtcbiAgY29uc3QgbmV3VHJhbnNwb3J0cyA9IGJhc2VMb2dnZXIudHJhbnNwb3J0cy5tYXAoKHQpID0+IHtcbiAgICBpZiAodCBpbnN0YW5jZW9mIFJwY1RyYW5zcG9ydCkge1xuICAgICAgcmV0dXJuIHQud2l0aEVudGl0eShuZXdFbnRpdHkpXG4gICAgfVxuICAgIHJldHVybiB0XG4gIH0pXG5cbiAgcmV0dXJuIGNyZWF0ZUxvZ2dlcih7XG4gICAgbGV2ZWw6IGJhc2VMb2dnZXIubGV2ZWwsXG4gICAgZm9ybWF0OiBiYXNlTG9nZ2VyLmZvcm1hdCxcbiAgICBkZWZhdWx0TWV0YTogYmFzZUxvZ2dlci5kZWZhdWx0TWV0YSxcbiAgICB0cmFuc3BvcnRzOiBuZXdUcmFuc3BvcnRzLFxuICB9KVxufVxuIl19
|
package/lib/reader.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ReceivingMessage, ReceivingStreamMessage, RunnerClient } from '@rdfc/proto';
|
|
2
2
|
import { Logger } from 'winston';
|
|
3
3
|
import { Writable } from './runner.js';
|
|
4
|
+
import { ChannelTracker } from './state.js';
|
|
4
5
|
export type Any = {
|
|
5
6
|
string: string;
|
|
6
7
|
} | {
|
|
@@ -20,13 +21,15 @@ export declare class ReaderInstance implements Reader {
|
|
|
20
21
|
readonly uri: string;
|
|
21
22
|
private logger;
|
|
22
23
|
private readonly notifyOrchestrator;
|
|
24
|
+
private readonly tracker;
|
|
23
25
|
private consumers;
|
|
24
|
-
constructor(uri: string, client: RunnerClient, notifyOrchestrator: Writable, logger: Logger);
|
|
26
|
+
constructor(uri: string, client: RunnerClient, notifyOrchestrator: Writable, logger: Logger, tracker?: ChannelTracker);
|
|
25
27
|
anys(): AsyncIterable<Any>;
|
|
26
28
|
strings(): AsyncIterable<string>;
|
|
27
29
|
buffers(): AsyncIterable<Uint8Array>;
|
|
28
30
|
streams(): AsyncIterable<AsyncGenerator<Uint8Array>>;
|
|
29
31
|
handleMsg(msg: ReceivingMessage): void;
|
|
32
|
+
private hasClosed;
|
|
30
33
|
close(): void;
|
|
31
34
|
handleStreamingMessage({ channel, globalSequenceNumber, }: ReceivingStreamMessage): Promise<void>;
|
|
32
35
|
}
|