@event-driven-io/emmett-testcontainers 0.43.0-beta.23 → 0.43.0-beta.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -5,6 +5,224 @@ let testcontainers = require("testcontainers");
5
5
  let _testcontainers_mongodb = require("@testcontainers/mongodb");
6
6
  let _testcontainers_postgresql = require("@testcontainers/postgresql");
7
7
 
8
+ //#region ../almanac/dist/logger-BLDUGuc9.js
9
+ const LogLevel = {
10
+ default: "info",
11
+ silent: "silent",
12
+ trace: "trace",
13
+ debug: "debug",
14
+ info: "info",
15
+ warn: "warn",
16
+ error: "error",
17
+ fatal: "fatal"
18
+ };
19
+ const shouldLog = (logLevel, definedLogLevel) => {
20
+ definedLogLevel ??= LogLevel.default;
21
+ switch (definedLogLevel) {
22
+ case "fatal": return logLevel === LogLevel.fatal;
23
+ case "error": return [LogLevel.fatal, LogLevel.error].includes(logLevel);
24
+ case "warn": return [
25
+ LogLevel.fatal,
26
+ LogLevel.error,
27
+ LogLevel.warn
28
+ ].includes(logLevel);
29
+ case "info": return [
30
+ LogLevel.fatal,
31
+ LogLevel.error,
32
+ LogLevel.warn,
33
+ LogLevel.info
34
+ ].includes(logLevel);
35
+ case "debug": return [
36
+ LogLevel.fatal,
37
+ LogLevel.error,
38
+ LogLevel.warn,
39
+ LogLevel.info,
40
+ LogLevel.debug
41
+ ].includes(logLevel);
42
+ case "trace": return [
43
+ LogLevel.fatal,
44
+ LogLevel.error,
45
+ LogLevel.warn,
46
+ LogLevel.info,
47
+ LogLevel.debug,
48
+ LogLevel.trace
49
+ ].includes(logLevel);
50
+ case "silent": return false;
51
+ }
52
+ };
53
+ const logEvent = (eventName, data, eventMetadata) => {
54
+ return {
55
+ name: eventName,
56
+ data,
57
+ metadata: {
58
+ ...eventMetadata,
59
+ timestamp: eventMetadata.timestamp ?? Date.now()
60
+ }
61
+ };
62
+ };
63
+ const message = (level, body, data, eventMetadata) => {
64
+ if (data === void 0) return logEvent(body, { body }, {
65
+ level,
66
+ ...eventMetadata
67
+ });
68
+ const eventData = { body };
69
+ if (data.error !== void 0) eventData.error = data.error;
70
+ if (data.attributes !== void 0) eventData.attributes = data.attributes;
71
+ return logEvent(body, eventData, {
72
+ level,
73
+ ...eventMetadata
74
+ });
75
+ };
76
+ const forLevel = (level) => (msgOrObj, msgOrMetadata, eventMetadata) => {
77
+ if (typeof msgOrObj === "string") return logEvent(msgOrObj, { body: msgOrObj }, {
78
+ level,
79
+ ...typeof msgOrMetadata === "string" ? eventMetadata : msgOrMetadata
80
+ });
81
+ const msg = typeof msgOrMetadata === "string" ? msgOrMetadata : void 0;
82
+ const overrides = eventMetadata ?? (typeof msgOrMetadata === "string" ? void 0 : msgOrMetadata);
83
+ if (msgOrObj instanceof Error) return logEvent(msg ?? "", {
84
+ error: msgOrObj,
85
+ body: msg
86
+ }, {
87
+ level,
88
+ ...overrides
89
+ });
90
+ const { eventName, ...attributes } = msgOrObj;
91
+ return logEvent(typeof eventName === "string" ? eventName : msg ?? "", {
92
+ attributes,
93
+ body: msg
94
+ }, {
95
+ level,
96
+ ...overrides
97
+ });
98
+ };
99
+ const LogEvent = Object.assign(logEvent, {
100
+ message,
101
+ fatal: forLevel("fatal"),
102
+ error: forLevel("error"),
103
+ warn: forLevel("warn"),
104
+ info: forLevel("info"),
105
+ debug: forLevel("debug"),
106
+ trace: forLevel("trace"),
107
+ silent: forLevel("silent")
108
+ });
109
+ const logger = (options) => {
110
+ const { event: sink, minLevel } = options;
111
+ return (event) => {
112
+ if (event.metadata.level === "silent" || !shouldLog(event.metadata.level, minLevel)) return;
113
+ sink(event);
114
+ };
115
+ };
116
+ const noopLogger = logger({ event: () => {} });
117
+
118
+ //#endregion
119
+ //#region ../almanac/dist/spanLogEvent-Cf3AGgm3.js
120
+ const bigIntReplacer = (_key, value) => {
121
+ return typeof value === "bigint" ? value.toString() : value;
122
+ };
123
+ const dateReplacer = (_key, value) => {
124
+ return value instanceof Date ? value.toISOString() : value;
125
+ };
126
+ const errorReplacer = (_key, value) => value instanceof Error ? {
127
+ type: value.constructor.name || "error",
128
+ message: value.message,
129
+ stack: value.stack
130
+ } : value;
131
+ const isFirstLetterNumeric = (str) => {
132
+ const c = str.charCodeAt(0);
133
+ return c >= 48 && c <= 57;
134
+ };
135
+ const isFirstLetterNumericOrMinus = (str) => {
136
+ const c = str.charCodeAt(0);
137
+ return c >= 48 && c <= 57 || c === 45;
138
+ };
139
+ const bigIntReviver = (_key, value, context) => {
140
+ if (typeof value === "number" && Number.isInteger(value) && !Number.isSafeInteger(value)) try {
141
+ return BigInt(context?.source ?? value.toString());
142
+ } catch {
143
+ return value;
144
+ }
145
+ if (typeof value === "string" && value.length > 15) {
146
+ if (isFirstLetterNumericOrMinus(value)) {
147
+ const num = Number(value);
148
+ if (Number.isFinite(num) && !Number.isSafeInteger(num)) try {
149
+ return BigInt(value);
150
+ } catch {}
151
+ }
152
+ }
153
+ return value;
154
+ };
155
+ const dateReviver = (_key, value) => {
156
+ if (typeof value === "string" && value.length === 24 && isFirstLetterNumeric(value) && value[10] === "T" && value[23] === "Z") {
157
+ const date = new Date(value);
158
+ if (!isNaN(date.getTime())) return date;
159
+ }
160
+ return value;
161
+ };
162
+ const composeJSONReplacers = (...replacers) => {
163
+ const filteredReplacers = replacers.filter((r) => r !== void 0);
164
+ if (filteredReplacers.length === 0) return void 0;
165
+ return (key, value) => filteredReplacers.reduce((accValue, replacer) => replacer(key, accValue), value);
166
+ };
167
+ const composeJSONRevivers = (...revivers) => {
168
+ const filteredRevivers = revivers.filter((r) => r !== void 0);
169
+ if (filteredRevivers.length === 0) return void 0;
170
+ return (key, value, context) => filteredRevivers.reduce((accValue, reviver) => reviver(key, accValue, context), value);
171
+ };
172
+ const 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);
173
+ const JSONReviver = (opts) => composeJSONRevivers(opts?.reviver, opts?.parseBigInts === true ? JSONRevivers.bigInt : void 0, opts?.parseDates === true ? JSONRevivers.date : void 0);
174
+ const JSONReplacers = {
175
+ bigInt: bigIntReplacer,
176
+ date: dateReplacer,
177
+ error: errorReplacer
178
+ };
179
+ const JSONRevivers = {
180
+ bigInt: bigIntReviver,
181
+ date: dateReviver
182
+ };
183
+ const jsonSerializer = (options) => {
184
+ const defaultReplacer = JSONReplacer(options);
185
+ const defaultReviver = JSONReviver(options);
186
+ const defaultFormat = options?.format ?? "compact";
187
+ const defaultSafe = options?.safe ?? false;
188
+ return {
189
+ serialize: (object, serializerOptions) => {
190
+ const replacer = serializerOptions ? JSONReplacer(serializerOptions) : defaultReplacer;
191
+ const indent = (serializerOptions?.format ?? defaultFormat) === "pretty" ? 2 : void 0;
192
+ if (serializerOptions?.safe ?? defaultSafe) try {
193
+ return JSON.stringify(object, replacer, indent);
194
+ } catch (e) {
195
+ return `{"__serializationError":${JSON.stringify(String(e))}}`;
196
+ }
197
+ return JSON.stringify(object, replacer, indent);
198
+ },
199
+ deserialize: (payload, deserializerOptions) => JSON.parse(payload, deserializerOptions ? JSONReviver(deserializerOptions) : defaultReviver)
200
+ };
201
+ };
202
+ const JSONSerializer = Object.assign(jsonSerializer(), { from: (options) => options?.serialization?.serializer ?? (options?.serialization?.options ? jsonSerializer(options?.serialization?.options) : JSONSerializer) });
203
+
204
+ //#endregion
205
+ //#region ../almanac/dist/console-BB7C_X6q.js
206
+ const consoleMethodFor = (level) => {
207
+ switch (level) {
208
+ case "fatal":
209
+ case "error": return console.error;
210
+ case "warn": return console.warn;
211
+ case "debug": return console.debug;
212
+ case "trace": return console.trace;
213
+ default: return console.log;
214
+ }
215
+ };
216
+ const consoleLogger = logger({ event: (event) => {
217
+ const write = consoleMethodFor(event.metadata.level);
218
+ const extra = event.data.error ?? (event.data.attributes && Object.keys(event.data.attributes).length ? event.data.attributes : void 0);
219
+ if (event.data.body !== void 0 && extra !== void 0) write(event.data.body, extra);
220
+ else if (event.data.body !== void 0) write(event.data.body);
221
+ else if (extra !== void 0) write(extra);
222
+ else write("");
223
+ } });
224
+
225
+ //#endregion
8
226
  //#region src/eventStore/eventStoreDBContainer.ts
