@dbos-inc/dbos-sdk 2.1.5-preview.g539c9d794d → 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.
Files changed (70) hide show
  1. package/compose.yaml +19 -0
  2. package/dbos-config.schema.json +2 -11
  3. package/dist/src/context.d.ts +2 -0
  4. package/dist/src/context.d.ts.map +1 -1
  5. package/dist/src/context.js +16 -1
  6. package/dist/src/context.js.map +1 -1
  7. package/dist/src/dbos-executor.d.ts +9 -12
  8. package/dist/src/dbos-executor.d.ts.map +1 -1
  9. package/dist/src/dbos-executor.js +403 -90
  10. package/dist/src/dbos-executor.js.map +1 -1
  11. package/dist/src/dbos-runtime/cli.d.ts +1 -0
  12. package/dist/src/dbos-runtime/cli.d.ts.map +1 -1
  13. package/dist/src/dbos-runtime/cli.js +13 -2
  14. package/dist/src/dbos-runtime/cli.js.map +1 -1
  15. package/dist/src/dbos-runtime/config.d.ts +8 -7
  16. package/dist/src/dbos-runtime/config.d.ts.map +1 -1
  17. package/dist/src/dbos-runtime/config.js +26 -18
  18. package/dist/src/dbos-runtime/config.js.map +1 -1
  19. package/dist/src/dbos-runtime/db_connection.d.ts +10 -0
  20. package/dist/src/dbos-runtime/db_connection.d.ts.map +1 -0
  21. package/dist/src/dbos-runtime/db_connection.js +59 -0
  22. package/dist/src/dbos-runtime/db_connection.js.map +1 -0
  23. package/dist/src/dbos-runtime/db_wizard.d.ts.map +1 -1
  24. package/dist/src/dbos-runtime/db_wizard.js +10 -14
  25. package/dist/src/dbos-runtime/db_wizard.js.map +1 -1
  26. package/dist/src/dbos-runtime/migrate.d.ts.map +1 -1
  27. package/dist/src/dbos-runtime/migrate.js +2 -3
  28. package/dist/src/dbos-runtime/migrate.js.map +1 -1
  29. package/dist/src/dbos-runtime/reset.d.ts +4 -0
  30. package/dist/src/dbos-runtime/reset.d.ts.map +1 -0
  31. package/dist/src/dbos-runtime/reset.js +39 -0
  32. package/dist/src/dbos-runtime/reset.js.map +1 -0
  33. package/dist/src/dbos.d.ts +2 -0
  34. package/dist/src/dbos.d.ts.map +1 -1
  35. package/dist/src/dbos.js +50 -1
  36. package/dist/src/dbos.js.map +1 -1
  37. package/dist/src/error.d.ts +3 -0
  38. package/dist/src/error.d.ts.map +1 -1
  39. package/dist/src/error.js +10 -2
  40. package/dist/src/error.js.map +1 -1
  41. package/dist/src/eventreceiver.d.ts +2 -0
  42. package/dist/src/eventreceiver.d.ts.map +1 -1
  43. package/dist/src/httpServer/handler.js.map +1 -1
  44. package/dist/src/procedure.d.ts +3 -4
  45. package/dist/src/procedure.d.ts.map +1 -1
  46. package/dist/src/procedure.js +3 -1
  47. package/dist/src/procedure.js.map +1 -1
  48. package/dist/src/step.d.ts +1 -2
  49. package/dist/src/step.d.ts.map +1 -1
  50. package/dist/src/step.js.map +1 -1
  51. package/dist/src/system_database.d.ts.map +1 -1
  52. package/dist/src/system_database.js +31 -4
  53. package/dist/src/system_database.js.map +1 -1
  54. package/dist/src/testing/testing_runtime.js.map +1 -1
  55. package/dist/src/transaction.d.ts +1 -2
  56. package/dist/src/transaction.d.ts.map +1 -1
  57. package/dist/src/transaction.js.map +1 -1
  58. package/dist/src/utils.d.ts.map +1 -1
  59. package/dist/src/utils.js +1 -14
  60. package/dist/src/utils.js.map +1 -1
  61. package/dist/src/workflow.d.ts +1 -13
  62. package/dist/src/workflow.d.ts.map +1 -1
  63. package/dist/src/workflow.js +4 -322
  64. package/dist/src/workflow.js.map +1 -1
  65. package/dist/tsconfig.build.tsbuildinfo +1 -1
  66. package/package.json +1 -1
  67. package/dist/src/debugger/debug_workflow.d.ts +0 -56
  68. package/dist/src/debugger/debug_workflow.d.ts.map +0 -1
  69. package/dist/src/debugger/debug_workflow.js +0 -388
  70. package/dist/src/debugger/debug_workflow.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dbos-inc/dbos-sdk",
3
- "version": "2.1.5-preview.g539c9d794d",
3
+ "version": "2.1.12-preview",
4
4
  "description": "A Typescript framework built on the database",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -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<R>(proc: StoredProcedure<R>, ...args: unknown[]): 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":"AACA,OAAO,EAAE,YAAY,EAAqC,MAAM,kBAAkB,CAAC;AAEnF,OAAO,EAAkB,WAAW,EAA0B,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAIvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAA6B,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAA2B,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAkB,MAAM,aAAa,CAAC;AACtJ,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,eAAe,EAA8B,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,UAAU,cAAc,CAAC,CAAC;IACxB,MAAM,EAAE,CAAC,CAAC;IACV,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAID;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,eAAgB,YAAW,eAAe;;IAKgB,QAAQ,CAAC,cAAc,EAAE,cAAc;IAJzI,UAAU,EAAE,MAAM,CAAK;IAEvB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;gBAErB,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,GAAG,SAAS,EAAE,YAAY,EAAE,MAAM,EAAW,cAAc,EAAE,cAAc,EACvI,YAAY,EAAE,MAAM;IAmBtB,sBAAsB,IAAI,MAAM;IAIhC,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,kBAAkB,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;IA6DzF,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAKnG,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAKnG;;;OAGG;IACG,WAAW,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA0EvH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAoEtE,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAmB1H,kBAAkB,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAMlG,mBAAmB,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7F;;;OAGG;IACH,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,EAAE,KAAK,CAAC,EAAE,aAAa,GACjK,gBAAgB,CAAC,CAAC,CAAC;IAyBrB,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,aAAa,GAAG,gBAAgB,CAAC,CAAC,CAAC;IAQ7G,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;IAS5E,aAAa,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAI7F,IAAI,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1F,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAc7F,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnD,QAAQ,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAa/G,gBAAgB,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC;IAMpD,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGtC"}
@@ -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, 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.executeProcedure(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,kBAA8C,EAAE,GAAG,IAAI,CAAC;4BACpG,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,CAAI,IAAwB,EAAE,GAAG,IAAe;QAC7D,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,IAAI,CAAC,IAAI,CAAC,CAAC;YAEtG,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,gBAAgB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpF,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"}