@dbos-inc/postgres-datasource 3.0.11-preview.gc9233b8190 → 3.0.13-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/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +38 -36
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/index.ts +48 -48
- package/package.json +6 -5
- package/tests/datasource.test.ts +57 -19
package/dist/index.d.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import postgres from 'postgres';
|
|
2
2
|
import { PGIsolationLevel as IsolationLevel, PGTransactionConfig as PostgresTransactionOptions, DBOSDataSource } from '@dbos-inc/dbos-sdk/datasource';
|
|
3
3
|
export { IsolationLevel, PostgresTransactionOptions };
|
|
4
|
+
type Options = postgres.Options<{}>;
|
|
4
5
|
export declare class PostgresDataSource implements DBOSDataSource<PostgresTransactionOptions> {
|
|
5
6
|
#private;
|
|
6
|
-
static get client(): postgres.TransactionSql<{}>;
|
|
7
|
-
static initializeInternalSchema(options?: postgres.Options<{}>): Promise<void>;
|
|
8
7
|
readonly name: string;
|
|
9
|
-
|
|
8
|
+
static get client(): postgres.TransactionSql;
|
|
9
|
+
static initializeInternalSchema(options?: Options): Promise<void>;
|
|
10
|
+
constructor(name: string, options?: Options);
|
|
10
11
|
runTransaction<T>(callback: () => Promise<T>, name: string, config?: PostgresTransactionOptions): Promise<T>;
|
|
11
|
-
registerTransaction<This, Args extends unknown[], Return>(func: (this: This, ...args: Args) => Promise<Return>,
|
|
12
|
-
transaction(config?: PostgresTransactionOptions): <This, Args extends unknown[], Return>(_target: object, propertyKey:
|
|
12
|
+
registerTransaction<This, Args extends unknown[], Return>(func: (this: This, ...args: Args) => Promise<Return>, config?: PostgresTransactionOptions, name?: string): (this: This, ...args: Args) => Promise<Return>;
|
|
13
|
+
transaction(config?: PostgresTransactionOptions): <This, Args extends unknown[], Return>(_target: object, propertyKey: PropertyKey, descriptor: TypedPropertyDescriptor<(this: This, ...args: Args) => Promise<Return>>) => TypedPropertyDescriptor<(this: This, ...args: Args) => Promise<Return>>;
|
|
13
14
|
}
|
|
14
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAEA,OAAO,QAAsB,MAAM,UAAU,CAAC;AAE9C,OAAO,EAQL,gBAAgB,IAAI,cAAc,EAClC,mBAAmB,IAAI,0BAA0B,EACjD,cAAc,EAEf,MAAM,+BAA+B,CAAC;AAIvC,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAEA,OAAO,QAAsB,MAAM,UAAU,CAAC;AAE9C,OAAO,EAQL,gBAAgB,IAAI,cAAc,EAClC,mBAAmB,IAAI,0BAA0B,EACjD,cAAc,EAEf,MAAM,+BAA+B,CAAC;AAIvC,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC;AAOtD,KAAK,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAqJpC,qBAAa,kBAAmB,YAAW,cAAc,CAAC,0BAA0B,CAAC;;IAyBjF,QAAQ,CAAC,IAAI,EAAE,MAAM;IAxBvB,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,cAAc,CAS3C;WAEY,wBAAwB,CAAC,OAAO,GAAE,OAAY,GAAG,OAAO,CAAC,IAAI,CAAC;gBAahE,IAAI,EAAE,MAAM,EACrB,OAAO,GAAE,OAAY;IAMjB,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,0BAA0B;IAIrG,mBAAmB,CAAC,IAAI,EAAE,IAAI,SAAS,OAAO,EAAE,EAAE,MAAM,EACtD,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,EACpD,MAAM,CAAC,EAAE,0BAA0B,EACnC,IAAI,CAAC,EAAE,MAAM,GACZ,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC;IAIjD,WAAW,CAAC,MAAM,CAAC,EAAE,0BAA0B,mDAIlC,MAAM,eACF,WAAW,cACZ,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,QAAQ,MAAM,CAAC,CAAC,oCAAxC,IAAI,WAAW,IAAI,KAAK,QAAQ,MAAM,CAAC;CAWvF"}
|
package/dist/index.js
CHANGED
|
@@ -14,37 +14,44 @@ const superjson_1 = require("superjson");
|
|
|
14
14
|
const asyncLocalCtx = new node_async_hooks_1.AsyncLocalStorage();
|
|
15
15
|
class PostgresTransactionHandler {
|
|
16
16
|
name;
|
|
17
|
+
options;
|
|
17
18
|
dsType = 'PostgresDataSource';
|
|
18
|
-
#
|
|
19
|
-
constructor(name,
|
|
20
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
21
|
-
options = {}) {
|
|
19
|
+
#dbField;
|
|
20
|
+
constructor(name, options = {}) {
|
|
22
21
|
this.name = name;
|
|
23
|
-
this
|
|
22
|
+
this.options = options;
|
|
23
|
+
}
|
|
24
|
+
async initialize() {
|
|
25
|
+
const db = this.#dbField;
|
|
26
|
+
this.#dbField = (0, postgres_1.default)(this.options);
|
|
27
|
+
await db?.end();
|
|
24
28
|
}
|
|
25
|
-
|
|
26
|
-
|
|
29
|
+
async destroy() {
|
|
30
|
+
const db = this.#dbField;
|
|
31
|
+
this.#dbField = undefined;
|
|
32
|
+
await db?.end();
|
|
27
33
|
}
|
|
28
|
-
|
|
29
|
-
|
|
34
|
+
get #db() {
|
|
35
|
+
if (!this.#dbField) {
|
|
36
|
+
throw new Error(`DataSource ${this.name} is not initialized.`);
|
|
37
|
+
}
|
|
38
|
+
return this.#dbField;
|
|
30
39
|
}
|
|
31
|
-
async #checkExecution(workflowID,
|
|
40
|
+
async #checkExecution(workflowID, stepID) {
|
|
32
41
|
const result = await this.#db `
|
|
33
42
|
SELECT output, error FROM dbos.transaction_completion
|
|
34
|
-
WHERE workflow_id = ${workflowID} AND function_num = ${
|
|
43
|
+
WHERE workflow_id = ${workflowID} AND function_num = ${stepID}`;
|
|
35
44
|
if (result.length === 0) {
|
|
36
45
|
return undefined;
|
|
37
46
|
}
|
|
38
47
|
const { output, error } = result[0];
|
|
39
48
|
return error !== null ? { error } : { output };
|
|
40
49
|
}
|
|
41
|
-
static async #recordOutput(
|
|
42
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
43
|
-
client, workflowID, functionNum, output) {
|
|
50
|
+
static async #recordOutput(client, workflowID, stepID, output) {
|
|
44
51
|
try {
|
|
45
52
|
await client /*sql*/ `
|
|
46
53
|
INSERT INTO dbos.transaction_completion (workflow_id, function_num, output)
|
|
47
|
-
VALUES (${workflowID}, ${
|
|
54
|
+
VALUES (${workflowID}, ${stepID}, ${output})`;
|
|
48
55
|
}
|
|
49
56
|
catch (error) {
|
|
50
57
|
if ((0, datasource_1.isPGKeyConflictError)(error)) {
|
|
@@ -55,11 +62,11 @@ class PostgresTransactionHandler {
|
|
|
55
62
|
}
|
|
56
63
|
}
|
|
57
64
|
}
|
|
58
|
-
async #recordError(workflowID,
|
|
65
|
+
async #recordError(workflowID, stepID, error) {
|
|
59
66
|
try {
|
|
60
67
|
await this.#db /*sql*/ `
|
|
61
68
|
INSERT INTO dbos.transaction_completion (workflow_id, function_num, error)
|
|
62
|
-
VALUES (${workflowID}, ${
|
|
69
|
+
VALUES (${workflowID}, ${stepID}, ${error})`;
|
|
63
70
|
}
|
|
64
71
|
catch (error) {
|
|
65
72
|
if ((0, datasource_1.isPGKeyConflictError)(error)) {
|
|
@@ -72,23 +79,21 @@ class PostgresTransactionHandler {
|
|
|
72
79
|
}
|
|
73
80
|
async invokeTransactionFunction(config, target, func, ...args) {
|
|
74
81
|
const workflowID = dbos_sdk_1.DBOS.workflowID;
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const functionNum = dbos_sdk_1.DBOS.stepID;
|
|
79
|
-
if (functionNum === undefined) {
|
|
80
|
-
throw new Error('Function Number is not set.');
|
|
82
|
+
const stepID = dbos_sdk_1.DBOS.stepID;
|
|
83
|
+
if (workflowID !== undefined && stepID === undefined) {
|
|
84
|
+
throw new Error('DBOS.stepID is undefined inside a workflow.');
|
|
81
85
|
}
|
|
82
86
|
const isolationLevel = config?.isolationLevel ? `ISOLATION LEVEL ${config.isolationLevel}` : '';
|
|
83
87
|
const readOnly = config?.readOnly ?? false;
|
|
84
88
|
const accessMode = config?.readOnly === undefined ? '' : readOnly ? 'READ ONLY' : 'READ WRITE';
|
|
85
|
-
const saveResults = !readOnly && workflowID;
|
|
89
|
+
const saveResults = !readOnly && workflowID !== undefined;
|
|
90
|
+
// Retry loop if appropriate
|
|
86
91
|
let retryWaitMS = 1;
|
|
87
92
|
const backoffFactor = 1.5;
|
|
88
|
-
const maxRetryWaitMS = 2000;
|
|
93
|
+
const maxRetryWaitMS = 2000; // Maximum wait 2 seconds.
|
|
89
94
|
while (true) {
|
|
90
95
|
// Check to see if this tx has already been executed
|
|
91
|
-
const previousResult = saveResults ? await this.#checkExecution(workflowID,
|
|
96
|
+
const previousResult = saveResults ? await this.#checkExecution(workflowID, stepID) : undefined;
|
|
92
97
|
if (previousResult) {
|
|
93
98
|
dbos_sdk_1.DBOS.span?.setAttribute('cached', true);
|
|
94
99
|
if ('error' in previousResult) {
|
|
@@ -104,7 +109,7 @@ class PostgresTransactionHandler {
|
|
|
104
109
|
});
|
|
105
110
|
// save the output of read/write transactions
|
|
106
111
|
if (saveResults) {
|
|
107
|
-
await PostgresTransactionHandler.#recordOutput(client, workflowID,
|
|
112
|
+
await PostgresTransactionHandler.#recordOutput(client, workflowID, stepID, superjson_1.SuperJSON.stringify(result));
|
|
108
113
|
}
|
|
109
114
|
return result;
|
|
110
115
|
});
|
|
@@ -121,7 +126,7 @@ class PostgresTransactionHandler {
|
|
|
121
126
|
else {
|
|
122
127
|
if (saveResults) {
|
|
123
128
|
const message = superjson_1.SuperJSON.stringify(error);
|
|
124
|
-
await this.#recordError(workflowID,
|
|
129
|
+
await this.#recordError(workflowID, stepID, message);
|
|
125
130
|
}
|
|
126
131
|
throw error;
|
|
127
132
|
}
|
|
@@ -130,18 +135,17 @@ class PostgresTransactionHandler {
|
|
|
130
135
|
}
|
|
131
136
|
}
|
|
132
137
|
class PostgresDataSource {
|
|
133
|
-
|
|
138
|
+
name;
|
|
134
139
|
static get client() {
|
|
135
140
|
if (!dbos_sdk_1.DBOS.isInTransaction()) {
|
|
136
141
|
throw new Error('invalid use of PostgresDataSource.client outside of a DBOS transaction.');
|
|
137
142
|
}
|
|
138
143
|
const ctx = asyncLocalCtx.getStore();
|
|
139
144
|
if (!ctx) {
|
|
140
|
-
throw new Error('
|
|
145
|
+
throw new Error('invalid use of PostgresDataSource.client outside of a DBOS transaction.');
|
|
141
146
|
}
|
|
142
147
|
return ctx.client;
|
|
143
148
|
}
|
|
144
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
145
149
|
static async initializeInternalSchema(options = {}) {
|
|
146
150
|
const pg = (0, postgres_1.default)({ ...options, onnotice: () => { } });
|
|
147
151
|
try {
|
|
@@ -152,9 +156,7 @@ class PostgresDataSource {
|
|
|
152
156
|
await pg.end();
|
|
153
157
|
}
|
|
154
158
|
}
|
|
155
|
-
name;
|
|
156
159
|
#provider;
|
|
157
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
158
160
|
constructor(name, options = {}) {
|
|
159
161
|
this.name = name;
|
|
160
162
|
this.#provider = new PostgresTransactionHandler(name, options);
|
|
@@ -163,8 +165,8 @@ class PostgresDataSource {
|
|
|
163
165
|
async runTransaction(callback, name, config) {
|
|
164
166
|
return await (0, datasource_1.runTransaction)(callback, name, { dsName: this.name, config });
|
|
165
167
|
}
|
|
166
|
-
registerTransaction(func,
|
|
167
|
-
return (0, datasource_1.registerTransaction)(this.name, func, { name }, config);
|
|
168
|
+
registerTransaction(func, config, name) {
|
|
169
|
+
return (0, datasource_1.registerTransaction)(this.name, func, { name: name ?? func.name }, config);
|
|
168
170
|
}
|
|
169
171
|
transaction(config) {
|
|
170
172
|
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
@@ -173,7 +175,7 @@ class PostgresDataSource {
|
|
|
173
175
|
if (!descriptor.value) {
|
|
174
176
|
throw Error('Use of decorator when original method is undefined');
|
|
175
177
|
}
|
|
176
|
-
descriptor.value = ds.registerTransaction(descriptor.value,
|
|
178
|
+
descriptor.value = ds.registerTransaction(descriptor.value, config, String(propertyKey));
|
|
177
179
|
return descriptor;
|
|
178
180
|
};
|
|
179
181
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";AAAA,6CAA6C;;;;;;AAE7C,wDAA8C;AAC9C,iDAAqE;AACrE,8DAYuC;AAI9B,+FARa,6BAAc,OAQb;AAHvB,uDAAqD;AACrD,yCAAsC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|