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