@wataruoguchi/emmett-event-store-kysely 2.3.0 → 2.3.1
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.cjs
CHANGED
|
@@ -589,10 +589,9 @@ function loadStateFromSnapshot(snapshot, initialState, tableName) {
|
|
|
589
589
|
}
|
|
590
590
|
return snapshot;
|
|
591
591
|
}
|
|
592
|
-
function buildDenormalizedUpdateSet(
|
|
592
|
+
function buildDenormalizedUpdateSet(columns) {
|
|
593
593
|
const updateSet = {};
|
|
594
|
-
if (
|
|
595
|
-
const columns = mapToColumns(newState);
|
|
594
|
+
if (columns) {
|
|
596
595
|
for (const columnName of Object.keys(columns)) {
|
|
597
596
|
updateSet[columnName] = (eb) => eb.ref(`excluded.${columnName}`);
|
|
598
597
|
}
|
|
@@ -626,6 +625,7 @@ function createSnapshotProjection(config) {
|
|
|
626
625
|
tableName
|
|
627
626
|
);
|
|
628
627
|
const newState = evolve(currentState, event);
|
|
628
|
+
const denormalizedColumns = mapToColumns ? mapToColumns(newState) : void 0;
|
|
629
629
|
const rowData = {
|
|
630
630
|
...keys,
|
|
631
631
|
snapshot: JSON.stringify(newState),
|
|
@@ -633,9 +633,8 @@ function createSnapshotProjection(config) {
|
|
|
633
633
|
last_stream_position: event.metadata.streamPosition.toString(),
|
|
634
634
|
last_global_position: event.metadata.globalPosition.toString()
|
|
635
635
|
};
|
|
636
|
-
if (
|
|
637
|
-
|
|
638
|
-
Object.assign(rowData, columns);
|
|
636
|
+
if (denormalizedColumns) {
|
|
637
|
+
Object.assign(rowData, denormalizedColumns);
|
|
639
638
|
}
|
|
640
639
|
const insertQuery = db.insertInto(tableName).values(rowData);
|
|
641
640
|
const updateSet = {
|
|
@@ -644,10 +643,7 @@ function createSnapshotProjection(config) {
|
|
|
644
643
|
last_stream_position: (eb) => eb.ref("excluded.last_stream_position"),
|
|
645
644
|
last_global_position: (eb) => eb.ref("excluded.last_global_position")
|
|
646
645
|
};
|
|
647
|
-
const denormalizedUpdateSet = buildDenormalizedUpdateSet(
|
|
648
|
-
newState,
|
|
649
|
-
mapToColumns
|
|
650
|
-
);
|
|
646
|
+
const denormalizedUpdateSet = buildDenormalizedUpdateSet(denormalizedColumns);
|
|
651
647
|
Object.assign(updateSet, denormalizedUpdateSet);
|
|
652
648
|
await insertQuery.onConflict((oc) => {
|
|
653
649
|
const conflictBuilder = oc.columns(primaryKeys);
|
|
@@ -678,6 +674,7 @@ function createSnapshotProjectionWithSnapshotTable(config) {
|
|
|
678
674
|
tableName
|
|
679
675
|
);
|
|
680
676
|
const newState = evolve(currentState, event);
|
|
677
|
+
const denormalizedColumns = mapToColumns ? mapToColumns(newState) : void 0;
|
|
681
678
|
await db.insertInto("snapshots").values({
|
|
682
679
|
readmodel_table_name: tableName,
|
|
683
680
|
stream_id: streamId,
|
|
@@ -692,15 +689,11 @@ function createSnapshotProjectionWithSnapshotTable(config) {
|
|
|
692
689
|
});
|
|
693
690
|
}).execute();
|
|
694
691
|
const readModelData = { ...keys };
|
|
695
|
-
if (
|
|
696
|
-
|
|
697
|
-
Object.assign(readModelData, columns);
|
|
692
|
+
if (denormalizedColumns) {
|
|
693
|
+
Object.assign(readModelData, denormalizedColumns);
|
|
698
694
|
}
|
|
699
695
|
const readModelInsertQuery = db.insertInto(tableName).values(readModelData);
|
|
700
|
-
const readModelUpdateSet = buildDenormalizedUpdateSet(
|
|
701
|
-
newState,
|
|
702
|
-
mapToColumns
|
|
703
|
-
);
|
|
696
|
+
const readModelUpdateSet = buildDenormalizedUpdateSet(denormalizedColumns);
|
|
704
697
|
if (Object.keys(readModelUpdateSet).length > 0) {
|
|
705
698
|
await readModelInsertQuery.onConflict((oc) => {
|
|
706
699
|
const conflictBuilder = oc.columns(primaryKeys);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot-projection.d.ts","sourceRoot":"","sources":["../../src/projections/snapshot-projection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAEhB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAErB;;;;;;GAMG;AACH,MAAM,MAAM,wBAAwB,CAClC,MAAM,EACN,MAAM,SAAS,MAAM,EACrB,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,IACzE;IACF;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB;;;OAGG;IACH,WAAW,EAAE,CACX,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EACzB,SAAS,EAAE,MAAM,KACd,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE5B;;;OAGG;IACH,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;IAE7D;;OAEG;IACH,YAAY,EAAE,MAAM,MAAM,CAAC;IAE3B;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3D,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAatE;AAgDD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAC1C,QAAQ,EAAE,OAAO,EACjB,YAAY,EAAE,MAAM,MAAM,EAC1B,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAqBR;
|
|
1
|
+
{"version":3,"file":"snapshot-projection.d.ts","sourceRoot":"","sources":["../../src/projections/snapshot-projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -81,13 +81,12 @@ export function loadStateFromSnapshot(snapshot, initialState, tableName) {
|
|
|
81
81
|
return snapshot;
|
|
82
82
|
}
|
|
83
83
|
/**
|
|
84
|
-
* Builds the update set for denormalized columns
|
|
85
|
-
* Returns an empty object if
|
|
84
|
+
* Builds the update set for denormalized columns.
|
|
85
|
+
* Returns an empty object if columns is not provided or empty.
|
|
86
86
|
*/
|
|
87
|
-
function buildDenormalizedUpdateSet(
|
|
87
|
+
function buildDenormalizedUpdateSet(columns) {
|
|
88
88
|
const updateSet = {};
|
|
89
|
-
if (
|
|
90
|
-
const columns = mapToColumns(newState);
|
|
89
|
+
if (columns) {
|
|
91
90
|
for (const columnName of Object.keys(columns)) {
|
|
92
91
|
updateSet[columnName] = (eb) => eb.ref(`excluded.${columnName}`);
|
|
93
92
|
}
|
|
@@ -160,6 +159,10 @@ export function createSnapshotProjection(config) {
|
|
|
160
159
|
const currentState = loadStateFromSnapshot(existing?.snapshot, initialState, tableName);
|
|
161
160
|
// Apply the event to get new state
|
|
162
161
|
const newState = evolve(currentState, event);
|
|
162
|
+
// Call mapToColumns once after evolve (only if provided)
|
|
163
|
+
const denormalizedColumns = mapToColumns
|
|
164
|
+
? mapToColumns(newState)
|
|
165
|
+
: undefined;
|
|
163
166
|
// Prepare the row data with snapshot
|
|
164
167
|
const rowData = {
|
|
165
168
|
...keys,
|
|
@@ -168,10 +171,9 @@ export function createSnapshotProjection(config) {
|
|
|
168
171
|
last_stream_position: event.metadata.streamPosition.toString(),
|
|
169
172
|
last_global_position: event.metadata.globalPosition.toString(),
|
|
170
173
|
};
|
|
171
|
-
// If
|
|
172
|
-
if (
|
|
173
|
-
|
|
174
|
-
Object.assign(rowData, columns);
|
|
174
|
+
// If denormalized columns exist, add them to row data
|
|
175
|
+
if (denormalizedColumns) {
|
|
176
|
+
Object.assign(rowData, denormalizedColumns);
|
|
175
177
|
}
|
|
176
178
|
// Upsert the snapshot
|
|
177
179
|
const insertQuery = db.insertInto(tableName).values(rowData);
|
|
@@ -182,7 +184,7 @@ export function createSnapshotProjection(config) {
|
|
|
182
184
|
last_global_position: (eb) => eb.ref("excluded.last_global_position"),
|
|
183
185
|
};
|
|
184
186
|
// Add denormalized columns to update set if provided
|
|
185
|
-
const denormalizedUpdateSet = buildDenormalizedUpdateSet(
|
|
187
|
+
const denormalizedUpdateSet = buildDenormalizedUpdateSet(denormalizedColumns);
|
|
186
188
|
Object.assign(updateSet, denormalizedUpdateSet);
|
|
187
189
|
await insertQuery
|
|
188
190
|
// Note: `any` is used here because the conflict builder needs to work with any table schema.
|
|
@@ -280,6 +282,10 @@ export function createSnapshotProjectionWithSnapshotTable(config) {
|
|
|
280
282
|
const currentState = loadStateFromSnapshot(existing?.snapshot, initialState, tableName);
|
|
281
283
|
// Apply the event to get new state
|
|
282
284
|
const newState = evolve(currentState, event);
|
|
285
|
+
// Call mapToColumns once after evolve (only if provided)
|
|
286
|
+
const denormalizedColumns = mapToColumns
|
|
287
|
+
? mapToColumns(newState)
|
|
288
|
+
: undefined;
|
|
283
289
|
// Upsert the snapshot in the snapshots table
|
|
284
290
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
285
291
|
await db
|
|
@@ -306,16 +312,15 @@ export function createSnapshotProjectionWithSnapshotTable(config) {
|
|
|
306
312
|
.execute();
|
|
307
313
|
// Upsert the read model table with keys and denormalized columns only
|
|
308
314
|
const readModelData = { ...keys };
|
|
309
|
-
if (
|
|
310
|
-
|
|
311
|
-
Object.assign(readModelData, columns);
|
|
315
|
+
if (denormalizedColumns) {
|
|
316
|
+
Object.assign(readModelData, denormalizedColumns);
|
|
312
317
|
}
|
|
313
318
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
314
319
|
const readModelInsertQuery = db
|
|
315
320
|
.insertInto(tableName)
|
|
316
321
|
.values(readModelData);
|
|
317
322
|
// Build the update set for conflict resolution (only for denormalized columns)
|
|
318
|
-
const readModelUpdateSet = buildDenormalizedUpdateSet(
|
|
323
|
+
const readModelUpdateSet = buildDenormalizedUpdateSet(denormalizedColumns);
|
|
319
324
|
// Only update if there are denormalized columns, otherwise just insert (no-op on conflict)
|
|
320
325
|
if (Object.keys(readModelUpdateSet).length > 0) {
|
|
321
326
|
await readModelInsertQuery
|