9
227
  const EVENTSTOREDB_PORT = 2113;
10
228
  const EVENTSTOREDB_IMAGE_NAME = "eventstore/eventstore";
@@ -60,7 +278,7 @@ const getSharedEventStoreDBTestContainer = () => lock.withAcquire(async () => {
60
278
  if (!container) container = new EventStoreDBContainer(EVENTSTOREDB_DEFAULT_IMAGE);
61
279
  startedContainer = await container.start();
62
280
  startedCount++;
63
- container.withLogConsumer((stream) => stream.on("data", (line) => console.log(line)).on("err", (line) => console.error(line)).on("end", () => console.log("Stream closed")));
281
+ container.withLogConsumer((stream) => stream.on("data", (line) => consoleLogger(LogEvent.info(String(line)))).on("err", (line) => consoleLogger(LogEvent.error(String(line)))).on("end", () => consoleLogger(LogEvent.info("Stream closed"))));
64
282
  return startedContainer;
65
283
  }, { lockId: "SharedEventStoreDBTestContainer" });
66
284
  const getSharedTestEventStoreDBClient = async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["GenericContainer","Wait","AbstractStartedContainer","EventStoreDBClient","EventStoreDBClient","MongoDBContainer","PostgreSqlContainer"],"sources":["../src/eventStore/eventStoreDBContainer.ts","../src/eventStore/index.ts","../src/mongodb/mongoDBContainer.ts","../src/postgresql/postgreSQLContainer.ts"],"sourcesContent":["import { 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) => console.log(line))\n .on('err', (line) => console.error(line))\n .on('end', () => console.log('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.cjs","names":["GenericContainer","Wait","AbstractStartedContainer","EventStoreDBClient","EventStoreDBClient","MongoDBContainer","PostgreSqlContainer"],"sources":["../../almanac/dist/logger-BLDUGuc9.js","../../almanac/dist/spanLogEvent-Cf3AGgm3.js","../../almanac/dist/console-BB7C_X6q.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-BLDUGuc9.js.map","//#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/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 { JSONSerializer as i, OtelLogFormatter as n, severityTextFor as r, logEventForSpan as t };\n//# sourceMappingURL=spanLogEvent-Cf3AGgm3.js.map","import { i as noopLogger, r as logger } from \"./logger-BLDUGuc9.js\";\nimport { i as JSONSerializer, n as OtelLogFormatter, t as logEventForSpan } from \"./spanLogEvent-Cf3AGgm3.js\";\n\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 noopTracer = () => ({ startSpan: async (_name, fn, _options) => fn(noopSpan) });\n\n//#endregion\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/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/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 { noopTracer as a, noopSpan as c, consoleLogger as i, ConsoleFormat as n, defaultTraceContextGenerator as o, consoleSpanLogger as r, compositeTracer as s, consoleTracer as t };\n//# sourceMappingURL=console-BB7C_X6q.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
@@ -4,6 +4,224 @@ import { AbstractStartedContainer, GenericContainer, Wait } from "testcontainers
4
4
  import { MongoDBContainer } from "@testcontainers/mongodb";
5
5
  import { PostgreSqlContainer } from "@testcontainers/postgresql";
6
6
 
7
+ //#region ../almanac/dist/logger-BLDUGuc9.js
8
+ const LogLevel = {
9
+ default: "info",
10
+ silent: "silent",
11
+ trace: "trace",
12
+ debug: "debug",
13
+ info: "info",
14
+ warn: "warn",
15
+ error: "error",
16
+ fatal: "fatal"
17
+ };
18
+ const shouldLog = (logLevel, definedLogLevel) => {
19
+ definedLogLevel ??= LogLevel.default;
20
+ switch (definedLogLevel) {
21
+ case "fatal": return logLevel === LogLevel.fatal;
22
+ case "error": return [LogLevel.fatal, LogLevel.error].includes(logLevel);
23
+ case "warn": return [
24
+ LogLevel.fatal,
25
+ LogLevel.error,
26
+ LogLevel.warn
27
+ ].includes(logLevel);
28
+ case "info": return [
29
+ LogLevel.fatal,
30
+ LogLevel.error,
31
+ LogLevel.warn,
32
+ LogLevel.info
33
+ ].includes(logLevel);
34
+ case "debug": return [
35
+ LogLevel.fatal,
36
+ LogLevel.error,
37
+ LogLevel.warn,
38
+ LogLevel.info,
39
+ LogLevel.debug
40
+ ].includes(logLevel);
41
+ case "trace": return [
42
+ LogLevel.fatal,
43
+ LogLevel.error,
44
+ LogLevel.warn,
45
+ LogLevel.info,
46
+ LogLevel.debug,
47
+ LogLevel.trace
48
+ ].includes(logLevel);
49
+ case "silent": return false;
50
+ }
51
+ };
52
+ const logEvent = (eventName, data, eventMetadata) => {
53
+ return {
54
+ name: eventName,
55
+ data,
56
+ metadata: {
57
+ ...eventMetadata,
58
+ timestamp: eventMetadata.timestamp ?? Date.now()
59
+ }
60
+ };
61
+ };
62
+ const message = (level, body, data, eventMetadata) => {
63
+ if (data === void 0) return logEvent(body, { body }, {
64
+ level,
65
+ ...eventMetadata
66
+ });
67
+ const eventData = { body };
68
+ if (data.error !== void 0) eventData.error = data.error;
69
+ if (data.attributes !== void 0) eventData.attributes = data.attributes;
70
+ return logEvent(body, eventData, {
71
+ level,
72
+ ...eventMetadata
73
+ });
74
+ };
75
+ const forLevel = (level) => (msgOrObj, msgOrMetadata, eventMetadata) => {
76
+ if (typeof msgOrObj === "string") return logEvent(msgOrObj, { body: msgOrObj }, {
77
+ level,
78
+ ...typeof msgOrMetadata === "string" ? eventMetadata : msgOrMetadata
79
+ });
80
+ const msg = typeof msgOrMetadata === "string" ? msgOrMetadata : void 0;
81
+ const overrides = eventMetadata ?? (typeof msgOrMetadata === "string" ? void 0 : msgOrMetadata);
82
+ if (msgOrObj instanceof Error) return logEvent(msg ?? "", {
83
+ error: msgOrObj,
84
+ body: msg
85
+ }, {
86
+ level,
87
+ ...overrides
88
+ });
89
+ const { eventName, ...attributes } = msgOrObj;
90
+ return logEvent(typeof eventName === "string" ? eventName : msg ?? "", {
91
+ attributes,
92
+ body: msg
93
+ }, {
94
+ level,
95
+ ...overrides
96
+ });
97
+ };
98
+ const LogEvent = Object.assign(logEvent, {
99
+ message,
100
+ fatal: forLevel("fatal"),
101
+ error: forLevel("error"),
102
+ warn: forLevel("warn"),
103
+ info: forLevel("info"),
104
+ debug: forLevel("debug"),
105
+ trace: forLevel("trace"),
106
+ silent: forLevel("silent")
107
+ });
108
+ const logger = (options) => {
109
+ const { event: sink, minLevel } = options;
110
+ return (event) => {
111
+ if (event.metadata.level === "silent" || !shouldLog(event.metadata.level, minLevel)) return;
112
+ sink(event);
113
+ };
114
+ };
115
+ const noopLogger = logger({ event: () => {} });
116
+
117
+ //#endregion
118
+ //#region ../almanac/dist/spanLogEvent-Cf3AGgm3.js
119
+ const bigIntReplacer = (_key, value) => {
120
+ return typeof value === "bigint" ? value.toString() : value;
121
+ };
122
+ const dateReplacer = (_key, value) => {
123
+ return value instanceof Date ? value.toISOString() : value;
124
+ };
125
+ const errorReplacer = (_key, value) => value instanceof Error ? {
126
+ type: value.constructor.name || "error",
127
+ message: value.message,
128
+ stack: value.stack
129
+ } : value;
130
+ const isFirstLetterNumeric = (str) => {
131
+ const c = str.charCodeAt(0);
132
+ return c >= 48 && c <= 57;
133
+ };
134
+ const isFirstLetterNumericOrMinus = (str) => {
135
+ const c = str.charCodeAt(0);
136
+ return c >= 48 && c <= 57 || c === 45;
137
+ };
138
+ const bigIntReviver = (_key, value, context) => {
139
+ if (typeof value === "number" && Number.isInteger(value) && !Number.isSafeInteger(value)) try {
140
+ return BigInt(context?.source ?? value.toString());
141
+ } catch {
142
+ return value;
143
+ }
144
+ if (typeof value === "string" && value.length > 15) {
145
+ if (isFirstLetterNumericOrMinus(value)) {
146
+ const num = Number(value);
147
+ if (Number.isFinite(num) && !Number.isSafeInteger(num)) try {
148
+ return BigInt(value);
149
+ } catch {}
150
+ }
151
+ }
152
+ return value;
153
+ };
154
+ const dateReviver = (_key, value) => {
155
+ if (typeof value === "string" && value.length === 24 && isFirstLetterNumeric(value) && value[10] === "T" && value[23] === "Z") {
156
+ const date = new Date(value);
157
+ if (!isNaN(date.getTime())) return date;
158
+ }
159
+ return value;
160
+ };
161
+ const composeJSONReplacers = (...replacers) => {
162
+ const filteredReplacers = replacers.filter((r) => r !== void 0);
163
+ if (filteredReplacers.length === 0) return void 0;
164
+ return (key, value) => filteredReplacers.reduce((accValue, replacer) => replacer(key, accValue), value);
165
+ };
166
+ const composeJSONRevivers = (...revivers) => {
167
+ const filteredRevivers = revivers.filter((r) => r !== void 0);
168
+ if (filteredRevivers.length === 0) return void 0;
169
+ return (key, value, context) => filteredRevivers.reduce((accValue, reviver) => reviver(key, accValue, context), value);
170
+ };
171
+ const 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);
172
+ const JSONReviver = (opts) => composeJSONRevivers(opts?.reviver, opts?.parseBigInts === true ? JSONRevivers.bigInt : void 0, opts?.parseDates === true ? JSONRevivers.date : void 0);
173
+ const JSONReplacers = {
174
+ bigInt: bigIntReplacer,
175
+ date: dateReplacer,
176
+ error: errorReplacer
177
+ };
178
+ const JSONRevivers = {
179
+ bigInt: bigIntReviver,
180
+ date: dateReviver
181
+ };
182
+ const jsonSerializer = (options) => {
183
+ const defaultReplacer = JSONReplacer(options);
184
+ const defaultReviver = JSONReviver(options);
185
+ const defaultFormat = options?.format ?? "compact";
186
+ const defaultSafe = options?.safe ?? false;
187
+ return {
188
+ serialize: (object, serializerOptions) => {
189
+ const replacer = serializerOptions ? JSONReplacer(serializerOptions) : defaultReplacer;
190
+ const indent = (serializerOptions?.format ?? defaultFormat) === "pretty" ? 2 : void 0;
191
+ if (serializerOptions?.safe ?? defaultSafe) try {
192
+ return JSON.stringify(object, replacer, indent);
193
+ } catch (e) {
194
+ return `{"__serializationError":${JSON.stringify(String(e))}}`;
195
+ }
196
+ return JSON.stringify(object, replacer, indent);
197
+ },
198
+ deserialize: (payload, deserializerOptions) => JSON.parse(payload, deserializerOptions ? JSONReviver(deserializerOptions) : defaultReviver)
199
+ };
200
+ };
201
+ const JSONSerializer = Object.assign(jsonSerializer(), { from: (options) => options?.serialization?.serializer ?? (options?.serialization?.options ? jsonSerializer(options?.serialization?.options) : JSONSerializer) });
202
+
203
+ //#endregion
204
+ //#region ../almanac/dist/console-BB7C_X6q.js
205
+ const consoleMethodFor = (level) => {
206
+ switch (level) {
207
+ case "fatal":
208
+ case "error": return console.error;
209
+ case "warn": return console.warn;
210
+ case "debug": return console.debug;
211
+ case "trace": return console.trace;
212
+ default: return console.log;
213
+ }
214
+ };
215
+ const consoleLogger = logger({ event: (event) => {
216
+ const write = consoleMethodFor(event.metadata.level);
217
+ const extra = event.data.error ?? (event.data.attributes && Object.keys(event.data.attributes).length ? event.data.attributes : void 0);
218
+ if (event.data.body !== void 0 && extra !== void 0) write(event.data.body, extra);
219
+ else if (event.data.body !== void 0) write(event.data.body);
220
+ else if (extra !== void 0) write(extra);
221
+ else write("");
222
+ } });
223
+
224
+ //#endregion
7
225
  //#region src/eventStore/eventStoreDBContainer.ts
8
226
  const EVENTSTOREDB_PORT = 2113;
9
227
  const EVENTSTOREDB_IMAGE_NAME = "eventstore/eventstore";
@@ -59,7 +277,7 @@ const getSharedEventStoreDBTestContainer = () => lock.withAcquire(async () => {
59
277
  if (!container) container = new EventStoreDBContainer(EVENTSTOREDB_DEFAULT_IMAGE);
60
278
  startedContainer = await container.start();
61
279
  startedCount++;
62
- container.withLogConsumer((stream) => stream.on("data", (line) => console.log(line)).on("err", (line) => console.error(line)).on("end", () => console.log("Stream closed")));
280
+ container.withLogConsumer((stream) => stream.on("data", (line) => consoleLogger(LogEvent.info(String(line)))).on("err", (line) => consoleLogger(LogEvent.error(String(line)))).on("end", () => consoleLogger(LogEvent.info("Stream closed"))));
63
281
  return startedContainer;
64
282
  }, { lockId: "SharedEventStoreDBTestContainer" });
65
283
  const getSharedTestEventStoreDBClient = async () => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/eventStore/eventStoreDBContainer.ts","../src/eventStore/index.ts","../src/mongodb/mongoDBContainer.ts","../src/postgresql/postgreSQLContainer.ts"],"sourcesContent":["import { 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) => console.log(line))\n .on('err', (line) => console.error(line))\n .on('end', () => console.log('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-BLDUGuc9.js","../../almanac/dist/spanLogEvent-Cf3AGgm3.js","../../almanac/dist/console-BB7C_X6q.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-BLDUGuc9.js.map","//#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/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 { JSONSerializer as i, OtelLogFormatter as n, severityTextFor as r, logEventForSpan as t };\n//# sourceMappingURL=spanLogEvent-Cf3AGgm3.js.map","import { i as noopLogger, r as logger } from \"./logger-BLDUGuc9.js\";\nimport { i as JSONSerializer, n as OtelLogFormatter, t as logEventForSpan } from \"./spanLogEvent-Cf3AGgm3.js\";\n\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 noopTracer = () => ({ startSpan: async (_name, fn, _options) => fn(noopSpan) });\n\n//#endregion\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/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/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 { noopTracer as a, noopSpan as c, consoleLogger as i, ConsoleFormat as n, defaultTraceContextGenerator as o, consoleSpanLogger as r, compositeTracer as s, consoleTracer as t };\n//# sourceMappingURL=console-BB7C_X6q.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.23",
3
+ "version": "0.43.0-beta.24",
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.23",
50
+ "@event-driven-io/emmett": "0.43.0-beta.24",
51
51
  "@testcontainers/mongodb": "^11.14.0",
52
52
  "@testcontainers/postgresql": "^11.14.0",
53
53
  "testcontainers": "^11.14.0"