dbctx 1.4.6 → 2.0.1
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/dist/app/assemble.d.mts +2 -2
- package/dist/app/assemble.d.mts.map +1 -1
- package/dist/app/assemble.mjs +37 -16
- package/dist/app/db.d.mts.map +1 -1
- package/dist/app/db.mjs +3 -2
- package/dist/app/detect.d.mts +1 -0
- package/dist/app/detect.d.mts.map +1 -1
- package/dist/app/detect.mjs +3 -2
- package/dist/app/list.d.mts +4 -0
- package/dist/app/list.d.mts.map +1 -0
- package/dist/app/list.mjs +93 -0
- package/dist/app/load-introspection.d.mts +26 -0
- package/dist/app/load-introspection.d.mts.map +1 -0
- package/dist/app/load-introspection.mjs +89 -0
- package/dist/app/login.d.mts +2 -0
- package/dist/app/login.d.mts.map +1 -0
- package/dist/app/login.mjs +69 -0
- package/dist/app/open-url.d.mts +2 -0
- package/dist/app/open-url.d.mts.map +1 -1
- package/dist/app/open-url.mjs +8 -3
- package/dist/app/sample.d.mts +24 -0
- package/dist/app/sample.d.mts.map +1 -0
- package/dist/app/sample.mjs +257 -0
- package/dist/app/session.d.mts +3 -2
- package/dist/app/session.d.mts.map +1 -1
- package/dist/app/session.mjs +46 -6
- package/dist/app/ssh.d.mts.map +1 -1
- package/dist/app/ssh.mjs +12 -1
- package/dist/app/tail.d.mts +13 -0
- package/dist/app/tail.d.mts.map +1 -0
- package/dist/app/tail.mjs +168 -0
- package/dist/db/check-constraints.d.mts +9 -0
- package/dist/db/check-constraints.d.mts.map +1 -0
- package/dist/db/check-constraints.mjs +17 -0
- package/dist/db/custom-types.d.mts +26 -0
- package/dist/db/custom-types.d.mts.map +1 -0
- package/dist/db/custom-types.mjs +61 -0
- package/dist/db/extensions.d.mts +8 -0
- package/dist/db/extensions.d.mts.map +1 -0
- package/dist/db/extensions.mjs +14 -0
- package/dist/db/foreign-keys.mjs +3 -3
- package/dist/db/functions.d.mts +11 -0
- package/dist/db/functions.d.mts.map +1 -0
- package/dist/db/functions.mjs +23 -0
- package/dist/db/index.d.mts +10 -1
- package/dist/db/index.d.mts.map +1 -1
- package/dist/db/index.mjs +11 -2
- package/dist/db/planner-stats.d.mts +33 -0
- package/dist/db/planner-stats.d.mts.map +1 -0
- package/dist/db/planner-stats.mjs +103 -0
- package/dist/db/relations.d.mts +1 -0
- package/dist/db/relations.d.mts.map +1 -1
- package/dist/db/relations.mjs +10 -1
- package/dist/db/rls.d.mts +21 -0
- package/dist/db/rls.d.mts.map +1 -0
- package/dist/db/rls.mjs +48 -0
- package/dist/db/sample.d.mts +16 -0
- package/dist/db/sample.d.mts.map +1 -0
- package/dist/db/sample.mjs +73 -0
- package/dist/db/sequences.d.mts +15 -0
- package/dist/db/sequences.d.mts.map +1 -0
- package/dist/db/sequences.mjs +31 -0
- package/dist/db/stats.mjs +3 -3
- package/dist/db/triggers.d.mts +11 -0
- package/dist/db/triggers.d.mts.map +1 -0
- package/dist/db/triggers.mjs +21 -0
- package/dist/flow/events.d.mts +115 -0
- package/dist/flow/events.d.mts.map +1 -0
- package/dist/flow/events.mjs +2 -0
- package/dist/flow/interpreter.d.mts +21 -0
- package/dist/flow/interpreter.d.mts.map +1 -0
- package/dist/flow/interpreter.mjs +605 -0
- package/dist/flow/projection.d.mts +17 -0
- package/dist/flow/projection.d.mts.map +1 -0
- package/dist/flow/projection.mjs +83 -0
- package/dist/flow/projection.test.d.mts +2 -0
- package/dist/flow/projection.test.d.mts.map +1 -0
- package/dist/flow/projection.test.mjs +162 -0
- package/dist/flow/reducer.d.mts +5 -0
- package/dist/flow/reducer.d.mts.map +1 -0
- package/dist/flow/reducer.mjs +306 -0
- package/dist/flow/reducer.test.d.mts +2 -0
- package/dist/flow/reducer.test.d.mts.map +1 -0
- package/dist/flow/reducer.test.mjs +479 -0
- package/dist/flow/run.d.mts +3 -0
- package/dist/flow/run.d.mts.map +1 -0
- package/dist/flow/run.mjs +89 -0
- package/dist/flow/states.d.mts +54 -0
- package/dist/flow/states.d.mts.map +1 -0
- package/dist/flow/states.mjs +39 -0
- package/dist/index.d.mts +11 -0
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +135 -12
- package/dist/lib/atomic-write.d.mts +4 -0
- package/dist/lib/atomic-write.d.mts.map +1 -0
- package/dist/lib/atomic-write.mjs +75 -0
- package/dist/lib/stream-job.d.mts +19 -0
- package/dist/lib/stream-job.d.mts.map +1 -0
- package/dist/lib/stream-job.mjs +55 -0
- package/dist/lib/trpc-url.mjs +2 -2
- package/dist/lib/trpc.mjs +2 -2
- package/dist/logger.d.mts.map +1 -1
- package/dist/logger.mjs +6 -3
- package/dist/providers/TrpcProvider.js +3 -3
- package/dist/store.d.mts +113 -1
- package/dist/store.d.mts.map +1 -1
- package/dist/store.mjs +81 -2
- package/dist/ui/App.d.ts +1 -1
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +32 -4
- package/dist/ui/components/Analyze.d.ts +10 -0
- package/dist/ui/components/Analyze.d.ts.map +1 -0
- package/dist/ui/components/Analyze.js +54 -0
- package/dist/ui/components/Billing.d.ts +10 -0
- package/dist/ui/components/Billing.d.ts.map +1 -0
- package/dist/ui/components/Billing.js +40 -0
- package/dist/ui/components/DB.d.ts.map +1 -1
- package/dist/ui/components/DB.js +2 -2
- package/dist/ui/components/DatabasePicker.d.ts +13 -0
- package/dist/ui/components/DatabasePicker.d.ts.map +1 -0
- package/dist/ui/components/DatabasePicker.js +79 -0
- package/dist/ui/components/Enrich.d.ts +10 -0
- package/dist/ui/components/Enrich.d.ts.map +1 -0
- package/dist/ui/components/Enrich.js +41 -0
- package/dist/ui/components/Gate.js +2 -2
- package/dist/ui/components/Introspect.d.ts.map +1 -1
- package/dist/ui/components/Introspect.js +2 -2
- package/dist/ui/components/IntrospectionUpload.d.ts +10 -0
- package/dist/ui/components/IntrospectionUpload.d.ts.map +1 -0
- package/dist/ui/components/IntrospectionUpload.js +30 -0
- package/dist/ui/components/Login.d.ts +19 -0
- package/dist/ui/components/Login.d.ts.map +1 -0
- package/dist/ui/components/Login.js +38 -0
- package/dist/ui/components/OutputJson.d.ts +10 -0
- package/dist/ui/components/OutputJson.d.ts.map +1 -0
- package/dist/ui/components/OutputJson.js +18 -0
- package/dist/ui/components/SSH.d.ts.map +1 -1
- package/dist/ui/components/SSH.js +2 -2
- package/dist/ui/components/SamplesUpload.d.ts +10 -0
- package/dist/ui/components/SamplesUpload.d.ts.map +1 -0
- package/dist/ui/components/SamplesUpload.js +24 -0
- package/dist/ui/components/Sampling.d.ts +10 -0
- package/dist/ui/components/Sampling.d.ts.map +1 -0
- package/dist/ui/components/Sampling.js +58 -0
- package/dist/ui/components/Session.d.ts.map +1 -1
- package/dist/ui/components/Session.js +4 -4
- package/dist/ui/components/Spinner.d.ts.map +1 -1
- package/dist/ui/components/Spinner.js +17 -5
- package/dist/ui/components/TextInput.d.ts +11 -0
- package/dist/ui/components/TextInput.d.ts.map +1 -0
- package/dist/ui/components/TextInput.js +286 -0
- package/dist/ui/components/UserExplanation.d.ts +10 -0
- package/dist/ui/components/UserExplanation.d.ts.map +1 -0
- package/dist/ui/components/UserExplanation.js +34 -0
- package/dist/validatePaths.d.mts +2 -1
- package/dist/validatePaths.d.mts.map +1 -1
- package/dist/validatePaths.mjs +6 -2
- package/package.json +7 -7
- package/dist/app/index.d.mts +0 -3
- package/dist/app/index.d.mts.map +0 -1
- package/dist/app/index.mjs +0 -82
- package/dist/schemas/index.d.mts +0 -107
- package/dist/schemas/index.d.mts.map +0 -1
- package/dist/schemas/index.mjs +0 -116
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { runInAction } from 'mobx';
|
|
2
|
+
import { DBCTX_DEV } from '../lib/env.mjs';
|
|
3
|
+
import { logger } from '../logger.mjs';
|
|
4
|
+
import { reduce } from './reducer.mjs';
|
|
5
|
+
import { projectStoreFromFlow } from './projection.mjs';
|
|
6
|
+
import { initialFlowState, isTerminal } from './states.mjs';
|
|
7
|
+
import { cleanup, driveSide, initialContext } from './interpreter.mjs';
|
|
8
|
+
// Apply the projection's delta onto the mobx store. Field names match
|
|
9
|
+
// store.steps shape so the Ink UI continues to read what it always did.
|
|
10
|
+
const applyProjection = (store, delta) => {
|
|
11
|
+
runInAction(() => {
|
|
12
|
+
store.steps.ingestion.introspection.state =
|
|
13
|
+
delta.ingestion.introspection.state;
|
|
14
|
+
store.steps.ingestion.introspection.error =
|
|
15
|
+
delta.ingestion.introspection.error;
|
|
16
|
+
// postIntrospection is owned by kickPostIntrospectionPoll +
|
|
17
|
+
// streamPostIntrospection (direct store writes). Projection must not
|
|
18
|
+
// mirror it — flow state never advances past 'queued', so any mirror
|
|
19
|
+
// here would clobber the stream's 'running'/'done' writes on every
|
|
20
|
+
// subsequent dispatch.
|
|
21
|
+
store.steps.sampling.state = delta.sampling.state;
|
|
22
|
+
store.steps.sampling.reused = delta.sampling.reused;
|
|
23
|
+
store.steps.sampling.error = delta.sampling.error;
|
|
24
|
+
Object.assign(store.steps.userExplanation, delta.userExplanation);
|
|
25
|
+
if (delta.account) {
|
|
26
|
+
store.steps.account.state = delta.account.state;
|
|
27
|
+
store.steps.account.error = delta.account.error;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
export const runFlow = async (store) => {
|
|
32
|
+
let state = initialFlowState({
|
|
33
|
+
stopAfter: store.outputOptions.stopAfter,
|
|
34
|
+
sshEnabled: store.steps.sshConnection.enabled,
|
|
35
|
+
fileMaskPath: store.outputOptions.sensitiveMaskPath,
|
|
36
|
+
fromIntrospectionFile: store.outputOptions.useIntrospectionJsonPath !== null,
|
|
37
|
+
outputJSONPath: store.outputOptions.outputIntrospectionJson,
|
|
38
|
+
outputSamplesDir: store.outputOptions.outputSamplesDir,
|
|
39
|
+
explanation: store.outputOptions.explanation,
|
|
40
|
+
});
|
|
41
|
+
const ctx = initialContext();
|
|
42
|
+
let resolveTerminal = () => { };
|
|
43
|
+
const terminalPromise = new Promise((res) => {
|
|
44
|
+
resolveTerminal = res;
|
|
45
|
+
});
|
|
46
|
+
const dispatch = (event) => {
|
|
47
|
+
const prev = state;
|
|
48
|
+
const next = reduce(state, event);
|
|
49
|
+
state = next;
|
|
50
|
+
applyProjection(store, projectStoreFromFlow(next));
|
|
51
|
+
if (isTerminal(next) && !isTerminal(prev)) {
|
|
52
|
+
cleanup(ctx);
|
|
53
|
+
runInAction(() => {
|
|
54
|
+
store.exitRequested = true;
|
|
55
|
+
});
|
|
56
|
+
resolveTerminal();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// Fire side effects for new phases asynchronously. The interpreter
|
|
60
|
+
// dispatches more events back as work resolves.
|
|
61
|
+
if (prev.phase !== next.phase) {
|
|
62
|
+
void driveSide(prev, next, store, ctx, dispatch).catch((err) => {
|
|
63
|
+
logger.error(`flow interpreter error: ${String(err)}`);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
try {
|
|
68
|
+
// Kick off the flow.
|
|
69
|
+
dispatch({ kind: 'start' });
|
|
70
|
+
await terminalPromise;
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
if (DBCTX_DEV) {
|
|
74
|
+
logger.error(`runFlow: ${String(err)}`, { error: err });
|
|
75
|
+
}
|
|
76
|
+
cleanup(ctx);
|
|
77
|
+
}
|
|
78
|
+
// Process exit signal: legacy run() also marked exitRequested at the
|
|
79
|
+
// end. Stop-after paths additionally process.exit(0); preserve that
|
|
80
|
+
// behavior here.
|
|
81
|
+
if (state.phase === 'done' &&
|
|
82
|
+
state.stopAfter !== null &&
|
|
83
|
+
state.stopAfter !== 'sampling') {
|
|
84
|
+
// Match legacy: stop-after ssh-connect / db-connect / introspection
|
|
85
|
+
// hard-exit so the Ink app teardown doesn't linger.
|
|
86
|
+
process.exit(0);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImZsb3cvcnVuLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3JDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDckMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFFLFVBQVUsRUFBa0IsTUFBTSxjQUFjLENBQUM7QUFDM0UsT0FBTyxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFckUsc0VBQXNFO0FBQ3RFLHdFQUF3RTtBQUN4RSxNQUFNLGVBQWUsR0FBRyxDQUNwQixLQUFhLEVBQ2IsS0FBOEMsRUFDMUMsRUFBRTtJQUNOLFdBQVcsQ0FBQyxHQUFHLEVBQUU7UUFDYixLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSztZQUNyQyxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDeEMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUs7WUFDckMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQ3hDLDREQUE0RDtRQUM1RCxxRUFBcUU7UUFDckUscUVBQXFFO1FBQ3JFLG1FQUFtRTtRQUNuRSx1QkFBdUI7UUFDdkIsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ2xELEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxD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RCxxQkFBcUI7UUFDckIsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7UUFDMUIsTUFBTSxlQUFlLENBQUM7SUFDMUIsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDWCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ1osTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUMsS0FBSyxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQscUVBQXFFO0lBQ3JFLG9FQUFvRTtJQUNwRSxpQkFBaUI7SUFDakIsSUFDSSxLQUFLLENBQUMsS0FBSyxLQUFLLE1BQU07UUFDdEIsS0FBSyxDQUFDLFNBQVMsS0FBSyxJQUFJO1FBQ3hCLEtBQUssQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUNoQyxDQUFDO1FBQ0Msb0VBQW9FO1FBQ3BFLG9EQUFvRDtRQUNwRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3J1bkluQWN0aW9ufSBmcm9tICdtb2J4JztcbmltcG9ydCB7REJDVFhfREVWfSBmcm9tICcuLi9saWIvZW52Lm1qcyc7XG5pbXBvcnQge2xvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyLm1qcyc7XG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi9zdG9yZS5tanMnO1xuaW1wb3J0IHR5cGUge1RGbG93RXZlbnR9IGZyb20gJy4vZXZlbnRzLm1qcyc7XG5pbXBvcnQge3JlZHVjZX0gZnJvbSAnLi9yZWR1Y2VyLm1qcyc7XG5pbXBvcnQge3Byb2plY3RTdG9yZUZyb21GbG93fSBmcm9tICcuL3Byb2plY3Rpb24ubWpzJztcbmltcG9ydCB7aW5pdGlhbEZsb3dTdGF0ZSwgaXNUZXJtaW5hbCwgdHlwZSBURmxvd1N0YXRlfSBmcm9tICcuL3N0YXRlcy5tanMnO1xuaW1wb3J0IHtjbGVhbnVwLCBkcml2ZVNpZGUsIGluaXRpYWxDb250ZXh0fSBmcm9tICcuL2ludGVycHJldGVyLm1qcyc7XG5cbi8vIEFwcGx5IHRoZSBwcm9qZWN0aW9uJ3MgZGVsdGEgb250byB0aGUgbW9ieCBzdG9yZS4gRmllbGQgbmFtZXMgbWF0Y2hcbi8vIHN0b3JlLnN0ZXBzIHNoYXBlIHNvIHRoZSBJbmsgVUkgY29udGludWVzIHRvIHJlYWQgd2hhdCBpdCBhbHdheXMgZGlkLlxuY29uc3QgYXBwbHlQcm9qZWN0aW9uID0gKFxuICAgIHN0b3JlOiBUU3RvcmUsXG4gICAgZGVsdGE6IFJldHVyblR5cGU8dHlwZW9mIHByb2plY3RTdG9yZUZyb21GbG93Pixcbik6IHZvaWQgPT4ge1xuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLmludHJvc3BlY3Rpb24uc3RhdGUgPVxuICAgICAgICAgICAgZGVsdGEuaW5nZXN0aW9uLmludHJvc3BlY3Rpb24uc3RhdGU7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5pbnRyb3NwZWN0aW9uLmVycm9yID1cbiAgICAgICAgICAgIGRlbHRhLmluZ2VzdGlvbi5pbnRyb3NwZWN0aW9uLmVycm9yO1xuICAgICAgICAvLyBwb3N0SW50cm9zcGVjdGlvbiBpcyBvd25lZCBieSBraWNrUG9zdEludHJvc3BlY3Rpb25Qb2xsICtcbiAgICAgICAgLy8gc3RyZWFtUG9zdEludHJvc3BlY3Rpb24gKGRpcmVjdCBzdG9yZSB3cml0ZXMpLiBQcm9qZWN0aW9uIG11c3Qgbm90XG4gICAgICAgIC8vIG1pcnJvciBpdCDigJQgZmxvdyBzdGF0ZSBuZXZlciBhZHZhbmNlcyBwYXN0ICdxdWV1ZWQnLCBzbyBhbnkgbWlycm9yXG4gICAgICAgIC8vIGhlcmUgd291bGQgY2xvYmJlciB0aGUgc3RyZWFtJ3MgJ3J1bm5pbmcnLydkb25lJyB3cml0ZXMgb24gZXZlcnlcbiAgICAgICAgLy8gc3Vic2VxdWVudCBkaXNwYXRjaC5cbiAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcuc3RhdGUgPSBkZWx0YS5zYW1wbGluZy5zdGF0ZTtcbiAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcucmV1c2VkID0gZGVsdGEuc2FtcGxpbmcucmV1c2VkO1xuICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5lcnJvciA9IGRlbHRhLnNhbXBsaW5nLmVycm9yO1xuICAgICAgICBPYmplY3QuYXNzaWduKHN0b3JlLnN0ZXBzLnVzZXJFeHBsYW5hdGlvbiwgZGVsdGEudXNlckV4cGxhbmF0aW9uKTtcbiAgICAgICAgaWYgKGRlbHRhLmFjY291bnQpIHtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmFjY291bnQuc3RhdGUgPSBkZWx0YS5hY2NvdW50LnN0YXRlO1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuYWNjb3VudC5lcnJvciA9IGRlbHRhLmFjY291bnQuZXJyb3I7XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBydW5GbG93ID0gYXN5bmMgKHN0b3JlOiBUU3RvcmUpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBsZXQgc3RhdGU6IFRGbG93U3RhdGUgPSBpbml0aWFsRmxvd1N0YXRlKHtcbiAgICAgICAgc3RvcEFmdGVyOiBzdG9yZS5vdXRwdXRPcHRpb25zLnN0b3BBZnRlcixcbiAgICAgICAgc3NoRW5hYmxlZDogc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5lbmFibGVkLFxuICAgICAgICBmaWxlTWFza1BhdGg6IHN0b3JlLm91dHB1dE9wdGlvbnMuc2Vuc2l0aXZlTWFza1BhdGgsXG4gICAgICAgIGZyb21JbnRyb3NwZWN0aW9uRmlsZTpcbiAgICAgICAgICAgIHN0b3JlLm91dHB1dE9wdGlvbnMudXNlSW50cm9zcGVjdGlvbkpzb25QYXRoICE9PSBudWxsLFxuICAgICAgICBvdXRwdXRKU09OUGF0aDogc3RvcmUub3V0cHV0T3B0aW9ucy5vdXRwdXRJbnRyb3NwZWN0aW9uSnNvbixcbiAgICAgICAgb3V0cHV0U2FtcGxlc0Rpcjogc3RvcmUub3V0cHV0T3B0aW9ucy5vdXRwdXRTYW1wbGVzRGlyLFxuICAgICAgICBleHBsYW5hdGlvbjogc3RvcmUub3V0cHV0T3B0aW9ucy5leHBsYW5hdGlvbixcbiAgICB9KTtcbiAgICBjb25zdCBjdHggPSBpbml0aWFsQ29udGV4dCgpO1xuXG4gICAgbGV0IHJlc29sdmVUZXJtaW5hbDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAgIGNvbnN0IHRlcm1pbmFsUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXMpID0+IHtcbiAgICAgICAgcmVzb2x2ZVRlcm1pbmFsID0gcmVzO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZGlzcGF0Y2ggPSAoZXZlbnQ6IFRGbG93RXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgcHJldiA9IHN0YXRlO1xuICAgICAgICBjb25zdCBuZXh0ID0gcmVkdWNlKHN0YXRlLCBldmVudCk7XG4gICAgICAgIHN0YXRlID0gbmV4dDtcbiAgICAgICAgYXBwbHlQcm9qZWN0aW9uKHN0b3JlLCBwcm9qZWN0U3RvcmVGcm9tRmxvdyhuZXh0KSk7XG5cbiAgICAgICAgaWYgKGlzVGVybWluYWwobmV4dCkgJiYgIWlzVGVybWluYWwocHJldikpIHtcbiAgICAgICAgICAgIGNsZWFudXAoY3R4KTtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5leGl0UmVxdWVzdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzb2x2ZVRlcm1pbmFsKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmlyZSBzaWRlIGVmZmVjdHMgZm9yIG5ldyBwaGFzZXMgYXN5bmNocm9ub3VzbHkuIFRoZSBpbnRlcnByZXRlclxuICAgICAgICAvLyBkaXNwYXRjaGVzIG1vcmUgZXZlbnRzIGJhY2sgYXMgd29yayByZXNvbHZlcy5cbiAgICAgICAgaWYgKHByZXYucGhhc2UgIT09IG5leHQucGhhc2UpIHtcbiAgICAgICAgICAgIHZvaWQgZHJpdmVTaWRlKHByZXYsIG5leHQsIHN0b3JlLCBjdHgsIGRpc3BhdGNoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBmbG93IGludGVycHJldGVyIGVycm9yOiAke1N0cmluZyhlcnIpfWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgICAgLy8gS2ljayBvZmYgdGhlIGZsb3cuXG4gICAgICAgIGRpc3BhdGNoKHtraW5kOiAnc3RhcnQnfSk7XG4gICAgICAgIGF3YWl0IHRlcm1pbmFsUHJvbWlzZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKERCQ1RYX0RFVikge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBydW5GbG93OiAke1N0cmluZyhlcnIpfWAsIHtlcnJvcjogZXJyfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYW51cChjdHgpO1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgZXhpdCBzaWduYWw6IGxlZ2FjeSBydW4oKSBhbHNvIG1hcmtlZCBleGl0UmVxdWVzdGVkIGF0IHRoZVxuICAgIC8vIGVuZC4gU3RvcC1hZnRlciBwYXRocyBhZGRpdGlvbmFsbHkgcHJvY2Vzcy5leGl0KDApOyBwcmVzZXJ2ZSB0aGF0XG4gICAgLy8gYmVoYXZpb3IgaGVyZS5cbiAgICBpZiAoXG4gICAgICAgIHN0YXRlLnBoYXNlID09PSAnZG9uZScgJiZcbiAgICAgICAgc3RhdGUuc3RvcEFmdGVyICE9PSBudWxsICYmXG4gICAgICAgIHN0YXRlLnN0b3BBZnRlciAhPT0gJ3NhbXBsaW5nJ1xuICAgICkge1xuICAgICAgICAvLyBNYXRjaCBsZWdhY3k6IHN0b3AtYWZ0ZXIgc3NoLWNvbm5lY3QgLyBkYi1jb25uZWN0IC8gaW50cm9zcGVjdGlvblxuICAgICAgICAvLyBoYXJkLWV4aXQgc28gdGhlIEluayBhcHAgdGVhcmRvd24gZG9lc24ndCBsaW5nZXIuXG4gICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9XG59O1xuIl19
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { TStopAfterStage } from '../store.mjs';
|
|
2
|
+
import type { TPostIntrospectionStage } from '@dbctx/common';
|
|
3
|
+
import type { TSensitiveMask, TTableSampleEvent } from '../app/sample.mjs';
|
|
4
|
+
export type TFlowPhase = 'idle' | 'connecting-ssh' | 'connecting-db' | 'introspecting' | 'output-json' | 'creating-session' | 'awaiting-authorization' | 'awaiting-explanation' | 'preflight-checking' | 'ingesting-introspection' | 'sampling-mask-resolving' | 'sampling' | 'uploading-samples' | 'awaiting-post-sampling' | 'done' | 'error';
|
|
5
|
+
export type TPostIntrospectionSubStatus = {
|
|
6
|
+
readonly state: 'idle' | 'queued' | 'running' | 'done' | 'error';
|
|
7
|
+
readonly jobId: string | null;
|
|
8
|
+
readonly reused: boolean;
|
|
9
|
+
readonly stage: TPostIntrospectionStage | null;
|
|
10
|
+
readonly tokensIn: number | null;
|
|
11
|
+
readonly tokensOut: number | null;
|
|
12
|
+
readonly columnsDone: number | null;
|
|
13
|
+
readonly columnsTotal: number | null;
|
|
14
|
+
readonly error: string | null;
|
|
15
|
+
};
|
|
16
|
+
export type TSamplingSubStatus = {
|
|
17
|
+
readonly mask: TSensitiveMask | null;
|
|
18
|
+
readonly collected: readonly TTableSampleEvent[];
|
|
19
|
+
readonly uploadedTables: number;
|
|
20
|
+
readonly totalTables: number;
|
|
21
|
+
};
|
|
22
|
+
export type TFlowState = {
|
|
23
|
+
readonly phase: TFlowPhase;
|
|
24
|
+
readonly stopAfter: TStopAfterStage | null;
|
|
25
|
+
readonly sshEnabled: boolean;
|
|
26
|
+
readonly fileMaskPath: string | null;
|
|
27
|
+
readonly fromIntrospectionFile: boolean;
|
|
28
|
+
readonly outputJSONPath: string | null;
|
|
29
|
+
readonly outputSamplesDir: string | null;
|
|
30
|
+
readonly explanation: string | null;
|
|
31
|
+
readonly sessionId: string | null;
|
|
32
|
+
readonly revisionId: string | null;
|
|
33
|
+
readonly authToken: string | null;
|
|
34
|
+
readonly samplesAlreadyIngested: boolean;
|
|
35
|
+
readonly tablesNeedingSamples: readonly string[] | null;
|
|
36
|
+
readonly preflightHit: boolean;
|
|
37
|
+
readonly postIntrospection: TPostIntrospectionSubStatus;
|
|
38
|
+
readonly sampling: TSamplingSubStatus;
|
|
39
|
+
readonly errorPhase: TFlowPhase | null;
|
|
40
|
+
readonly errorMessage: string | null;
|
|
41
|
+
};
|
|
42
|
+
export declare const initialPostIntrospection: TPostIntrospectionSubStatus;
|
|
43
|
+
export declare const initialSampling: TSamplingSubStatus;
|
|
44
|
+
export declare const initialFlowState: (args: {
|
|
45
|
+
readonly stopAfter: TStopAfterStage | null;
|
|
46
|
+
readonly sshEnabled: boolean;
|
|
47
|
+
readonly fileMaskPath: string | null;
|
|
48
|
+
readonly fromIntrospectionFile: boolean;
|
|
49
|
+
readonly outputJSONPath: string | null;
|
|
50
|
+
readonly outputSamplesDir: string | null;
|
|
51
|
+
readonly explanation: string | null;
|
|
52
|
+
}) => TFlowState;
|
|
53
|
+
export declare const isTerminal: (state: TFlowState) => boolean;
|
|
54
|
+
//# sourceMappingURL=states.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"states.d.mts","sourceRoot":"./src/","sources":["flow/states.mts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export const initialPostIntrospection = Object.freeze({
|
|
2
|
+
state: 'idle',
|
|
3
|
+
jobId: null,
|
|
4
|
+
reused: false,
|
|
5
|
+
stage: null,
|
|
6
|
+
tokensIn: null,
|
|
7
|
+
tokensOut: null,
|
|
8
|
+
columnsDone: null,
|
|
9
|
+
columnsTotal: null,
|
|
10
|
+
error: null,
|
|
11
|
+
});
|
|
12
|
+
export const initialSampling = Object.freeze({
|
|
13
|
+
mask: null,
|
|
14
|
+
collected: Object.freeze([]),
|
|
15
|
+
uploadedTables: 0,
|
|
16
|
+
totalTables: 0,
|
|
17
|
+
});
|
|
18
|
+
export const initialFlowState = (args) => Object.freeze({
|
|
19
|
+
phase: 'idle',
|
|
20
|
+
stopAfter: args.stopAfter,
|
|
21
|
+
sshEnabled: args.sshEnabled,
|
|
22
|
+
fileMaskPath: args.fileMaskPath,
|
|
23
|
+
fromIntrospectionFile: args.fromIntrospectionFile,
|
|
24
|
+
outputJSONPath: args.outputJSONPath,
|
|
25
|
+
outputSamplesDir: args.outputSamplesDir,
|
|
26
|
+
explanation: args.explanation,
|
|
27
|
+
sessionId: null,
|
|
28
|
+
revisionId: null,
|
|
29
|
+
authToken: null,
|
|
30
|
+
samplesAlreadyIngested: false,
|
|
31
|
+
tablesNeedingSamples: null,
|
|
32
|
+
preflightHit: false,
|
|
33
|
+
postIntrospection: initialPostIntrospection,
|
|
34
|
+
sampling: initialSampling,
|
|
35
|
+
errorPhase: null,
|
|
36
|
+
errorMessage: null,
|
|
37
|
+
});
|
|
38
|
+
export const isTerminal = (state) => state.phase === 'done' || state.phase === 'error';
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGVzLm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImZsb3cvc3RhdGVzLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3RUEsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQ2pDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDVixLQUFLLEVBQUUsTUFBZTtJQUN0QixLQUFLLEVBQUUsSUFBSTtJQUNYLE1BQU0sRUFBRSxLQUFLO0lBQ2IsS0FBSyxFQUFFLElBQUk7SUFDWCxRQUFRLEVBQUUsSUFBSTtJQUNkLFNBQVMsRUFBRSxJQUFJO0lBQ2YsV0FBVyxFQUFFLElBQUk7SUFDakIsWUFBWSxFQUFFLElBQUk7SUFDbEIsS0FBSyxFQUFFLElBQUk7Q0FDZCxDQUFDLENBQUM7QUFFUCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQXVCLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDN0QsSUFBSSxFQUFFLElBQUk7SUFDVixTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFrQyxDQUFDO0lBQzVELGNBQWMsRUFBRSxDQUFDO0lBQ2pCLFdBQVcsRUFBRSxDQUFDO0NBQ2pCLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFRaEMsRUFBYyxFQUFFLENBQ2IsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNWLEtBQUssRUFBRSxNQUFNO0lBQ2IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO0lBQ3pCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtJQUMzQixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7SUFDL0IscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQjtJQUNqRCxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7SUFDbkMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtJQUN2QyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7SUFDN0IsU0FBUyxFQUFFLElBQUk7SUFDZixVQUFVLEVBQUUsSUFBSTtJQUNoQixTQUFTLEVBQUUsSUFBSTtJQUNmLHNCQUFzQixFQUFFLEtBQUs7SUFDN0Isb0JBQW9CLEVBQUUsSUFBSTtJQUMxQixZQUFZLEVBQUUsS0FBSztJQUNuQixpQkFBaUIsRUFBRSx3QkFBd0I7SUFDM0MsUUFBUSxFQUFFLGVBQWU7SUFDekIsVUFBVSxFQUFFLElBQUk7SUFDaEIsWUFBWSxFQUFFLElBQUk7Q0FDckIsQ0FBQyxDQUFDO0FBRVAsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBaUIsRUFBVyxFQUFFLENBQ3JELEtBQUssQ0FBQyxLQUFLLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1RTdG9wQWZ0ZXJTdGFnZX0gZnJvbSAnLi4vc3RvcmUubWpzJztcbmltcG9ydCB0eXBlIHtUUG9zdEludHJvc3BlY3Rpb25TdGFnZX0gZnJvbSAnQGRiY3R4L2NvbW1vbic7XG5pbXBvcnQgdHlwZSB7VFNlbnNpdGl2ZU1hc2ssIFRUYWJsZVNhbXBsZUV2ZW50fSBmcm9tICcuLi9hcHAvc2FtcGxlLm1qcyc7XG5cbi8vIFNpbmdsZSByZWNvcmQgc3RhdGUg4oCUIHBhcmFsbGVsIGNvbmNlcm5zIGV4cHJlc3NlZCBhcyBzdWItc3RhdHVzIGZpZWxkcyxcbi8vIG5vdCBhcyBuZXN0ZWQgc3RhdGUgbWFjaGluZXMuIEtlZXBzIHRoZSByZWR1Y2VyIG9uZSBiaWcgc3dpdGNoIGluc3RlYWRcbi8vIG9mIE4gY29vcmRpbmF0aW5nIG1pbmktbWFjaGluZXMuXG5cbmV4cG9ydCB0eXBlIFRGbG93UGhhc2UgPVxuICAgIHwgJ2lkbGUnXG4gICAgfCAnY29ubmVjdGluZy1zc2gnXG4gICAgfCAnY29ubmVjdGluZy1kYidcbiAgICB8ICdpbnRyb3NwZWN0aW5nJ1xuICAgIHwgJ291dHB1dC1qc29uJ1xuICAgIHwgJ2NyZWF0aW5nLXNlc3Npb24nXG4gICAgfCAnYXdhaXRpbmctYXV0aG9yaXphdGlvbidcbiAgICB8ICdhd2FpdGluZy1leHBsYW5hdGlvbidcbiAgICB8ICdwcmVmbGlnaHQtY2hlY2tpbmcnXG4gICAgfCAnaW5nZXN0aW5nLWludHJvc3BlY3Rpb24nXG4gICAgfCAnc2FtcGxpbmctbWFzay1yZXNvbHZpbmcnXG4gICAgfCAnc2FtcGxpbmcnXG4gICAgfCAndXBsb2FkaW5nLXNhbXBsZXMnXG4gICAgfCAnYXdhaXRpbmctcG9zdC1zYW1wbGluZydcbiAgICB8ICdkb25lJ1xuICAgIHwgJ2Vycm9yJztcblxuLy8gU3ViLXN0YXR1cyBvZiB0aGUgYmFja2dyb3VuZCBwb3N0LWludHJvc3BlY3Rpb24gam9iLiBUcmFja2VkIGFzIGEgZmllbGRcbi8vIHNvIGl0IGNhbiBhZHZhbmNlIGluZGVwZW5kZW50bHkgb2YgdGhlIHByaW1hcnkgcGhhc2UgKGUuZy4gY29tcGxldGVcbi8vIHdoaWxlIHdlJ3JlIHN0aWxsIGluIGBzYW1wbGluZ2AgYmVjYXVzZSBhIGZpbGUgbWFzayBsZXQgdXMgcHJvY2VlZCkuXG5leHBvcnQgdHlwZSBUUG9zdEludHJvc3BlY3Rpb25TdWJTdGF0dXMgPSB7XG4gICAgcmVhZG9ubHkgc3RhdGU6ICdpZGxlJyB8ICdxdWV1ZWQnIHwgJ3J1bm5pbmcnIHwgJ2RvbmUnIHwgJ2Vycm9yJztcbiAgICByZWFkb25seSBqb2JJZDogc3RyaW5nIHwgbnVsbDtcbiAgICByZWFkb25seSByZXVzZWQ6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgc3RhZ2U6IFRQb3N0SW50cm9zcGVjdGlvblN0YWdlIHwgbnVsbDtcbiAgICByZWFkb25seSB0b2tlbnNJbjogbnVtYmVyIHwgbnVsbDtcbiAgICByZWFkb25seSB0b2tlbnNPdXQ6IG51bWJlciB8IG51bGw7XG4gICAgcmVhZG9ubHkgY29sdW1uc0RvbmU6IG51bWJlciB8IG51bGw7XG4gICAgcmVhZG9ubHkgY29sdW1uc1RvdGFsOiBudW1iZXIgfCBudWxsO1xuICAgIHJlYWRvbmx5IGVycm9yOiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgVFNhbXBsaW5nU3ViU3RhdHVzID0ge1xuICAgIHJlYWRvbmx5IG1hc2s6IFRTZW5zaXRpdmVNYXNrIHwgbnVsbDtcbiAgICByZWFkb25seSBjb2xsZWN0ZWQ6IHJlYWRvbmx5IFRUYWJsZVNhbXBsZUV2ZW50W107XG4gICAgcmVhZG9ubHkgdXBsb2FkZWRUYWJsZXM6IG51bWJlcjtcbiAgICByZWFkb25seSB0b3RhbFRhYmxlczogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgVEZsb3dTdGF0ZSA9IHtcbiAgICByZWFkb25seSBwaGFzZTogVEZsb3dQaGFzZTtcbiAgICByZWFkb25seSBzdG9wQWZ0ZXI6IFRTdG9wQWZ0ZXJTdGFnZSB8IG51bGw7XG4gICAgcmVhZG9ubHkgc3NoRW5hYmxlZDogYm9vbGVhbjtcbiAgICByZWFkb25seSBmaWxlTWFza1BhdGg6IHN0cmluZyB8IG51bGw7XG4gICAgcmVhZG9ubHkgZnJvbUludHJvc3BlY3Rpb25GaWxlOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IG91dHB1dEpTT05QYXRoOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlYWRvbmx5IG91dHB1dFNhbXBsZXNEaXI6IHN0cmluZyB8IG51bGw7XG4gICAgcmVhZG9ubHkgZXhwbGFuYXRpb246IHN0cmluZyB8IG51bGw7XG4gICAgcmVhZG9ubHkgc2Vzc2lvbklkOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlYWRvbmx5IHJldmlzaW9uSWQ6IHN0cmluZyB8IG51bGw7XG4gICAgcmVhZG9ubHkgYXV0aFRva2VuOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlYWRvbmx5IHNhbXBsZXNBbHJlYWR5SW5nZXN0ZWQ6IGJvb2xlYW47XG4gICAgLy8gU2VydmVyLXN1cHBsaWVkIGxpc3Qgb2YgdGFibGVzIHRoYXQgbmVlZCBmcmVzaCBzYW1wbGVzIG9uIHRoaXMgcnVuLlxuICAgIC8vIE51bGwgPSBub3QgeWV0IGtub3duIChwcmUtaGFuZHNoYWtlKS4gRW1wdHkgPSBub3RoaW5nIHRvIHNhbXBsZS4gTm9uLVxuICAgIC8vIGVtcHR5ID0gZmlsdGVyIHRoZSBsb2NhbCBzYW1wbGluZyBsb29wIHRvIGp1c3QgdGhlc2UgdGFibGVzLlxuICAgIHJlYWRvbmx5IHRhYmxlc05lZWRpbmdTYW1wbGVzOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGw7XG4gICAgcmVhZG9ubHkgcHJlZmxpZ2h0SGl0OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IHBvc3RJbnRyb3NwZWN0aW9uOiBUUG9zdEludHJvc3BlY3Rpb25TdWJTdGF0dXM7XG4gICAgcmVhZG9ubHkgc2FtcGxpbmc6IFRTYW1wbGluZ1N1YlN0YXR1cztcbiAgICByZWFkb25seSBlcnJvclBoYXNlOiBURmxvd1BoYXNlIHwgbnVsbDtcbiAgICByZWFkb25seSBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgaW5pdGlhbFBvc3RJbnRyb3NwZWN0aW9uOiBUUG9zdEludHJvc3BlY3Rpb25TdWJTdGF0dXMgPVxuICAgIE9iamVjdC5mcmVlemUoe1xuICAgICAgICBzdGF0ZTogJ2lkbGUnIGFzIGNvbnN0LFxuICAgICAgICBqb2JJZDogbnVsbCxcbiAgICAgICAgcmV1c2VkOiBmYWxzZSxcbiAgICAgICAgc3RhZ2U6IG51bGwsXG4gICAgICAgIHRva2Vuc0luOiBudWxsLFxuICAgICAgICB0b2tlbnNPdXQ6IG51bGwsXG4gICAgICAgIGNvbHVtbnNEb25lOiBudWxsLFxuICAgICAgICBjb2x1bW5zVG90YWw6IG51bGwsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgIH0pO1xuXG5leHBvcnQgY29uc3QgaW5pdGlhbFNhbXBsaW5nOiBUU2FtcGxpbmdTdWJTdGF0dXMgPSBPYmplY3QuZnJlZXplKHtcbiAgICBtYXNrOiBudWxsLFxuICAgIGNvbGxlY3RlZDogT2JqZWN0LmZyZWV6ZShbXSBhcyByZWFkb25seSBUVGFibGVTYW1wbGVFdmVudFtdKSxcbiAgICB1cGxvYWRlZFRhYmxlczogMCxcbiAgICB0b3RhbFRhYmxlczogMCxcbn0pO1xuXG5leHBvcnQgY29uc3QgaW5pdGlhbEZsb3dTdGF0ZSA9IChhcmdzOiB7XG4gICAgcmVhZG9ubHkgc3RvcEFmdGVyOiBUU3RvcEFmdGVyU3RhZ2UgfCBudWxsO1xuICAgIHJlYWRvbmx5IHNzaEVuYWJsZWQ6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgZmlsZU1hc2tQYXRoOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlYWRvbmx5IGZyb21JbnRyb3NwZWN0aW9uRmlsZTogYm9vbGVhbjtcbiAgICByZWFkb25seSBvdXRwdXRKU09OUGF0aDogc3RyaW5nIHwgbnVsbDtcbiAgICByZWFkb25seSBvdXRwdXRTYW1wbGVzRGlyOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlYWRvbmx5IGV4cGxhbmF0aW9uOiBzdHJpbmcgfCBudWxsO1xufSk6IFRGbG93U3RhdGUgPT5cbiAgICBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgcGhhc2U6ICdpZGxlJyxcbiAgICAgICAgc3RvcEFmdGVyOiBhcmdzLnN0b3BBZnRlcixcbiAgICAgICAgc3NoRW5hYmxlZDogYXJncy5zc2hFbmFibGVkLFxuICAgICAgICBmaWxlTWFza1BhdGg6IGFyZ3MuZmlsZU1hc2tQYXRoLFxuICAgICAgICBmcm9tSW50cm9zcGVjdGlvbkZpbGU6IGFyZ3MuZnJvbUludHJvc3BlY3Rpb25GaWxlLFxuICAgICAgICBvdXRwdXRKU09OUGF0aDogYXJncy5vdXRwdXRKU09OUGF0aCxcbiAgICAgICAgb3V0cHV0U2FtcGxlc0RpcjogYXJncy5vdXRwdXRTYW1wbGVzRGlyLFxuICAgICAgICBleHBsYW5hdGlvbjogYXJncy5leHBsYW5hdGlvbixcbiAgICAgICAgc2Vzc2lvbklkOiBudWxsLFxuICAgICAgICByZXZpc2lvbklkOiBudWxsLFxuICAgICAgICBhdXRoVG9rZW46IG51bGwsXG4gICAgICAgIHNhbXBsZXNBbHJlYWR5SW5nZXN0ZWQ6IGZhbHNlLFxuICAgICAgICB0YWJsZXNOZWVkaW5nU2FtcGxlczogbnVsbCxcbiAgICAgICAgcHJlZmxpZ2h0SGl0OiBmYWxzZSxcbiAgICAgICAgcG9zdEludHJvc3BlY3Rpb246IGluaXRpYWxQb3N0SW50cm9zcGVjdGlvbixcbiAgICAgICAgc2FtcGxpbmc6IGluaXRpYWxTYW1wbGluZyxcbiAgICAgICAgZXJyb3JQaGFzZTogbnVsbCxcbiAgICAgICAgZXJyb3JNZXNzYWdlOiBudWxsLFxuICAgIH0pO1xuXG5leHBvcnQgY29uc3QgaXNUZXJtaW5hbCA9IChzdGF0ZTogVEZsb3dTdGF0ZSk6IGJvb2xlYW4gPT5cbiAgICBzdGF0ZS5waGFzZSA9PT0gJ2RvbmUnIHx8IHN0YXRlLnBoYXNlID09PSAnZXJyb3InO1xuIl19
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { type TStopAfterStage } from './store.mjs';
|
|
2
3
|
export type TSSLMode = 'disable' | 'allow' | 'prefer' | 'require' | 'verify-ca' | 'verify-full';
|
|
3
4
|
export interface TOptions {
|
|
4
5
|
hostname?: string;
|
|
@@ -14,5 +15,15 @@ export interface TOptions {
|
|
|
14
15
|
sshPort?: number;
|
|
15
16
|
sshUsername?: string;
|
|
16
17
|
sshKey?: string;
|
|
18
|
+
outputIntrospectionJson?: string;
|
|
19
|
+
useIntrospectionJson?: string;
|
|
20
|
+
stopAfter?: TStopAfterStage;
|
|
21
|
+
allowOverwrite?: boolean;
|
|
22
|
+
allowIntrospectionJsonOverwrite?: boolean;
|
|
23
|
+
explanation?: string;
|
|
24
|
+
sensitiveMask?: string;
|
|
25
|
+
outputSamples?: string;
|
|
26
|
+
allowSampleOverwrite?: boolean;
|
|
27
|
+
skipAnalyze?: boolean;
|
|
17
28
|
}
|
|
18
29
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"./src/","sources":["index.mts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"./src/","sources":["index.mts"],"names":[],"mappings":";AAOA,OAAO,EAGH,KAAK,eAAe,EACvB,MAAM,aAAa,CAAC;AA2BrB,MAAM,MAAM,QAAQ,GACd,SAAS,GACT,OAAO,GACP,QAAQ,GACR,SAAS,GACT,WAAW,GACX,aAAa,CAAC;AAEpB,MAAM,WAAW,QAAQ;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB"}
|
package/dist/index.mjs
CHANGED
|
@@ -5,15 +5,17 @@ import { createElement } from 'react';
|
|
|
5
5
|
import { Error } from './ui/components/Error.js';
|
|
6
6
|
import { App } from './ui/App.js';
|
|
7
7
|
import { Splash } from './ui/components/Splash.js';
|
|
8
|
-
import { createAppStore } from './store.mjs';
|
|
8
|
+
import { createAppStore, STOP_AFTER_STAGES, } from './store.mjs';
|
|
9
9
|
import { runInAction } from 'mobx';
|
|
10
|
-
import { validatePathOptions, } from './validatePaths.mjs';
|
|
11
|
-
import {
|
|
10
|
+
import { validatePathOptions, normalizePath, } from './validatePaths.mjs';
|
|
11
|
+
import { runFlow } from './flow/run.mjs';
|
|
12
|
+
import { runList } from './app/list.mjs';
|
|
13
|
+
import { runLogin } from './app/login.mjs';
|
|
12
14
|
import { CLIENT_VERSION } from './lib/version.mjs';
|
|
13
|
-
import { DBCTX_DEV } from '
|
|
15
|
+
import { DBCTX_DEV } from './lib/env.mjs';
|
|
14
16
|
import { scope } from 'scope-utilities';
|
|
15
|
-
import { trpc } from '
|
|
16
|
-
import { readConfig } from './app/config.mjs';
|
|
17
|
+
import { trpc } from './lib/trpc.mjs';
|
|
18
|
+
import { readConfig, flushConfig } from './app/config.mjs';
|
|
17
19
|
import { detectDocker, detectOS, detectShell, detectWSL, detectSystemMemory, detectPackageManager, detectSSHSession, } from './app/detect.mjs';
|
|
18
20
|
import { logger } from './logger.mjs';
|
|
19
21
|
const parseSSHTarget = (target) => {
|
|
@@ -55,7 +57,17 @@ const generate = program
|
|
|
55
57
|
.option('--ssh-port <port>', 'SSH tunnel port (default: 22)', parseInt)
|
|
56
58
|
.option('--ssh-username <user>', 'SSH tunnel username (default: $USER)')
|
|
57
59
|
.option('-i, --ssh-key <path>', 'path to SSH private key (default: ~/.ssh/id_rsa)')
|
|
58
|
-
.
|
|
60
|
+
.option('--output-introspection-json <path>', 'write introspection JSON to file')
|
|
61
|
+
.option('--use-introspection-json <path>', 'load introspection from a previously-saved JSON file (skips live introspection; still connects to DB to verify identity)')
|
|
62
|
+
.option('--stop-after <stage>', 'exit after stage completes (ssh-connect, db-connect, introspection, sampling)')
|
|
63
|
+
.option('--allow-overwrite', 'skip overwrite confirmation for all output files (umbrella for --allow-introspection-json-overwrite and --allow-sample-overwrite)')
|
|
64
|
+
.option('--allow-introspection-json-overwrite', 'skip overwrite confirmation for the introspection JSON file')
|
|
65
|
+
.option('--explanation <text>', 'provide database explanation (skips interactive prompt)')
|
|
66
|
+
.option('--sensitive-mask <path>', 'path to sensitive-mask.json for column exclusion')
|
|
67
|
+
.option('--output-samples <dir>', 'directory for sample output files (activates sampling stage)')
|
|
68
|
+
.option('--allow-sample-overwrite', 'skip overwrite confirmation for sample output directory')
|
|
69
|
+
.option('--skip-analyze', 'skip running ANALYZE on tables during introspection (uses existing planner statistics)')
|
|
70
|
+
.action(async (connectionString, options) => {
|
|
59
71
|
// Show help if no connection config is provided
|
|
60
72
|
const hasCLIConfig = connectionString !== undefined ||
|
|
61
73
|
options.hostname !== undefined ||
|
|
@@ -107,6 +119,26 @@ const generate = program
|
|
|
107
119
|
...options,
|
|
108
120
|
...expandedPaths,
|
|
109
121
|
};
|
|
122
|
+
if (validatedOptions.useIntrospectionJson &&
|
|
123
|
+
validatedOptions.outputIntrospectionJson) {
|
|
124
|
+
render(Error({
|
|
125
|
+
message: '--use-introspection-json cannot be combined with --output-introspection-json (cyclic).',
|
|
126
|
+
}));
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
if (validatedOptions.useIntrospectionJson) {
|
|
130
|
+
if (validatedOptions.skipAnalyze) {
|
|
131
|
+
logger.warn('--skip-analyze is a no-op when --use-introspection-json is set');
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Resolve output introspection path
|
|
135
|
+
const resolvedOutputPath = validatedOptions.outputIntrospectionJson
|
|
136
|
+
? normalizePath(validatedOptions.outputIntrospectionJson)
|
|
137
|
+
: null;
|
|
138
|
+
const resolvedUseIntrospectionPath = validatedOptions.useIntrospectionJson &&
|
|
139
|
+
expandedPaths.useIntrospectionJson
|
|
140
|
+
? expandedPaths.useIntrospectionJson
|
|
141
|
+
: null;
|
|
110
142
|
// Build config and render the app
|
|
111
143
|
const sshDefaults = validatedOptions.ssh
|
|
112
144
|
? parseSSHTarget(validatedOptions.ssh)
|
|
@@ -118,8 +150,40 @@ const generate = program
|
|
|
118
150
|
sshPort: validatedOptions.sshPort ?? sshDefaults?.port,
|
|
119
151
|
sshUsername: validatedOptions.sshUsername ?? sshDefaults?.username,
|
|
120
152
|
};
|
|
121
|
-
const
|
|
122
|
-
|
|
153
|
+
const stopAfter = validatedOptions.stopAfter ?? null;
|
|
154
|
+
if (stopAfter !== null && !STOP_AFTER_STAGES.includes(stopAfter)) {
|
|
155
|
+
render(Error({
|
|
156
|
+
message: `Invalid --stop-after stage "${stopAfter}". Valid stages: ${STOP_AFTER_STAGES.join(', ')}`,
|
|
157
|
+
}));
|
|
158
|
+
process.exit(1);
|
|
159
|
+
}
|
|
160
|
+
const resolvedOutputSamples = validatedOptions.outputSamples
|
|
161
|
+
? normalizePath(validatedOptions.outputSamples)
|
|
162
|
+
: null;
|
|
163
|
+
const resolvedSensitiveMask = validatedOptions.sensitiveMask && expandedPaths.sensitiveMask
|
|
164
|
+
? expandedPaths.sensitiveMask
|
|
165
|
+
: null;
|
|
166
|
+
if (stopAfter === 'sampling' && resolvedOutputSamples === null) {
|
|
167
|
+
render(Error({
|
|
168
|
+
message: '--stop-after=sampling requires --output-samples to be set',
|
|
169
|
+
}));
|
|
170
|
+
process.exit(1);
|
|
171
|
+
}
|
|
172
|
+
const allowOverwriteUmbrella = validatedOptions.allowOverwrite ?? false;
|
|
173
|
+
const store = createAppStore(config, {
|
|
174
|
+
outputIntrospectionJson: resolvedOutputPath,
|
|
175
|
+
useIntrospectionJsonPath: resolvedUseIntrospectionPath,
|
|
176
|
+
stopAfter,
|
|
177
|
+
allowIntrospectionJsonOverwrite: (validatedOptions.allowIntrospectionJsonOverwrite ?? false) ||
|
|
178
|
+
allowOverwriteUmbrella,
|
|
179
|
+
explanation: validatedOptions.explanation ?? null,
|
|
180
|
+
sensitiveMaskPath: resolvedSensitiveMask,
|
|
181
|
+
outputSamplesDir: resolvedOutputSamples,
|
|
182
|
+
allowSampleOverwrite: (validatedOptions.allowSampleOverwrite ?? false) ||
|
|
183
|
+
allowOverwriteUmbrella,
|
|
184
|
+
skipAnalyze: validatedOptions.skipAnalyze ?? false,
|
|
185
|
+
});
|
|
186
|
+
const inkApp = render(createElement(App, { store }));
|
|
123
187
|
if (connectionStringError) {
|
|
124
188
|
runInAction(() => {
|
|
125
189
|
store.steps.databaseConnection.state = 'error';
|
|
@@ -127,7 +191,45 @@ const generate = program
|
|
|
127
191
|
});
|
|
128
192
|
return;
|
|
129
193
|
}
|
|
130
|
-
|
|
194
|
+
runFlow(store);
|
|
195
|
+
await inkApp.waitUntilExit();
|
|
196
|
+
process.exit(0);
|
|
197
|
+
});
|
|
198
|
+
program
|
|
199
|
+
.command('list')
|
|
200
|
+
.description('List databases in your account and pick one to monitor or resume')
|
|
201
|
+
.helpOption('--help', 'display help for command')
|
|
202
|
+
.action(async () => {
|
|
203
|
+
const store = createAppStore({}, {
|
|
204
|
+
outputIntrospectionJson: null,
|
|
205
|
+
useIntrospectionJsonPath: null,
|
|
206
|
+
stopAfter: null,
|
|
207
|
+
allowIntrospectionJsonOverwrite: false,
|
|
208
|
+
explanation: null,
|
|
209
|
+
sensitiveMaskPath: null,
|
|
210
|
+
outputSamplesDir: null,
|
|
211
|
+
allowSampleOverwrite: false,
|
|
212
|
+
skipAnalyze: false,
|
|
213
|
+
});
|
|
214
|
+
const inkApp = render(createElement(App, { store }));
|
|
215
|
+
runList(store, inkApp);
|
|
216
|
+
await inkApp.waitUntilExit();
|
|
217
|
+
process.exit(0);
|
|
218
|
+
});
|
|
219
|
+
program
|
|
220
|
+
.command('login')
|
|
221
|
+
.description('Authenticate the CLI with your dbctx.io account')
|
|
222
|
+
.helpOption('--help', 'display help for command')
|
|
223
|
+
.action(async () => {
|
|
224
|
+
await runLogin();
|
|
225
|
+
});
|
|
226
|
+
program
|
|
227
|
+
.command('logout')
|
|
228
|
+
.description('Clear the stored authentication token')
|
|
229
|
+
.helpOption('--help', 'display help for command')
|
|
230
|
+
.action(async () => {
|
|
231
|
+
await flushConfig();
|
|
232
|
+
console.log('Logged out — auth token cleared.');
|
|
131
233
|
});
|
|
132
234
|
const fireRunTelemetry = async () => {
|
|
133
235
|
const doNotTrack = `${process.env['DO_NOT_TRACK']}`.toLowerCase();
|
|
@@ -136,7 +238,18 @@ const fireRunTelemetry = async () => {
|
|
|
136
238
|
}
|
|
137
239
|
const args = process.argv.slice(2);
|
|
138
240
|
const isHelp = args.includes('--help') || args[0] === 'help';
|
|
139
|
-
const
|
|
241
|
+
const isLogout = args[0] === 'logout';
|
|
242
|
+
const isLogin = args[0] === 'login';
|
|
243
|
+
const isList = args[0] === 'list';
|
|
244
|
+
const subcommand = isHelp
|
|
245
|
+
? 'help'
|
|
246
|
+
: isLogout
|
|
247
|
+
? 'logout'
|
|
248
|
+
: isLogin
|
|
249
|
+
? 'login'
|
|
250
|
+
: isList
|
|
251
|
+
? 'list'
|
|
252
|
+
: 'generate';
|
|
140
253
|
const config = await readConfig();
|
|
141
254
|
return trpc.telemetry.create.mutate({
|
|
142
255
|
type: 'cli.run',
|
|
@@ -150,6 +263,16 @@ const fireRunTelemetry = async () => {
|
|
|
150
263
|
username: args.includes('-U') || args.includes('--username'),
|
|
151
264
|
ssl: ['--sslmode', '--sslcert', '--sslkey', '--sslrootcert'].some((f) => args.includes(f)),
|
|
152
265
|
ssh: args.includes('--ssh') || args.includes('--ssh-host'),
|
|
266
|
+
output_introspection_json: args.includes('--output-introspection-json'),
|
|
267
|
+
use_introspection_json: args.includes('--use-introspection-json'),
|
|
268
|
+
stop_after: args.includes('--stop-after'),
|
|
269
|
+
allow_overwrite: args.includes('--allow-overwrite'),
|
|
270
|
+
allow_introspection_json_overwrite: args.includes('--allow-introspection-json-overwrite'),
|
|
271
|
+
explanation: args.includes('--explanation'),
|
|
272
|
+
sensitive_mask: args.includes('--sensitive-mask'),
|
|
273
|
+
output_samples: args.includes('--output-samples'),
|
|
274
|
+
allow_sample_overwrite: args.includes('--allow-sample-overwrite'),
|
|
275
|
+
skip_analyze: args.includes('--skip-analyze'),
|
|
153
276
|
},
|
|
154
277
|
is_docker: detectDocker(),
|
|
155
278
|
is_ssh_session: detectSSHSession(),
|
|
@@ -170,4 +293,4 @@ catch (err) {
|
|
|
170
293
|
}
|
|
171
294
|
}
|
|
172
295
|
program.parse();
|
|
173
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiaW5kZXgubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxLQUFLLENBQUM7QUFDM0IsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUNwQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDL0MsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNoQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDakQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFDSCxtQkFBbUIsR0FFdEIsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDcEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQ0gsWUFBWSxFQUNaLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsZ0JBQWdCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQTBCcEMsTUFB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QUFFO1FBQ2QsTUFBTSxFQUFFLFNBQVMsRUFBRTtRQUNuQixhQUFhLEVBQUUsa0JBQWtCLEVBQUU7UUFDbkMsZUFBZSxFQUFFLG9CQUFvQixFQUFFO1FBQ3ZDLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztLQUM5QixDQUFDLENBQUM7QUFDUCxDQUFDLENBQUM7QUFFRixJQUFJLENBQUM7SUFDRCxNQUFNLGdCQUFnQixFQUFFLENBQUM7QUFDN0IsQ0FBQztBQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDWCxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ1osTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUMsS0FBSyxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztBQUNMLENBQUM7QUFFRCxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5pbXBvcnQge0NvbW1hbmR9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQge3JlbmRlcn0gZnJvbSAnaW5rJztcbmltcG9ydCB7Y3JlYXRlRWxlbWVudH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtFcnJvcn0gZnJvbSAnLi91aS9jb21wb25lbnRzL0Vycm9yLmpzJztcbmltcG9ydCB7QXBwfSBmcm9tICcuL3VpL0FwcC5qcyc7XG5pbXBvcnQge1NwbGFzaH0gZnJvbSAnLi91aS9jb21wb25lbnRzL1NwbGFzaC5qcyc7XG5pbXBvcnQge2NyZWF0ZUFwcFN0b3JlfSBmcm9tICcuL3N0b3JlLm1qcyc7XG5pbXBvcnQge3J1bkluQWN0aW9ufSBmcm9tICdtb2J4JztcbmltcG9ydCB7XG4gICAgdmFsaWRhdGVQYXRoT3B0aW9ucyxcbiAgICB0eXBlIFRQYXRoVmFsaWRhdGlvbkVycm9yLFxufSBmcm9tICcuL3ZhbGlkYXRlUGF0aHMubWpzJztcbmltcG9ydCB7VENvbm5lY3Rpb25Db25maWd9IGZyb20gJy4vdHlwZXMvY29ubmVjdGlvbi5tanMnO1xuaW1wb3J0IHtydW59IGZyb20gJy4vYXBwL2luZGV4Lm1qcyc7XG5pbXBvcnQge0NMSUVOVF9WRVJTSU9OfSBmcm9tICcuL2xpYi92ZXJzaW9uLm1qcyc7XG5pbXBvcnQge0RCQ1RYX0RFVn0gZnJvbSAnI2NsaWVudC9saWIvZW52Lm1qcyc7XG5pbXBvcnQge3Njb3BlfSBmcm9tICdzY29wZS11dGlsaXRpZXMnO1xuaW1wb3J0IHt0cnBjfSBmcm9tICcjY2xpZW50L2xpYi90cnBjLm1qcyc7XG5pbXBvcnQge3JlYWRDb25maWd9IGZyb20gJy4vYXBwL2NvbmZpZy5tanMnO1xuaW1wb3J0IHtcbiAgICBkZXRlY3REb2NrZXIsXG4gICAgZGV0ZWN0T1MsXG4gICAgZGV0ZWN0U2hlbGwsXG4gICAgZGV0ZWN0V1NMLFxuICAgIGRldGVjdFN5c3RlbU1lbW9yeSxcbiAgICBkZXRlY3RQYWNrYWdlTWFuYWdlcixcbiAgICBkZXRlY3RTU0hTZXNzaW9uLFxufSBmcm9tICcuL2FwcC9kZXRlY3QubWpzJztcbmltcG9ydCB7bG9nZ2VyfSBmcm9tICcuL2xvZ2dlci5tanMnO1xuXG5leHBvcnQgdHlwZSBUU1NMTW9kZSA9XG4gICAgfCAnZGlzYWJsZSdcbiAgICB8ICdhbGxvdydcbiAgICB8ICdwcmVmZXInXG4gICAgfCAncmVxdWlyZSdcbiAgICB8ICd2ZXJpZnktY2EnXG4gICAgfCAndmVyaWZ5LWZ1bGwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRPcHRpb25zIHtcbiAgICBob3N0bmFtZT86IHN0cmluZztcbiAgICBwb3J0PzogbnVtYmVyO1xuICAgIGRhdGFiYXNlPzogc3RyaW5nO1xuICAgIHVzZXJuYW1lPzogc3RyaW5nO1xuICAgIHNzbG1vZGU/OiBUU1NMTW9kZTtcbiAgICBzc2xjZXJ0Pzogc3RyaW5nO1xuICAgIHNzbGtleT86IHN0cmluZztcbiAgICBzc2xyb290Y2VydD86IHN0cmluZztcbiAgICBzc2g/OiBzdHJpbmc7XG4gICAgc3NoSG9zdD86IHN0cmluZztcbiAgICBzc2hQb3J0PzogbnVtYmVyO1xuICAgIHNzaFVzZXJuYW1lPzogc3RyaW5nO1xuICAgIHNzaEtleT86IHN0cmluZztcbn1cblxuY29uc3QgcGFyc2VTU0hUYXJnZXQgPSAoXG4gICAgdGFyZ2V0OiBzdHJpbmcsXG4pOiB7XG4gICAgdXNlcm5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBob3N0OiBzdHJpbmc7XG4gICAgcG9ydDogbnVtYmVyIHwgdW5kZWZpbmVkO1xufSA9PiB7XG4gICAgY29uc3QgYXRJbmRleCA9IHRhcmdldC5pbmRleE9mKCdAJyk7XG4gICAgY29uc3QgdXNlcm5hbWUgPSBhdEluZGV4ID49IDAgPyB0YXJnZXQuc2xpY2UoMCwgYXRJbmRleCkgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgaG9zdFBvcnQgPSBhdEluZGV4ID49IDAgPyB0YXJnZXQuc2xpY2UoYXRJbmRleCArIDEpIDogdGFyZ2V0O1xuICAgIGNvbnN0IGNvbG9uSW5kZXggPSBob3N0UG9ydC5sYXN0SW5kZXhPZignOicpO1xuICAgIGNvbnN0IGhvc3QgPSBjb2xvbkluZGV4ID49IDAgPyBob3N0UG9ydC5zbGljZSgwLCBjb2xvbkluZGV4KSA6IGhvc3RQb3J0O1xuICAgIGNvbnN0IHBvcnQgPVxuICAgICAgICBjb2xvbkluZGV4ID49IDBcbiAgICAgICAgICAgID8gcGFyc2VJbnQoaG9zdFBvcnQuc2xpY2UoY29sb25JbmRleCArIDEpLCAxMClcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHt1c2VybmFtZSwgaG9zdCwgcG9ydH07XG59O1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxucHJvZ3JhbVxuICAgIC5uYW1lKCdkYmN0eCcpXG4gICAgLnZlcnNpb24oQ0xJRU5UX1ZFUlNJT04pXG4gICAgLmhlbHBPcHRpb24oJy0taGVscCcsICdkaXNwbGF5IGhlbHAgZm9yIGNvbW1hbmQnKVxuICAgIC5hZGRIZWxwVGV4dCgnYmVmb3JlQWxsJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7dW5tb3VudH0gPSByZW5kZXIoY3JlYXRlRWxlbWVudChTcGxhc2gpKTtcbiAgICAgICAgdW5tb3VudCgpO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG5cbmNvbnN0IGdlbmVyYXRlID0gcHJvZ3JhbVxuICAgIC5jb21tYW5kKCdnZW5lcmF0ZScsIHtpc0RlZmF1bHQ6IHRydWV9KVxuICAgIC5kZXNjcmlwdGlvbignQ29ubmVjdCB0byBhIFBvc3RncmVTUUwgZGF0YWJhc2UgYW5kIGdlbmVyYXRlIGNvbnRleHQnKVxuICAgIC5oZWxwT3B0aW9uKCctLWhlbHAnLCAnZGlzcGxheSBoZWxwIGZvciBjb21tYW5kJylcbiAgICAuYXJndW1lbnQoXG4gICAgICAgICdbY29ubmVjdGlvbi1zdHJpbmddJyxcbiAgICAgICAgJ1Bvc3RncmVTUUwgY29ubmVjdGlvbiBzdHJpbmcgKGVudjogREFUQUJBU0VfVVJMKScsXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctaCwgLS1ob3N0bmFtZSA8aG9zdD4nLFxuICAgICAgICAnZGF0YWJhc2UgaG9zdG5hbWUgKGVudjogUEdIT1NULCBkZWZhdWx0OiBsb2NhbGhvc3QpJyxcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy1wLCAtLXBvcnQgPHBvcnQ+JyxcbiAgICAgICAgJ2RhdGFiYXNlIHBvcnQgKGVudjogUEdQT1JULCBkZWZhdWx0OiA1NDMyKScsXG4gICAgICAgIHBhcnNlSW50LFxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgICAnLWQsIC0tZGF0YWJhc2UgPG5hbWU+JyxcbiAgICAgICAgJ2RhdGFiYXNlIG5hbWUgKGVudjogUEdEQVRBQkFTRSwgZGVmYXVsdDogcG9zdGdyZXMpJyxcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy1VLCAtLXVzZXJuYW1lIDx1c2VyPicsXG4gICAgICAgICdkYXRhYmFzZSB1c2VybmFtZSAoZW52OiBQR1VTRVIsIGRlZmF1bHQ6IHBvc3RncmVzKScsXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctLXNzbG1vZGUgPG1vZGU+JyxcbiAgICAgICAgJ1NTTCBtb2RlOiBkaXNhYmxlfGFsbG93fHByZWZlcnxyZXF1aXJlfHZlcmlmeS1jYXx2ZXJpZnktZnVsbCAoZW52OiBQR1NTTE1PREUsIGRlZmF1bHQ6IHByZWZlciknLFxuICAgIClcbiAgICAub3B0aW9uKCctLXNzbGNlcnQgPHBhdGg+JywgJ3BhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIChlbnY6IFBHU1NMQ0VSVCknKVxuICAgIC5vcHRpb24oJy0tc3Nsa2V5IDxwYXRoPicsICdwYXRoIHRvIGNsaWVudCBwcml2YXRlIGtleSAoZW52OiBQR1NTTEtFWSknKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctLXNzbHJvb3RjZXJ0IDxwYXRoPicsXG4gICAgICAgICdwYXRoIHRvIHJvb3QgQ0EgY2VydGlmaWNhdGUgKGVudjogUEdTU0xST09UQ0VSVCknLFxuICAgIClcbiAgICAub3B0aW9uKCctLXNzaCA8dGFyZ2V0PicsICdTU0ggdHVubmVsIHRhcmdldCAodXNlckBob3N0Wzpwb3J0XSknKVxuICAgIC5vcHRpb24oJy0tc3NoLWhvc3QgPGhvc3Q+JywgJ1NTSCB0dW5uZWwgaG9zdCAoYmFzdGlvbi9qdW1wIHNlcnZlciknKVxuICAgIC5vcHRpb24oJy0tc3NoLXBvcnQgPHBvcnQ+JywgJ1NTSCB0dW5uZWwgcG9ydCAoZGVmYXVsdDogMjIpJywgcGFyc2VJbnQpXG4gICAgLm9wdGlvbignLS1zc2gtdXNlcm5hbWUgPHVzZXI+JywgJ1NTSCB0dW5uZWwgdXNlcm5hbWUgKGRlZmF1bHQ6ICRVU0VSKScpXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy1pLCAtLXNzaC1rZXkgPHBhdGg+JyxcbiAgICAgICAgJ3BhdGggdG8gU1NIIHByaXZhdGUga2V5IChkZWZhdWx0OiB+Ly5zc2gvaWRfcnNhKScsXG4gICAgKVxuICAgIC5hY3Rpb24oKGNvbm5lY3Rpb25TdHJpbmc6IHN0cmluZyB8IHVuZGVmaW5lZCwgb3B0aW9uczogVE9wdGlvbnMpID0+IHtcbiAgICAgICAgLy8gU2hvdyBoZWxwIGlmIG5vIGNvbm5lY3Rpb24gY29uZmlnIGlzIHByb3ZpZGVkXG4gICAgICAgIGNvbnN0IGhhc0NMSUNvbmZpZyA9XG4gICAgICAgICAgICBjb25uZWN0aW9uU3RyaW5nICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIG9wdGlvbnMuaG9zdG5hbWUgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgb3B0aW9ucy5wb3J0ICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIG9wdGlvbnMuZGF0YWJhc2UgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgb3B0aW9ucy51c2VybmFtZSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGNvbnN0IGhhc0VudkNvbmZpZyA9IFtcbiAgICAgICAgICAgICdQR0hPU1QnLFxuICAgICAgICAgICAgJ1BHUE9SVCcsXG4gICAgICAgICAgICAnUEdEQVRBQkFTRScsXG4gICAgICAgICAgICAnUEdVU0VSJyxcbiAgICAgICAgICAgICdQR1BBU1NXT1JEJyxcbiAgICAgICAgICAgICdEQVRBQkFTRV9VUkwnLFxuICAgICAgICBdLnNvbWUoKGtleSkgPT4gcHJvY2Vzcy5lbnZba2V5XSAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICBpZiAoIWhhc0NMSUNvbmZpZyAmJiAhaGFzRW52Q29uZmlnKSB7XG4gICAgICAgICAgICBnZW5lcmF0ZS5oZWxwKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSBjb25uZWN0aW9uIHN0cmluZ3MgYXJlIFBvc3RncmVTUUwgVVJMc1xuICAgICAgICBjb25zdCBlZmZlY3RpdmVDb25uZWN0aW9uU3RyaW5nID1cbiAgICAgICAgICAgIGNvbm5lY3Rpb25TdHJpbmcgPz8gcHJvY2Vzcy5lbnZbJ0RBVEFCQVNFX1VSTCddO1xuXG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25TdHJpbmdFcnJvciA9IHNjb3BlKGVmZmVjdGl2ZUNvbm5lY3Rpb25TdHJpbmcpXG4gICAgICAgICAgICAubGV0KChzdHIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVUkwuY2FuUGFyc2Uoc3RyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE1hbGZvcm1lZCBjb25uZWN0aW9uIHN0cmluZyBcIiR7c3RyfVwiOiBub3QgYSB2YWxpZCBVUkxgO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHtwcm90b2NvbH0gPSBuZXcgVVJMKHN0cik7XG4gICAgICAgICAgICAgICAgaWYgKHByb3RvY29sICE9PSAncG9zdGdyZXM6JyAmJiBwcm90b2NvbCAhPT0gJ3Bvc3RncmVzcWw6Jykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEludmFsaWQgY29ubmVjdGlvbiBzdHJpbmcgXCIke3N0cn1cIjogZXhwZWN0ZWQgcG9zdGdyZXM6Ly8gb3IgcG9zdGdyZXNxbDovL2A7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnZhbHVlKCk7XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgcGF0aCBvcHRpb25zIGV4aXN0IG9uIGZpbGVzeXN0ZW1cbiAgICAgICAgY29uc3Qge2Vycm9yczogcGF0aEVycm9ycywgZXhwYW5kZWRQYXRoc30gPVxuICAgICAgICAgICAgdmFsaWRhdGVQYXRoT3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgICBpZiAocGF0aEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2VzID0gcGF0aEVycm9yc1xuICAgICAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgICAgICAgICh7b3B0aW9uLCBwYXRofTogVFBhdGhWYWxpZGF0aW9uRXJyb3IpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBgICAke29wdGlvbn06ICR7cGF0aH1gLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuam9pbignXFxuJyk7XG5cbiAgICAgICAgICAgIHJlbmRlcihcbiAgICAgICAgICAgICAgICBFcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBUaGUgZm9sbG93aW5nIHBhdGhzIGRvIG5vdCBleGlzdDpcXG4ke2Vycm9yTWVzc2FnZXN9YCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlcGxhY2Ugb3JpZ2luYWwgcGF0aHMgd2l0aCBleHBhbmRlZCBwYXRoc1xuICAgICAgICAvLyAofiByZXNvbHZlZCB0byBob21lIGRpcmVjdG9yeSlcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkT3B0aW9uczogVE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgLi4uZXhwYW5kZWRQYXRocyxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBCdWlsZCBjb25maWcgYW5kIHJlbmRlciB0aGUgYXBwXG4gICAgICAgIGNvbnN0IHNzaERlZmF1bHRzID0gdmFsaWRhdGVkT3B0aW9ucy5zc2hcbiAgICAgICAgICAgID8gcGFyc2VTU0hUYXJnZXQodmFsaWRhdGVkT3B0aW9ucy5zc2gpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICBjb25zdCBjb25maWc6IFRDb25uZWN0aW9uQ29uZmlnID0ge1xuICAgICAgICAgICAgY29ubmVjdGlvblN0cmluZzogZWZmZWN0aXZlQ29ubmVjdGlvblN0cmluZyxcbiAgICAgICAgICAgIC4uLnZhbGlkYXRlZE9wdGlvbnMsXG4gICAgICAgICAgICBzc2hIb3N0OiB2YWxpZGF0ZWRPcHRpb25zLnNzaEhvc3QgPz8gc3NoRGVmYXVsdHM/Lmhvc3QsXG4gICAgICAgICAgICBzc2hQb3J0OiB2YWxpZGF0ZWRPcHRpb25zLnNzaFBvcnQgPz8gc3NoRGVmYXVsdHM/LnBvcnQsXG4gICAgICAgICAgICBzc2hVc2VybmFtZTogdmFsaWRhdGVkT3B0aW9ucy5zc2hVc2VybmFtZSA/PyBzc2hEZWZhdWx0cz8udXNlcm5hbWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgc3RvcmUgPSBjcmVhdGVBcHBTdG9yZShjb25maWcpO1xuXG4gICAgICAgIHJlbmRlcihjcmVhdGVFbGVtZW50KEFwcCwge3N0b3JlfSkpO1xuXG4gICAgICAgIGlmIChjb25uZWN0aW9uU3RyaW5nRXJyb3IpIHtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24uc3RhdGUgPSAnZXJyb3InO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5lcnJvciA9IGNvbm5lY3Rpb25TdHJpbmdFcnJvcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcnVuKHN0b3JlKTtcbiAgICB9KTtcblxuY29uc3QgZmlyZVJ1blRlbGVtZXRyeSA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkb05vdFRyYWNrID0gYCR7cHJvY2Vzcy5lbnZbJ0RPX05PVF9UUkFDSyddfWAudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChkb05vdFRyYWNrID09PSAnMScgfHwgZG9Ob3RUcmFjayA9PT0gJ3RydWUnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcmdzID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpO1xuICAgIGNvbnN0IGlzSGVscCA9IGFyZ3MuaW5jbHVkZXMoJy0taGVscCcpIHx8IGFyZ3NbMF0gPT09ICdoZWxwJztcbiAgICBjb25zdCBzdWJjb21tYW5kID0gaXNIZWxwID8gJ2hlbHAnIDogJ2dlbmVyYXRlJztcblxuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHJlYWRDb25maWcoKTtcblxuICAgIHJldHVybiB0cnBjLnRlbGVtZXRyeS5jcmVhdGUubXV0YXRlKHtcbiAgICAgICAgdHlwZTogJ2NsaS5ydW4nLFxuICAgICAgICBzdWJjb21tYW5kLFxuICAgICAgICBmbGFnczoge1xuICAgICAgICAgICAgaGVscDogaXNIZWxwLFxuICAgICAgICAgICAgY29ubmVjdGlvbl9zdHJpbmc6IGFyZ3Muc29tZShcbiAgICAgICAgICAgICAgICAoYSkgPT4gIWEuc3RhcnRzV2l0aCgnLScpICYmIGEgIT09ICdnZW5lcmF0ZScgJiYgYSAhPT0gJ2hlbHAnLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGhvc3RuYW1lOiBhcmdzLmluY2x1ZGVzKCctaCcpIHx8IGFyZ3MuaW5jbHVkZXMoJy0taG9zdG5hbWUnKSxcbiAgICAgICAgICAgIHBvcnQ6IGFyZ3MuaW5jbHVkZXMoJy1wJykgfHwgYXJncy5pbmNsdWRlcygnLS1wb3J0JyksXG4gICAgICAgICAgICBkYXRhYmFzZTogYXJncy5pbmNsdWRlcygnLWQnKSB8fCBhcmdzLmluY2x1ZGVzKCctLWRhdGFiYXNlJyksXG4gICAgICAgICAgICB1c2VybmFtZTogYXJncy5pbmNsdWRlcygnLVUnKSB8fCBhcmdzLmluY2x1ZGVzKCctLXVzZXJuYW1lJyksXG4gICAgICAgICAgICBzc2w6IFsnLS1zc2xtb2RlJywgJy0tc3NsY2VydCcsICctLXNzbGtleScsICctLXNzbHJvb3RjZXJ0J10uc29tZShcbiAgICAgICAgICAgICAgICAoZikgPT4gYXJncy5pbmNsdWRlcyhmKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzc2g6IGFyZ3MuaW5jbHVkZXMoJy0tc3NoJykgfHwgYXJncy5pbmNsdWRlcygnLS1zc2gtaG9zdCcpLFxuICAgICAgICB9LFxuICAgICAgICBpc19kb2NrZXI6IGRldGVjdERvY2tlcigpLFxuICAgICAgICBpc19zc2hfc2Vzc2lvbjogZGV0ZWN0U1NIU2Vzc2lvbigpLFxuICAgICAgICBzaGVsbDogZGV0ZWN0U2hlbGwoKSxcbiAgICAgICAgb3M6IGRldGVjdE9TKCksXG4gICAgICAgIGlzX3dzbDogZGV0ZWN0V1NMKCksXG4gICAgICAgIHN5c3RlbV9tZW1vcnk6IGRldGVjdFN5c3RlbU1lbW9yeSgpLFxuICAgICAgICBwYWNrYWdlX21hbmFnZXI6IGRldGVjdFBhY2thZ2VNYW5hZ2VyKCksXG4gICAgICAgIGRldmljZV9pZDogY29uZmlnLmRldmljZV9pZCxcbiAgICB9KTtcbn07XG5cbnRyeSB7XG4gICAgYXdhaXQgZmlyZVJ1blRlbGVtZXRyeSgpO1xufSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKERCQ1RYX0RFVikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYCR7ZXJyfWAsIHtlcnJvcjogZXJyfSk7XG4gICAgfVxufVxuXG5wcm9ncmFtLnBhcnNlKCk7XG4iXX0=
|
|
296
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiaW5kZXgubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxLQUFLLENBQUM7QUFDM0IsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUNwQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDL0MsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNoQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDakQsT0FBTyxFQUNILGNBQWMsRUFDZCxpQkFBaUIsR0FFcEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNqQyxPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLGFBQWEsR0FFaEIsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BDLE9BQU8sRUFBQyxVQUFVLEVBQUUsV0FBVyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDekQsT0FBTyxFQUNILFlBQVksRUFDWixRQUFRLEVBQ1IsV0FBVyxFQUNY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L3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCB7Q29tbWFuZH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7cmVuZGVyfSBmcm9tICdpbmsnO1xuaW1wb3J0IHtjcmVhdGVFbGVtZW50fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0Vycm9yfSBmcm9tICcuL3VpL2NvbXBvbmVudHMvRXJyb3IuanMnO1xuaW1wb3J0IHtBcHB9IGZyb20gJy4vdWkvQXBwLmpzJztcbmltcG9ydCB7U3BsYXNofSBmcm9tICcuL3VpL2NvbXBvbmVudHMvU3BsYXNoLmpzJztcbmltcG9ydCB7XG4gICAgY3JlYXRlQXBwU3RvcmUsXG4gICAgU1RPUF9BRlRFUl9TVEFHRVMsXG4gICAgdHlwZSBUU3RvcEFmdGVyU3RhZ2UsXG59IGZyb20gJy4vc3RvcmUubWpzJztcbmltcG9ydCB7cnVuSW5BY3Rpb259IGZyb20gJ21vYngnO1xuaW1wb3J0IHtcbiAgICB2YWxpZGF0ZVBhdGhPcHRpb25zLFxuICAgIG5vcm1hbGl6ZVBhdGgsXG4gICAgdHlwZSBUUGF0aFZhbGlkYXRpb25FcnJvcixcbn0gZnJvbSAnLi92YWxpZGF0ZVBhdGhzLm1qcyc7XG5pbXBvcnQge1RDb25uZWN0aW9uQ29uZmlnfSBmcm9tICcuL3R5cGVzL2Nvbm5lY3Rpb24ubWpzJztcbmltcG9ydCB7cnVuRmxvd30gZnJvbSAnLi9mbG93L3J1bi5tanMnO1xuaW1wb3J0IHtydW5MaXN0fSBmcm9tICcuL2FwcC9saXN0Lm1qcyc7XG5pbXBvcnQge3J1bkxvZ2lufSBmcm9tICcuL2FwcC9sb2dpbi5tanMnO1xuaW1wb3J0IHtDTElFTlRfVkVSU0lPTn0gZnJvbSAnLi9saWIvdmVyc2lvbi5tanMnO1xuaW1wb3J0IHtEQkNUWF9ERVZ9IGZyb20gJy4vbGliL2Vudi5tanMnO1xuaW1wb3J0IHtzY29wZX0gZnJvbSAnc2NvcGUtdXRpbGl0aWVzJztcbmltcG9ydCB7dHJwY30gZnJvbSAnLi9saWIvdHJwYy5tanMnO1xuaW1wb3J0IHtyZWFkQ29uZmlnLCBmbHVzaENvbmZpZ30gZnJvbSAnLi9hcHAvY29uZmlnLm1qcyc7XG5pbXBvcnQge1xuICAgIGRldGVjdERvY2tlcixcbiAgICBkZXRlY3RPUyxcbiAgICBkZXRlY3RTaGVsbCxcbiAgICBkZXRlY3RXU0wsXG4gICAgZGV0ZWN0U3lzdGVtTWVtb3J5LFxuICAgIGRldGVjdFBhY2thZ2VNYW5hZ2VyLFxuICAgIGRldGVjdFNTSFNlc3Npb24sXG59IGZyb20gJy4vYXBwL2RldGVjdC5tanMnO1xuaW1wb3J0IHtsb2dnZXJ9IGZyb20gJy4vbG9nZ2VyLm1qcyc7XG5cbmV4cG9ydCB0eXBlIFRTU0xNb2RlID1cbiAgICB8ICdkaXNhYmxlJ1xuICAgIHwgJ2FsbG93J1xuICAgIHwgJ3ByZWZlcidcbiAgICB8ICdyZXF1aXJlJ1xuICAgIHwgJ3ZlcmlmeS1jYSdcbiAgICB8ICd2ZXJpZnktZnVsbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVE9wdGlvbnMge1xuICAgIGhvc3RuYW1lPzogc3RyaW5nO1xuICAgIHBvcnQ/OiBudW1iZXI7XG4gICAgZGF0YWJhc2U/OiBzdHJpbmc7XG4gICAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gICAgc3NsbW9kZT86IFRTU0xNb2RlO1xuICAgIHNzbGNlcnQ/OiBzdHJpbmc7XG4gICAgc3Nsa2V5Pzogc3RyaW5nO1xuICAgIHNzbHJvb3RjZXJ0Pzogc3RyaW5nO1xuICAgIHNzaD86IHN0cmluZztcbiAgICBzc2hIb3N0Pzogc3RyaW5nO1xuICAgIHNzaFBvcnQ/OiBudW1iZXI7XG4gICAgc3NoVXNlcm5hbWU/OiBzdHJpbmc7XG4gICAgc3NoS2V5Pzogc3RyaW5nO1xuICAgIG91dHB1dEludHJvc3BlY3Rpb25Kc29uPzogc3RyaW5nO1xuICAgIHVzZUludHJvc3BlY3Rpb25Kc29uPzogc3RyaW5nO1xuICAgIHN0b3BBZnRlcj86IFRTdG9wQWZ0ZXJTdGFnZTtcbiAgICBhbGxvd092ZXJ3cml0ZT86IGJvb2xlYW47XG4gICAgYWxsb3dJbnRyb3NwZWN0aW9uSnNvbk92ZXJ3cml0ZT86IGJvb2xlYW47XG4gICAgZXhwbGFuYXRpb24/OiBzdHJpbmc7XG4gICAgc2Vuc2l0aXZlTWFzaz86IHN0cmluZztcbiAgICBvdXRwdXRTYW1wbGVzPzogc3RyaW5nO1xuICAgIGFsbG93U2FtcGxlT3ZlcndyaXRlPzogYm9vbGVhbjtcbiAgICBza2lwQW5hbHl6ZT86IGJvb2xlYW47XG59XG5cbmNvbnN0IHBhcnNlU1NIVGFyZ2V0ID0gKFxuICAgIHRhcmdldDogc3RyaW5nLFxuKToge1xuICAgIHVzZXJuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaG9zdDogc3RyaW5nO1xuICAgIHBvcnQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbn0gPT4ge1xuICAgIGNvbnN0IGF0SW5kZXggPSB0YXJnZXQuaW5kZXhPZignQCcpO1xuICAgIGNvbnN0IHVzZXJuYW1lID0gYXRJbmRleCA+PSAwID8gdGFyZ2V0LnNsaWNlKDAsIGF0SW5kZXgpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGhvc3RQb3J0ID0gYXRJbmRleCA+PSAwID8gdGFyZ2V0LnNsaWNlKGF0SW5kZXggKyAxKSA6IHRhcmdldDtcbiAgICBjb25zdCBjb2xvbkluZGV4ID0gaG9zdFBvcnQubGFzdEluZGV4T2YoJzonKTtcbiAgICBjb25zdCBob3N0ID0gY29sb25JbmRleCA+PSAwID8gaG9zdFBvcnQuc2xpY2UoMCwgY29sb25JbmRleCkgOiBob3N0UG9ydDtcbiAgICBjb25zdCBwb3J0ID1cbiAgICAgICAgY29sb25JbmRleCA+PSAwXG4gICAgICAgICAgICA/IHBhcnNlSW50KGhvc3RQb3J0LnNsaWNlKGNvbG9uSW5kZXggKyAxKSwgMTApXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7dXNlcm5hbWUsIGhvc3QsIHBvcnR9O1xufTtcblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW1cbiAgICAubmFtZSgnZGJjdHgnKVxuICAgIC52ZXJzaW9uKENMSUVOVF9WRVJTSU9OKVxuICAgIC5oZWxwT3B0aW9uKCctLWhlbHAnLCAnZGlzcGxheSBoZWxwIGZvciBjb21tYW5kJylcbiAgICAuYWRkSGVscFRleHQoJ2JlZm9yZUFsbCcsICgpID0+IHtcbiAgICAgICAgY29uc3Qge3VubW91bnR9ID0gcmVuZGVyKGNyZWF0ZUVsZW1lbnQoU3BsYXNoKSk7XG4gICAgICAgIHVubW91bnQoKTtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH0pO1xuXG5jb25zdCBnZW5lcmF0ZSA9IHByb2dyYW1cbiAgICAuY29tbWFuZCgnZ2VuZXJhdGUnLCB7aXNEZWZhdWx0OiB0cnVlfSlcbiAgICAuZGVzY3JpcHRpb24oJ0Nvbm5lY3QgdG8gYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGFuZCBnZW5lcmF0ZSBjb250ZXh0JylcbiAgICAuaGVscE9wdGlvbignLS1oZWxwJywgJ2Rpc3BsYXkgaGVscCBmb3IgY29tbWFuZCcpXG4gICAgLmFyZ3VtZW50KFxuICAgICAgICAnW2Nvbm5lY3Rpb24tc3RyaW5nXScsXG4gICAgICAgICdQb3N0Z3JlU1FMIGNvbm5lY3Rpb24gc3RyaW5nIChlbnY6IERBVEFCQVNFX1VSTCknLFxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgICAnLWgsIC0taG9zdG5hbWUgPGhvc3Q+JyxcbiAgICAgICAgJ2RhdGFiYXNlIGhvc3RuYW1lIChlbnY6IFBHSE9TVCwgZGVmYXVsdDogbG9jYWxob3N0KScsXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctcCwgLS1wb3J0IDxwb3J0PicsXG4gICAgICAgICdkYXRhYmFzZSBwb3J0IChlbnY6IFBHUE9SVCwgZGVmYXVsdDogNTQzMiknLFxuICAgICAgICBwYXJzZUludCxcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy1kLCAtLWRhdGFiYXNlIDxuYW1lPicsXG4gICAgICAgICdkYXRhYmFzZSBuYW1lIChlbnY6IFBHREFUQUJBU0UsIGRlZmF1bHQ6IHBvc3RncmVzKScsXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctVSwgLS11c2VybmFtZSA8dXNlcj4nLFxuICAgICAgICAnZGF0YWJhc2UgdXNlcm5hbWUgKGVudjogUEdVU0VSLCBkZWZhdWx0OiBwb3N0Z3JlcyknLFxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgICAnLS1zc2xtb2RlIDxtb2RlPicsXG4gICAgICAgICdTU0wgbW9kZTogZGlzYWJsZXxhbGxvd3xwcmVmZXJ8cmVxdWlyZXx2ZXJpZnktY2F8dmVyaWZ5LWZ1bGwgKGVudjogUEdTU0xNT0RFLCBkZWZhdWx0OiBwcmVmZXIpJyxcbiAgICApXG4gICAgLm9wdGlvbignLS1zc2xjZXJ0IDxwYXRoPicsICdwYXRoIHRvIGNsaWVudCBjZXJ0aWZpY2F0ZSAoZW52OiBQR1NTTENFUlQpJylcbiAgICAub3B0aW9uKCctLXNzbGtleSA8cGF0aD4nLCAncGF0aCB0byBjbGllbnQgcHJpdmF0ZSBrZXkgKGVudjogUEdTU0xLRVkpJylcbiAgICAub3B0aW9uKFxuICAgICAgICAnLS1zc2xyb290Y2VydCA8cGF0aD4nLFxuICAgICAgICAncGF0aCB0byByb290IENBIGNlcnRpZmljYXRlIChlbnY6IFBHU1NMUk9PVENFUlQpJyxcbiAgICApXG4gICAgLm9wdGlvbignLS1zc2ggPHRhcmdldD4nLCAnU1NIIHR1bm5lbCB0YXJnZXQgKHVzZXJAaG9zdFs6cG9ydF0pJylcbiAgICAub3B0aW9uKCctLXNzaC1ob3N0IDxob3N0PicsICdTU0ggdHVubmVsIGhvc3QgKGJhc3Rpb24vanVtcCBzZXJ2ZXIpJylcbiAgICAub3B0aW9uKCctLXNzaC1wb3J0IDxwb3J0PicsICdTU0ggdHVubmVsIHBvcnQgKGRlZmF1bHQ6IDIyKScsIHBhcnNlSW50KVxuICAgIC5vcHRpb24oJy0tc3NoLXVzZXJuYW1lIDx1c2VyPicsICdTU0ggdHVubmVsIHVzZXJuYW1lIChkZWZhdWx0OiAkVVNFUiknKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctaSwgLS1zc2gta2V5IDxwYXRoPicsXG4gICAgICAgICdwYXRoIHRvIFNTSCBwcml2YXRlIGtleSAoZGVmYXVsdDogfi8uc3NoL2lkX3JzYSknLFxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgICAnLS1vdXRwdXQtaW50cm9zcGVjdGlvbi1qc29uIDxwYXRoPicsXG4gICAgICAgICd3cml0ZSBpbnRyb3NwZWN0aW9uIEpTT04gdG8gZmlsZScsXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctLXVzZS1pbnRyb3NwZWN0aW9uLWpzb24gPHBhdGg+JyxcbiAgICAgICAgJ2xvYWQgaW50cm9zcGVjdGlvbiBmcm9tIGEgcHJldmlvdXNseS1zYXZlZCBKU09OIGZpbGUgKHNraXBzIGxpdmUgaW50cm9zcGVjdGlvbjsgc3RpbGwgY29ubmVjdHMgdG8gREIgdG8gdmVyaWZ5IGlkZW50aXR5KScsXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctLXN0b3AtYWZ0ZXIgPHN0YWdlPicsXG4gICAgICAgICdleGl0IGFmdGVyIHN0YWdlIGNvbXBsZXRlcyAoc3NoLWNvbm5lY3QsIGRiLWNvbm5lY3QsIGludHJvc3BlY3Rpb24sIHNhbXBsaW5nKScsXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctLWFsbG93LW92ZXJ3cml0ZScsXG4gICAgICAgICdza2lwIG92ZXJ3cml0ZSBjb25maXJtYXRpb24gZm9yIGFsbCBvdXRwdXQgZmlsZXMgKHVtYnJlbGxhIGZvciAtLWFsbG93LWludHJvc3BlY3Rpb24tanNvbi1vdmVyd3JpdGUgYW5kIC0tYWxsb3ctc2FtcGxlLW92ZXJ3cml0ZSknLFxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgICAnLS1hbGxvdy1pbnRyb3NwZWN0aW9uLWpzb24tb3ZlcndyaXRlJyxcbiAgICAgICAgJ3NraXAgb3ZlcndyaXRlIGNvbmZpcm1hdGlvbiBmb3IgdGhlIGludHJvc3BlY3Rpb24gSlNPTiBmaWxlJyxcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy0tZXhwbGFuYXRpb24gPHRleHQ+JyxcbiAgICAgICAgJ3Byb3ZpZGUgZGF0YWJhc2UgZXhwbGFuYXRpb24gKHNraXBzIGludGVyYWN0aXZlIHByb21wdCknLFxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgICAnLS1zZW5zaXRpdmUtbWFzayA8cGF0aD4nLFxuICAgICAgICAncGF0aCB0byBzZW5zaXRpdmUtbWFzay5qc29uIGZvciBjb2x1bW4gZXhjbHVzaW9uJyxcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy0tb3V0cHV0LXNhbXBsZXMgPGRpcj4nLFxuICAgICAgICAnZGlyZWN0b3J5IGZvciBzYW1wbGUgb3V0cHV0IGZpbGVzIChhY3RpdmF0ZXMgc2FtcGxpbmcgc3RhZ2UpJyxcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy0tYWxsb3ctc2FtcGxlLW92ZXJ3cml0ZScsXG4gICAgICAgICdza2lwIG92ZXJ3cml0ZSBjb25maXJtYXRpb24gZm9yIHNhbXBsZSBvdXRwdXQgZGlyZWN0b3J5JyxcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy0tc2tpcC1hbmFseXplJyxcbiAgICAgICAgJ3NraXAgcnVubmluZyBBTkFMWVpFIG9uIHRhYmxlcyBkdXJpbmcgaW50cm9zcGVjdGlvbiAodXNlcyBleGlzdGluZyBwbGFubmVyIHN0YXRpc3RpY3MpJyxcbiAgICApXG4gICAgLmFjdGlvbihhc3luYyAoY29ubmVjdGlvblN0cmluZzogc3RyaW5nIHwgdW5kZWZpbmVkLCBvcHRpb25zOiBUT3B0aW9ucykgPT4ge1xuICAgICAgICAvLyBTaG93IGhlbHAgaWYgbm8gY29ubmVjdGlvbiBjb25maWcgaXMgcHJvdmlkZWRcbiAgICAgICAgY29uc3QgaGFzQ0xJQ29uZmlnID1cbiAgICAgICAgICAgIGNvbm5lY3Rpb25TdHJpbmcgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgb3B0aW9ucy5ob3N0bmFtZSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICBvcHRpb25zLnBvcnQgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgb3B0aW9ucy5kYXRhYmFzZSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICBvcHRpb25zLnVzZXJuYW1lICE9PSB1bmRlZmluZWQ7XG5cbiAgICAgICAgY29uc3QgaGFzRW52Q29uZmlnID0gW1xuICAgICAgICAgICAgJ1BHSE9TVCcsXG4gICAgICAgICAgICAnUEdQT1JUJyxcbiAgICAgICAgICAgICdQR0RBVEFCQVNFJyxcbiAgICAgICAgICAgICdQR1VTRVInLFxuICAgICAgICAgICAgJ1BHUEFTU1dPUkQnLFxuICAgICAgICAgICAgJ0RBVEFCQVNFX1VSTCcsXG4gICAgICAgIF0uc29tZSgoa2V5KSA9PiBwcm9jZXNzLmVudltrZXldICE9PSB1bmRlZmluZWQpO1xuXG4gICAgICAgIGlmICghaGFzQ0xJQ29uZmlnICYmICFoYXNFbnZDb25maWcpIHtcbiAgICAgICAgICAgIGdlbmVyYXRlLmhlbHAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGNvbm5lY3Rpb24gc3RyaW5ncyBhcmUgUG9zdGdyZVNRTCBVUkxzXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUNvbm5lY3Rpb25TdHJpbmcgPVxuICAgICAgICAgICAgY29ubmVjdGlvblN0cmluZyA/PyBwcm9jZXNzLmVudlsnREFUQUJBU0VfVVJMJ107XG5cbiAgICAgICAgY29uc3QgY29ubmVjdGlvblN0cmluZ0Vycm9yID0gc2NvcGUoZWZmZWN0aXZlQ29ubmVjdGlvblN0cmluZylcbiAgICAgICAgICAgIC5sZXQoKHN0cikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdHIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIVVSTC5jYW5QYXJzZShzdHIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTWFsZm9ybWVkIGNvbm5lY3Rpb24gc3RyaW5nIFwiJHtzdHJ9XCI6IG5vdCBhIHZhbGlkIFVSTGA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qge3Byb3RvY29sfSA9IG5ldyBVUkwoc3RyKTtcbiAgICAgICAgICAgICAgICBpZiAocHJvdG9jb2wgIT09ICdwb3N0Z3JlczonICYmIHByb3RvY29sICE9PSAncG9zdGdyZXNxbDonKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgSW52YWxpZCBjb25uZWN0aW9uIHN0cmluZyBcIiR7c3RyfVwiOiBleHBlY3RlZCBwb3N0Z3JlczovLyBvciBwb3N0Z3Jlc3FsOi8vYDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudmFsdWUoKTtcblxuICAgICAgICAvLyBWYWxpZGF0ZSBwYXRoIG9wdGlvbnMgZXhpc3Qgb24gZmlsZXN5c3RlbVxuICAgICAgICBjb25zdCB7ZXJyb3JzOiBwYXRoRXJyb3JzLCBleHBhbmRlZFBhdGhzfSA9XG4gICAgICAgICAgICB2YWxpZGF0ZVBhdGhPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChwYXRoRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZXMgPSBwYXRoRXJyb3JzXG4gICAgICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgICAgICAgKHtvcHRpb24sIHBhdGh9OiBUUGF0aFZhbGlkYXRpb25FcnJvcikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGAgICR7b3B0aW9ufTogJHtwYXRofWAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5qb2luKCdcXG4nKTtcblxuICAgICAgICAgICAgcmVuZGVyKFxuICAgICAgICAgICAgICAgIEVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYFRoZSBmb2xsb3dpbmcgcGF0aHMgZG8gbm90IGV4aXN0OlxcbiR7ZXJyb3JNZXNzYWdlc31gLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVwbGFjZSBvcmlnaW5hbCBwYXRocyB3aXRoIGV4cGFuZGVkIHBhdGhzXG4gICAgICAgIC8vICh+IHJlc29sdmVkIHRvIGhvbWUgZGlyZWN0b3J5KVxuICAgICAgICBjb25zdCB2YWxpZGF0ZWRPcHRpb25zOiBUT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAuLi5leHBhbmRlZFBhdGhzLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHZhbGlkYXRlZE9wdGlvbnMudXNlSW50cm9zcGVjdGlvbkpzb24gJiZcbiAgICAgICAgICAgIHZhbGlkYXRlZE9wdGlvbnMub3V0cHV0SW50cm9zcGVjdGlvbkpzb25cbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZW5kZXIoXG4gICAgICAgICAgICAgICAgRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICAgICAgICAgICAgJy0tdXNlLWludHJvc3BlY3Rpb24tanNvbiBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtLW91dHB1dC1pbnRyb3NwZWN0aW9uLWpzb24gKGN5Y2xpYykuJyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVkT3B0aW9ucy51c2VJbnRyb3NwZWN0aW9uSnNvbikge1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRlZE9wdGlvbnMuc2tpcEFuYWx5emUpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICAgICAgICAgICAgJy0tc2tpcC1hbmFseXplIGlzIGEgbm8tb3Agd2hlbiAtLXVzZS1pbnRyb3NwZWN0aW9uLWpzb24gaXMgc2V0JyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVzb2x2ZSBvdXRwdXQgaW50cm9zcGVjdGlvbiBwYXRoXG4gICAgICAgIGNvbnN0IHJlc29sdmVkT3V0cHV0UGF0aCA9IHZhbGlkYXRlZE9wdGlvbnMub3V0cHV0SW50cm9zcGVjdGlvbkpzb25cbiAgICAgICAgICAgID8gbm9ybWFsaXplUGF0aCh2YWxpZGF0ZWRPcHRpb25zLm91dHB1dEludHJvc3BlY3Rpb25Kc29uKVxuICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIGNvbnN0IHJlc29sdmVkVXNlSW50cm9zcGVjdGlvblBhdGggPVxuICAgICAgICAgICAgdmFsaWRhdGVkT3B0aW9ucy51c2VJbnRyb3NwZWN0aW9uSnNvbiAmJlxuICAgICAgICAgICAgZXhwYW5kZWRQYXRocy51c2VJbnRyb3NwZWN0aW9uSnNvblxuICAgICAgICAgICAgICAgID8gZXhwYW5kZWRQYXRocy51c2VJbnRyb3NwZWN0aW9uSnNvblxuICAgICAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICAvLyBCdWlsZCBjb25maWcgYW5kIHJlbmRlciB0aGUgYXBwXG4gICAgICAgIGNvbnN0IHNzaERlZmF1bHRzID0gdmFsaWRhdGVkT3B0aW9ucy5zc2hcbiAgICAgICAgICAgID8gcGFyc2VTU0hUYXJnZXQodmFsaWRhdGVkT3B0aW9ucy5zc2gpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICBjb25zdCBjb25maWc6IFRDb25uZWN0aW9uQ29uZmlnID0ge1xuICAgICAgICAgICAgY29ubmVjdGlvblN0cmluZzogZWZmZWN0aXZlQ29ubmVjdGlvblN0cmluZyxcbiAgICAgICAgICAgIC4uLnZhbGlkYXRlZE9wdGlvbnMsXG4gICAgICAgICAgICBzc2hIb3N0OiB2YWxpZGF0ZWRPcHRpb25zLnNzaEhvc3QgPz8gc3NoRGVmYXVsdHM/Lmhvc3QsXG4gICAgICAgICAgICBzc2hQb3J0OiB2YWxpZGF0ZWRPcHRpb25zLnNzaFBvcnQgPz8gc3NoRGVmYXVsdHM/LnBvcnQsXG4gICAgICAgICAgICBzc2hVc2VybmFtZTogdmFsaWRhdGVkT3B0aW9ucy5zc2hVc2VybmFtZSA/PyBzc2hEZWZhdWx0cz8udXNlcm5hbWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgc3RvcEFmdGVyID0gdmFsaWRhdGVkT3B0aW9ucy5zdG9wQWZ0ZXIgPz8gbnVsbDtcblxuICAgICAgICBpZiAoc3RvcEFmdGVyICE9PSBudWxsICYmICFTVE9QX0FGVEVSX1NUQUdFUy5pbmNsdWRlcyhzdG9wQWZ0ZXIpKSB7XG4gICAgICAgICAgICByZW5kZXIoXG4gICAgICAgICAgICAgICAgRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgSW52YWxpZCAtLXN0b3AtYWZ0ZXIgc3RhZ2UgXCIke3N0b3BBZnRlcn1cIi4gVmFsaWQgc3RhZ2VzOiAke1NUT1BfQUZURVJfU1RBR0VTLmpvaW4oJywgJyl9YCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNvbHZlZE91dHB1dFNhbXBsZXMgPSB2YWxpZGF0ZWRPcHRpb25zLm91dHB1dFNhbXBsZXNcbiAgICAgICAgICAgID8gbm9ybWFsaXplUGF0aCh2YWxpZGF0ZWRPcHRpb25zLm91dHB1dFNhbXBsZXMpXG4gICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWRTZW5zaXRpdmVNYXNrID1cbiAgICAgICAgICAgIHZhbGlkYXRlZE9wdGlvbnMuc2Vuc2l0aXZlTWFzayAmJiBleHBhbmRlZFBhdGhzLnNlbnNpdGl2ZU1hc2tcbiAgICAgICAgICAgICAgICA/IGV4cGFuZGVkUGF0aHMuc2Vuc2l0aXZlTWFza1xuICAgICAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICBpZiAoc3RvcEFmdGVyID09PSAnc2FtcGxpbmcnICYmIHJlc29sdmVkT3V0cHV0U2FtcGxlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmVuZGVyKFxuICAgICAgICAgICAgICAgIEVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICctLXN0b3AtYWZ0ZXI9c2FtcGxpbmcgcmVxdWlyZXMgLS1vdXRwdXQtc2FtcGxlcyB0byBiZSBzZXQnLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFsbG93T3ZlcndyaXRlVW1icmVsbGEgPSB2YWxpZGF0ZWRPcHRpb25zLmFsbG93T3ZlcndyaXRlID8/IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHN0b3JlID0gY3JlYXRlQXBwU3RvcmUoY29uZmlnLCB7XG4gICAgICAgICAgICBvdXRwdXRJbnRyb3NwZWN0aW9uSnNvbjogcmVzb2x2ZWRPdXRwdXRQYXRoLFxuICAgICAgICAgICAgdXNlSW50cm9zcGVjdGlvbkpzb25QYXRoOiByZXNvbHZlZFVzZUludHJvc3BlY3Rpb25QYXRoLFxuICAgICAgICAgICAgc3RvcEFmdGVyLFxuICAgICAgICAgICAgYWxsb3dJbnRyb3NwZWN0aW9uSnNvbk92ZXJ3cml0ZTpcbiAgICAgICAgICAgICAgICAodmFsaWRhdGVkT3B0aW9ucy5hbGxvd0ludHJvc3BlY3Rpb25Kc29uT3ZlcndyaXRlID8/IGZhbHNlKSB8fFxuICAgICAgICAgICAgICAgIGFsbG93T3ZlcndyaXRlVW1icmVsbGEsXG4gICAgICAgICAgICBleHBsYW5hdGlvbjogdmFsaWRhdGVkT3B0aW9ucy5leHBsYW5hdGlvbiA/PyBudWxsLFxuICAgICAgICAgICAgc2Vuc2l0aXZlTWFza1BhdGg6IHJlc29sdmVkU2Vuc2l0aXZlTWFzayxcbiAgICAgICAgICAgIG91dHB1dFNhbXBsZXNEaXI6IHJlc29sdmVkT3V0cHV0U2FtcGxlcyxcbiAgICAgICAgICAgIGFsbG93U2FtcGxlT3ZlcndyaXRlOlxuICAgICAgICAgICAgICAgICh2YWxpZGF0ZWRPcHRpb25zLmFsbG93U2FtcGxlT3ZlcndyaXRlID8/IGZhbHNlKSB8fFxuICAgICAgICAgICAgICAgIGFsbG93T3ZlcndyaXRlVW1icmVsbGEsXG4gICAgICAgICAgICBza2lwQW5hbHl6ZTogdmFsaWRhdGVkT3B0aW9ucy5za2lwQW5hbHl6ZSA/PyBmYWxzZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaW5rQXBwID0gcmVuZGVyKGNyZWF0ZUVsZW1lbnQoQXBwLCB7c3RvcmV9KSk7XG5cbiAgICAgICAgaWYgKGNvbm5lY3Rpb25TdHJpbmdFcnJvcikge1xuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5zdGF0ZSA9ICdlcnJvcic7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLmVycm9yID0gY29ubmVjdGlvblN0cmluZ0Vycm9yO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBydW5GbG93KHN0b3JlKTtcbiAgICAgICAgYXdhaXQgaW5rQXBwLndhaXRVbnRpbEV4aXQoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH0pO1xuXG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ2xpc3QnKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgICAgJ0xpc3QgZGF0YWJhc2VzIGluIHlvdXIgYWNjb3VudCBhbmQgcGljayBvbmUgdG8gbW9uaXRvciBvciByZXN1bWUnLFxuICAgIClcbiAgICAuaGVscE9wdGlvbignLS1oZWxwJywgJ2Rpc3BsYXkgaGVscCBmb3IgY29tbWFuZCcpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0b3JlID0gY3JlYXRlQXBwU3RvcmUoXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRJbnRyb3NwZWN0aW9uSnNvbjogbnVsbCxcbiAgICAgICAgICAgICAgICB1c2VJbnRyb3NwZWN0aW9uSnNvblBhdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgc3RvcEFmdGVyOiBudWxsLFxuICAgICAgICAgICAgICAgIGFsbG93SW50cm9zcGVjdGlvbkpzb25PdmVyd3JpdGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGV4cGxhbmF0aW9uOiBudWxsLFxuICAgICAgICAgICAgICAgIHNlbnNpdGl2ZU1hc2tQYXRoOiBudWxsLFxuICAgICAgICAgICAgICAgIG91dHB1dFNhbXBsZXNEaXI6IG51bGwsXG4gICAgICAgICAgICAgICAgYWxsb3dTYW1wbGVPdmVyd3JpdGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNraXBBbmFseXplOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgaW5rQXBwID0gcmVuZGVyKGNyZWF0ZUVsZW1lbnQoQXBwLCB7c3RvcmV9KSk7XG4gICAgICAgIHJ1bkxpc3Qoc3RvcmUsIGlua0FwcCk7XG4gICAgICAgIGF3YWl0IGlua0FwcC53YWl0VW50aWxFeGl0KCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9KTtcblxucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdsb2dpbicpXG4gICAgLmRlc2NyaXB0aW9uKCdBdXRoZW50aWNhdGUgdGhlIENMSSB3aXRoIHlvdXIgZGJjdHguaW8gYWNjb3VudCcpXG4gICAgLmhlbHBPcHRpb24oJy0taGVscCcsICdkaXNwbGF5IGhlbHAgZm9yIGNvbW1hbmQnKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBydW5Mb2dpbigpO1xuICAgIH0pO1xuXG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ2xvZ291dCcpXG4gICAgLmRlc2NyaXB0aW9uKCdDbGVhciB0aGUgc3RvcmVkIGF1dGhlbnRpY2F0aW9uIHRva2VuJylcbiAgICAuaGVscE9wdGlvbignLS1oZWxwJywgJ2Rpc3BsYXkgaGVscCBmb3IgY29tbWFuZCcpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGZsdXNoQ29uZmlnKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdMb2dnZWQgb3V0IOKAlCBhdXRoIHRva2VuIGNsZWFyZWQuJyk7XG4gICAgfSk7XG5cbmNvbnN0IGZpcmVSdW5UZWxlbWV0cnkgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZG9Ob3RUcmFjayA9IGAke3Byb2Nlc3MuZW52WydET19OT1RfVFJBQ0snXX1gLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoZG9Ob3RUcmFjayA9PT0gJzEnIHx8IGRvTm90VHJhY2sgPT09ICd0cnVlJykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXJncyA9IHByb2Nlc3MuYXJndi5zbGljZSgyKTtcbiAgICBjb25zdCBpc0hlbHAgPSBhcmdzLmluY2x1ZGVzKCctLWhlbHAnKSB8fCBhcmdzWzBdID09PSAnaGVscCc7XG4gICAgY29uc3QgaXNMb2dvdXQgPSBhcmdzWzBdID09PSAnbG9nb3V0JztcbiAgICBjb25zdCBpc0xvZ2luID0gYXJnc1swXSA9PT0gJ2xvZ2luJztcbiAgICBjb25zdCBpc0xpc3QgPSBhcmdzWzBdID09PSAnbGlzdCc7XG4gICAgY29uc3Qgc3ViY29tbWFuZCA9IGlzSGVscFxuICAgICAgICA/ICdoZWxwJ1xuICAgICAgICA6IGlzTG9nb3V0XG4gICAgICAgICAgPyAnbG9nb3V0J1xuICAgICAgICAgIDogaXNMb2dpblxuICAgICAgICAgICAgPyAnbG9naW4nXG4gICAgICAgICAgICA6IGlzTGlzdFxuICAgICAgICAgICAgICA/ICdsaXN0J1xuICAgICAgICAgICAgICA6ICdnZW5lcmF0ZSc7XG5cbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCByZWFkQ29uZmlnKCk7XG5cbiAgICByZXR1cm4gdHJwYy50ZWxlbWV0cnkuY3JlYXRlLm11dGF0ZSh7XG4gICAgICAgIHR5cGU6ICdjbGkucnVuJyxcbiAgICAgICAgc3ViY29tbWFuZCxcbiAgICAgICAgZmxhZ3M6IHtcbiAgICAgICAgICAgIGhlbHA6IGlzSGVscCxcbiAgICAgICAgICAgIGNvbm5lY3Rpb25fc3RyaW5nOiBhcmdzLnNvbWUoXG4gICAgICAgICAgICAgICAgKGEpID0+ICFhLnN0YXJ0c1dpdGgoJy0nKSAmJiBhICE9PSAnZ2VuZXJhdGUnICYmIGEgIT09ICdoZWxwJyxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBob3N0bmFtZTogYXJncy5pbmNsdWRlcygnLWgnKSB8fCBhcmdzLmluY2x1ZGVzKCctLWhvc3RuYW1lJyksXG4gICAgICAgICAgICBwb3J0OiBhcmdzLmluY2x1ZGVzKCctcCcpIHx8IGFyZ3MuaW5jbHVkZXMoJy0tcG9ydCcpLFxuICAgICAgICAgICAgZGF0YWJhc2U6IGFyZ3MuaW5jbHVkZXMoJy1kJykgfHwgYXJncy5pbmNsdWRlcygnLS1kYXRhYmFzZScpLFxuICAgICAgICAgICAgdXNlcm5hbWU6IGFyZ3MuaW5jbHVkZXMoJy1VJykgfHwgYXJncy5pbmNsdWRlcygnLS11c2VybmFtZScpLFxuICAgICAgICAgICAgc3NsOiBbJy0tc3NsbW9kZScsICctLXNzbGNlcnQnLCAnLS1zc2xrZXknLCAnLS1zc2xyb290Y2VydCddLnNvbWUoXG4gICAgICAgICAgICAgICAgKGYpID0+IGFyZ3MuaW5jbHVkZXMoZiksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3NoOiBhcmdzLmluY2x1ZGVzKCctLXNzaCcpIHx8IGFyZ3MuaW5jbHVkZXMoJy0tc3NoLWhvc3QnKSxcbiAgICAgICAgICAgIG91dHB1dF9pbnRyb3NwZWN0aW9uX2pzb246IGFyZ3MuaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgJy0tb3V0cHV0LWludHJvc3BlY3Rpb24tanNvbicsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdXNlX2ludHJvc3BlY3Rpb25fanNvbjogYXJncy5pbmNsdWRlcygnLS11c2UtaW50cm9zcGVjdGlvbi1qc29uJyksXG4gICAgICAgICAgICBzdG9wX2FmdGVyOiBhcmdzLmluY2x1ZGVzKCctLXN0b3AtYWZ0ZXInKSxcbiAgICAgICAgICAgIGFsbG93X292ZXJ3cml0ZTogYXJncy5pbmNsdWRlcygnLS1hbGxvdy1vdmVyd3JpdGUnKSxcbiAgICAgICAgICAgIGFsbG93X2ludHJvc3BlY3Rpb25fanNvbl9vdmVyd3JpdGU6IGFyZ3MuaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgJy0tYWxsb3ctaW50cm9zcGVjdGlvbi1qc29uLW92ZXJ3cml0ZScsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZXhwbGFuYXRpb246IGFyZ3MuaW5jbHVkZXMoJy0tZXhwbGFuYXRpb24nKSxcbiAgICAgICAgICAgIHNlbnNpdGl2ZV9tYXNrOiBhcmdzLmluY2x1ZGVzKCctLXNlbnNpdGl2ZS1tYXNrJyksXG4gICAgICAgICAgICBvdXRwdXRfc2FtcGxlczogYXJncy5pbmNsdWRlcygnLS1vdXRwdXQtc2FtcGxlcycpLFxuICAgICAgICAgICAgYWxsb3dfc2FtcGxlX292ZXJ3cml0ZTogYXJncy5pbmNsdWRlcygnLS1hbGxvdy1zYW1wbGUtb3ZlcndyaXRlJyksXG4gICAgICAgICAgICBza2lwX2FuYWx5emU6IGFyZ3MuaW5jbHVkZXMoJy0tc2tpcC1hbmFseXplJyksXG4gICAgICAgIH0sXG4gICAgICAgIGlzX2RvY2tlcjogZGV0ZWN0RG9ja2VyKCksXG4gICAgICAgIGlzX3NzaF9zZXNzaW9uOiBkZXRlY3RTU0hTZXNzaW9uKCksXG4gICAgICAgIHNoZWxsOiBkZXRlY3RTaGVsbCgpLFxuICAgICAgICBvczogZGV0ZWN0T1MoKSxcbiAgICAgICAgaXNfd3NsOiBkZXRlY3RXU0woKSxcbiAgICAgICAgc3lzdGVtX21lbW9yeTogZGV0ZWN0U3lzdGVtTWVtb3J5KCksXG4gICAgICAgIHBhY2thZ2VfbWFuYWdlcjogZGV0ZWN0UGFja2FnZU1hbmFnZXIoKSxcbiAgICAgICAgZGV2aWNlX2lkOiBjb25maWcuZGV2aWNlX2lkLFxuICAgIH0pO1xufTtcblxudHJ5IHtcbiAgICBhd2FpdCBmaXJlUnVuVGVsZW1ldHJ5KCk7XG59IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoREJDVFhfREVWKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgJHtlcnJ9YCwge2Vycm9yOiBlcnJ9KTtcbiAgICB9XG59XG5cbnByb2dyYW0ucGFyc2UoKTtcbiJdfQ==
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const atomicWriteFile: (path: string, data: string, encoding?: BufferEncoding) => Promise<void>;
|
|
2
|
+
export declare const recoverAtomicWrite: (targetPath: string) => Promise<void>;
|
|
3
|
+
export declare const recoverAtomicWritesInDir: (dirPath: string) => Promise<void>;
|
|
4
|
+
//# sourceMappingURL=atomic-write.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic-write.d.mts","sourceRoot":"./src/","sources":["lib/atomic-write.mts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,eAAe,GACxB,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,WAAU,cAAwB,KACnC,OAAO,CAAC,IAAI,CAmBd,CAAC;AA0BF,eAAO,MAAM,kBAAkB,GAAU,YAAY,MAAM,KAAG,OAAO,CAAC,IAAI,CAQzE,CAAC;AAKF,eAAO,MAAM,wBAAwB,GACjC,SAAS,MAAM,KAChB,OAAO,CAAC,IAAI,CA+Bd,CAAC"}
|