@event-driven-io/emmett-testcontainers 0.43.0-beta.28 → 0.43.0-beta.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -116,7 +116,7 @@ const logger = (options) => {
116
116
  const noopLogger = logger({ event: () => {} });
117
117
 
118
118
  //#endregion
119
- //#region ../almanac/dist/spanLogEvent-DxTi1Li5.js
119
+ //#region ../almanac/dist/spanLogEvent-ByQosuDu.js
120
120
  const bigIntReplacer = (_key, value) => {
121
121
  return typeof value === "bigint" ? value.toString() : value;
122
122
  };
@@ -202,7 +202,7 @@ const jsonSerializer = (options) => {
202
202
  const JSONSerializer = Object.assign(jsonSerializer(), { from: (options) => options?.serialization?.serializer ?? (options?.serialization?.options ? jsonSerializer(options?.serialization?.options) : JSONSerializer) });
203
203
 
204
204
  //#endregion
205
- //#region ../almanac/dist/console-DQ8X0Jo1.js
205
+ //#region ../almanac/dist/console-Bn5yW7XZ.js
206
206
  const consoleMethodFor = (level) => {
207
207
  switch (level) {
208
208
  case "fatal":
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["GenericContainer","Wait","AbstractStartedContainer","EventStoreDBClient","EventStoreDBClient","MongoDBContainer","PostgreSqlContainer"],"sources":["../../almanac/dist/logger-DnrSjS8d.js","../../almanac/dist/spanLogEvent-DxTi1Li5.js","../../almanac/dist/console-DQ8X0Jo1.js","../src/eventStore/eventStoreDBContainer.ts","../src/eventStore/index.ts","../src/mongodb/mongoDBContainer.ts","../src/postgresql/postgreSQLContainer.ts"],"sourcesContent":["//#region src/loggers/logger.ts\nconst LogLevel = {\n\tdefault: \"info\",\n\tsilent: \"silent\",\n\ttrace: \"trace\",\n\tdebug: \"debug\",\n\tinfo: \"info\",\n\twarn: \"warn\",\n\terror: \"error\",\n\tfatal: \"fatal\"\n};\nconst shouldLog = (logLevel, definedLogLevel) => {\n\tdefinedLogLevel ??= LogLevel.default;\n\tswitch (definedLogLevel) {\n\t\tcase \"fatal\": return logLevel === LogLevel.fatal;\n\t\tcase \"error\": return [LogLevel.fatal, LogLevel.error].includes(logLevel);\n\t\tcase \"warn\": return [\n\t\t\tLogLevel.fatal,\n\t\t\tLogLevel.error,\n\t\t\tLogLevel.warn\n\t\t].includes(logLevel);\n\t\tcase \"info\": return [\n\t\t\tLogLevel.fatal,\n\t\t\tLogLevel.error,\n\t\t\tLogLevel.warn,\n\t\t\tLogLevel.info\n\t\t].includes(logLevel);\n\t\tcase \"debug\": return [\n\t\t\tLogLevel.fatal,\n\t\t\tLogLevel.error,\n\t\t\tLogLevel.warn,\n\t\t\tLogLevel.info,\n\t\t\tLogLevel.debug\n\t\t].includes(logLevel);\n\t\tcase \"trace\": return [\n\t\t\tLogLevel.fatal,\n\t\t\tLogLevel.error,\n\t\t\tLogLevel.warn,\n\t\t\tLogLevel.info,\n\t\t\tLogLevel.debug,\n\t\t\tLogLevel.trace\n\t\t].includes(logLevel);\n\t\tcase \"silent\": return false;\n\t}\n};\nconst logEvent = (eventName, data, eventMetadata) => {\n\treturn {\n\t\tname: eventName,\n\t\tdata,\n\t\tmetadata: {\n\t\t\t...eventMetadata,\n\t\t\ttimestamp: eventMetadata.timestamp ?? Date.now()\n\t\t}\n\t};\n};\nconst message = (level, body, data, eventMetadata) => {\n\tif (data === void 0) return logEvent(body, { body }, {\n\t\tlevel,\n\t\t...eventMetadata\n\t});\n\tconst eventData = { body };\n\tif (data.error !== void 0) eventData.error = data.error;\n\tif (data.attributes !== void 0) eventData.attributes = data.attributes;\n\treturn logEvent(body, eventData, {\n\t\tlevel,\n\t\t...eventMetadata\n\t});\n};\nconst forLevel = (level) => (msgOrObj, msgOrMetadata, eventMetadata) => {\n\tif (typeof msgOrObj === \"string\") return logEvent(msgOrObj, { body: msgOrObj }, {\n\t\tlevel,\n\t\t...typeof msgOrMetadata === \"string\" ? eventMetadata : msgOrMetadata\n\t});\n\tconst msg = typeof msgOrMetadata === \"string\" ? msgOrMetadata : void 0;\n\tconst overrides = eventMetadata ?? (typeof msgOrMetadata === \"string\" ? void 0 : msgOrMetadata);\n\tif (msgOrObj instanceof Error) return logEvent(msg ?? \"\", {\n\t\terror: msgOrObj,\n\t\tbody: msg\n\t}, {\n\t\tlevel,\n\t\t...overrides\n\t});\n\tconst { eventName, ...attributes } = msgOrObj;\n\treturn logEvent(typeof eventName === \"string\" ? eventName : msg ?? \"\", {\n\t\tattributes,\n\t\tbody: msg\n\t}, {\n\t\tlevel,\n\t\t...overrides\n\t});\n};\nconst LogEvent = Object.assign(logEvent, {\n\tmessage,\n\tfatal: forLevel(\"fatal\"),\n\terror: forLevel(\"error\"),\n\twarn: forLevel(\"warn\"),\n\tinfo: forLevel(\"info\"),\n\tdebug: forLevel(\"debug\"),\n\ttrace: forLevel(\"trace\"),\n\tsilent: forLevel(\"silent\")\n});\nconst logger = (options) => {\n\tconst { event: sink, minLevel } = options;\n\treturn (event) => {\n\t\tif (event.metadata.level === \"silent\" || !shouldLog(event.metadata.level, minLevel)) return;\n\t\tsink(event);\n\t};\n};\nconst noopLogger = logger({ event: () => {} });\n\n//#endregion\nexport { shouldLog as a, noopLogger as i, LogLevel as n, logger as r, LogEvent as t };\n//# sourceMappingURL=logger-DnrSjS8d.js.map","import { i as noopLogger } from \"./logger-DnrSjS8d.js\";\n\n//#region src/serialization/json/jsonSerializer.ts\nconst bigIntReplacer = (_key, value) => {\n\treturn typeof value === \"bigint\" ? value.toString() : value;\n};\nconst dateReplacer = (_key, value) => {\n\treturn value instanceof Date ? value.toISOString() : value;\n};\nconst errorReplacer = (_key, value) => value instanceof Error ? {\n\ttype: value.constructor.name || \"error\",\n\tmessage: value.message,\n\tstack: value.stack\n} : value;\nconst isFirstLetterNumeric = (str) => {\n\tconst c = str.charCodeAt(0);\n\treturn c >= 48 && c <= 57;\n};\nconst isFirstLetterNumericOrMinus = (str) => {\n\tconst c = str.charCodeAt(0);\n\treturn c >= 48 && c <= 57 || c === 45;\n};\nconst bigIntReviver = (_key, value, context) => {\n\tif (typeof value === \"number\" && Number.isInteger(value) && !Number.isSafeInteger(value)) try {\n\t\treturn BigInt(context?.source ?? value.toString());\n\t} catch {\n\t\treturn value;\n\t}\n\tif (typeof value === \"string\" && value.length > 15) {\n\t\tif (isFirstLetterNumericOrMinus(value)) {\n\t\t\tconst num = Number(value);\n\t\t\tif (Number.isFinite(num) && !Number.isSafeInteger(num)) try {\n\t\t\t\treturn BigInt(value);\n\t\t\t} catch {}\n\t\t}\n\t}\n\treturn value;\n};\nconst dateReviver = (_key, value) => {\n\tif (typeof value === \"string\" && value.length === 24 && isFirstLetterNumeric(value) && value[10] === \"T\" && value[23] === \"Z\") {\n\t\tconst date = new Date(value);\n\t\tif (!isNaN(date.getTime())) return date;\n\t}\n\treturn value;\n};\nconst composeJSONReplacers = (...replacers) => {\n\tconst filteredReplacers = replacers.filter((r) => r !== void 0);\n\tif (filteredReplacers.length === 0) return void 0;\n\treturn (key, value) => filteredReplacers.reduce((accValue, replacer) => replacer(key, accValue), value);\n};\nconst composeJSONRevivers = (...revivers) => {\n\tconst filteredRevivers = revivers.filter((r) => r !== void 0);\n\tif (filteredRevivers.length === 0) return void 0;\n\treturn (key, value, context) => filteredRevivers.reduce((accValue, reviver) => reviver(key, accValue, context), value);\n};\nconst JSONReplacer = (opts) => composeJSONReplacers(opts?.replacer, opts?.failOnBigIntSerialization !== true ? JSONReplacers.bigInt : void 0, opts?.useDefaultDateSerialization !== true ? JSONReplacers.date : void 0, opts?.skipErrorSerialization !== true ? JSONReplacers.error : void 0);\nconst JSONReviver = (opts) => composeJSONRevivers(opts?.reviver, opts?.parseBigInts === true ? JSONRevivers.bigInt : void 0, opts?.parseDates === true ? JSONRevivers.date : void 0);\nconst JSONReplacers = {\n\tbigInt: bigIntReplacer,\n\tdate: dateReplacer,\n\terror: errorReplacer\n};\nconst JSONRevivers = {\n\tbigInt: bigIntReviver,\n\tdate: dateReviver\n};\nconst jsonSerializer = (options) => {\n\tconst defaultReplacer = JSONReplacer(options);\n\tconst defaultReviver = JSONReviver(options);\n\tconst defaultFormat = options?.format ?? \"compact\";\n\tconst defaultSafe = options?.safe ?? false;\n\treturn {\n\t\tserialize: (object, serializerOptions) => {\n\t\t\tconst replacer = serializerOptions ? JSONReplacer(serializerOptions) : defaultReplacer;\n\t\t\tconst indent = (serializerOptions?.format ?? defaultFormat) === \"pretty\" ? 2 : void 0;\n\t\t\tif (serializerOptions?.safe ?? defaultSafe) try {\n\t\t\t\treturn JSON.stringify(object, replacer, indent);\n\t\t\t} catch (e) {\n\t\t\t\treturn `{\"__serializationError\":${JSON.stringify(String(e))}}`;\n\t\t\t}\n\t\t\treturn JSON.stringify(object, replacer, indent);\n\t\t},\n\t\tdeserialize: (payload, deserializerOptions) => JSON.parse(payload, deserializerOptions ? JSONReviver(deserializerOptions) : defaultReviver)\n\t};\n};\nconst JSONSerializer = Object.assign(jsonSerializer(), { from: (options) => options?.serialization?.serializer ?? (options?.serialization?.options ? jsonSerializer(options?.serialization?.options) : JSONSerializer) });\n\n//#endregion\n//#region src/loggers/formatters/otelLogFormatter.ts\nconst SEVERITY_NUMBER = {\n\tsilent: 0,\n\ttrace: 1,\n\tdebug: 5,\n\tinfo: 9,\n\twarn: 13,\n\terror: 17,\n\tfatal: 21\n};\nconst severityNumberFor = (level) => SEVERITY_NUMBER[level];\nconst severityTextFor = (level) => level.toUpperCase();\nconst OtelLogFormatter = {\n\tformat: (event, options) => JSONSerializer.serialize(OtelLogFormatter.toOtelLog(event), options),\n\ttoOtelLog: ({ name: eventName, data, metadata }) => {\n\t\tconst attributes = { ...data.attributes ?? {} };\n\t\tif (data.error) {\n\t\t\tattributes[\"exception.type\"] = data.error.name;\n\t\t\tattributes[\"exception.message\"] = data.error.message;\n\t\t\tif (data.error.stack) attributes[\"exception.stacktrace\"] = data.error.stack;\n\t\t}\n\t\tconst log = {\n\t\t\ttimestamp: metadata.timestamp,\n\t\t\tseverityNumber: severityNumberFor(metadata.level),\n\t\t\tseverityText: severityTextFor(metadata.level)\n\t\t};\n\t\tif (eventName) log.eventName = eventName;\n\t\tif (metadata.traceId !== void 0) log.traceId = metadata.traceId;\n\t\tif (metadata.spanId !== void 0) log.spanId = metadata.spanId;\n\t\tif (data.body !== void 0) log.body = data.body;\n\t\tif (Object.keys(attributes).length) log.attributes = attributes;\n\t\treturn log;\n\t}\n};\n\n//#endregion\n//#region src/loggers/formatters/simpleFormatter.ts\nconst SimpleLogFormatter = { format: (event, _options) => {\n\tconst message = event.data.body ?? (event.name ? event.name : void 0);\n\treturn message !== void 0 ? `[${event.metadata.level}] ${message}` : `[${event.metadata.level}]`;\n} };\n\n//#endregion\n//#region src/tracers/span.ts\nconst noopSpan = {\n\tsetAttributes: () => {},\n\tspanContext: () => ({\n\t\ttraceId: \"\",\n\t\tspanId: \"\"\n\t}),\n\taddLink: () => {},\n\tlog: noopLogger\n};\n\n//#endregion\n//#region src/tracers/compositeTracer.ts\nconst compositeTracer = (...tracers) => ({ startSpan: async (name, fn, options) => {\n\tif (tracers.length === 0) return fn(noopSpan);\n\tconst nest = (index, collectedSpans) => {\n\t\tif (index >= tracers.length) return fn(compositeSpan(collectedSpans));\n\t\treturn tracers[index].startSpan(name, async (span) => nest(index + 1, [...collectedSpans, span]), options);\n\t};\n\treturn nest(0, []);\n} });\nconst compositeSpan = (spans) => ({\n\tsetAttributes: (attrs) => spans.forEach((s) => s.setAttributes(attrs)),\n\tspanContext: () => (spans[0] ?? noopSpan).spanContext(),\n\taddLink: (link) => spans.forEach((s) => s.addLink(link)),\n\tlog: (event) => spans.forEach((s) => s.log(event))\n});\n\n//#endregion\n//#region src/tracers/traceContextGenerator.ts\nconst randomHex = (bytes) => {\n\tconst arr = new Uint8Array(bytes);\n\tglobalThis.crypto.getRandomValues(arr);\n\treturn Array.from(arr, (b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n};\nconst defaultTraceContextGenerator = {\n\tgenerateTraceId: () => randomHex(16),\n\tgenerateSpanId: () => randomHex(8)\n};\n\n//#endregion\n//#region src/tracers/tracer.ts\nconst noTracing = { startSpan: async (_name, fn, _options) => fn(noopSpan) };\nconst noopTracer = () => noTracing;\n\n//#endregion\n//#region src/tracers/spanLogEvent.ts\nconst logEventForSpan = (event, context) => {\n\tconst traceId = event.metadata.traceId ?? context.traceId;\n\tconst spanId = event.metadata.spanId ?? context.spanId;\n\tif (traceId === event.metadata.traceId && spanId === event.metadata.spanId) return event;\n\tconst metadata = {\n\t\t...event.metadata,\n\t\ttraceId,\n\t\tspanId\n\t};\n\treturn {\n\t\tname: event.name,\n\t\tdata: event.data,\n\t\tmetadata\n\t};\n};\n\n//#endregion\nexport { noopSpan as a, severityTextFor as c, compositeTracer as i, JSONSerializer as l, noopTracer as n, SimpleLogFormatter as o, defaultTraceContextGenerator as r, OtelLogFormatter as s, logEventForSpan as t };\n//# sourceMappingURL=spanLogEvent-DxTi1Li5.js.map","import { l as JSONSerializer, o as SimpleLogFormatter, r as defaultTraceContextGenerator, s as OtelLogFormatter, t as logEventForSpan } from \"./spanLogEvent-DxTi1Li5.js\";\nimport { i as noopLogger, r as logger } from \"./logger-DnrSjS8d.js\";\n\n//#region src/providers/console/consoleLogger.ts\nconst consoleMethodFor = (level) => {\n\tswitch (level) {\n\t\tcase \"fatal\":\n\t\tcase \"error\": return console.error;\n\t\tcase \"warn\": return console.warn;\n\t\tcase \"debug\": return console.debug;\n\t\tcase \"trace\": return console.trace;\n\t\tdefault: return console.log;\n\t}\n};\nconst consoleLogger = logger({ event: (event) => {\n\tconst write = consoleMethodFor(event.metadata.level);\n\tconst extra = event.data.error ?? (event.data.attributes && Object.keys(event.data.attributes).length ? event.data.attributes : void 0);\n\tif (event.data.body !== void 0 && extra !== void 0) write(event.data.body, extra);\n\telse if (event.data.body !== void 0) write(event.data.body);\n\telse if (extra !== void 0) write(extra);\n\telse write(\"\");\n} });\n\n//#endregion\n//#region src/providers/console/consoleSpanLogSink.ts\nconst createConsoleSpanLogSink = (format) => {\n\tconst serializerOptions = {\n\t\tformat: format === \"simple\" || void 0 ? \"compact\" : format,\n\t\tsafe: true\n\t};\n\treturn format === \"simple\" ? (event) => console.log(SimpleLogFormatter.format(event, serializerOptions)) : (event) => console.log(OtelLogFormatter.format(event, serializerOptions));\n};\n\n//#endregion\n//#region src/providers/console/consoleSpanLogger.ts\nconst ConsoleFormat = {\n\tcompact: \"compact\",\n\tpretty: \"pretty\",\n\tSIMPLE: \"simple\"\n};\nconst consoleSpanLogger = (options) => logger({\n\tminLevel: options?.logLevel,\n\tevent: createConsoleSpanLogSink(options?.format)\n});\n\n//#endregion\n//#region src/providers/console/consoleTracer.ts\nconst consoleTracer = (options) => {\n\tconst mode = options?.mode ?? \"compact\";\n\tconst suppressLogs = options?.suppressLogs ?? false;\n\tconst traceContextGenerator = options?.traceContextGenerator ?? defaultTraceContextGenerator;\n\tconst sink = createConsoleSpanLogSink(mode);\n\tconst log = suppressLogs ? noopLogger : logger({\n\t\tminLevel: options?.logLevel,\n\t\tevent: sink\n\t});\n\treturn { startSpan: async (name, fn, spanOptions) => {\n\t\tconst traceId = traceContextGenerator.generateTraceId();\n\t\tconst spanId = traceContextGenerator.generateSpanId();\n\t\tconst context = {\n\t\t\ttraceId,\n\t\t\tspanId\n\t\t};\n\t\tconst startMs = Date.now();\n\t\tconst attributes = { ...spanOptions?.attributes };\n\t\tconst links = [...spanOptions?.links ?? []];\n\t\tconst span = {\n\t\t\tspanContext: () => context,\n\t\t\tsetAttributes: (attrs) => Object.assign(attributes, attrs),\n\t\t\taddLink: (link) => links.push(link),\n\t\t\tlog: (event) => log(logEventForSpan(event, context))\n\t\t};\n\t\tlet ok = true;\n\t\tlet spanError;\n\t\ttry {\n\t\t\treturn await fn(span);\n\t\t} catch (e) {\n\t\t\tok = false;\n\t\t\tspanError = e instanceof Error ? e : new Error(String(e));\n\t\t\tthrow e;\n\t\t} finally {\n\t\t\tconst durationMs = Date.now() - startMs;\n\t\t\tif (mode === \"simple\") console.log(`[span] ${name} (${durationMs}ms)${ok ? \"\" : \" [failed]\"}`);\n\t\t\telse {\n\t\t\t\tconst summary = {\n\t\t\t\t\tname,\n\t\t\t\t\ttraceId,\n\t\t\t\t\tspanId,\n\t\t\t\t\t...spanOptions?.parent?.spanId ? { parentSpanId: spanOptions.parent.spanId } : {},\n\t\t\t\t\tstartTimeUnixNano: (BigInt(startMs) * 1000000n).toString(),\n\t\t\t\t\tendTimeUnixNano: (BigInt(startMs + durationMs) * 1000000n).toString(),\n\t\t\t\t\tattributes,\n\t\t\t\t\tstatus: {\n\t\t\t\t\t\tcode: ok ? \"OK\" : \"ERROR\",\n\t\t\t\t\t\t...spanError !== void 0 ? { message: spanError.message } : {}\n\t\t\t\t\t},\n\t\t\t\t\tlinks\n\t\t\t\t};\n\t\t\t\tconsole.log(JSONSerializer.serialize(summary, {\n\t\t\t\t\tformat: mode === \"pretty\" ? \"pretty\" : \"compact\",\n\t\t\t\t\tsafe: true\n\t\t\t\t}));\n\t\t\t}\n\t\t}\n\t} };\n};\n\n//#endregion\nexport { consoleLogger as i, ConsoleFormat as n, consoleSpanLogger as r, consoleTracer as t };\n//# sourceMappingURL=console-DQ8X0Jo1.js.map","import { LogEvent } from '@event-driven-io/almanac';\nimport { consoleLogger } from '@event-driven-io/almanac/console';\nimport { InProcessLock } from '@event-driven-io/emmett';\nimport { EventStoreDBClient } from '@eventstore/db-client';\nimport {\n AbstractStartedContainer,\n GenericContainer,\n Wait,\n type StartedTestContainer,\n} from 'testcontainers';\nimport type { Environment } from 'testcontainers/build/types';\n\nexport const EVENTSTOREDB_PORT = 2113;\nexport const EVENTSTOREDB_IMAGE_NAME = 'eventstore/eventstore';\nexport const EVENTSTOREDB_IMAGE_TAG = '24.10.0-bookworm-slim';\nexport const EVENTSTOREDB_ARM64_IMAGE_TAG = '24.10.0-alpha-arm64v8';\n\nexport const EVENTSTOREDB_DEFAULT_IMAGE = `${EVENTSTOREDB_IMAGE_NAME}:${process.arch !== 'arm64' ? EVENTSTOREDB_IMAGE_TAG : EVENTSTOREDB_ARM64_IMAGE_TAG}`;\n\nexport type EventStoreDBContainerOptions = {\n disableProjections?: boolean;\n isSecure?: boolean;\n useFileStorage?: boolean;\n withReuse?: boolean;\n};\n\nexport const defaultEventStoreDBContainerOptions: EventStoreDBContainerOptions =\n {\n disableProjections: false,\n isSecure: false,\n useFileStorage: false,\n withReuse: false,\n };\n\nexport class EventStoreDBContainer extends GenericContainer {\n constructor(\n image = EVENTSTOREDB_DEFAULT_IMAGE,\n options: EventStoreDBContainerOptions = defaultEventStoreDBContainerOptions,\n ) {\n super(image);\n\n const environment: Environment = {\n ...(!options.disableProjections\n ? {\n EVENTSTORE_RUN_PROJECTIONS: 'ALL',\n }\n : {}),\n ...(!options.isSecure\n ? {\n EVENTSTORE_INSECURE: 'true',\n }\n : {}),\n ...(options.useFileStorage\n ? {\n EVENTSTORE_MEM_DB: 'false',\n EVENTSTORE_DB: '/data/integration-tests',\n }\n : {}),\n EVENTSTORE_CLUSTER_SIZE: '1',\n EVENTSTORE_START_STANDARD_PROJECTIONS: 'true',\n EVENTSTORE_NODE_PORT: `${EVENTSTOREDB_PORT}`,\n EVENTSTORE_ENABLE_ATOM_PUB_OVER_HTTP: 'true',\n };\n\n this.withEnvironment(environment).withExposedPorts(EVENTSTOREDB_PORT);\n\n if (options.withReuse) this.withReuse();\n\n this.withWaitStrategy(\n Wait.forAll([Wait.forHealthCheck(), Wait.forListeningPorts()]),\n );\n }\n\n async start(): Promise<StartedEventStoreDBContainer> {\n return new StartedEventStoreDBContainer(await super.start());\n }\n}\n\nexport class StartedEventStoreDBContainer extends AbstractStartedContainer {\n constructor(container: StartedTestContainer) {\n super(container);\n }\n\n getConnectionString(): string {\n return `esdb://${this.getHost()}:${this.getMappedPort(2113)}?tls=false`;\n }\n\n getClient(): EventStoreDBClient {\n return EventStoreDBClient.connectionString(this.getConnectionString());\n }\n}\n\nlet container: EventStoreDBContainer | null = null;\nlet startedContainer: StartedEventStoreDBContainer | null = null;\nlet startedCount = 0;\nconst lock = InProcessLock();\n\nexport const getSharedEventStoreDBTestContainer = () =>\n lock.withAcquire(\n async () => {\n if (startedContainer) return startedContainer;\n\n if (!container)\n container = new EventStoreDBContainer(EVENTSTOREDB_DEFAULT_IMAGE);\n\n startedContainer = await container.start();\n startedCount++;\n\n container.withLogConsumer((stream) =>\n stream\n .on('data', (line) => consoleLogger(LogEvent.info(String(line))))\n .on('err', (line) => consoleLogger(LogEvent.error(String(line))))\n .on('end', () => consoleLogger(LogEvent.info('Stream closed'))),\n );\n\n return startedContainer;\n },\n { lockId: 'SharedEventStoreDBTestContainer' },\n );\n\nexport const getSharedTestEventStoreDBClient = async () => {\n return (await getSharedEventStoreDBTestContainer()).getClient();\n};\n\nexport const releaseSharedEventStoreDBTestContainer = () =>\n lock.withAcquire(\n async () => {\n const containerToStop = startedContainer;\n if (containerToStop && --startedCount === 0) {\n try {\n startedContainer = null;\n container = null;\n await containerToStop.stop();\n } catch {\n /* do nothing */\n }\n }\n },\n { lockId: 'SharedEventStoreDBTestContainer' },\n );\n","import { EventStoreDBClient } from '@eventstore/db-client';\nimport type { StartedEventStoreDBContainer } from './eventStoreDBContainer';\nimport { EventStoreDBContainer } from './eventStoreDBContainer';\n\nexport * from './eventStoreDBContainer';\n\nlet esdbContainer: StartedEventStoreDBContainer;\n\nexport const getEventStoreDBTestClient = async (\n useTestContainers = false,\n): Promise<EventStoreDBClient> => {\n let connectionString;\n\n if (useTestContainers) {\n if (!esdbContainer)\n esdbContainer = await new EventStoreDBContainer().start();\n\n connectionString = esdbContainer.getConnectionString();\n } else {\n // await compose.upAll();\n connectionString = 'esdb://localhost:2113?tls=false';\n }\n\n // That's how EventStoreDB client is setup\n // We're taking the connection string from container\n return EventStoreDBClient.connectionString(connectionString);\n};\n","import { MongoDBContainer } from '@testcontainers/mongodb';\n\nexport const getMongoDBContainer = (\n options: { version: string } = { version: '6.0.1' },\n) => {\n return new MongoDBContainer(`mongo:${options.version}`);\n};\n\nexport const getMongoDBStartedContainer = async (\n options: { version: string } = { version: '6.0.1' },\n) => {\n const container = getMongoDBContainer(options);\n return container.start();\n};\n","import { PostgreSqlContainer } from '@testcontainers/postgresql';\n\nexport const getPostgreSQLContainer = (\n options: { version: string } = { version: '18.1' },\n) => {\n return new PostgreSqlContainer(`postgres:${options.version}`);\n};\n\nexport const getPostgreSQLStartedContainer = async (\n options: { version: string } = { version: '18.1' },\n) => {\n const container = getPostgreSQLContainer(options);\n return container.start();\n};\n"],"mappings":";;;;;;;;AACA,MAAM,WAAW;CAChB,SAAS;CACT,QAAQ;CACR,OAAO;CACP,OAAO;CACP,MAAM;CACN,MAAM;CACN,OAAO;CACP,OAAO;CACP;AACD,MAAM,aAAa,UAAU,oBAAoB;AAChD,qBAAoB,SAAS;AAC7B,SAAQ,iBAAR;EACC,KAAK,QAAS,QAAO,aAAa,SAAS;EAC3C,KAAK,QAAS,QAAO,CAAC,SAAS,OAAO,SAAS,MAAM,CAAC,SAAS,SAAS;EACxE,KAAK,OAAQ,QAAO;GACnB,SAAS;GACT,SAAS;GACT,SAAS;GACT,CAAC,SAAS,SAAS;EACpB,KAAK,OAAQ,QAAO;GACnB,SAAS;GACT,SAAS;GACT,SAAS;GACT,SAAS;GACT,CAAC,SAAS,SAAS;EACpB,KAAK,QAAS,QAAO;GACpB,SAAS;GACT,SAAS;GACT,SAAS;GACT,SAAS;GACT,SAAS;GACT,CAAC,SAAS,SAAS;EACpB,KAAK,QAAS,QAAO;GACpB,SAAS;GACT,SAAS;GACT,SAAS;GACT,SAAS;GACT,SAAS;GACT,SAAS;GACT,CAAC,SAAS,SAAS;EACpB,KAAK,SAAU,QAAO;;;AAGxB,MAAM,YAAY,WAAW,MAAM,kBAAkB;AACpD,QAAO;EACN,MAAM;EACN;EACA,UAAU;GACT,GAAG;GACH,WAAW,cAAc,aAAa,KAAK,KAAK;GAChD;EACD;;AAEF,MAAM,WAAW,OAAO,MAAM,MAAM,kBAAkB;AACrD,KAAI,SAAS,KAAK,EAAG,QAAO,SAAS,MAAM,EAAE,MAAM,EAAE;EACpD;EACA,GAAG;EACH,CAAC;CACF,MAAM,YAAY,EAAE,MAAM;AAC1B,KAAI,KAAK,UAAU,KAAK,EAAG,WAAU,QAAQ,KAAK;AAClD,KAAI,KAAK,eAAe,KAAK,EAAG,WAAU,aAAa,KAAK;AAC5D,QAAO,SAAS,MAAM,WAAW;EAChC;EACA,GAAG;EACH,CAAC;;AAEH,MAAM,YAAY,WAAW,UAAU,eAAe,kBAAkB;AACvE,KAAI,OAAO,aAAa,SAAU,QAAO,SAAS,UAAU,EAAE,MAAM,UAAU,EAAE;EAC/E;EACA,GAAG,OAAO,kBAAkB,WAAW,gBAAgB;EACvD,CAAC;CACF,MAAM,MAAM,OAAO,kBAAkB,WAAW,gBAAgB,KAAK;CACrE,MAAM,YAAY,kBAAkB,OAAO,kBAAkB,WAAW,KAAK,IAAI;AACjF,KAAI,oBAAoB,MAAO,QAAO,SAAS,OAAO,IAAI;EACzD,OAAO;EACP,MAAM;EACN,EAAE;EACF;EACA,GAAG;EACH,CAAC;CACF,MAAM,EAAE,WAAW,GAAG,eAAe;AACrC,QAAO,SAAS,OAAO,cAAc,WAAW,YAAY,OAAO,IAAI;EACtE;EACA,MAAM;EACN,EAAE;EACF;EACA,GAAG;EACH,CAAC;;AAEH,MAAM,WAAW,OAAO,OAAO,UAAU;CACxC;CACA,OAAO,SAAS,QAAQ;CACxB,OAAO,SAAS,QAAQ;CACxB,MAAM,SAAS,OAAO;CACtB,MAAM,SAAS,OAAO;CACtB,OAAO,SAAS,QAAQ;CACxB,OAAO,SAAS,QAAQ;CACxB,QAAQ,SAAS,SAAS;CAC1B,CAAC;AACF,MAAM,UAAU,YAAY;CAC3B,MAAM,EAAE,OAAO,MAAM,aAAa;AAClC,SAAQ,UAAU;AACjB,MAAI,MAAM,SAAS,UAAU,YAAY,CAAC,UAAU,MAAM,SAAS,OAAO,SAAS,CAAE;AACrF,OAAK,MAAM;;;AAGb,MAAM,aAAa,OAAO,EAAE,aAAa,IAAI,CAAC;;;;ACzG9C,MAAM,kBAAkB,MAAM,UAAU;AACvC,QAAO,OAAO,UAAU,WAAW,MAAM,UAAU,GAAG;;AAEvD,MAAM,gBAAgB,MAAM,UAAU;AACrC,QAAO,iBAAiB,OAAO,MAAM,aAAa,GAAG;;AAEtD,MAAM,iBAAiB,MAAM,UAAU,iBAAiB,QAAQ;CAC/D,MAAM,MAAM,YAAY,QAAQ;CAChC,SAAS,MAAM;CACf,OAAO,MAAM;CACb,GAAG;AACJ,MAAM,wBAAwB,QAAQ;CACrC,MAAM,IAAI,IAAI,WAAW,EAAE;AAC3B,QAAO,KAAK,MAAM,KAAK;;AAExB,MAAM,+BAA+B,QAAQ;CAC5C,MAAM,IAAI,IAAI,WAAW,EAAE;AAC3B,QAAO,KAAK,MAAM,KAAK,MAAM,MAAM;;AAEpC,MAAM,iBAAiB,MAAM,OAAO,YAAY;AAC/C,KAAI,OAAO,UAAU,YAAY,OAAO,UAAU,MAAM,IAAI,CAAC,OAAO,cAAc,MAAM,CAAE,KAAI;AAC7F,SAAO,OAAO,SAAS,UAAU,MAAM,UAAU,CAAC;SAC3C;AACP,SAAO;;AAER,KAAI,OAAO,UAAU,YAAY,MAAM,SAAS,IAC/C;MAAI,4BAA4B,MAAM,EAAE;GACvC,MAAM,MAAM,OAAO,MAAM;AACzB,OAAI,OAAO,SAAS,IAAI,IAAI,CAAC,OAAO,cAAc,IAAI,CAAE,KAAI;AAC3D,WAAO,OAAO,MAAM;WACb;;;AAGV,QAAO;;AAER,MAAM,eAAe,MAAM,UAAU;AACpC,KAAI,OAAO,UAAU,YAAY,MAAM,WAAW,MAAM,qBAAqB,MAAM,IAAI,MAAM,QAAQ,OAAO,MAAM,QAAQ,KAAK;EAC9H,MAAM,OAAO,IAAI,KAAK,MAAM;AAC5B,MAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAE,QAAO;;AAEpC,QAAO;;AAER,MAAM,wBAAwB,GAAG,cAAc;CAC9C,MAAM,oBAAoB,UAAU,QAAQ,MAAM,MAAM,KAAK,EAAE;AAC/D,KAAI,kBAAkB,WAAW,EAAG,QAAO,KAAK;AAChD,SAAQ,KAAK,UAAU,kBAAkB,QAAQ,UAAU,aAAa,SAAS,KAAK,SAAS,EAAE,MAAM;;AAExG,MAAM,uBAAuB,GAAG,aAAa;CAC5C,MAAM,mBAAmB,SAAS,QAAQ,MAAM,MAAM,KAAK,EAAE;AAC7D,KAAI,iBAAiB,WAAW,EAAG,QAAO,KAAK;AAC/C,SAAQ,KAAK,OAAO,YAAY,iBAAiB,QAAQ,UAAU,YAAY,QAAQ,KAAK,UAAU,QAAQ,EAAE,MAAM;;AAEvH,MAAM,gBAAgB,SAAS,qBAAqB,MAAM,UAAU,MAAM,8BAA8B,OAAO,cAAc,SAAS,KAAK,GAAG,MAAM,gCAAgC,OAAO,cAAc,OAAO,KAAK,GAAG,MAAM,2BAA2B,OAAO,cAAc,QAAQ,KAAK,EAAE;AAC7R,MAAM,eAAe,SAAS,oBAAoB,MAAM,SAAS,MAAM,iBAAiB,OAAO,aAAa,SAAS,KAAK,GAAG,MAAM,eAAe,OAAO,aAAa,OAAO,KAAK,EAAE;AACpL,MAAM,gBAAgB;CACrB,QAAQ;CACR,MAAM;CACN,OAAO;CACP;AACD,MAAM,eAAe;CACpB,QAAQ;CACR,MAAM;CACN;AACD,MAAM,kBAAkB,YAAY;CACnC,MAAM,kBAAkB,aAAa,QAAQ;CAC7C,MAAM,iBAAiB,YAAY,QAAQ;CAC3C,MAAM,gBAAgB,SAAS,UAAU;CACzC,MAAM,cAAc,SAAS,QAAQ;AACrC,QAAO;EACN,YAAY,QAAQ,sBAAsB;GACzC,MAAM,WAAW,oBAAoB,aAAa,kBAAkB,GAAG;GACvE,MAAM,UAAU,mBAAmB,UAAU,mBAAmB,WAAW,IAAI,KAAK;AACpF,OAAI,mBAAmB,QAAQ,YAAa,KAAI;AAC/C,WAAO,KAAK,UAAU,QAAQ,UAAU,OAAO;YACvC,GAAG;AACX,WAAO,2BAA2B,KAAK,UAAU,OAAO,EAAE,CAAC,CAAC;;AAE7D,UAAO,KAAK,UAAU,QAAQ,UAAU,OAAO;;EAEhD,cAAc,SAAS,wBAAwB,KAAK,MAAM,SAAS,sBAAsB,YAAY,oBAAoB,GAAG,eAAe;EAC3I;;AAEF,MAAM,iBAAiB,OAAO,OAAO,gBAAgB,EAAE,EAAE,OAAO,YAAY,SAAS,eAAe,eAAe,SAAS,eAAe,UAAU,eAAe,SAAS,eAAe,QAAQ,GAAG,iBAAiB,CAAC;;;;ACjFzN,MAAM,oBAAoB,UAAU;AACnC,SAAQ,OAAR;EACC,KAAK;EACL,KAAK,QAAS,QAAO,QAAQ;EAC7B,KAAK,OAAQ,QAAO,QAAQ;EAC5B,KAAK,QAAS,QAAO,QAAQ;EAC7B,KAAK,QAAS,QAAO,QAAQ;EAC7B,QAAS,QAAO,QAAQ;;;AAG1B,MAAM,gBAAgB,OAAO,EAAE,QAAQ,UAAU;CAChD,MAAM,QAAQ,iBAAiB,MAAM,SAAS,MAAM;CACpD,MAAM,QAAQ,MAAM,KAAK,UAAU,MAAM,KAAK,cAAc,OAAO,KAAK,MAAM,KAAK,WAAW,CAAC,SAAS,MAAM,KAAK,aAAa,KAAK;AACrI,KAAI,MAAM,KAAK,SAAS,KAAK,KAAK,UAAU,KAAK,EAAG,OAAM,MAAM,KAAK,MAAM,MAAM;UACxE,MAAM,KAAK,SAAS,KAAK,EAAG,OAAM,MAAM,KAAK,KAAK;UAClD,UAAU,KAAK,EAAG,OAAM,MAAM;KAClC,OAAM,GAAG;GACZ,CAAC;;;;ACTJ,MAAa,oBAAoB;AACjC,MAAa,0BAA0B;AACvC,MAAa,yBAAyB;AACtC,MAAa,+BAA+B;AAE5C,MAAa,6BAA6B,GAAG,wBAAwB,GAAG,QAAQ,SAAS,UAAU,yBAAyB;AAS5H,MAAa,sCACX;CACE,oBAAoB;CACpB,UAAU;CACV,gBAAgB;CAChB,WAAW;CACZ;AAEH,IAAa,wBAAb,cAA2CA,gCAAiB;CAC1D,YACE,QAAQ,4BACR,UAAwC,qCACxC;AACA,QAAM,MAAM;EAEZ,MAAM,cAA2B;GAC/B,GAAI,CAAC,QAAQ,qBACT,EACE,4BAA4B,OAC7B,GACD,EAAE;GACN,GAAI,CAAC,QAAQ,WACT,EACE,qBAAqB,QACtB,GACD,EAAE;GACN,GAAI,QAAQ,iBACR;IACE,mBAAmB;IACnB,eAAe;IAChB,GACD,EAAE;GACN,yBAAyB;GACzB,uCAAuC;GACvC,sBAAsB,GAAG;GACzB,sCAAsC;GACvC;AAED,OAAK,gBAAgB,YAAY,CAAC,iBAAiB,kBAAkB;AAErE,MAAI,QAAQ,UAAW,MAAK,WAAW;AAEvC,OAAK,iBACHC,oBAAK,OAAO,CAACA,oBAAK,gBAAgB,EAAEA,oBAAK,mBAAmB,CAAC,CAAC,CAC/D;;CAGH,MAAM,QAA+C;AACnD,SAAO,IAAI,6BAA6B,MAAM,MAAM,OAAO,CAAC;;;AAIhE,IAAa,+BAAb,cAAkDC,wCAAyB;CACzE,YAAY,WAAiC;AAC3C,QAAM,UAAU;;CAGlB,sBAA8B;AAC5B,SAAO,UAAU,KAAK,SAAS,CAAC,GAAG,KAAK,cAAc,KAAK,CAAC;;CAG9D,YAAgC;AAC9B,SAAOC,yCAAmB,iBAAiB,KAAK,qBAAqB,CAAC;;;AAI1E,IAAI,YAA0C;AAC9C,IAAI,mBAAwD;AAC5D,IAAI,eAAe;AACnB,MAAM,mDAAsB;AAE5B,MAAa,2CACX,KAAK,YACH,YAAY;AACV,KAAI,iBAAkB,QAAO;AAE7B,KAAI,CAAC,UACH,aAAY,IAAI,sBAAsB,2BAA2B;AAEnE,oBAAmB,MAAM,UAAU,OAAO;AAC1C;AAEA,WAAU,iBAAiB,WACzB,OACG,GAAG,SAAS,SAAS,cAAc,SAAS,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC,CAChE,GAAG,QAAQ,SAAS,cAAc,SAAS,MAAM,OAAO,KAAK,CAAC,CAAC,CAAC,CAChE,GAAG,aAAa,cAAc,SAAS,KAAK,gBAAgB,CAAC,CAAC,CAClE;AAED,QAAO;GAET,EAAE,QAAQ,mCAAmC,CAC9C;AAEH,MAAa,kCAAkC,YAAY;AACzD,SAAQ,MAAM,oCAAoC,EAAE,WAAW;;AAGjE,MAAa,+CACX,KAAK,YACH,YAAY;CACV,MAAM,kBAAkB;AACxB,KAAI,mBAAmB,EAAE,iBAAiB,EACxC,KAAI;AACF,qBAAmB;AACnB,cAAY;AACZ,QAAM,gBAAgB,MAAM;SACtB;GAKZ,EAAE,QAAQ,mCAAmC,CAC9C;;;;ACrIH,IAAI;AAEJ,MAAa,4BAA4B,OACvC,oBAAoB,UACY;CAChC,IAAI;AAEJ,KAAI,mBAAmB;AACrB,MAAI,CAAC,cACH,iBAAgB,MAAM,IAAI,uBAAuB,CAAC,OAAO;AAE3D,qBAAmB,cAAc,qBAAqB;OAGtD,oBAAmB;AAKrB,QAAOC,yCAAmB,iBAAiB,iBAAiB;;;;;ACvB9D,MAAa,uBACX,UAA+B,EAAE,SAAS,SAAS,KAChD;AACH,QAAO,IAAIC,yCAAiB,SAAS,QAAQ,UAAU;;AAGzD,MAAa,6BAA6B,OACxC,UAA+B,EAAE,SAAS,SAAS,KAChD;AAEH,QADkB,oBAAoB,QACtB,CAAC,OAAO;;;;;ACV1B,MAAa,0BACX,UAA+B,EAAE,SAAS,QAAQ,KAC/C;AACH,QAAO,IAAIC,+CAAoB,YAAY,QAAQ,UAAU;;AAG/D,MAAa,gCAAgC,OAC3C,UAA+B,EAAE,SAAS,QAAQ,KAC/C;AAEH,QADkB,uBAAuB,QACzB,CAAC,OAAO"}
1
+ {"version":3,"file":"index.cjs","names":["GenericContainer","Wait","AbstractStartedContainer","EventStoreDBClient","EventStoreDBClient","MongoDBContainer","PostgreSqlContainer"],"sources":["../../almanac/dist/logger-DnrSjS8d.js","../../almanac/dist/spanLogEvent-ByQosuDu.js","../../almanac/dist/console-Bn5yW7XZ.js","../src/eventStore/eventStoreDBContainer.ts","../src/eventStore/index.ts","../src/mongodb/mongoDBContainer.ts","../src/postgresql/postgreSQLContainer.ts"],"sourcesContent":["//#region src/loggers/logger.ts\nconst LogLevel = {\n\tdefault: \"info\",\n\tsilent: \"silent\",\n\ttrace: \"trace\",\n\tdebug: \"debug\",\n\tinfo: \"info\",\n\twarn: \"warn\",\n\terror: \"error\",\n\tfatal: \"fatal\"\n};\nconst shouldLog = (logLevel, definedLogLevel) => {\n\tdefinedLogLevel ??= LogLevel.default;\n\tswitch (definedLogLevel) {\n\t\tcase \"fatal\": return logLevel === LogLevel.fatal;\n\t\tcase \"error\": return [LogLevel.fatal, LogLevel.error].includes(logLevel);\n\t\tcase \"warn\": return [\n\t\t\tLogLevel.fatal,\n\t\t\tLogLevel.error,\n\t\t\tLogLevel.warn\n\t\t].includes(logLevel);\n\t\tcase \"info\": return [\n\t\t\tLogLevel.fatal,\n\t\t\tLogLevel.error,\n\t\t\tLogLevel.warn,\n\t\t\tLogLevel.info\n\t\t].includes(logLevel);\n\t\tcase \"debug\": return [\n\t\t\tLogLevel.fatal,\n\t\t\tLogLevel.error,\n\t\t\tLogLevel.warn,\n\t\t\tLogLevel.info,\n\t\t\tLogLevel.debug\n\t\t].includes(logLevel);\n\t\tcase \"trace\": return [\n\t\t\tLogLevel.fatal,\n\t\t\tLogLevel.error,\n\t\t\tLogLevel.warn,\n\t\t\tLogLevel.info,\n\t\t\tLogLevel.debug,\n\t\t\tLogLevel.trace\n\t\t].includes(logLevel);\n\t\tcase \"silent\": return false;\n\t}\n};\nconst logEvent = (eventName, data, eventMetadata) => {\n\treturn {\n\t\tname: eventName,\n\t\tdata,\n\t\tmetadata: {\n\t\t\t...eventMetadata,\n\t\t\ttimestamp: eventMetadata.timestamp ?? Date.now()\n\t\t}\n\t};\n};\nconst message = (level, body, data, eventMetadata) => {\n\tif (data === void 0) return logEvent(body, { body }, {\n\t\tlevel,\n\t\t...eventMetadata\n\t});\n\tconst eventData = { body };\n\tif (data.error !== void 0) eventData.error = data.error;\n\tif (data.attributes !== void 0) eventData.attributes = data.attributes;\n\treturn logEvent(body, eventData, {\n\t\tlevel,\n\t\t...eventMetadata\n\t});\n};\nconst forLevel = (level) => (msgOrObj, msgOrMetadata, eventMetadata) => {\n\tif (typeof msgOrObj === \"string\") return logEvent(msgOrObj, { body: msgOrObj }, {\n\t\tlevel,\n\t\t...typeof msgOrMetadata === \"string\" ? eventMetadata : msgOrMetadata\n\t});\n\tconst msg = typeof msgOrMetadata === \"string\" ? msgOrMetadata : void 0;\n\tconst overrides = eventMetadata ?? (typeof msgOrMetadata === \"string\" ? void 0 : msgOrMetadata);\n\tif (msgOrObj instanceof Error) return logEvent(msg ?? \"\", {\n\t\terror: msgOrObj,\n\t\tbody: msg\n\t}, {\n\t\tlevel,\n\t\t...overrides\n\t});\n\tconst { eventName, ...attributes } = msgOrObj;\n\treturn logEvent(typeof eventName === \"string\" ? eventName : msg ?? \"\", {\n\t\tattributes,\n\t\tbody: msg\n\t}, {\n\t\tlevel,\n\t\t...overrides\n\t});\n};\nconst LogEvent = Object.assign(logEvent, {\n\tmessage,\n\tfatal: forLevel(\"fatal\"),\n\terror: forLevel(\"error\"),\n\twarn: forLevel(\"warn\"),\n\tinfo: forLevel(\"info\"),\n\tdebug: forLevel(\"debug\"),\n\ttrace: forLevel(\"trace\"),\n\tsilent: forLevel(\"silent\")\n});\nconst logger = (options) => {\n\tconst { event: sink, minLevel } = options;\n\treturn (event) => {\n\t\tif (event.metadata.level === \"silent\" || !shouldLog(event.metadata.level, minLevel)) return;\n\t\tsink(event);\n\t};\n};\nconst noopLogger = logger({ event: () => {} });\n\n//#endregion\nexport { shouldLog as a, noopLogger as i, LogLevel as n, logger as r, LogEvent as t };\n//# sourceMappingURL=logger-DnrSjS8d.js.map","import { i as noopLogger } from \"./logger-DnrSjS8d.js\";\n\n//#region src/serialization/json/jsonSerializer.ts\nconst bigIntReplacer = (_key, value) => {\n\treturn typeof value === \"bigint\" ? value.toString() : value;\n};\nconst dateReplacer = (_key, value) => {\n\treturn value instanceof Date ? value.toISOString() : value;\n};\nconst errorReplacer = (_key, value) => value instanceof Error ? {\n\ttype: value.constructor.name || \"error\",\n\tmessage: value.message,\n\tstack: value.stack\n} : value;\nconst isFirstLetterNumeric = (str) => {\n\tconst c = str.charCodeAt(0);\n\treturn c >= 48 && c <= 57;\n};\nconst isFirstLetterNumericOrMinus = (str) => {\n\tconst c = str.charCodeAt(0);\n\treturn c >= 48 && c <= 57 || c === 45;\n};\nconst bigIntReviver = (_key, value, context) => {\n\tif (typeof value === \"number\" && Number.isInteger(value) && !Number.isSafeInteger(value)) try {\n\t\treturn BigInt(context?.source ?? value.toString());\n\t} catch {\n\t\treturn value;\n\t}\n\tif (typeof value === \"string\" && value.length > 15) {\n\t\tif (isFirstLetterNumericOrMinus(value)) {\n\t\t\tconst num = Number(value);\n\t\t\tif (Number.isFinite(num) && !Number.isSafeInteger(num)) try {\n\t\t\t\treturn BigInt(value);\n\t\t\t} catch {}\n\t\t}\n\t}\n\treturn value;\n};\nconst dateReviver = (_key, value) => {\n\tif (typeof value === \"string\" && value.length === 24 && isFirstLetterNumeric(value) && value[10] === \"T\" && value[23] === \"Z\") {\n\t\tconst date = new Date(value);\n\t\tif (!isNaN(date.getTime())) return date;\n\t}\n\treturn value;\n};\nconst composeJSONReplacers = (...replacers) => {\n\tconst filteredReplacers = replacers.filter((r) => r !== void 0);\n\tif (filteredReplacers.length === 0) return void 0;\n\treturn (key, value) => filteredReplacers.reduce((accValue, replacer) => replacer(key, accValue), value);\n};\nconst composeJSONRevivers = (...revivers) => {\n\tconst filteredRevivers = revivers.filter((r) => r !== void 0);\n\tif (filteredRevivers.length === 0) return void 0;\n\treturn (key, value, context) => filteredRevivers.reduce((accValue, reviver) => reviver(key, accValue, context), value);\n};\nconst JSONReplacer = (opts) => composeJSONReplacers(opts?.replacer, opts?.failOnBigIntSerialization !== true ? JSONReplacers.bigInt : void 0, opts?.useDefaultDateSerialization !== true ? JSONReplacers.date : void 0, opts?.skipErrorSerialization !== true ? JSONReplacers.error : void 0);\nconst JSONReviver = (opts) => composeJSONRevivers(opts?.reviver, opts?.parseBigInts === true ? JSONRevivers.bigInt : void 0, opts?.parseDates === true ? JSONRevivers.date : void 0);\nconst JSONReplacers = {\n\tbigInt: bigIntReplacer,\n\tdate: dateReplacer,\n\terror: errorReplacer\n};\nconst JSONRevivers = {\n\tbigInt: bigIntReviver,\n\tdate: dateReviver\n};\nconst jsonSerializer = (options) => {\n\tconst defaultReplacer = JSONReplacer(options);\n\tconst defaultReviver = JSONReviver(options);\n\tconst defaultFormat = options?.format ?? \"compact\";\n\tconst defaultSafe = options?.safe ?? false;\n\treturn {\n\t\tserialize: (object, serializerOptions) => {\n\t\t\tconst replacer = serializerOptions ? JSONReplacer(serializerOptions) : defaultReplacer;\n\t\t\tconst indent = (serializerOptions?.format ?? defaultFormat) === \"pretty\" ? 2 : void 0;\n\t\t\tif (serializerOptions?.safe ?? defaultSafe) try {\n\t\t\t\treturn JSON.stringify(object, replacer, indent);\n\t\t\t} catch (e) {\n\t\t\t\treturn `{\"__serializationError\":${JSON.stringify(String(e))}}`;\n\t\t\t}\n\t\t\treturn JSON.stringify(object, replacer, indent);\n\t\t},\n\t\tdeserialize: (payload, deserializerOptions) => JSON.parse(payload, deserializerOptions ? JSONReviver(deserializerOptions) : defaultReviver)\n\t};\n};\nconst JSONSerializer = Object.assign(jsonSerializer(), { from: (options) => options?.serialization?.serializer ?? (options?.serialization?.options ? jsonSerializer(options?.serialization?.options) : JSONSerializer) });\n\n//#endregion\n//#region src/loggers/formatters/otelLogFormatter.ts\nconst SEVERITY_NUMBER = {\n\tsilent: 0,\n\ttrace: 1,\n\tdebug: 5,\n\tinfo: 9,\n\twarn: 13,\n\terror: 17,\n\tfatal: 21\n};\nconst severityNumberFor = (level) => SEVERITY_NUMBER[level];\nconst severityTextFor = (level) => level.toUpperCase();\nconst OtelLogFormatter = {\n\tformat: (event, options) => JSONSerializer.serialize(OtelLogFormatter.toOtelLog(event), options),\n\ttoOtelLog: ({ name: eventName, data, metadata }) => {\n\t\tconst attributes = { ...data.attributes ?? {} };\n\t\tif (data.error) {\n\t\t\tattributes[\"exception.type\"] = data.error.name;\n\t\t\tattributes[\"exception.message\"] = data.error.message;\n\t\t\tif (data.error.stack) attributes[\"exception.stacktrace\"] = data.error.stack;\n\t\t}\n\t\tconst log = {\n\t\t\ttimestamp: metadata.timestamp,\n\t\t\tseverityNumber: severityNumberFor(metadata.level),\n\t\t\tseverityText: severityTextFor(metadata.level)\n\t\t};\n\t\tif (eventName) log.eventName = eventName;\n\t\tif (metadata.traceId !== void 0) log.traceId = metadata.traceId;\n\t\tif (metadata.spanId !== void 0) log.spanId = metadata.spanId;\n\t\tif (data.body !== void 0) log.body = data.body;\n\t\tif (Object.keys(attributes).length) log.attributes = attributes;\n\t\treturn log;\n\t}\n};\n\n//#endregion\n//#region src/loggers/formatters/simpleFormatter.ts\nconst SimpleLogFormatter = { format: (event, _options) => {\n\tconst message = event.data.body ?? (event.name ? event.name : void 0);\n\treturn message !== void 0 ? `[${event.metadata.level}] ${message}` : `[${event.metadata.level}]`;\n} };\n\n//#endregion\n//#region src/tracers/span.ts\nconst noopSpan = {\n\tsetAttributes: () => {},\n\tspanContext: () => ({\n\t\ttraceId: \"\",\n\t\tspanId: \"\"\n\t}),\n\taddLink: () => {},\n\tlog: noopLogger\n};\n\n//#endregion\n//#region src/tracers/compositeTracer.ts\nconst compositeTracer = (...tracers) => ({ startSpan: async (name, fn, options) => {\n\tif (tracers.length === 0) return fn(noopSpan);\n\tconst nest = (index, collectedSpans) => {\n\t\tif (index >= tracers.length) return fn(compositeSpan(collectedSpans));\n\t\treturn tracers[index].startSpan(name, async (span) => nest(index + 1, [...collectedSpans, span]), options);\n\t};\n\treturn nest(0, []);\n} });\nconst compositeSpan = (spans) => ({\n\tsetAttributes: (attrs) => spans.forEach((s) => s.setAttributes(attrs)),\n\tspanContext: () => (spans[0] ?? noopSpan).spanContext(),\n\taddLink: (link) => spans.forEach((s) => s.addLink(link)),\n\tlog: (event) => spans.forEach((s) => s.log(event))\n});\n\n//#endregion\n//#region src/tracers/observabilityContextGenerator.ts\nconst randomHex = (bytes) => {\n\tconst arr = new Uint8Array(bytes);\n\tglobalThis.crypto.getRandomValues(arr);\n\treturn Array.from(arr, (b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n};\nconst defaultObservabilityContextGenerator = {\n\tgenerateTraceId: () => randomHex(16),\n\tgenerateSpanId: () => randomHex(8),\n\tgenerateMessageId: () => randomHex(16),\n\tgenerateCorrelationId: () => randomHex(16),\n\tgenerateCausationId: () => randomHex(16)\n};\n\n//#endregion\n//#region src/tracers/tracer.ts\nconst noTracing = { startSpan: async (_name, fn, _options) => fn(noopSpan) };\nconst noopTracer = () => noTracing;\n\n//#endregion\n//#region src/tracers/spanLogEvent.ts\nconst logEventForSpan = (event, context) => {\n\tconst traceId = event.metadata.traceId ?? context.traceId;\n\tconst spanId = event.metadata.spanId ?? context.spanId;\n\tif (traceId === event.metadata.traceId && spanId === event.metadata.spanId) return event;\n\tconst metadata = {\n\t\t...event.metadata,\n\t\ttraceId,\n\t\tspanId\n\t};\n\treturn {\n\t\tname: event.name,\n\t\tdata: event.data,\n\t\tmetadata\n\t};\n};\n\n//#endregion\nexport { noopSpan as a, severityTextFor as c, compositeTracer as i, JSONSerializer as l, noopTracer as n, SimpleLogFormatter as o, defaultObservabilityContextGenerator as r, OtelLogFormatter as s, logEventForSpan as t };\n//# sourceMappingURL=spanLogEvent-ByQosuDu.js.map","import { l as JSONSerializer, o as SimpleLogFormatter, r as defaultObservabilityContextGenerator, s as OtelLogFormatter, t as logEventForSpan } from \"./spanLogEvent-ByQosuDu.js\";\nimport { i as noopLogger, r as logger } from \"./logger-DnrSjS8d.js\";\n\n//#region src/providers/console/consoleLogger.ts\nconst consoleMethodFor = (level) => {\n\tswitch (level) {\n\t\tcase \"fatal\":\n\t\tcase \"error\": return console.error;\n\t\tcase \"warn\": return console.warn;\n\t\tcase \"debug\": return console.debug;\n\t\tcase \"trace\": return console.trace;\n\t\tdefault: return console.log;\n\t}\n};\nconst consoleLogger = logger({ event: (event) => {\n\tconst write = consoleMethodFor(event.metadata.level);\n\tconst extra = event.data.error ?? (event.data.attributes && Object.keys(event.data.attributes).length ? event.data.attributes : void 0);\n\tif (event.data.body !== void 0 && extra !== void 0) write(event.data.body, extra);\n\telse if (event.data.body !== void 0) write(event.data.body);\n\telse if (extra !== void 0) write(extra);\n\telse write(\"\");\n} });\n\n//#endregion\n//#region src/providers/console/consoleSpanLogSink.ts\nconst createConsoleSpanLogSink = (format) => {\n\tconst serializerOptions = {\n\t\tformat: format === \"simple\" || void 0 ? \"compact\" : format,\n\t\tsafe: true\n\t};\n\treturn format === \"simple\" ? (event) => console.log(SimpleLogFormatter.format(event, serializerOptions)) : (event) => console.log(OtelLogFormatter.format(event, serializerOptions));\n};\n\n//#endregion\n//#region src/providers/console/consoleSpanLogger.ts\nconst ConsoleFormat = {\n\tcompact: \"compact\",\n\tpretty: \"pretty\",\n\tSIMPLE: \"simple\"\n};\nconst consoleSpanLogger = (options) => logger({\n\tminLevel: options?.logLevel,\n\tevent: createConsoleSpanLogSink(options?.format)\n});\n\n//#endregion\n//#region src/providers/console/consoleTracer.ts\nconst consoleTracer = (options) => {\n\tconst mode = options?.mode ?? \"compact\";\n\tconst suppressLogs = options?.suppressLogs ?? false;\n\tconst contextGenerator = options?.contextGenerator ?? defaultObservabilityContextGenerator;\n\tconst sink = createConsoleSpanLogSink(mode);\n\tconst log = suppressLogs ? noopLogger : logger({\n\t\tminLevel: options?.logLevel,\n\t\tevent: sink\n\t});\n\treturn { startSpan: async (name, fn, spanOptions) => {\n\t\tconst traceId = contextGenerator.generateTraceId();\n\t\tconst spanId = contextGenerator.generateSpanId();\n\t\tconst context = {\n\t\t\ttraceId,\n\t\t\tspanId\n\t\t};\n\t\tconst startMs = Date.now();\n\t\tconst attributes = { ...spanOptions?.attributes };\n\t\tconst links = [...spanOptions?.links ?? []];\n\t\tconst span = {\n\t\t\tspanContext: () => context,\n\t\t\tsetAttributes: (attrs) => Object.assign(attributes, attrs),\n\t\t\taddLink: (link) => links.push(link),\n\t\t\tlog: (event) => log(logEventForSpan(event, context))\n\t\t};\n\t\tlet ok = true;\n\t\tlet spanError;\n\t\ttry {\n\t\t\treturn await fn(span);\n\t\t} catch (e) {\n\t\t\tok = false;\n\t\t\tspanError = e instanceof Error ? e : new Error(String(e));\n\t\t\tthrow e;\n\t\t} finally {\n\t\t\tconst durationMs = Date.now() - startMs;\n\t\t\tif (mode === \"simple\") console.log(`[span] ${name} (${durationMs}ms)${ok ? \"\" : \" [failed]\"}`);\n\t\t\telse {\n\t\t\t\tconst summary = {\n\t\t\t\t\tname,\n\t\t\t\t\ttraceId,\n\t\t\t\t\tspanId,\n\t\t\t\t\t...spanOptions?.parent?.spanId ? { parentSpanId: spanOptions.parent.spanId } : {},\n\t\t\t\t\tstartTimeUnixNano: (BigInt(startMs) * 1000000n).toString(),\n\t\t\t\t\tendTimeUnixNano: (BigInt(startMs + durationMs) * 1000000n).toString(),\n\t\t\t\t\tattributes,\n\t\t\t\t\tstatus: {\n\t\t\t\t\t\tcode: ok ? \"OK\" : \"ERROR\",\n\t\t\t\t\t\t...spanError !== void 0 ? { message: spanError.message } : {}\n\t\t\t\t\t},\n\t\t\t\t\tlinks\n\t\t\t\t};\n\t\t\t\tconsole.log(JSONSerializer.serialize(summary, {\n\t\t\t\t\tformat: mode === \"pretty\" ? \"pretty\" : \"compact\",\n\t\t\t\t\tsafe: true\n\t\t\t\t}));\n\t\t\t}\n\t\t}\n\t} };\n};\n\n//#endregion\nexport { consoleLogger as i, ConsoleFormat as n, consoleSpanLogger as r, consoleTracer as t };\n//# sourceMappingURL=console-Bn5yW7XZ.js.map","import { LogEvent } from '@event-driven-io/almanac';\nimport { consoleLogger } from '@event-driven-io/almanac/console';\nimport { InProcessLock } from '@event-driven-io/emmett';\nimport { EventStoreDBClient } from '@eventstore/db-client';\nimport {\n AbstractStartedContainer,\n GenericContainer,\n Wait,\n type StartedTestContainer,\n} from 'testcontainers';\nimport type { Environment } from 'testcontainers/build/types';\n\nexport const EVENTSTOREDB_PORT = 2113;\nexport const EVENTSTOREDB_IMAGE_NAME = 'eventstore/eventstore';\nexport const EVENTSTOREDB_IMAGE_TAG = '24.10.0-bookworm-slim';\nexport const EVENTSTOREDB_ARM64_IMAGE_TAG = '24.10.0-alpha-arm64v8';\n\nexport const EVENTSTOREDB_DEFAULT_IMAGE = `${EVENTSTOREDB_IMAGE_NAME}:${process.arch !== 'arm64' ? EVENTSTOREDB_IMAGE_TAG : EVENTSTOREDB_ARM64_IMAGE_TAG}`;\n\nexport type EventStoreDBContainerOptions = {\n disableProjections?: boolean;\n isSecure?: boolean;\n useFileStorage?: boolean;\n withReuse?: boolean;\n};\n\nexport const defaultEventStoreDBContainerOptions: EventStoreDBContainerOptions =\n {\n disableProjections: false,\n isSecure: false,\n useFileStorage: false,\n withReuse: false,\n };\n\nexport class EventStoreDBContainer extends GenericContainer {\n constructor(\n image = EVENTSTOREDB_DEFAULT_IMAGE,\n options: EventStoreDBContainerOptions = defaultEventStoreDBContainerOptions,\n ) {\n super(image);\n\n const environment: Environment = {\n ...(!options.disableProjections\n ? {\n EVENTSTORE_RUN_PROJECTIONS: 'ALL',\n }\n : {}),\n ...(!options.isSecure\n ? {\n EVENTSTORE_INSECURE: 'true',\n }\n : {}),\n ...(options.useFileStorage\n ? {\n EVENTSTORE_MEM_DB: 'false',\n EVENTSTORE_DB: '/data/integration-tests',\n }\n : {}),\n EVENTSTORE_CLUSTER_SIZE: '1',\n EVENTSTORE_START_STANDARD_PROJECTIONS: 'true',\n EVENTSTORE_NODE_PORT: `${EVENTSTOREDB_PORT}`,\n EVENTSTORE_ENABLE_ATOM_PUB_OVER_HTTP: 'true',\n };\n\n this.withEnvironment(environment).withExposedPorts(EVENTSTOREDB_PORT);\n\n if (options.withReuse) this.withReuse();\n\n this.withWaitStrategy(\n Wait.forAll([Wait.forHealthCheck(), Wait.forListeningPorts()]),\n );\n }\n\n async start(): Promise<StartedEventStoreDBContainer> {\n return new StartedEventStoreDBContainer(await super.start());\n }\n}\n\nexport class StartedEventStoreDBContainer extends AbstractStartedContainer {\n constructor(container: StartedTestContainer) {\n super(container);\n }\n\n getConnectionString(): string {\n return `esdb://${this.getHost()}:${this.getMappedPort(2113)}?tls=false`;\n }\n\n getClient(): EventStoreDBClient {\n return EventStoreDBClient.connectionString(this.getConnectionString());\n }\n}\n\nlet container: EventStoreDBContainer | null = null;\nlet startedContainer: StartedEventStoreDBContainer | null = null;\nlet startedCount = 0;\nconst lock = InProcessLock();\n\nexport const getSharedEventStoreDBTestContainer = () =>\n lock.withAcquire(\n async () => {\n if (startedContainer) return startedContainer;\n\n if (!container)\n container = new EventStoreDBContainer(EVENTSTOREDB_DEFAULT_IMAGE);\n\n startedContainer = await container.start();\n startedCount++;\n\n container.withLogConsumer((stream) =>\n stream\n .on('data', (line) => consoleLogger(LogEvent.info(String(line))))\n .on('err', (line) => consoleLogger(LogEvent.error(String(line))))\n .on('end', () => consoleLogger(LogEvent.info('Stream closed'))),\n );\n\n return startedContainer;\n },\n { lockId: 'SharedEventStoreDBTestContainer' },\n );\n\nexport const getSharedTestEventStoreDBClient = async () => {\n return (await getSharedEventStoreDBTestContainer()).getClient();\n};\n\nexport const releaseSharedEventStoreDBTestContainer = () =>\n lock.withAcquire(\n async () => {\n const containerToStop = startedContainer;\n if (containerToStop && --startedCount === 0) {\n try {\n startedContainer = null;\n container = null;\n await containerToStop.stop();\n } catch {\n /* do nothing */\n }\n }\n },\n { lockId: 'SharedEventStoreDBTestContainer' },\n );\n","import { EventStoreDBClient } from '@eventstore/db-client';\nimport type { StartedEventStoreDBContainer } from './eventStoreDBContainer';\nimport { EventStoreDBContainer } from './eventStoreDBContainer';\n\nexport * from './eventStoreDBContainer';\n\nlet esdbContainer: StartedEventStoreDBContainer;\n\nexport const getEventStoreDBTestClient = async (\n useTestContainers = false,\n): Promise<EventStoreDBClient> => {\n let connectionString;\n\n if (useTestContainers) {\n if (!esdbContainer)\n esdbContainer = await new EventStoreDBContainer().start();\n\n connectionString = esdbContainer.getConnectionString();\n } else {\n // await compose.upAll();\n connectionString = 'esdb://localhost:2113?tls=false';\n }\n\n // That's how EventStoreDB client is setup\n // We're taking the connection string from container\n return EventStoreDBClient.connectionString(connectionString);\n};\n","import { MongoDBContainer } from '@testcontainers/mongodb';\n\nexport const getMongoDBContainer = (\n options: { version: string } = { version: '6.0.1' },\n) => {\n return new MongoDBContainer(`mongo:${options.version}`);\n};\n\nexport const getMongoDBStartedContainer = async (\n options: { version: string } = { version: '6.0.1' },\n) => {\n const container = getMongoDBContainer(options);\n return container.start();\n};\n","import { PostgreSqlContainer } from '@testcontainers/postgresql';\n\nexport const getPostgreSQLContainer = (\n options: { version: string } = { version: '18.1' },\n) => {\n return new PostgreSqlContainer(`postgres:${options.version}`);\n};\n\nexport const getPostgreSQLStartedContainer = async (\n options: { version: string } = { version: '18.1' },\n) => {\n const container = getPostgreSQLContainer(options);\n return container.start();\n};\n"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -115,7 +115,7 @@ const logger = (options) => {
115
115
  const noopLogger = logger({ event: () => {} });
116
116
 
117
117
  //#endregion
118
- //#region ../almanac/dist/spanLogEvent-DxTi1Li5.js
118
+ //#region ../almanac/dist/spanLogEvent-ByQosuDu.js
119
119
  const bigIntReplacer = (_key, value) => {
120
120
  return typeof value === "bigint" ? value.toString() : value;
121
121
  };
@@ -201,7 +201,7 @@ const jsonSerializer = (options) => {
201
201
  const JSONSerializer = Object.assign(jsonSerializer(), { from: (options) => options?.serialization?.serializer ?? (options?.serialization?.options ? jsonSerializer(options?.serialization?.options) : JSONSerializer) });
202
202
 
203
203
  //#endregion
204
- //#region ../almanac/dist/console-DQ8X0Jo1.js
204
+ //#region ../almanac/dist/console-Bn5yW7XZ.js
205
205
  const consoleMethodFor = (level) => {
206
206
  switch (level) {
207
207
  case "fatal":
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../almanac/dist/logger-DnrSjS8d.js","../../almanac/dist/spanLogEvent-DxTi1Li5.js","../../almanac/dist/console-DQ8X0Jo1.js","../src/eventStore/eventStoreDBContainer.ts","../src/eventStore/index.ts","../src/mongodb/mongoDBContainer.ts","../src/postgresql/postgreSQLContainer.ts"],"sourcesContent":["//#region src/loggers/logger.ts\nconst LogLevel = {\n\tdefault: \"info\",\n\tsilent: \"silent\",\n\ttrace: \"trace\",\n\tdebug: \"debug\",\n\tinfo: \"info\",\n\twarn: \"warn\",\n\terror: \"error\",\n\tfatal: \"fatal\"\n};\nconst shouldLog = (logLevel, definedLogLevel) => {\n\tdefinedLogLevel ??= LogLevel.default;\n\tswitch (definedLogLevel) {\n\t\tcase \"fatal\": return logLevel === LogLevel.fatal;\n\t\tcase \"error\": return [LogLevel.fatal, LogLevel.error].includes(logLevel);\n\t\tcase \"warn\": return [\n\t\t\tLogLevel.fatal,\n\t\t\tLogLevel.error,\n\t\t\tLogLevel.warn\n\t\t].includes(logLevel);\n\t\tcase \"info\": return [\n\t\t\tLogLevel.fatal,\n\t\t\tLogLevel.error,\n\t\t\tLogLevel.warn,\n\t\t\tLogLevel.info\n\t\t].includes(logLevel);\n\t\tcase \"debug\": return [\n\t\t\tLogLevel.fatal,\n\t\t\tLogLevel.error,\n\t\t\tLogLevel.warn,\n\t\t\tLogLevel.info,\n\t\t\tLogLevel.debug\n\t\t].includes(logLevel);\n\t\tcase \"trace\": return [\n\t\t\tLogLevel.fatal,\n\t\t\tLogLevel.error,\n\t\t\tLogLevel.warn,\n\t\t\tLogLevel.info,\n\t\t\tLogLevel.debug,\n\t\t\tLogLevel.trace\n\t\t].includes(logLevel);\n\t\tcase \"silent\": return false;\n\t}\n};\nconst logEvent = (eventName, data, eventMetadata) => {\n\treturn {\n\t\tname: eventName,\n\t\tdata,\n\t\tmetadata: {\n\t\t\t...eventMetadata,\n\t\t\ttimestamp: eventMetadata.timestamp ?? Date.now()\n\t\t}\n\t};\n};\nconst message = (level, body, data, eventMetadata) => {\n\tif (data === void 0) return logEvent(body, { body }, {\n\t\tlevel,\n\t\t...eventMetadata\n\t});\n\tconst eventData = { body };\n\tif (data.error !== void 0) eventData.error = data.error;\n\tif (data.attributes !== void 0) eventData.attributes = data.attributes;\n\treturn logEvent(body, eventData, {\n\t\tlevel,\n\t\t...eventMetadata\n\t});\n};\nconst forLevel = (level) => (msgOrObj, msgOrMetadata, eventMetadata) => {\n\tif (typeof msgOrObj === \"string\") return logEvent(msgOrObj, { body: msgOrObj }, {\n\t\tlevel,\n\t\t...typeof msgOrMetadata === \"string\" ? eventMetadata : msgOrMetadata\n\t});\n\tconst msg = typeof msgOrMetadata === \"string\" ? msgOrMetadata : void 0;\n\tconst overrides = eventMetadata ?? (typeof msgOrMetadata === \"string\" ? void 0 : msgOrMetadata);\n\tif (msgOrObj instanceof Error) return logEvent(msg ?? \"\", {\n\t\terror: msgOrObj,\n\t\tbody: msg\n\t}, {\n\t\tlevel,\n\t\t...overrides\n\t});\n\tconst { eventName, ...attributes } = msgOrObj;\n\treturn logEvent(typeof eventName === \"string\" ? eventName : msg ?? \"\", {\n\t\tattributes,\n\t\tbody: msg\n\t}, {\n\t\tlevel,\n\t\t...overrides\n\t});\n};\nconst LogEvent = Object.assign(logEvent, {\n\tmessage,\n\tfatal: forLevel(\"fatal\"),\n\terror: forLevel(\"error\"),\n\twarn: forLevel(\"warn\"),\n\tinfo: forLevel(\"info\"),\n\tdebug: forLevel(\"debug\"),\n\ttrace: forLevel(\"trace\"),\n\tsilent: forLevel(\"silent\")\n});\nconst logger = (options) => {\n\tconst { event: sink, minLevel } = options;\n\treturn (event) => {\n\t\tif (event.metadata.level === \"silent\" || !shouldLog(event.metadata.level, minLevel)) return;\n\t\tsink(event);\n\t};\n};\nconst noopLogger = logger({ event: () => {} });\n\n//#endregion\nexport { shouldLog as a, noopLogger as i, LogLevel as n, logger as r, LogEvent as t };\n//# sourceMappingURL=logger-DnrSjS8d.js.map","import { i as noopLogger } from \"./logger-DnrSjS8d.js\";\n\n//#region src/serialization/json/jsonSerializer.ts\nconst bigIntReplacer = (_key, value) => {\n\treturn typeof value === \"bigint\" ? value.toString() : value;\n};\nconst dateReplacer = (_key, value) => {\n\treturn value instanceof Date ? value.toISOString() : value;\n};\nconst errorReplacer = (_key, value) => value instanceof Error ? {\n\ttype: value.constructor.name || \"error\",\n\tmessage: value.message,\n\tstack: value.stack\n} : value;\nconst isFirstLetterNumeric = (str) => {\n\tconst c = str.charCodeAt(0);\n\treturn c >= 48 && c <= 57;\n};\nconst isFirstLetterNumericOrMinus = (str) => {\n\tconst c = str.charCodeAt(0);\n\treturn c >= 48 && c <= 57 || c === 45;\n};\nconst bigIntReviver = (_key, value, context) => {\n\tif (typeof value === \"number\" && Number.isInteger(value) && !Number.isSafeInteger(value)) try {\n\t\treturn BigInt(context?.source ?? value.toString());\n\t} catch {\n\t\treturn value;\n\t}\n\tif (typeof value === \"string\" && value.length > 15) {\n\t\tif (isFirstLetterNumericOrMinus(value)) {\n\t\t\tconst num = Number(value);\n\t\t\tif (Number.isFinite(num) && !Number.isSafeInteger(num)) try {\n\t\t\t\treturn BigInt(value);\n\t\t\t} catch {}\n\t\t}\n\t}\n\treturn value;\n};\nconst dateReviver = (_key, value) => {\n\tif (typeof value === \"string\" && value.length === 24 && isFirstLetterNumeric(value) && value[10] === \"T\" && value[23] === \"Z\") {\n\t\tconst date = new Date(value);\n\t\tif (!isNaN(date.getTime())) return date;\n\t}\n\treturn value;\n};\nconst composeJSONReplacers = (...replacers) => {\n\tconst filteredReplacers = replacers.filter((r) => r !== void 0);\n\tif (filteredReplacers.length === 0) return void 0;\n\treturn (key, value) => filteredReplacers.reduce((accValue, replacer) => replacer(key, accValue), value);\n};\nconst composeJSONRevivers = (...revivers) => {\n\tconst filteredRevivers = revivers.filter((r) => r !== void 0);\n\tif (filteredRevivers.length === 0) return void 0;\n\treturn (key, value, context) => filteredRevivers.reduce((accValue, reviver) => reviver(key, accValue, context), value);\n};\nconst JSONReplacer = (opts) => composeJSONReplacers(opts?.replacer, opts?.failOnBigIntSerialization !== true ? JSONReplacers.bigInt : void 0, opts?.useDefaultDateSerialization !== true ? JSONReplacers.date : void 0, opts?.skipErrorSerialization !== true ? JSONReplacers.error : void 0);\nconst JSONReviver = (opts) => composeJSONRevivers(opts?.reviver, opts?.parseBigInts === true ? JSONRevivers.bigInt : void 0, opts?.parseDates === true ? JSONRevivers.date : void 0);\nconst JSONReplacers = {\n\tbigInt: bigIntReplacer,\n\tdate: dateReplacer,\n\terror: errorReplacer\n};\nconst JSONRevivers = {\n\tbigInt: bigIntReviver,\n\tdate: dateReviver\n};\nconst jsonSerializer = (options) => {\n\tconst defaultReplacer = JSONReplacer(options);\n\tconst defaultReviver = JSONReviver(options);\n\tconst defaultFormat = options?.format ?? \"compact\";\n\tconst defaultSafe = options?.safe ?? false;\n\treturn {\n\t\tserialize: (object, serializerOptions) => {\n\t\t\tconst replacer = serializerOptions ? JSONReplacer(serializerOptions) : defaultReplacer;\n\t\t\tconst indent = (serializerOptions?.format ?? defaultFormat) === \"pretty\" ? 2 : void 0;\n\t\t\tif (serializerOptions?.safe ?? defaultSafe) try {\n\t\t\t\treturn JSON.stringify(object, replacer, indent);\n\t\t\t} catch (e) {\n\t\t\t\treturn `{\"__serializationError\":${JSON.stringify(String(e))}}`;\n\t\t\t}\n\t\t\treturn JSON.stringify(object, replacer, indent);\n\t\t},\n\t\tdeserialize: (payload, deserializerOptions) => JSON.parse(payload, deserializerOptions ? JSONReviver(deserializerOptions) : defaultReviver)\n\t};\n};\nconst JSONSerializer = Object.assign(jsonSerializer(), { from: (options) => options?.serialization?.serializer ?? (options?.serialization?.options ? jsonSerializer(options?.serialization?.options) : JSONSerializer) });\n\n//#endregion\n//#region src/loggers/formatters/otelLogFormatter.ts\nconst SEVERITY_NUMBER = {\n\tsilent: 0,\n\ttrace: 1,\n\tdebug: 5,\n\tinfo: 9,\n\twarn: 13,\n\terror: 17,\n\tfatal: 21\n};\nconst severityNumberFor = (level) => SEVERITY_NUMBER[level];\nconst severityTextFor = (level) => level.toUpperCase();\nconst OtelLogFormatter = {\n\tformat: (event, options) => JSONSerializer.serialize(OtelLogFormatter.toOtelLog(event), options),\n\ttoOtelLog: ({ name: eventName, data, metadata }) => {\n\t\tconst attributes = { ...data.attributes ?? {} };\n\t\tif (data.error) {\n\t\t\tattributes[\"exception.type\"] = data.error.name;\n\t\t\tattributes[\"exception.message\"] = data.error.message;\n\t\t\tif (data.error.stack) attributes[\"exception.stacktrace\"] = data.error.stack;\n\t\t}\n\t\tconst log = {\n\t\t\ttimestamp: metadata.timestamp,\n\t\t\tseverityNumber: severityNumberFor(metadata.level),\n\t\t\tseverityText: severityTextFor(metadata.level)\n\t\t};\n\t\tif (eventName) log.eventName = eventName;\n\t\tif (metadata.traceId !== void 0) log.traceId = metadata.traceId;\n\t\tif (metadata.spanId !== void 0) log.spanId = metadata.spanId;\n\t\tif (data.body !== void 0) log.body = data.body;\n\t\tif (Object.keys(attributes).length) log.attributes = attributes;\n\t\treturn log;\n\t}\n};\n\n//#endregion\n//#region src/loggers/formatters/simpleFormatter.ts\nconst SimpleLogFormatter = { format: (event, _options) => {\n\tconst message = event.data.body ?? (event.name ? event.name : void 0);\n\treturn message !== void 0 ? `[${event.metadata.level}] ${message}` : `[${event.metadata.level}]`;\n} };\n\n//#endregion\n//#region src/tracers/span.ts\nconst noopSpan = {\n\tsetAttributes: () => {},\n\tspanContext: () => ({\n\t\ttraceId: \"\",\n\t\tspanId: \"\"\n\t}),\n\taddLink: () => {},\n\tlog: noopLogger\n};\n\n//#endregion\n//#region src/tracers/compositeTracer.ts\nconst compositeTracer = (...tracers) => ({ startSpan: async (name, fn, options) => {\n\tif (tracers.length === 0) return fn(noopSpan);\n\tconst nest = (index, collectedSpans) => {\n\t\tif (index >= tracers.length) return fn(compositeSpan(collectedSpans));\n\t\treturn tracers[index].startSpan(name, async (span) => nest(index + 1, [...collectedSpans, span]), options);\n\t};\n\treturn nest(0, []);\n} });\nconst compositeSpan = (spans) => ({\n\tsetAttributes: (attrs) => spans.forEach((s) => s.setAttributes(attrs)),\n\tspanContext: () => (spans[0] ?? noopSpan).spanContext(),\n\taddLink: (link) => spans.forEach((s) => s.addLink(link)),\n\tlog: (event) => spans.forEach((s) => s.log(event))\n});\n\n//#endregion\n//#region src/tracers/traceContextGenerator.ts\nconst randomHex = (bytes) => {\n\tconst arr = new Uint8Array(bytes);\n\tglobalThis.crypto.getRandomValues(arr);\n\treturn Array.from(arr, (b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n};\nconst defaultTraceContextGenerator = {\n\tgenerateTraceId: () => randomHex(16),\n\tgenerateSpanId: () => randomHex(8)\n};\n\n//#endregion\n//#region src/tracers/tracer.ts\nconst noTracing = { startSpan: async (_name, fn, _options) => fn(noopSpan) };\nconst noopTracer = () => noTracing;\n\n//#endregion\n//#region src/tracers/spanLogEvent.ts\nconst logEventForSpan = (event, context) => {\n\tconst traceId = event.metadata.traceId ?? context.traceId;\n\tconst spanId = event.metadata.spanId ?? context.spanId;\n\tif (traceId === event.metadata.traceId && spanId === event.metadata.spanId) return event;\n\tconst metadata = {\n\t\t...event.metadata,\n\t\ttraceId,\n\t\tspanId\n\t};\n\treturn {\n\t\tname: event.name,\n\t\tdata: event.data,\n\t\tmetadata\n\t};\n};\n\n//#endregion\nexport { noopSpan as a, severityTextFor as c, compositeTracer as i, JSONSerializer as l, noopTracer as n, SimpleLogFormatter as o, defaultTraceContextGenerator as r, OtelLogFormatter as s, logEventForSpan as t };\n//# sourceMappingURL=spanLogEvent-DxTi1Li5.js.map","import { l as JSONSerializer, o as SimpleLogFormatter, r as defaultTraceContextGenerator, s as OtelLogFormatter, t as logEventForSpan } from \"./spanLogEvent-DxTi1Li5.js\";\nimport { i as noopLogger, r as logger } from \"./logger-DnrSjS8d.js\";\n\n//#region src/providers/console/consoleLogger.ts\nconst consoleMethodFor = (level) => {\n\tswitch (level) {\n\t\tcase \"fatal\":\n\t\tcase \"error\": return console.error;\n\t\tcase \"warn\": return console.warn;\n\t\tcase \"debug\": return console.debug;\n\t\tcase \"trace\": return console.trace;\n\t\tdefault: return console.log;\n\t}\n};\nconst consoleLogger = logger({ event: (event) => {\n\tconst write = consoleMethodFor(event.metadata.level);\n\tconst extra = event.data.error ?? (event.data.attributes && Object.keys(event.data.attributes).length ? event.data.attributes : void 0);\n\tif (event.data.body !== void 0 && extra !== void 0) write(event.data.body, extra);\n\telse if (event.data.body !== void 0) write(event.data.body);\n\telse if (extra !== void 0) write(extra);\n\telse write(\"\");\n} });\n\n//#endregion\n//#region src/providers/console/consoleSpanLogSink.ts\nconst createConsoleSpanLogSink = (format) => {\n\tconst serializerOptions = {\n\t\tformat: format === \"simple\" || void 0 ? \"compact\" : format,\n\t\tsafe: true\n\t};\n\treturn format === \"simple\" ? (event) => console.log(SimpleLogFormatter.format(event, serializerOptions)) : (event) => console.log(OtelLogFormatter.format(event, serializerOptions));\n};\n\n//#endregion\n//#region src/providers/console/consoleSpanLogger.ts\nconst ConsoleFormat = {\n\tcompact: \"compact\",\n\tpretty: \"pretty\",\n\tSIMPLE: \"simple\"\n};\nconst consoleSpanLogger = (options) => logger({\n\tminLevel: options?.logLevel,\n\tevent: createConsoleSpanLogSink(options?.format)\n});\n\n//#endregion\n//#region src/providers/console/consoleTracer.ts\nconst consoleTracer = (options) => {\n\tconst mode = options?.mode ?? \"compact\";\n\tconst suppressLogs = options?.suppressLogs ?? false;\n\tconst traceContextGenerator = options?.traceContextGenerator ?? defaultTraceContextGenerator;\n\tconst sink = createConsoleSpanLogSink(mode);\n\tconst log = suppressLogs ? noopLogger : logger({\n\t\tminLevel: options?.logLevel,\n\t\tevent: sink\n\t});\n\treturn { startSpan: async (name, fn, spanOptions) => {\n\t\tconst traceId = traceContextGenerator.generateTraceId();\n\t\tconst spanId = traceContextGenerator.generateSpanId();\n\t\tconst context = {\n\t\t\ttraceId,\n\t\t\tspanId\n\t\t};\n\t\tconst startMs = Date.now();\n\t\tconst attributes = { ...spanOptions?.attributes };\n\t\tconst links = [...spanOptions?.links ?? []];\n\t\tconst span = {\n\t\t\tspanContext: () => context,\n\t\t\tsetAttributes: (attrs) => Object.assign(attributes, attrs),\n\t\t\taddLink: (link) => links.push(link),\n\t\t\tlog: (event) => log(logEventForSpan(event, context))\n\t\t};\n\t\tlet ok = true;\n\t\tlet spanError;\n\t\ttry {\n\t\t\treturn await fn(span);\n\t\t} catch (e) {\n\t\t\tok = false;\n\t\t\tspanError = e instanceof Error ? e : new Error(String(e));\n\t\t\tthrow e;\n\t\t} finally {\n\t\t\tconst durationMs = Date.now() - startMs;\n\t\t\tif (mode === \"simple\") console.log(`[span] ${name} (${durationMs}ms)${ok ? \"\" : \" [failed]\"}`);\n\t\t\telse {\n\t\t\t\tconst summary = {\n\t\t\t\t\tname,\n\t\t\t\t\ttraceId,\n\t\t\t\t\tspanId,\n\t\t\t\t\t...spanOptions?.parent?.spanId ? { parentSpanId: spanOptions.parent.spanId } : {},\n\t\t\t\t\tstartTimeUnixNano: (BigInt(startMs) * 1000000n).toString(),\n\t\t\t\t\tendTimeUnixNano: (BigInt(startMs + durationMs) * 1000000n).toString(),\n\t\t\t\t\tattributes,\n\t\t\t\t\tstatus: {\n\t\t\t\t\t\tcode: ok ? \"OK\" : \"ERROR\",\n\t\t\t\t\t\t...spanError !== void 0 ? { message: spanError.message } : {}\n\t\t\t\t\t},\n\t\t\t\t\tlinks\n\t\t\t\t};\n\t\t\t\tconsole.log(JSONSerializer.serialize(summary, {\n\t\t\t\t\tformat: mode === \"pretty\" ? \"pretty\" : \"compact\",\n\t\t\t\t\tsafe: true\n\t\t\t\t}));\n\t\t\t}\n\t\t}\n\t} };\n};\n\n//#endregion\nexport { consoleLogger as i, ConsoleFormat as n, consoleSpanLogger as r, consoleTracer as t };\n//# sourceMappingURL=console-DQ8X0Jo1.js.map","import { LogEvent } from '@event-driven-io/almanac';\nimport { consoleLogger } from '@event-driven-io/almanac/console';\nimport { InProcessLock } from '@event-driven-io/emmett';\nimport { EventStoreDBClient } from '@eventstore/db-client';\nimport {\n AbstractStartedContainer,\n GenericContainer,\n Wait,\n type StartedTestContainer,\n} from 'testcontainers';\nimport type { Environment } from 'testcontainers/build/types';\n\nexport const EVENTSTOREDB_PORT = 2113;\nexport const EVENTSTOREDB_IMAGE_NAME = 'eventstore/eventstore';\nexport const EVENTSTOREDB_IMAGE_TAG = '24.10.0-bookworm-slim';\nexport const EVENTSTOREDB_ARM64_IMAGE_TAG = '24.10.0-alpha-arm64v8';\n\nexport const EVENTSTOREDB_DEFAULT_IMAGE = `${EVENTSTOREDB_IMAGE_NAME}:${process.arch !== 'arm64' ? EVENTSTOREDB_IMAGE_TAG : EVENTSTOREDB_ARM64_IMAGE_TAG}`;\n\nexport type EventStoreDBContainerOptions = {\n disableProjections?: boolean;\n isSecure?: boolean;\n useFileStorage?: boolean;\n withReuse?: boolean;\n};\n\nexport const defaultEventStoreDBContainerOptions: EventStoreDBContainerOptions =\n {\n disableProjections: false,\n isSecure: false,\n useFileStorage: false,\n withReuse: false,\n };\n\nexport class EventStoreDBContainer extends GenericContainer {\n constructor(\n image = EVENTSTOREDB_DEFAULT_IMAGE,\n options: EventStoreDBContainerOptions = defaultEventStoreDBContainerOptions,\n ) {\n super(image);\n\n const environment: Environment = {\n ...(!options.disableProjections\n ? {\n EVENTSTORE_RUN_PROJECTIONS: 'ALL',\n }\n : {}),\n ...(!options.isSecure\n ? {\n EVENTSTORE_INSECURE: 'true',\n }\n : {}),\n ...(options.useFileStorage\n ? {\n EVENTSTORE_MEM_DB: 'false',\n EVENTSTORE_DB: '/data/integration-tests',\n }\n : {}),\n EVENTSTORE_CLUSTER_SIZE: '1',\n EVENTSTORE_START_STANDARD_PROJECTIONS: 'true',\n EVENTSTORE_NODE_PORT: `${EVENTSTOREDB_PORT}`,\n EVENTSTORE_ENABLE_ATOM_PUB_OVER_HTTP: 'true',\n };\n\n this.withEnvironment(environment).withExposedPorts(EVENTSTOREDB_PORT);\n\n if (options.withReuse) this.withReuse();\n\n this.withWaitStrategy(\n Wait.forAll([Wait.forHealthCheck(), Wait.forListeningPorts()]),\n );\n }\n\n async start(): Promise<StartedEventStoreDBContainer> {\n return new StartedEventStoreDBContainer(await super.start());\n }\n}\n\nexport class StartedEventStoreDBContainer extends AbstractStartedContainer {\n constructor(container: StartedTestContainer) {\n super(container);\n }\n\n getConnectionString(): string {\n return `esdb://${this.getHost()}:${this.getMappedPort(2113)}?tls=false`;\n }\n\n getClient(): EventStoreDBClient {\n return EventStoreDBClient.connectionString(this.getConnectionString());\n }\n}\n\nlet container: EventStoreDBContainer | null = null;\nlet startedContainer: StartedEventStoreDBContainer | null = null;\nlet startedCount = 0;\nconst lock = InProcessLock();\n\nexport const getSharedEventStoreDBTestContainer = () =>\n lock.withAcquire(\n async () => {\n if (startedContainer) return startedContainer;\n\n if (!container)\n container = new EventStoreDBContainer(EVENTSTOREDB_DEFAULT_IMAGE);\n\n startedContainer = await container.start();\n startedCount++;\n\n container.withLogConsumer((stream) =>\n stream\n .on('data', (line) => consoleLogger(LogEvent.info(String(line))))\n .on('err', (line) => consoleLogger(LogEvent.error(String(line))))\n .on('end', () => consoleLogger(LogEvent.info('Stream closed'))),\n );\n\n return startedContainer;\n },\n { lockId: 'SharedEventStoreDBTestContainer' },\n );\n\nexport const getSharedTestEventStoreDBClient = async () => {\n return (await getSharedEventStoreDBTestContainer()).getClient();\n};\n\nexport const releaseSharedEventStoreDBTestContainer = () =>\n lock.withAcquire(\n async () => {\n const containerToStop = startedContainer;\n if (containerToStop && --startedCount === 0) {\n try {\n startedContainer = null;\n container = null;\n await containerToStop.stop();\n } catch {\n /* do nothing */\n }\n }\n },\n { lockId: 'SharedEventStoreDBTestContainer' },\n );\n","import { EventStoreDBClient } from '@eventstore/db-client';\nimport type { StartedEventStoreDBContainer } from './eventStoreDBContainer';\nimport { EventStoreDBContainer } from './eventStoreDBContainer';\n\nexport * from './eventStoreDBContainer';\n\nlet esdbContainer: StartedEventStoreDBContainer;\n\nexport const getEventStoreDBTestClient = async (\n useTestContainers = false,\n): Promise<EventStoreDBClient> => {\n let connectionString;\n\n if (useTestContainers) {\n if (!esdbContainer)\n esdbContainer = await new EventStoreDBContainer().start();\n\n connectionString = esdbContainer.getConnectionString();\n } else {\n // await compose.upAll();\n connectionString = 'esdb://localhost:2113?tls=false';\n }\n\n // That's how EventStoreDB client is setup\n // We're taking the connection string from container\n return EventStoreDBClient.connectionString(connectionString);\n};\n","import { MongoDBContainer } from '@testcontainers/mongodb';\n\nexport const getMongoDBContainer = (\n options: { version: string } = { version: '6.0.1' },\n) => {\n return new MongoDBContainer(`mongo:${options.version}`);\n};\n\nexport const getMongoDBStartedContainer = async (\n options: { version: string } = { version: '6.0.1' },\n) => {\n const container = getMongoDBContainer(options);\n return container.start();\n};\n","import { PostgreSqlContainer } from '@testcontainers/postgresql';\n\nexport const getPostgreSQLContainer = (\n options: { version: string } = { version: '18.1' },\n) => {\n return new PostgreSqlContainer(`postgres:${options.version}`);\n};\n\nexport const getPostgreSQLStartedContainer = async (\n options: { version: string } = { version: '18.1' },\n) => {\n const container = getPostgreSQLContainer(options);\n return container.start();\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../almanac/dist/logger-DnrSjS8d.js","../../almanac/dist/spanLogEvent-ByQosuDu.js","../../almanac/dist/console-Bn5yW7XZ.js","../src/eventStore/eventStoreDBContainer.ts","../src/eventStore/index.ts","../src/mongodb/mongoDBContainer.ts","../src/postgresql/postgreSQLContainer.ts"],"sourcesContent":["//#region src/loggers/logger.ts\nconst LogLevel = {\n\tdefault: \"info\",\n\tsilent: \"silent\",\n\ttrace: \"trace\",\n\tdebug: \"debug\",\n\tinfo: \"info\",\n\twarn: \"warn\",\n\terror: \"error\",\n\tfatal: \"fatal\"\n};\nconst shouldLog = (logLevel, definedLogLevel) => {\n\tdefinedLogLevel ??= LogLevel.default;\n\tswitch (definedLogLevel) {\n\t\tcase \"fatal\": return logLevel === LogLevel.fatal;\n\t\tcase \"error\": return [LogLevel.fatal, LogLevel.error].includes(logLevel);\n\t\tcase \"warn\": return [\n\t\t\tLogLevel.fatal,\n\t\t\tLogLevel.error,\n\t\t\tLogLevel.warn\n\t\t].includes(logLevel);\n\t\tcase \"info\": return [\n\t\t\tLogLevel.fatal,\n\t\t\tLogLevel.error,\n\t\t\tLogLevel.warn,\n\t\t\tLogLevel.info\n\t\t].includes(logLevel);\n\t\tcase \"debug\": return [\n\t\t\tLogLevel.fatal,\n\t\t\tLogLevel.error,\n\t\t\tLogLevel.warn,\n\t\t\tLogLevel.info,\n\t\t\tLogLevel.debug\n\t\t].includes(logLevel);\n\t\tcase \"trace\": return [\n\t\t\tLogLevel.fatal,\n\t\t\tLogLevel.error,\n\t\t\tLogLevel.warn,\n\t\t\tLogLevel.info,\n\t\t\tLogLevel.debug,\n\t\t\tLogLevel.trace\n\t\t].includes(logLevel);\n\t\tcase \"silent\": return false;\n\t}\n};\nconst logEvent = (eventName, data, eventMetadata) => {\n\treturn {\n\t\tname: eventName,\n\t\tdata,\n\t\tmetadata: {\n\t\t\t...eventMetadata,\n\t\t\ttimestamp: eventMetadata.timestamp ?? Date.now()\n\t\t}\n\t};\n};\nconst message = (level, body, data, eventMetadata) => {\n\tif (data === void 0) return logEvent(body, { body }, {\n\t\tlevel,\n\t\t...eventMetadata\n\t});\n\tconst eventData = { body };\n\tif (data.error !== void 0) eventData.error = data.error;\n\tif (data.attributes !== void 0) eventData.attributes = data.attributes;\n\treturn logEvent(body, eventData, {\n\t\tlevel,\n\t\t...eventMetadata\n\t});\n};\nconst forLevel = (level) => (msgOrObj, msgOrMetadata, eventMetadata) => {\n\tif (typeof msgOrObj === \"string\") return logEvent(msgOrObj, { body: msgOrObj }, {\n\t\tlevel,\n\t\t...typeof msgOrMetadata === \"string\" ? eventMetadata : msgOrMetadata\n\t});\n\tconst msg = typeof msgOrMetadata === \"string\" ? msgOrMetadata : void 0;\n\tconst overrides = eventMetadata ?? (typeof msgOrMetadata === \"string\" ? void 0 : msgOrMetadata);\n\tif (msgOrObj instanceof Error) return logEvent(msg ?? \"\", {\n\t\terror: msgOrObj,\n\t\tbody: msg\n\t}, {\n\t\tlevel,\n\t\t...overrides\n\t});\n\tconst { eventName, ...attributes } = msgOrObj;\n\treturn logEvent(typeof eventName === \"string\" ? eventName : msg ?? \"\", {\n\t\tattributes,\n\t\tbody: msg\n\t}, {\n\t\tlevel,\n\t\t...overrides\n\t});\n};\nconst LogEvent = Object.assign(logEvent, {\n\tmessage,\n\tfatal: forLevel(\"fatal\"),\n\terror: forLevel(\"error\"),\n\twarn: forLevel(\"warn\"),\n\tinfo: forLevel(\"info\"),\n\tdebug: forLevel(\"debug\"),\n\ttrace: forLevel(\"trace\"),\n\tsilent: forLevel(\"silent\")\n});\nconst logger = (options) => {\n\tconst { event: sink, minLevel } = options;\n\treturn (event) => {\n\t\tif (event.metadata.level === \"silent\" || !shouldLog(event.metadata.level, minLevel)) return;\n\t\tsink(event);\n\t};\n};\nconst noopLogger = logger({ event: () => {} });\n\n//#endregion\nexport { shouldLog as a, noopLogger as i, LogLevel as n, logger as r, LogEvent as t };\n//# sourceMappingURL=logger-DnrSjS8d.js.map","import { i as noopLogger } from \"./logger-DnrSjS8d.js\";\n\n//#region src/serialization/json/jsonSerializer.ts\nconst bigIntReplacer = (_key, value) => {\n\treturn typeof value === \"bigint\" ? value.toString() : value;\n};\nconst dateReplacer = (_key, value) => {\n\treturn value instanceof Date ? value.toISOString() : value;\n};\nconst errorReplacer = (_key, value) => value instanceof Error ? {\n\ttype: value.constructor.name || \"error\",\n\tmessage: value.message,\n\tstack: value.stack\n} : value;\nconst isFirstLetterNumeric = (str) => {\n\tconst c = str.charCodeAt(0);\n\treturn c >= 48 && c <= 57;\n};\nconst isFirstLetterNumericOrMinus = (str) => {\n\tconst c = str.charCodeAt(0);\n\treturn c >= 48 && c <= 57 || c === 45;\n};\nconst bigIntReviver = (_key, value, context) => {\n\tif (typeof value === \"number\" && Number.isInteger(value) && !Number.isSafeInteger(value)) try {\n\t\treturn BigInt(context?.source ?? value.toString());\n\t} catch {\n\t\treturn value;\n\t}\n\tif (typeof value === \"string\" && value.length > 15) {\n\t\tif (isFirstLetterNumericOrMinus(value)) {\n\t\t\tconst num = Number(value);\n\t\t\tif (Number.isFinite(num) && !Number.isSafeInteger(num)) try {\n\t\t\t\treturn BigInt(value);\n\t\t\t} catch {}\n\t\t}\n\t}\n\treturn value;\n};\nconst dateReviver = (_key, value) => {\n\tif (typeof value === \"string\" && value.length === 24 && isFirstLetterNumeric(value) && value[10] === \"T\" && value[23] === \"Z\") {\n\t\tconst date = new Date(value);\n\t\tif (!isNaN(date.getTime())) return date;\n\t}\n\treturn value;\n};\nconst composeJSONReplacers = (...replacers) => {\n\tconst filteredReplacers = replacers.filter((r) => r !== void 0);\n\tif (filteredReplacers.length === 0) return void 0;\n\treturn (key, value) => filteredReplacers.reduce((accValue, replacer) => replacer(key, accValue), value);\n};\nconst composeJSONRevivers = (...revivers) => {\n\tconst filteredRevivers = revivers.filter((r) => r !== void 0);\n\tif (filteredRevivers.length === 0) return void 0;\n\treturn (key, value, context) => filteredRevivers.reduce((accValue, reviver) => reviver(key, accValue, context), value);\n};\nconst JSONReplacer = (opts) => composeJSONReplacers(opts?.replacer, opts?.failOnBigIntSerialization !== true ? JSONReplacers.bigInt : void 0, opts?.useDefaultDateSerialization !== true ? JSONReplacers.date : void 0, opts?.skipErrorSerialization !== true ? JSONReplacers.error : void 0);\nconst JSONReviver = (opts) => composeJSONRevivers(opts?.reviver, opts?.parseBigInts === true ? JSONRevivers.bigInt : void 0, opts?.parseDates === true ? JSONRevivers.date : void 0);\nconst JSONReplacers = {\n\tbigInt: bigIntReplacer,\n\tdate: dateReplacer,\n\terror: errorReplacer\n};\nconst JSONRevivers = {\n\tbigInt: bigIntReviver,\n\tdate: dateReviver\n};\nconst jsonSerializer = (options) => {\n\tconst defaultReplacer = JSONReplacer(options);\n\tconst defaultReviver = JSONReviver(options);\n\tconst defaultFormat = options?.format ?? \"compact\";\n\tconst defaultSafe = options?.safe ?? false;\n\treturn {\n\t\tserialize: (object, serializerOptions) => {\n\t\t\tconst replacer = serializerOptions ? JSONReplacer(serializerOptions) : defaultReplacer;\n\t\t\tconst indent = (serializerOptions?.format ?? defaultFormat) === \"pretty\" ? 2 : void 0;\n\t\t\tif (serializerOptions?.safe ?? defaultSafe) try {\n\t\t\t\treturn JSON.stringify(object, replacer, indent);\n\t\t\t} catch (e) {\n\t\t\t\treturn `{\"__serializationError\":${JSON.stringify(String(e))}}`;\n\t\t\t}\n\t\t\treturn JSON.stringify(object, replacer, indent);\n\t\t},\n\t\tdeserialize: (payload, deserializerOptions) => JSON.parse(payload, deserializerOptions ? JSONReviver(deserializerOptions) : defaultReviver)\n\t};\n};\nconst JSONSerializer = Object.assign(jsonSerializer(), { from: (options) => options?.serialization?.serializer ?? (options?.serialization?.options ? jsonSerializer(options?.serialization?.options) : JSONSerializer) });\n\n//#endregion\n//#region src/loggers/formatters/otelLogFormatter.ts\nconst SEVERITY_NUMBER = {\n\tsilent: 0,\n\ttrace: 1,\n\tdebug: 5,\n\tinfo: 9,\n\twarn: 13,\n\terror: 17,\n\tfatal: 21\n};\nconst severityNumberFor = (level) => SEVERITY_NUMBER[level];\nconst severityTextFor = (level) => level.toUpperCase();\nconst OtelLogFormatter = {\n\tformat: (event, options) => JSONSerializer.serialize(OtelLogFormatter.toOtelLog(event), options),\n\ttoOtelLog: ({ name: eventName, data, metadata }) => {\n\t\tconst attributes = { ...data.attributes ?? {} };\n\t\tif (data.error) {\n\t\t\tattributes[\"exception.type\"] = data.error.name;\n\t\t\tattributes[\"exception.message\"] = data.error.message;\n\t\t\tif (data.error.stack) attributes[\"exception.stacktrace\"] = data.error.stack;\n\t\t}\n\t\tconst log = {\n\t\t\ttimestamp: metadata.timestamp,\n\t\t\tseverityNumber: severityNumberFor(metadata.level),\n\t\t\tseverityText: severityTextFor(metadata.level)\n\t\t};\n\t\tif (eventName) log.eventName = eventName;\n\t\tif (metadata.traceId !== void 0) log.traceId = metadata.traceId;\n\t\tif (metadata.spanId !== void 0) log.spanId = metadata.spanId;\n\t\tif (data.body !== void 0) log.body = data.body;\n\t\tif (Object.keys(attributes).length) log.attributes = attributes;\n\t\treturn log;\n\t}\n};\n\n//#endregion\n//#region src/loggers/formatters/simpleFormatter.ts\nconst SimpleLogFormatter = { format: (event, _options) => {\n\tconst message = event.data.body ?? (event.name ? event.name : void 0);\n\treturn message !== void 0 ? `[${event.metadata.level}] ${message}` : `[${event.metadata.level}]`;\n} };\n\n//#endregion\n//#region src/tracers/span.ts\nconst noopSpan = {\n\tsetAttributes: () => {},\n\tspanContext: () => ({\n\t\ttraceId: \"\",\n\t\tspanId: \"\"\n\t}),\n\taddLink: () => {},\n\tlog: noopLogger\n};\n\n//#endregion\n//#region src/tracers/compositeTracer.ts\nconst compositeTracer = (...tracers) => ({ startSpan: async (name, fn, options) => {\n\tif (tracers.length === 0) return fn(noopSpan);\n\tconst nest = (index, collectedSpans) => {\n\t\tif (index >= tracers.length) return fn(compositeSpan(collectedSpans));\n\t\treturn tracers[index].startSpan(name, async (span) => nest(index + 1, [...collectedSpans, span]), options);\n\t};\n\treturn nest(0, []);\n} });\nconst compositeSpan = (spans) => ({\n\tsetAttributes: (attrs) => spans.forEach((s) => s.setAttributes(attrs)),\n\tspanContext: () => (spans[0] ?? noopSpan).spanContext(),\n\taddLink: (link) => spans.forEach((s) => s.addLink(link)),\n\tlog: (event) => spans.forEach((s) => s.log(event))\n});\n\n//#endregion\n//#region src/tracers/observabilityContextGenerator.ts\nconst randomHex = (bytes) => {\n\tconst arr = new Uint8Array(bytes);\n\tglobalThis.crypto.getRandomValues(arr);\n\treturn Array.from(arr, (b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n};\nconst defaultObservabilityContextGenerator = {\n\tgenerateTraceId: () => randomHex(16),\n\tgenerateSpanId: () => randomHex(8),\n\tgenerateMessageId: () => randomHex(16),\n\tgenerateCorrelationId: () => randomHex(16),\n\tgenerateCausationId: () => randomHex(16)\n};\n\n//#endregion\n//#region src/tracers/tracer.ts\nconst noTracing = { startSpan: async (_name, fn, _options) => fn(noopSpan) };\nconst noopTracer = () => noTracing;\n\n//#endregion\n//#region src/tracers/spanLogEvent.ts\nconst logEventForSpan = (event, context) => {\n\tconst traceId = event.metadata.traceId ?? context.traceId;\n\tconst spanId = event.metadata.spanId ?? context.spanId;\n\tif (traceId === event.metadata.traceId && spanId === event.metadata.spanId) return event;\n\tconst metadata = {\n\t\t...event.metadata,\n\t\ttraceId,\n\t\tspanId\n\t};\n\treturn {\n\t\tname: event.name,\n\t\tdata: event.data,\n\t\tmetadata\n\t};\n};\n\n//#endregion\nexport { noopSpan as a, severityTextFor as c, compositeTracer as i, JSONSerializer as l, noopTracer as n, SimpleLogFormatter as o, defaultObservabilityContextGenerator as r, OtelLogFormatter as s, logEventForSpan as t };\n//# sourceMappingURL=spanLogEvent-ByQosuDu.js.map","import { l as JSONSerializer, o as SimpleLogFormatter, r as defaultObservabilityContextGenerator, s as OtelLogFormatter, t as logEventForSpan } from \"./spanLogEvent-ByQosuDu.js\";\nimport { i as noopLogger, r as logger } from \"./logger-DnrSjS8d.js\";\n\n//#region src/providers/console/consoleLogger.ts\nconst consoleMethodFor = (level) => {\n\tswitch (level) {\n\t\tcase \"fatal\":\n\t\tcase \"error\": return console.error;\n\t\tcase \"warn\": return console.warn;\n\t\tcase \"debug\": return console.debug;\n\t\tcase \"trace\": return console.trace;\n\t\tdefault: return console.log;\n\t}\n};\nconst consoleLogger = logger({ event: (event) => {\n\tconst write = consoleMethodFor(event.metadata.level);\n\tconst extra = event.data.error ?? (event.data.attributes && Object.keys(event.data.attributes).length ? event.data.attributes : void 0);\n\tif (event.data.body !== void 0 && extra !== void 0) write(event.data.body, extra);\n\telse if (event.data.body !== void 0) write(event.data.body);\n\telse if (extra !== void 0) write(extra);\n\telse write(\"\");\n} });\n\n//#endregion\n//#region src/providers/console/consoleSpanLogSink.ts\nconst createConsoleSpanLogSink = (format) => {\n\tconst serializerOptions = {\n\t\tformat: format === \"simple\" || void 0 ? \"compact\" : format,\n\t\tsafe: true\n\t};\n\treturn format === \"simple\" ? (event) => console.log(SimpleLogFormatter.format(event, serializerOptions)) : (event) => console.log(OtelLogFormatter.format(event, serializerOptions));\n};\n\n//#endregion\n//#region src/providers/console/consoleSpanLogger.ts\nconst ConsoleFormat = {\n\tcompact: \"compact\",\n\tpretty: \"pretty\",\n\tSIMPLE: \"simple\"\n};\nconst consoleSpanLogger = (options) => logger({\n\tminLevel: options?.logLevel,\n\tevent: createConsoleSpanLogSink(options?.format)\n});\n\n//#endregion\n//#region src/providers/console/consoleTracer.ts\nconst consoleTracer = (options) => {\n\tconst mode = options?.mode ?? \"compact\";\n\tconst suppressLogs = options?.suppressLogs ?? false;\n\tconst contextGenerator = options?.contextGenerator ?? defaultObservabilityContextGenerator;\n\tconst sink = createConsoleSpanLogSink(mode);\n\tconst log = suppressLogs ? noopLogger : logger({\n\t\tminLevel: options?.logLevel,\n\t\tevent: sink\n\t});\n\treturn { startSpan: async (name, fn, spanOptions) => {\n\t\tconst traceId = contextGenerator.generateTraceId();\n\t\tconst spanId = contextGenerator.generateSpanId();\n\t\tconst context = {\n\t\t\ttraceId,\n\t\t\tspanId\n\t\t};\n\t\tconst startMs = Date.now();\n\t\tconst attributes = { ...spanOptions?.attributes };\n\t\tconst links = [...spanOptions?.links ?? []];\n\t\tconst span = {\n\t\t\tspanContext: () => context,\n\t\t\tsetAttributes: (attrs) => Object.assign(attributes, attrs),\n\t\t\taddLink: (link) => links.push(link),\n\t\t\tlog: (event) => log(logEventForSpan(event, context))\n\t\t};\n\t\tlet ok = true;\n\t\tlet spanError;\n\t\ttry {\n\t\t\treturn await fn(span);\n\t\t} catch (e) {\n\t\t\tok = false;\n\t\t\tspanError = e instanceof Error ? e : new Error(String(e));\n\t\t\tthrow e;\n\t\t} finally {\n\t\t\tconst durationMs = Date.now() - startMs;\n\t\t\tif (mode === \"simple\") console.log(`[span] ${name} (${durationMs}ms)${ok ? \"\" : \" [failed]\"}`);\n\t\t\telse {\n\t\t\t\tconst summary = {\n\t\t\t\t\tname,\n\t\t\t\t\ttraceId,\n\t\t\t\t\tspanId,\n\t\t\t\t\t...spanOptions?.parent?.spanId ? { parentSpanId: spanOptions.parent.spanId } : {},\n\t\t\t\t\tstartTimeUnixNano: (BigInt(startMs) * 1000000n).toString(),\n\t\t\t\t\tendTimeUnixNano: (BigInt(startMs + durationMs) * 1000000n).toString(),\n\t\t\t\t\tattributes,\n\t\t\t\t\tstatus: {\n\t\t\t\t\t\tcode: ok ? \"OK\" : \"ERROR\",\n\t\t\t\t\t\t...spanError !== void 0 ? { message: spanError.message } : {}\n\t\t\t\t\t},\n\t\t\t\t\tlinks\n\t\t\t\t};\n\t\t\t\tconsole.log(JSONSerializer.serialize(summary, {\n\t\t\t\t\tformat: mode === \"pretty\" ? \"pretty\" : \"compact\",\n\t\t\t\t\tsafe: true\n\t\t\t\t}));\n\t\t\t}\n\t\t}\n\t} };\n};\n\n//#endregion\nexport { consoleLogger as i, ConsoleFormat as n, consoleSpanLogger as r, consoleTracer as t };\n//# sourceMappingURL=console-Bn5yW7XZ.js.map","import { LogEvent } from '@event-driven-io/almanac';\nimport { consoleLogger } from '@event-driven-io/almanac/console';\nimport { InProcessLock } from '@event-driven-io/emmett';\nimport { EventStoreDBClient } from '@eventstore/db-client';\nimport {\n AbstractStartedContainer,\n GenericContainer,\n Wait,\n type StartedTestContainer,\n} from 'testcontainers';\nimport type { Environment } from 'testcontainers/build/types';\n\nexport const EVENTSTOREDB_PORT = 2113;\nexport const EVENTSTOREDB_IMAGE_NAME = 'eventstore/eventstore';\nexport const EVENTSTOREDB_IMAGE_TAG = '24.10.0-bookworm-slim';\nexport const EVENTSTOREDB_ARM64_IMAGE_TAG = '24.10.0-alpha-arm64v8';\n\nexport const EVENTSTOREDB_DEFAULT_IMAGE = `${EVENTSTOREDB_IMAGE_NAME}:${process.arch !== 'arm64' ? EVENTSTOREDB_IMAGE_TAG : EVENTSTOREDB_ARM64_IMAGE_TAG}`;\n\nexport type EventStoreDBContainerOptions = {\n disableProjections?: boolean;\n isSecure?: boolean;\n useFileStorage?: boolean;\n withReuse?: boolean;\n};\n\nexport const defaultEventStoreDBContainerOptions: EventStoreDBContainerOptions =\n {\n disableProjections: false,\n isSecure: false,\n useFileStorage: false,\n withReuse: false,\n };\n\nexport class EventStoreDBContainer extends GenericContainer {\n constructor(\n image = EVENTSTOREDB_DEFAULT_IMAGE,\n options: EventStoreDBContainerOptions = defaultEventStoreDBContainerOptions,\n ) {\n super(image);\n\n const environment: Environment = {\n ...(!options.disableProjections\n ? {\n EVENTSTORE_RUN_PROJECTIONS: 'ALL',\n }\n : {}),\n ...(!options.isSecure\n ? {\n EVENTSTORE_INSECURE: 'true',\n }\n : {}),\n ...(options.useFileStorage\n ? {\n EVENTSTORE_MEM_DB: 'false',\n EVENTSTORE_DB: '/data/integration-tests',\n }\n : {}),\n EVENTSTORE_CLUSTER_SIZE: '1',\n EVENTSTORE_START_STANDARD_PROJECTIONS: 'true',\n EVENTSTORE_NODE_PORT: `${EVENTSTOREDB_PORT}`,\n EVENTSTORE_ENABLE_ATOM_PUB_OVER_HTTP: 'true',\n };\n\n this.withEnvironment(environment).withExposedPorts(EVENTSTOREDB_PORT);\n\n if (options.withReuse) this.withReuse();\n\n this.withWaitStrategy(\n Wait.forAll([Wait.forHealthCheck(), Wait.forListeningPorts()]),\n );\n }\n\n async start(): Promise<StartedEventStoreDBContainer> {\n return new StartedEventStoreDBContainer(await super.start());\n }\n}\n\nexport class StartedEventStoreDBContainer extends AbstractStartedContainer {\n constructor(container: StartedTestContainer) {\n super(container);\n }\n\n getConnectionString(): string {\n return `esdb://${this.getHost()}:${this.getMappedPort(2113)}?tls=false`;\n }\n\n getClient(): EventStoreDBClient {\n return EventStoreDBClient.connectionString(this.getConnectionString());\n }\n}\n\nlet container: EventStoreDBContainer | null = null;\nlet startedContainer: StartedEventStoreDBContainer | null = null;\nlet startedCount = 0;\nconst lock = InProcessLock();\n\nexport const getSharedEventStoreDBTestContainer = () =>\n lock.withAcquire(\n async () => {\n if (startedContainer) return startedContainer;\n\n if (!container)\n container = new EventStoreDBContainer(EVENTSTOREDB_DEFAULT_IMAGE);\n\n startedContainer = await container.start();\n startedCount++;\n\n container.withLogConsumer((stream) =>\n stream\n .on('data', (line) => consoleLogger(LogEvent.info(String(line))))\n .on('err', (line) => consoleLogger(LogEvent.error(String(line))))\n .on('end', () => consoleLogger(LogEvent.info('Stream closed'))),\n );\n\n return startedContainer;\n },\n { lockId: 'SharedEventStoreDBTestContainer' },\n );\n\nexport const getSharedTestEventStoreDBClient = async () => {\n return (await getSharedEventStoreDBTestContainer()).getClient();\n};\n\nexport const releaseSharedEventStoreDBTestContainer = () =>\n lock.withAcquire(\n async () => {\n const containerToStop = startedContainer;\n if (containerToStop && --startedCount === 0) {\n try {\n startedContainer = null;\n container = null;\n await containerToStop.stop();\n } catch {\n /* do nothing */\n }\n }\n },\n { lockId: 'SharedEventStoreDBTestContainer' },\n );\n","import { EventStoreDBClient } from '@eventstore/db-client';\nimport type { StartedEventStoreDBContainer } from './eventStoreDBContainer';\nimport { EventStoreDBContainer } from './eventStoreDBContainer';\n\nexport * from './eventStoreDBContainer';\n\nlet esdbContainer: StartedEventStoreDBContainer;\n\nexport const getEventStoreDBTestClient = async (\n useTestContainers = false,\n): Promise<EventStoreDBClient> => {\n let connectionString;\n\n if (useTestContainers) {\n if (!esdbContainer)\n esdbContainer = await new EventStoreDBContainer().start();\n\n connectionString = esdbContainer.getConnectionString();\n } else {\n // await compose.upAll();\n connectionString = 'esdb://localhost:2113?tls=false';\n }\n\n // That's how EventStoreDB client is setup\n // We're taking the connection string from container\n return EventStoreDBClient.connectionString(connectionString);\n};\n","import { MongoDBContainer } from '@testcontainers/mongodb';\n\nexport const getMongoDBContainer = (\n options: { version: string } = { version: '6.0.1' },\n) => {\n return new MongoDBContainer(`mongo:${options.version}`);\n};\n\nexport const getMongoDBStartedContainer = async (\n options: { version: string } = { version: '6.0.1' },\n) => {\n const container = getMongoDBContainer(options);\n return container.start();\n};\n","import { PostgreSqlContainer } from '@testcontainers/postgresql';\n\nexport const getPostgreSQLContainer = (\n options: { version: string } = { version: '18.1' },\n) => {\n return new PostgreSqlContainer(`postgres:${options.version}`);\n};\n\nexport const getPostgreSQLStartedContainer = async (\n options: { version: string } = { version: '18.1' },\n) => {\n const container = getPostgreSQLContainer(options);\n return container.start();\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@event-driven-io/emmett-testcontainers",
3
- "version": "0.43.0-beta.28",
3
+ "version": "0.43.0-beta.29",
4
4
  "type": "module",
5
5
  "description": "Emmett - TestContainers - Event Sourcing development made simple",
6
6
  "scripts": {
@@ -47,7 +47,7 @@
47
47
  "dist"
48
48
  ],
49
49
  "dependencies": {
50
- "@event-driven-io/emmett": "0.43.0-beta.28",
50
+ "@event-driven-io/emmett": "0.43.0-beta.29",
51
51
  "@testcontainers/mongodb": "^11.14.0",
52
52
  "@testcontainers/postgresql": "^11.14.0",
53
53
  "testcontainers": "^11.14.0"