@hg-ts/knex 0.2.23 → 0.2.24
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/event.knex.repository.d.ts +6 -5
- package/dist/event.knex.repository.d.ts.map +1 -1
- package/dist/event.knex.repository.js +38 -14
- package/dist/event.knex.repository.js.map +1 -1
- package/dist/event.migration.d.ts.map +1 -1
- package/dist/event.migration.js +15 -12
- package/dist/event.migration.js.map +1 -1
- package/dist/knex.service.d.ts +2 -1
- package/dist/knex.service.d.ts.map +1 -1
- package/dist/knex.service.js +32 -8
- package/dist/knex.service.js.map +1 -1
- package/dist/test-containers/postgres-testcontainer.service.js +1 -1
- package/dist/test-containers/postgres-testcontainer.service.js.map +1 -1
- package/package.json +23 -23
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { DomainEvent } from '@hg-ts/domain';
|
|
2
2
|
import { BaseEventRepository, EventFindOptions } from '@hg-ts/repository';
|
|
3
|
-
import { Knex } from 'knex';
|
|
4
3
|
import { KnexService } from './knex.service';
|
|
5
4
|
export type EventTable = {
|
|
6
5
|
id: string;
|
|
@@ -15,13 +14,15 @@ export type EventTable = {
|
|
|
15
14
|
declare module 'knex/types/tables' {
|
|
16
15
|
interface Tables {
|
|
17
16
|
event: EventTable;
|
|
18
|
-
|
|
17
|
+
unpublishedEvent: EventTable;
|
|
19
18
|
}
|
|
20
19
|
}
|
|
21
|
-
export declare
|
|
20
|
+
export declare class EventKnexRepository extends BaseEventRepository {
|
|
22
21
|
protected readonly knex: KnexService;
|
|
22
|
+
findUnpublished(options: EventFindOptions): Promise<DomainEvent[]>;
|
|
23
23
|
add(event: DomainEvent | DomainEvent[]): Promise<void>;
|
|
24
|
-
|
|
25
|
-
protected
|
|
24
|
+
deleteUnpublished(events: DomainEvent[]): Promise<void>;
|
|
25
|
+
protected findEntities(options?: Partial<EventFindOptions>, table?: 'event' | 'unpublishedEvent'): Promise<DomainEvent[]>;
|
|
26
|
+
protected createEvent(name: string, row: Omit<EventTable, 'name'>): DomainEvent;
|
|
26
27
|
}
|
|
27
28
|
//# sourceMappingURL=event.knex.repository.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.knex.repository.d.ts","sourceRoot":"","sources":["../src/event.knex.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,WAAW,EAEX,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,mBAAmB,EACnB,gBAAgB,EAChB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"event.knex.repository.d.ts","sourceRoot":"","sources":["../src/event.knex.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,WAAW,EAEX,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,mBAAmB,EACnB,gBAAgB,EAChB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,MAAM,UAAU,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1B,UAAU,EAAE,IAAI,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;CAChB,CAAC;AAEF,OAAO,QAAQ,mBAAmB,CAAC;IAElC,UAAU,MAAM;QACf,KAAK,EAAE,UAAU,CAAC;QAClB,gBAAgB,EAAE,UAAU,CAAC;KAC7B;CACD;AAED,qBAAa,mBAAoB,SAAQ,mBAAmB;IAE3D,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAEf,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAIlE,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtD,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;cAYpD,YAAY,CACpC,OAAO,GAAE,OAAO,CAAC,gBAAgB,CAAM,EACvC,KAAK,GAAE,OAAO,GAAG,kBAA4B,GAC3C,OAAO,CAAC,WAAW,EAAE,CAAC;IA+CzB,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,WAAW;CAU/E"}
|
|
@@ -8,23 +8,28 @@ const common_1 = require("@nestjs/common");
|
|
|
8
8
|
const knex_service_1 = require("./knex.service");
|
|
9
9
|
class EventKnexRepository extends repository_1.BaseEventRepository {
|
|
10
10
|
knex;
|
|
11
|
+
async findUnpublished(options) {
|
|
12
|
+
return this.findEntities(options, 'unpublishedEvent');
|
|
13
|
+
}
|
|
11
14
|
async add(event) {
|
|
12
15
|
const events = Array.isArray(event) ? event : [event];
|
|
13
|
-
const trx = await this.knex.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
16
|
+
const trx = await this.knex.getMasterTrx();
|
|
17
|
+
const dbFormattedEvents = events.map(event => event.toDto());
|
|
18
|
+
await trx('event').insert(dbFormattedEvents);
|
|
19
|
+
await trx('unpublishedEvent').insert(dbFormattedEvents);
|
|
20
|
+
}
|
|
21
|
+
async deleteUnpublished(events) {
|
|
22
|
+
const ids = events.map(item => item.id);
|
|
23
|
+
if (ids.length === 0) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const trx = await this.knex.getMasterTrx();
|
|
27
|
+
await trx('unpublishedEvent').delete().whereIn('id', ids);
|
|
23
28
|
}
|
|
24
|
-
async findEntities(options = {}) {
|
|
25
|
-
const { id, entityId, entityName } = options;
|
|
26
|
-
const trx = await this.knex.
|
|
27
|
-
const qb = trx(
|
|
29
|
+
async findEntities(options = {}, table = 'event') {
|
|
30
|
+
const { id, entityId, entityName, limit } = options;
|
|
31
|
+
const trx = await this.knex.getMasterTrx();
|
|
32
|
+
const qb = trx(table);
|
|
28
33
|
if (id) {
|
|
29
34
|
if (Array.isArray(id)) {
|
|
30
35
|
qb.whereIn('id', id);
|
|
@@ -39,6 +44,15 @@ class EventKnexRepository extends repository_1.BaseEventRepository {
|
|
|
39
44
|
if (entityName) {
|
|
40
45
|
qb.where('entityName', entityName);
|
|
41
46
|
}
|
|
47
|
+
if (entityName) {
|
|
48
|
+
qb.where('entityName', entityName);
|
|
49
|
+
}
|
|
50
|
+
if (limit) {
|
|
51
|
+
qb.limit(limit);
|
|
52
|
+
}
|
|
53
|
+
if (table === 'unpublishedEvent') {
|
|
54
|
+
qb.forUpdate().skipLocked();
|
|
55
|
+
}
|
|
42
56
|
const rows = await qb;
|
|
43
57
|
return rows.map(row => {
|
|
44
58
|
const { name, ...eventData } = row;
|
|
@@ -47,6 +61,16 @@ class EventKnexRepository extends repository_1.BaseEventRepository {
|
|
|
47
61
|
return event;
|
|
48
62
|
});
|
|
49
63
|
}
|
|
64
|
+
createEvent(name, row) {
|
|
65
|
+
return new domain_1.DomainEvent({
|
|
66
|
+
body: row.body,
|
|
67
|
+
entityName: row.entityName,
|
|
68
|
+
entityId: row.entityId,
|
|
69
|
+
occurredOn: row.occurredOn,
|
|
70
|
+
traceId: row.traceId,
|
|
71
|
+
name,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
50
74
|
}
|
|
51
75
|
exports.EventKnexRepository = EventKnexRepository;
|
|
52
76
|
tslib_1.__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.knex.repository.js","sourceRoot":"","sources":["../src/event.knex.repository.ts"],"names":[],"mappings":";;;;AAAA,0CAGuB;AACvB,kDAG2B;AAE3B,2CAAwC;
|
|
1
|
+
{"version":3,"file":"event.knex.repository.js","sourceRoot":"","sources":["../src/event.knex.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.migration.d.ts","sourceRoot":"","sources":["../src/event.migration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"event.migration.d.ts","sourceRoot":"","sources":["../src/event.migration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAoB5B,wBAAsB,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAGlD;AACD,wBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpD"}
|
package/dist/event.migration.js
CHANGED
|
@@ -2,21 +2,24 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.up = up;
|
|
4
4
|
exports.down = down;
|
|
5
|
+
function createEventTable(table, knex) {
|
|
6
|
+
table.uuid('id').primary();
|
|
7
|
+
table.string('entityName').notNullable();
|
|
8
|
+
table.string('entityId').notNullable();
|
|
9
|
+
table.string('name').notNullable();
|
|
10
|
+
table.json('body').notNullable();
|
|
11
|
+
table.uuid('tractId').nullable();
|
|
12
|
+
table.timestamp('occurredOn').notNullable();
|
|
13
|
+
table.timestamp('createdAt').notNullable().defaultTo(knex.fn.now());
|
|
14
|
+
table.index(['entityName', 'entityId'], 'eventEntityIdx', { storageEngineIndexType: 'btree' });
|
|
15
|
+
table.index('occurredOn', 'eventOccurredOnIdx', { storageEngineIndexType: 'btree' });
|
|
16
|
+
}
|
|
5
17
|
async function up(knex) {
|
|
6
|
-
await knex.schema.createTable('event', table =>
|
|
7
|
-
|
|
8
|
-
table.string('entityName').notNullable();
|
|
9
|
-
table.string('entityId').notNullable();
|
|
10
|
-
table.string('name').notNullable();
|
|
11
|
-
table.json('body').notNullable();
|
|
12
|
-
table.uuid('tractId').nullable();
|
|
13
|
-
table.timestamp('occurredOn').notNullable();
|
|
14
|
-
table.timestamp('createdAt').notNullable().defaultTo(knex.fn.now());
|
|
15
|
-
table.index(['entityName', 'entityId'], 'eventEntityIdx', { storageEngineIndexType: 'btree' });
|
|
16
|
-
table.index('occurredOn', 'eventOccurredOnIdx', { storageEngineIndexType: 'btree' });
|
|
17
|
-
});
|
|
18
|
+
await knex.schema.createTable('event', table => createEventTable(table, knex));
|
|
19
|
+
await knex.schema.createTable('unpublishedEvent', table => createEventTable(table, knex));
|
|
18
20
|
}
|
|
19
21
|
async function down(knex) {
|
|
20
22
|
await knex.schema.dropTable('event');
|
|
23
|
+
await knex.schema.dropTable('unpublishedEvent');
|
|
21
24
|
}
|
|
22
25
|
//# sourceMappingURL=event.migration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.migration.js","sourceRoot":"","sources":["../src/event.migration.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"event.migration.js","sourceRoot":"","sources":["../src/event.migration.ts"],"names":[],"mappings":";;AAoBA,gBAGC;AACD,oBAGC;AAzBD,SAAS,gBAAgB,CAAC,KAA8B,EAAE,IAAU;IACnE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IAE3B,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;IACzC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;IAEvC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACnC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAEjC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;IAEjC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5C,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAEpE,KAAK,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE,gBAAgB,EAAE,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/F,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,oBAAoB,EAAE,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC,CAAC;AACtF,CAAC;AAEM,KAAK,UAAU,EAAE,CAAC,IAAU;IAClC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/E,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3F,CAAC;AACM,KAAK,UAAU,IAAI,CAAC,IAAU;IACpC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;AACjD,CAAC"}
|
package/dist/knex.service.d.ts
CHANGED
|
@@ -7,7 +7,8 @@ export declare class KnexService implements OnModuleInit, OnModuleDestroy {
|
|
|
7
7
|
private initHook;
|
|
8
8
|
private readonly transactionStorage;
|
|
9
9
|
private connection;
|
|
10
|
-
|
|
10
|
+
getReplicaTrx(): Promise<Knex.Transaction>;
|
|
11
|
+
getMasterTrx(): Promise<Knex.Transaction>;
|
|
11
12
|
runInTransaction<T>(callback: () => Promise<T>): Promise<T>;
|
|
12
13
|
onModuleInit(): Promise<void>;
|
|
13
14
|
onModuleDestroy(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knex.service.d.ts","sourceRoot":"","sources":["../src/knex.service.ts"],"names":[],"mappings":"AAIA,OAAO,EAEN,eAAe,EACf,YAAY,EACZ,MAAM,gBAAgB,CAAC;AAExB,OAAa,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"knex.service.d.ts","sourceRoot":"","sources":["../src/knex.service.ts"],"names":[],"mappings":"AAIA,OAAO,EAEN,eAAe,EACf,YAAY,EACZ,MAAM,gBAAgB,CAAC;AAExB,OAAa,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAelC,qBAAa,WAAY,YAAW,YAAY,EAAE,eAAe;IAEhE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IAEpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAE9C,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA8C;IAEjF,OAAO,CAAC,UAAU,CAAc;IAEnB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;IAO1C,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;IAQzC,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAW3D,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ7B,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;YAI/B,YAAY;YAYZ,0BAA0B;YAM1B,yBAAyB;CAqCvC"}
|
package/dist/knex.service.js
CHANGED
|
@@ -16,13 +16,23 @@ class KnexService {
|
|
|
16
16
|
initHook = null;
|
|
17
17
|
transactionStorage = new async_context_1.AsyncContextProvider();
|
|
18
18
|
connection;
|
|
19
|
-
async
|
|
20
|
-
const
|
|
21
|
-
|
|
19
|
+
async getReplicaTrx() {
|
|
20
|
+
const { replica } = this.transactionStorage.getOrFail();
|
|
21
|
+
replica.isOpened = true;
|
|
22
|
+
return replica.getTrx();
|
|
23
|
+
}
|
|
24
|
+
async getMasterTrx() {
|
|
25
|
+
const { master } = this.transactionStorage.getOrFail();
|
|
26
|
+
master.isOpened = true;
|
|
27
|
+
return master.getTrx();
|
|
22
28
|
}
|
|
23
29
|
async runInTransaction(callback) {
|
|
24
30
|
const trxProvider = await this.getKnexTransactionProvider();
|
|
25
|
-
|
|
31
|
+
const context = {
|
|
32
|
+
master: { getTrx: trxProvider, isOpened: false },
|
|
33
|
+
replica: { getTrx: trxProvider, isOpened: false },
|
|
34
|
+
};
|
|
35
|
+
return this.transactionStorage.run(context, async () => this.transactionStorageHandler(callback));
|
|
26
36
|
}
|
|
27
37
|
async onModuleInit() {
|
|
28
38
|
if (!this.initHook) {
|
|
@@ -49,13 +59,27 @@ class KnexService {
|
|
|
49
59
|
async transactionStorageHandler(callback) {
|
|
50
60
|
try {
|
|
51
61
|
const result = await callback();
|
|
52
|
-
const
|
|
53
|
-
|
|
62
|
+
const context = this.transactionStorage.getOrFail();
|
|
63
|
+
if (context.master.isOpened) {
|
|
64
|
+
const trx = await context.master.getTrx();
|
|
65
|
+
await trx.commit();
|
|
66
|
+
}
|
|
67
|
+
if (context.replica.isOpened) {
|
|
68
|
+
const trx = await context.replica.getTrx();
|
|
69
|
+
await trx.rollback();
|
|
70
|
+
}
|
|
54
71
|
return result;
|
|
55
72
|
}
|
|
56
73
|
catch (error) {
|
|
57
|
-
const
|
|
58
|
-
|
|
74
|
+
const context = this.transactionStorage.getOrFail();
|
|
75
|
+
if (context.master.isOpened) {
|
|
76
|
+
const trx = await context.master.getTrx();
|
|
77
|
+
await trx.rollback();
|
|
78
|
+
}
|
|
79
|
+
if (context.replica.isOpened) {
|
|
80
|
+
const trx = await context.replica.getTrx();
|
|
81
|
+
await trx.rollback();
|
|
82
|
+
}
|
|
59
83
|
throw error;
|
|
60
84
|
}
|
|
61
85
|
}
|
package/dist/knex.service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knex.service.js","sourceRoot":"","sources":["../src/knex.service.ts"],"names":[],"mappings":";;;;AAAA,wDAA4D;AAC5D,0DAAsD;AACtD,0CAAuC;AAEvC,2CAIwB;AAExB,wDAAkC;AAElC,uDAAmD;AACnD,+CAA2C;
|
|
1
|
+
{"version":3,"file":"knex.service.js","sourceRoot":"","sources":["../src/knex.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ class PostgresTestcontainerService {
|
|
|
22
22
|
}
|
|
23
23
|
async onApplicationBootstrap() {
|
|
24
24
|
await this.postgres.runInTransaction(async () => {
|
|
25
|
-
const trx = await this.postgres.
|
|
25
|
+
const trx = await this.postgres.getMasterTrx();
|
|
26
26
|
await trx.migrate.latest();
|
|
27
27
|
await trx.seed.run();
|
|
28
28
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-testcontainer.service.js","sourceRoot":"","sources":["../../src/test-containers/postgres-testcontainer.service.ts"],"names":[],"mappings":";;;;AAAA,2CAKwB;AAExB,2DAGoC;AAEpC,gDAA4C;AAC5C,kDAA8C;AAE9C,MAAa,4BAA4B;IAEvB,MAAM,CAAa;IAEnB,QAAQ,CAAc;IAE/B,SAAS,CAA6B;IAEtC,WAAW,GAA4B,IAAI,CAAC;IAEpD;QACC,IAAI,CAAC,YAAY,EAAE,CAAC;IACrB,CAAC;IAEM,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,CAAC;QAED,OAAO,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,sBAAsB;QAClC,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,IAAG,EAAE;YAC9C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"postgres-testcontainer.service.js","sourceRoot":"","sources":["../../src/test-containers/postgres-testcontainer.service.ts"],"names":[],"mappings":";;;;AAAA,2CAKwB;AAExB,2DAGoC;AAEpC,gDAA4C;AAC5C,kDAA8C;AAE9C,MAAa,4BAA4B;IAEvB,MAAM,CAAa;IAEnB,QAAQ,CAAc;IAE/B,SAAS,CAA6B;IAEtC,WAAW,GAA4B,IAAI,CAAC;IAEpD;QACC,IAAI,CAAC,YAAY,EAAE,CAAC;IACrB,CAAC;IAEM,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,CAAC;QAED,OAAO,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,sBAAsB;QAClC,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,IAAG,EAAE;YAC9C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;YAE/C,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,eAAe;QAC3B,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,cAAc;QAC3B,MAAM,SAAS,GAAG,IAAI,gCAAmB,CAAC,UAAU,CAAC;aACnD,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;aAClC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;aAC9B,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;aAClC,gBAAgB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAEhE,IAAI,CAAC,SAAS,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;IAC1C,CAAC;IAEO,KAAK,CAAC,aAAa;QAC1B,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IAEO,YAAY;QAEnB,MAAM,gBAAgB,GAAG,0BAAW,CAAC,SAAS,CAAC,YAAY,CAAC;QAE5D,MAAM,IAAI,GAAG,IAAI,CAAC;QAElB,0BAAW,CAAC,SAAS,CAAC,YAAY,GAAG,KAAK;YACzC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAC1B,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC;IACH,CAAC;CACD;AA5DD,oEA4DC;AA1DiB;IADhB,IAAA,eAAM,GAAE;sCACgB,wBAAU;4DAAC;AAEnB;IADhB,IAAA,eAAM,GAAE;sCACkB,0BAAW;8DAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hg-ts/knex",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.24",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dist/index.js"
|
|
@@ -15,19 +15,19 @@
|
|
|
15
15
|
"lint:ts:fix": "lint-ts --fix"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
|
-
"@hg-ts-config/typescript": "0.2.
|
|
19
|
-
"@hg-ts/async-context": "0.2.
|
|
20
|
-
"@hg-ts/config-loader": "0.2.
|
|
21
|
-
"@hg-ts/domain": "0.2.
|
|
22
|
-
"@hg-ts/events": "0.2.
|
|
23
|
-
"@hg-ts/exception": "0.2.
|
|
24
|
-
"@hg-ts/execution-mode": "0.2.
|
|
25
|
-
"@hg-ts/linter": "0.2.
|
|
26
|
-
"@hg-ts/logger": "0.2.
|
|
27
|
-
"@hg-ts/repository": "0.2.
|
|
28
|
-
"@hg-ts/tests": "0.2.
|
|
29
|
-
"@hg-ts/types": "0.2.
|
|
30
|
-
"@hg-ts/validation": "0.2.
|
|
18
|
+
"@hg-ts-config/typescript": "0.2.24",
|
|
19
|
+
"@hg-ts/async-context": "0.2.24",
|
|
20
|
+
"@hg-ts/config-loader": "0.2.24",
|
|
21
|
+
"@hg-ts/domain": "0.2.24",
|
|
22
|
+
"@hg-ts/events": "0.2.24",
|
|
23
|
+
"@hg-ts/exception": "0.2.24",
|
|
24
|
+
"@hg-ts/execution-mode": "0.2.24",
|
|
25
|
+
"@hg-ts/linter": "0.2.24",
|
|
26
|
+
"@hg-ts/logger": "0.2.24",
|
|
27
|
+
"@hg-ts/repository": "0.2.24",
|
|
28
|
+
"@hg-ts/tests": "0.2.24",
|
|
29
|
+
"@hg-ts/types": "0.2.24",
|
|
30
|
+
"@hg-ts/validation": "0.2.24",
|
|
31
31
|
"@nestjs/common": "11.1.0",
|
|
32
32
|
"@types/node": "22.10.6",
|
|
33
33
|
"@types/pg": "^8",
|
|
@@ -40,15 +40,15 @@
|
|
|
40
40
|
"typescript": "5.7.3"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
43
|
-
"@hg-ts/async-context": "0.2.
|
|
44
|
-
"@hg-ts/config-loader": "0.2.
|
|
45
|
-
"@hg-ts/domain": "0.2.
|
|
46
|
-
"@hg-ts/events": "0.2.
|
|
47
|
-
"@hg-ts/exception": "0.2.
|
|
48
|
-
"@hg-ts/execution-mode": "0.2.
|
|
49
|
-
"@hg-ts/logger": "0.2.
|
|
50
|
-
"@hg-ts/repository": "0.2.
|
|
51
|
-
"@hg-ts/validation": "0.2.
|
|
43
|
+
"@hg-ts/async-context": "0.2.24",
|
|
44
|
+
"@hg-ts/config-loader": "0.2.24",
|
|
45
|
+
"@hg-ts/domain": "0.2.24",
|
|
46
|
+
"@hg-ts/events": "0.2.24",
|
|
47
|
+
"@hg-ts/exception": "0.2.24",
|
|
48
|
+
"@hg-ts/execution-mode": "0.2.24",
|
|
49
|
+
"@hg-ts/logger": "0.2.24",
|
|
50
|
+
"@hg-ts/repository": "0.2.24",
|
|
51
|
+
"@hg-ts/validation": "0.2.24",
|
|
52
52
|
"@nestjs/common": "*",
|
|
53
53
|
"knex": ">=3.1.0",
|
|
54
54
|
"reflect-metadata": "*",
|