@event-driven-io/emmett-postgresql 0.16.0 → 0.17.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.
Files changed (78) hide show
  1. package/dist/{chunk-NBTN5MZ6.js → chunk-5NYGSL2B.js} +3 -3
  2. package/dist/{chunk-PCRD6RK2.mjs → chunk-6Z7FIKB6.mjs} +2 -2
  3. package/dist/{chunk-WQQC2IS2.js → chunk-HFIQYR5E.js} +2 -2
  4. package/dist/chunk-JPTXK5ZT.mjs +2 -0
  5. package/dist/chunk-JPTXK5ZT.mjs.map +1 -0
  6. package/dist/{chunk-HS4KMVAP.mjs → chunk-NZWWNOXH.mjs} +2 -2
  7. package/dist/{chunk-HIX4PKIP.mjs → chunk-PT4NEEE4.mjs} +1 -1
  8. package/dist/{chunk-HIX4PKIP.mjs.map → chunk-PT4NEEE4.mjs.map} +1 -1
  9. package/dist/{chunk-6FBMFEVK.js → chunk-QB7BC56W.js} +1 -1
  10. package/dist/{chunk-6FBMFEVK.js.map → chunk-QB7BC56W.js.map} +1 -1
  11. package/dist/{chunk-DUXB3PBP.js → chunk-R5KGCWKQ.js} +4 -4
  12. package/dist/chunk-R5KGCWKQ.js.map +1 -0
  13. package/dist/{chunk-ST3FNDJ5.mjs → chunk-SIRCKLWA.mjs} +3 -3
  14. package/dist/chunk-SIRCKLWA.mjs.map +1 -0
  15. package/dist/chunk-UMWNWQRR.js +2 -0
  16. package/dist/chunk-UMWNWQRR.js.map +1 -0
  17. package/dist/chunk-WDTQXX5U.js +2 -0
  18. package/dist/chunk-WDTQXX5U.js.map +1 -0
  19. package/dist/chunk-XQJRZ4PO.mjs +2 -0
  20. package/dist/{chunk-J3JL23C4.mjs.map → chunk-XQJRZ4PO.mjs.map} +1 -1
  21. package/dist/eventStore/index.d.mts +1 -1
  22. package/dist/eventStore/index.d.ts +1 -1
  23. package/dist/eventStore/index.js +1 -1
  24. package/dist/eventStore/index.mjs +1 -1
  25. package/dist/eventStore/postgreSQLEventStore.d.mts +1 -1
  26. package/dist/eventStore/postgreSQLEventStore.d.ts +1 -1
  27. package/dist/eventStore/postgreSQLEventStore.js +1 -1
  28. package/dist/eventStore/postgreSQLEventStore.mjs +1 -1
  29. package/dist/eventStore/projections/index.d.mts +1 -1
  30. package/dist/eventStore/projections/index.d.ts +1 -1
  31. package/dist/eventStore/projections/index.js +1 -1
  32. package/dist/eventStore/projections/index.mjs +1 -1
  33. package/dist/eventStore/projections/pongo/index.d.mts +1 -1
  34. package/dist/eventStore/projections/pongo/index.d.ts +1 -1
  35. package/dist/eventStore/projections/pongo/index.js +1 -1
  36. package/dist/eventStore/projections/pongo/index.mjs +1 -1
  37. package/dist/eventStore/projections/pongo/pongoProjectionSpec.d.mts +1 -1
  38. package/dist/eventStore/projections/pongo/pongoProjectionSpec.d.ts +1 -1
  39. package/dist/eventStore/projections/pongo/pongoProjectionSpec.js +1 -1
  40. package/dist/eventStore/projections/pongo/pongoProjectionSpec.mjs +1 -1
  41. package/dist/eventStore/projections/pongo/projections.d.mts +1 -1
  42. package/dist/eventStore/projections/pongo/projections.d.ts +1 -1
  43. package/dist/eventStore/projections/pongo/projections.js +1 -1
  44. package/dist/eventStore/projections/pongo/projections.mjs +1 -1
  45. package/dist/eventStore/projections/postgresProjectionSpec.d.mts +1 -1
  46. package/dist/eventStore/projections/postgresProjectionSpec.d.ts +1 -1
  47. package/dist/eventStore/projections/postgresProjectionSpec.js +1 -1
  48. package/dist/eventStore/projections/postgresProjectionSpec.mjs +1 -1
  49. package/dist/eventStore/schema/appendToStream.d.mts +3 -1
  50. package/dist/eventStore/schema/appendToStream.d.ts +3 -1
  51. package/dist/eventStore/schema/appendToStream.js +1 -1
  52. package/dist/eventStore/schema/appendToStream.mjs +1 -1
  53. package/dist/eventStore/schema/index.js +1 -1
  54. package/dist/eventStore/schema/index.mjs +1 -1
  55. package/dist/eventStore/schema/readStream.js +1 -1
  56. package/dist/eventStore/schema/readStream.mjs +1 -1
  57. package/dist/index.d.mts +1 -1
  58. package/dist/index.d.ts +1 -1
  59. package/dist/index.js +1 -1
  60. package/dist/index.mjs +1 -1
  61. package/dist/postgreSQLEventStore-BDzOzx7q.d.mts +268 -0
  62. package/dist/postgreSQLEventStore-BDzOzx7q.d.ts +268 -0
  63. package/package.json +2 -2
  64. package/dist/chunk-DUXB3PBP.js.map +0 -1
  65. package/dist/chunk-J3JL23C4.mjs +0 -2
  66. package/dist/chunk-JQ2VF3NG.js +0 -2
  67. package/dist/chunk-JQ2VF3NG.js.map +0 -1
  68. package/dist/chunk-KZTZL7GV.js +0 -2
  69. package/dist/chunk-KZTZL7GV.js.map +0 -1
  70. package/dist/chunk-QNOJWKPZ.mjs +0 -2
  71. package/dist/chunk-QNOJWKPZ.mjs.map +0 -1
  72. package/dist/chunk-ST3FNDJ5.mjs.map +0 -1
  73. package/dist/postgreSQLEventStore-loGROgA0.d.mts +0 -159
  74. package/dist/postgreSQLEventStore-loGROgA0.d.ts +0 -159
  75. /package/dist/{chunk-NBTN5MZ6.js.map → chunk-5NYGSL2B.js.map} +0 -0
  76. /package/dist/{chunk-PCRD6RK2.mjs.map → chunk-6Z7FIKB6.mjs.map} +0 -0
  77. /package/dist/{chunk-WQQC2IS2.js.map → chunk-HFIQYR5E.js.map} +0 -0
  78. /package/dist/{chunk-HS4KMVAP.mjs.map → chunk-NZWWNOXH.mjs.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/eventStore/schema/appendToStream.ts"],"names":["rawSql","single","sql","uuid","appendEventsSQL","streamsTable","eventsTable","appendToStream","pool","streamName","streamType","events","options","transaction","execute","appendResult","expectedStreamVersion","toExpectedVersion","eventsToAppend","e","i","appendEventsRaw","error","isOptimisticConcurrencyError","success","next_stream_position","last_global_position","transaction_id","expected","n","a","s","streamId","p","defaultTag"],"mappings":"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","sourcesContent":["import {\n rawSql,\n single,\n sql,\n type NodePostgresPool,\n type NodePostgresTransaction,\n type SQLExecutor,\n} from '@event-driven-io/dumbo';\nimport {\n JSONParser,\n NO_CONCURRENCY_CHECK,\n STREAM_DOES_NOT_EXIST,\n STREAM_EXISTS,\n type AppendToStreamOptions,\n type Event,\n type ExpectedStreamVersion,\n type ReadEvent,\n} from '@event-driven-io/emmett';\nimport { v4 as uuid } from 'uuid';\nimport { defaultTag, eventsTable, streamsTable } from './typing';\n\nexport const appendEventsSQL = rawSql(\n `CREATE OR REPLACE FUNCTION emt_append_event(\n v_event_ids text[],\n v_events_data jsonb[],\n v_events_metadata jsonb[],\n v_event_schema_versions text[],\n v_event_types text[],\n v_stream_id text,\n v_stream_type text,\n v_expected_stream_position bigint DEFAULT NULL,\n v_partition text DEFAULT emt_sanitize_name('default_partition')\n ) RETURNS TABLE (\n success boolean,\n next_stream_position bigint,\n last_global_position bigint,\n transaction_id xid8\n ) LANGUAGE plpgsql\n AS $$\n DECLARE\n v_next_stream_position bigint;\n v_position bigint;\n v_updated_rows int;\n v_transaction_id xid8;\n v_last_global_position bigint;\n BEGIN\n IF v_expected_stream_position IS NULL THEN\n SELECT COALESCE(max(stream_position), 0) INTO v_expected_stream_position\n FROM ${streamsTable.name}\n WHERE stream_id = v_stream_id AND partition = v_partition;\n END IF;\n\n v_next_stream_position := v_expected_stream_position + array_upper(v_events_data, 1);\n v_transaction_id := pg_current_xact_id();\n\n WITH ev AS (\n SELECT row_number() OVER () + v_expected_stream_position AS stream_position, \n event_data, \n event_metadata, \n schema_version, \n event_id, \n event_type\n FROM (\n SELECT *\n FROM \n unnest(v_event_ids, v_events_data, v_events_metadata, v_event_schema_versions, v_event_types) \n AS event(event_id, event_data, event_metadata, schema_version, event_type)\n ) AS event\n ),\n all_events_insert AS (\n INSERT INTO ${eventsTable.name}\n (stream_id, stream_position, partition, event_data, event_metadata, event_schema_version, event_type, event_id, transaction_id)\n SELECT \n v_stream_id, ev.stream_position, v_partition, ev.event_data, ev.event_metadata, ev.schema_version, ev.event_type, ev.event_id, v_transaction_id\n FROM ev\n RETURNING global_position\n )\n SELECT \n max(global_position) INTO v_last_global_position \n FROM \n all_events_insert;\n\n\n IF v_expected_stream_position = 0 THEN\n INSERT INTO ${streamsTable.name}\n (stream_id, stream_position, partition, stream_type, stream_metadata, is_archived)\n VALUES\n (v_stream_id, v_next_stream_position, v_partition, v_stream_type, '{}', FALSE);\n ELSE\n UPDATE ${streamsTable.name} as s \n SET stream_position = v_next_stream_position\n WHERE stream_id = v_stream_id AND stream_position = v_expected_stream_position AND partition = v_partition AND is_archived = FALSE;\n\n get diagnostics v_updated_rows = row_count;\n\n IF v_updated_rows = 0 THEN\n RETURN QUERY SELECT FALSE, NULL::bigint, NULL::bigint, NULL::xid8;\n RETURN;\n END IF;\n END IF;\n\n RETURN QUERY SELECT TRUE, v_next_stream_position, v_last_global_position, v_transaction_id;\n END;\n $$;\n `,\n);\n\ntype AppendEventResult =\n | {\n success: true;\n nextStreamPosition: bigint;\n lastGlobalPosition: bigint;\n transactionId: string;\n }\n | { success: false };\n\nexport const appendToStream = (\n pool: NodePostgresPool,\n streamName: string,\n streamType: string,\n events: Event[],\n options?: AppendToStreamOptions & {\n partition?: string;\n preCommitHook?: (\n events: ReadEvent[],\n context: {\n transaction: NodePostgresTransaction;\n },\n ) => Promise<void>;\n },\n): Promise<AppendEventResult> =>\n pool.withTransaction<AppendEventResult>(async (transaction) => {\n const { execute } = transaction;\n\n if (events.length === 0)\n return { success: false, result: { success: false } };\n\n let appendResult: AppendEventSqlResult;\n\n try {\n const expectedStreamVersion = toExpectedVersion(\n options?.expectedStreamVersion,\n );\n\n const eventsToAppend: ReadEvent[] = events.map((e, i) => ({\n ...e,\n metadata: {\n streamName,\n eventId: uuid(),\n streamPosition: BigInt(i),\n ...e.metadata,\n },\n }));\n\n // TODO: return global positions from append raw and other generated data\n appendResult = await appendEventsRaw(\n execute,\n streamName,\n streamType,\n eventsToAppend,\n {\n expectedStreamVersion,\n },\n );\n\n if (options?.preCommitHook)\n await options.preCommitHook(eventsToAppend, { transaction });\n } catch (error) {\n if (!isOptimisticConcurrencyError(error)) throw error;\n\n appendResult = {\n success: false,\n last_global_position: null,\n next_stream_position: null,\n transaction_id: null,\n };\n }\n\n const {\n success,\n next_stream_position,\n last_global_position,\n transaction_id,\n } = appendResult;\n\n return {\n success,\n result:\n success &&\n next_stream_position &&\n last_global_position &&\n transaction_id\n ? {\n success: true,\n nextStreamPosition: BigInt(next_stream_position),\n lastGlobalPosition: BigInt(last_global_position),\n transactionId: transaction_id,\n }\n : { success: false },\n };\n });\n\nconst toExpectedVersion = (\n expected: ExpectedStreamVersion | undefined,\n): bigint | null => {\n if (expected === undefined) return null;\n\n if (expected === NO_CONCURRENCY_CHECK) return null;\n\n // TODO: this needs to be fixed\n if (expected == STREAM_DOES_NOT_EXIST) return null;\n\n // TODO: this needs to be fixed\n if (expected == STREAM_EXISTS) return null;\n\n return expected as bigint;\n};\n\nconst isOptimisticConcurrencyError = (error: unknown): boolean =>\n error instanceof Error && 'code' in error && error.code === '23505';\n\ntype AppendEventSqlResult = {\n success: boolean;\n next_stream_position: string | null;\n last_global_position: string | null;\n transaction_id: string | null | undefined;\n};\n\nconst appendEventsRaw = (\n execute: SQLExecutor,\n streamId: string,\n streamType: string,\n events: ReadEvent[],\n options?: {\n expectedStreamVersion: bigint | null;\n partition?: string;\n },\n): Promise<AppendEventSqlResult> =>\n single(\n execute.command<AppendEventSqlResult>(\n sql(\n `SELECT * FROM emt_append_event(\n ARRAY[%s]::text[],\n ARRAY[%s]::jsonb[],\n ARRAY[%s]::jsonb[],\n ARRAY[%s]::text[],\n ARRAY[%s]::text[],\n %L::text,\n %L::text,\n %s::bigint,\n %L::text\n )`,\n events.map((e) => sql('%L', e.metadata.eventId)).join(','),\n events.map((e) => sql('%L', JSONParser.stringify(e.data))).join(','),\n events\n .map((e) => sql('%L', JSONParser.stringify(e.metadata ?? {})))\n .join(','),\n events.map(() => `'1'`).join(','),\n events.map((e) => sql('%L', e.type)).join(','),\n streamId,\n streamType,\n options?.expectedStreamVersion ?? 'NULL',\n options?.partition ?? defaultTag,\n ),\n ),\n );\n"]}
@@ -1,4 +1,4 @@
1
- import{c as A,e as _,f as T}from"./chunk-ABNBEUC6.mjs";import{a as v,l as R,m as S,n as g}from"./chunk-HIX4PKIP.mjs";import{rawSql as N,single as b,sql as s}from"@event-driven-io/dumbo";import{v4 as I}from"uuid";var D=N(`CREATE OR REPLACE FUNCTION emt_append_event(
1
+ import{c as A,e as _,f as T}from"./chunk-ABNBEUC6.mjs";import{a as v,l as R,m as S,n as g}from"./chunk-PT4NEEE4.mjs";import{rawSql as N,single as b,sql as s}from"@event-driven-io/dumbo";import{v4 as I}from"uuid";var D=N(`CREATE OR REPLACE FUNCTION emt_append_event(
2
2
  v_event_ids text[],
3
3
  v_events_data jsonb[],
4
4
  v_events_metadata jsonb[],
@@ -80,7 +80,7 @@ import{c as A,e as _,f as T}from"./chunk-ABNBEUC6.mjs";import{a as v,l as R,m as
80
80
  RETURN QUERY SELECT TRUE, v_next_stream_position, v_last_global_position, v_transaction_id;
81
81
  END;
82
82
  $$;
83
- `),h=(t,a,r,n,i)=>t.withTransaction(async e=>{let{execute:x}=e;if(n.length===0)return{success:!1,result:{success:!1}};let p;try{let o=y(i?.expectedStreamVersion),c=n.map((u,L)=>({...u,metadata:{streamName:a,eventId:I(),streamPosition:BigInt(L),...u.metadata}}));p=await C(x,a,r,c,{expectedStreamVersion:o}),i?.preCommitHook&&await i.preCommitHook(e,c)}catch(o){if(!f(o))throw o;p={success:!1,last_global_position:null,next_stream_position:null,transaction_id:null}}let{success:d,next_stream_position:m,last_global_position:l,transaction_id:E}=p;return{success:d,result:d&&m&&l&&E?{success:!0,nextStreamPosition:BigInt(m),lastGlobalPosition:BigInt(l),transactionId:E}:{success:!1}}}),y=t=>t===void 0||t===g||t==S||t==R?null:t,f=t=>t instanceof Error&&"code"in t&&t.code==="23505",C=(t,a,r,n,i)=>b(t.command(s(`SELECT * FROM emt_append_event(
83
+ `),h=(t,a,r,n,i)=>t.withTransaction(async e=>{let{execute:x}=e;if(n.length===0)return{success:!1,result:{success:!1}};let p;try{let o=y(i?.expectedStreamVersion),c=n.map((u,L)=>({...u,metadata:{streamName:a,eventId:I(),streamPosition:BigInt(L),...u.metadata}}));p=await C(x,a,r,c,{expectedStreamVersion:o}),i?.preCommitHook&&await i.preCommitHook(c,{transaction:e})}catch(o){if(!f(o))throw o;p={success:!1,last_global_position:null,next_stream_position:null,transaction_id:null}}let{success:d,next_stream_position:m,last_global_position:l,transaction_id:E}=p;return{success:d,result:d&&m&&l&&E?{success:!0,nextStreamPosition:BigInt(m),lastGlobalPosition:BigInt(l),transactionId:E}:{success:!1}}}),y=t=>t===void 0||t===g||t==S||t==R?null:t,f=t=>t instanceof Error&&"code"in t&&t.code==="23505",C=(t,a,r,n,i)=>b(t.command(s(`SELECT * FROM emt_append_event(
84
84
  ARRAY[%s]::text[],
85
85
  ARRAY[%s]::jsonb[],
86
86
  ARRAY[%s]::jsonb[],
@@ -91,4 +91,4 @@ import{c as A,e as _,f as T}from"./chunk-ABNBEUC6.mjs";import{a as v,l as R,m as
91
91
  %s::bigint,
92
92
  %L::text
93
93
  )`,n.map(e=>s("%L",e.metadata.eventId)).join(","),n.map(e=>s("%L",v.stringify(e.data))).join(","),n.map(e=>s("%L",v.stringify(e.metadata??{}))).join(","),n.map(()=>"'1'").join(","),n.map(e=>s("%L",e.type)).join(","),a,r,i?.expectedStreamVersion??"NULL",i?.partition??A)));export{D as a,h as b};
94
- //# sourceMappingURL=chunk-ST3FNDJ5.mjs.map
94
+ //# sourceMappingURL=chunk-SIRCKLWA.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/eventStore/schema/appendToStream.ts"],"sourcesContent":["import {\n rawSql,\n single,\n sql,\n type NodePostgresPool,\n type NodePostgresTransaction,\n type SQLExecutor,\n} from '@event-driven-io/dumbo';\nimport {\n JSONParser,\n NO_CONCURRENCY_CHECK,\n STREAM_DOES_NOT_EXIST,\n STREAM_EXISTS,\n type AppendToStreamOptions,\n type Event,\n type ExpectedStreamVersion,\n type ReadEvent,\n} from '@event-driven-io/emmett';\nimport { v4 as uuid } from 'uuid';\nimport { defaultTag, eventsTable, streamsTable } from './typing';\n\nexport const appendEventsSQL = rawSql(\n `CREATE OR REPLACE FUNCTION emt_append_event(\n v_event_ids text[],\n v_events_data jsonb[],\n v_events_metadata jsonb[],\n v_event_schema_versions text[],\n v_event_types text[],\n v_stream_id text,\n v_stream_type text,\n v_expected_stream_position bigint DEFAULT NULL,\n v_partition text DEFAULT emt_sanitize_name('default_partition')\n ) RETURNS TABLE (\n success boolean,\n next_stream_position bigint,\n last_global_position bigint,\n transaction_id xid8\n ) LANGUAGE plpgsql\n AS $$\n DECLARE\n v_next_stream_position bigint;\n v_position bigint;\n v_updated_rows int;\n v_transaction_id xid8;\n v_last_global_position bigint;\n BEGIN\n IF v_expected_stream_position IS NULL THEN\n SELECT COALESCE(max(stream_position), 0) INTO v_expected_stream_position\n FROM ${streamsTable.name}\n WHERE stream_id = v_stream_id AND partition = v_partition;\n END IF;\n\n v_next_stream_position := v_expected_stream_position + array_upper(v_events_data, 1);\n v_transaction_id := pg_current_xact_id();\n\n WITH ev AS (\n SELECT row_number() OVER () + v_expected_stream_position AS stream_position, \n event_data, \n event_metadata, \n schema_version, \n event_id, \n event_type\n FROM (\n SELECT *\n FROM \n unnest(v_event_ids, v_events_data, v_events_metadata, v_event_schema_versions, v_event_types) \n AS event(event_id, event_data, event_metadata, schema_version, event_type)\n ) AS event\n ),\n all_events_insert AS (\n INSERT INTO ${eventsTable.name}\n (stream_id, stream_position, partition, event_data, event_metadata, event_schema_version, event_type, event_id, transaction_id)\n SELECT \n v_stream_id, ev.stream_position, v_partition, ev.event_data, ev.event_metadata, ev.schema_version, ev.event_type, ev.event_id, v_transaction_id\n FROM ev\n RETURNING global_position\n )\n SELECT \n max(global_position) INTO v_last_global_position \n FROM \n all_events_insert;\n\n\n IF v_expected_stream_position = 0 THEN\n INSERT INTO ${streamsTable.name}\n (stream_id, stream_position, partition, stream_type, stream_metadata, is_archived)\n VALUES\n (v_stream_id, v_next_stream_position, v_partition, v_stream_type, '{}', FALSE);\n ELSE\n UPDATE ${streamsTable.name} as s \n SET stream_position = v_next_stream_position\n WHERE stream_id = v_stream_id AND stream_position = v_expected_stream_position AND partition = v_partition AND is_archived = FALSE;\n\n get diagnostics v_updated_rows = row_count;\n\n IF v_updated_rows = 0 THEN\n RETURN QUERY SELECT FALSE, NULL::bigint, NULL::bigint, NULL::xid8;\n RETURN;\n END IF;\n END IF;\n\n RETURN QUERY SELECT TRUE, v_next_stream_position, v_last_global_position, v_transaction_id;\n END;\n $$;\n `,\n);\n\ntype AppendEventResult =\n | {\n success: true;\n nextStreamPosition: bigint;\n lastGlobalPosition: bigint;\n transactionId: string;\n }\n | { success: false };\n\nexport const appendToStream = (\n pool: NodePostgresPool,\n streamName: string,\n streamType: string,\n events: Event[],\n options?: AppendToStreamOptions & {\n partition?: string;\n preCommitHook?: (\n events: ReadEvent[],\n context: {\n transaction: NodePostgresTransaction;\n },\n ) => Promise<void>;\n },\n): Promise<AppendEventResult> =>\n pool.withTransaction<AppendEventResult>(async (transaction) => {\n const { execute } = transaction;\n\n if (events.length === 0)\n return { success: false, result: { success: false } };\n\n let appendResult: AppendEventSqlResult;\n\n try {\n const expectedStreamVersion = toExpectedVersion(\n options?.expectedStreamVersion,\n );\n\n const eventsToAppend: ReadEvent[] = events.map((e, i) => ({\n ...e,\n metadata: {\n streamName,\n eventId: uuid(),\n streamPosition: BigInt(i),\n ...e.metadata,\n },\n }));\n\n // TODO: return global positions from append raw and other generated data\n appendResult = await appendEventsRaw(\n execute,\n streamName,\n streamType,\n eventsToAppend,\n {\n expectedStreamVersion,\n },\n );\n\n if (options?.preCommitHook)\n await options.preCommitHook(eventsToAppend, { transaction });\n } catch (error) {\n if (!isOptimisticConcurrencyError(error)) throw error;\n\n appendResult = {\n success: false,\n last_global_position: null,\n next_stream_position: null,\n transaction_id: null,\n };\n }\n\n const {\n success,\n next_stream_position,\n last_global_position,\n transaction_id,\n } = appendResult;\n\n return {\n success,\n result:\n success &&\n next_stream_position &&\n last_global_position &&\n transaction_id\n ? {\n success: true,\n nextStreamPosition: BigInt(next_stream_position),\n lastGlobalPosition: BigInt(last_global_position),\n transactionId: transaction_id,\n }\n : { success: false },\n };\n });\n\nconst toExpectedVersion = (\n expected: ExpectedStreamVersion | undefined,\n): bigint | null => {\n if (expected === undefined) return null;\n\n if (expected === NO_CONCURRENCY_CHECK) return null;\n\n // TODO: this needs to be fixed\n if (expected == STREAM_DOES_NOT_EXIST) return null;\n\n // TODO: this needs to be fixed\n if (expected == STREAM_EXISTS) return null;\n\n return expected as bigint;\n};\n\nconst isOptimisticConcurrencyError = (error: unknown): boolean =>\n error instanceof Error && 'code' in error && error.code === '23505';\n\ntype AppendEventSqlResult = {\n success: boolean;\n next_stream_position: string | null;\n last_global_position: string | null;\n transaction_id: string | null | undefined;\n};\n\nconst appendEventsRaw = (\n execute: SQLExecutor,\n streamId: string,\n streamType: string,\n events: ReadEvent[],\n options?: {\n expectedStreamVersion: bigint | null;\n partition?: string;\n },\n): Promise<AppendEventSqlResult> =>\n single(\n execute.command<AppendEventSqlResult>(\n sql(\n `SELECT * FROM emt_append_event(\n ARRAY[%s]::text[],\n ARRAY[%s]::jsonb[],\n ARRAY[%s]::jsonb[],\n ARRAY[%s]::text[],\n ARRAY[%s]::text[],\n %L::text,\n %L::text,\n %s::bigint,\n %L::text\n )`,\n events.map((e) => sql('%L', e.metadata.eventId)).join(','),\n events.map((e) => sql('%L', JSONParser.stringify(e.data))).join(','),\n events\n .map((e) => sql('%L', JSONParser.stringify(e.metadata ?? {})))\n .join(','),\n events.map(() => `'1'`).join(','),\n events.map((e) => sql('%L', e.type)).join(','),\n streamId,\n streamType,\n options?.expectedStreamVersion ?? 'NULL',\n options?.partition ?? defaultTag,\n ),\n ),\n );\n"],"mappings":"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","names":["rawSql","single","sql","uuid","appendEventsSQL","rawSql","streamsTable","eventsTable","appendToStream","pool","streamName","streamType","events","options","transaction","execute","appendResult","expectedStreamVersion","toExpectedVersion","eventsToAppend","e","i","uuid","appendEventsRaw","error","isOptimisticConcurrencyError","success","next_stream_position","last_global_position","transaction_id","expected","n","a","s","streamId","single","sql","p","defaultTag"]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkQB7BC56Wjs = require('./chunk-QB7BC56W.js');var _dumbo = require('@event-driven-io/dumbo');var _pongo = require('@event-driven-io/pongo');var w=({handle:e,canHandle:t})=>T({canHandle:t,handle:async(n,o)=>{let{connectionString:a,client:i}=o,p=_pongo.pongoClient.call(void 0, a,{client:i});await e(n,{...o,pongo:p})}}),b= exports.h =e=>{let{collectionName:t,getDocumentId:n,canHandle:o}=e;return w({handle:async(a,{pongo:i})=>{let p=i.db().collection(t);for(let v of a)await p.handle(n(v),async s=>"initialState"in e?await e.evolve(_nullishCoalesce(s, () => (e.initialState())),v):await e.evolve(s,v))},canHandle:o})},k= exports.i =e=>b({...e,getDocumentId:t=>t.metadata.streamName});var _uuid = require('uuid');var ee={for:e=>{{let{projection:t,...n}=e,{connectionString:o}=n;return a=>({when:(i,p)=>{let v=[],s=async c=>{let E=0n,r=_nullishCoalesce(_optionalChain([p, 'optionalAccess', _2 => _2.numberOfTimes]), () => (1));for(let d of[...a,...Array.from({length:r}).flatMap(()=>i)])v.push({...d,metadata:{globalPosition:++E,streamPosition:E,streamName:`test-${_uuid.v4.call(void 0, )}`,eventId:_uuid.v4.call(void 0, ),..._nullishCoalesce(d.metadata, () => ({}))}});await c.withTransaction(d=>j({events:v,projections:[t],connection:{connectionString:o,transaction:d}}))};return{then:async(c,E)=>{let r=_dumbo.dumbo.call(void 0, n);try{await s(r);let d=await c({pool:r,connectionString:o});d!==void 0&&d===!1&&_chunkQB7BC56Wjs.c.call(void 0, _nullishCoalesce(E, () => ("Projection specification didn't match the criteria")))}finally{await r.close()}},thenThrows:async(...c)=>{let E=_dumbo.dumbo.call(void 0, n);try{throw await s(E),new (0, _chunkQB7BC56Wjs.b)("Handler did not fail as expected")}catch(r){if(r instanceof _chunkQB7BC56Wjs.b)throw r;if(c.length===0)return;if(!_chunkQB7BC56Wjs.i.call(void 0, c[0])){_chunkQB7BC56Wjs.e.call(void 0, c[0](r),`Error didn't match the error condition: ${_optionalChain([r, 'optionalAccess', _3 => _3.toString, 'call', _4 => _4()])}`);return}_chunkQB7BC56Wjs.e.call(void 0, r instanceof c[0],`Caught error is not an instance of the expected type: ${_optionalChain([r, 'optionalAccess', _5 => _5.toString, 'call', _6 => _6()])}`),c[1]&&_chunkQB7BC56Wjs.e.call(void 0, c[1](r),`Error didn't match the error condition: ${_optionalChain([r, 'optionalAccess', _7 => _7.toString, 'call', _8 => _8()])}`)}finally{await E.close()}}}}})}}},W= exports.k =(e,t)=>({...t,metadata:{..._nullishCoalesce(t.metadata, () => ({})),streamName:_nullishCoalesce(_optionalChain([t, 'access', _9 => _9.metadata, 'optionalAccess', _10 => _10.streamName]), () => (e))}}),C= exports.l =(e,t)=>t.map(n=>W(e,n)),te= exports.m =C,I= exports.n =(e,t)=>async({pool:{execute:n}})=>{let o=await n.query(e);_chunkQB7BC56Wjs.h.call(void 0, t).containsExactlyInAnyOrder(...o.rows)},ne= exports.o ={query:e=>({resultRows:{toBeTheSame:t=>I(e,t)}})};var re={projections:[]},j= exports.q =async e=>{let{projections:t,events:n,connection:{transaction:o,connectionString:a}}=e,i=n.map(s=>s.type),p=t.filter(s=>s.canHandle.some(c=>i.includes(c))),v=await o.connection.open();for(let s of p)await s.handle(n,{connectionString:a,client:v,transaction:o,execute:o.execute})},T= exports.r =e=>_chunkQB7BC56Wjs.k.call(void 0, e),H= exports.s =(e,...t)=>T({canHandle:t,handle:async(n,o)=>{let a=await e(n,o);await o.execute.batchCommand(a)}}),se= exports.t =(e,...t)=>H(async(n,o)=>{let a=[];for(let i of n)a.push(await e(i,o));return a},...t);var y=(e,t)=>{let{pool:n,connectionString:o,inDatabase:a,inCollection:i}=t;return n.withConnection(async p=>{let v=_pongo.pongoClient.call(void 0, o,{connection:p});try{let s=v.db(a).collection(i);return e(s)}finally{await v.close()}})},Q=e=>{let{_id:t,...n}=e;return n},A=(e,t)=>("_id"in t&&_chunkQB7BC56Wjs.f.call(void 0, t._id,e._id,`Document ids are not matching! Expected: ${t._id}, actual: ${e._id}`),_chunkQB7BC56Wjs.d.call(void 0, Q(e),Q(t))),N= exports.a =(e,t)=>n=>y(async o=>{let a=await o.findOne("withId"in t?{_id:t.withId}:t.matchingFilter);_chunkQB7BC56Wjs.g.call(void 0, a),A(a,e)},{...t,...n}),F= exports.b =(e,t)=>n=>y(async o=>{let a=await o.find("withId"in t?{_id:t.withId}:t.matchingFilter);_chunkQB7BC56Wjs.f.call(void 0, e.length,a.length,"Different Documents Count than expected");for(let i=0;i<e.length;i++)_chunkQB7BC56Wjs.h.call(void 0, a).contains(e[i])},{...t,...n}),_= exports.c =(e,t)=>n=>y(async o=>{let a=await o.find("withId"in t?{_id:t.withId}:t.matchingFilter);_chunkQB7BC56Wjs.f.call(void 0, e,a.length,"Different Documents Count than expected")},{...t,...n}),O= exports.d =e=>t=>y(async n=>{let o=await n.find("withId"in e?{_id:e.withId}:e.matchingFilter);_chunkQB7BC56Wjs.h.call(void 0, o).isNotEmpty()},{...e,...t}),L= exports.e =e=>t=>y(async n=>{let o=await n.findOne("withId"in e?{_id:e.withId}:e.matchingFilter);_chunkQB7BC56Wjs.g.call(void 0, o)},{...e,...t}),Pe= exports.f ={fromCollection:e=>({withId:t=>({toBeEqual:n=>N(n,{withId:t,inCollection:e}),toExist:()=>O({withId:t,inCollection:e}),notToExist:()=>L({withId:t,inCollection:e})}),matching:t=>({toBeTheSame:n=>F(n,{matchingFilter:t,inCollection:e}),toHaveCount:n=>_(n,{matchingFilter:t,inCollection:e}),toExist:()=>O({matchingFilter:t,inCollection:e}),notToExist:()=>L({matchingFilter:t,inCollection:e})})})};exports.a = N; exports.b = F; exports.c = _; exports.d = O; exports.e = L; exports.f = Pe; exports.g = w; exports.h = b; exports.i = k; exports.j = ee; exports.k = W; exports.l = C; exports.m = te; exports.n = I; exports.o = ne; exports.p = re; exports.q = j; exports.r = T; exports.s = H; exports.t = se;
2
+ //# sourceMappingURL=chunk-UMWNWQRR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/eventStore/projections/pongo/pongoProjectionSpec.ts","../src/eventStore/projections/index.ts","../src/eventStore/projections/pongo/projections.ts","../src/eventStore/projections/postgresProjectionSpec.ts"],"names":["pongoClient","pongoProjection","handle","canHandle","postgreSQLProjection","events","context","connectionString","client","pongo","pongoMultiStreamProjection","options","collectionName","getDocumentId","collection","event","document","pongoSingleStreamProjection","dumbo","uuid","PostgreSQLProjectionSpec","projection","dumoOptions","givenEvents","allEvents","run","pool","globalPosition","numberOfTimes","transaction","handleProjections","assert","message","succeeded","p","args","l","error","w","s","eventInStream","streamName","eventsInStream","e","newEventsInStream","assertSQLQueryResultMatches","sql","rows","execute","result","q","expectSQL","defaultPostgreSQLProjectionOptions","allProjections","eventTypes","projections","type","definition","a","postgreSQLRawBatchSQLProjection","sqls","postgreSQLRawSQLProjection","withCollection","inDatabase","inCollection","connection","withoutId","doc","_id","without","assertDocumentsEqual","actual","expected","c","x","documentExists","assertOptions","y","documentsAreTheSame","documents","documentsMatchingHaveCount","expectedCount","documentMatchingExists","documentDoesNotExist","expectPongoDocuments","id","filter"],"mappings":"2FAAA,MAA2B,yBAO3B,OACE,eAAAA,MAKK,yBCbP,MAKO,yBCEP,OACE,eAAAA,MAGK,yBAmEA,IAAMC,EAAkB,CAK7B,CACA,OAAAC,EACA,UAAAC,CACF,IAIEC,EAAmD,CACjD,UAAAD,EACA,OAAQ,MAAOE,EAAQC,IAAY,CACjC,GAAM,CAAE,iBAAAC,EAAkB,OAAAC,CAAO,EAAIF,EAC/BG,EAAQT,EAAYO,EAAkB,CAAE,OAAAC,CAAO,CAAC,EACtD,MAAMN,EAAOG,EAAqD,CAChE,GAAGC,EACH,MAAAG,CACF,CAAC,CACH,CACF,CAAC,EA+BUC,EAOXC,GAKmC,CACnC,GAAM,CAAE,eAAAC,EAAgB,cAAAC,EAAe,UAAAV,CAAU,EAAIQ,EAErD,OAAOV,EAAgB,CACrB,OAAQ,MAAOI,EAAQ,CAAE,MAAAI,CAAM,IAAM,CACnC,IAAMK,EAAaL,EAAM,GAAG,EAAE,WAAqBG,CAAc,EAEjE,QAAWG,KAASV,EAClB,MAAMS,EAAW,OAAOD,EAAcE,CAAK,EAAG,MAAOC,GAC5C,iBAAkBL,EACrB,MAAMA,EAAQ,OACZK,GAAYL,EAAQ,aAAa,EACjCI,CACF,EACA,MAAMJ,EAAQ,OACZK,EACAD,CACF,CACL,CAEL,EACA,UAAAZ,CACF,CAAC,CACH,EA8Bac,EAOXN,GAMOD,EAAmE,CACxE,GAAGC,EACH,cAAgBI,GAAUA,EAAM,SAAS,UAC3C,CAAC,ECpNH,OACE,SAAAG,MAKK,yBAaP,OAAS,MAAMC,MAAY,OAwCpB,IAAMC,GAA2B,CACtC,IACET,GACwC,CACxC,CACE,GAAM,CAAE,WAAAU,EAAY,GAAGC,CAAY,EAAIX,EACjC,CAAE,iBAAAJ,CAAiB,EAAIe,EAE7B,OAAQC,IACC,CACL,KAAM,CACJlB,EACAM,IACG,CACH,IAAMa,EAGA,CAAC,EAEDC,EAAM,MAAOC,GAAgB,CACjC,IAAIC,EAAiB,GACfC,EAAgBjB,GAAS,eAAiB,EAEhD,QAAWI,IAAS,CAClB,GAAGQ,EACH,GAAG,MAAM,KAAK,CAAE,OAAQK,CAAc,CAAC,EAAE,QAAQ,IAAMvB,CAAM,CAC/D,EACEmB,EAAU,KAAK,CACb,GAAGT,EACH,SAAU,CAEN,eAAgB,EAAEY,EAClB,eAAgBA,EAChB,WAAY,QAAQR,EAAK,CAAC,GAC1B,QAASA,EAAK,EAEhB,GAAIJ,EAAM,UAAY,CAAC,CACzB,CACF,CAAC,EAGH,MAAMW,EAAK,gBAAiBG,GAC1BC,EAAkB,CAChB,OAAQN,EACR,YAAa,CAACH,CAAU,EACxB,WAAY,CACV,iBAAAd,EACA,YAAAsB,CACF,CACF,CAAC,CACH,CACF,EAEA,MAAO,CACL,KAAM,MACJE,EACAC,IACkB,CAClB,IAAMN,EAAOR,EAAMI,CAAW,EAC9B,GAAI,CACF,MAAMG,EAAIC,CAAI,EAEd,IAAMO,EAAY,MAAMF,EAAO,CAAE,KAAAL,EAAM,iBAAAnB,CAAiB,CAAC,EAErD0B,IAAc,QAAaA,IAAc,IAC3CC,EACEF,GACE,oDACJ,CACJ,QAAE,CACA,MAAMN,EAAK,MAAM,CACnB,CACF,EACA,WAAY,SACPS,IACe,CAClB,IAAMT,EAAOR,EAAMI,CAAW,EAC9B,GAAI,CACF,YAAMG,EAAIC,CAAI,EACR,IAAIU,EAAe,kCAAkC,CAC7D,OAASC,EAAO,CACd,GAAIA,aAAiBD,EAAgB,MAAMC,EAE3C,GAAIF,EAAK,SAAW,EAAG,OAEvB,GAAI,CAACG,EAAmBH,EAAK,CAAC,CAAC,EAAG,CAChCI,EACEJ,EAAK,CAAC,EAAEE,CAAkB,EAC1B,2CAA2CA,GAAO,SAAS,CAAC,EAC9D,EACA,MACF,CAEAE,EACEF,aAAiBF,EAAK,CAAC,EACvB,yDAAyDE,GAAO,SAAS,CAAC,EAC5E,EAEIF,EAAK,CAAC,GACRI,EACEJ,EAAK,CAAC,EAAEE,CAAkB,EAC1B,2CAA2CA,GAAO,SAAS,CAAC,EAC9D,CAEJ,QAAE,CACA,MAAMX,EAAK,MAAM,CACnB,CACF,CACF,CACF,CACF,EAEJ,CACF,CACF,EAEac,EAAgB,CAM3BC,EACA1B,KAEO,CACL,GAAGA,EACH,SAAU,CACR,GAAIA,EAAM,UAAY,CAAC,EACvB,WAAYA,EAAM,UAAU,YAAc0B,CAC5C,CACF,GAGWC,EAAiB,CAM5BD,EACApC,IAEOA,EAAO,IAAKsC,GAAMH,EAAcC,EAAYE,CAAC,CAAC,EAG1CC,GAAoBF,EAEpBG,EACX,CAA2BC,EAAUC,IACrC,MAAO,CAAE,KAAM,CAAE,QAAAC,CAAQ,CAAE,IAAM,CAC/B,IAAMC,EAAS,MAAMD,EAAQ,MAASF,CAAG,EAEzCI,EAAgBH,CAAI,EAAE,0BAA0B,GAAGE,EAAO,IAAI,CAChE,EAEWE,GAAY,CACvB,MAAQL,IAAc,CACpB,WAAY,CACV,YAAwCC,GACtCF,EAA4BC,EAAKC,CAAI,CACzC,CACF,EACF,EFjLO,IAAMK,GAAgE,CAC3E,YAAa,CAAC,CAChB,EAeatB,EAAoB,MAK/BnB,GACkB,CAClB,GAAM,CACJ,YAAa0C,EACb,OAAAhD,EACA,WAAY,CAAE,YAAAwB,EAAa,iBAAAtB,CAAiB,CAC9C,EAAII,EAEE2C,EAAajD,EAAO,IAAKsC,GAAMA,EAAE,IAAI,EAErCY,EAAcF,EAAe,OAAQnB,GACzCA,EAAE,UAAU,KAAMsB,GAASF,EAAW,SAASE,CAAI,CAAC,CACtD,EAEMhD,EAAU,MAAMqB,EAAY,WAAW,KAAK,EAElD,QAAWR,KAAckC,EACvB,MAAMlC,EAAW,OAAOhB,EAAQ,CAC9B,iBAAAE,EACA,OAAAC,EACA,YAAAqB,EACA,QAASA,EAAY,OACvB,CAAC,CAEL,EAEazB,EAKXqD,GAEAC,EAKED,CAAU,EAEDE,EAAkC,CAC7CzD,KAIGC,IAEHC,EAAgC,CAC9B,UAAAD,EACA,OAAQ,MAAOE,EAAQC,IAAY,CACjC,IAAMsD,EAAc,MAAM1D,EAAOG,EAAQC,CAAO,EAEhD,MAAMA,EAAQ,QAAQ,aAAasD,CAAI,CACzC,CACF,CAAC,EAEUC,GAA6B,CACxC3D,KAIGC,IAEHwD,EACE,MAAOtD,EAAQC,IAAY,CACzB,IAAMsD,EAAc,CAAC,EAErB,QAAW7C,KAASV,EAClBuD,EAAK,KAAK,MAAM1D,EAAOa,EAAOT,CAAO,CAAC,EAExC,OAAOsD,CACT,EACA,GAAGzD,CACL,EDvHF,IAAM2D,EAAiB,CACrB5D,EACAS,IAIG,CACH,GAAM,CAAE,KAAAe,EAAM,iBAAAnB,EAAkB,WAAAwD,EAAY,aAAAC,CAAa,EAAIrD,EAE7D,OAAOe,EAAK,eAAe,MAAOuC,GAAe,CAC/C,IAAMxD,EAAQT,EAAYO,EAAkB,CAC1C,WAAA0D,CACF,CAAC,EACD,GAAI,CACF,IAAMnD,EAAaL,EAAM,GAAGsD,CAAU,EAAE,WAAWC,CAAY,EAE/D,OAAO9D,EAAOY,CAAU,CAC1B,QAAE,CACA,MAAML,EAAM,MAAM,CACpB,CACF,CAAC,CACH,EAEMyD,EACJC,GACG,CACH,GAAM,CAAE,IAAAC,EAAK,GAAGC,CAAQ,EAAIF,EAE5B,OAAOE,CACT,EAEMC,EAAuB,CAG3BC,EACAC,KAEI,QAASA,GACXC,EACED,EAAS,IACTD,EAAO,IAEP,4CAA4CC,EAAS,GAAG,aAAaD,EAAO,GAAG,EACjF,EAEKG,EAAgBR,EAAUK,CAAM,EAAGL,EAAUM,CAAQ,CAAC,GASlDG,EACX,CACE3D,EACAL,IAEDiE,GACCd,EACE,MAAOhD,GAAe,CACpB,IAAMmC,EAAS,MAAMnC,EAAW,QAC9B,WAAYH,EACR,CAAE,IAAKA,EAAQ,MAAO,EACtBA,EAAQ,cACd,EAEAkE,EAAgB5B,CAAM,EAEtBqB,EAAqBrB,EAAQjC,CAAQ,CACvC,EACA,CAAE,GAAGL,EAAS,GAAGiE,CAAc,CACjC,EAESE,EACX,CACEC,EACApE,IAEDiE,GACCd,EACE,MAAOhD,GAAe,CACpB,IAAMmC,EAAS,MAAMnC,EAAW,KAC9B,WAAYH,EACR,CAAE,IAAKA,EAAQ,MAAO,EACtBA,EAAQ,cACd,EAEA8D,EACEM,EAAU,OACV9B,EAAO,OACP,yCACF,EAEA,QAAS,EAAI,EAAG,EAAI8B,EAAU,OAAQ,IACpC7B,EAAgBD,CAAM,EAAE,SAAS8B,EAAU,CAAC,CAAE,CAElD,EACA,CAAE,GAAGpE,EAAS,GAAGiE,CAAc,CACjC,EAESI,EACX,CACEC,EACAtE,IAEDiE,GACCd,EACE,MAAOhD,GAAe,CACpB,IAAMmC,EAAS,MAAMnC,EAAW,KAC9B,WAAYH,EACR,CAAE,IAAKA,EAAQ,MAAO,EACtBA,EAAQ,cACd,EAEA8D,EACEQ,EACAhC,EAAO,OACP,yCACF,CACF,EACA,CAAE,GAAGtC,EAAS,GAAGiE,CAAc,CACjC,EAESM,EAETvE,GAEDiE,GACCd,EACE,MAAOhD,GAAe,CACpB,IAAMmC,EAAS,MAAMnC,EAAW,KAC9B,WAAYH,EACR,CAAE,IAAKA,EAAQ,MAAO,EACtBA,EAAQ,cACd,EAEAuC,EAAgBD,CAAM,EAAE,WAAW,CACrC,EACA,CAAE,GAAGtC,EAAS,GAAGiE,CAAc,CACjC,EAESO,EAETxE,GAEDiE,GACCd,EACE,MAAOhD,GAAe,CACpB,IAAMmC,EAAS,MAAMnC,EAAW,QAC9B,WAAYH,EACR,CAAE,IAAKA,EAAQ,MAAO,EACtBA,EAAQ,cACd,EAEAkE,EAAgB5B,CAAM,CACxB,EACA,CAAE,GAAGtC,EAAS,GAAGiE,CAAc,CACjC,EAESQ,GAAuB,CAClC,eACExE,IAEO,CACL,OAASyE,IACA,CACL,UAAYrE,GACV2D,EAAe3D,EAAU,CACvB,OAAQqE,EACR,aAAczE,CAChB,CAAC,EACH,QAAS,IACPsE,EAAuB,CACrB,OAAQG,EACR,aAAczE,CAChB,CAAC,EACH,WAAY,IACVuE,EAAqB,CACnB,OAAQE,EACR,aAAczE,CAChB,CAAC,CACL,GAEF,SACE0E,IAEO,CACL,YAAcP,GACZD,EAAyBC,EAAW,CAClC,eAAgBO,EAChB,aAAc1E,CAChB,CAAC,EACH,YAAcqE,GACZD,EAA2BC,EAAe,CACxC,eAAgBK,EAChB,aAAc1E,CAChB,CAAC,EACH,QAAS,IACPsE,EAAuB,CACrB,eAAgBI,EAChB,aAAc1E,CAChB,CAAC,EACH,WAAY,IACVuE,EAAqB,CACnB,eAAgBG,EAChB,aAAc1E,CAChB,CAAC,CACL,EAEJ,EAEJ","sourcesContent":["import { type Dumbo } from '@event-driven-io/dumbo';\nimport {\n assertDeepEqual,\n assertEqual,\n assertIsNotNull,\n assertThatArray,\n} from '@event-driven-io/emmett';\nimport {\n pongoClient,\n type PongoCollection,\n type PongoDocument,\n type PongoFilter,\n type WithId,\n} from '@event-driven-io/pongo';\nimport { type PostgreSQLProjectionAssert } from '..';\n\nexport type PongoAssertOptions = {\n inCollection: string;\n inDatabase?: string;\n};\n\nconst withCollection = (\n handle: (collection: PongoCollection<PongoDocument>) => Promise<void>,\n options: {\n pool: Dumbo;\n connectionString: string;\n } & PongoAssertOptions,\n) => {\n const { pool, connectionString, inDatabase, inCollection } = options;\n\n return pool.withConnection(async (connection) => {\n const pongo = pongoClient(connectionString, {\n connection,\n });\n try {\n const collection = pongo.db(inDatabase).collection(inCollection);\n\n return handle(collection);\n } finally {\n await pongo.close();\n }\n });\n};\n\nconst withoutId = <Doc extends PongoDocument | WithId<PongoDocument>>(\n doc: Doc,\n) => {\n const { _id, ...without } = doc;\n\n return without;\n};\n\nconst assertDocumentsEqual = <\n Doc extends PongoDocument | WithId<PongoDocument>,\n>(\n actual: PongoDocument,\n expected: Doc,\n) => {\n if ('_id' in expected)\n assertEqual(\n expected._id,\n actual._id,\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `Document ids are not matching! Expected: ${expected._id}, actual: ${actual._id}`,\n );\n\n return assertDeepEqual(withoutId(actual), withoutId(expected));\n};\n\ntype FilterOrId<Doc extends PongoDocument | WithId<PongoDocument>> =\n | { withId: string }\n | {\n matchingFilter: PongoFilter<Doc>;\n };\n\nexport const documentExists =\n <Doc extends PongoDocument | WithId<PongoDocument>>(\n document: Doc,\n options: PongoAssertOptions & FilterOrId<Doc>,\n ): PostgreSQLProjectionAssert =>\n (assertOptions) =>\n withCollection(\n async (collection) => {\n const result = await collection.findOne(\n 'withId' in options\n ? { _id: options.withId }\n : options.matchingFilter,\n );\n\n assertIsNotNull(result);\n\n assertDocumentsEqual(result, document);\n },\n { ...options, ...assertOptions },\n );\n\nexport const documentsAreTheSame =\n <Doc extends PongoDocument | WithId<PongoDocument>>(\n documents: Doc[],\n options: PongoAssertOptions & FilterOrId<Doc>,\n ): PostgreSQLProjectionAssert =>\n (assertOptions) =>\n withCollection(\n async (collection) => {\n const result = await collection.find(\n 'withId' in options\n ? { _id: options.withId }\n : options.matchingFilter,\n );\n\n assertEqual(\n documents.length,\n result.length,\n 'Different Documents Count than expected',\n );\n\n for (let i = 0; i < documents.length; i++) {\n assertThatArray(result).contains(documents[i]!);\n }\n },\n { ...options, ...assertOptions },\n );\n\nexport const documentsMatchingHaveCount =\n <Doc extends PongoDocument | WithId<PongoDocument>>(\n expectedCount: number,\n options: PongoAssertOptions & FilterOrId<Doc>,\n ): PostgreSQLProjectionAssert =>\n (assertOptions) =>\n withCollection(\n async (collection) => {\n const result = await collection.find(\n 'withId' in options\n ? { _id: options.withId }\n : options.matchingFilter,\n );\n\n assertEqual(\n expectedCount,\n result.length,\n 'Different Documents Count than expected',\n );\n },\n { ...options, ...assertOptions },\n );\n\nexport const documentMatchingExists =\n <Doc extends PongoDocument | WithId<PongoDocument>>(\n options: PongoAssertOptions & FilterOrId<Doc>,\n ): PostgreSQLProjectionAssert =>\n (assertOptions) =>\n withCollection(\n async (collection) => {\n const result = await collection.find(\n 'withId' in options\n ? { _id: options.withId }\n : options.matchingFilter,\n );\n\n assertThatArray(result).isNotEmpty();\n },\n { ...options, ...assertOptions },\n );\n\nexport const documentDoesNotExist =\n <Doc extends PongoDocument | WithId<PongoDocument>>(\n options: PongoAssertOptions & FilterOrId<Doc>,\n ): PostgreSQLProjectionAssert =>\n (assertOptions) =>\n withCollection(\n async (collection) => {\n const result = await collection.findOne(\n 'withId' in options\n ? { _id: options.withId }\n : options.matchingFilter,\n );\n\n assertIsNotNull(result);\n },\n { ...options, ...assertOptions },\n );\n\nexport const expectPongoDocuments = {\n fromCollection: <Doc extends PongoDocument | WithId<PongoDocument>>(\n collectionName: string,\n ) => {\n return {\n withId: (id: string) => {\n return {\n toBeEqual: (document: Doc) =>\n documentExists(document, {\n withId: id,\n inCollection: collectionName,\n }),\n toExist: () =>\n documentMatchingExists({\n withId: id,\n inCollection: collectionName,\n }),\n notToExist: () =>\n documentDoesNotExist({\n withId: id,\n inCollection: collectionName,\n }),\n };\n },\n matching: <Doc extends PongoDocument | WithId<PongoDocument>>(\n filter: PongoFilter<Doc>,\n ) => {\n return {\n toBeTheSame: (documents: Doc[]) =>\n documentsAreTheSame<Doc>(documents, {\n matchingFilter: filter,\n inCollection: collectionName,\n }),\n toHaveCount: (expectedCount: number) =>\n documentsMatchingHaveCount(expectedCount, {\n matchingFilter: filter,\n inCollection: collectionName,\n }),\n toExist: () =>\n documentMatchingExists({\n matchingFilter: filter,\n inCollection: collectionName,\n }),\n notToExist: () =>\n documentDoesNotExist({\n matchingFilter: filter,\n inCollection: collectionName,\n }),\n };\n },\n };\n },\n};\n","import {\n type NodePostgresClient,\n type NodePostgresTransaction,\n type SQL,\n type SQLExecutor,\n} from '@event-driven-io/dumbo';\nimport {\n projection,\n type CanHandle,\n type Event,\n type EventMetaDataOf,\n type ProjectionHandler,\n type ReadEvent,\n type ReadEventMetadata,\n type TypedProjectionDefinition,\n} from '@event-driven-io/emmett';\nimport type { PostgresEventStoreOptions } from '../postgreSQLEventStore';\n\nexport type PostgreSQLProjectionHandlerContext = {\n connectionString: string;\n client: NodePostgresClient;\n execute: SQLExecutor;\n transaction: NodePostgresTransaction;\n};\n\nexport type PostgreSQLProjectionHandler<\n EventType extends Event = Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadata = EventMetaDataOf<EventType> & ReadEventMetadata,\n> = ProjectionHandler<\n EventType,\n EventMetaDataType,\n PostgreSQLProjectionHandlerContext\n>;\n\nexport interface PostgreSQLProjectionDefinition<\n EventType extends Event = Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadata = EventMetaDataOf<EventType> & ReadEventMetadata,\n> extends TypedProjectionDefinition<\n EventType,\n EventMetaDataType,\n PostgreSQLProjectionHandlerContext\n > {}\n\nexport const defaultPostgreSQLProjectionOptions: PostgresEventStoreOptions = {\n projections: [],\n};\n\nexport type ProjectionHandlerOptions<\n EventType extends Event = Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadata = EventMetaDataOf<EventType> & ReadEventMetadata,\n> = {\n events: ReadEvent<EventType, EventMetaDataType>[];\n projections: PostgreSQLProjectionDefinition<EventType>[];\n connection: {\n connectionString: string;\n transaction: NodePostgresTransaction;\n };\n};\n\nexport const handleProjections = async <\n EventType extends Event = Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadata = EventMetaDataOf<EventType> & ReadEventMetadata,\n>(\n options: ProjectionHandlerOptions<EventType, EventMetaDataType>,\n): Promise<void> => {\n const {\n projections: allProjections,\n events,\n connection: { transaction, connectionString },\n } = options;\n\n const eventTypes = events.map((e) => e.type);\n\n const projections = allProjections.filter((p) =>\n p.canHandle.some((type) => eventTypes.includes(type)),\n );\n\n const client = (await transaction.connection.open()) as NodePostgresClient;\n\n for (const projection of projections) {\n await projection.handle(events, {\n connectionString,\n client,\n transaction,\n execute: transaction.execute,\n });\n }\n};\n\nexport const postgreSQLProjection = <\n EventType extends Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadata = EventMetaDataOf<EventType> & ReadEventMetadata,\n>(\n definition: PostgreSQLProjectionDefinition<EventType>,\n): PostgreSQLProjectionDefinition =>\n projection<\n EventType,\n EventMetaDataType,\n PostgreSQLProjectionHandlerContext,\n PostgreSQLProjectionDefinition<EventType>\n >(definition) as PostgreSQLProjectionDefinition;\n\nexport const postgreSQLRawBatchSQLProjection = <EventType extends Event>(\n handle: (\n events: EventType[],\n context: PostgreSQLProjectionHandlerContext,\n ) => Promise<SQL[]> | SQL[],\n ...canHandle: CanHandle<EventType>\n): PostgreSQLProjectionDefinition =>\n postgreSQLProjection<EventType>({\n canHandle,\n handle: async (events, context) => {\n const sqls: SQL[] = await handle(events, context);\n\n await context.execute.batchCommand(sqls);\n },\n });\n\nexport const postgreSQLRawSQLProjection = <EventType extends Event>(\n handle: (\n event: EventType,\n context: PostgreSQLProjectionHandlerContext,\n ) => Promise<SQL> | SQL,\n ...canHandle: CanHandle<EventType>\n): PostgreSQLProjectionDefinition =>\n postgreSQLRawBatchSQLProjection<EventType>(\n async (events, context) => {\n const sqls: SQL[] = [];\n\n for (const event of events) {\n sqls.push(await handle(event, context));\n }\n return sqls;\n },\n ...canHandle,\n );\n\nexport * from './pongo';\nexport * from './postgresProjectionSpec';\n","import {\n type CanHandle,\n type Event,\n type EventMetaDataOf,\n type ReadEvent,\n type ReadEventMetadataWithGlobalPosition,\n} from '@event-driven-io/emmett';\nimport {\n pongoClient,\n type PongoClient,\n type PongoDocument,\n} from '@event-driven-io/pongo';\nimport {\n postgreSQLProjection,\n type PostgreSQLProjectionDefinition,\n type PostgreSQLProjectionHandlerContext,\n} from '..';\n\nexport type PongoProjectionHandlerContext =\n PostgreSQLProjectionHandlerContext & {\n pongo: PongoClient;\n };\n\nexport type PongoWithNotNullDocumentEvolve<\n Document extends PongoDocument,\n EventType extends Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition = EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition,\n> =\n | ((\n document: Document,\n event: ReadEvent<EventType, EventMetaDataType>,\n ) => Document | null)\n | ((\n document: Document,\n event: ReadEvent<EventType>,\n ) => Promise<Document | null>);\n\nexport type PongoWithNullableDocumentEvolve<\n Document extends PongoDocument,\n EventType extends Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition = EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition,\n> =\n | ((\n document: Document | null,\n event: ReadEvent<EventType, EventMetaDataType>,\n ) => Document | null)\n | ((\n document: Document | null,\n event: ReadEvent<EventType>,\n ) => Promise<Document | null>);\n\nexport type PongoDocumentEvolve<\n Document extends PongoDocument,\n EventType extends Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition = EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition,\n> =\n | PongoWithNotNullDocumentEvolve<Document, EventType, EventMetaDataType>\n | PongoWithNullableDocumentEvolve<Document, EventType, EventMetaDataType>;\n\nexport type PongoProjectionOptions<\n EventType extends Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition = EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition,\n> = {\n handle: (\n events: ReadEvent<EventType, EventMetaDataType>[],\n context: PongoProjectionHandlerContext,\n ) => Promise<void>;\n canHandle: CanHandle<EventType>;\n};\n\nexport const pongoProjection = <\n EventType extends Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition = EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition,\n>({\n handle,\n canHandle,\n}: PongoProjectionOptions<\n EventType,\n EventMetaDataType\n>): PostgreSQLProjectionDefinition =>\n postgreSQLProjection<EventType, EventMetaDataType>({\n canHandle,\n handle: async (events, context) => {\n const { connectionString, client } = context;\n const pongo = pongoClient(connectionString, { client });\n await handle(events as ReadEvent<EventType, EventMetaDataType>[], {\n ...context,\n pongo,\n });\n },\n });\n\nexport type PongoMultiStreamProjectionOptions<\n Document extends PongoDocument,\n EventType extends Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition = EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition,\n> = {\n canHandle: CanHandle<EventType>;\n\n collectionName: string;\n getDocumentId: (event: ReadEvent<EventType>) => string;\n} & (\n | {\n evolve: PongoWithNullableDocumentEvolve<\n Document,\n EventType,\n EventMetaDataType\n >;\n }\n | {\n evolve: PongoWithNotNullDocumentEvolve<\n Document,\n EventType,\n EventMetaDataType\n >;\n initialState: () => Document;\n }\n);\n\nexport const pongoMultiStreamProjection = <\n Document extends PongoDocument,\n EventType extends Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition = EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition,\n>(\n options: PongoMultiStreamProjectionOptions<\n Document,\n EventType,\n EventMetaDataType\n >,\n): PostgreSQLProjectionDefinition => {\n const { collectionName, getDocumentId, canHandle } = options;\n\n return pongoProjection({\n handle: async (events, { pongo }) => {\n const collection = pongo.db().collection<Document>(collectionName);\n\n for (const event of events) {\n await collection.handle(getDocumentId(event), async (document) => {\n return 'initialState' in options\n ? await options.evolve(\n document ?? options.initialState(),\n event as ReadEvent<EventType, EventMetaDataType>,\n )\n : await options.evolve(\n document,\n event as ReadEvent<EventType, EventMetaDataType>,\n );\n });\n }\n },\n canHandle,\n });\n};\n\nexport type PongoSingleStreamProjectionOptions<\n Document extends PongoDocument,\n EventType extends Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition = EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition,\n> = {\n canHandle: CanHandle<EventType>;\n\n collectionName: string;\n} & (\n | {\n evolve: PongoWithNullableDocumentEvolve<\n Document,\n EventType,\n EventMetaDataType\n >;\n }\n | {\n evolve: PongoWithNotNullDocumentEvolve<\n Document,\n EventType,\n EventMetaDataType\n >;\n initialState: () => Document;\n }\n);\n\nexport const pongoSingleStreamProjection = <\n Document extends PongoDocument,\n EventType extends Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition = EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition,\n>(\n options: PongoSingleStreamProjectionOptions<\n Document,\n EventType,\n EventMetaDataType\n >,\n): PostgreSQLProjectionDefinition => {\n return pongoMultiStreamProjection<Document, EventType, EventMetaDataType>({\n ...options,\n getDocumentId: (event) => event.metadata.streamName,\n });\n};\n","import {\n dumbo,\n type Dumbo,\n type DumboOptions,\n type QueryResultRow,\n type SQL,\n} from '@event-driven-io/dumbo';\nimport {\n assertFails,\n AssertionError,\n assertThatArray,\n assertTrue,\n isErrorConstructor,\n type Event,\n type EventMetaDataOf,\n type ReadEvent,\n type ReadEventMetadataWithGlobalPosition,\n type ThenThrows,\n} from '@event-driven-io/emmett';\nimport { v4 as uuid } from 'uuid';\nimport { handleProjections, type PostgreSQLProjectionDefinition } from '.';\n\nexport type PostgreSQLProjectionSpecEvent<\n EventType extends Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition = EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition,\n> = EventType & {\n metadata?: Partial<EventMetaDataType>;\n};\n\nexport type PostgreSQLProjectionSpecWhenOptions = { numberOfTimes: number };\n\nexport type PostgreSQLProjectionSpec<EventType extends Event> = (\n givenEvents: PostgreSQLProjectionSpecEvent<EventType>[],\n) => {\n when: (\n events: PostgreSQLProjectionSpecEvent<EventType>[],\n options?: PostgreSQLProjectionSpecWhenOptions,\n ) => {\n then: (\n assert: PostgreSQLProjectionAssert,\n message?: string,\n ) => Promise<void>;\n thenThrows: <ErrorType extends Error = Error>(\n ...args: Parameters<ThenThrows<ErrorType>>\n ) => Promise<void>;\n };\n};\n\nexport type PostgreSQLProjectionAssert = (options: {\n pool: Dumbo;\n connectionString: string;\n}) => Promise<void | boolean>;\n\nexport type PostgreSQLProjectionSpecOptions = {\n projection: PostgreSQLProjectionDefinition;\n} & DumboOptions;\n\nexport const PostgreSQLProjectionSpec = {\n for: <EventType extends Event>(\n options: PostgreSQLProjectionSpecOptions,\n ): PostgreSQLProjectionSpec<EventType> => {\n {\n const { projection, ...dumoOptions } = options;\n const { connectionString } = dumoOptions;\n\n return (givenEvents: PostgreSQLProjectionSpecEvent<EventType>[]) => {\n return {\n when: (\n events: PostgreSQLProjectionSpecEvent<EventType>[],\n options?: PostgreSQLProjectionSpecWhenOptions,\n ) => {\n const allEvents: ReadEvent<\n EventType,\n ReadEventMetadataWithGlobalPosition\n >[] = [];\n\n const run = async (pool: Dumbo) => {\n let globalPosition = 0n;\n const numberOfTimes = options?.numberOfTimes ?? 1;\n\n for (const event of [\n ...givenEvents,\n ...Array.from({ length: numberOfTimes }).flatMap(() => events),\n ]) {\n allEvents.push({\n ...event,\n metadata: {\n ...{\n globalPosition: ++globalPosition,\n streamPosition: globalPosition,\n streamName: `test-${uuid()}`,\n eventId: uuid(),\n },\n ...(event.metadata ?? {}),\n },\n });\n }\n\n await pool.withTransaction((transaction) =>\n handleProjections({\n events: allEvents,\n projections: [projection],\n connection: {\n connectionString,\n transaction,\n },\n }),\n );\n };\n\n return {\n then: async (\n assert: PostgreSQLProjectionAssert,\n message?: string,\n ): Promise<void> => {\n const pool = dumbo(dumoOptions);\n try {\n await run(pool);\n\n const succeeded = await assert({ pool, connectionString });\n\n if (succeeded !== undefined && succeeded === false)\n assertFails(\n message ??\n \"Projection specification didn't match the criteria\",\n );\n } finally {\n await pool.close();\n }\n },\n thenThrows: async <ErrorType extends Error>(\n ...args: Parameters<ThenThrows<ErrorType>>\n ): Promise<void> => {\n const pool = dumbo(dumoOptions);\n try {\n await run(pool);\n throw new AssertionError('Handler did not fail as expected');\n } catch (error) {\n if (error instanceof AssertionError) throw error;\n\n if (args.length === 0) return;\n\n if (!isErrorConstructor(args[0])) {\n assertTrue(\n args[0](error as ErrorType),\n `Error didn't match the error condition: ${error?.toString()}`,\n );\n return;\n }\n\n assertTrue(\n error instanceof args[0],\n `Caught error is not an instance of the expected type: ${error?.toString()}`,\n );\n\n if (args[1]) {\n assertTrue(\n args[1](error as ErrorType),\n `Error didn't match the error condition: ${error?.toString()}`,\n );\n }\n } finally {\n await pool.close();\n }\n },\n };\n },\n };\n };\n }\n },\n};\n\nexport const eventInStream = <\n EventType extends Event = Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition = EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition,\n>(\n streamName: string,\n event: PostgreSQLProjectionSpecEvent<EventType, EventMetaDataType>,\n): PostgreSQLProjectionSpecEvent<EventType, EventMetaDataType> => {\n return {\n ...event,\n metadata: {\n ...(event.metadata ?? {}),\n streamName: event.metadata?.streamName ?? streamName,\n } as Partial<EventMetaDataType>,\n };\n};\n\nexport const eventsInStream = <\n EventType extends Event = Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition = EventMetaDataOf<EventType> &\n ReadEventMetadataWithGlobalPosition,\n>(\n streamName: string,\n events: PostgreSQLProjectionSpecEvent<EventType, EventMetaDataType>[],\n): PostgreSQLProjectionSpecEvent<EventType, EventMetaDataType>[] => {\n return events.map((e) => eventInStream(streamName, e));\n};\n\nexport const newEventsInStream = eventsInStream;\n\nexport const assertSQLQueryResultMatches =\n <T extends QueryResultRow>(sql: SQL, rows: T[]): PostgreSQLProjectionAssert =>\n async ({ pool: { execute } }) => {\n const result = await execute.query<T>(sql);\n\n assertThatArray(rows).containsExactlyInAnyOrder(...result.rows);\n };\n\nexport const expectSQL = {\n query: (sql: SQL) => ({\n resultRows: {\n toBeTheSame: <T extends QueryResultRow>(rows: T[]) =>\n assertSQLQueryResultMatches(sql, rows),\n },\n }),\n};\n"]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkUMWNWQRRjs = require('./chunk-UMWNWQRR.js');var _chunkHFIQYR5Ejs = require('./chunk-HFIQYR5E.js');var _chunkR5KGCWKQjs = require('./chunk-R5KGCWKQ.js');var _chunk5NYGSL2Bjs = require('./chunk-5NYGSL2B.js');var _chunkQB7BC56Wjs = require('./chunk-QB7BC56W.js');var _dumbo = require('@event-driven-io/dumbo');require('pg');var _=(t,e=_chunkUMWNWQRRjs.p)=>{let g=_dumbo.dumbo.call(void 0, {connectionString:t,...e.connectionOptions?e.connectionOptions:{}}),d=_chunkHFIQYR5Ejs.b.call(void 0, g),O=e.projections.filter(({type:n})=>n==="inline").map(({projection:n})=>n);return{async aggregateStream(n,o){await d;let{evolve:i,initialState:a,read:l}=o,S=_optionalChain([l, 'optionalAccess', _2 => _2.expectedStreamVersion]),r=a(),s=await this.readStream(n,o.read);if(s===null)return null;let c=s.currentStreamVersion;b(c,S);for(let P of s.events)P&&(r=i(r,P));return{currentStreamVersion:c,state:r}},readStream:async(n,o)=>(await d,_chunk5NYGSL2Bjs.a.call(void 0, g.execute,n,o)),appendToStream:async(n,o,i)=>{await d;let[a,...l]=n.split("-"),S=a&&l.length>0?a:"emt:unknown",r=await _chunkR5KGCWKQjs.b.call(void 0, g,n,S,o,{...i,preCommitHook:(s,{transaction:c})=>_chunkUMWNWQRRjs.q.call(void 0, {projections:O,connection:{connectionString:t,transaction:c},events:s})});if(!r.success)throw new (0, _chunkQB7BC56Wjs.o)(-1n,_nullishCoalesce(_optionalChain([i, 'optionalAccess', _3 => _3.expectedStreamVersion]), () => (_chunkQB7BC56Wjs.n)));return{nextExpectedStreamVersion:r.nextStreamPosition}},close:()=>_dumbo.endPool.call(void 0, {connectionString:t})}},N=(t,e)=>e===_chunkQB7BC56Wjs.n?!0:e==_chunkQB7BC56Wjs.m?t===void 0:e==_chunkQB7BC56Wjs.l?t!==void 0:t===e,b=(t,e)=>{if(e??=_chunkQB7BC56Wjs.n,!N(t,e))throw new (0, _chunkQB7BC56Wjs.o)(t,e)};exports.a = _;
2
+ //# sourceMappingURL=chunk-WDTQXX5U.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/eventStore/postgreSQLEventStore.ts"],"names":["dumbo","endPool","getPostgreSQLEventStore","connectionString","options","defaultPostgreSQLProjectionOptions","pool","ensureSchemaExists","createEventStoreSchema","inlineProjections","type","projection","streamName","evolve","initialState","read","expectedStreamVersion","state","result","currentStreamVersion","assertExpectedVersionMatchesCurrent","event","readStream","events","firstPart","rest","streamType","appendResult","appendToStream","transaction","handleProjections","t","n","matchesExpectedVersion","current","expected","a","s"],"mappings":"oOAAA,OACE,SAAAA,EACA,WAAAC,MAIK,yBAmBP,MAAe,KAmFR,IAAMC,EAA0B,CACrCC,EACAC,EAAqCC,IACd,CACvB,IAAMC,EAAON,EAAM,CACjB,iBAAAG,EACA,GAAIC,EAAQ,kBAAoBA,EAAQ,kBAAoB,CAAC,CAC/D,CAAC,EACKG,EAAqBC,EAAuBF,CAAI,EAEhDG,EAAoBL,EAAQ,YAC/B,OAAO,CAAC,CAAE,KAAAM,CAAK,IAAMA,IAAS,QAAQ,EACtC,IAAI,CAAC,CAAE,WAAAC,CAAW,IAAMA,CAAU,EAErC,MAAO,CACL,MAAM,gBACJC,EACAR,EAC8C,CAC9C,MAAMG,EACN,GAAM,CAAE,OAAAM,EAAQ,aAAAC,EAAc,KAAAC,CAAK,EAAIX,EAEjCY,EAAwBD,GAAM,sBAEhCE,EAAQH,EAAa,EAEnBI,EAAS,MAAM,KAAK,WAAsBN,EAAYR,EAAQ,IAAI,EAExE,GAAIc,IAAW,KAAM,OAAO,KAE5B,IAAMC,EAAuBD,EAAO,qBAEpCE,EACED,EACAH,CACF,EAEA,QAAWK,KAASH,EAAO,OACpBG,IAELJ,EAAQJ,EAAOI,EAAOI,CAAK,GAG7B,MAAO,CACL,qBAAsBF,EACtB,MAAAF,CACF,CACF,EAEA,WAAY,MACVL,EACAR,KAQA,MAAMG,EACCe,EAAsBhB,EAAK,QAASM,EAAYR,CAAO,GAGhE,eAAgB,MACdQ,EACAW,EACAnB,IACkC,CAClC,MAAMG,EAEN,GAAM,CAACiB,EAAW,GAAGC,CAAI,EAAIb,EAAW,MAAM,GAAG,EAE3Cc,EACJF,GAAaC,EAAK,OAAS,EAAID,EAAY,cAEvCG,EAAe,MAAMC,EACzBtB,EACAM,EACAc,EACAH,EACA,CACE,GAAGnB,EACH,cAAe,CAACmB,EAAQ,CAAE,YAAAM,CAAY,IACpCC,EAAkB,CAChB,YAAarB,EACb,WAAY,CACV,iBAAAN,EACA,YAAA0B,CACF,EACA,OAAAN,CACF,CAAC,CACL,CACF,EAEA,GAAI,CAACI,EAAa,QAChB,MAAM,IAAII,EACR,CAAC,GACD3B,GAAS,uBAAyB4B,CACpC,EAEF,MAAO,CAAE,0BAA2BL,EAAa,kBAAmB,CACtE,EACA,MAAO,IAAM1B,EAAQ,CAAE,iBAAAE,CAAiB,CAAC,CAC3C,CACF,EAEM8B,EAAyB,CAC7BC,EACAC,IAEIA,IAAaH,EAA6B,GAE1CG,GAAYC,EAA8BF,IAAY,OAEtDC,GAAYE,EAAsBH,IAAY,OAE3CA,IAAYC,EAGff,EAAsC,CAC1Cc,EACAC,IACS,CAGT,GAFAA,IAAaH,EAET,CAACC,EAAuBC,EAASC,CAAQ,EAC3C,MAAM,IAAIJ,EAA6BG,EAASC,CAAQ,CAC5D","sourcesContent":["import {\n dumbo,\n endPool,\n type NodePostgresClientConnection,\n type NodePostgresConnector,\n type NodePostgresPoolClientConnection,\n} from '@event-driven-io/dumbo';\nimport {\n ExpectedVersionConflictError,\n NO_CONCURRENCY_CHECK,\n STREAM_DOES_NOT_EXIST,\n STREAM_EXISTS,\n type AggregateStreamOptions,\n type AggregateStreamResult,\n type AppendToStreamOptions,\n type AppendToStreamResult,\n type DefaultStreamVersionType,\n type Event,\n type EventStore,\n type ExpectedStreamVersion,\n type ProjectionRegistration,\n type ReadEventMetadataWithGlobalPosition,\n type ReadStreamOptions,\n type ReadStreamResult,\n} from '@event-driven-io/emmett';\nimport pg from 'pg';\nimport {\n defaultPostgreSQLProjectionOptions,\n handleProjections,\n type PostgreSQLProjectionHandlerContext,\n} from './projections';\nimport { appendToStream, createEventStoreSchema, readStream } from './schema';\n\nexport interface PostgresEventStore\n extends EventStore<\n DefaultStreamVersionType,\n ReadEventMetadataWithGlobalPosition\n > {\n close(): Promise<void>;\n}\n\ntype PostgresEventStorePooledOptions =\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n pooled: true;\n pool: pg.Pool;\n }\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n pool: pg.Pool;\n }\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n pooled: true;\n }\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n };\n\ntype PostgresEventStoreNotPooledOptions =\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n pooled: false;\n client: pg.Client;\n }\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n client: pg.Client;\n }\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n pooled: false;\n }\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n connection:\n | NodePostgresPoolClientConnection\n | NodePostgresClientConnection;\n pooled?: false;\n };\n\nexport type PostgresEventStoreConnectionOptions =\n | PostgresEventStorePooledOptions\n | PostgresEventStoreNotPooledOptions;\n\nexport type PostgresEventStoreOptions = {\n projections: ProjectionRegistration<\n 'inline',\n PostgreSQLProjectionHandlerContext\n >[];\n connectionOptions?: PostgresEventStoreConnectionOptions;\n};\nexport const getPostgreSQLEventStore = (\n connectionString: string,\n options: PostgresEventStoreOptions = defaultPostgreSQLProjectionOptions,\n): PostgresEventStore => {\n const pool = dumbo({\n connectionString,\n ...(options.connectionOptions ? options.connectionOptions : {}),\n });\n const ensureSchemaExists = createEventStoreSchema(pool);\n\n const inlineProjections = options.projections\n .filter(({ type }) => type === 'inline')\n .map(({ projection }) => projection);\n\n return {\n async aggregateStream<State, EventType extends Event>(\n streamName: string,\n options: AggregateStreamOptions<State, EventType>,\n ): Promise<AggregateStreamResult<State> | null> {\n await ensureSchemaExists;\n const { evolve, initialState, read } = options;\n\n const expectedStreamVersion = read?.expectedStreamVersion;\n\n let state = initialState();\n\n const result = await this.readStream<EventType>(streamName, options.read);\n\n if (result === null) return null;\n\n const currentStreamVersion = result.currentStreamVersion;\n\n assertExpectedVersionMatchesCurrent(\n currentStreamVersion,\n expectedStreamVersion,\n );\n\n for (const event of result.events) {\n if (!event) continue;\n\n state = evolve(state, event);\n }\n\n return {\n currentStreamVersion: currentStreamVersion,\n state,\n };\n },\n\n readStream: async <EventType extends Event>(\n streamName: string,\n options?: ReadStreamOptions,\n ): Promise<\n ReadStreamResult<\n EventType,\n DefaultStreamVersionType,\n ReadEventMetadataWithGlobalPosition\n >\n > => {\n await ensureSchemaExists;\n return readStream<EventType>(pool.execute, streamName, options);\n },\n\n appendToStream: async <EventType extends Event>(\n streamName: string,\n events: EventType[],\n options?: AppendToStreamOptions,\n ): Promise<AppendToStreamResult> => {\n await ensureSchemaExists;\n // TODO: This has to be smarter when we introduce urn-based resolution\n const [firstPart, ...rest] = streamName.split('-');\n\n const streamType =\n firstPart && rest.length > 0 ? firstPart : 'emt:unknown';\n\n const appendResult = await appendToStream(\n pool,\n streamName,\n streamType,\n events,\n {\n ...options,\n preCommitHook: (events, { transaction }) =>\n handleProjections({\n projections: inlineProjections,\n connection: {\n connectionString,\n transaction,\n },\n events,\n }),\n },\n );\n\n if (!appendResult.success)\n throw new ExpectedVersionConflictError<bigint>(\n -1n, //TODO: Return actual version in case of error\n options?.expectedStreamVersion ?? NO_CONCURRENCY_CHECK,\n );\n\n return { nextExpectedStreamVersion: appendResult.nextStreamPosition };\n },\n close: () => endPool({ connectionString }),\n };\n};\n\nconst matchesExpectedVersion = (\n current: bigint | undefined,\n expected: ExpectedStreamVersion,\n): boolean => {\n if (expected === NO_CONCURRENCY_CHECK) return true;\n\n if (expected == STREAM_DOES_NOT_EXIST) return current === undefined;\n\n if (expected == STREAM_EXISTS) return current !== undefined;\n\n return current === expected;\n};\n\nconst assertExpectedVersionMatchesCurrent = (\n current: bigint | undefined,\n expected: ExpectedStreamVersion | undefined,\n): void => {\n expected ??= NO_CONCURRENCY_CHECK;\n\n if (!matchesExpectedVersion(current, expected))\n throw new ExpectedVersionConflictError(current, expected);\n};\n"]}
@@ -0,0 +1,2 @@
1
+ import{p as v,q as y}from"./chunk-JPTXK5ZT.mjs";import{b as T}from"./chunk-NZWWNOXH.mjs";import{b as C}from"./chunk-SIRCKLWA.mjs";import{a as f}from"./chunk-6Z7FIKB6.mjs";import{l as E,m as u,n as p,o as m}from"./chunk-PT4NEEE4.mjs";import{dumbo as R,endPool as x}from"@event-driven-io/dumbo";import"pg";var _=(t,e=v)=>{let g=R({connectionString:t,...e.connectionOptions?e.connectionOptions:{}}),d=T(g),O=e.projections.filter(({type:n})=>n==="inline").map(({projection:n})=>n);return{async aggregateStream(n,o){await d;let{evolve:i,initialState:a,read:l}=o,S=l?.expectedStreamVersion,r=a(),s=await this.readStream(n,o.read);if(s===null)return null;let c=s.currentStreamVersion;b(c,S);for(let P of s.events)P&&(r=i(r,P));return{currentStreamVersion:c,state:r}},readStream:async(n,o)=>(await d,f(g.execute,n,o)),appendToStream:async(n,o,i)=>{await d;let[a,...l]=n.split("-"),S=a&&l.length>0?a:"emt:unknown",r=await C(g,n,S,o,{...i,preCommitHook:(s,{transaction:c})=>y({projections:O,connection:{connectionString:t,transaction:c},events:s})});if(!r.success)throw new m(-1n,i?.expectedStreamVersion??p);return{nextExpectedStreamVersion:r.nextStreamPosition}},close:()=>x({connectionString:t})}},N=(t,e)=>e===p?!0:e==u?t===void 0:e==E?t!==void 0:t===e,b=(t,e)=>{if(e??=p,!N(t,e))throw new m(t,e)};export{_ as a};
2
+ //# sourceMappingURL=chunk-XQJRZ4PO.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/eventStore/postgreSQLEventStore.ts"],"sourcesContent":["import {\n dumbo,\n endPool,\n type NodePostgresClientConnection,\n type NodePostgresConnector,\n type NodePostgresPoolClientConnection,\n} from '@event-driven-io/dumbo';\nimport {\n ExpectedVersionConflictError,\n NO_CONCURRENCY_CHECK,\n STREAM_DOES_NOT_EXIST,\n STREAM_EXISTS,\n type AggregateStreamOptions,\n type AggregateStreamResult,\n type AppendToStreamOptions,\n type AppendToStreamResult,\n type DefaultStreamVersionType,\n type Event,\n type EventStore,\n type ExpectedStreamVersion,\n type ProjectionRegistration,\n type ReadEventMetadataWithGlobalPosition,\n type ReadStreamOptions,\n type ReadStreamResult,\n} from '@event-driven-io/emmett';\nimport pg from 'pg';\nimport {\n defaultPostgreSQLProjectionOptions,\n handleProjections,\n type PostgreSQLProjectionHandlerContext,\n} from './projections';\nimport { appendToStream, createEventStoreSchema, readStream } from './schema';\n\nexport interface PostgresEventStore\n extends EventStore<\n DefaultStreamVersionType,\n ReadEventMetadataWithGlobalPosition\n > {\n close(): Promise<void>;\n}\n\ntype PostgresEventStorePooledOptions =\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n pooled: true;\n pool: pg.Pool;\n }\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n pool: pg.Pool;\n }\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n pooled: true;\n }\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n };\n\ntype PostgresEventStoreNotPooledOptions =\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n pooled: false;\n client: pg.Client;\n }\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n client: pg.Client;\n }\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n pooled: false;\n }\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n connection:\n | NodePostgresPoolClientConnection\n | NodePostgresClientConnection;\n pooled?: false;\n };\n\nexport type PostgresEventStoreConnectionOptions =\n | PostgresEventStorePooledOptions\n | PostgresEventStoreNotPooledOptions;\n\nexport type PostgresEventStoreOptions = {\n projections: ProjectionRegistration<\n 'inline',\n PostgreSQLProjectionHandlerContext\n >[];\n connectionOptions?: PostgresEventStoreConnectionOptions;\n};\nexport const getPostgreSQLEventStore = (\n connectionString: string,\n options: PostgresEventStoreOptions = defaultPostgreSQLProjectionOptions,\n): PostgresEventStore => {\n const pool = dumbo({\n connectionString,\n ...(options.connectionOptions ? options.connectionOptions : {}),\n });\n const ensureSchemaExists = createEventStoreSchema(pool);\n\n const inlineProjections = options.projections\n .filter(({ type }) => type === 'inline')\n .map(({ projection }) => projection);\n\n return {\n async aggregateStream<State, EventType extends Event>(\n streamName: string,\n options: AggregateStreamOptions<State, EventType>,\n ): Promise<AggregateStreamResult<State> | null> {\n await ensureSchemaExists;\n const { evolve, initialState, read } = options;\n\n const expectedStreamVersion = read?.expectedStreamVersion;\n\n let state = initialState();\n\n const result = await this.readStream<EventType>(streamName, options.read);\n\n if (result === null) return null;\n\n const currentStreamVersion = result.currentStreamVersion;\n\n assertExpectedVersionMatchesCurrent(\n currentStreamVersion,\n expectedStreamVersion,\n );\n\n for (const event of result.events) {\n if (!event) continue;\n\n state = evolve(state, event);\n }\n\n return {\n currentStreamVersion: currentStreamVersion,\n state,\n };\n },\n\n readStream: async <EventType extends Event>(\n streamName: string,\n options?: ReadStreamOptions,\n ): Promise<\n ReadStreamResult<\n EventType,\n DefaultStreamVersionType,\n ReadEventMetadataWithGlobalPosition\n >\n > => {\n await ensureSchemaExists;\n return readStream<EventType>(pool.execute, streamName, options);\n },\n\n appendToStream: async <EventType extends Event>(\n streamName: string,\n events: EventType[],\n options?: AppendToStreamOptions,\n ): Promise<AppendToStreamResult> => {\n await ensureSchemaExists;\n // TODO: This has to be smarter when we introduce urn-based resolution\n const [firstPart, ...rest] = streamName.split('-');\n\n const streamType =\n firstPart && rest.length > 0 ? firstPart : 'emt:unknown';\n\n const appendResult = await appendToStream(\n pool,\n streamName,\n streamType,\n events,\n {\n ...options,\n preCommitHook: (client, events) =>\n handleProjections(\n inlineProjections,\n connectionString,\n client,\n events,\n ),\n },\n );\n\n if (!appendResult.success)\n throw new ExpectedVersionConflictError<bigint>(\n -1n, //TODO: Return actual version in case of error\n options?.expectedStreamVersion ?? NO_CONCURRENCY_CHECK,\n );\n\n return { nextExpectedStreamVersion: appendResult.nextStreamPosition };\n },\n close: () => endPool({ connectionString }),\n };\n};\n\nconst matchesExpectedVersion = (\n current: bigint | undefined,\n expected: ExpectedStreamVersion,\n): boolean => {\n if (expected === NO_CONCURRENCY_CHECK) return true;\n\n if (expected == STREAM_DOES_NOT_EXIST) return current === undefined;\n\n if (expected == STREAM_EXISTS) return current !== undefined;\n\n return current === expected;\n};\n\nconst assertExpectedVersionMatchesCurrent = (\n current: bigint | undefined,\n expected: ExpectedStreamVersion | undefined,\n): void => {\n expected ??= NO_CONCURRENCY_CHECK;\n\n if (!matchesExpectedVersion(current, expected))\n throw new ExpectedVersionConflictError(current, expected);\n};\n"],"mappings":"yOAAA,OACE,SAAAA,EACA,WAAAC,MAIK,yBAmBP,MAAe,KAmFR,IAAMC,EAA0B,CACrCC,EACAC,EAAqCC,IACd,CACvB,IAAMC,EAAOC,EAAM,CACjB,iBAAAJ,EACA,GAAIC,EAAQ,kBAAoBA,EAAQ,kBAAoB,CAAC,CAC/D,CAAC,EACKI,EAAqBC,EAAuBH,CAAI,EAEhDI,EAAoBN,EAAQ,YAC/B,OAAO,CAAC,CAAE,KAAAO,CAAK,IAAMA,IAAS,QAAQ,EACtC,IAAI,CAAC,CAAE,WAAAC,CAAW,IAAMA,CAAU,EAErC,MAAO,CACL,MAAM,gBACJC,EACAT,EAC8C,CAC9C,MAAMI,EACN,GAAM,CAAE,OAAAM,EAAQ,aAAAC,EAAc,KAAAC,CAAK,EAAIZ,EAEjCa,EAAwBD,GAAM,sBAEhCE,EAAQH,EAAa,EAEnBI,EAAS,MAAM,KAAK,WAAsBN,EAAYT,EAAQ,IAAI,EAExE,GAAIe,IAAW,KAAM,OAAO,KAE5B,IAAMC,EAAuBD,EAAO,qBAEpCE,EACED,EACAH,CACF,EAEA,QAAWK,KAASH,EAAO,OACpBG,IAELJ,EAAQJ,EAAOI,EAAOI,CAAK,GAG7B,MAAO,CACL,qBAAsBF,EACtB,MAAAF,CACF,CACF,EAEA,WAAY,MACVL,EACAT,KAQA,MAAMI,EACCe,EAAsBjB,EAAK,QAASO,EAAYT,CAAO,GAGhE,eAAgB,MACdS,EACAW,EACApB,IACkC,CAClC,MAAMI,EAEN,GAAM,CAACiB,EAAW,GAAGC,CAAI,EAAIb,EAAW,MAAM,GAAG,EAE3Cc,EACJF,GAAaC,EAAK,OAAS,EAAID,EAAY,cAEvCG,EAAe,MAAMC,EACzBvB,EACAO,EACAc,EACAH,EACA,CACE,GAAGpB,EACH,cAAe,CAAC0B,EAAQN,IACtBO,EACErB,EACAP,EACA2B,EACAN,CACF,CACJ,CACF,EAEA,GAAI,CAACI,EAAa,QAChB,MAAM,IAAII,EACR,CAAC,GACD5B,GAAS,uBAAyB6B,CACpC,EAEF,MAAO,CAAE,0BAA2BL,EAAa,kBAAmB,CACtE,EACA,MAAO,IAAMM,EAAQ,CAAE,iBAAA/B,CAAiB,CAAC,CAC3C,CACF,EAEMgC,EAAyB,CAC7BC,EACAC,IAEIA,IAAaJ,EAA6B,GAE1CI,GAAYC,EAA8BF,IAAY,OAEtDC,GAAYE,EAAsBH,IAAY,OAE3CA,IAAYC,EAGfhB,EAAsC,CAC1Ce,EACAC,IACS,CAGT,GAFAA,IAAaJ,EAET,CAACE,EAAuBC,EAASC,CAAQ,EAC3C,MAAM,IAAIL,EAA6BI,EAASC,CAAQ,CAC5D","names":["dumbo","endPool","getPostgreSQLEventStore","connectionString","options","defaultPostgreSQLProjectionOptions","pool","dumbo","ensureSchemaExists","createEventStoreSchema","inlineProjections","type","projection","streamName","evolve","initialState","read","expectedStreamVersion","state","result","currentStreamVersion","assertExpectedVersionMatchesCurrent","event","readStream","events","firstPart","rest","streamType","appendResult","appendToStream","client","handleProjections","t","n","endPool","matchesExpectedVersion","current","expected","a","s"]}
1
+ {"version":3,"sources":["../src/eventStore/postgreSQLEventStore.ts"],"sourcesContent":["import {\n dumbo,\n endPool,\n type NodePostgresClientConnection,\n type NodePostgresConnector,\n type NodePostgresPoolClientConnection,\n} from '@event-driven-io/dumbo';\nimport {\n ExpectedVersionConflictError,\n NO_CONCURRENCY_CHECK,\n STREAM_DOES_NOT_EXIST,\n STREAM_EXISTS,\n type AggregateStreamOptions,\n type AggregateStreamResult,\n type AppendToStreamOptions,\n type AppendToStreamResult,\n type DefaultStreamVersionType,\n type Event,\n type EventStore,\n type ExpectedStreamVersion,\n type ProjectionRegistration,\n type ReadEventMetadataWithGlobalPosition,\n type ReadStreamOptions,\n type ReadStreamResult,\n} from '@event-driven-io/emmett';\nimport pg from 'pg';\nimport {\n defaultPostgreSQLProjectionOptions,\n handleProjections,\n type PostgreSQLProjectionHandlerContext,\n} from './projections';\nimport { appendToStream, createEventStoreSchema, readStream } from './schema';\n\nexport interface PostgresEventStore\n extends EventStore<\n DefaultStreamVersionType,\n ReadEventMetadataWithGlobalPosition\n > {\n close(): Promise<void>;\n}\n\ntype PostgresEventStorePooledOptions =\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n pooled: true;\n pool: pg.Pool;\n }\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n pool: pg.Pool;\n }\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n pooled: true;\n }\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n };\n\ntype PostgresEventStoreNotPooledOptions =\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n pooled: false;\n client: pg.Client;\n }\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n client: pg.Client;\n }\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n pooled: false;\n }\n | {\n connector?: NodePostgresConnector;\n connectionString?: string;\n database?: string;\n connection:\n | NodePostgresPoolClientConnection\n | NodePostgresClientConnection;\n pooled?: false;\n };\n\nexport type PostgresEventStoreConnectionOptions =\n | PostgresEventStorePooledOptions\n | PostgresEventStoreNotPooledOptions;\n\nexport type PostgresEventStoreOptions = {\n projections: ProjectionRegistration<\n 'inline',\n PostgreSQLProjectionHandlerContext\n >[];\n connectionOptions?: PostgresEventStoreConnectionOptions;\n};\nexport const getPostgreSQLEventStore = (\n connectionString: string,\n options: PostgresEventStoreOptions = defaultPostgreSQLProjectionOptions,\n): PostgresEventStore => {\n const pool = dumbo({\n connectionString,\n ...(options.connectionOptions ? options.connectionOptions : {}),\n });\n const ensureSchemaExists = createEventStoreSchema(pool);\n\n const inlineProjections = options.projections\n .filter(({ type }) => type === 'inline')\n .map(({ projection }) => projection);\n\n return {\n async aggregateStream<State, EventType extends Event>(\n streamName: string,\n options: AggregateStreamOptions<State, EventType>,\n ): Promise<AggregateStreamResult<State> | null> {\n await ensureSchemaExists;\n const { evolve, initialState, read } = options;\n\n const expectedStreamVersion = read?.expectedStreamVersion;\n\n let state = initialState();\n\n const result = await this.readStream<EventType>(streamName, options.read);\n\n if (result === null) return null;\n\n const currentStreamVersion = result.currentStreamVersion;\n\n assertExpectedVersionMatchesCurrent(\n currentStreamVersion,\n expectedStreamVersion,\n );\n\n for (const event of result.events) {\n if (!event) continue;\n\n state = evolve(state, event);\n }\n\n return {\n currentStreamVersion: currentStreamVersion,\n state,\n };\n },\n\n readStream: async <EventType extends Event>(\n streamName: string,\n options?: ReadStreamOptions,\n ): Promise<\n ReadStreamResult<\n EventType,\n DefaultStreamVersionType,\n ReadEventMetadataWithGlobalPosition\n >\n > => {\n await ensureSchemaExists;\n return readStream<EventType>(pool.execute, streamName, options);\n },\n\n appendToStream: async <EventType extends Event>(\n streamName: string,\n events: EventType[],\n options?: AppendToStreamOptions,\n ): Promise<AppendToStreamResult> => {\n await ensureSchemaExists;\n // TODO: This has to be smarter when we introduce urn-based resolution\n const [firstPart, ...rest] = streamName.split('-');\n\n const streamType =\n firstPart && rest.length > 0 ? firstPart : 'emt:unknown';\n\n const appendResult = await appendToStream(\n pool,\n streamName,\n streamType,\n events,\n {\n ...options,\n preCommitHook: (events, { transaction }) =>\n handleProjections({\n projections: inlineProjections,\n connection: {\n connectionString,\n transaction,\n },\n events,\n }),\n },\n );\n\n if (!appendResult.success)\n throw new ExpectedVersionConflictError<bigint>(\n -1n, //TODO: Return actual version in case of error\n options?.expectedStreamVersion ?? NO_CONCURRENCY_CHECK,\n );\n\n return { nextExpectedStreamVersion: appendResult.nextStreamPosition };\n },\n close: () => endPool({ connectionString }),\n };\n};\n\nconst matchesExpectedVersion = (\n current: bigint | undefined,\n expected: ExpectedStreamVersion,\n): boolean => {\n if (expected === NO_CONCURRENCY_CHECK) return true;\n\n if (expected == STREAM_DOES_NOT_EXIST) return current === undefined;\n\n if (expected == STREAM_EXISTS) return current !== undefined;\n\n return current === expected;\n};\n\nconst assertExpectedVersionMatchesCurrent = (\n current: bigint | undefined,\n expected: ExpectedStreamVersion | undefined,\n): void => {\n expected ??= NO_CONCURRENCY_CHECK;\n\n if (!matchesExpectedVersion(current, expected))\n throw new ExpectedVersionConflictError(current, expected);\n};\n"],"mappings":"yOAAA,OACE,SAAAA,EACA,WAAAC,MAIK,yBAmBP,MAAe,KAmFR,IAAMC,EAA0B,CACrCC,EACAC,EAAqCC,IACd,CACvB,IAAMC,EAAOC,EAAM,CACjB,iBAAAJ,EACA,GAAIC,EAAQ,kBAAoBA,EAAQ,kBAAoB,CAAC,CAC/D,CAAC,EACKI,EAAqBC,EAAuBH,CAAI,EAEhDI,EAAoBN,EAAQ,YAC/B,OAAO,CAAC,CAAE,KAAAO,CAAK,IAAMA,IAAS,QAAQ,EACtC,IAAI,CAAC,CAAE,WAAAC,CAAW,IAAMA,CAAU,EAErC,MAAO,CACL,MAAM,gBACJC,EACAT,EAC8C,CAC9C,MAAMI,EACN,GAAM,CAAE,OAAAM,EAAQ,aAAAC,EAAc,KAAAC,CAAK,EAAIZ,EAEjCa,EAAwBD,GAAM,sBAEhCE,EAAQH,EAAa,EAEnBI,EAAS,MAAM,KAAK,WAAsBN,EAAYT,EAAQ,IAAI,EAExE,GAAIe,IAAW,KAAM,OAAO,KAE5B,IAAMC,EAAuBD,EAAO,qBAEpCE,EACED,EACAH,CACF,EAEA,QAAWK,KAASH,EAAO,OACpBG,IAELJ,EAAQJ,EAAOI,EAAOI,CAAK,GAG7B,MAAO,CACL,qBAAsBF,EACtB,MAAAF,CACF,CACF,EAEA,WAAY,MACVL,EACAT,KAQA,MAAMI,EACCe,EAAsBjB,EAAK,QAASO,EAAYT,CAAO,GAGhE,eAAgB,MACdS,EACAW,EACApB,IACkC,CAClC,MAAMI,EAEN,GAAM,CAACiB,EAAW,GAAGC,CAAI,EAAIb,EAAW,MAAM,GAAG,EAE3Cc,EACJF,GAAaC,EAAK,OAAS,EAAID,EAAY,cAEvCG,EAAe,MAAMC,EACzBvB,EACAO,EACAc,EACAH,EACA,CACE,GAAGpB,EACH,cAAe,CAACoB,EAAQ,CAAE,YAAAM,CAAY,IACpCC,EAAkB,CAChB,YAAarB,EACb,WAAY,CACV,iBAAAP,EACA,YAAA2B,CACF,EACA,OAAAN,CACF,CAAC,CACL,CACF,EAEA,GAAI,CAACI,EAAa,QAChB,MAAM,IAAII,EACR,CAAC,GACD5B,GAAS,uBAAyB6B,CACpC,EAEF,MAAO,CAAE,0BAA2BL,EAAa,kBAAmB,CACtE,EACA,MAAO,IAAMM,EAAQ,CAAE,iBAAA/B,CAAiB,CAAC,CAC3C,CACF,EAEMgC,EAAyB,CAC7BC,EACAC,IAEIA,IAAaJ,EAA6B,GAE1CI,GAAYC,EAA8BF,IAAY,OAEtDC,GAAYE,EAAsBH,IAAY,OAE3CA,IAAYC,EAGfhB,EAAsC,CAC1Ce,EACAC,IACS,CAGT,GAFAA,IAAaJ,EAET,CAACE,EAAuBC,EAASC,CAAQ,EAC3C,MAAM,IAAIL,EAA6BI,EAASC,CAAQ,CAC5D","names":["dumbo","endPool","getPostgreSQLEventStore","connectionString","options","defaultPostgreSQLProjectionOptions","pool","dumbo","ensureSchemaExists","createEventStoreSchema","inlineProjections","type","projection","streamName","evolve","initialState","read","expectedStreamVersion","state","result","currentStreamVersion","assertExpectedVersionMatchesCurrent","event","readStream","events","firstPart","rest","streamType","appendResult","appendToStream","transaction","handleProjections","t","n","endPool","matchesExpectedVersion","current","expected","a","s"]}
@@ -1,4 +1,4 @@
1
- export { k as PongoAssertOptions, t as PongoDocumentEvolve, w as PongoMultiStreamProjectionOptions, s as PongoProjectionHandlerContext, u as PongoProjectionOptions, y as PongoSingleStreamProjectionOptions, F as PostgreSQLProjectionAssert, e as PostgreSQLProjectionDefinition, d as PostgreSQLProjectionHandler, c as PostgreSQLProjectionHandlerContext, E as PostgreSQLProjectionSpec, A as PostgreSQLProjectionSpecEvent, G as PostgreSQLProjectionSpecOptions, P as PostgresEventStore, a as PostgresEventStoreConnectionOptions, b as PostgresEventStoreOptions, H as assertSQLQueryResultMatches, f as defaultPostgreSQLProjectionOptions, q as documentDoesNotExist, l as documentExists, o as documentMatchingExists, m as documentsAreTheSame, n as documentsMatchingHaveCount, B as eventInStream, C as eventsInStream, r as expectPongoDocuments, I as expectSQL, g as getPostgreSQLEventStore, h as handleProjections, D as newEventsInStream, x as pongoMultiStreamProjection, v as pongoProjection, z as pongoSingleStreamProjection, p as postgreSQLProjection, i as postgreSQLRawBatchSQLProjection, j as postgreSQLRawSQLProjection } from '../postgreSQLEventStore-loGROgA0.mjs';
1
+ export { l as PongoAssertOptions, w as PongoDocumentEvolve, z as PongoMultiStreamProjectionOptions, t as PongoProjectionHandlerContext, x as PongoProjectionOptions, B as PongoSingleStreamProjectionOptions, u as PongoWithNotNullDocumentEvolve, v as PongoWithNullableDocumentEvolve, G as PostgreSQLProjectionAssert, e as PostgreSQLProjectionDefinition, d as PostgreSQLProjectionHandler, c as PostgreSQLProjectionHandlerContext, F as PostgreSQLProjectionSpec, D as PostgreSQLProjectionSpecEvent, H as PostgreSQLProjectionSpecOptions, E as PostgreSQLProjectionSpecWhenOptions, P as PostgresEventStore, a as PostgresEventStoreConnectionOptions, b as PostgresEventStoreOptions, h as ProjectionHandlerOptions, L as assertSQLQueryResultMatches, f as defaultPostgreSQLProjectionOptions, r as documentDoesNotExist, m as documentExists, q as documentMatchingExists, n as documentsAreTheSame, o as documentsMatchingHaveCount, I as eventInStream, J as eventsInStream, s as expectPongoDocuments, M as expectSQL, g as getPostgreSQLEventStore, i as handleProjections, K as newEventsInStream, A as pongoMultiStreamProjection, y as pongoProjection, C as pongoSingleStreamProjection, p as postgreSQLProjection, j as postgreSQLRawBatchSQLProjection, k as postgreSQLRawSQLProjection } from '../postgreSQLEventStore-BDzOzx7q.mjs';
2
2
  export { createEventStoreSchema, schemaSQL } from './schema/index.mjs';
3
3
  export { appendEventsSQL, appendToStream } from './schema/appendToStream.mjs';
4
4
  export { readStream } from './schema/readStream.mjs';
@@ -1,4 +1,4 @@
1
- export { k as PongoAssertOptions, t as PongoDocumentEvolve, w as PongoMultiStreamProjectionOptions, s as PongoProjectionHandlerContext, u as PongoProjectionOptions, y as PongoSingleStreamProjectionOptions, F as PostgreSQLProjectionAssert, e as PostgreSQLProjectionDefinition, d as PostgreSQLProjectionHandler, c as PostgreSQLProjectionHandlerContext, E as PostgreSQLProjectionSpec, A as PostgreSQLProjectionSpecEvent, G as PostgreSQLProjectionSpecOptions, P as PostgresEventStore, a as PostgresEventStoreConnectionOptions, b as PostgresEventStoreOptions, H as assertSQLQueryResultMatches, f as defaultPostgreSQLProjectionOptions, q as documentDoesNotExist, l as documentExists, o as documentMatchingExists, m as documentsAreTheSame, n as documentsMatchingHaveCount, B as eventInStream, C as eventsInStream, r as expectPongoDocuments, I as expectSQL, g as getPostgreSQLEventStore, h as handleProjections, D as newEventsInStream, x as pongoMultiStreamProjection, v as pongoProjection, z as pongoSingleStreamProjection, p as postgreSQLProjection, i as postgreSQLRawBatchSQLProjection, j as postgreSQLRawSQLProjection } from '../postgreSQLEventStore-loGROgA0.js';
1
+ export { l as PongoAssertOptions, w as PongoDocumentEvolve, z as PongoMultiStreamProjectionOptions, t as PongoProjectionHandlerContext, x as PongoProjectionOptions, B as PongoSingleStreamProjectionOptions, u as PongoWithNotNullDocumentEvolve, v as PongoWithNullableDocumentEvolve, G as PostgreSQLProjectionAssert, e as PostgreSQLProjectionDefinition, d as PostgreSQLProjectionHandler, c as PostgreSQLProjectionHandlerContext, F as PostgreSQLProjectionSpec, D as PostgreSQLProjectionSpecEvent, H as PostgreSQLProjectionSpecOptions, E as PostgreSQLProjectionSpecWhenOptions, P as PostgresEventStore, a as PostgresEventStoreConnectionOptions, b as PostgresEventStoreOptions, h as ProjectionHandlerOptions, L as assertSQLQueryResultMatches, f as defaultPostgreSQLProjectionOptions, r as documentDoesNotExist, m as documentExists, q as documentMatchingExists, n as documentsAreTheSame, o as documentsMatchingHaveCount, I as eventInStream, J as eventsInStream, s as expectPongoDocuments, M as expectSQL, g as getPostgreSQLEventStore, i as handleProjections, K as newEventsInStream, A as pongoMultiStreamProjection, y as pongoProjection, C as pongoSingleStreamProjection, p as postgreSQLProjection, j as postgreSQLRawBatchSQLProjection, k as postgreSQLRawSQLProjection } from '../postgreSQLEventStore-BDzOzx7q.js';
2
2
  export { createEventStoreSchema, schemaSQL } from './schema/index.js';
3
3
  export { appendEventsSQL, appendToStream } from './schema/appendToStream.js';
4
4
  export { readStream } from './schema/readStream.js';
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('../chunk-2452BJTJ.js');var _chunkKZTZL7GVjs = require('../chunk-KZTZL7GV.js');var _chunkJQ2VF3NGjs = require('../chunk-JQ2VF3NG.js');var _chunkWQQC2IS2js = require('../chunk-WQQC2IS2.js');var _chunkEEYVFO3Gjs = require('../chunk-EEYVFO3G.js');var _chunkDUXB3PBPjs = require('../chunk-DUXB3PBP.js');var _chunkNBTN5MZ6js = require('../chunk-NBTN5MZ6.js');var _chunkSS2LQM3Bjs = require('../chunk-SS2LQM3B.js');require('../chunk-6FBMFEVK.js');exports.PostgreSQLProjectionSpec = _chunkJQ2VF3NGjs.m; exports.addDefaultPartition = _chunkEEYVFO3Gjs.k; exports.addEventsPartitions = _chunkEEYVFO3Gjs.f; exports.addModuleForAllTenantsSQL = _chunkEEYVFO3Gjs.i; exports.addModuleSQL = _chunkEEYVFO3Gjs.g; exports.addTablePartitions = _chunkEEYVFO3Gjs.e; exports.addTenantForAllModulesSQL = _chunkEEYVFO3Gjs.j; exports.addTenantSQL = _chunkEEYVFO3Gjs.h; exports.appendEventsSQL = _chunkDUXB3PBPjs.a; exports.appendToStream = _chunkDUXB3PBPjs.b; exports.assertSQLQueryResultMatches = _chunkJQ2VF3NGjs.n; exports.createEventStoreSchema = _chunkWQQC2IS2js.b; exports.defaultPostgreSQLProjectionOptions = _chunkJQ2VF3NGjs.p; exports.defaultTag = _chunkSS2LQM3Bjs.c; exports.documentDoesNotExist = _chunkJQ2VF3NGjs.e; exports.documentExists = _chunkJQ2VF3NGjs.a; exports.documentMatchingExists = _chunkJQ2VF3NGjs.d; exports.documentsAreTheSame = _chunkJQ2VF3NGjs.b; exports.documentsMatchingHaveCount = _chunkJQ2VF3NGjs.c; exports.emmettPrefix = _chunkSS2LQM3Bjs.a; exports.eventInStream = _chunkJQ2VF3NGjs.j; exports.eventsInStream = _chunkJQ2VF3NGjs.k; exports.eventsTable = _chunkSS2LQM3Bjs.f; exports.eventsTableSQL = _chunkEEYVFO3Gjs.b; exports.expectPongoDocuments = _chunkJQ2VF3NGjs.f; exports.expectSQL = _chunkJQ2VF3NGjs.o; exports.getPostgreSQLEventStore = _chunkKZTZL7GVjs.a; exports.globalNames = _chunkSS2LQM3Bjs.d; exports.globalTag = _chunkSS2LQM3Bjs.b; exports.handleProjections = _chunkJQ2VF3NGjs.q; exports.newEventsInStream = _chunkJQ2VF3NGjs.l; exports.pongoMultiStreamProjection = _chunkJQ2VF3NGjs.h; exports.pongoProjection = _chunkJQ2VF3NGjs.g; exports.pongoSingleStreamProjection = _chunkJQ2VF3NGjs.i; exports.postgreSQLProjection = _chunkJQ2VF3NGjs.r; exports.postgreSQLRawBatchSQLProjection = _chunkJQ2VF3NGjs.s; exports.postgreSQLRawSQLProjection = _chunkJQ2VF3NGjs.t; exports.readStream = _chunkNBTN5MZ6js.a; exports.sanitizeNameSQL = _chunkEEYVFO3Gjs.d; exports.schemaSQL = _chunkWQQC2IS2js.a; exports.streamsTable = _chunkSS2LQM3Bjs.e; exports.streamsTableSQL = _chunkEEYVFO3Gjs.a; exports.subscriptionsTableSQL = _chunkEEYVFO3Gjs.c;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('../chunk-2452BJTJ.js');var _chunkWDTQXX5Ujs = require('../chunk-WDTQXX5U.js');var _chunkUMWNWQRRjs = require('../chunk-UMWNWQRR.js');var _chunkHFIQYR5Ejs = require('../chunk-HFIQYR5E.js');var _chunkEEYVFO3Gjs = require('../chunk-EEYVFO3G.js');var _chunkR5KGCWKQjs = require('../chunk-R5KGCWKQ.js');var _chunk5NYGSL2Bjs = require('../chunk-5NYGSL2B.js');var _chunkSS2LQM3Bjs = require('../chunk-SS2LQM3B.js');require('../chunk-QB7BC56W.js');exports.PostgreSQLProjectionSpec = _chunkUMWNWQRRjs.j; exports.addDefaultPartition = _chunkEEYVFO3Gjs.k; exports.addEventsPartitions = _chunkEEYVFO3Gjs.f; exports.addModuleForAllTenantsSQL = _chunkEEYVFO3Gjs.i; exports.addModuleSQL = _chunkEEYVFO3Gjs.g; exports.addTablePartitions = _chunkEEYVFO3Gjs.e; exports.addTenantForAllModulesSQL = _chunkEEYVFO3Gjs.j; exports.addTenantSQL = _chunkEEYVFO3Gjs.h; exports.appendEventsSQL = _chunkR5KGCWKQjs.a; exports.appendToStream = _chunkR5KGCWKQjs.b; exports.assertSQLQueryResultMatches = _chunkUMWNWQRRjs.n; exports.createEventStoreSchema = _chunkHFIQYR5Ejs.b; exports.defaultPostgreSQLProjectionOptions = _chunkUMWNWQRRjs.p; exports.defaultTag = _chunkSS2LQM3Bjs.c; exports.documentDoesNotExist = _chunkUMWNWQRRjs.e; exports.documentExists = _chunkUMWNWQRRjs.a; exports.documentMatchingExists = _chunkUMWNWQRRjs.d; exports.documentsAreTheSame = _chunkUMWNWQRRjs.b; exports.documentsMatchingHaveCount = _chunkUMWNWQRRjs.c; exports.emmettPrefix = _chunkSS2LQM3Bjs.a; exports.eventInStream = _chunkUMWNWQRRjs.k; exports.eventsInStream = _chunkUMWNWQRRjs.l; exports.eventsTable = _chunkSS2LQM3Bjs.f; exports.eventsTableSQL = _chunkEEYVFO3Gjs.b; exports.expectPongoDocuments = _chunkUMWNWQRRjs.f; exports.expectSQL = _chunkUMWNWQRRjs.o; exports.getPostgreSQLEventStore = _chunkWDTQXX5Ujs.a; exports.globalNames = _chunkSS2LQM3Bjs.d; exports.globalTag = _chunkSS2LQM3Bjs.b; exports.handleProjections = _chunkUMWNWQRRjs.q; exports.newEventsInStream = _chunkUMWNWQRRjs.m; exports.pongoMultiStreamProjection = _chunkUMWNWQRRjs.h; exports.pongoProjection = _chunkUMWNWQRRjs.g; exports.pongoSingleStreamProjection = _chunkUMWNWQRRjs.i; exports.postgreSQLProjection = _chunkUMWNWQRRjs.r; exports.postgreSQLRawBatchSQLProjection = _chunkUMWNWQRRjs.s; exports.postgreSQLRawSQLProjection = _chunkUMWNWQRRjs.t; exports.readStream = _chunk5NYGSL2Bjs.a; exports.sanitizeNameSQL = _chunkEEYVFO3Gjs.d; exports.schemaSQL = _chunkHFIQYR5Ejs.a; exports.streamsTable = _chunkSS2LQM3Bjs.e; exports.streamsTableSQL = _chunkEEYVFO3Gjs.a; exports.subscriptionsTableSQL = _chunkEEYVFO3Gjs.c;
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- import"../chunk-45ODDXOQ.mjs";import{a as Q}from"../chunk-J3JL23C4.mjs";import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t}from"../chunk-QNOJWKPZ.mjs";import{a as O,b as P}from"../chunk-HS4KMVAP.mjs";import{a as C,b as D,c as E,d as F,e as G,f as H,g as I,h as J,i as K,j as L,k as M}from"../chunk-UWD6GOZC.mjs";import{a as A,b as B}from"../chunk-ST3FNDJ5.mjs";import{a as N}from"../chunk-PCRD6RK2.mjs";import{a as u,b as v,c as w,d as x,e as y,f as z}from"../chunk-ABNBEUC6.mjs";import"../chunk-HIX4PKIP.mjs";export{m as PostgreSQLProjectionSpec,M as addDefaultPartition,H as addEventsPartitions,K as addModuleForAllTenantsSQL,I as addModuleSQL,G as addTablePartitions,L as addTenantForAllModulesSQL,J as addTenantSQL,A as appendEventsSQL,B as appendToStream,n as assertSQLQueryResultMatches,P as createEventStoreSchema,p as defaultPostgreSQLProjectionOptions,w as defaultTag,e as documentDoesNotExist,a as documentExists,d as documentMatchingExists,b as documentsAreTheSame,c as documentsMatchingHaveCount,u as emmettPrefix,j as eventInStream,k as eventsInStream,z as eventsTable,D as eventsTableSQL,f as expectPongoDocuments,o as expectSQL,Q as getPostgreSQLEventStore,x as globalNames,v as globalTag,q as handleProjections,l as newEventsInStream,h as pongoMultiStreamProjection,g as pongoProjection,i as pongoSingleStreamProjection,r as postgreSQLProjection,s as postgreSQLRawBatchSQLProjection,t as postgreSQLRawSQLProjection,N as readStream,F as sanitizeNameSQL,O as schemaSQL,y as streamsTable,C as streamsTableSQL,E as subscriptionsTableSQL};
1
+ import"../chunk-45ODDXOQ.mjs";import{a as Q}from"../chunk-XQJRZ4PO.mjs";import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t}from"../chunk-JPTXK5ZT.mjs";import{a as O,b as P}from"../chunk-NZWWNOXH.mjs";import{a as C,b as D,c as E,d as F,e as G,f as H,g as I,h as J,i as K,j as L,k as M}from"../chunk-UWD6GOZC.mjs";import{a as A,b as B}from"../chunk-SIRCKLWA.mjs";import{a as N}from"../chunk-6Z7FIKB6.mjs";import{a as u,b as v,c as w,d as x,e as y,f as z}from"../chunk-ABNBEUC6.mjs";import"../chunk-PT4NEEE4.mjs";export{j as PostgreSQLProjectionSpec,M as addDefaultPartition,H as addEventsPartitions,K as addModuleForAllTenantsSQL,I as addModuleSQL,G as addTablePartitions,L as addTenantForAllModulesSQL,J as addTenantSQL,A as appendEventsSQL,B as appendToStream,n as assertSQLQueryResultMatches,P as createEventStoreSchema,p as defaultPostgreSQLProjectionOptions,w as defaultTag,e as documentDoesNotExist,a as documentExists,d as documentMatchingExists,b as documentsAreTheSame,c as documentsMatchingHaveCount,u as emmettPrefix,k as eventInStream,l as eventsInStream,z as eventsTable,D as eventsTableSQL,f as expectPongoDocuments,o as expectSQL,Q as getPostgreSQLEventStore,x as globalNames,v as globalTag,q as handleProjections,m as newEventsInStream,h as pongoMultiStreamProjection,g as pongoProjection,i as pongoSingleStreamProjection,r as postgreSQLProjection,s as postgreSQLRawBatchSQLProjection,t as postgreSQLRawSQLProjection,N as readStream,F as sanitizeNameSQL,O as schemaSQL,y as streamsTable,C as streamsTableSQL,E as subscriptionsTableSQL};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1,5 +1,5 @@
1
1
  import '@event-driven-io/dumbo';
2
2
  import '@event-driven-io/emmett';
3
3
  import 'pg';
4
- export { P as PostgresEventStore, a as PostgresEventStoreConnectionOptions, b as PostgresEventStoreOptions, g as getPostgreSQLEventStore } from '../postgreSQLEventStore-loGROgA0.mjs';
4
+ export { P as PostgresEventStore, a as PostgresEventStoreConnectionOptions, b as PostgresEventStoreOptions, g as getPostgreSQLEventStore } from '../postgreSQLEventStore-BDzOzx7q.mjs';
5
5
  import '@event-driven-io/pongo';
@@ -1,5 +1,5 @@
1
1
  import '@event-driven-io/dumbo';
2
2
  import '@event-driven-io/emmett';
3
3
  import 'pg';
4
- export { P as PostgresEventStore, a as PostgresEventStoreConnectionOptions, b as PostgresEventStoreOptions, g as getPostgreSQLEventStore } from '../postgreSQLEventStore-loGROgA0.js';
4
+ export { P as PostgresEventStore, a as PostgresEventStoreConnectionOptions, b as PostgresEventStoreOptions, g as getPostgreSQLEventStore } from '../postgreSQLEventStore-BDzOzx7q.js';
5
5
  import '@event-driven-io/pongo';
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkKZTZL7GVjs = require('../chunk-KZTZL7GV.js');require('../chunk-JQ2VF3NG.js');require('../chunk-WQQC2IS2.js');require('../chunk-EEYVFO3G.js');require('../chunk-DUXB3PBP.js');require('../chunk-NBTN5MZ6.js');require('../chunk-SS2LQM3B.js');require('../chunk-6FBMFEVK.js');exports.getPostgreSQLEventStore = _chunkKZTZL7GVjs.a;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkWDTQXX5Ujs = require('../chunk-WDTQXX5U.js');require('../chunk-UMWNWQRR.js');require('../chunk-HFIQYR5E.js');require('../chunk-EEYVFO3G.js');require('../chunk-R5KGCWKQ.js');require('../chunk-5NYGSL2B.js');require('../chunk-SS2LQM3B.js');require('../chunk-QB7BC56W.js');exports.getPostgreSQLEventStore = _chunkWDTQXX5Ujs.a;
2
2
  //# sourceMappingURL=postgreSQLEventStore.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-J3JL23C4.mjs";import"../chunk-QNOJWKPZ.mjs";import"../chunk-HS4KMVAP.mjs";import"../chunk-UWD6GOZC.mjs";import"../chunk-ST3FNDJ5.mjs";import"../chunk-PCRD6RK2.mjs";import"../chunk-ABNBEUC6.mjs";import"../chunk-HIX4PKIP.mjs";export{a as getPostgreSQLEventStore};
1
+ import{a}from"../chunk-XQJRZ4PO.mjs";import"../chunk-JPTXK5ZT.mjs";import"../chunk-NZWWNOXH.mjs";import"../chunk-UWD6GOZC.mjs";import"../chunk-SIRCKLWA.mjs";import"../chunk-6Z7FIKB6.mjs";import"../chunk-ABNBEUC6.mjs";import"../chunk-PT4NEEE4.mjs";export{a as getPostgreSQLEventStore};
2
2
  //# sourceMappingURL=postgreSQLEventStore.mjs.map
@@ -1,5 +1,5 @@
1
1
  import '@event-driven-io/dumbo';
2
2
  import '@event-driven-io/emmett';
3
- export { k as PongoAssertOptions, t as PongoDocumentEvolve, w as PongoMultiStreamProjectionOptions, s as PongoProjectionHandlerContext, u as PongoProjectionOptions, y as PongoSingleStreamProjectionOptions, F as PostgreSQLProjectionAssert, e as PostgreSQLProjectionDefinition, d as PostgreSQLProjectionHandler, c as PostgreSQLProjectionHandlerContext, E as PostgreSQLProjectionSpec, A as PostgreSQLProjectionSpecEvent, G as PostgreSQLProjectionSpecOptions, H as assertSQLQueryResultMatches, f as defaultPostgreSQLProjectionOptions, q as documentDoesNotExist, l as documentExists, o as documentMatchingExists, m as documentsAreTheSame, n as documentsMatchingHaveCount, B as eventInStream, C as eventsInStream, r as expectPongoDocuments, I as expectSQL, h as handleProjections, D as newEventsInStream, x as pongoMultiStreamProjection, v as pongoProjection, z as pongoSingleStreamProjection, p as postgreSQLProjection, i as postgreSQLRawBatchSQLProjection, j as postgreSQLRawSQLProjection } from '../../postgreSQLEventStore-loGROgA0.mjs';
3
+ export { l as PongoAssertOptions, w as PongoDocumentEvolve, z as PongoMultiStreamProjectionOptions, t as PongoProjectionHandlerContext, x as PongoProjectionOptions, B as PongoSingleStreamProjectionOptions, u as PongoWithNotNullDocumentEvolve, v as PongoWithNullableDocumentEvolve, G as PostgreSQLProjectionAssert, e as PostgreSQLProjectionDefinition, d as PostgreSQLProjectionHandler, c as PostgreSQLProjectionHandlerContext, F as PostgreSQLProjectionSpec, D as PostgreSQLProjectionSpecEvent, H as PostgreSQLProjectionSpecOptions, E as PostgreSQLProjectionSpecWhenOptions, h as ProjectionHandlerOptions, L as assertSQLQueryResultMatches, f as defaultPostgreSQLProjectionOptions, r as documentDoesNotExist, m as documentExists, q as documentMatchingExists, n as documentsAreTheSame, o as documentsMatchingHaveCount, I as eventInStream, J as eventsInStream, s as expectPongoDocuments, M as expectSQL, i as handleProjections, K as newEventsInStream, A as pongoMultiStreamProjection, y as pongoProjection, C as pongoSingleStreamProjection, p as postgreSQLProjection, j as postgreSQLRawBatchSQLProjection, k as postgreSQLRawSQLProjection } from '../../postgreSQLEventStore-BDzOzx7q.mjs';
4
4
  import 'pg';
5
5
  import '@event-driven-io/pongo';
@@ -1,5 +1,5 @@
1
1
  import '@event-driven-io/dumbo';
2
2
  import '@event-driven-io/emmett';
3
- export { k as PongoAssertOptions, t as PongoDocumentEvolve, w as PongoMultiStreamProjectionOptions, s as PongoProjectionHandlerContext, u as PongoProjectionOptions, y as PongoSingleStreamProjectionOptions, F as PostgreSQLProjectionAssert, e as PostgreSQLProjectionDefinition, d as PostgreSQLProjectionHandler, c as PostgreSQLProjectionHandlerContext, E as PostgreSQLProjectionSpec, A as PostgreSQLProjectionSpecEvent, G as PostgreSQLProjectionSpecOptions, H as assertSQLQueryResultMatches, f as defaultPostgreSQLProjectionOptions, q as documentDoesNotExist, l as documentExists, o as documentMatchingExists, m as documentsAreTheSame, n as documentsMatchingHaveCount, B as eventInStream, C as eventsInStream, r as expectPongoDocuments, I as expectSQL, h as handleProjections, D as newEventsInStream, x as pongoMultiStreamProjection, v as pongoProjection, z as pongoSingleStreamProjection, p as postgreSQLProjection, i as postgreSQLRawBatchSQLProjection, j as postgreSQLRawSQLProjection } from '../../postgreSQLEventStore-loGROgA0.js';
3
+ export { l as PongoAssertOptions, w as PongoDocumentEvolve, z as PongoMultiStreamProjectionOptions, t as PongoProjectionHandlerContext, x as PongoProjectionOptions, B as PongoSingleStreamProjectionOptions, u as PongoWithNotNullDocumentEvolve, v as PongoWithNullableDocumentEvolve, G as PostgreSQLProjectionAssert, e as PostgreSQLProjectionDefinition, d as PostgreSQLProjectionHandler, c as PostgreSQLProjectionHandlerContext, F as PostgreSQLProjectionSpec, D as PostgreSQLProjectionSpecEvent, H as PostgreSQLProjectionSpecOptions, E as PostgreSQLProjectionSpecWhenOptions, h as ProjectionHandlerOptions, L as assertSQLQueryResultMatches, f as defaultPostgreSQLProjectionOptions, r as documentDoesNotExist, m as documentExists, q as documentMatchingExists, n as documentsAreTheSame, o as documentsMatchingHaveCount, I as eventInStream, J as eventsInStream, s as expectPongoDocuments, M as expectSQL, i as handleProjections, K as newEventsInStream, A as pongoMultiStreamProjection, y as pongoProjection, C as pongoSingleStreamProjection, p as postgreSQLProjection, j as postgreSQLRawBatchSQLProjection, k as postgreSQLRawSQLProjection } from '../../postgreSQLEventStore-BDzOzx7q.js';
4
4
  import 'pg';
5
5
  import '@event-driven-io/pongo';
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkJQ2VF3NGjs = require('../../chunk-JQ2VF3NG.js');require('../../chunk-6FBMFEVK.js');exports.PostgreSQLProjectionSpec = _chunkJQ2VF3NGjs.m; exports.assertSQLQueryResultMatches = _chunkJQ2VF3NGjs.n; exports.defaultPostgreSQLProjectionOptions = _chunkJQ2VF3NGjs.p; exports.documentDoesNotExist = _chunkJQ2VF3NGjs.e; exports.documentExists = _chunkJQ2VF3NGjs.a; exports.documentMatchingExists = _chunkJQ2VF3NGjs.d; exports.documentsAreTheSame = _chunkJQ2VF3NGjs.b; exports.documentsMatchingHaveCount = _chunkJQ2VF3NGjs.c; exports.eventInStream = _chunkJQ2VF3NGjs.j; exports.eventsInStream = _chunkJQ2VF3NGjs.k; exports.expectPongoDocuments = _chunkJQ2VF3NGjs.f; exports.expectSQL = _chunkJQ2VF3NGjs.o; exports.handleProjections = _chunkJQ2VF3NGjs.q; exports.newEventsInStream = _chunkJQ2VF3NGjs.l; exports.pongoMultiStreamProjection = _chunkJQ2VF3NGjs.h; exports.pongoProjection = _chunkJQ2VF3NGjs.g; exports.pongoSingleStreamProjection = _chunkJQ2VF3NGjs.i; exports.postgreSQLProjection = _chunkJQ2VF3NGjs.r; exports.postgreSQLRawBatchSQLProjection = _chunkJQ2VF3NGjs.s; exports.postgreSQLRawSQLProjection = _chunkJQ2VF3NGjs.t;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkUMWNWQRRjs = require('../../chunk-UMWNWQRR.js');require('../../chunk-QB7BC56W.js');exports.PostgreSQLProjectionSpec = _chunkUMWNWQRRjs.j; exports.assertSQLQueryResultMatches = _chunkUMWNWQRRjs.n; exports.defaultPostgreSQLProjectionOptions = _chunkUMWNWQRRjs.p; exports.documentDoesNotExist = _chunkUMWNWQRRjs.e; exports.documentExists = _chunkUMWNWQRRjs.a; exports.documentMatchingExists = _chunkUMWNWQRRjs.d; exports.documentsAreTheSame = _chunkUMWNWQRRjs.b; exports.documentsMatchingHaveCount = _chunkUMWNWQRRjs.c; exports.eventInStream = _chunkUMWNWQRRjs.k; exports.eventsInStream = _chunkUMWNWQRRjs.l; exports.expectPongoDocuments = _chunkUMWNWQRRjs.f; exports.expectSQL = _chunkUMWNWQRRjs.o; exports.handleProjections = _chunkUMWNWQRRjs.q; exports.newEventsInStream = _chunkUMWNWQRRjs.m; exports.pongoMultiStreamProjection = _chunkUMWNWQRRjs.h; exports.pongoProjection = _chunkUMWNWQRRjs.g; exports.pongoSingleStreamProjection = _chunkUMWNWQRRjs.i; exports.postgreSQLProjection = _chunkUMWNWQRRjs.r; exports.postgreSQLRawBatchSQLProjection = _chunkUMWNWQRRjs.s; exports.postgreSQLRawSQLProjection = _chunkUMWNWQRRjs.t;
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t}from"../../chunk-QNOJWKPZ.mjs";import"../../chunk-HIX4PKIP.mjs";export{m as PostgreSQLProjectionSpec,n as assertSQLQueryResultMatches,p as defaultPostgreSQLProjectionOptions,e as documentDoesNotExist,a as documentExists,d as documentMatchingExists,b as documentsAreTheSame,c as documentsMatchingHaveCount,j as eventInStream,k as eventsInStream,f as expectPongoDocuments,o as expectSQL,q as handleProjections,l as newEventsInStream,h as pongoMultiStreamProjection,g as pongoProjection,i as pongoSingleStreamProjection,r as postgreSQLProjection,s as postgreSQLRawBatchSQLProjection,t as postgreSQLRawSQLProjection};
1
+ import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t}from"../../chunk-JPTXK5ZT.mjs";import"../../chunk-PT4NEEE4.mjs";export{j as PostgreSQLProjectionSpec,n as assertSQLQueryResultMatches,p as defaultPostgreSQLProjectionOptions,e as documentDoesNotExist,a as documentExists,d as documentMatchingExists,b as documentsAreTheSame,c as documentsMatchingHaveCount,k as eventInStream,l as eventsInStream,f as expectPongoDocuments,o as expectSQL,q as handleProjections,m as newEventsInStream,h as pongoMultiStreamProjection,g as pongoProjection,i as pongoSingleStreamProjection,r as postgreSQLProjection,s as postgreSQLRawBatchSQLProjection,t as postgreSQLRawSQLProjection};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1,4 +1,4 @@
1
- export { k as PongoAssertOptions, t as PongoDocumentEvolve, w as PongoMultiStreamProjectionOptions, s as PongoProjectionHandlerContext, u as PongoProjectionOptions, y as PongoSingleStreamProjectionOptions, q as documentDoesNotExist, l as documentExists, o as documentMatchingExists, m as documentsAreTheSame, n as documentsMatchingHaveCount, r as expectPongoDocuments, x as pongoMultiStreamProjection, v as pongoProjection, z as pongoSingleStreamProjection } from '../../../postgreSQLEventStore-loGROgA0.mjs';
1
+ export { l as PongoAssertOptions, w as PongoDocumentEvolve, z as PongoMultiStreamProjectionOptions, t as PongoProjectionHandlerContext, x as PongoProjectionOptions, B as PongoSingleStreamProjectionOptions, u as PongoWithNotNullDocumentEvolve, v as PongoWithNullableDocumentEvolve, r as documentDoesNotExist, m as documentExists, q as documentMatchingExists, n as documentsAreTheSame, o as documentsMatchingHaveCount, s as expectPongoDocuments, A as pongoMultiStreamProjection, y as pongoProjection, C as pongoSingleStreamProjection } from '../../../postgreSQLEventStore-BDzOzx7q.mjs';
2
2
  import '@event-driven-io/dumbo';
3
3
  import '@event-driven-io/emmett';
4
4
  import 'pg';
@@ -1,4 +1,4 @@
1
- export { k as PongoAssertOptions, t as PongoDocumentEvolve, w as PongoMultiStreamProjectionOptions, s as PongoProjectionHandlerContext, u as PongoProjectionOptions, y as PongoSingleStreamProjectionOptions, q as documentDoesNotExist, l as documentExists, o as documentMatchingExists, m as documentsAreTheSame, n as documentsMatchingHaveCount, r as expectPongoDocuments, x as pongoMultiStreamProjection, v as pongoProjection, z as pongoSingleStreamProjection } from '../../../postgreSQLEventStore-loGROgA0.js';
1
+ export { l as PongoAssertOptions, w as PongoDocumentEvolve, z as PongoMultiStreamProjectionOptions, t as PongoProjectionHandlerContext, x as PongoProjectionOptions, B as PongoSingleStreamProjectionOptions, u as PongoWithNotNullDocumentEvolve, v as PongoWithNullableDocumentEvolve, r as documentDoesNotExist, m as documentExists, q as documentMatchingExists, n as documentsAreTheSame, o as documentsMatchingHaveCount, s as expectPongoDocuments, A as pongoMultiStreamProjection, y as pongoProjection, C as pongoSingleStreamProjection } from '../../../postgreSQLEventStore-BDzOzx7q.js';
2
2
  import '@event-driven-io/dumbo';
3
3
  import '@event-driven-io/emmett';
4
4
  import 'pg';
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkJQ2VF3NGjs = require('../../../chunk-JQ2VF3NG.js');require('../../../chunk-6FBMFEVK.js');exports.documentDoesNotExist = _chunkJQ2VF3NGjs.e; exports.documentExists = _chunkJQ2VF3NGjs.a; exports.documentMatchingExists = _chunkJQ2VF3NGjs.d; exports.documentsAreTheSame = _chunkJQ2VF3NGjs.b; exports.documentsMatchingHaveCount = _chunkJQ2VF3NGjs.c; exports.expectPongoDocuments = _chunkJQ2VF3NGjs.f; exports.pongoMultiStreamProjection = _chunkJQ2VF3NGjs.h; exports.pongoProjection = _chunkJQ2VF3NGjs.g; exports.pongoSingleStreamProjection = _chunkJQ2VF3NGjs.i;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkUMWNWQRRjs = require('../../../chunk-UMWNWQRR.js');require('../../../chunk-QB7BC56W.js');exports.documentDoesNotExist = _chunkUMWNWQRRjs.e; exports.documentExists = _chunkUMWNWQRRjs.a; exports.documentMatchingExists = _chunkUMWNWQRRjs.d; exports.documentsAreTheSame = _chunkUMWNWQRRjs.b; exports.documentsMatchingHaveCount = _chunkUMWNWQRRjs.c; exports.expectPongoDocuments = _chunkUMWNWQRRjs.f; exports.pongoMultiStreamProjection = _chunkUMWNWQRRjs.h; exports.pongoProjection = _chunkUMWNWQRRjs.g; exports.pongoSingleStreamProjection = _chunkUMWNWQRRjs.i;
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- import{a,b,c,d,e,f,g,h,i}from"../../../chunk-QNOJWKPZ.mjs";import"../../../chunk-HIX4PKIP.mjs";export{e as documentDoesNotExist,a as documentExists,d as documentMatchingExists,b as documentsAreTheSame,c as documentsMatchingHaveCount,f as expectPongoDocuments,h as pongoMultiStreamProjection,g as pongoProjection,i as pongoSingleStreamProjection};
1
+ import{a,b,c,d,e,f,g,h,i}from"../../../chunk-JPTXK5ZT.mjs";import"../../../chunk-PT4NEEE4.mjs";export{e as documentDoesNotExist,a as documentExists,d as documentMatchingExists,b as documentsAreTheSame,c as documentsMatchingHaveCount,f as expectPongoDocuments,h as pongoMultiStreamProjection,g as pongoProjection,i as pongoSingleStreamProjection};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1,5 +1,5 @@
1
1
  import '@event-driven-io/pongo';
2
- export { k as PongoAssertOptions, q as documentDoesNotExist, l as documentExists, o as documentMatchingExists, m as documentsAreTheSame, n as documentsMatchingHaveCount, r as expectPongoDocuments } from '../../../postgreSQLEventStore-loGROgA0.mjs';
2
+ export { l as PongoAssertOptions, r as documentDoesNotExist, m as documentExists, q as documentMatchingExists, n as documentsAreTheSame, o as documentsMatchingHaveCount, s as expectPongoDocuments } from '../../../postgreSQLEventStore-BDzOzx7q.mjs';
3
3
  import '@event-driven-io/dumbo';
4
4
  import '@event-driven-io/emmett';
5
5
  import 'pg';
@@ -1,5 +1,5 @@
1
1
  import '@event-driven-io/pongo';
2
- export { k as PongoAssertOptions, q as documentDoesNotExist, l as documentExists, o as documentMatchingExists, m as documentsAreTheSame, n as documentsMatchingHaveCount, r as expectPongoDocuments } from '../../../postgreSQLEventStore-loGROgA0.js';
2
+ export { l as PongoAssertOptions, r as documentDoesNotExist, m as documentExists, q as documentMatchingExists, n as documentsAreTheSame, o as documentsMatchingHaveCount, s as expectPongoDocuments } from '../../../postgreSQLEventStore-BDzOzx7q.js';
3
3
  import '@event-driven-io/dumbo';
4
4
  import '@event-driven-io/emmett';
5
5
  import 'pg';
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkJQ2VF3NGjs = require('../../../chunk-JQ2VF3NG.js');require('../../../chunk-6FBMFEVK.js');exports.documentDoesNotExist = _chunkJQ2VF3NGjs.e; exports.documentExists = _chunkJQ2VF3NGjs.a; exports.documentMatchingExists = _chunkJQ2VF3NGjs.d; exports.documentsAreTheSame = _chunkJQ2VF3NGjs.b; exports.documentsMatchingHaveCount = _chunkJQ2VF3NGjs.c; exports.expectPongoDocuments = _chunkJQ2VF3NGjs.f;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkUMWNWQRRjs = require('../../../chunk-UMWNWQRR.js');require('../../../chunk-QB7BC56W.js');exports.documentDoesNotExist = _chunkUMWNWQRRjs.e; exports.documentExists = _chunkUMWNWQRRjs.a; exports.documentMatchingExists = _chunkUMWNWQRRjs.d; exports.documentsAreTheSame = _chunkUMWNWQRRjs.b; exports.documentsMatchingHaveCount = _chunkUMWNWQRRjs.c; exports.expectPongoDocuments = _chunkUMWNWQRRjs.f;
2
2
  //# sourceMappingURL=pongoProjectionSpec.js.map
@@ -1,2 +1,2 @@
1
- import{a,b,c,d,e,f}from"../../../chunk-QNOJWKPZ.mjs";import"../../../chunk-HIX4PKIP.mjs";export{e as documentDoesNotExist,a as documentExists,d as documentMatchingExists,b as documentsAreTheSame,c as documentsMatchingHaveCount,f as expectPongoDocuments};
1
+ import{a,b,c,d,e,f}from"../../../chunk-JPTXK5ZT.mjs";import"../../../chunk-PT4NEEE4.mjs";export{e as documentDoesNotExist,a as documentExists,d as documentMatchingExists,b as documentsAreTheSame,c as documentsMatchingHaveCount,f as expectPongoDocuments};
2
2
  //# sourceMappingURL=pongoProjectionSpec.mjs.map
@@ -1,5 +1,5 @@
1
1
  import '@event-driven-io/emmett';
2
2
  import '@event-driven-io/pongo';
3
- export { t as PongoDocumentEvolve, w as PongoMultiStreamProjectionOptions, s as PongoProjectionHandlerContext, u as PongoProjectionOptions, y as PongoSingleStreamProjectionOptions, x as pongoMultiStreamProjection, v as pongoProjection, z as pongoSingleStreamProjection } from '../../../postgreSQLEventStore-loGROgA0.mjs';
3
+ export { w as PongoDocumentEvolve, z as PongoMultiStreamProjectionOptions, t as PongoProjectionHandlerContext, x as PongoProjectionOptions, B as PongoSingleStreamProjectionOptions, u as PongoWithNotNullDocumentEvolve, v as PongoWithNullableDocumentEvolve, A as pongoMultiStreamProjection, y as pongoProjection, C as pongoSingleStreamProjection } from '../../../postgreSQLEventStore-BDzOzx7q.mjs';
4
4
  import '@event-driven-io/dumbo';
5
5
  import 'pg';
@@ -1,5 +1,5 @@
1
1
  import '@event-driven-io/emmett';
2
2
  import '@event-driven-io/pongo';
3
- export { t as PongoDocumentEvolve, w as PongoMultiStreamProjectionOptions, s as PongoProjectionHandlerContext, u as PongoProjectionOptions, y as PongoSingleStreamProjectionOptions, x as pongoMultiStreamProjection, v as pongoProjection, z as pongoSingleStreamProjection } from '../../../postgreSQLEventStore-loGROgA0.js';
3
+ export { w as PongoDocumentEvolve, z as PongoMultiStreamProjectionOptions, t as PongoProjectionHandlerContext, x as PongoProjectionOptions, B as PongoSingleStreamProjectionOptions, u as PongoWithNotNullDocumentEvolve, v as PongoWithNullableDocumentEvolve, A as pongoMultiStreamProjection, y as pongoProjection, C as pongoSingleStreamProjection } from '../../../postgreSQLEventStore-BDzOzx7q.js';
4
4
  import '@event-driven-io/dumbo';
5
5
  import 'pg';
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkJQ2VF3NGjs = require('../../../chunk-JQ2VF3NG.js');require('../../../chunk-6FBMFEVK.js');exports.pongoMultiStreamProjection = _chunkJQ2VF3NGjs.h; exports.pongoProjection = _chunkJQ2VF3NGjs.g; exports.pongoSingleStreamProjection = _chunkJQ2VF3NGjs.i;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkUMWNWQRRjs = require('../../../chunk-UMWNWQRR.js');require('../../../chunk-QB7BC56W.js');exports.pongoMultiStreamProjection = _chunkUMWNWQRRjs.h; exports.pongoProjection = _chunkUMWNWQRRjs.g; exports.pongoSingleStreamProjection = _chunkUMWNWQRRjs.i;
2
2
  //# sourceMappingURL=projections.js.map
@@ -1,2 +1,2 @@
1
- import{g as a,h as b,i as c}from"../../../chunk-QNOJWKPZ.mjs";import"../../../chunk-HIX4PKIP.mjs";export{b as pongoMultiStreamProjection,a as pongoProjection,c as pongoSingleStreamProjection};
1
+ import{g as a,h as b,i as c}from"../../../chunk-JPTXK5ZT.mjs";import"../../../chunk-PT4NEEE4.mjs";export{b as pongoMultiStreamProjection,a as pongoProjection,c as pongoSingleStreamProjection};
2
2
  //# sourceMappingURL=projections.mjs.map
@@ -1,5 +1,5 @@
1
1
  import '@event-driven-io/dumbo';
2
2
  import '@event-driven-io/emmett';
3
- export { F as PostgreSQLProjectionAssert, E as PostgreSQLProjectionSpec, A as PostgreSQLProjectionSpecEvent, G as PostgreSQLProjectionSpecOptions, H as assertSQLQueryResultMatches, B as eventInStream, C as eventsInStream, I as expectSQL, D as newEventsInStream } from '../../postgreSQLEventStore-loGROgA0.mjs';
3
+ export { G as PostgreSQLProjectionAssert, F as PostgreSQLProjectionSpec, D as PostgreSQLProjectionSpecEvent, H as PostgreSQLProjectionSpecOptions, E as PostgreSQLProjectionSpecWhenOptions, L as assertSQLQueryResultMatches, I as eventInStream, J as eventsInStream, M as expectSQL, K as newEventsInStream } from '../../postgreSQLEventStore-BDzOzx7q.mjs';
4
4
  import 'pg';
5
5
  import '@event-driven-io/pongo';
@@ -1,5 +1,5 @@
1
1
  import '@event-driven-io/dumbo';
2
2
  import '@event-driven-io/emmett';
3
- export { F as PostgreSQLProjectionAssert, E as PostgreSQLProjectionSpec, A as PostgreSQLProjectionSpecEvent, G as PostgreSQLProjectionSpecOptions, H as assertSQLQueryResultMatches, B as eventInStream, C as eventsInStream, I as expectSQL, D as newEventsInStream } from '../../postgreSQLEventStore-loGROgA0.js';
3
+ export { G as PostgreSQLProjectionAssert, F as PostgreSQLProjectionSpec, D as PostgreSQLProjectionSpecEvent, H as PostgreSQLProjectionSpecOptions, E as PostgreSQLProjectionSpecWhenOptions, L as assertSQLQueryResultMatches, I as eventInStream, J as eventsInStream, M as expectSQL, K as newEventsInStream } from '../../postgreSQLEventStore-BDzOzx7q.js';
4
4
  import 'pg';
5
5
  import '@event-driven-io/pongo';
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkJQ2VF3NGjs = require('../../chunk-JQ2VF3NG.js');require('../../chunk-6FBMFEVK.js');exports.PostgreSQLProjectionSpec = _chunkJQ2VF3NGjs.m; exports.assertSQLQueryResultMatches = _chunkJQ2VF3NGjs.n; exports.eventInStream = _chunkJQ2VF3NGjs.j; exports.eventsInStream = _chunkJQ2VF3NGjs.k; exports.expectSQL = _chunkJQ2VF3NGjs.o; exports.newEventsInStream = _chunkJQ2VF3NGjs.l;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkUMWNWQRRjs = require('../../chunk-UMWNWQRR.js');require('../../chunk-QB7BC56W.js');exports.PostgreSQLProjectionSpec = _chunkUMWNWQRRjs.j; exports.assertSQLQueryResultMatches = _chunkUMWNWQRRjs.n; exports.eventInStream = _chunkUMWNWQRRjs.k; exports.eventsInStream = _chunkUMWNWQRRjs.l; exports.expectSQL = _chunkUMWNWQRRjs.o; exports.newEventsInStream = _chunkUMWNWQRRjs.m;
2
2
  //# sourceMappingURL=postgresProjectionSpec.js.map
@@ -1,2 +1,2 @@
1
- import{j as a,k as b,l as c,m as d,n as e,o as f}from"../../chunk-QNOJWKPZ.mjs";import"../../chunk-HIX4PKIP.mjs";export{d as PostgreSQLProjectionSpec,e as assertSQLQueryResultMatches,a as eventInStream,b as eventsInStream,f as expectSQL,c as newEventsInStream};
1
+ import{j as a,k as b,l as c,m as d,n as e,o as f}from"../../chunk-JPTXK5ZT.mjs";import"../../chunk-PT4NEEE4.mjs";export{a as PostgreSQLProjectionSpec,e as assertSQLQueryResultMatches,b as eventInStream,c as eventsInStream,f as expectSQL,d as newEventsInStream};
2
2
  //# sourceMappingURL=postgresProjectionSpec.mjs.map
@@ -13,7 +13,9 @@ type AppendEventResult = {
13
13
  };
14
14
  declare const appendToStream: (pool: NodePostgresPool, streamName: string, streamType: string, events: Event[], options?: (AppendToStreamOptions & {
15
15
  partition?: string | undefined;
16
- preCommitHook?: ((transaction: NodePostgresTransaction, events: ReadEvent[]) => Promise<void>) | undefined;
16
+ preCommitHook?: ((events: ReadEvent[], context: {
17
+ transaction: NodePostgresTransaction;
18
+ }) => Promise<void>) | undefined;
17
19
  }) | undefined) => Promise<AppendEventResult>;
18
20
 
19
21
  export { appendEventsSQL, appendToStream };
@@ -13,7 +13,9 @@ type AppendEventResult = {
13
13
  };
14
14
  declare const appendToStream: (pool: NodePostgresPool, streamName: string, streamType: string, events: Event[], options?: (AppendToStreamOptions & {
15
15
  partition?: string | undefined;
16
- preCommitHook?: ((transaction: NodePostgresTransaction, events: ReadEvent[]) => Promise<void>) | undefined;
16
+ preCommitHook?: ((events: ReadEvent[], context: {
17
+ transaction: NodePostgresTransaction;
18
+ }) => Promise<void>) | undefined;
17
19
  }) | undefined) => Promise<AppendEventResult>;
18
20
 
19
21
  export { appendEventsSQL, appendToStream };
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkDUXB3PBPjs = require('../../chunk-DUXB3PBP.js');require('../../chunk-SS2LQM3B.js');require('../../chunk-6FBMFEVK.js');exports.appendEventsSQL = _chunkDUXB3PBPjs.a; exports.appendToStream = _chunkDUXB3PBPjs.b;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkR5KGCWKQjs = require('../../chunk-R5KGCWKQ.js');require('../../chunk-SS2LQM3B.js');require('../../chunk-QB7BC56W.js');exports.appendEventsSQL = _chunkR5KGCWKQjs.a; exports.appendToStream = _chunkR5KGCWKQjs.b;
2
2
  //# sourceMappingURL=appendToStream.js.map
@@ -1,2 +1,2 @@
1
- import{a,b}from"../../chunk-ST3FNDJ5.mjs";import"../../chunk-ABNBEUC6.mjs";import"../../chunk-HIX4PKIP.mjs";export{a as appendEventsSQL,b as appendToStream};
1
+ import{a,b}from"../../chunk-SIRCKLWA.mjs";import"../../chunk-ABNBEUC6.mjs";import"../../chunk-PT4NEEE4.mjs";export{a as appendEventsSQL,b as appendToStream};
2
2
  //# sourceMappingURL=appendToStream.mjs.map