diff --git a/docs/modules/eventstoredb.md b/docs/modules/eventstoredb.md deleted file mode 100644 index 05dcdb1dc..000000000 --- a/docs/modules/eventstoredb.md +++ /dev/null @@ -1,19 +0,0 @@ -# EventStoreDB Module - -[EventStoreDB](https://eventstore.com) is an event sourcing database that stores data in streams of immutable events. - -## Install - -```bash -npm install @testcontainers/eventstoredb --save-dev -``` - -## Examples - - -[Start container:](../../packages/modules/eventstoredb/src/eventstoredb-container.test.ts) inside_block:startContainer - - - -[Subscribe to standard projection:](../../packages/modules/eventstoredb/src/eventstoredb-container.test.ts) inside_block:usingStandardProjections - diff --git a/docs/modules/kurrentdb.md b/docs/modules/kurrentdb.md new file mode 100644 index 000000000..d016770ef --- /dev/null +++ b/docs/modules/kurrentdb.md @@ -0,0 +1,19 @@ +# KurrentDB Module + +[KurrentDB](https://kurrent.io) is an event sourcing database that stores data in streams of immutable events. + +## Install + +```bash +npm install @testcontainers/kurrentdb --save-dev +``` + +## Examples + + +[Start container:](../../packages/modules/kurrentdb/src/kurrentdb-container.test.ts) inside_block:startContainer + + + +[Subscribe to standard projection:](../../packages/modules/kurrentdb/src/kurrentdb-container.test.ts) inside_block:usingStandardProjections + diff --git a/mkdocs.yml b/mkdocs.yml index b9d735cf7..514e31af2 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -57,11 +57,11 @@ nav: - CockroachDB: modules/cockroachdb.md - Elasticsearch: modules/elasticsearch.md - Etcd: modules/etcd.md - - EventStoreDB: modules/eventstoredb.md - GCloud: modules/gcloud.md - HiveMQ: modules/hivemq.md - K3s: modules/k3s.md - Kafka: modules/kafka.md + - KurrentDB: modules/kurrentdb.md - Localstack: modules/localstack.md - MariaDB: modules/mariadb.md - Mockserver: modules/mockserver.md diff --git a/package-lock.json b/package-lock.json index f12dd09b1..b18d81108 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2736,32 +2736,6 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eventstore/db-client": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@eventstore/db-client/-/db-client-6.2.1.tgz", - "integrity": "sha512-utUkIO3Ns9TzTHOTDg+eVTm2Z/Jj5X3VT/otZEWwgmOm7CgSnrWdOxEsAN1jfMht7oVBRB5iGHYFGA3IiQm/Ng==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@grpc/grpc-js": "^1.9.12", - "@types/debug": "^4.1.12", - "@types/google-protobuf": "^3.15.12", - "@types/node": "^16.18.67", - "debug": "^4.3.2", - "google-protobuf": "^3.21.2", - "uuid": "^8.3.2" - }, - "engines": { - "node": "^12.18.3 || >=14" - } - }, - "node_modules/@eventstore/db-client/node_modules/@types/node": { - "version": "16.18.123", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.123.tgz", - "integrity": "sha512-/n7I6V/4agSpJtFDKKFEa763Hc1z3hmvchobHS1TisCOTKD5nxq8NJ2iK7SRIMYL276Q9mgWOx2AWp5n2XI6eA==", - "dev": true, - "license": "MIT" - }, "node_modules/@fastify/busboy": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", @@ -3977,15 +3951,6 @@ "tar-fs": "^3.0.8" } }, - "node_modules/@kubernetes/client-node/node_modules/@types/node": { - "version": "22.9.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", - "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", - "dev": true, - "dependencies": { - "undici-types": "~6.19.8" - } - }, "node_modules/@kubernetes/client-node/node_modules/agent-base": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", @@ -4011,11 +3976,140 @@ "node": ">= 14" } }, - "node_modules/@kubernetes/client-node/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true + "node_modules/@kurrent/bridge": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@kurrent/bridge/-/bridge-0.1.1.tgz", + "integrity": "sha512-01oJEoA/L/cBr2QXZD00cabvflv/JrSg3eYS/NOkHib7uRaxm/qEsjEX2q98Pf5HhVaduFaRaVKwJ0E+wEhfdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@neon-rs/load": "^0.1.82" + }, + "optionalDependencies": { + "@kurrent/bridge-darwin-arm64": "0.1.1", + "@kurrent/bridge-darwin-x64": "0.1.1", + "@kurrent/bridge-linux-arm64-gnu": "0.1.1", + "@kurrent/bridge-linux-x64-gnu": "0.1.1", + "@kurrent/bridge-win32-x64-msvc": "0.1.1" + } + }, + "node_modules/@kurrent/bridge-darwin-arm64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@kurrent/bridge-darwin-arm64/-/bridge-darwin-arm64-0.1.1.tgz", + "integrity": "sha512-vGBCkDLNjozqCn5fIEPDJBo5tSqmV/J78sskJ7wFzVneHRhEZkI4t3M/yu2Yz10ooyEnKzaJ5RnrZYPBplq1pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "ISC", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@kurrent/bridge-darwin-x64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@kurrent/bridge-darwin-x64/-/bridge-darwin-x64-0.1.1.tgz", + "integrity": "sha512-6GICehReyvpjsg8mOCO4H/6anNHMg02yNWUXo4+3iyeBEybvSvCcWDHq8N7mlJtAlScwlsPYVuq+E8ZcprheKQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "ISC", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@kurrent/bridge-linux-arm64-gnu": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@kurrent/bridge-linux-arm64-gnu/-/bridge-linux-arm64-gnu-0.1.1.tgz", + "integrity": "sha512-/qwp9/UoboJtZehglbvsHl/u82gn0RTj+JckrN97+0R2LTPmhe5K45iaSe+ysyb4+KHk3B1pZEbkLl9PHjZxuQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "ISC", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@kurrent/bridge-linux-x64-gnu": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@kurrent/bridge-linux-x64-gnu/-/bridge-linux-x64-gnu-0.1.1.tgz", + "integrity": "sha512-g7pGS/ZJd8NGA5DlC20Fh/Z/jvaOBC++BM/eSTr85UBwhG0/Pgk1AP9xbLY0N/sOCjKOXgxDqx9iFy54Q/vYoQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "ISC", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@kurrent/bridge-win32-x64-msvc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@kurrent/bridge-win32-x64-msvc/-/bridge-win32-x64-msvc-0.1.1.tgz", + "integrity": "sha512-BZ9bUu3jS+ikeR3Y9bip+Md3usR+Q4fILDhesFvDYFrh8YwcsVjFydZvFklC9DCf7QmogJqNY35dj3Xs6nAPsw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "ISC", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@kurrent/kurrentdb-client": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@kurrent/kurrentdb-client/-/kurrentdb-client-1.0.1.tgz", + "integrity": "sha512-i/UNqNNXt6ju23h3B5LGypq6azwV8t3WJaAfQSFzPmhu3QkNkTAoacpCKLSHxs3/cbKOcb4tehsgs2I7fNU5qg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.12.4", + "@kurrent/bridge": "^0.1.1", + "@types/debug": "^4.1.12", + "@types/google-protobuf": "^3.15.12", + "@types/node": "^22.10.2", + "debug": "^4.4.0", + "google-protobuf": "^3.21.4", + "uuid": "11.0.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@kurrent/kurrentdb-client/node_modules/@grpc/grpc-js": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.4.tgz", + "integrity": "sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@kurrent/kurrentdb-client/node_modules/uuid": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz", + "integrity": "sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } }, "node_modules/@modelcontextprotocol/sdk": { "version": "1.11.0", @@ -4108,6 +4202,13 @@ "node": ">= 18.0.0" } }, + "node_modules/@neon-rs/load": { + "version": "0.1.82", + "resolved": "https://registry.npmjs.org/@neon-rs/load/-/load-0.1.82.tgz", + "integrity": "sha512-H4Gu2o5kPp+JOEhRrOQCnJnf7X6sv9FBLttM/wSbb4efsgFWeHzfU/ItZ01E5qqEk+U6QGdeVO7lxXIAtYHr5A==", + "dev": true, + "license": "MIT" + }, "node_modules/@noble/hashes": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", @@ -6032,10 +6133,6 @@ "resolved": "packages/modules/etcd", "link": true }, - "node_modules/@testcontainers/eventstoredb": { - "resolved": "packages/modules/eventstoredb", - "link": true - }, "node_modules/@testcontainers/gcloud": { "resolved": "packages/modules/gcloud", "link": true @@ -6052,6 +6149,10 @@ "resolved": "packages/modules/kafka", "link": true }, + "node_modules/@testcontainers/kurrentdb": { + "resolved": "packages/modules/kurrentdb", + "link": true + }, "node_modules/@testcontainers/localstack": { "resolved": "packages/modules/localstack", "link": true @@ -6438,11 +6539,12 @@ } }, "node_modules/@types/node": { - "version": "20.10.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.8.tgz", - "integrity": "sha512-f8nQs3cLxbAFc00vEU59yf9UyGUftkPaLGfvbVOIDdx2i1b8epBqj2aNGyP19fiyXWvlmZ7qC1XLjAzw/OKIeA==", + "version": "22.15.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.21.tgz", + "integrity": "sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==", + "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.21.0" } }, "node_modules/@types/node-fetch": { @@ -6455,6 +6557,12 @@ "form-data": "^4.0.0" } }, + "node_modules/@types/node/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, "node_modules/@types/pg": { "version": "8.15.0", "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.15.0.tgz", @@ -11102,23 +11210,6 @@ "dev": true, "license": "MIT" }, - "node_modules/firebase-admin/node_modules/@types/node": { - "version": "22.15.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.14.tgz", - "integrity": "sha512-BL1eyu/XWsFGTtDWOYULQEs4KR0qdtYfCxYAUYRoB7JP7h9ETYLgQTww6kH8Sj2C0pFGgrpM0XKv6/kbIzYJ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/firebase-admin/node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, "node_modules/firebase-admin/node_modules/uuid": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", @@ -14242,21 +14333,6 @@ "node": ">= 14" } }, - "node_modules/mariadb/node_modules/@types/node": { - "version": "22.8.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.1.tgz", - "integrity": "sha512-k6Gi8Yyo8EtrNtkHXutUu2corfDf9su95VYVP10aGYMMROM6SAItZi0w1XszA6RtWTHSVp5OeFof37w0IEqCQg==", - "dev": true, - "dependencies": { - "undici-types": "~6.19.8" - } - }, - "node_modules/mariadb/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true - }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -21287,6 +21363,7 @@ "packages/modules/eventstoredb": { "name": "@testcontainers/eventstoredb", "version": "10.28.0", + "extraneous": true, "license": "MIT", "dependencies": { "testcontainers": "^10.28.0" @@ -21345,6 +21422,17 @@ "kafkajs": "^2.2.4" } }, + "packages/modules/kurrentdb": { + "name": "@testcontainers/kurrentdb", + "version": "10.28.0", + "license": "MIT", + "dependencies": { + "testcontainers": "^10.28.0" + }, + "devDependencies": { + "@kurrent/kurrentdb-client": "^1.0.1" + } + }, "packages/modules/localstack": { "name": "@testcontainers/localstack", "version": "10.28.0", diff --git a/packages/modules/eventstoredb/src/eventstoredb-container.ts b/packages/modules/eventstoredb/src/eventstoredb-container.ts deleted file mode 100644 index 3e70a18d1..000000000 --- a/packages/modules/eventstoredb/src/eventstoredb-container.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { AbstractStartedContainer, GenericContainer, Wait } from "testcontainers"; - -export class StartedEventStoreDBContainer extends AbstractStartedContainer { - getConnectionString(): string { - return `esdb://${this.getHost()}:${this.getFirstMappedPort()}?tls=false`; - } -} - -const EVENT_STORE_DB_PORT = 2113; - -export class EventStoreDBContainer extends GenericContainer { - constructor(image: string) { - super(image); - - this.withExposedPorts(EVENT_STORE_DB_PORT) - .withEnvironment({ - EVENTSTORE_CLUSTER_SIZE: "1", - EVENTSTORE_RUN_PROJECTIONS: "All", - EVENTSTORE_START_STANDARD_PROJECTIONS: "true", - EVENTSTORE_INSECURE: "true", - }) - .withStartupTimeout(120_000) - .withWaitStrategy(Wait.forHealthCheck()); - } - - public override async start(): Promise { - return new StartedEventStoreDBContainer(await super.start()); - } -} diff --git a/packages/modules/eventstoredb/src/index.ts b/packages/modules/eventstoredb/src/index.ts deleted file mode 100644 index 99a672b14..000000000 --- a/packages/modules/eventstoredb/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { EventStoreDBContainer, StartedEventStoreDBContainer } from "./eventstoredb-container"; diff --git a/packages/modules/eventstoredb/package.json b/packages/modules/kurrentdb/package.json similarity index 82% rename from packages/modules/eventstoredb/package.json rename to packages/modules/kurrentdb/package.json index 35ac2123a..d5332723c 100644 --- a/packages/modules/eventstoredb/package.json +++ b/packages/modules/kurrentdb/package.json @@ -1,14 +1,14 @@ { - "name": "@testcontainers/eventstoredb", + "name": "@testcontainers/kurrentdb", "version": "10.28.0", "license": "MIT", "keywords": [ - "eventstoredb", + "kurrentdb", "testing", "docker", "testcontainers" ], - "description": "EventStoreDB module for Testcontainers", + "description": "KurrentDB module for Testcontainers", "homepage": "https://github.com/testcontainers/testcontainers-node#readme", "repository": { "type": "git", @@ -29,7 +29,7 @@ "build": "tsc --project tsconfig.build.json" }, "devDependencies": { - "@eventstore/db-client": "^6.2.1" + "@kurrent/kurrentdb-client": "^1.0.1" }, "dependencies": { "testcontainers": "^10.28.0" diff --git a/packages/modules/kurrentdb/src/index.ts b/packages/modules/kurrentdb/src/index.ts new file mode 100644 index 000000000..261145939 --- /dev/null +++ b/packages/modules/kurrentdb/src/index.ts @@ -0,0 +1 @@ +export { KurrentDbContainer, StartedKurrentDbContainer } from "./kurrentdb-container"; diff --git a/packages/modules/eventstoredb/src/eventstoredb-container.test.ts b/packages/modules/kurrentdb/src/kurrentdb-container.test.ts similarity index 76% rename from packages/modules/eventstoredb/src/eventstoredb-container.test.ts rename to packages/modules/kurrentdb/src/kurrentdb-container.test.ts index 4ac069048..0fff3c557 100644 --- a/packages/modules/eventstoredb/src/eventstoredb-container.test.ts +++ b/packages/modules/kurrentdb/src/kurrentdb-container.test.ts @@ -1,14 +1,14 @@ -import { EventStoreDBClient, StreamingRead, StreamSubscription } from "@eventstore/db-client"; -import { EventStoreDBContainer } from "./eventstoredb-container"; +import { KurrentDBClient, StreamSubscription } from "@kurrent/kurrentdb-client"; +import { KurrentDbContainer } from "./kurrentdb-container"; -const IMAGE = "eventstore/eventstore:24.10"; +const IMAGE = "kurrentplatform/kurrentdb:25.0"; -describe("EventStoreDBContainer", { timeout: 240_000 }, () => { +describe("KurrentDbContainer", { timeout: 240_000 }, () => { // startContainer { it("should execute write and read", async () => { - const container = await new EventStoreDBContainer(IMAGE).start(); + const container = await new KurrentDbContainer(IMAGE).start(); - const client = EventStoreDBClient.connectionString(container.getConnectionString()); + const client = KurrentDBClient.connectionString(container.getConnectionString()); await client.appendToStream("User-1", [ { @@ -33,7 +33,7 @@ describe("EventStoreDBContainer", { timeout: 240_000 }, () => { metadata: { someMetadata: "bar", }, - revision: 0n, + revision: 0, streamId: "User-1", type: "UserCreated", }), @@ -46,8 +46,8 @@ describe("EventStoreDBContainer", { timeout: 240_000 }, () => { // usingStandardProjections { it("should use built-in projections", async () => { - const container = await new EventStoreDBContainer(IMAGE).start(); - const client = EventStoreDBClient.connectionString(container.getConnectionString()); + const container = await new KurrentDbContainer(IMAGE).start(); + const client = KurrentDBClient.connectionString(container.getConnectionString()); await client.appendToStream("Todo-1", [ { @@ -89,7 +89,7 @@ describe("EventStoreDBContainer", { timeout: 240_000 }, () => { // } }); -async function consumeSteamingRead(read: StreamingRead): Promise { +async function consumeSteamingRead(read: AsyncIterableIterator): Promise { const events = []; for await (const event of read) { diff --git a/packages/modules/kurrentdb/src/kurrentdb-container.ts b/packages/modules/kurrentdb/src/kurrentdb-container.ts new file mode 100644 index 000000000..53b73a237 --- /dev/null +++ b/packages/modules/kurrentdb/src/kurrentdb-container.ts @@ -0,0 +1,27 @@ +import { AbstractStartedContainer, GenericContainer, Wait } from "testcontainers"; + +export class StartedKurrentDbContainer extends AbstractStartedContainer { + getConnectionString(): string { + return `esdb://${this.getHost()}:${this.getFirstMappedPort()}?tls=false`; + } +} + +export class KurrentDbContainer extends GenericContainer { + constructor(image: string) { + super(image); + + this.withExposedPorts(2113) + .withEnvironment({ + KURRENTDB_CLUSTER_SIZE: "1", + KURRENTDB_RUN_PROJECTIONS: "All", + KURRENTDB_START_STANDARD_PROJECTIONS: "true", + KURRENTDB_INSECURE: "true", + }) + .withStartupTimeout(120_000) + .withWaitStrategy(Wait.forHealthCheck()); + } + + public override async start(): Promise { + return new StartedKurrentDbContainer(await super.start()); + } +} diff --git a/packages/modules/eventstoredb/tsconfig.build.json b/packages/modules/kurrentdb/tsconfig.build.json similarity index 100% rename from packages/modules/eventstoredb/tsconfig.build.json rename to packages/modules/kurrentdb/tsconfig.build.json diff --git a/packages/modules/eventstoredb/tsconfig.json b/packages/modules/kurrentdb/tsconfig.json similarity index 100% rename from packages/modules/eventstoredb/tsconfig.json rename to packages/modules/kurrentdb/tsconfig.json