diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3416031..2fb66ce 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,4 @@ -name: TypeScript CI Pipeline +name: Full Stack CI Pipeline # Updated the name since this handles Go now too! on: push: @@ -7,12 +7,14 @@ on: branches: [ "main" ] jobs: - # JOB 1: Local Build - fast-checks: + # ========================================== + # JOB 1: Frontend (Runs First) + # ========================================== + fast-checks-frontend: runs-on: ubuntu-latest defaults: run: - working-directory: ./app + working-directory: ./frontend steps: - name: Checkout Code uses: actions/checkout@v4 @@ -20,32 +22,88 @@ jobs: - name: Setup Bun uses: oven-sh/setup-bun@v2 with: - bun-version: latest # You can pin a specific version here, e.g., '1.1.0' + bun-version: latest - - name: Install Dependencies + - name: Install TypeScript Dependencies run: bun install --frozen-lockfile - - name: Check Lint + - name: Check TypeScript Lint run: bun run lint - - name: Check Compile + - name: Check TypeScript Compile run: bun run build - # JOB 2: Docker Build & Integration Tests - docker-validation: - needs: fast-checks # Only run if lint/compile passes + - name: Run TypeScript Tests + run: bun run test + + - name: Verify Frontend Docker Build + run: docker build -t frontend-test . + + # ========================================== + # JOB 2: Backend (Waits for Frontend) + # ========================================== + fast-checks-backend: runs-on: ubuntu-latest + defaults: + run: + working-directory: ./backend + steps: + - name: Checkout code + uses: actions/checkout@v4 - steps: - - name: Checkout Code + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: '1.22' + cache: true + + - name: Install Go Dependencies + run: go mod download + + - name: Check Go Lint + uses: golangci/golangci-lint-action@v9 + with: + version: latest + args: --timeout=5m + working-directory: backend + + - name: Run Go Tests + run: go test -v ./... + working-directory: ./backend + + - name: Verify Backend Docker Build + run: docker build -t backend-test . + + # ========================================== + # JOB 3: Money Module (Waits for Frontend) + # ========================================== + fast-checks-money-module: + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./money-module + steps: + - name: Checkout code uses: actions/checkout@v4 - # 1. Check Docker Build - # This ensures your Dockerfile is valid and the app builds inside it. - - name: Build Docker Image - run: docker build --target dev -t ts-app-test:latest -f app/Dockerfile . + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: '1.22' + cache: true + + - name: Install Go Dependencies + run: go mod download + + - name: Check Go Lint + uses: golangci/golangci-lint-action@v9 + with: + version: latest + args: --timeout=5m + working-directory: money-module - # 2. Run Tests ON the Docker Image - # This runs "bun test" inside the container you just built. - - name: Run Tests in Container - run: docker run --rm ts-app-test:latest bun test + - name: Run Go Tests + run: go test -v ./... + working-directory: ./money-module + - name: Verify Money Module Docker Build + run: docker build -t money-module-test . diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 0000000..827494c --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,44 @@ +version: "2" + +run: + timeout: 5m + +output: + formats: + text: {} + +formatters: + enable: + - gofmt + - goimports + +linters: + enable: + - bodyclose + - errcheck + - funlen + - govet + - ineffassign + - lll + - misspell + - staticcheck + - unused + settings: + funlen: + lines: 88 + govet: + enable: + - shadow + lll: + line-length: 88 + tab-width: 4 + misspell: + locale: UK + exclusions: + paths: + - vendor + - testdata + - third_party + - builtin + - examples + diff --git a/Dockerfile b/Dockerfile index 18a5ec8..1e509c6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,9 @@ RUN apt-get update && apt-get install -y \ golang \ && rm -rf /var/lib/apt/lists/* RUN curl -fsSL https://bun.com/install | bash + # default go tooling +ENV PATH="/root/go/bin:${PATH}" RUN go install golang.org/x/tools/gopls@latest \ && go install github.com/go-delve/delve/cmd/dlv@latest \ && go install golang.org/x/tools/cmd/goimports@latest \ diff --git a/README.md b/README.md index a34716a..f41acbe 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,11 @@ If this doesn't work install the docker-compose plugin docker exec -it warchest-dev-container bash ``` +3. Go linting +```bash +golangci-lint run +``` + ### Closing down development 1. To exit the dev environment ```bash @@ -25,3 +30,5 @@ docker compose down ``` use `bun run lint` for lint and `bun run test` in the dev shell for tests. tests need to end in the suffix .test.ts. + + diff --git a/app/Dockerfile b/app/Dockerfile deleted file mode 100644 index b5d5f30..0000000 --- a/app/Dockerfile +++ /dev/null @@ -1,27 +0,0 @@ -# syntax=docker/dockerfile:1 -FROM oven/bun:1 AS base -WORKDIR /app - -FROM base AS deps -COPY app/package.json app/bun.lock ./ -RUN bun install --frozen-lockfile - -# --- DEV STAGE --- -FROM base AS dev -COPY --from=deps /app/node_modules ./node_modules -COPY app/ . -EXPOSE 3000 -CMD ["bun", "run", "dev", "--host", "0.0.0.0"] - -# --- PRODUCTION STAGE --- -FROM base AS builder -COPY --from=deps /app/node_modules ./node_modules -COPY app/ . -RUN bun run build - -FROM base AS production -COPY --from=builder /app/.output ./.output -COPY --from=builder /app/node_modules ./node_modules -COPY app/package.json ./ -EXPOSE 3000 -CMD ["bun", "run", "preview", "--host", "0.0.0.0"] diff --git a/app/db/db.ts b/app/db/db.ts deleted file mode 100644 index a61e93d..0000000 --- a/app/db/db.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { drizzle } from "drizzle-orm/postgres-js"; -import postgres from "postgres"; -import * as schema from "./schema"; - -export { schema }; -export type Schema = typeof schema; - -/** - * Create a Drizzle client connected to Postgres. - * Uses DATABASE_URL from env if no url is provided. - */ -export function createDb(url?: string) { - const connectionString = url ?? process.env.DATABASE_URL; - if (!connectionString) { - throw new Error("DATABASE_URL (or url argument) is required"); - } - const client = postgres(connectionString, { max: 10 }); - return drizzle(client, { schema }); -} diff --git a/app/db/drizzle.config.ts b/app/db/drizzle.config.ts deleted file mode 100644 index a93b7e1..0000000 --- a/app/db/drizzle.config.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { defineConfig } from "drizzle-kit"; - -export default defineConfig({ - schema: "./db/schema.ts", - out: "./db/migrations", - dialect: "postgresql", - dbCredentials: { - url: process.env.DATABASE_URL ?? "postgres://postgres:postgres@127.0.0.1:5432/warchest", - }, -}); diff --git a/app/db/schema.ts b/app/db/schema.ts deleted file mode 100644 index 65ef236..0000000 --- a/app/db/schema.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { pgTable, serial, text, timestamp } from "drizzle-orm/pg-core"; - -/** - * Shared schema — used by both app and money-module. - * Add your tables here. - */ -export const example = pgTable("example", { - id: serial("id").primaryKey(), - name: text("name").notNull(), - createdAt: timestamp("created_at", { withTimezone: true }).defaultNow().notNull(), -}); diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..b714c52 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,13 @@ +# syntax=docker/dockerfile:1 +FROM golang:1.22-alpine AS base +WORKDIR /backend + +FROM base AS deps +COPY go.mod go.sum* ./ +RUN go mod download + +FROM base AS dev +COPY . . +EXPOSE 6969 + +CMD ["/server"] diff --git a/backend/go.mod b/backend/go.mod new file mode 100644 index 0000000..afbdc8c --- /dev/null +++ b/backend/go.mod @@ -0,0 +1,3 @@ +module backend + +go 1.22.2 diff --git a/backend/main.go b/backend/main.go new file mode 100644 index 0000000..a3dd973 --- /dev/null +++ b/backend/main.go @@ -0,0 +1,7 @@ +package main + +import "fmt" + +func main() { + fmt.Println("Hello, World!") +} diff --git a/app/.cta.json b/frontend/.cta.json similarity index 100% rename from app/.cta.json rename to frontend/.cta.json diff --git a/app/.gitignore b/frontend/.gitignore similarity index 100% rename from app/.gitignore rename to frontend/.gitignore diff --git a/app/.prettierignore b/frontend/.prettierignore similarity index 100% rename from app/.prettierignore rename to frontend/.prettierignore diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..488eb9a --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,32 @@ +# syntax=docker/dockerfile:1 +FROM oven/bun:1 AS base +# Set your preferred working directory +WORKDIR /frontend + +# --- DEPENDENCIES STAGE --- +FROM base AS deps +COPY package.json bun.lock* ./ +RUN bun install --frozen-lockfile + +# --- DEV STAGE --- +FROM base AS dev +# Notice we pull from /frontend/node_modules now +COPY --from=deps /frontend/node_modules ./node_modules +# Copy local files into the current WORKDIR (/frontend) +COPY . . +EXPOSE 3000 +CMD ["bun", "run", "dev", "--host", "0.0.0.0"] + +# --- BUILDER STAGE --- +FROM base AS builder +COPY --from=deps /frontend/node_modules ./node_modules +COPY . . +RUN bun run build + +# --- PRODUCTION STAGE --- +FROM base AS production +COPY --from=builder /frontend/.output ./.output +COPY --from=builder /frontend/node_modules ./node_modules +COPY package.json ./ +EXPOSE 3000 +CMD ["bun", "run", "preview", "--host", "0.0.0.0"] diff --git a/app/README.md b/frontend/README.md similarity index 100% rename from app/README.md rename to frontend/README.md diff --git a/app/bun.lock b/frontend/bun.lock similarity index 100% rename from app/bun.lock rename to frontend/bun.lock diff --git a/app/components.json b/frontend/components.json similarity index 100% rename from app/components.json rename to frontend/components.json diff --git a/app/eslint.config.js b/frontend/eslint.config.js similarity index 100% rename from app/eslint.config.js rename to frontend/eslint.config.js diff --git a/app/network.ts b/frontend/network.ts similarity index 100% rename from app/network.ts rename to frontend/network.ts diff --git a/app/package.json b/frontend/package.json similarity index 100% rename from app/package.json rename to frontend/package.json diff --git a/app/prettier.config.js b/frontend/prettier.config.js similarity index 100% rename from app/prettier.config.js rename to frontend/prettier.config.js diff --git a/app/public/favicon.ico b/frontend/public/favicon.ico similarity index 100% rename from app/public/favicon.ico rename to frontend/public/favicon.ico diff --git a/app/public/logo192.png b/frontend/public/logo192.png similarity index 100% rename from app/public/logo192.png rename to frontend/public/logo192.png diff --git a/app/public/logo512.png b/frontend/public/logo512.png similarity index 100% rename from app/public/logo512.png rename to frontend/public/logo512.png diff --git a/app/public/manifest.json b/frontend/public/manifest.json similarity index 100% rename from app/public/manifest.json rename to frontend/public/manifest.json diff --git a/app/public/robots.txt b/frontend/public/robots.txt similarity index 100% rename from app/public/robots.txt rename to frontend/public/robots.txt diff --git a/app/public/tanstack-circle-logo.png b/frontend/public/tanstack-circle-logo.png similarity index 100% rename from app/public/tanstack-circle-logo.png rename to frontend/public/tanstack-circle-logo.png diff --git a/app/public/tanstack-word-logo-white.svg b/frontend/public/tanstack-word-logo-white.svg similarity index 100% rename from app/public/tanstack-word-logo-white.svg rename to frontend/public/tanstack-word-logo-white.svg diff --git a/app/src/components/component-example.tsx b/frontend/src/components/component-example.tsx similarity index 100% rename from app/src/components/component-example.tsx rename to frontend/src/components/component-example.tsx diff --git a/app/src/components/example.tsx b/frontend/src/components/example.tsx similarity index 100% rename from app/src/components/example.tsx rename to frontend/src/components/example.tsx diff --git a/app/src/components/ui/alert-dialog.tsx b/frontend/src/components/ui/alert-dialog.tsx similarity index 100% rename from app/src/components/ui/alert-dialog.tsx rename to frontend/src/components/ui/alert-dialog.tsx diff --git a/app/src/components/ui/badge.tsx b/frontend/src/components/ui/badge.tsx similarity index 100% rename from app/src/components/ui/badge.tsx rename to frontend/src/components/ui/badge.tsx diff --git a/app/src/components/ui/button.tsx b/frontend/src/components/ui/button.tsx similarity index 100% rename from app/src/components/ui/button.tsx rename to frontend/src/components/ui/button.tsx diff --git a/app/src/components/ui/card.tsx b/frontend/src/components/ui/card.tsx similarity index 100% rename from app/src/components/ui/card.tsx rename to frontend/src/components/ui/card.tsx diff --git a/app/src/components/ui/combobox.tsx b/frontend/src/components/ui/combobox.tsx similarity index 100% rename from app/src/components/ui/combobox.tsx rename to frontend/src/components/ui/combobox.tsx diff --git a/app/src/components/ui/dropdown-menu.tsx b/frontend/src/components/ui/dropdown-menu.tsx similarity index 100% rename from app/src/components/ui/dropdown-menu.tsx rename to frontend/src/components/ui/dropdown-menu.tsx diff --git a/app/src/components/ui/field.tsx b/frontend/src/components/ui/field.tsx similarity index 100% rename from app/src/components/ui/field.tsx rename to frontend/src/components/ui/field.tsx diff --git a/app/src/components/ui/input-group.tsx b/frontend/src/components/ui/input-group.tsx similarity index 100% rename from app/src/components/ui/input-group.tsx rename to frontend/src/components/ui/input-group.tsx diff --git a/app/src/components/ui/input.tsx b/frontend/src/components/ui/input.tsx similarity index 100% rename from app/src/components/ui/input.tsx rename to frontend/src/components/ui/input.tsx diff --git a/app/src/components/ui/label.tsx b/frontend/src/components/ui/label.tsx similarity index 100% rename from app/src/components/ui/label.tsx rename to frontend/src/components/ui/label.tsx diff --git a/app/src/components/ui/select.tsx b/frontend/src/components/ui/select.tsx similarity index 100% rename from app/src/components/ui/select.tsx rename to frontend/src/components/ui/select.tsx diff --git a/app/src/components/ui/separator.tsx b/frontend/src/components/ui/separator.tsx similarity index 100% rename from app/src/components/ui/separator.tsx rename to frontend/src/components/ui/separator.tsx diff --git a/app/src/components/ui/textarea.tsx b/frontend/src/components/ui/textarea.tsx similarity index 100% rename from app/src/components/ui/textarea.tsx rename to frontend/src/components/ui/textarea.tsx diff --git a/app/src/lib/app-db.ts b/frontend/src/lib/app-db.ts similarity index 100% rename from app/src/lib/app-db.ts rename to frontend/src/lib/app-db.ts diff --git a/app/src/lib/utils.ts b/frontend/src/lib/utils.ts similarity index 100% rename from app/src/lib/utils.ts rename to frontend/src/lib/utils.ts diff --git a/app/src/logo.svg b/frontend/src/logo.svg similarity index 100% rename from app/src/logo.svg rename to frontend/src/logo.svg diff --git a/app/src/routeTree.gen.ts b/frontend/src/routeTree.gen.ts similarity index 100% rename from app/src/routeTree.gen.ts rename to frontend/src/routeTree.gen.ts diff --git a/app/src/router.tsx b/frontend/src/router.tsx similarity index 100% rename from app/src/router.tsx rename to frontend/src/router.tsx diff --git a/app/src/routes/__root.tsx b/frontend/src/routes/__root.tsx similarity index 100% rename from app/src/routes/__root.tsx rename to frontend/src/routes/__root.tsx diff --git a/app/src/routes/index.tsx b/frontend/src/routes/index.tsx similarity index 100% rename from app/src/routes/index.tsx rename to frontend/src/routes/index.tsx diff --git a/app/src/styles.css b/frontend/src/styles.css similarity index 100% rename from app/src/styles.css rename to frontend/src/styles.css diff --git a/app/test/integration/ci-cd-sanity.test.ts b/frontend/test/integration/ci-cd-sanity.test.ts similarity index 100% rename from app/test/integration/ci-cd-sanity.test.ts rename to frontend/test/integration/ci-cd-sanity.test.ts diff --git a/app/tsconfig.json b/frontend/tsconfig.json similarity index 100% rename from app/tsconfig.json rename to frontend/tsconfig.json diff --git a/app/vite.config.ts b/frontend/vite.config.ts similarity index 100% rename from app/vite.config.ts rename to frontend/vite.config.ts diff --git a/money-module/Dockerfile b/money-module/Dockerfile index bf6644a..eab7c98 100644 --- a/money-module/Dockerfile +++ b/money-module/Dockerfile @@ -1,14 +1,15 @@ # syntax=docker/dockerfile:1 -# language which we use -FROM oven/bun:1 AS base +FROM golang:1.22-alpine AS base WORKDIR /money-module FROM base AS deps -COPY money-module/package.json ./ -RUN bun install +COPY go.mod go.sum* ./ +RUN go mod download + FROM base AS dev -COPY --from=deps /money-module/node_modules ./node_modules -COPY money-module/ . -EXPOSE 6767 -CMD ["bun", "run", "index.ts"] +COPY . . +EXPOSE 6767 + + +CMD ["go", "run", "main.go"] diff --git a/money-module/README.md b/money-module/README.md deleted file mode 100644 index 657fccb..0000000 --- a/money-module/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# money-module - -To install dependencies: - -```bash -bun install -``` - -To run: - -```bash -bun run index.ts -``` - -This project was created using `bun init` in bun v1.3.1. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime. diff --git a/money-module/bun.lock b/money-module/bun.lock deleted file mode 100644 index 9db560d..0000000 --- a/money-module/bun.lock +++ /dev/null @@ -1,284 +0,0 @@ -{ - "lockfileVersion": 1, - "configVersion": 0, - "workspaces": { - "": { - "name": "money-module", - "dependencies": { - "@grpc/grpc-js": "^1.14.0", - "drizzle-orm": "^0.38.0", - "postgres": "^3.4.0", - "tigerbeetle-node": "0.16.68", - }, - "devDependencies": { - "@types/bun": "latest", - "drizzle-kit": "^0.30.0", - }, - "peerDependencies": { - "typescript": "^5", - }, - }, - }, - "trustedDependencies": [ - "tigerbeetle-node", - ], - "packages": { - "@drizzle-team/brocli": ["@drizzle-team/brocli@0.10.2", "", {}, "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w=="], - - "@esbuild-kit/core-utils": ["@esbuild-kit/core-utils@3.3.2", "", { "dependencies": { "esbuild": "~0.18.20", "source-map-support": "^0.5.21" } }, "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ=="], - - "@esbuild-kit/esm-loader": ["@esbuild-kit/esm-loader@2.6.5", "", { "dependencies": { "@esbuild-kit/core-utils": "^3.3.2", "get-tsconfig": "^4.7.0" } }, "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA=="], - - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.19.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA=="], - - "@esbuild/android-arm": ["@esbuild/android-arm@0.19.12", "", { "os": "android", "cpu": "arm" }, "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w=="], - - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.19.12", "", { "os": "android", "cpu": "arm64" }, "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA=="], - - "@esbuild/android-x64": ["@esbuild/android-x64@0.19.12", "", { "os": "android", "cpu": "x64" }, "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew=="], - - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.19.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g=="], - - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.19.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A=="], - - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.19.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA=="], - - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.19.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg=="], - - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.19.12", "", { "os": "linux", "cpu": "arm" }, "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w=="], - - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.19.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA=="], - - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.19.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA=="], - - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.19.12", "", { "os": "linux", "cpu": "none" }, "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA=="], - - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.19.12", "", { "os": "linux", "cpu": "none" }, "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w=="], - - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.19.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg=="], - - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.19.12", "", { "os": "linux", "cpu": "none" }, "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg=="], - - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.19.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg=="], - - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.19.12", "", { "os": "linux", "cpu": "x64" }, "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg=="], - - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.19.12", "", { "os": "none", "cpu": "x64" }, "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA=="], - - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.19.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw=="], - - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.19.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA=="], - - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.19.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A=="], - - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.19.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ=="], - - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.19.12", "", { "os": "win32", "cpu": "x64" }, "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA=="], - - "@grpc/grpc-js": ["@grpc/grpc-js@1.14.3", "", { "dependencies": { "@grpc/proto-loader": "^0.8.0", "@js-sdsl/ordered-map": "^4.4.2" } }, "sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA=="], - - "@grpc/proto-loader": ["@grpc/proto-loader@0.8.0", "", { "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", "protobufjs": "^7.5.3", "yargs": "^17.7.2" }, "bin": { "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" } }, "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ=="], - - "@js-sdsl/ordered-map": ["@js-sdsl/ordered-map@4.4.2", "", {}, "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw=="], - - "@petamoriken/float16": ["@petamoriken/float16@3.9.3", "", {}, "sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g=="], - - "@protobufjs/aspromise": ["@protobufjs/aspromise@1.1.2", "", {}, "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="], - - "@protobufjs/base64": ["@protobufjs/base64@1.1.2", "", {}, "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="], - - "@protobufjs/codegen": ["@protobufjs/codegen@2.0.4", "", {}, "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="], - - "@protobufjs/eventemitter": ["@protobufjs/eventemitter@1.1.0", "", {}, "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="], - - "@protobufjs/fetch": ["@protobufjs/fetch@1.1.0", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" } }, "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ=="], - - "@protobufjs/float": ["@protobufjs/float@1.0.2", "", {}, "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="], - - "@protobufjs/inquire": ["@protobufjs/inquire@1.1.0", "", {}, "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="], - - "@protobufjs/path": ["@protobufjs/path@1.1.2", "", {}, "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="], - - "@protobufjs/pool": ["@protobufjs/pool@1.1.0", "", {}, "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="], - - "@protobufjs/utf8": ["@protobufjs/utf8@1.1.0", "", {}, "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="], - - "@types/bun": ["@types/bun@1.3.6", "", { "dependencies": { "bun-types": "1.3.6" } }, "sha512-uWCv6FO/8LcpREhenN1d1b6fcspAB+cefwD7uti8C8VffIv0Um08TKMn98FynpTiU38+y2dUO55T11NgDt8VAA=="], - - "@types/node": ["@types/node@25.0.10", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg=="], - - "@types/pg": ["@types/pg@8.16.0", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-RmhMd/wD+CF8Dfo+cVIy3RR5cl8CyfXQ0tGgW6XBL8L4LM/UTEbNXYRbLwU6w+CgrKBNbrQWt4FUtTfaU5jSYQ=="], - - "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - - "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], - - "buffer-writer": ["buffer-writer@1.0.1", "", {}, "sha512-I5M7UuSeDn5aQR2BSH2+270w9qdd2Rd5LB/XhTcIRdSmeLueMNlY3BaMoHtoASmjEQf/NOAqMIZaoAMSpomW6w=="], - - "bun-types": ["bun-types@1.3.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-OlFwHcnNV99r//9v5IIOgQ9Uk37gZqrNMCcqEaExdkVq3Avwqok1bJFmvGMCkCE0FqzdY8VMOZpfpR3lwI+CsQ=="], - - "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], - - "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - - "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - - "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - - "drizzle-kit": ["drizzle-kit@0.30.6", "", { "dependencies": { "@drizzle-team/brocli": "^0.10.2", "@esbuild-kit/esm-loader": "^2.5.5", "esbuild": "^0.19.7", "esbuild-register": "^3.5.0", "gel": "^2.0.0" }, "bin": { "drizzle-kit": "bin.cjs" } }, "sha512-U4wWit0fyZuGuP7iNmRleQyK2V8wCuv57vf5l3MnG4z4fzNTjY/U13M8owyQ5RavqvqxBifWORaR3wIUzlN64g=="], - - "drizzle-orm": ["drizzle-orm@0.38.4", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/react": ">=18", "@types/sql.js": "*", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "react": ">=18", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/react", "@types/sql.js", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "knex", "kysely", "mysql2", "pg", "postgres", "react", "sql.js", "sqlite3"] }, "sha512-s7/5BpLKO+WJRHspvpqTydxFob8i1vo2rEx4pY6TGY7QSMuUfWUuzaY0DIpXCkgHOo37BaFC+SJQb99dDUXT3Q=="], - - "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "env-paths": ["env-paths@3.0.0", "", {}, "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A=="], - - "esbuild": ["esbuild@0.19.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.19.12", "@esbuild/android-arm": "0.19.12", "@esbuild/android-arm64": "0.19.12", "@esbuild/android-x64": "0.19.12", "@esbuild/darwin-arm64": "0.19.12", "@esbuild/darwin-x64": "0.19.12", "@esbuild/freebsd-arm64": "0.19.12", "@esbuild/freebsd-x64": "0.19.12", "@esbuild/linux-arm": "0.19.12", "@esbuild/linux-arm64": "0.19.12", "@esbuild/linux-ia32": "0.19.12", "@esbuild/linux-loong64": "0.19.12", "@esbuild/linux-mips64el": "0.19.12", "@esbuild/linux-ppc64": "0.19.12", "@esbuild/linux-riscv64": "0.19.12", "@esbuild/linux-s390x": "0.19.12", "@esbuild/linux-x64": "0.19.12", "@esbuild/netbsd-x64": "0.19.12", "@esbuild/openbsd-x64": "0.19.12", "@esbuild/sunos-x64": "0.19.12", "@esbuild/win32-arm64": "0.19.12", "@esbuild/win32-ia32": "0.19.12", "@esbuild/win32-x64": "0.19.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg=="], - - "esbuild-register": ["esbuild-register@3.6.0", "", { "dependencies": { "debug": "^4.3.4" }, "peerDependencies": { "esbuild": ">=0.12 <1" } }, "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg=="], - - "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], - - "gel": ["gel@2.2.0", "", { "dependencies": { "@petamoriken/float16": "^3.8.7", "debug": "^4.3.4", "env-paths": "^3.0.0", "semver": "^7.6.2", "shell-quote": "^1.8.1", "which": "^4.0.0" }, "bin": { "gel": "dist/cli.mjs" } }, "sha512-q0ma7z2swmoamHQusey8ayo8+ilVdzDt4WTxSPzq/yRqvucWRfymRVMvNgmSC0XK7eNjjEZEcplxpgaNojKdmQ=="], - - "generic-pool": ["generic-pool@2.4.3", "", {}, "sha512-IuvVtXuCtPXl+wMp6eWzxWyJV0TtUSm/LnPO1TmM8/4K7stdrB3GuOVo+x6Izuc5qllayByDvXWOfT/UG0v+Kw=="], - - "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], - - "get-tsconfig": ["get-tsconfig@4.13.6", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw=="], - - "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], - - "isexe": ["isexe@3.1.5", "", {}, "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w=="], - - "js-string-escape": ["js-string-escape@1.0.1", "", {}, "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg=="], - - "lodash.camelcase": ["lodash.camelcase@4.3.0", "", {}, "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="], - - "long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="], - - "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "object-assign": ["object-assign@4.1.0", "", {}, "sha512-Lbc7GfN7XFaK30bzUN3cDYLOkT0dH05S0ax1QikylHUD9+Z9PRF3G1iYwX3kcz+6AlzTFGkUgMxz6l3aUwbwTA=="], - - "packet-reader": ["packet-reader@0.2.0", "", {}, "sha512-3GnoJ2cKeSgikX3llywfuefjtkokRfzySXO2H3bDwVguclnpkvjYcBsQNfCcUpwUKRK+4IhhCD18/rLMVOH+aQ=="], - - "pg": ["pg@5.2.1", "", { "dependencies": { "buffer-writer": "1.0.1", "js-string-escape": "1.0.1", "packet-reader": "0.2.0", "pg-connection-string": "0.1.3", "pg-pool": "1.*", "pg-types": "1.*", "pgpass": "0.0.6", "semver": "4.3.2" } }, "sha512-Lldfi0lwcms/FgVCV2HSb3xccr6RwToGdYgsoE0RJHlBm4iWPsNcxcn7qElv5uXpKekyffdHCQ//yN4MTogYiQ=="], - - "pg-connection-string": ["pg-connection-string@0.1.3", "", {}, "sha512-i0NV/CrSkFTaiOQs9AGy3tq0dkSjtTd4d7DfsjeDVZAA4aIHInwfFEmriNYGGJUfZ5x6IAC/QddoUpUJjQAi0w=="], - - "pg-int8": ["pg-int8@1.0.1", "", {}, "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="], - - "pg-pool": ["pg-pool@1.8.0", "", { "dependencies": { "generic-pool": "2.4.3", "object-assign": "4.1.0" } }, "sha512-+X9J1FiucG3wpNIp/InfBWBn3vq/gpwzotKifnOPIRAyt7EhGBKyUFnJoAzhuQkU+EKb/VsW9csDcAzzAoPXGg=="], - - "pg-protocol": ["pg-protocol@1.11.0", "", {}, "sha512-pfsxk2M9M3BuGgDOfuy37VNRRX3jmKgMjcvAcWqNDpZSf4cUmv8HSOl5ViRQFsfARFn0KuUQTgLxVMbNq5NW3g=="], - - "pg-types": ["pg-types@2.2.0", "", { "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", "postgres-bytea": "~1.0.0", "postgres-date": "~1.0.4", "postgres-interval": "^1.1.0" } }, "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA=="], - - "pgpass": ["pgpass@0.0.6", "", { "dependencies": { "split": "^1.0.0" } }, "sha512-mBONoxI3nFXPVE/Ao9dTv0N0+DLOoVyL5VKeufqOuMJJk3Y3GWMoI6N0Nuo8On+MJc9PkiLKNrESMgKYFRGONQ=="], - - "postgres": ["postgres@3.4.8", "", {}, "sha512-d+JFcLM17njZaOLkv6SCev7uoLaBtfK86vMUXhW1Z4glPWh4jozno9APvW/XKFJ3CCxVoC7OL38BqRydtu5nGg=="], - - "postgres-array": ["postgres-array@2.0.0", "", {}, "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="], - - "postgres-bytea": ["postgres-bytea@1.0.1", "", {}, "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ=="], - - "postgres-date": ["postgres-date@1.0.7", "", {}, "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="], - - "postgres-interval": ["postgres-interval@1.2.0", "", { "dependencies": { "xtend": "^4.0.0" } }, "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="], - - "protobufjs": ["protobufjs@7.5.4", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.4", "@protobufjs/eventemitter": "^1.1.0", "@protobufjs/fetch": "^1.1.0", "@protobufjs/float": "^1.0.2", "@protobufjs/inquire": "^1.1.0", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", "@types/node": ">=13.7.0", "long": "^5.0.0" } }, "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg=="], - - "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], - - "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], - - "semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - - "shell-quote": ["shell-quote@1.8.3", "", {}, "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw=="], - - "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], - - "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], - - "split": ["split@1.0.1", "", { "dependencies": { "through": "2" } }, "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg=="], - - "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - - "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "through": ["through@2.3.8", "", {}, "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="], - - "tigerbeetle-node": ["tigerbeetle-node@0.16.68", "", {}, "sha512-DhQisDA51JlsuoorZxn7eYgnZRzeJihRaphQPt4f1bwVxzBIaN+6Ke+k5BO+MUuPG8Mh4HX497R/v3rook9vlQ=="], - - "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - - "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], - - "which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="], - - "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - - "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], - - "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], - - "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], - - "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], - - "@esbuild-kit/core-utils/esbuild": ["esbuild@0.18.20", "", { "optionalDependencies": { "@esbuild/android-arm": "0.18.20", "@esbuild/android-arm64": "0.18.20", "@esbuild/android-x64": "0.18.20", "@esbuild/darwin-arm64": "0.18.20", "@esbuild/darwin-x64": "0.18.20", "@esbuild/freebsd-arm64": "0.18.20", "@esbuild/freebsd-x64": "0.18.20", "@esbuild/linux-arm": "0.18.20", "@esbuild/linux-arm64": "0.18.20", "@esbuild/linux-ia32": "0.18.20", "@esbuild/linux-loong64": "0.18.20", "@esbuild/linux-mips64el": "0.18.20", "@esbuild/linux-ppc64": "0.18.20", "@esbuild/linux-riscv64": "0.18.20", "@esbuild/linux-s390x": "0.18.20", "@esbuild/linux-x64": "0.18.20", "@esbuild/netbsd-x64": "0.18.20", "@esbuild/openbsd-x64": "0.18.20", "@esbuild/sunos-x64": "0.18.20", "@esbuild/win32-arm64": "0.18.20", "@esbuild/win32-ia32": "0.18.20", "@esbuild/win32-x64": "0.18.20" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA=="], - - "pg/pg-types": ["pg-types@1.13.0", "", { "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~1.0.0", "postgres-bytea": "~1.0.0", "postgres-date": "~1.0.0", "postgres-interval": "^1.1.0" } }, "sha512-lfKli0Gkl/+za/+b6lzENajczwZHc7D5kiUCZfgm914jipD2kIOIvEkAhZ8GrW3/TUoP9w8FHjwpPObBye5KQQ=="], - - "pg/semver": ["semver@4.3.2", "", { "bin": { "semver": "./bin/semver" } }, "sha512-VyFUffiBx8hABJ9HYSTXLRwyZtdDHMzMtFmID1aiNAD2BZppBmJm0Hqw3p2jkgxP9BNt1pQ9RnC49P0EcXf6cA=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.18.20", "", { "os": "android", "cpu": "arm" }, "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.18.20", "", { "os": "android", "cpu": "arm64" }, "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.18.20", "", { "os": "android", "cpu": "x64" }, "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.18.20", "", { "os": "darwin", "cpu": "arm64" }, "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.18.20", "", { "os": "darwin", "cpu": "x64" }, "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.18.20", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.18.20", "", { "os": "freebsd", "cpu": "x64" }, "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.18.20", "", { "os": "linux", "cpu": "arm" }, "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.18.20", "", { "os": "linux", "cpu": "arm64" }, "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.18.20", "", { "os": "linux", "cpu": "ia32" }, "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.18.20", "", { "os": "linux", "cpu": "ppc64" }, "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.18.20", "", { "os": "linux", "cpu": "s390x" }, "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.18.20", "", { "os": "linux", "cpu": "x64" }, "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.18.20", "", { "os": "none", "cpu": "x64" }, "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.18.20", "", { "os": "openbsd", "cpu": "x64" }, "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.18.20", "", { "os": "sunos", "cpu": "x64" }, "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.18.20", "", { "os": "win32", "cpu": "arm64" }, "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.18.20", "", { "os": "win32", "cpu": "ia32" }, "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g=="], - - "@esbuild-kit/core-utils/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.18.20", "", { "os": "win32", "cpu": "x64" }, "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ=="], - - "pg/pg-types/postgres-array": ["postgres-array@1.0.3", "", {}, "sha512-5wClXrAP0+78mcsNX3/ithQ5exKvCyK5lr5NEEEeGwwM6NJdQgzIJBVxLvRW+huFpX92F2QnZ5CcokH0VhK2qQ=="], - } -} diff --git a/money-module/db/db.ts b/money-module/db/db.ts deleted file mode 100644 index a61e93d..0000000 --- a/money-module/db/db.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { drizzle } from "drizzle-orm/postgres-js"; -import postgres from "postgres"; -import * as schema from "./schema"; - -export { schema }; -export type Schema = typeof schema; - -/** - * Create a Drizzle client connected to Postgres. - * Uses DATABASE_URL from env if no url is provided. - */ -export function createDb(url?: string) { - const connectionString = url ?? process.env.DATABASE_URL; - if (!connectionString) { - throw new Error("DATABASE_URL (or url argument) is required"); - } - const client = postgres(connectionString, { max: 10 }); - return drizzle(client, { schema }); -} diff --git a/money-module/db/drizzle.config.ts b/money-module/db/drizzle.config.ts deleted file mode 100644 index 941d31c..0000000 --- a/money-module/db/drizzle.config.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { defineConfig } from "drizzle-kit"; - -export default defineConfig({ - schema: "./db/schema.ts", - out: "./db/migrations", - dialect: "postgresql", - dbCredentials: { - url: process.env.DATABASE_URL ?? "postgres://postgres:postgres@127.0.0.1:5432/money_module", - }, -}); diff --git a/money-module/db/schema.ts b/money-module/db/schema.ts deleted file mode 100644 index 65ef236..0000000 --- a/money-module/db/schema.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { pgTable, serial, text, timestamp } from "drizzle-orm/pg-core"; - -/** - * Shared schema — used by both app and money-module. - * Add your tables here. - */ -export const example = pgTable("example", { - id: serial("id").primaryKey(), - name: text("name").notNull(), - createdAt: timestamp("created_at", { withTimezone: true }).defaultNow().notNull(), -}); diff --git a/money-module/go.mod b/money-module/go.mod new file mode 100644 index 0000000..c5355f9 --- /dev/null +++ b/money-module/go.mod @@ -0,0 +1,3 @@ +module money-module + +go 1.22.2 diff --git a/money-module/index.ts b/money-module/index.ts deleted file mode 100644 index e856118..0000000 --- a/money-module/index.ts +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Money module: TigerBeetle + shared Drizzle DB. - */ - -import { getTigerbeetle } from "./tigerbeetle-client.ts"; -import { createDb } from "./db/index.ts"; - -export { createDb } from "./db/index.ts"; -export { getTigerbeetle, getTigerbeetleSync } from "./tigerbeetle-client.ts"; - -const port = Number(process.env.PORT ?? 6767); - -async function main() { - const db = createDb(); - await getTigerbeetle(); - - // this starts a http server - const server = Bun.serve({ - port, - fetch(req) { - const url = new URL(req.url); - if (url.pathname === "/health") { - return new Response(JSON.stringify({ ok: true }), { - headers: { "Content-Type": "application/json" }, - }); - } - return new Response("Not Found", { status: 404 }); - }, - }); - - console.log(`money-module listening on http://localhost:${server.port}`); -} - -main(); diff --git a/money-module/main.go b/money-module/main.go new file mode 100644 index 0000000..a3dd973 --- /dev/null +++ b/money-module/main.go @@ -0,0 +1,7 @@ +package main + +import "fmt" + +func main() { + fmt.Println("Hello, World!") +} diff --git a/money-module/money-module/main.go b/money-module/money-module/main.go new file mode 100644 index 0000000..af5a9b5 --- /dev/null +++ b/money-module/money-module/main.go @@ -0,0 +1,13 @@ +package main + +import ( + "fmt" +) + +/* "google.golang.org/grpc" + . "github.com/tigerbeetle/tigerbeetle-go" +)*/ + +func main() { + fmt.Println("Import ok!") +} diff --git a/money-module/money_module.ts b/money-module/money_module.ts deleted file mode 100644 index e69de29..0000000 diff --git a/money-module/package.json b/money-module/package.json deleted file mode 100644 index 972c277..0000000 --- a/money-module/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "money-module", - "module": "index.ts", - "type": "module", - "private": true, - "scripts": { - "db:generate": "drizzle-kit generate --config ./db/drizzle.config.ts", - "db:migrate": "drizzle-kit migrate --config ./db/drizzle.config.ts", - "db:studio": "drizzle-kit studio --config ./db/drizzle.config.ts", - "db:push": "drizzle-kit push --config ./db/drizzle.config.ts" - }, - "devDependencies": { - "@types/bun": "latest", - "drizzle-kit": "^0.30.0" - }, - "peerDependencies": { - "typescript": "^5" - }, - "dependencies": { - "drizzle-orm": "^0.38.0", - "postgres": "^3.4.0", - "tigerbeetle-node": "0.16.68", - "@grpc/grpc-js" : "^1.14.0" - }, - "trustedDependencies": [ - "tigerbeetle-node" - ] -} diff --git a/money-module/tigerbeetle-client.ts b/money-module/tigerbeetle-client.ts deleted file mode 100644 index a82f6b0..0000000 --- a/money-module/tigerbeetle-client.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { createClient } from "tigerbeetle-node"; -import { lookup } from "node:dns"; -import { promisify } from "node:util"; - -const lookupAsync = promisify(lookup); -const clusterId = 0n; - -/** - * Resolve address to IP:port — TigerBeetle native client expects IP, not hostname. - */ -async function resolveReplicaAddress(addr: string): Promise { - const parts = addr.split(":"); - const host = parts[0] ?? "tigerbeetle"; - const port = parts[1] ?? "3000"; - if (/^\d+\.\d+\.\d+\.\d+$/.test(host)) return addr; - const { address } = await lookupAsync(host, { family: 4 }); - return `${address}:${port}`; -} - -/** - * TigerBeetle client (cluster 0). Resolves hostnames to IP so the native client works in Docker. - */ -let _client: ReturnType | null = null; - -export async function getTigerbeetle() { - if (_client) return _client; - const raw = process.env.TIGERBEETLE_ADDRESS ?? "tigerbeetle:3000"; - const resolved = await resolveReplicaAddress(raw); - _client = createClient({ - cluster_id: clusterId, - replica_addresses: [resolved], - }); - return _client; -} - -/** Sync getter for code that runs after init; throws if not inited. */ -export function getTigerbeetleSync(): ReturnType { - if (!_client) throw new Error("TigerBeetle not initialized — await getTigerbeetle() first"); - return _client; -} diff --git a/money-module/tigerbeetle/Dockerfile b/money-module/tigerbeetle/Dockerfile index 150a22c..389f0c8 100644 --- a/money-module/tigerbeetle/Dockerfile +++ b/money-module/tigerbeetle/Dockerfile @@ -15,4 +15,4 @@ COPY start.sh /start.sh RUN sed -i 's/\r$//' /start.sh && chmod +x /start.sh EXPOSE 3000 -CMD ["/start.sh"] \ No newline at end of file +CMD ["/start.sh"] diff --git a/money-module/tsconfig.json b/money-module/tsconfig.json deleted file mode 100644 index 7664559..0000000 --- a/money-module/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "lib": ["ESNext"], - "target": "ESNext", - "module": "Preserve", - "moduleDetection": "force", - "jsx": "react-jsx", - "allowJs": true, - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "noEmit": true, - "strict": true, - "skipLibCheck": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "noPropertyAccessFromIndexSignature": false - } -}