@dbos-inc/postgres-datasource 4.4.4-preview.gc90a14c7ef → 4.4.7-preview.g8b8b418a5b
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 +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -15
- package/dist/index.js.map +1 -1
- package/index.ts +27 -13
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -11,8 +11,8 @@ export declare class PostgresDataSource implements DBOSDataSource<PostgresTransa
|
|
|
11
11
|
readonly name: string;
|
|
12
12
|
static get client(): postgres.TransactionSql<{}>;
|
|
13
13
|
get client(): postgres.TransactionSql<{}>;
|
|
14
|
-
static initializeDBOSSchema(options?: Options): Promise<void>;
|
|
15
|
-
constructor(name: string, options?: Options);
|
|
14
|
+
static initializeDBOSSchema(options?: Options, schemaName?: string): Promise<void>;
|
|
15
|
+
constructor(name: string, options?: Options, schemaName?: string);
|
|
16
16
|
runTransaction<T>(func: () => Promise<T>, config?: PostgresTransactionOptions): Promise<T>;
|
|
17
17
|
registerTransaction<This, Args extends unknown[], Return>(func: (this: This, ...args: Args) => Promise<Return>, config?: PostgresTransactionOptions & FunctionName): (this: This, ...args: Args) => Promise<Return>;
|
|
18
18
|
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>>;
|
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;AAC9C,OAAO,EAAmC,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAQL,gBAAgB,IAAI,cAAc,EAClC,mBAAmB,EACnB,cAAc,EAIf,MAAM,+BAA+B,CAAC;AAIvC,UAAU,0BAA2B,SAAQ,mBAAmB;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC;AAQtD,KAAK,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAEA,OAAO,QAAsB,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAmC,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAQL,gBAAgB,IAAI,cAAc,EAClC,mBAAmB,EACnB,cAAc,EAIf,MAAM,+BAA+B,CAAC;AAIvC,UAAU,0BAA2B,SAAQ,mBAAmB;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC;AAQtD,KAAK,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAyLpC,qBAAa,kBAAmB,YAAW,cAAc,CAAC,0BAA0B,CAAC;;IAoCjF,QAAQ,CAAC,IAAI,EAAE,MAAM;IArBvB,MAAM,KAAK,MAAM,gCAEhB;IAED,IAAI,MAAM,gCAET;WAEY,oBAAoB,CAAC,OAAO,GAAE,OAAY,EAAE,UAAU,GAAE,MAAe,GAAG,OAAO,CAAC,IAAI,CAAC;gBAazF,IAAI,EAAE,MAAM,EACrB,OAAO,GAAE,OAAY,EACrB,UAAU,GAAE,MAAe;IAMvB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,0BAA0B;IAInF,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,GAAG,YAAY,GACjD,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC;IAIjD,WAAW,CAAC,MAAM,CAAC,EAAE,0BAA0B,kDAInC,MAAM,eACD,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;CAevF"}
|
package/dist/index.js
CHANGED
|
@@ -17,9 +17,11 @@ class PostgresTransactionHandler {
|
|
|
17
17
|
options;
|
|
18
18
|
dsType = 'PostgresDataSource';
|
|
19
19
|
#dbField;
|
|
20
|
-
|
|
20
|
+
schemaName;
|
|
21
|
+
constructor(name, options = {}, schemaName = 'dbos') {
|
|
21
22
|
this.name = name;
|
|
22
23
|
this.options = options;
|
|
24
|
+
this.schemaName = schemaName;
|
|
23
25
|
}
|
|
24
26
|
async initialize() {
|
|
25
27
|
const db = this.#dbField;
|
|
@@ -27,7 +29,7 @@ class PostgresTransactionHandler {
|
|
|
27
29
|
await db?.end();
|
|
28
30
|
let installed = false;
|
|
29
31
|
try {
|
|
30
|
-
const rows = (await this.#dbField.unsafe(datasource_1.checkSchemaInstallationPG));
|
|
32
|
+
const rows = (await this.#dbField.unsafe((0, datasource_1.checkSchemaInstallationPG)(this.schemaName)));
|
|
31
33
|
installed = !!rows[0]?.schema_exists && !!rows[0]?.table_exists;
|
|
32
34
|
}
|
|
33
35
|
catch (e) {
|
|
@@ -36,11 +38,11 @@ class PostgresTransactionHandler {
|
|
|
36
38
|
// Install
|
|
37
39
|
if (!installed) {
|
|
38
40
|
try {
|
|
39
|
-
await this.#dbField.unsafe(datasource_1.createTransactionCompletionSchemaPG);
|
|
40
|
-
await this.#dbField.unsafe(datasource_1.createTransactionCompletionTablePG);
|
|
41
|
+
await this.#dbField.unsafe((0, datasource_1.createTransactionCompletionSchemaPG)(this.schemaName));
|
|
42
|
+
await this.#dbField.unsafe((0, datasource_1.createTransactionCompletionTablePG)(this.schemaName));
|
|
41
43
|
}
|
|
42
44
|
catch (err) {
|
|
43
|
-
throw new Error(`In initialization of 'PostgresDataSource' ${this.name}: The '
|
|
45
|
+
throw new Error(`In initialization of 'PostgresDataSource' ${this.name}: The '${this.schemaName}.transaction_completion' table does not exist, and could not be created. This should be added to your database migrations.
|
|
44
46
|
See: https://docs.dbos.dev/typescript/tutorials/transaction-tutorial#installing-the-dbos-schema`);
|
|
45
47
|
}
|
|
46
48
|
}
|
|
@@ -58,7 +60,7 @@ class PostgresTransactionHandler {
|
|
|
58
60
|
}
|
|
59
61
|
async #checkExecution(workflowID, stepID) {
|
|
60
62
|
const result = await this.#db `
|
|
61
|
-
SELECT output, error FROM
|
|
63
|
+
SELECT output, error FROM ${this.#db(this.schemaName)}.transaction_completion
|
|
62
64
|
WHERE workflow_id = ${workflowID} AND function_num = ${stepID}`;
|
|
63
65
|
if (result.length === 0) {
|
|
64
66
|
return undefined;
|
|
@@ -66,10 +68,10 @@ class PostgresTransactionHandler {
|
|
|
66
68
|
const { output, error } = result[0];
|
|
67
69
|
return error !== null ? { error } : { output };
|
|
68
70
|
}
|
|
69
|
-
static async #recordOutput(client, workflowID, stepID, output) {
|
|
71
|
+
static async #recordOutput(client, workflowID, stepID, output, schemaName) {
|
|
70
72
|
try {
|
|
71
73
|
await client /*sql*/ `
|
|
72
|
-
INSERT INTO
|
|
74
|
+
INSERT INTO ${client(schemaName)}.transaction_completion (workflow_id, function_num, output)
|
|
73
75
|
VALUES (${workflowID}, ${stepID}, ${output})`;
|
|
74
76
|
}
|
|
75
77
|
catch (error) {
|
|
@@ -84,7 +86,7 @@ class PostgresTransactionHandler {
|
|
|
84
86
|
async #recordError(workflowID, stepID, error) {
|
|
85
87
|
try {
|
|
86
88
|
await this.#db /*sql*/ `
|
|
87
|
-
INSERT INTO
|
|
89
|
+
INSERT INTO ${this.#db(this.schemaName)}.transaction_completion (workflow_id, function_num, error)
|
|
88
90
|
VALUES (${workflowID}, ${stepID}, ${error})`;
|
|
89
91
|
}
|
|
90
92
|
catch (error) {
|
|
@@ -128,7 +130,7 @@ class PostgresTransactionHandler {
|
|
|
128
130
|
});
|
|
129
131
|
// save the output of read/write transactions
|
|
130
132
|
if (saveResults) {
|
|
131
|
-
await PostgresTransactionHandler.#recordOutput(client, workflowID, stepID, superjson_1.SuperJSON.stringify(result));
|
|
133
|
+
await PostgresTransactionHandler.#recordOutput(client, workflowID, stepID, superjson_1.SuperJSON.stringify(result), this.schemaName);
|
|
132
134
|
}
|
|
133
135
|
return result;
|
|
134
136
|
});
|
|
@@ -174,20 +176,20 @@ class PostgresDataSource {
|
|
|
174
176
|
get client() {
|
|
175
177
|
return PostgresDataSource.#getClient(this.#provider);
|
|
176
178
|
}
|
|
177
|
-
static async initializeDBOSSchema(options = {}) {
|
|
179
|
+
static async initializeDBOSSchema(options = {}, schemaName = 'dbos') {
|
|
178
180
|
const pg = (0, postgres_1.default)({ ...options, onnotice: () => { } });
|
|
179
181
|
try {
|
|
180
|
-
await pg.unsafe(datasource_1.createTransactionCompletionSchemaPG);
|
|
181
|
-
await pg.unsafe(datasource_1.createTransactionCompletionTablePG);
|
|
182
|
+
await pg.unsafe((0, datasource_1.createTransactionCompletionSchemaPG)(schemaName));
|
|
183
|
+
await pg.unsafe((0, datasource_1.createTransactionCompletionTablePG)(schemaName));
|
|
182
184
|
}
|
|
183
185
|
finally {
|
|
184
186
|
await pg.end();
|
|
185
187
|
}
|
|
186
188
|
}
|
|
187
189
|
#provider;
|
|
188
|
-
constructor(name, options = {}) {
|
|
190
|
+
constructor(name, options = {}, schemaName = 'dbos') {
|
|
189
191
|
this.name = name;
|
|
190
|
-
this.#provider = new PostgresTransactionHandler(name, options);
|
|
192
|
+
this.#provider = new PostgresTransactionHandler(name, options, schemaName);
|
|
191
193
|
(0, datasource_1.registerDataSource)(this.#provider);
|
|
192
194
|
}
|
|
193
195
|
async runTransaction(func, config) {
|
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,iDAAmF;AACnF,8DAcuC;AAQ9B,+FAda,6BAAc,OAcb;AAPvB,uDAAqD;AACrD,yCAAsC;AAgBtC,MAAM,aAAa,GAAG,IAAI,oCAAiB,EAA6B,CAAC;AAEzE,MAAM,0BAA0B;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/index.ts
CHANGED
|
@@ -39,11 +39,15 @@ const asyncLocalCtx = new AsyncLocalStorage<PostgresDataSourceContext>();
|
|
|
39
39
|
class PostgresTransactionHandler implements DataSourceTransactionHandler {
|
|
40
40
|
readonly dsType = 'PostgresDataSource';
|
|
41
41
|
#dbField: Sql | undefined;
|
|
42
|
+
readonly schemaName: string;
|
|
42
43
|
|
|
43
44
|
constructor(
|
|
44
45
|
readonly name: string,
|
|
45
46
|
private readonly options: Options = {},
|
|
46
|
-
|
|
47
|
+
schemaName: string = 'dbos',
|
|
48
|
+
) {
|
|
49
|
+
this.schemaName = schemaName;
|
|
50
|
+
}
|
|
47
51
|
|
|
48
52
|
async initialize(): Promise<void> {
|
|
49
53
|
const db = this.#dbField;
|
|
@@ -52,7 +56,9 @@ class PostgresTransactionHandler implements DataSourceTransactionHandler {
|
|
|
52
56
|
|
|
53
57
|
let installed = false;
|
|
54
58
|
try {
|
|
55
|
-
const rows = (await this.#dbField.unsafe(
|
|
59
|
+
const rows = (await this.#dbField.unsafe(
|
|
60
|
+
checkSchemaInstallationPG(this.schemaName),
|
|
61
|
+
)) as CheckSchemaInstallationReturn[];
|
|
56
62
|
installed = !!rows[0]?.schema_exists && !!rows[0]?.table_exists;
|
|
57
63
|
} catch (e) {
|
|
58
64
|
throw new Error(
|
|
@@ -63,11 +69,11 @@ class PostgresTransactionHandler implements DataSourceTransactionHandler {
|
|
|
63
69
|
// Install
|
|
64
70
|
if (!installed) {
|
|
65
71
|
try {
|
|
66
|
-
await this.#dbField.unsafe(createTransactionCompletionSchemaPG);
|
|
67
|
-
await this.#dbField.unsafe(createTransactionCompletionTablePG);
|
|
72
|
+
await this.#dbField.unsafe(createTransactionCompletionSchemaPG(this.schemaName));
|
|
73
|
+
await this.#dbField.unsafe(createTransactionCompletionTablePG(this.schemaName));
|
|
68
74
|
} catch (err) {
|
|
69
75
|
throw new Error(
|
|
70
|
-
`In initialization of 'PostgresDataSource' ${this.name}: The '
|
|
76
|
+
`In initialization of 'PostgresDataSource' ${this.name}: The '${this.schemaName}.transaction_completion' table does not exist, and could not be created. This should be added to your database migrations.
|
|
71
77
|
See: https://docs.dbos.dev/typescript/tutorials/transaction-tutorial#installing-the-dbos-schema`,
|
|
72
78
|
);
|
|
73
79
|
}
|
|
@@ -93,7 +99,7 @@ class PostgresTransactionHandler implements DataSourceTransactionHandler {
|
|
|
93
99
|
): Promise<{ output: string | null } | { error: string } | undefined> {
|
|
94
100
|
type Result = { output: string | null; error: string | null };
|
|
95
101
|
const result = await this.#db<Result[]>/*sql*/ `
|
|
96
|
-
SELECT output, error FROM
|
|
102
|
+
SELECT output, error FROM ${this.#db(this.schemaName)}.transaction_completion
|
|
97
103
|
WHERE workflow_id = ${workflowID} AND function_num = ${stepID}`;
|
|
98
104
|
if (result.length === 0) {
|
|
99
105
|
return undefined;
|
|
@@ -107,10 +113,11 @@ class PostgresTransactionHandler implements DataSourceTransactionHandler {
|
|
|
107
113
|
workflowID: string,
|
|
108
114
|
stepID: number,
|
|
109
115
|
output: string | null,
|
|
116
|
+
schemaName: string,
|
|
110
117
|
): Promise<void> {
|
|
111
118
|
try {
|
|
112
119
|
await client/*sql*/ `
|
|
113
|
-
INSERT INTO
|
|
120
|
+
INSERT INTO ${client(schemaName)}.transaction_completion (workflow_id, function_num, output)
|
|
114
121
|
VALUES (${workflowID}, ${stepID}, ${output})`;
|
|
115
122
|
} catch (error) {
|
|
116
123
|
if (isPGKeyConflictError(error)) {
|
|
@@ -124,7 +131,7 @@ class PostgresTransactionHandler implements DataSourceTransactionHandler {
|
|
|
124
131
|
async #recordError(workflowID: string, stepID: number, error: string): Promise<void> {
|
|
125
132
|
try {
|
|
126
133
|
await this.#db/*sql*/ `
|
|
127
|
-
INSERT INTO
|
|
134
|
+
INSERT INTO ${this.#db(this.schemaName)}.transaction_completion (workflow_id, function_num, error)
|
|
128
135
|
VALUES (${workflowID}, ${stepID}, ${error})`;
|
|
129
136
|
} catch (error) {
|
|
130
137
|
if (isPGKeyConflictError(error)) {
|
|
@@ -178,7 +185,13 @@ class PostgresTransactionHandler implements DataSourceTransactionHandler {
|
|
|
178
185
|
|
|
179
186
|
// save the output of read/write transactions
|
|
180
187
|
if (saveResults) {
|
|
181
|
-
await PostgresTransactionHandler.#recordOutput(
|
|
188
|
+
await PostgresTransactionHandler.#recordOutput(
|
|
189
|
+
client,
|
|
190
|
+
workflowID,
|
|
191
|
+
stepID!,
|
|
192
|
+
SuperJSON.stringify(result),
|
|
193
|
+
this.schemaName,
|
|
194
|
+
);
|
|
182
195
|
}
|
|
183
196
|
|
|
184
197
|
return result;
|
|
@@ -227,11 +240,11 @@ export class PostgresDataSource implements DBOSDataSource<PostgresTransactionOpt
|
|
|
227
240
|
return PostgresDataSource.#getClient(this.#provider);
|
|
228
241
|
}
|
|
229
242
|
|
|
230
|
-
static async initializeDBOSSchema(options: Options = {}): Promise<void> {
|
|
243
|
+
static async initializeDBOSSchema(options: Options = {}, schemaName: string = 'dbos'): Promise<void> {
|
|
231
244
|
const pg = postgres({ ...options, onnotice: () => {} });
|
|
232
245
|
try {
|
|
233
|
-
await pg.unsafe(createTransactionCompletionSchemaPG);
|
|
234
|
-
await pg.unsafe(createTransactionCompletionTablePG);
|
|
246
|
+
await pg.unsafe(createTransactionCompletionSchemaPG(schemaName));
|
|
247
|
+
await pg.unsafe(createTransactionCompletionTablePG(schemaName));
|
|
235
248
|
} finally {
|
|
236
249
|
await pg.end();
|
|
237
250
|
}
|
|
@@ -242,8 +255,9 @@ export class PostgresDataSource implements DBOSDataSource<PostgresTransactionOpt
|
|
|
242
255
|
constructor(
|
|
243
256
|
readonly name: string,
|
|
244
257
|
options: Options = {},
|
|
258
|
+
schemaName: string = 'dbos',
|
|
245
259
|
) {
|
|
246
|
-
this.#provider = new PostgresTransactionHandler(name, options);
|
|
260
|
+
this.#provider = new PostgresTransactionHandler(name, options, schemaName);
|
|
247
261
|
registerDataSource(this.#provider);
|
|
248
262
|
}
|
|
249
263
|
|
package/package.json
CHANGED