@dbos-inc/knex-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 +19 -0
- package/dist/index.js.map +1 -1
- package/index.ts +27 -0
- package/package.json +1 -1
- package/tests/datasource.test.ts +74 -25
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmC,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAML,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmC,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAML,cAAc,EAMf,MAAM,+BAA+B,CAAC;AAEvC,OAAa,EAAE,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AAevC,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,GAAG,UAAU,CAAC,GAAG;IAC5F,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AA2LF,qBAAa,cAAe,YAAW,cAAc,CAAC,iBAAiB,CAAC;;IA2DpE,QAAQ,CAAC,IAAI,EAAE,MAAM;IA9CvB,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,WAAW,CAEpC;IAED,IAAI,MAAM,IAAI,IAAI,CAAC,WAAW,CAE7B;WAEY,oBAAoB,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM;WAkB9C,sBAAsB,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM;gBAoBlD,IAAI,EAAE,MAAM,EACrB,MAAM,EAAE,IAAI,CAAC,MAAM;IAMf,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;IAIjD,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
|
@@ -24,6 +24,25 @@ class KnexTransactionHandler {
|
|
|
24
24
|
const knexDB = this.#knexDBField;
|
|
25
25
|
this.#knexDBField = (0, knex_1.default)(this.config);
|
|
26
26
|
await knexDB?.destroy();
|
|
27
|
+
// Check for connectivity & the schema
|
|
28
|
+
let installed = false;
|
|
29
|
+
try {
|
|
30
|
+
const { rows } = await this.#knexDBField.raw(datasource_1.checkSchemaInstallationPG);
|
|
31
|
+
installed = !!rows[0].schema_exists && !!rows[0].table_exists;
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
throw new Error(`In initialization of 'KnexDataSource' ${this.name}: Database could not be reached: ${e.message}`);
|
|
35
|
+
}
|
|
36
|
+
if (!installed) {
|
|
37
|
+
try {
|
|
38
|
+
await this.#knexDBField.raw(datasource_1.createTransactionCompletionSchemaPG);
|
|
39
|
+
await this.#knexDBField.raw(datasource_1.createTransactionCompletionTablePG);
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
throw new Error(`In initialization of 'KnexDataSource' ${this.name}: The 'dbos.transaction_completion' table does not exist, and could not be created. This should be added to your database migrations.
|
|
43
|
+
See: https://docs.dbos.dev/typescript/tutorials/transaction-tutorial#installing-the-dbos-schema`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
27
46
|
}
|
|
28
47
|
async destroy() {
|
|
29
48
|
const knexDB = this.#knexDBField;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";AAAA,qCAAqC;;;;;;AAErC,iDAAmF;AACnF,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/index.ts
CHANGED
|
@@ -11,6 +11,8 @@ import {
|
|
|
11
11
|
registerDataSource,
|
|
12
12
|
createTransactionCompletionSchemaPG,
|
|
13
13
|
createTransactionCompletionTablePG,
|
|
14
|
+
CheckSchemaInstallationReturn,
|
|
15
|
+
checkSchemaInstallationPG,
|
|
14
16
|
} from '@dbos-inc/dbos-sdk/datasource';
|
|
15
17
|
import { AsyncLocalStorage } from 'async_hooks';
|
|
16
18
|
import knex, { type Knex } from 'knex';
|
|
@@ -47,6 +49,31 @@ class KnexTransactionHandler implements DataSourceTransactionHandler {
|
|
|
47
49
|
const knexDB = this.#knexDBField;
|
|
48
50
|
this.#knexDBField = knex(this.config);
|
|
49
51
|
await knexDB?.destroy();
|
|
52
|
+
|
|
53
|
+
// Check for connectivity & the schema
|
|
54
|
+
let installed = false;
|
|
55
|
+
try {
|
|
56
|
+
const { rows } = await this.#knexDBField.raw<{ rows: CheckSchemaInstallationReturn[] }>(
|
|
57
|
+
checkSchemaInstallationPG,
|
|
58
|
+
);
|
|
59
|
+
installed = !!rows[0].schema_exists && !!rows[0].table_exists;
|
|
60
|
+
} catch (e) {
|
|
61
|
+
throw new Error(
|
|
62
|
+
`In initialization of 'KnexDataSource' ${this.name}: Database could not be reached: ${(e as Error).message}`,
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (!installed) {
|
|
67
|
+
try {
|
|
68
|
+
await this.#knexDBField.raw(createTransactionCompletionSchemaPG);
|
|
69
|
+
await this.#knexDBField.raw(createTransactionCompletionTablePG);
|
|
70
|
+
} catch (err) {
|
|
71
|
+
throw new Error(
|
|
72
|
+
`In initialization of 'KnexDataSource' ${this.name}: The 'dbos.transaction_completion' table does not exist, and could not be created. This should be added to your database migrations.
|
|
73
|
+
See: https://docs.dbos.dev/typescript/tutorials/transaction-tutorial#installing-the-dbos-schema`,
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
50
77
|
}
|
|
51
78
|
|
|
52
79
|
async destroy(): Promise<void> {
|
package/package.json
CHANGED
package/tests/datasource.test.ts
CHANGED
|
@@ -19,31 +19,7 @@ describe('KnexDataSource', () => {
|
|
|
19
19
|
const userDB = new Pool(config.connection);
|
|
20
20
|
|
|
21
21
|
beforeAll(async () => {
|
|
22
|
-
|
|
23
|
-
const client = new Client({ ...config.connection, database: 'postgres' });
|
|
24
|
-
try {
|
|
25
|
-
await client.connect();
|
|
26
|
-
await dropDB(client, 'knex_ds_test', true);
|
|
27
|
-
await dropDB(client, 'knex_ds_test_dbos_sys', true);
|
|
28
|
-
await dropDB(client, config.connection.database, true);
|
|
29
|
-
await ensureDB(client, config.connection.database);
|
|
30
|
-
} finally {
|
|
31
|
-
await client.end();
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
{
|
|
36
|
-
const client = await userDB.connect();
|
|
37
|
-
try {
|
|
38
|
-
await client.query(
|
|
39
|
-
'CREATE TABLE greetings(name text NOT NULL, greet_count integer DEFAULT 0, PRIMARY KEY(name))',
|
|
40
|
-
);
|
|
41
|
-
} finally {
|
|
42
|
-
client.release();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
await KnexDataSource.initializeDBOSSchema(config);
|
|
22
|
+
await createDatabases(userDB, true);
|
|
47
23
|
});
|
|
48
24
|
|
|
49
25
|
afterAll(async () => {
|
|
@@ -328,6 +304,36 @@ export interface greetings {
|
|
|
328
304
|
greet_count: number;
|
|
329
305
|
}
|
|
330
306
|
|
|
307
|
+
async function createDatabases(userDB: Pool, createTxCompletion: boolean) {
|
|
308
|
+
{
|
|
309
|
+
const client = new Client({ ...config.connection, database: 'postgres' });
|
|
310
|
+
try {
|
|
311
|
+
await client.connect();
|
|
312
|
+
await dropDB(client, 'knex_ds_test', true);
|
|
313
|
+
await dropDB(client, 'knex_ds_test_dbos_sys', true);
|
|
314
|
+
await dropDB(client, config.connection.database, true);
|
|
315
|
+
await ensureDB(client, config.connection.database);
|
|
316
|
+
} finally {
|
|
317
|
+
await client.end();
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
{
|
|
322
|
+
const client = await userDB.connect();
|
|
323
|
+
try {
|
|
324
|
+
await client.query(
|
|
325
|
+
'CREATE TABLE greetings(name text NOT NULL, greet_count integer DEFAULT 0, PRIMARY KEY(name))',
|
|
326
|
+
);
|
|
327
|
+
} finally {
|
|
328
|
+
client.release();
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
if (createTxCompletion) {
|
|
333
|
+
await KnexDataSource.initializeDBOSSchema(config);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
331
337
|
async function insertFunction(user: string) {
|
|
332
338
|
const rows = await dataSource
|
|
333
339
|
.client<greetings>('greetings')
|
|
@@ -432,3 +438,46 @@ const regReadWorkflowReg = DBOS.registerWorkflow(readWorkflowReg);
|
|
|
432
438
|
const regReadWorkflowRunTx = DBOS.registerWorkflow(readWorkflowRunTx);
|
|
433
439
|
const regStaticWorkflow = DBOS.registerWorkflow(staticWorkflow);
|
|
434
440
|
const regInstanceWorkflow = DBOS.registerWorkflow(instanceWorkflow);
|
|
441
|
+
|
|
442
|
+
describe('KnexDataSourceCreateTxCompletion', () => {
|
|
443
|
+
const userDB = new Pool(config.connection);
|
|
444
|
+
|
|
445
|
+
beforeAll(async () => {
|
|
446
|
+
await createDatabases(userDB, false);
|
|
447
|
+
});
|
|
448
|
+
|
|
449
|
+
afterAll(async () => {
|
|
450
|
+
await userDB.end();
|
|
451
|
+
});
|
|
452
|
+
|
|
453
|
+
beforeEach(async () => {
|
|
454
|
+
DBOS.setConfig({ name: 'knex-ds-test' });
|
|
455
|
+
await DBOS.launch();
|
|
456
|
+
});
|
|
457
|
+
|
|
458
|
+
afterEach(async () => {
|
|
459
|
+
await DBOS.shutdown();
|
|
460
|
+
});
|
|
461
|
+
|
|
462
|
+
test('run wf auto register DS schema', async () => {
|
|
463
|
+
const user = 'helloTest1';
|
|
464
|
+
|
|
465
|
+
await userDB.query('DELETE FROM greetings WHERE name = $1', [user]);
|
|
466
|
+
const workflowID = randomUUID();
|
|
467
|
+
|
|
468
|
+
await expect(DBOS.withNextWorkflowID(workflowID, () => regInsertWorkflowReg(user))).resolves.toMatchObject({
|
|
469
|
+
user,
|
|
470
|
+
greet_count: 1,
|
|
471
|
+
});
|
|
472
|
+
|
|
473
|
+
const { rows } = await userDB.query<transaction_completion>(
|
|
474
|
+
'SELECT * FROM dbos.transaction_completion WHERE workflow_id = $1',
|
|
475
|
+
[workflowID],
|
|
476
|
+
);
|
|
477
|
+
expect(rows.length).toBe(1);
|
|
478
|
+
expect(rows[0].workflow_id).toBe(workflowID);
|
|
479
|
+
expect(rows[0].function_num).toBe(0);
|
|
480
|
+
expect(rows[0].output).not.toBeNull();
|
|
481
|
+
expect(SuperJSON.parse(rows[0].output!)).toMatchObject({ user, greet_count: 1 });
|
|
482
|
+
});
|
|
483
|
+
});
|