@dbos-inc/dbos-sdk 2.1.9-preview → 2.1.12-preview
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/compose.yaml +19 -0
- package/dist/src/dbos-executor.d.ts +0 -4
- package/dist/src/dbos-executor.d.ts.map +1 -1
- package/dist/src/dbos-executor.js +86 -75
- package/dist/src/dbos-executor.js.map +1 -1
- package/dist/src/procedure.d.ts +1 -2
- package/dist/src/procedure.d.ts.map +1 -1
- package/dist/src/procedure.js.map +1 -1
- package/dist/src/step.d.ts +1 -2
- package/dist/src/step.d.ts.map +1 -1
- package/dist/src/step.js.map +1 -1
- package/dist/src/transaction.d.ts +1 -2
- package/dist/src/transaction.d.ts.map +1 -1
- package/dist/src/transaction.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/src/debugger/debug_workflow.d.ts +0 -56
- package/dist/src/debugger/debug_workflow.d.ts.map +0 -1
- package/dist/src/debugger/debug_workflow.js +0 -388
- package/dist/src/debugger/debug_workflow.js.map +0 -1
package/package.json
CHANGED
@@ -1,56 +0,0 @@
|
|
1
|
-
import { DBOSExecutor } from "../dbos-executor";
|
2
|
-
import { Transaction } from "../transaction";
|
3
|
-
import { StepFunction } from "../step";
|
4
|
-
import { UserDatabaseClient } from "../user_database";
|
5
|
-
import { DBOSContextImpl } from "../context";
|
6
|
-
import { ConfiguredInstance } from "../decorators";
|
7
|
-
import { WFInvokeFuncs, WfInvokeWfs, WfInvokeWfsAsync, Workflow, WorkflowConfig, WorkflowContext, WorkflowHandle } from "../workflow";
|
8
|
-
import { InvokeFuncsInst } from "../httpServer/handler";
|
9
|
-
import { StoredProcedure } from "../procedure";
|
10
|
-
import { PoolClient } from "pg";
|
11
|
-
import { WorkflowQueue } from "../wfqueue";
|
12
|
-
interface RecordedResult<R> {
|
13
|
-
output: R;
|
14
|
-
txn_snapshot: string;
|
15
|
-
txn_id: string;
|
16
|
-
}
|
17
|
-
/**
|
18
|
-
* Context used for debugging a workflow
|
19
|
-
*/
|
20
|
-
export declare class WorkflowContextDebug extends DBOSContextImpl implements WorkflowContext {
|
21
|
-
#private;
|
22
|
-
readonly workflowConfig: WorkflowConfig;
|
23
|
-
functionID: number;
|
24
|
-
readonly isTempWorkflow: boolean;
|
25
|
-
constructor(dbosExec: DBOSExecutor, parentCtx: DBOSContextImpl | undefined, workflowUUID: string, workflowConfig: WorkflowConfig, workflowName: string);
|
26
|
-
functionIDGetIncrement(): number;
|
27
|
-
invoke<T extends object>(object: T | ConfiguredInstance): WFInvokeFuncs<T> | InvokeFuncsInst<T>;
|
28
|
-
checkTxExecution<R>(client: UserDatabaseClient, funcID: number): Promise<RecordedResult<R> | Error>;
|
29
|
-
checkProcExecution<R>(client: PoolClient, funcID: number): Promise<RecordedResult<R> | Error>;
|
30
|
-
/**
|
31
|
-
* Execute a transactional function in debug mode.
|
32
|
-
* If a debug proxy is provided, it connects to a debug proxy and everything should be read-only.
|
33
|
-
*/
|
34
|
-
transaction<T extends unknown[], R>(txn: Transaction<T, R>, clsinst: ConfiguredInstance | null, ...args: T): Promise<R>;
|
35
|
-
procedure<T extends unknown[], R>(proc: StoredProcedure<T, R>, ...args: T): Promise<R>;
|
36
|
-
external<T extends unknown[], R>(stepFn: StepFunction<T, R>, _clsinst: ConfiguredInstance | null, ..._args: T): Promise<R>;
|
37
|
-
startChildWorkflow<T extends any[], R>(wf: Workflow<T, R>, ...args: T): Promise<WorkflowHandle<R>>;
|
38
|
-
invokeChildWorkflow<T extends unknown[], R>(wf: Workflow<T, R>, ...args: T): Promise<R>;
|
39
|
-
/**
|
40
|
-
* Generate a proxy object for the provided class that wraps direct calls (i.e. OpClass.someMethod(param))
|
41
|
-
* to use WorkflowContext.Transaction(OpClass.someMethod, param);
|
42
|
-
*/
|
43
|
-
proxyInvokeWF<T extends object>(object: T, workflowUUID: string | undefined, asyncWf: boolean, configuredInstance: ConfiguredInstance | null, queue?: WorkflowQueue): WfInvokeWfsAsync<T>;
|
44
|
-
startWorkflow<T extends object>(target: T, workflowUUID?: string, queue?: WorkflowQueue): WfInvokeWfsAsync<T>;
|
45
|
-
invokeWorkflow<T extends object>(target: T, workflowUUID?: string): WfInvokeWfs<T>;
|
46
|
-
childWorkflow<T extends any[], R>(wf: Workflow<T, R>, ...args: T): Promise<WorkflowHandle<R>>;
|
47
|
-
send<T>(_destinationUUID: string, _message: T, _topic?: string | undefined): Promise<void>;
|
48
|
-
recv<T>(_topic?: string | undefined, _timeoutSeconds?: number | undefined): Promise<T | null>;
|
49
|
-
setEvent<T>(_key: string, _value: T): Promise<void>;
|
50
|
-
getEvent<T>(_workflowUUID: string, _key: string, _timeoutSeconds?: number | undefined): Promise<T | null>;
|
51
|
-
retrieveWorkflow<R>(targetUUID: string): WorkflowHandle<R>;
|
52
|
-
sleepms(_: number): Promise<void>;
|
53
|
-
sleep(s: number): Promise<void>;
|
54
|
-
}
|
55
|
-
export {};
|
56
|
-
//# sourceMappingURL=debug_workflow.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"debug_workflow.d.ts","sourceRoot":"","sources":["../../../src/debugger/debug_workflow.ts"],"names":[],"mappings":"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"}
|
@@ -1,388 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
-
};
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.WorkflowContextDebug = void 0;
|
7
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
8
|
-
const dbos_executor_1 = require("../dbos-executor");
|
9
|
-
const transaction_1 = require("../transaction");
|
10
|
-
const error_1 = require("../error");
|
11
|
-
const serialize_error_1 = require("serialize-error");
|
12
|
-
const context_1 = require("../context");
|
13
|
-
const decorators_1 = require("../decorators");
|
14
|
-
const utils_1 = require("../utils");
|
15
|
-
const procedure_1 = require("../procedure");
|
16
|
-
const node_assert_1 = __importDefault(require("node:assert"));
|
17
|
-
/**
|
18
|
-
* Context used for debugging a workflow
|
19
|
-
*/
|
20
|
-
class WorkflowContextDebug extends context_1.DBOSContextImpl {
|
21
|
-
workflowConfig;
|
22
|
-
functionID = 0;
|
23
|
-
#dbosExec;
|
24
|
-
isTempWorkflow;
|
25
|
-
constructor(dbosExec, parentCtx, workflowUUID, workflowConfig, workflowName) {
|
26
|
-
const span = dbosExec.tracer.startSpan(workflowName, {
|
27
|
-
operationUUID: workflowUUID,
|
28
|
-
operationType: dbos_executor_1.OperationType.WORKFLOW,
|
29
|
-
authenticatedUser: parentCtx?.authenticatedUser ?? "",
|
30
|
-
authenticatedRoles: parentCtx?.authenticatedRoles ?? [],
|
31
|
-
assumedRole: parentCtx?.assumedRole ?? "",
|
32
|
-
}, parentCtx?.span);
|
33
|
-
super(workflowName, span, dbosExec.logger, parentCtx);
|
34
|
-
this.workflowConfig = workflowConfig;
|
35
|
-
this.workflowUUID = workflowUUID;
|
36
|
-
this.#dbosExec = dbosExec;
|
37
|
-
this.isTempWorkflow = dbos_executor_1.DBOSExecutor.tempWorkflowName === workflowName;
|
38
|
-
this.applicationConfig = dbosExec.config.application;
|
39
|
-
}
|
40
|
-
functionIDGetIncrement() {
|
41
|
-
return this.functionID++;
|
42
|
-
}
|
43
|
-
invoke(object) {
|
44
|
-
if (typeof object === 'function') {
|
45
|
-
const ops = (0, decorators_1.getRegisteredOperations)(object);
|
46
|
-
const proxy = {};
|
47
|
-
for (const op of ops) {
|
48
|
-
proxy[op.name] = op.txnConfig
|
49
|
-
? (...args) => this.transaction(op.registeredFunction, null, ...args)
|
50
|
-
: op.commConfig
|
51
|
-
? (...args) => this.external(op.registeredFunction, null, ...args)
|
52
|
-
: op.procConfig
|
53
|
-
? (...args) => this.procedure(op.registeredFunction, ...args)
|
54
|
-
: undefined;
|
55
|
-
}
|
56
|
-
return proxy;
|
57
|
-
}
|
58
|
-
else {
|
59
|
-
const targetInst = object;
|
60
|
-
const ops = (0, decorators_1.getRegisteredOperations)(targetInst);
|
61
|
-
const proxy = {};
|
62
|
-
for (const op of ops) {
|
63
|
-
proxy[op.name] = op.txnConfig
|
64
|
-
? (...args) => this.transaction(op.registeredFunction, targetInst, ...args)
|
65
|
-
: op.commConfig
|
66
|
-
? (...args) => this.external(op.registeredFunction, targetInst, ...args)
|
67
|
-
: undefined;
|
68
|
-
}
|
69
|
-
return proxy;
|
70
|
-
}
|
71
|
-
}
|
72
|
-
async #checkExecution(queryFunc, funcID) {
|
73
|
-
// Note: we read the recorded snapshot and transaction ID!
|
74
|
-
const query = "SELECT output, error, txn_snapshot, txn_id FROM dbos.transaction_outputs WHERE workflow_uuid=$1 AND function_id=$2";
|
75
|
-
const rows = await queryFunc(query, [this.workflowUUID, funcID]);
|
76
|
-
if (rows.length === 0 || rows.length > 1) {
|
77
|
-
this.logger.error("Unexpected! This should never happen during debug. Found incorrect rows for transaction output. Returned rows: " + rows.toString() + `. WorkflowUUID ${this.workflowUUID}, function ID ${funcID}`);
|
78
|
-
throw new error_1.DBOSDebuggerError(`This should never happen during debug. Found incorrect rows for transaction output. Returned ${rows.length} rows: ` + rows.toString());
|
79
|
-
}
|
80
|
-
if (utils_1.DBOSJSON.parse(rows[0].error) !== null) {
|
81
|
-
return (0, serialize_error_1.deserializeError)(utils_1.DBOSJSON.parse(rows[0].error));
|
82
|
-
}
|
83
|
-
const res = {
|
84
|
-
output: utils_1.DBOSJSON.parse(rows[0].output),
|
85
|
-
txn_snapshot: rows[0].txn_snapshot,
|
86
|
-
txn_id: rows[0].txn_id,
|
87
|
-
};
|
88
|
-
if (this.#dbosExec.debugProxy) {
|
89
|
-
// Send a signal to the debug proxy.
|
90
|
-
await queryFunc(`--proxy:${res.txn_id ?? ''}:${res.txn_snapshot}`, []);
|
91
|
-
}
|
92
|
-
return res;
|
93
|
-
}
|
94
|
-
async checkTxExecution(client, funcID) {
|
95
|
-
const func = (sql, args) => this.#dbosExec.userDatabase.queryWithClient(client, sql, ...args);
|
96
|
-
return this.#checkExecution(func, funcID);
|
97
|
-
}
|
98
|
-
async checkProcExecution(client, funcID) {
|
99
|
-
const func = (sql, args) => client.query(sql, args).then(v => v.rows);
|
100
|
-
return this.#checkExecution(func, funcID);
|
101
|
-
}
|
102
|
-
/**
|
103
|
-
* Execute a transactional function in debug mode.
|
104
|
-
* If a debug proxy is provided, it connects to a debug proxy and everything should be read-only.
|
105
|
-
*/
|
106
|
-
async transaction(txn, clsinst, ...args) {
|
107
|
-
const txnInfo = this.#dbosExec.getTransactionInfo(txn);
|
108
|
-
if (txnInfo === undefined) {
|
109
|
-
throw new error_1.DBOSDebuggerError(`Transaction ${txn.name} not registered!`);
|
110
|
-
}
|
111
|
-
// const readOnly = true; // TODO: eventually, this transaction must be read-only.
|
112
|
-
const funcID = this.functionIDGetIncrement();
|
113
|
-
const span = this.#dbosExec.tracer.startSpan(txn.name, {
|
114
|
-
operationUUID: this.workflowUUID,
|
115
|
-
operationType: dbos_executor_1.OperationType.TRANSACTION,
|
116
|
-
authenticatedUser: this.authenticatedUser,
|
117
|
-
authenticatedRoles: this.authenticatedRoles,
|
118
|
-
assumedRole: this.assumedRole,
|
119
|
-
readOnly: txnInfo.config.readOnly ?? false, // For now doing as in src/workflow.ts:272
|
120
|
-
isolationLevel: txnInfo.config.isolationLevel,
|
121
|
-
}, this.span);
|
122
|
-
let check;
|
123
|
-
const wrappedTransaction = async (client) => {
|
124
|
-
// Original result must exist during replay.
|
125
|
-
const tCtxt = new transaction_1.TransactionContextImpl(this.#dbosExec.userDatabase.getName(), client, this, span, this.#dbosExec.logger, funcID, txn.name);
|
126
|
-
check = await this.checkTxExecution(client, funcID);
|
127
|
-
if (check instanceof Error) {
|
128
|
-
if (this.#dbosExec.debugProxy) {
|
129
|
-
this.logger.warn(`original transaction ${txn.name} failed with error: ${check.message}`);
|
130
|
-
}
|
131
|
-
else {
|
132
|
-
throw check; // In direct mode, directly throw the error.
|
133
|
-
}
|
134
|
-
}
|
135
|
-
if (!this.#dbosExec.debugProxy) {
|
136
|
-
// Direct mode skips execution and return the recorded result.
|
137
|
-
return check.output;
|
138
|
-
}
|
139
|
-
// If we have a proxy, then execute the user's transaction.
|
140
|
-
let cresult;
|
141
|
-
await (0, context_1.runWithTransactionContext)(tCtxt, async () => {
|
142
|
-
cresult = await txn.call(clsinst, tCtxt, ...args);
|
143
|
-
});
|
144
|
-
const result = cresult;
|
145
|
-
return result;
|
146
|
-
};
|
147
|
-
let result;
|
148
|
-
try {
|
149
|
-
result = await this.#dbosExec.userDatabase.transaction(wrappedTransaction, txnInfo.config);
|
150
|
-
}
|
151
|
-
catch (e) {
|
152
|
-
result = e;
|
153
|
-
}
|
154
|
-
check = check;
|
155
|
-
result = result;
|
156
|
-
if (check instanceof Error) {
|
157
|
-
throw check;
|
158
|
-
}
|
159
|
-
// If returned nothing and the recorded value is also null/undefined, we just return it
|
160
|
-
if (result === undefined && !check.output) {
|
161
|
-
return result;
|
162
|
-
}
|
163
|
-
if (utils_1.DBOSJSON.stringify(check.output) !== utils_1.DBOSJSON.stringify(result)) {
|
164
|
-
this.logger.error(`Detected different transaction output than the original one!\n Result: ${utils_1.DBOSJSON.stringify(result)}\n Original: ${utils_1.DBOSJSON.stringify(check.output)}`);
|
165
|
-
}
|
166
|
-
return check.output; // Always return the recorded result.
|
167
|
-
}
|
168
|
-
async procedure(proc, ...args) {
|
169
|
-
const procInfo = this.#dbosExec.getProcedureInfo(proc);
|
170
|
-
if (procInfo === undefined) {
|
171
|
-
throw new error_1.DBOSDebuggerError(proc.name);
|
172
|
-
}
|
173
|
-
const funcId = this.functionIDGetIncrement();
|
174
|
-
const span = this.#dbosExec.tracer.startSpan(proc.name, {
|
175
|
-
operationUUID: this.workflowUUID,
|
176
|
-
operationType: dbos_executor_1.OperationType.PROCEDURE,
|
177
|
-
authenticatedUser: this.authenticatedUser,
|
178
|
-
assumedRole: this.assumedRole,
|
179
|
-
authenticatedRoles: this.authenticatedRoles,
|
180
|
-
readOnly: procInfo.config.readOnly ?? false,
|
181
|
-
isolationLevel: procInfo.config.isolationLevel ?? transaction_1.IsolationLevel.Serializable,
|
182
|
-
}, this.span);
|
183
|
-
let check;
|
184
|
-
const wrappedProcedure = async (client) => {
|
185
|
-
check = await this.checkProcExecution(client, funcId);
|
186
|
-
const procCtxt = new procedure_1.StoredProcedureContextImpl(client, this, span, this.#dbosExec.logger, funcId, proc.name);
|
187
|
-
if (check instanceof Error) {
|
188
|
-
if (this.#dbosExec.debugProxy) {
|
189
|
-
this.logger.warn(`original procedure ${proc.name} failed with error: ${check.message}`);
|
190
|
-
}
|
191
|
-
else {
|
192
|
-
throw check; // In direct mode, directly throw the error.
|
193
|
-
}
|
194
|
-
}
|
195
|
-
if (!this.#dbosExec.debugProxy) {
|
196
|
-
// Direct mode skips execution and return the recorded result.
|
197
|
-
return check.output;
|
198
|
-
}
|
199
|
-
// If we have a proxy, then execute the user's transaction.
|
200
|
-
const result = await proc(procCtxt, ...args);
|
201
|
-
return result;
|
202
|
-
};
|
203
|
-
let result;
|
204
|
-
try {
|
205
|
-
result = await this.#dbosExec.invokeStoredProcFunction(wrappedProcedure, procInfo.config);
|
206
|
-
}
|
207
|
-
catch (e) {
|
208
|
-
result = e;
|
209
|
-
}
|
210
|
-
check = check;
|
211
|
-
result = result;
|
212
|
-
if (check instanceof Error) {
|
213
|
-
throw check;
|
214
|
-
}
|
215
|
-
// If returned nothing and the recorded value is also null/undefined, we just return it
|
216
|
-
if (result === undefined && !check.output) {
|
217
|
-
return result;
|
218
|
-
}
|
219
|
-
try {
|
220
|
-
node_assert_1.default.deepStrictEqual(result, check.output);
|
221
|
-
}
|
222
|
-
catch {
|
223
|
-
this.logger.error(`Detected different transaction output than the original one!\n Result: ${JSON.stringify(result)}\n Original: ${JSON.stringify(check.output)}`);
|
224
|
-
}
|
225
|
-
return check.output; // Always return the recorded result.
|
226
|
-
}
|
227
|
-
async external(stepFn, _clsinst, ..._args) {
|
228
|
-
const commConfig = this.#dbosExec.getStepInfo(stepFn);
|
229
|
-
if (commConfig === undefined) {
|
230
|
-
throw new error_1.DBOSDebuggerError(`Step ${stepFn.name} not registered!`);
|
231
|
-
}
|
232
|
-
const funcID = this.functionIDGetIncrement();
|
233
|
-
// FIXME: we do not create a span for the replay step. Do we want to?
|
234
|
-
// Original result must exist during replay.
|
235
|
-
const check = await this.#dbosExec.systemDatabase.checkOperationOutput(this.workflowUUID, funcID);
|
236
|
-
if (check === dbos_executor_1.dbosNull) {
|
237
|
-
throw new error_1.DBOSDebuggerError(`Cannot find recorded step output for ${stepFn.name}. Shouldn't happen in debug mode!`);
|
238
|
-
}
|
239
|
-
this.logger.debug("Use recorded step output.");
|
240
|
-
return check;
|
241
|
-
}
|
242
|
-
// Invoke the debugWorkflow() function instead.
|
243
|
-
async startChildWorkflow(wf, ...args) {
|
244
|
-
const funcId = this.functionIDGetIncrement();
|
245
|
-
const childUUID = this.workflowUUID + "-" + funcId;
|
246
|
-
return this.#dbosExec.debugWorkflow(wf, { parentCtx: this, workflowUUID: childUUID }, this.workflowUUID, funcId, ...args);
|
247
|
-
}
|
248
|
-
async invokeChildWorkflow(wf, ...args) {
|
249
|
-
return this.startChildWorkflow(wf, ...args).then((handle) => handle.getResult());
|
250
|
-
}
|
251
|
-
/**
|
252
|
-
* Generate a proxy object for the provided class that wraps direct calls (i.e. OpClass.someMethod(param))
|
253
|
-
* to use WorkflowContext.Transaction(OpClass.someMethod, param);
|
254
|
-
*/
|
255
|
-
proxyInvokeWF(object, workflowUUID, asyncWf, configuredInstance, queue) {
|
256
|
-
const ops = (0, decorators_1.getRegisteredOperations)(object);
|
257
|
-
const proxy = {};
|
258
|
-
const funcId = this.functionIDGetIncrement();
|
259
|
-
const childUUID = workflowUUID || (this.workflowUUID + "-" + funcId);
|
260
|
-
const params = { workflowUUID: childUUID, parentCtx: this, configuredInstance, queueName: queue?.name };
|
261
|
-
for (const op of ops) {
|
262
|
-
if (asyncWf) {
|
263
|
-
proxy[op.name] = op.workflowConfig
|
264
|
-
? (...args) => this.#dbosExec.debugWorkflow(op.registeredFunction, params, this.workflowUUID, funcId, ...args)
|
265
|
-
: undefined;
|
266
|
-
}
|
267
|
-
else {
|
268
|
-
proxy[op.name] = op.workflowConfig
|
269
|
-
? (...args) => this.#dbosExec.debugWorkflow(op.registeredFunction, params, this.workflowUUID, funcId, ...args)
|
270
|
-
.then((handle) => handle.getResult())
|
271
|
-
: undefined;
|
272
|
-
}
|
273
|
-
}
|
274
|
-
return proxy;
|
275
|
-
}
|
276
|
-
startWorkflow(target, workflowUUID, queue) {
|
277
|
-
if (typeof target === 'function') {
|
278
|
-
return this.proxyInvokeWF(target, workflowUUID, true, null, queue);
|
279
|
-
}
|
280
|
-
else {
|
281
|
-
return this.proxyInvokeWF(target, workflowUUID, true, target, queue);
|
282
|
-
}
|
283
|
-
}
|
284
|
-
invokeWorkflow(target, workflowUUID) {
|
285
|
-
if (typeof target === 'function') {
|
286
|
-
return this.proxyInvokeWF(target, workflowUUID, false, null);
|
287
|
-
}
|
288
|
-
else {
|
289
|
-
return this.proxyInvokeWF(target, workflowUUID, false, target);
|
290
|
-
}
|
291
|
-
}
|
292
|
-
async childWorkflow(wf, ...args) {
|
293
|
-
return this.startChildWorkflow(wf, ...args);
|
294
|
-
}
|
295
|
-
async send(_destinationUUID, _message, _topic) {
|
296
|
-
const functionID = this.functionIDGetIncrement();
|
297
|
-
// Original result must exist during replay.
|
298
|
-
const check = await this.#dbosExec.systemDatabase.checkOperationOutput(this.workflowUUID, functionID);
|
299
|
-
if (check === dbos_executor_1.dbosNull) {
|
300
|
-
throw new error_1.DBOSDebuggerError(`Cannot find recorded send. Shouldn't happen in debug mode!`);
|
301
|
-
}
|
302
|
-
this.logger.debug("Use recorded send output.");
|
303
|
-
return;
|
304
|
-
}
|
305
|
-
async recv(_topic, _timeoutSeconds) {
|
306
|
-
const functionID = this.functionIDGetIncrement();
|
307
|
-
//Increment once more to account for the timeoutFunctionID created by workflow
|
308
|
-
this.functionIDGetIncrement();
|
309
|
-
// Original result must exist during replay.
|
310
|
-
const check = await this.#dbosExec.systemDatabase.checkOperationOutput(this.workflowUUID, functionID);
|
311
|
-
if (check === dbos_executor_1.dbosNull) {
|
312
|
-
throw new error_1.DBOSDebuggerError(`Cannot find recorded recv. Shouldn't happen in debug mode!`);
|
313
|
-
}
|
314
|
-
this.logger.debug("Use recorded recv output.");
|
315
|
-
return check;
|
316
|
-
}
|
317
|
-
async setEvent(_key, _value) {
|
318
|
-
const functionID = this.functionIDGetIncrement();
|
319
|
-
// Original result must exist during replay.
|
320
|
-
const check = await this.#dbosExec.systemDatabase.checkOperationOutput(this.workflowUUID, functionID);
|
321
|
-
if (check === dbos_executor_1.dbosNull) {
|
322
|
-
throw new error_1.DBOSDebuggerError(`Cannot find recorded setEvent. Shouldn't happen in debug mode!`);
|
323
|
-
}
|
324
|
-
this.logger.debug("Use recorded setEvent output.");
|
325
|
-
}
|
326
|
-
async getEvent(_workflowUUID, _key, _timeoutSeconds) {
|
327
|
-
const functionID = this.functionIDGetIncrement();
|
328
|
-
//take into account the extra functionID increment from workflow
|
329
|
-
this.functionIDGetIncrement();
|
330
|
-
// Original result must exist during replay.
|
331
|
-
const check = await this.#dbosExec.systemDatabase.checkOperationOutput(this.workflowUUID, functionID);
|
332
|
-
if (check === dbos_executor_1.dbosNull) {
|
333
|
-
throw new error_1.DBOSDebuggerError(`Cannot find recorded getEvent. Shouldn't happen in debug mode!`);
|
334
|
-
}
|
335
|
-
this.logger.debug("Use recorded getEvent output.");
|
336
|
-
return check;
|
337
|
-
}
|
338
|
-
retrieveWorkflow(targetUUID) {
|
339
|
-
// TODO: write a proper test for this.
|
340
|
-
const functionID = this.functionIDGetIncrement();
|
341
|
-
return new RetrievedHandleDebug(this.#dbosExec.systemDatabase, targetUUID, this.workflowUUID, functionID);
|
342
|
-
}
|
343
|
-
async sleepms(_) {
|
344
|
-
// Need to increment function ID for faithful replay.
|
345
|
-
this.functionIDGetIncrement();
|
346
|
-
return Promise.resolve();
|
347
|
-
}
|
348
|
-
async sleep(s) {
|
349
|
-
return this.sleepms(s * 1000);
|
350
|
-
}
|
351
|
-
}
|
352
|
-
exports.WorkflowContextDebug = WorkflowContextDebug;
|
353
|
-
/**
|
354
|
-
* The handle returned when retrieving a workflow with Debug workflow's retrieve
|
355
|
-
*/
|
356
|
-
class RetrievedHandleDebug {
|
357
|
-
systemDatabase;
|
358
|
-
workflowUUID;
|
359
|
-
callerUUID;
|
360
|
-
callerFunctionID;
|
361
|
-
constructor(systemDatabase, workflowUUID, callerUUID, callerFunctionID) {
|
362
|
-
this.systemDatabase = systemDatabase;
|
363
|
-
this.workflowUUID = workflowUUID;
|
364
|
-
this.callerUUID = callerUUID;
|
365
|
-
this.callerFunctionID = callerFunctionID;
|
366
|
-
}
|
367
|
-
getWorkflowUUID() {
|
368
|
-
return this.workflowUUID;
|
369
|
-
}
|
370
|
-
get workflowID() {
|
371
|
-
return this.workflowUUID;
|
372
|
-
}
|
373
|
-
async getStatus() {
|
374
|
-
// Must use original result.
|
375
|
-
const check = await this.systemDatabase.checkOperationOutput(this.callerUUID, this.callerFunctionID);
|
376
|
-
if (check === dbos_executor_1.dbosNull) {
|
377
|
-
throw new error_1.DBOSDebuggerError(`Cannot find recorded workflow status. Shouldn't happen in debug mode!`);
|
378
|
-
}
|
379
|
-
return check;
|
380
|
-
}
|
381
|
-
async getResult() {
|
382
|
-
return await this.systemDatabase.getWorkflowResult(this.workflowUUID);
|
383
|
-
}
|
384
|
-
async getWorkflowInputs() {
|
385
|
-
return await this.systemDatabase.getWorkflowInputs(this.workflowUUID);
|
386
|
-
}
|
387
|
-
}
|
388
|
-
//# sourceMappingURL=debug_workflow.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"debug_workflow.js","sourceRoot":"","sources":["../../../src/debugger/debug_workflow.ts"],"names":[],"mappings":";;;;;;AAAA,uDAAuD;AACvD,oDAAmF;AAEnF,gDAAqF;AAErF,oCAA6C;AAC7C,qDAAmD;AAInD,wCAAwE;AACxE,8CAA4E;AAG5E,oCAAoC;AACpC,4CAA2E;AAE3E,8DAAiC;AAWjC;;GAEG;AACH,MAAa,oBAAqB,SAAQ,yBAAe;IAKoD;IAJ3G,UAAU,GAAW,CAAC,CAAC;IACd,SAAS,CAAC;IACV,cAAc,CAAU;IAEjC,YAAY,QAAsB,EAAE,SAAsC,EAAE,YAAoB,EAAW,cAA8B,EACvI,YAAoB;QACpB,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CACpC,YAAY,EACZ;YACE,aAAa,EAAE,YAAY;YAC3B,aAAa,EAAE,6BAAa,CAAC,QAAQ;YACrC,iBAAiB,EAAE,SAAS,EAAE,iBAAiB,IAAI,EAAE;YACrD,kBAAkB,EAAE,SAAS,EAAE,kBAAkB,IAAI,EAAE;YACvD,WAAW,EAAE,SAAS,EAAE,WAAW,IAAI,EAAE;SAC1C,EACD,SAAS,EAAE,IAAI,CAChB,CAAC;QACF,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAbmD,mBAAc,GAAd,cAAc,CAAgB;QAcvI,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,4BAAY,CAAC,gBAAgB,KAAK,YAAY,CAAC;QACrE,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC;IACvD,CAAC;IAED,sBAAsB;QACpB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,CAAmB,MAA8B;QACrD,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,IAAA,oCAAuB,EAAC,MAAM,CAAC,CAAC;YAE5C,MAAM,KAAK,GAA4B,EAAE,CAAC;YAC1C,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;gBAErB,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS;oBAC3B,CAAC,CAAC,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,kBAAqD,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;oBACnH,CAAC,CAAC,EAAE,CAAC,UAAU;wBACb,CAAC,CAAC,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,kBAAsD,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;wBACjH,CAAC,CAAC,EAAE,CAAC,UAAU;4BACb,CAAC,CAAC,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAyD,EAAE,GAAG,IAAI,CAAC;4BAC/G,CAAC,CAAC,SAAS,CAAC;YACpB,CAAC;YACD,OAAO,KAAyB,CAAC;QACnC,CAAC;aACI,CAAC;YACJ,MAAM,UAAU,GAAG,MAA4B,CAAC;YAChD,MAAM,GAAG,GAAG,IAAA,oCAAuB,EAAC,UAAU,CAAC,CAAC;YAEhD,MAAM,KAAK,GAA4B,EAAE,CAAC;YAC1C,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;gBACrB,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS;oBAC3B,CAAC,CAAU,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,kBAAqD,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;oBAClI,CAAC,CAAC,EAAE,CAAC,UAAU;wBACb,CAAC,CAAY,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,kBAAsD,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;wBAClI,CAAC,CAAC,SAAS,CAAC;YAClB,CAAC;YACD,OAAO,KAA2B,CAAC;QACrC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAI,SAAwB,EAAE,MAAc;QAC/D,0DAA0D;QAC1D,MAAM,KAAK,GAAG,oHAAoH,CAAC;QACnI,MAAM,IAAI,GAAG,MAAM,SAAS,CAAsB,KAAK,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;QAEtF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kHAAkH,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,kBAAkB,IAAI,CAAC,YAAY,iBAAiB,MAAM,EAAE,CAAC,CAAC;YACvN,MAAM,IAAI,yBAAiB,CAAC,gGAAgG,IAAI,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtK,CAAC;QAED,IAAI,gBAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3C,OAAO,IAAA,kCAAgB,EAAC,gBAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,GAAG,GAAsB;YAC7B,MAAM,EAAE,gBAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAM;YAC3C,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY;YAClC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM;SACvB,CAAC;QAEF,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;YAC9B,oCAAoC;YACpC,MAAM,SAAS,CAAC,WAAW,GAAG,CAAC,MAAM,IAAI,EAAE,IAAI,GAAG,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAI,MAA0B,EAAE,MAAc;QAClE,MAAM,IAAI,GAAG,CAAI,GAAW,EAAE,IAAe,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,eAAe,CAAI,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QACvH,OAAO,IAAI,CAAC,eAAe,CAAI,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAI,MAAkB,EAAE,MAAc;QAC5D,MAAM,IAAI,GAAG,CAAI,GAAW,EAAE,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAW,CAAC,CAAC;QACnG,OAAO,IAAI,CAAC,eAAe,CAAI,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CAAyB,GAAsB,EAAE,OAAkC,EAAE,GAAG,IAAO;QAC9G,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,GAAsC,CAAC,CAAC;QAC1F,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,yBAAiB,CAAC,eAAe,GAAG,CAAC,IAAI,kBAAkB,CAAC,CAAC;QACzE,CAAC;QACD,kFAAkF;QAClF,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAS,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAChD,GAAG,CAAC,IAAI,EACR;YACE,aAAa,EAAE,IAAI,CAAC,YAAY;YAChC,aAAa,EAAE,6BAAa,CAAC,WAAW;YACxC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,EAAE,0CAA0C;YACtF,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc;SAC9C,EACD,IAAI,CAAC,IAAI,CACV,CAAC;QAEF,IAAI,KAAgC,CAAC;QACrC,MAAM,kBAAkB,GAAG,KAAK,EAAE,MAA0B,EAAc,EAAE;YAC1E,4CAA4C;YAC5C,MAAM,KAAK,GAAG,IAAI,oCAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7I,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAI,MAAM,EAAE,MAAM,CAAC,CAAC;YAEvD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;oBAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,GAAG,CAAC,IAAI,uBAAuB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC3F,CAAC;qBAAM,CAAC;oBACN,MAAM,KAAK,CAAC,CAAC,4CAA4C;gBAC3D,CAAC;YACH,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC/B,8DAA8D;gBAC9D,OAAQ,KAA2B,CAAC,MAAM,CAAC;YAC7C,CAAC;YACD,2DAA2D;YAC3D,IAAI,OAAsB,CAAC;YAC3B,MAAM,IAAA,mCAAyB,EAAC,KAAK,EAAE,KAAK,IAAG,EAAE;gBAC/C,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,OAAQ,CAAC;YAExB,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,IAAI,MAA0B,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,CAAC,kBAAkB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7F,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,GAAG,CAAU,CAAC;QACtB,CAAC;QAED,KAAK,GAAG,KAAM,CAAC;QACf,MAAM,GAAG,MAAO,CAAC;QAEjB,IAAI,KAAM,YAAY,KAAK,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC;QACd,CAAC;QAED,uFAAuF;QACvF,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC1C,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,gBAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,gBAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACpE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0EAA0E,gBAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,gBAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5K,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,qCAAqC;IAC5D,CAAC;IAED,KAAK,CAAC,SAAS,CAAyB,IAA2B,EAAE,GAAG,IAAO;QAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,IAAI,yBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QACvE,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE7C,MAAM,IAAI,GAAS,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAChD,IAAI,CAAC,IAAI,EACT;YACE,aAAa,EAAE,IAAI,CAAC,YAAY;YAChC,aAAa,EAAE,6BAAa,CAAC,SAAS;YACtC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK;YAC3C,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,IAAI,4BAAc,CAAC,YAAY;SAC9E,EACD,IAAI,CAAC,IAAI,CACV,CAAC;QAEF,IAAI,KAAgC,CAAC;QACrC,MAAM,gBAAgB,GAAG,KAAK,EAAE,MAAkB,EAAc,EAAE;YAChE,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAI,MAAM,EAAE,MAAM,CAAC,CAAC;YACzD,MAAM,QAAQ,GAAG,IAAI,sCAA0B,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAE9G,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;oBAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,IAAI,uBAAuB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC1F,CAAC;qBAAM,CAAC;oBACN,MAAM,KAAK,CAAC,CAAC,4CAA4C;gBAC3D,CAAC;YACH,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC/B,8DAA8D;gBAC9D,OAAQ,KAA2B,CAAC,MAAM,CAAC;YAC7C,CAAC;YACD,2DAA2D;YAC3D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;YAC7C,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,IAAI,MAA0B,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC5F,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,GAAG,CAAU,CAAC;QACtB,CAAC;QAED,KAAK,GAAG,KAAM,CAAC;QACf,MAAM,GAAG,MAAO,CAAC;QAEjB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,KAAK,CAAC;QACd,CAAC;QAED,uFAAuF;QACvF,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC1C,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,CAAC;YACH,qBAAM,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0EAA0E,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpK,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,qCAAqC;IAC5D,CAAC;IAED,KAAK,CAAC,QAAQ,CAAyB,MAA0B,EAAE,QAAmC,EAAE,GAAG,KAAQ;QACjH,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAA0C,CAAC,CAAC;QAC1F,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,IAAI,yBAAiB,CAAC,QAAQ,MAAM,CAAC,IAAI,kBAAkB,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE7C,qEAAqE;QAErE,4CAA4C;QAC5C,MAAM,KAAK,GAAiB,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,oBAAoB,CAAI,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACnH,IAAI,KAAK,KAAK,wBAAQ,EAAE,CAAC;YACvB,MAAM,IAAI,yBAAiB,CAAC,wCAAwC,MAAM,CAAC,IAAI,mCAAmC,CAAC,CAAC;QACtH,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,OAAO,KAAU,CAAC;IACpB,CAAC;IAED,+CAA+C;IAC/C,KAAK,CAAC,kBAAkB,CAAqB,EAAkB,EAAE,GAAG,IAAO;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC7C,MAAM,SAAS,GAAW,IAAI,CAAC,YAAY,GAAG,GAAG,GAAG,MAAM,CAAC;QAC3D,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;IAC5H,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAyB,EAAkB,EAAE,GAAG,IAAO;QAC9E,OAAO,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IACnF,CAAC;IAED;;;OAGG;IACH,aAAa,CAAmB,MAAS,EAAE,YAAgC,EAAE,OAAgB,EAAE,kBAA6C,EAAE,KAAqB;QAEjK,MAAM,GAAG,GAAG,IAAA,oCAAuB,EAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,KAAK,GAA4B,EAAE,CAAC;QAE1C,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC7C,MAAM,SAAS,GAAG,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC;QAErE,MAAM,MAAM,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAGxG,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,cAAc;oBAChC,CAAC,CAAC,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAE,EAAE,CAAC,kBAAmD,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;oBAC3J,CAAC,CAAC,SAAS,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,cAAc;oBAChC,CAAC,CAAC,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAE,EAAE,CAAC,kBAAmD,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;yBACxJ,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;oBACvC,CAAC,CAAC,SAAS,CAAC;YAChB,CAAC;QACH,CAAC;QACD,OAAO,KAA4B,CAAC;IACtC,CAAC;IAED,aAAa,CAAmB,MAAS,EAAE,YAAqB,EAAE,KAAqB;QACrF,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAmC,CAAC;QACvG,CAAC;aACI,CAAC;YACJ,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAA4B,EAAE,KAAK,CAAmC,CAAC;QAC/H,CAAC;IACH,CAAC;IACD,cAAc,CAAmB,MAAS,EAAE,YAAqB;QAC/D,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAA8B,CAAC;QAC5F,CAAC;aACI,CAAC;YACJ,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAA4B,CAA8B,CAAC;QACpH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAqB,EAAkB,EAAE,GAAG,IAAO;QACpE,OAAO,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,gBAAwB,EAAE,QAAW,EAAE,MAA2B;QAC9E,MAAM,UAAU,GAAW,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAEzD,4CAA4C;QAC5C,MAAM,KAAK,GAAyB,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,oBAAoB,CAAY,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACvI,IAAI,KAAK,KAAK,wBAAQ,EAAE,CAAC;YACvB,MAAM,IAAI,yBAAiB,CAAC,4DAA4D,CAAC,CAAC;QAC5F,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,MAA2B,EAAE,eAAoC;QAC7E,MAAM,UAAU,GAAW,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACzD,8EAA8E;QAC9E,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,4CAA4C;QAC5C,MAAM,KAAK,GAAwB,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,oBAAoB,CAAW,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACrI,IAAI,KAAK,KAAK,wBAAQ,EAAE,CAAC;YACvB,MAAM,IAAI,yBAAiB,CAAC,4DAA4D,CAAC,CAAC;QAC5F,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,OAAO,KAAiB,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAI,IAAY,EAAE,MAAS;QACvC,MAAM,UAAU,GAAW,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACzD,4CAA4C;QAC5C,MAAM,KAAK,GAAyB,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,oBAAoB,CAAY,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACvI,IAAI,KAAK,KAAK,wBAAQ,EAAE,CAAC;YACvB,MAAM,IAAI,yBAAiB,CAAC,gEAAgE,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAI,aAAqB,EAAE,IAAY,EAAE,eAAoC;QACzF,MAAM,UAAU,GAAW,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACzD,gEAAgE;QAChE,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,4CAA4C;QAC5C,MAAM,KAAK,GAAwB,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,oBAAoB,CAAW,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACrI,IAAI,KAAK,KAAK,wBAAQ,EAAE,CAAC;YACvB,MAAM,IAAI,yBAAiB,CAAC,gEAAgE,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,OAAO,KAAiB,CAAC;IAC3B,CAAC;IAED,gBAAgB,CAAI,UAAkB;QACpC,sCAAsC;QACtC,MAAM,UAAU,GAAW,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACzD,OAAO,IAAI,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAC5G,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,CAAS;QACrB,qDAAqD;QACrD,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,CAAS;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAChC,CAAC;CACF;AArYD,oDAqYC;AAED;;GAEG;AACH,MAAM,oBAAoB;IACH;IAAyC;IAA+B;IAA6B;IAA1H,YAAqB,cAA8B,EAAW,YAAoB,EAAW,UAAkB,EAAW,gBAAwB;QAA7H,mBAAc,GAAd,cAAc,CAAgB;QAAW,iBAAY,GAAZ,YAAY,CAAQ;QAAW,eAAU,GAAV,UAAU,CAAQ;QAAW,qBAAgB,GAAhB,gBAAgB,CAAQ;IAAI,CAAC;IAEvJ,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,SAAS;QACb,4BAA4B;QAC5B,MAAM,KAAK,GAAqC,MAAM,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAwB,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC9J,IAAI,KAAK,KAAK,wBAAQ,EAAE,CAAC;YACvB,MAAM,IAAI,yBAAiB,CAAC,uEAAuE,CAAC,CAAC;QACvG,CAAC;QACD,OAAO,KAA8B,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,SAAS;QACb,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAI,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAI,IAAI,CAAC,YAAY,CAAM,CAAC;IAChF,CAAC;CACF"}
|