@dbos-inc/drizzle-datasource 3.1.11-preview → 3.2.5-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.map +1 -1
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -1
- package/index.ts +28 -1
- package/package.json +1 -1
- package/tests/datasource.test.ts +64 -15
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;AAC5D,OAAO,EAAmC,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAQL,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAQ,UAAU,EAAE,MAAM,IAAI,CAAC;AAC5D,OAAO,EAAmC,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAQL,cAAc,EAIf,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;AAiMD,qBAAa,iBAAiB,CAAC,EAAE,GAAG,cAAc,CAAC;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC,CAC3E,YAAW,cAAc,CAAC,iBAAiB,CAAC;;IAuC1C,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,GAAG,YAAY,GACxC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC;IAKjD,WAAW,CAAC,MAAM,CAAC,EAAE,iBAAiB,kDAI1B,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
|
@@ -26,6 +26,28 @@ class DrizzleTransactionHandler {
|
|
|
26
26
|
const db = (0, node_postgres_1.drizzle)(driver, { schema: this.entities });
|
|
27
27
|
this.#connection = { db, end: () => driver.end() };
|
|
28
28
|
await conn?.end();
|
|
29
|
+
let installed = false;
|
|
30
|
+
try {
|
|
31
|
+
const res = (await db.execute(drizzle_orm_1.sql.raw(datasource_1.checkSchemaInstallationPG)));
|
|
32
|
+
const row = Array.isArray(res)
|
|
33
|
+
? res[0]
|
|
34
|
+
: (res.rows?.[0] ??
|
|
35
|
+
res[0]);
|
|
36
|
+
installed = !!row?.schema_exists && !!row?.table_exists;
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
throw new Error(`In initialization of 'DrizzleDataSource' ${this.name}: Database could not be queried: ${e.message}`);
|
|
40
|
+
}
|
|
41
|
+
if (!installed) {
|
|
42
|
+
try {
|
|
43
|
+
await db.execute(drizzle_orm_1.sql.raw(datasource_1.createTransactionCompletionSchemaPG));
|
|
44
|
+
await db.execute(drizzle_orm_1.sql.raw(datasource_1.createTransactionCompletionTablePG));
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
throw new Error(`In initialization of 'DrizzleDataSource' ${this.name}: The 'dbos.transaction_completion' table does not exist, and could not be created. This should be added to your database migrations.
|
|
48
|
+
See: https://docs.dbos.dev/typescript/tutorials/transaction-tutorial#installing-the-dbos-schema`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
29
51
|
}
|
|
30
52
|
async destroy() {
|
|
31
53
|
const conn = this.#connection;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,2BAA4D;AAC5D,iDAAmF;AACnF,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/index.ts
CHANGED
|
@@ -10,6 +10,8 @@ import {
|
|
|
10
10
|
runTransaction,
|
|
11
11
|
DBOSDataSource,
|
|
12
12
|
registerDataSource,
|
|
13
|
+
CheckSchemaInstallationReturn,
|
|
14
|
+
checkSchemaInstallationPG,
|
|
13
15
|
} from '@dbos-inc/dbos-sdk/datasource';
|
|
14
16
|
import { drizzle, NodePgDatabase } from 'drizzle-orm/node-postgres';
|
|
15
17
|
import { AsyncLocalStorage } from 'async_hooks';
|
|
@@ -54,8 +56,33 @@ class DrizzleTransactionHandler implements DataSourceTransactionHandler {
|
|
|
54
56
|
const driver = new Pool(this.config);
|
|
55
57
|
const db = drizzle(driver, { schema: this.entities });
|
|
56
58
|
this.#connection = { db, end: () => driver.end() };
|
|
57
|
-
|
|
58
59
|
await conn?.end();
|
|
60
|
+
|
|
61
|
+
let installed = false;
|
|
62
|
+
try {
|
|
63
|
+
const res = (await db.execute(sql.raw(checkSchemaInstallationPG))) as unknown;
|
|
64
|
+
const row = Array.isArray(res)
|
|
65
|
+
? (res as CheckSchemaInstallationReturn[])[0]
|
|
66
|
+
: ((res as { rows?: CheckSchemaInstallationReturn[] }).rows?.[0] ??
|
|
67
|
+
(res as CheckSchemaInstallationReturn[])[0]);
|
|
68
|
+
installed = !!row?.schema_exists && !!row?.table_exists;
|
|
69
|
+
} catch (e) {
|
|
70
|
+
throw new Error(
|
|
71
|
+
`In initialization of 'DrizzleDataSource' ${this.name}: Database could not be queried: ${(e as Error).message}`,
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (!installed) {
|
|
76
|
+
try {
|
|
77
|
+
await db.execute(sql.raw(createTransactionCompletionSchemaPG));
|
|
78
|
+
await db.execute(sql.raw(createTransactionCompletionTablePG));
|
|
79
|
+
} catch (err) {
|
|
80
|
+
throw new Error(
|
|
81
|
+
`In initialization of 'DrizzleDataSource' ${this.name}: The 'dbos.transaction_completion' table does not exist, and could not be created. This should be added to your database migrations.
|
|
82
|
+
See: https://docs.dbos.dev/typescript/tutorials/transaction-tutorial#installing-the-dbos-schema`,
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
59
86
|
}
|
|
60
87
|
|
|
61
88
|
async destroy(): Promise<void> {
|
package/package.json
CHANGED
package/tests/datasource.test.ts
CHANGED
|
@@ -34,21 +34,7 @@ describe('DrizzleDataSource', () => {
|
|
|
34
34
|
const userDB = new Pool(config);
|
|
35
35
|
|
|
36
36
|
beforeAll(async () => {
|
|
37
|
-
|
|
38
|
-
const client = new Client({ ...config, database: 'postgres' });
|
|
39
|
-
try {
|
|
40
|
-
await client.connect();
|
|
41
|
-
await dropDB(client, 'drizzle_ds_test', true);
|
|
42
|
-
await dropDB(client, 'drizzle_ds_test_dbos_sys', true);
|
|
43
|
-
await dropDB(client, config.database, true);
|
|
44
|
-
await ensureDB(client, config.database);
|
|
45
|
-
} finally {
|
|
46
|
-
await client.end();
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
await DrizzleDataSource.initializeDBOSSchema(config);
|
|
51
|
-
await createSchema(config, { greetingsTable });
|
|
37
|
+
await createDatabases(true);
|
|
52
38
|
});
|
|
53
39
|
|
|
54
40
|
afterAll(async () => {
|
|
@@ -341,6 +327,26 @@ const greetingsTable = pgTable('greetings', {
|
|
|
341
327
|
greet_count: integer('greet_count').default(0),
|
|
342
328
|
});
|
|
343
329
|
|
|
330
|
+
async function createDatabases(createTxCompletions: boolean) {
|
|
331
|
+
{
|
|
332
|
+
const client = new Client({ ...config, database: 'postgres' });
|
|
333
|
+
try {
|
|
334
|
+
await client.connect();
|
|
335
|
+
await dropDB(client, 'drizzle_ds_test', true);
|
|
336
|
+
await dropDB(client, 'drizzle_ds_test_dbos_sys', true);
|
|
337
|
+
await dropDB(client, config.database, true);
|
|
338
|
+
await ensureDB(client, config.database);
|
|
339
|
+
} finally {
|
|
340
|
+
await client.end();
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
if (createTxCompletions) {
|
|
345
|
+
await DrizzleDataSource.initializeDBOSSchema(config);
|
|
346
|
+
}
|
|
347
|
+
await createSchema(config, { greetingsTable });
|
|
348
|
+
}
|
|
349
|
+
|
|
344
350
|
async function insertFunction(user: string) {
|
|
345
351
|
const result = await DrizzleDataSource.client
|
|
346
352
|
.insert(greetingsTable)
|
|
@@ -455,3 +461,46 @@ const regReadWorkflowReg = DBOS.registerWorkflow(readWorkflowReg);
|
|
|
455
461
|
const regReadWorkflowRunTx = DBOS.registerWorkflow(readWorkflowRunTx);
|
|
456
462
|
const regStaticWorkflow = DBOS.registerWorkflow(staticWorkflow);
|
|
457
463
|
const regInstanceWorkflow = DBOS.registerWorkflow(instanceWorkflow);
|
|
464
|
+
|
|
465
|
+
describe('DrizzleDataSourceCreateTxC', () => {
|
|
466
|
+
const userDB = new Pool(config);
|
|
467
|
+
|
|
468
|
+
beforeAll(async () => {
|
|
469
|
+
await createDatabases(false);
|
|
470
|
+
});
|
|
471
|
+
|
|
472
|
+
afterAll(async () => {
|
|
473
|
+
await userDB.end();
|
|
474
|
+
});
|
|
475
|
+
|
|
476
|
+
beforeEach(async () => {
|
|
477
|
+
DBOS.setConfig({ name: 'drizzle-ds-test' });
|
|
478
|
+
await DBOS.launch();
|
|
479
|
+
});
|
|
480
|
+
|
|
481
|
+
afterEach(async () => {
|
|
482
|
+
await DBOS.shutdown();
|
|
483
|
+
});
|
|
484
|
+
|
|
485
|
+
test('insert dataSource.register function', async () => {
|
|
486
|
+
const user = 'helloTest1';
|
|
487
|
+
|
|
488
|
+
await userDB.query('DELETE FROM greetings WHERE name = $1', [user]);
|
|
489
|
+
const workflowID = randomUUID();
|
|
490
|
+
|
|
491
|
+
await expect(DBOS.withNextWorkflowID(workflowID, () => regInsertWorkflowReg(user))).resolves.toMatchObject({
|
|
492
|
+
user,
|
|
493
|
+
greet_count: 1,
|
|
494
|
+
});
|
|
495
|
+
|
|
496
|
+
const { rows } = await userDB.query<transaction_completion>(
|
|
497
|
+
'SELECT * FROM dbos.transaction_completion WHERE workflow_id = $1',
|
|
498
|
+
[workflowID],
|
|
499
|
+
);
|
|
500
|
+
expect(rows.length).toBe(1);
|
|
501
|
+
expect(rows[0].workflow_id).toBe(workflowID);
|
|
502
|
+
expect(rows[0].function_num).toBe(0);
|
|
503
|
+
expect(rows[0].output).not.toBeNull();
|
|
504
|
+
expect(SuperJSON.parse(rows[0].output!)).toMatchObject({ user, greet_count: 1 });
|
|
505
|
+
});
|
|
506
|
+
});
|