@ddd-ts-kit/knex 0.7.0 → 0.9.0
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/README.md +91 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -1
- package/dist/outbox/add-outbox-tenant-column.d.ts +9 -0
- package/dist/outbox/add-outbox-tenant-column.d.ts.map +1 -0
- package/dist/outbox/add-outbox-tenant-column.js +14 -0
- package/dist/outbox/add-outbox-tenant-column.js.map +1 -0
- package/dist/outbox/create-outbox-tables.js +3 -0
- package/dist/outbox/create-outbox-tables.js.map +1 -1
- package/dist/outbox/knex-outbox-store.d.ts +7 -0
- package/dist/outbox/knex-outbox-store.d.ts.map +1 -1
- package/dist/outbox/knex-outbox-store.js +4 -0
- package/dist/outbox/knex-outbox-store.js.map +1 -1
- package/dist/outbox/outbox-tables-options.d.ts +2 -0
- package/dist/outbox/outbox-tables-options.d.ts.map +1 -1
- package/dist/read-model/knex-read-model-options.d.ts +11 -0
- package/dist/read-model/knex-read-model-options.d.ts.map +1 -1
- package/dist/read-model/knex-read-model-table.js +1 -1
- package/dist/read-model/knex-read-model-table.js.map +1 -1
- package/dist/read-model/knex-stamped-rows.d.ts +4 -1
- package/dist/read-model/knex-stamped-rows.d.ts.map +1 -1
- package/dist/read-model/knex-stamped-rows.js +15 -2
- package/dist/read-model/knex-stamped-rows.js.map +1 -1
- package/dist/tenancy/create-tenant-routed-unit-of-work.d.ts +13 -0
- package/dist/tenancy/create-tenant-routed-unit-of-work.d.ts.map +1 -0
- package/dist/tenancy/create-tenant-routed-unit-of-work.js +37 -0
- package/dist/tenancy/create-tenant-routed-unit-of-work.js.map +1 -0
- package/dist/tenancy/cross-tenant-unit-of-work-error.d.ts +8 -0
- package/dist/tenancy/cross-tenant-unit-of-work-error.d.ts.map +1 -0
- package/dist/tenancy/cross-tenant-unit-of-work-error.js +11 -0
- package/dist/tenancy/cross-tenant-unit-of-work-error.js.map +1 -0
- package/dist/tenancy/enable-tenant-isolation.d.ts +8 -0
- package/dist/tenancy/enable-tenant-isolation.d.ts.map +1 -0
- package/dist/tenancy/enable-tenant-isolation.js +11 -0
- package/dist/tenancy/enable-tenant-isolation.js.map +1 -0
- package/dist/tenancy/invalid-tenant-identifier-error.d.ts +5 -0
- package/dist/tenancy/invalid-tenant-identifier-error.d.ts.map +1 -0
- package/dist/tenancy/invalid-tenant-identifier-error.js +8 -0
- package/dist/tenancy/invalid-tenant-identifier-error.js.map +1 -0
- package/dist/tenancy/migrate-every-tenant.d.ts +10 -0
- package/dist/tenancy/migrate-every-tenant.d.ts.map +1 -0
- package/dist/tenancy/migrate-every-tenant.js +16 -0
- package/dist/tenancy/migrate-every-tenant.js.map +1 -0
- package/dist/tenancy/migrate-tenant-schema.d.ts +9 -0
- package/dist/tenancy/migrate-tenant-schema.d.ts.map +1 -0
- package/dist/tenancy/migrate-tenant-schema.js +15 -0
- package/dist/tenancy/migrate-tenant-schema.js.map +1 -0
- package/dist/tenancy/own-tenant-table.d.ts +10 -0
- package/dist/tenancy/own-tenant-table.d.ts.map +1 -0
- package/dist/tenancy/own-tenant-table.js +11 -0
- package/dist/tenancy/own-tenant-table.js.map +1 -0
- package/dist/tenancy/statement-outside-unit-of-work-error.d.ts +5 -0
- package/dist/tenancy/statement-outside-unit-of-work-error.d.ts.map +1 -0
- package/dist/tenancy/statement-outside-unit-of-work-error.js +8 -0
- package/dist/tenancy/statement-outside-unit-of-work-error.js.map +1 -0
- package/dist/tenancy/table-in.d.ts +6 -0
- package/dist/tenancy/table-in.d.ts.map +1 -0
- package/dist/tenancy/table-in.js +6 -0
- package/dist/tenancy/table-in.js.map +1 -0
- package/dist/tenancy/tenant-databases-options.d.ts +15 -0
- package/dist/tenancy/tenant-databases-options.d.ts.map +1 -0
- package/dist/tenancy/tenant-databases-options.js +2 -0
- package/dist/tenancy/tenant-databases-options.js.map +1 -0
- package/dist/tenancy/tenant-databases.d.ts +29 -0
- package/dist/tenancy/tenant-databases.d.ts.map +1 -0
- package/dist/tenancy/tenant-databases.js +80 -0
- package/dist/tenancy/tenant-databases.js.map +1 -0
- package/dist/tenancy/tenant-isolation-statements.d.ts +12 -0
- package/dist/tenancy/tenant-isolation-statements.d.ts.map +1 -0
- package/dist/tenancy/tenant-isolation-statements.js +31 -0
- package/dist/tenancy/tenant-isolation-statements.js.map +1 -0
- package/dist/tenancy/tenant-of-migration.d.ts +7 -0
- package/dist/tenancy/tenant-of-migration.d.ts.map +1 -0
- package/dist/tenancy/tenant-of-migration.js +12 -0
- package/dist/tenancy/tenant-of-migration.js.map +1 -0
- package/dist/tenancy/tenant-schema-of.d.ts +8 -0
- package/dist/tenancy/tenant-schema-of.d.ts.map +1 -0
- package/dist/tenancy/tenant-schema-of.js +21 -0
- package/dist/tenancy/tenant-schema-of.js.map +1 -0
- package/dist/tenancy/tenant-schema-table.d.ts +11 -0
- package/dist/tenancy/tenant-schema-table.d.ts.map +1 -0
- package/dist/tenancy/tenant-schema-table.js +13 -0
- package/dist/tenancy/tenant-schema-table.js.map +1 -0
- package/dist/tenancy/tenant-schema-target.d.ts +6 -0
- package/dist/tenancy/tenant-schema-target.d.ts.map +1 -0
- package/dist/tenancy/tenant-schema-target.js +2 -0
- package/dist/tenancy/tenant-schema-target.js.map +1 -0
- package/dist/tenancy/tenant-search-path.d.ts +11 -0
- package/dist/tenancy/tenant-search-path.d.ts.map +1 -0
- package/dist/tenancy/tenant-search-path.js +16 -0
- package/dist/tenancy/tenant-search-path.js.map +1 -0
- package/dist/tenancy/tenant-session.d.ts +10 -0
- package/dist/tenancy/tenant-session.d.ts.map +1 -0
- package/dist/tenancy/tenant-session.js +21 -0
- package/dist/tenancy/tenant-session.js.map +1 -0
- package/dist/tenancy/tenant-table-target.d.ts +7 -0
- package/dist/tenancy/tenant-table-target.d.ts.map +1 -0
- package/dist/tenancy/tenant-table-target.js +2 -0
- package/dist/tenancy/tenant-table-target.js.map +1 -0
- package/dist/tenancy/tenant-table.d.ts +12 -0
- package/dist/tenancy/tenant-table.d.ts.map +1 -0
- package/dist/tenancy/tenant-table.js +12 -0
- package/dist/tenancy/tenant-table.js.map +1 -0
- package/dist/tenancy/where-tenant.d.ts +10 -0
- package/dist/tenancy/where-tenant.d.ts.map +1 -0
- package/dist/tenancy/where-tenant.js +15 -0
- package/dist/tenancy/where-tenant.js.map +1 -0
- package/dist/unit-of-work/create-knex-unit-of-work.d.ts +8 -1
- package/dist/unit-of-work/create-knex-unit-of-work.d.ts.map +1 -1
- package/dist/unit-of-work/create-knex-unit-of-work.js +7 -2
- package/dist/unit-of-work/create-knex-unit-of-work.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { TENANT_SETTINGS, tenantSettingValues } from '@ddd-ts-kit/kernel';
|
|
2
|
+
/**
|
|
3
|
+
* The `begin` of a unit of work under row-level security: sets the tenant settings for the
|
|
4
|
+
* transaction only (`set_config(..., true)`), from the execution context of the work, so that a
|
|
5
|
+
* pooled connection never carries them to the next transaction. Work without a tenant sets them
|
|
6
|
+
* empty, and the policies then show it nothing.
|
|
7
|
+
*/
|
|
8
|
+
export function tenantSession(scope) {
|
|
9
|
+
return async (transaction) => {
|
|
10
|
+
const { tenant, reach, everyTenant } = tenantSettingValues(scope.current());
|
|
11
|
+
await transaction.raw('select set_config(?, ?, true), set_config(?, ?, true), set_config(?, ?, true)', [
|
|
12
|
+
TENANT_SETTINGS.tenant,
|
|
13
|
+
tenant,
|
|
14
|
+
TENANT_SETTINGS.reach,
|
|
15
|
+
reach,
|
|
16
|
+
TENANT_SETTINGS.everyTenant,
|
|
17
|
+
everyTenant,
|
|
18
|
+
]);
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=tenant-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-session.js","sourceRoot":"","sources":["../../src/tenancy/tenant-session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAuB,MAAM,oBAAoB,CAAC;AAE/F;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAqB;IACjD,OAAO,KAAK,EAAE,WAAW,EAAE,EAAE;QAC3B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,mBAAmB,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAE5E,MAAM,WAAW,CAAC,GAAG,CAAC,+EAA+E,EAAE;YACrG,eAAe,CAAC,MAAM;YACtB,MAAM;YACN,eAAe,CAAC,KAAK;YACrB,KAAK;YACL,eAAe,CAAC,WAAW;YAC3B,WAAW;SACZ,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** A table of tenant data: its name, its schema, and its tenant column (`tenant_id` by default). */
|
|
2
|
+
export interface TenantTableTarget {
|
|
3
|
+
readonly table: string;
|
|
4
|
+
readonly schema?: string;
|
|
5
|
+
readonly column?: string;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=tenant-table-target.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-table-target.d.ts","sourceRoot":"","sources":["../../src/tenancy/tenant-table-target.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-table-target.js","sourceRoot":"","sources":["../../src/tenancy/tenant-table-target.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
import type { ExecutionScope } from '@ddd-ts-kit/kernel';
|
|
3
|
+
import type { KnexContext } from '../unit-of-work/knex-context.js';
|
|
4
|
+
import type { TenantTableTarget } from './tenant-table-target.js';
|
|
5
|
+
/**
|
|
6
|
+
* The rows of a table of tenant data that a read may reach, on the executor of the unit of
|
|
7
|
+
* work: those of the tenant of the work, or of the tenants of an elevation. The one way a
|
|
8
|
+
* repository of a tenant-scoped project reads (`tenancy/scoped-statement`). Writes go through
|
|
9
|
+
* `ownTenantTable`, which an elevation does not widen.
|
|
10
|
+
*/
|
|
11
|
+
export declare function tenantTable<Row extends object>(context: KnexContext, scope: ExecutionScope, target: TenantTableTarget): Knex.QueryBuilder<Row, Row[]>;
|
|
12
|
+
//# sourceMappingURL=tenant-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-table.d.ts","sourceRoot":"","sources":["../../src/tenancy/tenant-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGlE;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,SAAS,MAAM,EAC5C,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,iBAAiB,GACxB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAE/B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { tableIn } from './table-in.js';
|
|
2
|
+
import { whereTenant } from './where-tenant.js';
|
|
3
|
+
/**
|
|
4
|
+
* The rows of a table of tenant data that a read may reach, on the executor of the unit of
|
|
5
|
+
* work: those of the tenant of the work, or of the tenants of an elevation. The one way a
|
|
6
|
+
* repository of a tenant-scoped project reads (`tenancy/scoped-statement`). Writes go through
|
|
7
|
+
* `ownTenantTable`, which an elevation does not widen.
|
|
8
|
+
*/
|
|
9
|
+
export function tenantTable(context, scope, target) {
|
|
10
|
+
return whereTenant(tableIn(context, target), scope, target.column);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=tenant-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-table.js","sourceRoot":"","sources":["../../src/tenancy/tenant-table.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,OAAoB,EACpB,KAAqB,EACrB,MAAyB;IAEzB,OAAO,WAAW,CAAC,OAAO,CAAM,OAAO,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
import { type ExecutionScope } from '@ddd-ts-kit/kernel';
|
|
3
|
+
/** The tenant column every table of tenant data has: `tenantColumn` writes it. */
|
|
4
|
+
export declare const TENANT_COLUMN = "tenant_id";
|
|
5
|
+
/**
|
|
6
|
+
* Confines a read to what the work in progress may see (`tenantReachOf`): its tenant, or the
|
|
7
|
+
* tenants of an elevation. Work that names no tenant is refused, never read unscoped.
|
|
8
|
+
*/
|
|
9
|
+
export declare function whereTenant<Row extends object, Result>(builder: Knex.QueryBuilder<Row, Result>, scope: ExecutionScope, column?: string): Knex.QueryBuilder<Row, Result>;
|
|
10
|
+
//# sourceMappingURL=where-tenant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"where-tenant.d.ts","sourceRoot":"","sources":["../../src/tenancy/where-tenant.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAExE,kFAAkF;AAClF,eAAO,MAAM,aAAa,cAAc,CAAC;AAEzC;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,SAAS,MAAM,EAAE,MAAM,EACpD,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,EACvC,KAAK,EAAE,cAAc,EACrB,MAAM,SAAgB,GACrB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAQhC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { tenantReachOf } from '@ddd-ts-kit/kernel';
|
|
2
|
+
/** The tenant column every table of tenant data has: `tenantColumn` writes it. */
|
|
3
|
+
export const TENANT_COLUMN = 'tenant_id';
|
|
4
|
+
/**
|
|
5
|
+
* Confines a read to what the work in progress may see (`tenantReachOf`): its tenant, or the
|
|
6
|
+
* tenants of an elevation. Work that names no tenant is refused, never read unscoped.
|
|
7
|
+
*/
|
|
8
|
+
export function whereTenant(builder, scope, column = TENANT_COLUMN) {
|
|
9
|
+
const reach = tenantReachOf(scope);
|
|
10
|
+
if (reach.kind === 'tenant') {
|
|
11
|
+
return builder.where(column, reach.tenantId);
|
|
12
|
+
}
|
|
13
|
+
return reach.tenants === 'all' ? builder : builder.whereIn(column, [...reach.tenants]);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=where-tenant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"where-tenant.js","sourceRoot":"","sources":["../../src/tenancy/where-tenant.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAuB,MAAM,oBAAoB,CAAC;AAExE,kFAAkF;AAClF,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,OAAuC,EACvC,KAAqB,EACrB,MAAM,GAAG,aAAa;IAEtB,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAEnC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACzF,CAAC"}
|
|
@@ -4,11 +4,18 @@ import type { KnexContext } from './knex-context.js';
|
|
|
4
4
|
/** One object for both ports: bind it to `UnitOfWork` and to `KnexContext`. */
|
|
5
5
|
export interface KnexUnitOfWork extends UnitOfWork, KnexContext {
|
|
6
6
|
}
|
|
7
|
+
export interface KnexUnitOfWorkOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Runs first in each outermost transaction, before the work: `tenantSession(scope)` sets the
|
|
10
|
+
* tenant settings row-level security reads, `tenantSearchPath` the schemas of the tenant.
|
|
11
|
+
*/
|
|
12
|
+
readonly begin?: (transaction: Knex.Transaction) => Promise<void>;
|
|
13
|
+
}
|
|
7
14
|
/**
|
|
8
15
|
* A unit of work over `knex.transaction`. The transaction travels in an AsyncLocalStorage
|
|
9
16
|
* owned by this unit of work, so two databases never see each other's transaction. A nested
|
|
10
17
|
* `run` joins the outer transaction: it commits or rolls back as a whole. Domain events are
|
|
11
18
|
* dispatched at the end of the outermost `run`, before its commit (`withinUnitOfWork`).
|
|
12
19
|
*/
|
|
13
|
-
export declare function createKnexUnitOfWork(knex: Knex, config?: Knex.TransactionConfig): KnexUnitOfWork;
|
|
20
|
+
export declare function createKnexUnitOfWork(knex: Knex, config?: Knex.TransactionConfig, options?: KnexUnitOfWorkOptions): KnexUnitOfWork;
|
|
14
21
|
//# sourceMappingURL=create-knex-unit-of-work.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-knex-unit-of-work.d.ts","sourceRoot":"","sources":["../../src/unit-of-work/create-knex-unit-of-work.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,+EAA+E;AAC/E,MAAM,WAAW,cAAe,SAAQ,UAAU,EAAE,WAAW;CAAG;AAElE;;;;;GAKG;AACH,wBAAgB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"create-knex-unit-of-work.d.ts","sourceRoot":"","sources":["../../src/unit-of-work/create-knex-unit-of-work.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,+EAA+E;AAC/E,MAAM,WAAW,cAAe,SAAQ,UAAU,EAAE,WAAW;CAAG;AAElE,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACnE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,IAAI,EACV,MAAM,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAC/B,OAAO,GAAE,qBAA0B,GAClC,cAAc,CAuBhB"}
|
|
@@ -6,15 +6,20 @@ import { withinUnitOfWork } from '@ddd-ts-kit/kernel';
|
|
|
6
6
|
* `run` joins the outer transaction: it commits or rolls back as a whole. Domain events are
|
|
7
7
|
* dispatched at the end of the outermost `run`, before its commit (`withinUnitOfWork`).
|
|
8
8
|
*/
|
|
9
|
-
export function createKnexUnitOfWork(knex, config) {
|
|
9
|
+
export function createKnexUnitOfWork(knex, config, options = {}) {
|
|
10
10
|
const current = new AsyncLocalStorage();
|
|
11
|
+
const { begin } = options;
|
|
11
12
|
return {
|
|
12
13
|
run(work) {
|
|
13
14
|
return withinUnitOfWork(work, (scoped) => {
|
|
14
15
|
if (current.getStore() !== undefined) {
|
|
15
16
|
return scoped();
|
|
16
17
|
}
|
|
17
|
-
|
|
18
|
+
const opened = async (transaction) => {
|
|
19
|
+
await begin?.(transaction);
|
|
20
|
+
return scoped();
|
|
21
|
+
};
|
|
22
|
+
return knex.transaction((transaction) => current.run(transaction, () => opened(transaction)), config);
|
|
18
23
|
});
|
|
19
24
|
},
|
|
20
25
|
executor: () => current.getStore() ?? knex,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-knex-unit-of-work.js","sourceRoot":"","sources":["../../src/unit-of-work/create-knex-unit-of-work.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAmB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"create-knex-unit-of-work.js","sourceRoot":"","sources":["../../src/unit-of-work/create-knex-unit-of-work.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAmB,MAAM,oBAAoB,CAAC;AAcvE;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAU,EACV,MAA+B,EAC/B,OAAO,GAA0B,EAAE;IAEnC,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAoB,CAAC;IAC1D,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAE1B,OAAO;QACL,GAAG,CAAI,IAAsB;YAC3B,OAAO,gBAAgB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;gBACvC,IAAI,OAAO,CAAC,QAAQ,EAAE,KAAK,SAAS,EAAE,CAAC;oBACrC,OAAO,MAAM,EAAE,CAAC;gBAClB,CAAC;gBAED,MAAM,MAAM,GAAG,KAAK,EAAE,WAA6B,EAAc,EAAE;oBACjE,MAAM,KAAK,EAAE,CAAC,WAAW,CAAC,CAAC;oBAE3B,OAAO,MAAM,EAAE,CAAC;gBAClB,CAAC,CAAC;gBAEF,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACxG,CAAC,CAAC,CAAC;QACL,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,IAAI;QAC1C,aAAa,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,SAAS;KACtD,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ddd-ts-kit/knex",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Knex adapters for the kernel ports: unit of work, transactional outbox store, processed-event store.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -26,15 +26,15 @@
|
|
|
26
26
|
"dist"
|
|
27
27
|
],
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@ddd-ts-kit/kernel": "0.
|
|
30
|
-
"@ddd-ts-kit/events": "0.
|
|
29
|
+
"@ddd-ts-kit/kernel": "0.9.0",
|
|
30
|
+
"@ddd-ts-kit/events": "0.9.0"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"knex": "^3.0.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"knex": "^3.3.0",
|
|
37
|
-
"@ddd-ts-kit/testing": "0.
|
|
37
|
+
"@ddd-ts-kit/testing": "0.9.0",
|
|
38
38
|
"pg": "^8.23.1",
|
|
39
39
|
"@types/pg": "^8.23.1",
|
|
40
40
|
"@electric-sql/pglite": "0.5.9",
|