@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(newState, mapToColumns) {
592
+ function buildDenormalizedUpdateSet(columns) {
593
593
  const updateSet = {};
594
- if (mapToColumns) {
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 (mapToColumns) {
637
- const columns = mapToColumns(newState);
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 (mapToColumns) {
696
- const columns = mapToColumns(newState);
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;AAyBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,wBAAwB,CACtC,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,EAE3E,MAAM,EAAE,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,GAClD,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CA4GxC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,wBAAgB,yCAAyC,CACvD,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,EAE3E,MAAM,EAAE,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,GAClD,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAyHxC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gCAAgC,CAC9C,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,EAE3E,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EACvB,MAAM,EAAE,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,GAClD,kBAAkB,CAYpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,iDAAiD,CAC/D,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,EAE3E,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EACvB,MAAM,EAAE,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,GAClD,kBAAkB,CAYpB"}
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 from mapToColumns.
85
- * Returns an empty object if mapToColumns is not provided.
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(newState, mapToColumns) {
87
+ function buildDenormalizedUpdateSet(columns) {
88
88
  const updateSet = {};
89
- if (mapToColumns) {
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 mapToColumns is provided, add the denormalized columns
172
- if (mapToColumns) {
173
- const columns = mapToColumns(newState);
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(newState, mapToColumns);
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 (mapToColumns) {
310
- const columns = mapToColumns(newState);
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(newState, mapToColumns);
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
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "2.3.0",
6
+ "version": "2.3.1",
7
7
  "description": "Emmett Event Store with Kysely",
8
8
  "author": "Wataru Oguchi",
9
9
  "license": "MIT",