@dbos-inc/drizzle-datasource 3.0.13-preview → 3.0.17-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 +9 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -8
- package/dist/index.js.map +1 -1
- package/index.ts +23 -9
- package/package.json +1 -1
- package/tests/config.test.ts +1 -1
- package/tests/datasource.test.ts +5 -5
- package/dist/tsconfig.tsbuildinfo +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,9 @@ import { ClientConfig, PoolConfig } from 'pg';
|
|
|
2
2
|
import { DBOSDataSource } from '@dbos-inc/dbos-sdk/datasource';
|
|
3
3
|
import { NodePgDatabase } from 'drizzle-orm/node-postgres';
|
|
4
4
|
import { PgTransactionConfig } from 'drizzle-orm/pg-core';
|
|
5
|
-
export type TransactionConfig = Pick<PgTransactionConfig, 'isolationLevel' | 'accessMode'
|
|
5
|
+
export type TransactionConfig = Pick<PgTransactionConfig, 'isolationLevel' | 'accessMode'> & {
|
|
6
|
+
name?: string;
|
|
7
|
+
};
|
|
6
8
|
export interface transaction_completion {
|
|
7
9
|
workflow_id: string;
|
|
8
10
|
function_num: number;
|
|
@@ -15,12 +17,15 @@ export declare class DrizzleDataSource implements DBOSDataSource<TransactionConf
|
|
|
15
17
|
static get client(): NodePgDatabase<{
|
|
16
18
|
[key: string]: object;
|
|
17
19
|
}>;
|
|
18
|
-
|
|
20
|
+
get client(): NodePgDatabase<{
|
|
21
|
+
[key: string]: object;
|
|
22
|
+
}>;
|
|
23
|
+
static initializeDBOSSchema(config: ClientConfig): Promise<void>;
|
|
19
24
|
constructor(name: string, config: PoolConfig, entities?: {
|
|
20
25
|
[key: string]: object;
|
|
21
26
|
});
|
|
22
|
-
runTransaction<T>(
|
|
23
|
-
registerTransaction<This, Args extends unknown[], Return>(func: (this: This, ...args: Args) => Promise<Return>, config?: TransactionConfig
|
|
27
|
+
runTransaction<T>(func: () => Promise<T>, config?: TransactionConfig): Promise<T>;
|
|
28
|
+
registerTransaction<This, Args extends unknown[], Return>(func: (this: This, ...args: Args) => Promise<Return>, config?: TransactionConfig): (this: This, ...args: Args) => Promise<Return>;
|
|
24
29
|
transaction(config?: TransactionConfig): <This, Args extends unknown[], Return>(_target: object, propertyKey: PropertyKey, descriptor: TypedPropertyDescriptor<(this: This, ...args: Args) => Promise<Return>>) => TypedPropertyDescriptor<(this: This, ...args: Args) => Promise<Return>>;
|
|
25
30
|
}
|
|
26
31
|
//# 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":"AAAA,OAAO,EAAU,YAAY,EAAQ,UAAU,EAAE,MAAM,IAAI,CAAC;AAE5D,OAAO,EAQL,cAAc,EAEf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAW,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAQ,UAAU,EAAE,MAAM,IAAI,CAAC;AAE5D,OAAO,EAQL,cAAc,EAEf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAW,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAQ1D,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,EAAE,gBAAgB,GAAG,YAAY,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAI/G,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAwKD,qBAAa,iBAAkB,YAAW,cAAc,CAAC,iBAAiB,CAAC;;IAsCvE,QAAQ,CAAC,IAAI,EAAE,MAAM;IAtBvB,MAAM,KAAK,MAAM;;OAEhB;IAED,IAAI,MAAM;;OAET;WAEY,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;gBAc3D,IAAI,EAAE,MAAM,EACrB,MAAM,EAAE,UAAU,EAClB,QAAQ,GAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAO;IAMpC,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,iBAAiB;IAI1E,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,iBAAiB,GACzB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC;IAKjD,WAAW,CAAC,MAAM,CAAC,EAAE,iBAAiB,mDAIzB,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;CAcvF"}
|
package/dist/index.js
CHANGED
|
@@ -107,7 +107,7 @@ class DrizzleTransactionHandler {
|
|
|
107
107
|
try {
|
|
108
108
|
const result = await this.#drizzle.transaction(async (client) => {
|
|
109
109
|
// execute user's transaction function
|
|
110
|
-
const result = await asyncLocalCtx.run({ client }, async () => {
|
|
110
|
+
const result = await asyncLocalCtx.run({ client, owner: this }, async () => {
|
|
111
111
|
return await func.call(target, ...args);
|
|
112
112
|
});
|
|
113
113
|
// save the output of read/write transactions
|
|
@@ -140,7 +140,7 @@ class DrizzleTransactionHandler {
|
|
|
140
140
|
class DrizzleDataSource {
|
|
141
141
|
name;
|
|
142
142
|
// User calls this... DBOS not directly involved...
|
|
143
|
-
static
|
|
143
|
+
static #getClient(p) {
|
|
144
144
|
if (!dbos_sdk_1.DBOS.isInTransaction()) {
|
|
145
145
|
throw new Error('Invalid use of DrizzleDataSource.client outside of a DBOS transaction');
|
|
146
146
|
}
|
|
@@ -148,9 +148,18 @@ class DrizzleDataSource {
|
|
|
148
148
|
if (!ctx) {
|
|
149
149
|
throw new Error('Invalid use of DrizzleDataSource.client outside of a DBOS transaction');
|
|
150
150
|
}
|
|
151
|
+
if (p && p !== ctx.owner) {
|
|
152
|
+
throw new Error('Invalid retrieval of `DrizzleDataSource.client` from the incorrect object');
|
|
153
|
+
}
|
|
151
154
|
return ctx.client;
|
|
152
155
|
}
|
|
153
|
-
static
|
|
156
|
+
static get client() {
|
|
157
|
+
return DrizzleDataSource.#getClient(undefined);
|
|
158
|
+
}
|
|
159
|
+
get client() {
|
|
160
|
+
return DrizzleDataSource.#getClient(this.#provider);
|
|
161
|
+
}
|
|
162
|
+
static async initializeDBOSSchema(config) {
|
|
154
163
|
const client = new pg_1.Client(config);
|
|
155
164
|
try {
|
|
156
165
|
await client.connect();
|
|
@@ -167,11 +176,11 @@ class DrizzleDataSource {
|
|
|
167
176
|
this.#provider = new DrizzleTransactionHandler(name, config, entities);
|
|
168
177
|
(0, datasource_1.registerDataSource)(this.#provider);
|
|
169
178
|
}
|
|
170
|
-
async runTransaction(
|
|
171
|
-
return await (0, datasource_1.runTransaction)(
|
|
179
|
+
async runTransaction(func, config) {
|
|
180
|
+
return await (0, datasource_1.runTransaction)(func, config?.name ?? func.name, { dsName: this.name, config });
|
|
172
181
|
}
|
|
173
|
-
registerTransaction(func, config
|
|
174
|
-
return (0, datasource_1.registerTransaction)(this.name, func, { name: name ?? func.name }, config);
|
|
182
|
+
registerTransaction(func, config) {
|
|
183
|
+
return (0, datasource_1.registerTransaction)(this.name, func, { name: config?.name ?? func.name }, config);
|
|
175
184
|
}
|
|
176
185
|
// decorator
|
|
177
186
|
transaction(config) {
|
|
@@ -181,7 +190,10 @@ class DrizzleDataSource {
|
|
|
181
190
|
if (!descriptor.value) {
|
|
182
191
|
throw new Error('Use of decorator when original method is undefined');
|
|
183
192
|
}
|
|
184
|
-
descriptor.value = ds.registerTransaction(descriptor.value,
|
|
193
|
+
descriptor.value = ds.registerTransaction(descriptor.value, {
|
|
194
|
+
...config,
|
|
195
|
+
name: config?.name ?? String(propertyKey),
|
|
196
|
+
});
|
|
185
197
|
return descriptor;
|
|
186
198
|
};
|
|
187
199
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,2BAA4D;AAC5D,iDAAqE;AACrE,8DAUuC;AACvC,6DAAoE;AACpE,6CAAgD;AAChD,yCAAsC;AAEtC,6CAAkC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/index.ts
CHANGED
|
@@ -19,9 +19,10 @@ import { sql } from 'drizzle-orm';
|
|
|
19
19
|
|
|
20
20
|
interface DrizzleLocalCtx {
|
|
21
21
|
client: NodePgDatabase<{ [key: string]: object }>;
|
|
22
|
+
owner: DrizzleTransactionHandler;
|
|
22
23
|
}
|
|
23
24
|
|
|
24
|
-
export type TransactionConfig = Pick<PgTransactionConfig, 'isolationLevel' | 'accessMode'
|
|
25
|
+
export type TransactionConfig = Pick<PgTransactionConfig, 'isolationLevel' | 'accessMode'> & { name?: string };
|
|
25
26
|
|
|
26
27
|
const asyncLocalCtx = new AsyncLocalStorage<DrizzleLocalCtx>();
|
|
27
28
|
|
|
@@ -163,7 +164,7 @@ class DrizzleTransactionHandler implements DataSourceTransactionHandler {
|
|
|
163
164
|
const result = await this.#drizzle.transaction(
|
|
164
165
|
async (client) => {
|
|
165
166
|
// execute user's transaction function
|
|
166
|
-
const result = await asyncLocalCtx.run({ client }, async () => {
|
|
167
|
+
const result = await asyncLocalCtx.run({ client, owner: this }, async () => {
|
|
167
168
|
return await func.call(target, ...args);
|
|
168
169
|
});
|
|
169
170
|
|
|
@@ -200,7 +201,7 @@ class DrizzleTransactionHandler implements DataSourceTransactionHandler {
|
|
|
200
201
|
|
|
201
202
|
export class DrizzleDataSource implements DBOSDataSource<TransactionConfig> {
|
|
202
203
|
// User calls this... DBOS not directly involved...
|
|
203
|
-
static
|
|
204
|
+
static #getClient(p?: DrizzleTransactionHandler): NodePgDatabase<{ [key: string]: object }> {
|
|
204
205
|
if (!DBOS.isInTransaction()) {
|
|
205
206
|
throw new Error('Invalid use of DrizzleDataSource.client outside of a DBOS transaction');
|
|
206
207
|
}
|
|
@@ -208,10 +209,21 @@ export class DrizzleDataSource implements DBOSDataSource<TransactionConfig> {
|
|
|
208
209
|
if (!ctx) {
|
|
209
210
|
throw new Error('Invalid use of DrizzleDataSource.client outside of a DBOS transaction');
|
|
210
211
|
}
|
|
212
|
+
if (p && p !== ctx.owner) {
|
|
213
|
+
throw new Error('Invalid retrieval of `DrizzleDataSource.client` from the incorrect object');
|
|
214
|
+
}
|
|
211
215
|
return ctx.client;
|
|
212
216
|
}
|
|
213
217
|
|
|
214
|
-
static
|
|
218
|
+
static get client() {
|
|
219
|
+
return DrizzleDataSource.#getClient(undefined);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
get client() {
|
|
223
|
+
return DrizzleDataSource.#getClient(this.#provider);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
static async initializeDBOSSchema(config: ClientConfig): Promise<void> {
|
|
215
227
|
const client = new Client(config);
|
|
216
228
|
try {
|
|
217
229
|
await client.connect();
|
|
@@ -233,16 +245,15 @@ export class DrizzleDataSource implements DBOSDataSource<TransactionConfig> {
|
|
|
233
245
|
registerDataSource(this.#provider);
|
|
234
246
|
}
|
|
235
247
|
|
|
236
|
-
async runTransaction<T>(
|
|
237
|
-
return await runTransaction(
|
|
248
|
+
async runTransaction<T>(func: () => Promise<T>, config?: TransactionConfig) {
|
|
249
|
+
return await runTransaction(func, config?.name ?? func.name, { dsName: this.name, config });
|
|
238
250
|
}
|
|
239
251
|
|
|
240
252
|
registerTransaction<This, Args extends unknown[], Return>(
|
|
241
253
|
func: (this: This, ...args: Args) => Promise<Return>,
|
|
242
254
|
config?: TransactionConfig,
|
|
243
|
-
name?: string,
|
|
244
255
|
): (this: This, ...args: Args) => Promise<Return> {
|
|
245
|
-
return registerTransaction(this.name, func, { name: name ?? func.name }, config);
|
|
256
|
+
return registerTransaction(this.name, func, { name: config?.name ?? func.name }, config);
|
|
246
257
|
}
|
|
247
258
|
|
|
248
259
|
// decorator
|
|
@@ -258,7 +269,10 @@ export class DrizzleDataSource implements DBOSDataSource<TransactionConfig> {
|
|
|
258
269
|
throw new Error('Use of decorator when original method is undefined');
|
|
259
270
|
}
|
|
260
271
|
|
|
261
|
-
descriptor.value = ds.registerTransaction(descriptor.value,
|
|
272
|
+
descriptor.value = ds.registerTransaction(descriptor.value, {
|
|
273
|
+
...config,
|
|
274
|
+
name: config?.name ?? String(propertyKey),
|
|
275
|
+
});
|
|
262
276
|
|
|
263
277
|
return descriptor;
|
|
264
278
|
};
|
package/package.json
CHANGED
package/tests/config.test.ts
CHANGED
|
@@ -17,7 +17,7 @@ describe('DrizzleDataSource.configure', () => {
|
|
|
17
17
|
});
|
|
18
18
|
|
|
19
19
|
test('configure creates tx outputs table', async () => {
|
|
20
|
-
await DrizzleDataSource.
|
|
20
|
+
await DrizzleDataSource.initializeDBOSSchema(config);
|
|
21
21
|
|
|
22
22
|
const client = new Client(config);
|
|
23
23
|
try {
|
package/tests/datasource.test.ts
CHANGED
|
@@ -47,7 +47,7 @@ describe('DrizzleDataSource', () => {
|
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
await DrizzleDataSource.
|
|
50
|
+
await DrizzleDataSource.initializeDBOSSchema(config);
|
|
51
51
|
await createSchema(config, { greetingsTable });
|
|
52
52
|
});
|
|
53
53
|
|
|
@@ -363,7 +363,7 @@ async function errorFunction(user: string) {
|
|
|
363
363
|
}
|
|
364
364
|
|
|
365
365
|
async function readFunction(user: string) {
|
|
366
|
-
const result = await
|
|
366
|
+
const result = await dataSource.client
|
|
367
367
|
.select({ greet_count: greetingsTable.greet_count })
|
|
368
368
|
.from(greetingsTable)
|
|
369
369
|
.where(eq(greetingsTable.name, user));
|
|
@@ -415,7 +415,7 @@ async function insertWorkflowReg(user: string) {
|
|
|
415
415
|
}
|
|
416
416
|
|
|
417
417
|
async function insertWorkflowRunTx(user: string) {
|
|
418
|
-
return await dataSource.runTransaction(() => insertFunction(user), 'insertFunction');
|
|
418
|
+
return await dataSource.runTransaction(() => insertFunction(user), { name: 'insertFunction' });
|
|
419
419
|
}
|
|
420
420
|
|
|
421
421
|
async function errorWorkflowReg(user: string) {
|
|
@@ -423,7 +423,7 @@ async function errorWorkflowReg(user: string) {
|
|
|
423
423
|
}
|
|
424
424
|
|
|
425
425
|
async function errorWorkflowRunTx(user: string) {
|
|
426
|
-
return await dataSource.runTransaction(() => errorFunction(user), 'errorFunction');
|
|
426
|
+
return await dataSource.runTransaction(() => errorFunction(user), { name: 'errorFunction' });
|
|
427
427
|
}
|
|
428
428
|
|
|
429
429
|
async function readWorkflowReg(user: string) {
|
|
@@ -431,7 +431,7 @@ async function readWorkflowReg(user: string) {
|
|
|
431
431
|
}
|
|
432
432
|
|
|
433
433
|
async function readWorkflowRunTx(user: string) {
|
|
434
|
-
return await dataSource.runTransaction(() => readFunction(user), 'readFunction',
|
|
434
|
+
return await dataSource.runTransaction(() => readFunction(user), { name: 'readFunction', accessMode: 'read only' });
|
|
435
435
|
}
|
|
436
436
|
|
|
437
437
|
async function staticWorkflow(user: string) {
|