From 1f266a6a5a7631027674391d6e68897653161e5c Mon Sep 17 00:00:00 2001 From: Balint Dolla Date: Mon, 30 Oct 2023 19:26:43 +0100 Subject: [PATCH 1/3] feat: db setup --- .env | 20 +- .github/workflows/pr.yaml | 17 +- .gitignore | 4 +- README.md | 20 +- docker-compose.yaml | 7 + package.json | 13 +- packages/core/db/dbFactory.ts | 53 + packages/core/db/index.ts | 23 + .../core/db/migrations/0000_clammy_vargas.sql | 11 + .../db/migrations/meta/0000_snapshot.json | 73 + .../core/db/migrations/meta/_journal.json | 13 + packages/core/db/schema.ts | 18 + packages/core/package.json | 8 +- packages/functions/lambdas/migrateDb.ts | 26 + packages/functions/tsconfig.json | 1 + pnpm-lock.yaml | 1242 +++++++++++++++-- scripts/migrateCi.ts | 21 + scripts/migrateLocal.ts | 20 + sst.config.ts | 3 +- stacks/MyStack.ts | 31 +- stacks/StorageStack.ts | 22 + tests/env.d.ts | 5 + tests/utils/testDb.ts | 12 + tsconfig.json | 1 + vite.config.ts | 1 + 25 files changed, 1573 insertions(+), 92 deletions(-) create mode 100644 docker-compose.yaml create mode 100644 packages/core/db/dbFactory.ts create mode 100644 packages/core/db/index.ts create mode 100644 packages/core/db/migrations/0000_clammy_vargas.sql create mode 100644 packages/core/db/migrations/meta/0000_snapshot.json create mode 100644 packages/core/db/migrations/meta/_journal.json create mode 100644 packages/core/db/schema.ts create mode 100644 packages/functions/lambdas/migrateDb.ts create mode 100644 scripts/migrateCi.ts create mode 100644 scripts/migrateLocal.ts create mode 100644 stacks/StorageStack.ts create mode 100644 tests/utils/testDb.ts diff --git a/.env b/.env index 40c4d66..4aaeffc 100644 --- a/.env +++ b/.env @@ -1,3 +1,11 @@ +# Postgres settings, used for local development, could be anything as long as they are consistent +POSTGRES_USER= +POSTGRES_PASSWORD= +POSTGRES_DB= +DB_URL= +# Should be set to true if you want to use a local database instead of the deployed one (recommended for local development) +USE_LOCAL_DB= + # The ApiEndpoint of the deployed backend VITE_API_URL= # The slack bot token @@ -11,4 +19,14 @@ VITE_SLACK_BOT_USER_ID= # The slack channel id used for testing VITE_CORE_SLACK_CHANNEL_ID= # The slack dm id between the bot and you -VITE_SLACK_DM_ID= \ No newline at end of file +VITE_SLACK_DM_ID= +# The url of the local database +VITE_DB_URL= +# Used to indicate that the tests are running in a ci environment (not needed for local development) +VITE_CI= +# The name of the deployed RDS database (not needed for local development) +VITE_DB_NAME= +# The secret arn of the deployed RDS database (not needed for local development) +VITE_DB_SECRET_ARN= +# The cluster arn of the deployed RDS database (not needed for local development) +VITE_DB_CLUSTER_ARN= \ No newline at end of file diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index a98dcd5..1a0c578 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -76,11 +76,22 @@ jobs: - name: Deploy stack run: pnpm run deploy --stage ${{ env.STAGE }} - - name: Extract api endpoint + - name: Extract stack outputs id: sst-output run: | URL=$(jq -r '.["${{env.STAGE}}-birthday-slack-bot-MyStack"].ApiEndpoint' .sst/outputs.json) echo "apiEndpoint=$URL" >> "$GITHUB_OUTPUT" + MIGRATION_FUNCTION=$(jq -r '.["${{env.STAGE}}-birthday-slack-bot-MyStack"].MigrationFunctionName' .sst/outputs.json) + echo "migrationFunction=$MIGRATION_FUNCTION" >> "$GITHUB_OUTPUT" + SECRET_ARN=$(jq -r '.["${{env.STAGE}}-birthday-slack-bot-StorageStack"].RDSSECRETARN' .sst/outputs.json) + echo "secretArn=$SECRET_ARN" >> "$GITHUB_OUTPUT" + CLUSTER_ARN=$(jq -r '.["${{env.STAGE}}-birthday-slack-bot-StorageStack"].RDSCLUSTERARN' .sst/outputs.json) + echo "clusterArn=$CLUSTER_ARN" >> "$GITHUB_OUTPUT" + DATABASE=$(jq -r '.["${{env.STAGE}}-birthday-slack-bot-StorageStack"].RDSDATABASE' .sst/outputs.json) + echo "database=$DATABASE" >> "$GITHUB_OUTPUT" + + - name: Migration + run: pnpm migration:ci ${{ steps.sst-output.outputs.migrationFunction }} - name: Run integration tests run: pnpm test:integration @@ -92,3 +103,7 @@ jobs: VITE_SLACK_BOT_USER_ID: ${{ secrets.SLACK_BOT_USER_ID_TEST }} VITE_CORE_SLACK_CHANNEL_ID: ${{ secrets.CORE_SLACK_CHANNEL_ID_TEST }} VITE_SLACK_DM_ID: ${{ secrets.SLACK_DM_ID_TEST }} + VITE_CI: true + VITE_DB_NAME: ${{ steps.sst-output.outputs.database }} + VITE_DB_SECRET_ARN: ${{ steps.sst-output.outputs.secretArn }} + VITE_DB_CLUSTER_ARN: ${{ steps.sst-output.outputs.clusterArn }} diff --git a/.gitignore b/.gitignore index ee628dd..4948675 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,6 @@ node_modules # local env files .env*.local -sib-report.txt \ No newline at end of file +sib-report.txt + +cdk.context.json diff --git a/README.md b/README.md index f7be1bb..dea1ec4 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,17 @@ npx sst secrets set RANDOM_SLACK_CHANNEL_ID ``` 3. Install dependencies: `pnpm i` -4. Run sst: `pnpm dev` + +## DB Setup + +1. Make sure you have docker-compose available. +2. Copy the `.env` file to a `.env.local` file. +3. Run `docker-compose up -d` to start the database. +4. # Run `pnpm migration:local` to run the migrations. + +## Run locally + +`pnpm dev` ### Add webhook url to Slack @@ -64,8 +74,14 @@ npx sst secrets set RANDOM_SLACK_CHANNEL_ID ## Run tests -Copy the `.env` file to a `.env.local` file and add the secrets. +Fill `.env.local` file with the secrets. ```bash pnpm test ``` + +## Generate a new migration + +```bash +pnpm migration:generate +``` diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..b2425b3 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,7 @@ +services: + postgres: + image: "postgres:13.9" + ports: + - "5432:5432" + env_file: + - .env.local diff --git a/package.json b/package.json index 1624192..1492ef2 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "type": "module", "scripts": { - "dev": "sst dev", + "dev": "docker-compose up -d && sst dev", "build": "sst build", "deploy": "sst deploy", "remove": "sst remove", @@ -18,21 +18,28 @@ "prepare": "husky install", "test": "vitest watch", "test:unit": "vitest run unit", - "test:integration": "vitest run integration --threads false --single-thread" + "test:integration": "vitest run integration --threads false --single-thread", + "migration:generate": "cd packages/core && pnpm migration:generate", + "migration:local": "NODE_ENV=development tsx scripts/migrateLocal.ts", + "migration:ci": "tsx scripts/migrateCi.ts" }, "dependencies": { "sst": "^2.28.1" }, "devDependencies": { "@aws-sdk/client-eventbridge": "^3.429.0", + "@aws-sdk/client-lambda": "^3.438.0", "@slack/bolt": "^3.14.0", "@theapexlab/serverless-icebreaker": "^1.1.3", "@tsconfig/node18": "^18.2.2", "@types/aws-lambda": "^8.10.124", + "@types/pg": "^8.10.7", "@typescript-eslint/eslint-plugin": "^6.7.5", "@typescript-eslint/parser": "^6.7.5", "aws-cdk-lib": "2.95.1", "constructs": "10.2.69", + "dotenv": "^16.3.1", + "drizzle-orm": "^0.28.6", "eslint": "^8.51.0", "eslint-config-prettier": "^9.0.0", "eslint-define-config": "^1.24.1", @@ -40,7 +47,9 @@ "eslint-plugin-simple-import-sort": "^10.0.0", "husky": "^8.0.0", "lint-staged": "^14.0.1", + "pg": "^8.11.3", "prettier": "^3.0.3", + "tsx": "^3.14.0", "typescript": "^5.2.2", "vite": "^4.5.0", "vitest": "^0.34.6" diff --git a/packages/core/db/dbFactory.ts b/packages/core/db/dbFactory.ts new file mode 100644 index 0000000..531f6b3 --- /dev/null +++ b/packages/core/db/dbFactory.ts @@ -0,0 +1,53 @@ +import { RDSDataClient } from "@aws-sdk/client-rds-data"; +import { drizzle as drizzleRds } from "drizzle-orm/aws-data-api/pg"; +import { migrate as migrateRds } from "drizzle-orm/aws-data-api/pg/migrator"; +import { drizzle as drizzleNode } from "drizzle-orm/node-postgres"; +import { migrate as migrateNode } from "drizzle-orm/node-postgres/migrator"; +import pg from "pg"; + +const migrationsFolder = "./packages/core/db/migrations"; + +type DbType = "node" | "aws"; + +type FactoryPayload = { + node: { + connectionString: string; + }; + aws: { + database: string; + secretArn: string; + resourceArn: string; + }; +}; + +export const dbFactory = (type: DbType, payload: FactoryPayload) => { + if (type === "node") { + const pool = new pg.Pool({ + ...payload.node, + }); + + const db = drizzleNode(pool); + + return [ + db, + async () => { + await migrateNode(db, { + migrationsFolder, + }); + }, + ] as const; + } + + const db = drizzleRds(new RDSDataClient({}), { + ...payload.aws, + }); + + return [ + db, + async () => { + await migrateRds(db, { + migrationsFolder, + }); + }, + ] as const; +}; diff --git a/packages/core/db/index.ts b/packages/core/db/index.ts new file mode 100644 index 0000000..7be71f1 --- /dev/null +++ b/packages/core/db/index.ts @@ -0,0 +1,23 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ +import { RDS } from "sst/node/rds"; + +import { dbFactory } from "./dbFactory"; + +export const [db, migrate] = dbFactory( + process.env.IS_LOCAL || process.env.NODE_ENV === "development" + ? "node" + : "aws", + { + node: { + connectionString: process.env.DB_URL ?? "", + }, + aws: { + //@ts-ignore + database: RDS.Database.defaultDatabaseName, + //@ts-ignore + secretArn: RDS.Database.secretArn, + //@ts-ignore + resourceArn: RDS.Database.clusterArn, + }, + }, +); diff --git a/packages/core/db/migrations/0000_clammy_vargas.sql b/packages/core/db/migrations/0000_clammy_vargas.sql new file mode 100644 index 0000000..a8249ed --- /dev/null +++ b/packages/core/db/migrations/0000_clammy_vargas.sql @@ -0,0 +1,11 @@ +CREATE TABLE IF NOT EXISTS "testItems" ( + "id" varchar PRIMARY KEY NOT NULL, + "payload" varchar +); +--> statement-breakpoint +CREATE TABLE IF NOT EXISTS "users" ( + "id" varchar, + "team_id" varchar, + "birthday" date, + CONSTRAINT users_id_team_id PRIMARY KEY("id","team_id") +); diff --git a/packages/core/db/migrations/meta/0000_snapshot.json b/packages/core/db/migrations/meta/0000_snapshot.json new file mode 100644 index 0000000..f008bcf --- /dev/null +++ b/packages/core/db/migrations/meta/0000_snapshot.json @@ -0,0 +1,73 @@ +{ + "version": "5", + "dialect": "pg", + "id": "43c150de-7698-45b1-9f52-8feb96883247", + "prevId": "00000000-0000-0000-0000-000000000000", + "tables": { + "testItems": { + "name": "testItems", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "payload": { + "name": "payload", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "team_id": { + "name": "team_id", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "birthday": { + "name": "birthday", + "type": "date", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "users_id_team_id": { + "name": "users_id_team_id", + "columns": [ + "id", + "team_id" + ] + } + }, + "uniqueConstraints": {} + } + }, + "enums": {}, + "schemas": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + } +} \ No newline at end of file diff --git a/packages/core/db/migrations/meta/_journal.json b/packages/core/db/migrations/meta/_journal.json new file mode 100644 index 0000000..7b04e2b --- /dev/null +++ b/packages/core/db/migrations/meta/_journal.json @@ -0,0 +1,13 @@ +{ + "version": "5", + "dialect": "pg", + "entries": [ + { + "idx": 0, + "version": "5", + "when": 1698670168682, + "tag": "0000_clammy_vargas", + "breakpoints": true + } + ] +} \ No newline at end of file diff --git a/packages/core/db/schema.ts b/packages/core/db/schema.ts new file mode 100644 index 0000000..4095f1d --- /dev/null +++ b/packages/core/db/schema.ts @@ -0,0 +1,18 @@ +import { date, pgTable, primaryKey, varchar } from "drizzle-orm/pg-core"; + +export const users = pgTable( + "users", + { + id: varchar("id"), + teamId: varchar("team_id"), + birthday: date("birthday", { mode: "date" }), + }, + (t) => ({ + pk: primaryKey(t.id, t.teamId), + }), +); + +export const testItems = pgTable("testItems", { + id: varchar("id").primaryKey(), + payload: varchar("payload"), +}); diff --git a/packages/core/package.json b/packages/core/package.json index 441f7a0..0272426 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -4,15 +4,21 @@ "type": "module", "scripts": { "test": "sst bind vitest", - "typecheck": "tsc -noEmit" + "typecheck": "tsc -noEmit", + "migration:generate": "drizzle-kit generate:pg --schema=db/schema.ts --out=db/migrations" }, "devDependencies": { "@types/node": "^20.4.5", + "@types/pg": "^8.10.7", + "drizzle-kit": "^0.19.13", "sst": "^2.22.9", "vitest": "^0.33.0" }, "dependencies": { + "@aws-sdk/client-rds-data": "^3.438.0", "@slack/bolt": "^3.14.0", + "drizzle-orm": "^0.28.6", + "pg": "^8.11.3", "zod": "^3.22.4" } } \ No newline at end of file diff --git a/packages/functions/lambdas/migrateDb.ts b/packages/functions/lambdas/migrateDb.ts new file mode 100644 index 0000000..d90ae8d --- /dev/null +++ b/packages/functions/lambdas/migrateDb.ts @@ -0,0 +1,26 @@ +import type { APIGatewayProxyHandlerV2 } from "aws-lambda"; + +import { migrate } from "@/db/index"; + +export const handler: APIGatewayProxyHandlerV2 = async () => { + try { + console.log("Migrating db..."); + + await migrate(); + + console.log("Migration complete!"); + + return { + statusCode: 200, + body: JSON.stringify({}), + }; + } catch (error) { + console.error(`Error migrating db: ${error}`); + return { + statusCode: 500, + body: JSON.stringify({ + error, + }), + }; + } +}; diff --git a/packages/functions/tsconfig.json b/packages/functions/tsconfig.json index 7141a8d..7faed6f 100644 --- a/packages/functions/tsconfig.json +++ b/packages/functions/tsconfig.json @@ -5,6 +5,7 @@ "moduleResolution": "node", "baseUrl": ".", "paths": { + "@/db/*": ["../core/db/*"], "@/events": ["../core/events/index.ts"], "@/services/*": ["../core/services/*"], "@/utils/*": ["utils/*"], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eb6c80b..306c779 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,11 +10,14 @@ importers: dependencies: sst: specifier: ^2.28.1 - version: 2.29.2 + version: 2.29.2(pg@8.11.3) devDependencies: '@aws-sdk/client-eventbridge': specifier: ^3.429.0 version: 3.429.0 + '@aws-sdk/client-lambda': + specifier: ^3.438.0 + version: 3.438.0 '@slack/bolt': specifier: ^3.14.0 version: 3.14.0 @@ -27,6 +30,9 @@ importers: '@types/aws-lambda': specifier: ^8.10.124 version: 8.10.124 + '@types/pg': + specifier: ^8.10.7 + version: 8.10.7 '@typescript-eslint/eslint-plugin': specifier: ^6.7.5 version: 6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.51.0)(typescript@5.2.2) @@ -39,6 +45,12 @@ importers: constructs: specifier: 10.2.69 version: 10.2.69 + dotenv: + specifier: ^16.3.1 + version: 16.3.1 + drizzle-orm: + specifier: ^0.28.6 + version: 0.28.6(@aws-sdk/client-rds-data@3.438.0)(@types/pg@8.10.7)(kysely@0.25.0)(pg@8.11.3) eslint: specifier: ^8.51.0 version: 8.51.0 @@ -60,9 +72,15 @@ importers: lint-staged: specifier: ^14.0.1 version: 14.0.1 + pg: + specifier: ^8.11.3 + version: 8.11.3 prettier: specifier: ^3.0.3 version: 3.0.3 + tsx: + specifier: ^3.14.0 + version: 3.14.0 typescript: specifier: ^5.2.2 version: 5.2.2 @@ -75,9 +93,18 @@ importers: packages/core: dependencies: + '@aws-sdk/client-rds-data': + specifier: ^3.438.0 + version: 3.438.0 '@slack/bolt': specifier: ^3.14.0 version: 3.14.0 + drizzle-orm: + specifier: ^0.28.6 + version: 0.28.6(@aws-sdk/client-rds-data@3.438.0)(@types/pg@8.10.7)(kysely@0.25.0)(pg@8.11.3) + pg: + specifier: ^8.11.3 + version: 8.11.3 zod: specifier: ^3.22.4 version: 3.22.4 @@ -85,9 +112,15 @@ importers: '@types/node': specifier: ^20.4.5 version: 20.8.6 + '@types/pg': + specifier: ^8.10.7 + version: 8.10.7 + drizzle-kit: + specifier: ^0.19.13 + version: 0.19.13 sst: specifier: ^2.22.9 - version: 2.29.2 + version: 2.29.2(pg@8.11.3) vitest: specifier: ^0.33.0 version: 0.33.0 @@ -106,7 +139,7 @@ importers: version: 20.8.6 sst: specifier: ^2.28.1 - version: 2.29.2 + version: 2.29.2(pg@8.11.3) vitest: specifier: ^0.34.6 version: 0.34.6 @@ -606,94 +639,98 @@ packages: transitivePeerDependencies: - aws-crt - /@aws-sdk/client-lambda@3.429.0: - resolution: {integrity: sha512-rnAwtmafoutNtuPvYzzWD69sYIgdELyYbh9fFzBV4WhmdXdicWXRdF8AXR70f4ZhGZ7S3S4XQy76ZL6+bgoKqw==} + /@aws-sdk/client-lambda@3.438.0: + resolution: {integrity: sha512-FiWjoOabqJcJFHUJBZMzrL1IuvPNNrBnhVJknKo7SGiPtz8xeKZJ4VeJcClQjqGzuEbQCtqp/Ki5F7/EK3qv+w==} engines: {node: '>=14.0.0'} dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.429.0 - '@aws-sdk/credential-provider-node': 3.429.0 - '@aws-sdk/middleware-host-header': 3.429.0 - '@aws-sdk/middleware-logger': 3.428.0 - '@aws-sdk/middleware-recursion-detection': 3.428.0 - '@aws-sdk/middleware-signing': 3.428.0 - '@aws-sdk/middleware-user-agent': 3.428.0 - '@aws-sdk/region-config-resolver': 3.428.0 - '@aws-sdk/types': 3.428.0 - '@aws-sdk/util-endpoints': 3.428.0 - '@aws-sdk/util-user-agent-browser': 3.428.0 - '@aws-sdk/util-user-agent-node': 3.428.0 - '@smithy/config-resolver': 2.0.15 - '@smithy/eventstream-serde-browser': 2.0.11 - '@smithy/eventstream-serde-config-resolver': 2.0.11 - '@smithy/eventstream-serde-node': 2.0.11 - '@smithy/fetch-http-handler': 2.2.3 - '@smithy/hash-node': 2.0.11 - '@smithy/invalid-dependency': 2.0.11 - '@smithy/middleware-content-length': 2.0.13 - '@smithy/middleware-endpoint': 2.1.2 - '@smithy/middleware-retry': 2.0.17 - '@smithy/middleware-serde': 2.0.11 - '@smithy/middleware-stack': 2.0.5 - '@smithy/node-config-provider': 2.1.2 - '@smithy/node-http-handler': 2.1.7 - '@smithy/protocol-http': 3.0.7 - '@smithy/smithy-client': 2.1.11 - '@smithy/types': 2.3.5 - '@smithy/url-parser': 2.0.11 + '@aws-sdk/client-sts': 3.438.0 + '@aws-sdk/core': 3.436.0 + '@aws-sdk/credential-provider-node': 3.438.0 + '@aws-sdk/middleware-host-header': 3.433.0 + '@aws-sdk/middleware-logger': 3.433.0 + '@aws-sdk/middleware-recursion-detection': 3.433.0 + '@aws-sdk/middleware-signing': 3.433.0 + '@aws-sdk/middleware-user-agent': 3.438.0 + '@aws-sdk/region-config-resolver': 3.433.0 + '@aws-sdk/types': 3.433.0 + '@aws-sdk/util-endpoints': 3.438.0 + '@aws-sdk/util-user-agent-browser': 3.433.0 + '@aws-sdk/util-user-agent-node': 3.437.0 + '@smithy/config-resolver': 2.0.16 + '@smithy/eventstream-serde-browser': 2.0.12 + '@smithy/eventstream-serde-config-resolver': 2.0.12 + '@smithy/eventstream-serde-node': 2.0.12 + '@smithy/fetch-http-handler': 2.2.4 + '@smithy/hash-node': 2.0.12 + '@smithy/invalid-dependency': 2.0.12 + '@smithy/middleware-content-length': 2.0.14 + '@smithy/middleware-endpoint': 2.1.3 + '@smithy/middleware-retry': 2.0.18 + '@smithy/middleware-serde': 2.0.12 + '@smithy/middleware-stack': 2.0.6 + '@smithy/node-config-provider': 2.1.3 + '@smithy/node-http-handler': 2.1.8 + '@smithy/protocol-http': 3.0.8 + '@smithy/smithy-client': 2.1.12 + '@smithy/types': 2.4.0 + '@smithy/url-parser': 2.0.12 '@smithy/util-base64': 2.0.0 '@smithy/util-body-length-browser': 2.0.0 '@smithy/util-body-length-node': 2.1.0 - '@smithy/util-defaults-mode-browser': 2.0.15 - '@smithy/util-defaults-mode-node': 2.0.20 - '@smithy/util-retry': 2.0.4 - '@smithy/util-stream': 2.0.16 + '@smithy/util-defaults-mode-browser': 2.0.16 + '@smithy/util-defaults-mode-node': 2.0.21 + '@smithy/util-endpoints': 1.0.2 + '@smithy/util-retry': 2.0.5 + '@smithy/util-stream': 2.0.17 '@smithy/util-utf8': 2.0.0 - '@smithy/util-waiter': 2.0.11 + '@smithy/util-waiter': 2.0.12 tslib: 2.6.2 transitivePeerDependencies: - aws-crt - /@aws-sdk/client-rds-data@3.429.0: - resolution: {integrity: sha512-m7dFijfgKjidPQ+LbaoYisM2GRzsig6CmCakxFs0M86/AVrhWi/Yo+W+poMgxK9B3e3yTQuoCiZ613coLj/bHg==} + /@aws-sdk/client-rds-data@3.438.0: + resolution: {integrity: sha512-+k1Cu5d5aYL6O4cCn3CF4/LTPlYm+tZZxW4Prgqc2Y3crZih19kP+I0rF20+reZWFSIiXgQXCm+0kKAsbGn9cw==} engines: {node: '>=14.0.0'} dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.429.0 - '@aws-sdk/credential-provider-node': 3.429.0 - '@aws-sdk/middleware-host-header': 3.429.0 - '@aws-sdk/middleware-logger': 3.428.0 - '@aws-sdk/middleware-recursion-detection': 3.428.0 - '@aws-sdk/middleware-signing': 3.428.0 - '@aws-sdk/middleware-user-agent': 3.428.0 - '@aws-sdk/region-config-resolver': 3.428.0 - '@aws-sdk/types': 3.428.0 - '@aws-sdk/util-endpoints': 3.428.0 - '@aws-sdk/util-user-agent-browser': 3.428.0 - '@aws-sdk/util-user-agent-node': 3.428.0 - '@smithy/config-resolver': 2.0.15 - '@smithy/fetch-http-handler': 2.2.3 - '@smithy/hash-node': 2.0.11 - '@smithy/invalid-dependency': 2.0.11 - '@smithy/middleware-content-length': 2.0.13 - '@smithy/middleware-endpoint': 2.1.2 - '@smithy/middleware-retry': 2.0.17 - '@smithy/middleware-serde': 2.0.11 - '@smithy/middleware-stack': 2.0.5 - '@smithy/node-config-provider': 2.1.2 - '@smithy/node-http-handler': 2.1.7 - '@smithy/protocol-http': 3.0.7 - '@smithy/smithy-client': 2.1.11 - '@smithy/types': 2.3.5 - '@smithy/url-parser': 2.0.11 + '@aws-sdk/client-sts': 3.438.0 + '@aws-sdk/core': 3.436.0 + '@aws-sdk/credential-provider-node': 3.438.0 + '@aws-sdk/middleware-host-header': 3.433.0 + '@aws-sdk/middleware-logger': 3.433.0 + '@aws-sdk/middleware-recursion-detection': 3.433.0 + '@aws-sdk/middleware-signing': 3.433.0 + '@aws-sdk/middleware-user-agent': 3.438.0 + '@aws-sdk/region-config-resolver': 3.433.0 + '@aws-sdk/types': 3.433.0 + '@aws-sdk/util-endpoints': 3.438.0 + '@aws-sdk/util-user-agent-browser': 3.433.0 + '@aws-sdk/util-user-agent-node': 3.437.0 + '@smithy/config-resolver': 2.0.16 + '@smithy/fetch-http-handler': 2.2.4 + '@smithy/hash-node': 2.0.12 + '@smithy/invalid-dependency': 2.0.12 + '@smithy/middleware-content-length': 2.0.14 + '@smithy/middleware-endpoint': 2.1.3 + '@smithy/middleware-retry': 2.0.18 + '@smithy/middleware-serde': 2.0.12 + '@smithy/middleware-stack': 2.0.6 + '@smithy/node-config-provider': 2.1.3 + '@smithy/node-http-handler': 2.1.8 + '@smithy/protocol-http': 3.0.8 + '@smithy/smithy-client': 2.1.12 + '@smithy/types': 2.4.0 + '@smithy/url-parser': 2.0.12 '@smithy/util-base64': 2.0.0 '@smithy/util-body-length-browser': 2.0.0 '@smithy/util-body-length-node': 2.1.0 - '@smithy/util-defaults-mode-browser': 2.0.15 - '@smithy/util-defaults-mode-node': 2.0.20 - '@smithy/util-retry': 2.0.4 + '@smithy/util-defaults-mode-browser': 2.0.16 + '@smithy/util-defaults-mode-node': 2.0.21 + '@smithy/util-endpoints': 1.0.2 + '@smithy/util-retry': 2.0.5 '@smithy/util-utf8': 2.0.0 tslib: 2.6.2 transitivePeerDependencies: @@ -848,6 +885,49 @@ packages: transitivePeerDependencies: - aws-crt + /@aws-sdk/client-sso@3.438.0: + resolution: {integrity: sha512-L/xKq+K78PShLku8x5gM6lZDUp7LhFJ2ksKH7Vll+exSZq+QUaxuzjp4gqdzh6B0oIshv2jssQlUa0ScOmVRMg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/core': 3.436.0 + '@aws-sdk/middleware-host-header': 3.433.0 + '@aws-sdk/middleware-logger': 3.433.0 + '@aws-sdk/middleware-recursion-detection': 3.433.0 + '@aws-sdk/middleware-user-agent': 3.438.0 + '@aws-sdk/region-config-resolver': 3.433.0 + '@aws-sdk/types': 3.433.0 + '@aws-sdk/util-endpoints': 3.438.0 + '@aws-sdk/util-user-agent-browser': 3.433.0 + '@aws-sdk/util-user-agent-node': 3.437.0 + '@smithy/config-resolver': 2.0.16 + '@smithy/fetch-http-handler': 2.2.4 + '@smithy/hash-node': 2.0.12 + '@smithy/invalid-dependency': 2.0.12 + '@smithy/middleware-content-length': 2.0.14 + '@smithy/middleware-endpoint': 2.1.3 + '@smithy/middleware-retry': 2.0.18 + '@smithy/middleware-serde': 2.0.12 + '@smithy/middleware-stack': 2.0.6 + '@smithy/node-config-provider': 2.1.3 + '@smithy/node-http-handler': 2.1.8 + '@smithy/protocol-http': 3.0.8 + '@smithy/smithy-client': 2.1.12 + '@smithy/types': 2.4.0 + '@smithy/url-parser': 2.0.12 + '@smithy/util-base64': 2.0.0 + '@smithy/util-body-length-browser': 2.0.0 + '@smithy/util-body-length-node': 2.1.0 + '@smithy/util-defaults-mode-browser': 2.0.16 + '@smithy/util-defaults-mode-node': 2.0.21 + '@smithy/util-endpoints': 1.0.2 + '@smithy/util-retry': 2.0.5 + '@smithy/util-utf8': 2.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + /@aws-sdk/client-sts@3.429.0: resolution: {integrity: sha512-yNRYHXqGIYjEGlpaIll9zJDsVOQWjwbvR2zfTpUwEtN4I17k/psjLAsznfTbq/4tEftkpAJ2pNsVrkHUOmCewA==} engines: {node: '>=14.0.0'} @@ -893,6 +973,53 @@ packages: transitivePeerDependencies: - aws-crt + /@aws-sdk/client-sts@3.438.0: + resolution: {integrity: sha512-UBxLZKVVvbR4LHwSNSqaKx22YBSOGkavrh4SyDP8o8XOlXeRxTCllfSfjL9K5Mktp+ZwQ2NiubNcwmvUcGKbbg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/core': 3.436.0 + '@aws-sdk/credential-provider-node': 3.438.0 + '@aws-sdk/middleware-host-header': 3.433.0 + '@aws-sdk/middleware-logger': 3.433.0 + '@aws-sdk/middleware-recursion-detection': 3.433.0 + '@aws-sdk/middleware-sdk-sts': 3.433.0 + '@aws-sdk/middleware-signing': 3.433.0 + '@aws-sdk/middleware-user-agent': 3.438.0 + '@aws-sdk/region-config-resolver': 3.433.0 + '@aws-sdk/types': 3.433.0 + '@aws-sdk/util-endpoints': 3.438.0 + '@aws-sdk/util-user-agent-browser': 3.433.0 + '@aws-sdk/util-user-agent-node': 3.437.0 + '@smithy/config-resolver': 2.0.16 + '@smithy/fetch-http-handler': 2.2.4 + '@smithy/hash-node': 2.0.12 + '@smithy/invalid-dependency': 2.0.12 + '@smithy/middleware-content-length': 2.0.14 + '@smithy/middleware-endpoint': 2.1.3 + '@smithy/middleware-retry': 2.0.18 + '@smithy/middleware-serde': 2.0.12 + '@smithy/middleware-stack': 2.0.6 + '@smithy/node-config-provider': 2.1.3 + '@smithy/node-http-handler': 2.1.8 + '@smithy/protocol-http': 3.0.8 + '@smithy/smithy-client': 2.1.12 + '@smithy/types': 2.4.0 + '@smithy/url-parser': 2.0.12 + '@smithy/util-base64': 2.0.0 + '@smithy/util-body-length-browser': 2.0.0 + '@smithy/util-body-length-node': 2.1.0 + '@smithy/util-defaults-mode-browser': 2.0.16 + '@smithy/util-defaults-mode-node': 2.0.21 + '@smithy/util-endpoints': 1.0.2 + '@smithy/util-retry': 2.0.5 + '@smithy/util-utf8': 2.0.0 + fast-xml-parser: 4.2.5 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + /@aws-sdk/config-resolver@3.374.0: resolution: {integrity: sha512-eTSbmpcgZ97o7PuFls8pH1344OS03nfqq1NO9HxxvoYoZ6DFfUO7kqKeNUhP9LxOF7slyHXajDT7eoPclGnTuw==} engines: {node: '>=14.0.0'} @@ -901,6 +1028,12 @@ packages: '@smithy/config-resolver': 1.1.0 tslib: 2.6.2 + /@aws-sdk/core@3.436.0: + resolution: {integrity: sha512-vX5/LjXvCejC2XUY6TSg1oozjqK6BvkE75t0ys9dgqyr5PlZyZksMoeAFHUlj0sCjhT3ziWCujP1oiSpPWY9hg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/smithy-client': 2.1.12 + /@aws-sdk/credential-provider-cognito-identity@3.429.0: resolution: {integrity: sha512-l+ITRhUEnFGPgokHXlS1OPdqLpgMtGP/kyTU4grJzuomTRWhmZqi++8J76IDncjBjOok9kToArf7xI8zX5SasA==} engines: {node: '>=14.0.0'} @@ -922,6 +1055,15 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@aws-sdk/credential-provider-env@3.433.0: + resolution: {integrity: sha512-Vl7Qz5qYyxBurMn6hfSiNJeUHSqfVUlMt0C1Bds3tCkl3IzecRWwyBOlxtxO3VCrgVeW3HqswLzCvhAFzPH6nQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.433.0 + '@smithy/property-provider': 2.0.12 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@aws-sdk/credential-provider-http@3.428.0: resolution: {integrity: sha512-aLrsmLVRTuO/Gx8AYxIUkZ12DdsFnVK9lbfNpeNOisVjM6ZvjCHqMgDsh12ydkUpmb7C0v+ALj8bHzwKcpyMdA==} engines: {node: '>=14.0.0'} @@ -951,6 +1093,23 @@ packages: transitivePeerDependencies: - aws-crt + /@aws-sdk/credential-provider-ini@3.438.0: + resolution: {integrity: sha512-WYPQR3pXoHJjn9/RMWipUhsUNFy6zhOiII6u8LJ5w84aNqIjV4+BdRYztRNGJD98jdtekhbkX0YKoSuZqP+unQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.433.0 + '@aws-sdk/credential-provider-process': 3.433.0 + '@aws-sdk/credential-provider-sso': 3.438.0 + '@aws-sdk/credential-provider-web-identity': 3.433.0 + '@aws-sdk/types': 3.433.0 + '@smithy/credential-provider-imds': 2.0.17 + '@smithy/property-provider': 2.0.12 + '@smithy/shared-ini-file-loader': 2.2.1 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + /@aws-sdk/credential-provider-node@3.429.0: resolution: {integrity: sha512-XaXCIeF8UWAvqzXX/UaBQhICjyIjRksjuP0xMW+A23Nu4yPjYufuHL9AR4i6MVYEKP3inXHGAS7N0t35A8acOw==} engines: {node: '>=14.0.0'} @@ -969,6 +1128,24 @@ packages: transitivePeerDependencies: - aws-crt + /@aws-sdk/credential-provider-node@3.438.0: + resolution: {integrity: sha512-uaw3D2R0svyrC32qyZ2aOv/l0AT9eClh+eQsZJTQD3Kz9q+2VdeOBThQ8fsMfRtm26nUbZo6A/CRwxkm6okI+w==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.433.0 + '@aws-sdk/credential-provider-ini': 3.438.0 + '@aws-sdk/credential-provider-process': 3.433.0 + '@aws-sdk/credential-provider-sso': 3.438.0 + '@aws-sdk/credential-provider-web-identity': 3.433.0 + '@aws-sdk/types': 3.433.0 + '@smithy/credential-provider-imds': 2.0.18 + '@smithy/property-provider': 2.0.13 + '@smithy/shared-ini-file-loader': 2.2.2 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + /@aws-sdk/credential-provider-process@3.428.0: resolution: {integrity: sha512-UG2S2/4Wrskbkbgt9fBlnzwQ2hfTXvLJwUgGOluSOf6+mGCcoDku4zzc9EQdk1MwN5Us+ziyMrIMNY5sbdLg6g==} engines: {node: '>=14.0.0'} @@ -979,6 +1156,16 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@aws-sdk/credential-provider-process@3.433.0: + resolution: {integrity: sha512-W7FcGlQjio9Y/PepcZGRyl5Bpwb0uWU7qIUCh+u4+q2mW4D5ZngXg8V/opL9/I/p4tUH9VXZLyLGwyBSkdhL+A==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.433.0 + '@smithy/property-provider': 2.0.12 + '@smithy/shared-ini-file-loader': 2.2.1 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@aws-sdk/credential-provider-sso@3.429.0: resolution: {integrity: sha512-Nx3/18ZxV/trGz3HAQD6eGxO5Goqx3U5YR+CJsWPBh+4Jwkoo+HC5cyxq6cJIcZ5n75Wc4kPt7Im4ffVjTaJIg==} engines: {node: '>=14.0.0'} @@ -993,6 +1180,20 @@ packages: transitivePeerDependencies: - aws-crt + /@aws-sdk/credential-provider-sso@3.438.0: + resolution: {integrity: sha512-Xykli/64xR18cBV5P0XFxcH120omtfAjC/cFy/9nFU/+dPvbk0uu1yEOZYteWHyGGkPN4PkHmbh60GiUCLQkWQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/client-sso': 3.438.0 + '@aws-sdk/token-providers': 3.438.0 + '@aws-sdk/types': 3.433.0 + '@smithy/property-provider': 2.0.12 + '@smithy/shared-ini-file-loader': 2.2.1 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + /@aws-sdk/credential-provider-web-identity@3.428.0: resolution: {integrity: sha512-ueuUPPlrJFvtDUVTGnClUGt1wxCbEiKArknah/w9cfcc/c1HtFd/M7x/z2Sm0gSItR45sVcK54qjzmhm29DMzg==} engines: {node: '>=14.0.0'} @@ -1002,6 +1203,15 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@aws-sdk/credential-provider-web-identity@3.433.0: + resolution: {integrity: sha512-RlwjP1I5wO+aPpwyCp23Mk8nmRbRL33hqRASy73c4JA2z2YiRua+ryt6MalIxehhwQU6xvXUKulJnPG9VaMFZg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.433.0 + '@smithy/property-provider': 2.0.12 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@aws-sdk/credential-providers@3.429.0: resolution: {integrity: sha512-FkFTPdXKc3HU23+DzKMMcb9S/2SHF+CQVO0bZFpDji87iGZosBW8q/dtKz4OhIkmqnZoZVcm6jNCJkNY97vBcQ==} engines: {node: '>=14.0.0'} @@ -1068,6 +1278,15 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@aws-sdk/middleware-host-header@3.433.0: + resolution: {integrity: sha512-mBTq3UWv1UzeHG+OfUQ2MB/5GEkt5LTKFaUqzL7ESwzW8XtpBgXnjZvIwu3Vcd3sEetMwijwaGiJhY0ae/YyaA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.433.0 + '@smithy/protocol-http': 3.0.8 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@aws-sdk/middleware-location-constraint@3.428.0: resolution: {integrity: sha512-2YvAhkdzMITTc2fVIH7FS5Hqa7AuoHBg92W0CzPOiKBkC0D6m5hw8o5Z5RnH/M9ki2eB4dn+7uB6p7Lgs+VFdw==} engines: {node: '>=14.0.0'} @@ -1084,6 +1303,14 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@aws-sdk/middleware-logger@3.433.0: + resolution: {integrity: sha512-We346Fb5xGonTGVZC9Nvqtnqy74VJzYuTLLiuuftA5sbNzftBDy/22QCfvYSTOAl3bvif+dkDUzQY2ihc5PwOQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.433.0 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@aws-sdk/middleware-recursion-detection@3.428.0: resolution: {integrity: sha512-xC0OMduCByyRdiQz324RXy4kunnCG4LUJCfvdoegM33Elp9ex0D3fcfO1mUgV8qiLwSennIsSRVXHuhNxE2HZA==} engines: {node: '>=14.0.0'} @@ -1093,6 +1320,15 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@aws-sdk/middleware-recursion-detection@3.433.0: + resolution: {integrity: sha512-HEvYC9PQlWY/ccUYtLvAlwwf1iCif2TSAmLNr3YTBRVa98x6jKL0hlCrHWYklFeqOGSKy6XhE+NGJMUII0/HaQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.433.0 + '@smithy/protocol-http': 3.0.8 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@aws-sdk/middleware-retry@3.374.0: resolution: {integrity: sha512-ZnT84qnT+Zmelv7y6hAqgAEaZgpGlrvf/+rchNWT0oG4duxI5bLWcRi9U88Jz7G8JgNQcGKJqPfC6oogCd7p8w==} engines: {node: '>=14.0.0'} @@ -1122,6 +1358,15 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@aws-sdk/middleware-sdk-sts@3.433.0: + resolution: {integrity: sha512-ORYbJnBejUyonFl5FwIqhvI3Cq6sAp9j+JpkKZtFNma9tFPdrhmYgfCeNH32H/wGTQV/tUoQ3luh0gA4cuk6DA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/middleware-signing': 3.433.0 + '@aws-sdk/types': 3.433.0 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@aws-sdk/middleware-signing@3.428.0: resolution: {integrity: sha512-oMSerTPwtsQAR7fIU/G0b0BA30wF+MC4gZSrJjbypF8MK8nPC2yMfKLR8+QavGOGEW7rUMQ0uklThMTTwQEXNQ==} engines: {node: '>=14.0.0'} @@ -1134,6 +1379,18 @@ packages: '@smithy/util-middleware': 2.0.4 tslib: 2.6.2 + /@aws-sdk/middleware-signing@3.433.0: + resolution: {integrity: sha512-jxPvt59NZo/epMNLNTu47ikmP8v0q217I6bQFGJG7JVFnfl36zDktMwGw+0xZR80qiK47/2BWrNpta61Zd2FxQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.433.0 + '@smithy/property-provider': 2.0.13 + '@smithy/protocol-http': 3.0.8 + '@smithy/signature-v4': 2.0.11 + '@smithy/types': 2.4.0 + '@smithy/util-middleware': 2.0.5 + tslib: 2.6.2 + /@aws-sdk/middleware-ssec@3.428.0: resolution: {integrity: sha512-QPKisAErRHFoopmdFhgOmjZPcUM6rvWCtnoEY4Sw9F0aIyK6yCTn+nB5j+3FAPvUvblE22srM6aow8TcGx1gjA==} engines: {node: '>=14.0.0'} @@ -1152,6 +1409,16 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@aws-sdk/middleware-user-agent@3.438.0: + resolution: {integrity: sha512-a+xHT1wOxT6EA6YyLmrfaroKWOkwwyiktUfXKM0FsUutGzNi4fKhb5NZ2al58NsXzHgHFrasSDp+Lqbd/X2cEw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.433.0 + '@aws-sdk/util-endpoints': 3.438.0 + '@smithy/protocol-http': 3.0.8 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@aws-sdk/region-config-resolver@3.428.0: resolution: {integrity: sha512-VqyHZ/Hoz3WrXXMx8cAhFBl8IpjodbRsTjBI117QPq1YRCegxNdGvqmGZnJj8N2Ef9MP1iU30ZWQB+sviDcogA==} engines: {node: '>=14.0.0'} @@ -1162,6 +1429,16 @@ packages: '@smithy/util-middleware': 2.0.4 tslib: 2.6.2 + /@aws-sdk/region-config-resolver@3.433.0: + resolution: {integrity: sha512-xpjRjCZW+CDFdcMmmhIYg81ST5UAnJh61IHziQEk0FXONrg4kjyYPZAOjEdzXQ+HxJQuGQLKPhRdzxmQnbX7pg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/node-config-provider': 2.1.3 + '@smithy/types': 2.4.0 + '@smithy/util-config-provider': 2.0.0 + '@smithy/util-middleware': 2.0.5 + tslib: 2.6.2 + /@aws-sdk/signature-v4-crt@3.428.0: resolution: {integrity: sha512-TP6hSSfUH/3RXwJUKcYj2e96/arCzAEYfbk1sBod5JwqqHxfTsssNFoWw6E+a1RtJrwiFjrYiArUuFGcdMZAWg==} engines: {node: '>=14.0.0'} @@ -1239,6 +1516,50 @@ packages: transitivePeerDependencies: - aws-crt + /@aws-sdk/token-providers@3.438.0: + resolution: {integrity: sha512-G2fUfTtU6/1ayYRMu0Pd9Ln4qYSvwJOWCqJMdkDgvXSwdgcOSOLsnAIk1AHGJDAvgLikdCzuyOsdJiexr9Vnww==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/middleware-host-header': 3.433.0 + '@aws-sdk/middleware-logger': 3.433.0 + '@aws-sdk/middleware-recursion-detection': 3.433.0 + '@aws-sdk/middleware-user-agent': 3.438.0 + '@aws-sdk/region-config-resolver': 3.433.0 + '@aws-sdk/types': 3.433.0 + '@aws-sdk/util-endpoints': 3.438.0 + '@aws-sdk/util-user-agent-browser': 3.433.0 + '@aws-sdk/util-user-agent-node': 3.437.0 + '@smithy/config-resolver': 2.0.16 + '@smithy/fetch-http-handler': 2.2.4 + '@smithy/hash-node': 2.0.12 + '@smithy/invalid-dependency': 2.0.12 + '@smithy/middleware-content-length': 2.0.14 + '@smithy/middleware-endpoint': 2.1.3 + '@smithy/middleware-retry': 2.0.18 + '@smithy/middleware-serde': 2.0.12 + '@smithy/middleware-stack': 2.0.6 + '@smithy/node-config-provider': 2.1.3 + '@smithy/node-http-handler': 2.1.8 + '@smithy/property-provider': 2.0.12 + '@smithy/protocol-http': 3.0.8 + '@smithy/shared-ini-file-loader': 2.2.1 + '@smithy/smithy-client': 2.1.12 + '@smithy/types': 2.4.0 + '@smithy/url-parser': 2.0.12 + '@smithy/util-base64': 2.0.0 + '@smithy/util-body-length-browser': 2.0.0 + '@smithy/util-body-length-node': 2.1.0 + '@smithy/util-defaults-mode-browser': 2.0.16 + '@smithy/util-defaults-mode-node': 2.0.21 + '@smithy/util-endpoints': 1.0.2 + '@smithy/util-retry': 2.0.5 + '@smithy/util-utf8': 2.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + /@aws-sdk/types@3.428.0: resolution: {integrity: sha512-4T0Ps2spjg3qbWE6ZK13Vd3FnzpfliaiotqjxUK5YhjDrKXeT36HJp46JhDupElQuHtTkpdiJOSYk2lvY2H4IA==} engines: {node: '>=14.0.0'} @@ -1266,6 +1587,14 @@ packages: '@aws-sdk/types': 3.428.0 tslib: 2.6.2 + /@aws-sdk/util-endpoints@3.438.0: + resolution: {integrity: sha512-6VyPTq1kN3GWxwFt5DdZfOsr6cJZPLjWh0troY/0uUv3hK74C9o3Y0Xf/z8UAUvQFkVqZse12O0/BgPVMImvfA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.433.0 + '@smithy/util-endpoints': 1.0.2 + tslib: 2.6.2 + /@aws-sdk/util-locate-window@3.310.0: resolution: {integrity: sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==} engines: {node: '>=14.0.0'} @@ -1280,6 +1609,14 @@ packages: bowser: 2.11.0 tslib: 2.6.2 + /@aws-sdk/util-user-agent-browser@3.433.0: + resolution: {integrity: sha512-2Cf/Lwvxbt5RXvWFXrFr49vXv0IddiUwrZoAiwhDYxvsh+BMnh+NUFot+ZQaTrk/8IPZVDeLPWZRdVy00iaVXQ==} + dependencies: + '@aws-sdk/types': 3.433.0 + '@smithy/types': 2.4.0 + bowser: 2.11.0 + tslib: 2.6.2 + /@aws-sdk/util-user-agent-node@3.428.0: resolution: {integrity: sha512-s721C3H8TkNd0usWLPEAy7yW2lEglR8QAYojdQGzE0e0wymc671nZAFePSZFRtmqZiFOSfk0R602L5fDbP3a8Q==} engines: {node: '>=14.0.0'} @@ -1294,6 +1631,20 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@aws-sdk/util-user-agent-node@3.437.0: + resolution: {integrity: sha512-JVEcvWaniamtYVPem4UthtCNoTBCfFTwYj7Y3CrWZ2Qic4TqrwLkAfaBGtI2TGrhIClVr77uzLI6exqMTN7orA==} + engines: {node: '>=14.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + dependencies: + '@aws-sdk/types': 3.433.0 + '@smithy/node-config-provider': 2.1.3 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@aws-sdk/util-utf8-browser@3.259.0: resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} dependencies: @@ -1491,6 +1842,10 @@ packages: /@balena/dockerignore@1.0.2: resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} + /@drizzle-team/studio@0.0.5: + resolution: {integrity: sha512-ps5qF0tMxWRVu+V5gvCRrQNqlY92aTnIKdq27gm9LZMSdaKYZt6AVvSK1dlUMzs6Rt0Jm80b+eWct6xShBKhIw==} + dev: true + /@envelop/core@3.0.6: resolution: {integrity: sha512-06t1xCPXq6QFN7W1JUEf68aCwYN0OUDNAIoJe7bAqhaoa2vn7NCcuX1VHkJ/OWpmElUgCsRO6RiBbIru1in0Ig==} dependencies: @@ -1514,6 +1869,20 @@ packages: lru-cache: 6.0.0 tslib: 2.6.2 + /@esbuild-kit/core-utils@3.3.2: + resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} + dependencies: + esbuild: 0.18.20 + source-map-support: 0.5.21 + dev: true + + /@esbuild-kit/esm-loader@2.6.5: + resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} + dependencies: + '@esbuild-kit/core-utils': 3.3.2 + get-tsconfig: 4.7.2 + dev: true + /@esbuild/android-arm64@0.18.13: resolution: {integrity: sha512-j7NhycJUoUAG5kAzGf4fPWfd17N6SM3o1X6MlXVqfHvs2buFraCJzos9vbeWjLxOyBKHyPOnuCuipbhvbYtTAg==} engines: {node: '>=12'} @@ -2223,6 +2592,13 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@smithy/abort-controller@2.0.12: + resolution: {integrity: sha512-YIJyefe1mi3GxKdZxEBEuzYOeQ9xpYfqnFmWzojCssRAuR7ycxwpoRQgp965vuW426xUAQhCV5rCaWElQ7XsaA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@smithy/chunked-blob-reader-native@2.0.0: resolution: {integrity: sha512-HM8V2Rp1y8+1343tkZUKZllFhEQPNmpNdgFAncbTsxkZ18/gqjk23XXv3qGyXWp412f3o43ZZ1UZHVcHrpRnCQ==} dependencies: @@ -2253,6 +2629,16 @@ packages: '@smithy/util-middleware': 2.0.4 tslib: 2.6.2 + /@smithy/config-resolver@2.0.16: + resolution: {integrity: sha512-1k+FWHQDt2pfpXhJsOmNMmlAZ3NUQ98X5tYsjQhVGq+0X6cOBMhfh6Igd0IX3Ut6lEO6DQAdPMI/blNr3JZfMQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/node-config-provider': 2.1.3 + '@smithy/types': 2.4.0 + '@smithy/util-config-provider': 2.0.0 + '@smithy/util-middleware': 2.0.5 + tslib: 2.6.2 + /@smithy/credential-provider-imds@2.0.17: resolution: {integrity: sha512-2XcD414yrwbxxuYueTo7tzLC2/w3jj9FZqfenpv3MQkocdOEmuOVS0v9WHsY/nW6V+2EcR340rj/z5HnvsHncQ==} engines: {node: '>=14.0.0'} @@ -2263,6 +2649,16 @@ packages: '@smithy/url-parser': 2.0.11 tslib: 2.6.2 + /@smithy/credential-provider-imds@2.0.18: + resolution: {integrity: sha512-QnPBi6D2zj6AHJdUTo5zXmk8vwHJ2bNevhcVned1y+TZz/OI5cizz5DsYNkqFUIDn8tBuEyKNgbmKVNhBbuY3g==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/node-config-provider': 2.1.3 + '@smithy/property-provider': 2.0.13 + '@smithy/types': 2.4.0 + '@smithy/url-parser': 2.0.12 + tslib: 2.6.2 + /@smithy/eventstream-codec@2.0.11: resolution: {integrity: sha512-BQCTjxhCYRZIfXapa2LmZSaH8QUBGwMZw7XRN83hrdixbLjIcj+o549zjkedFS07Ve2TlvWUI6BTzP+nv7snBA==} dependencies: @@ -2271,6 +2667,14 @@ packages: '@smithy/util-hex-encoding': 2.0.0 tslib: 2.6.2 + /@smithy/eventstream-codec@2.0.12: + resolution: {integrity: sha512-ZZQLzHBJkbiAAdj2C5K+lBlYp/XJ+eH2uy+jgJgYIFW/o5AM59Hlj7zyI44/ZTDIQWmBxb3EFv/c5t44V8/g8A==} + dependencies: + '@aws-crypto/crc32': 3.0.0 + '@smithy/types': 2.4.0 + '@smithy/util-hex-encoding': 2.0.0 + tslib: 2.6.2 + /@smithy/eventstream-serde-browser@2.0.11: resolution: {integrity: sha512-p9IK4uvwT6B3pT1VGlODvcVBfPVikjBFHAcKpvvNF+7lAEI+YiC6d0SROPkpjnvCgVBYyGXa3ciqrWnFze6mwQ==} engines: {node: '>=14.0.0'} @@ -2279,6 +2683,14 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@smithy/eventstream-serde-browser@2.0.12: + resolution: {integrity: sha512-0pi8QlU/pwutNshoeJcbKR1p7Ie5STd8UFAMX5xhSoSJjNlxIv/OsHbF023jscMRN2Prrqd6ToGgdCnsZVQjvg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/eventstream-serde-universal': 2.0.12 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@smithy/eventstream-serde-config-resolver@2.0.11: resolution: {integrity: sha512-vN32E8yExo0Z8L7kXhlU9KRURrhqOpPdLxQMp3MwfMThrjiqbr1Sk5srUXc1ed2Ygl/l0TEN9vwNG0bQHg6AjQ==} engines: {node: '>=14.0.0'} @@ -2286,6 +2698,13 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@smithy/eventstream-serde-config-resolver@2.0.12: + resolution: {integrity: sha512-I0XfwQkIX3gAnbrU5rLMkBSjTM9DHttdbLwf12CXmj7SSI5dT87PxtKLRrZGanaCMbdf2yCep+MW5/4M7IbvQA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@smithy/eventstream-serde-node@2.0.11: resolution: {integrity: sha512-Gjqbpg7UmD+YzkpgNShNcDNZcUpBWIkvX2XCGptz5PoxJU/UQbuF9eSc93ZlIb7j4aGjtFfqk23HUMW8Hopg2Q==} engines: {node: '>=14.0.0'} @@ -2294,6 +2713,14 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@smithy/eventstream-serde-node@2.0.12: + resolution: {integrity: sha512-vf1vMHGOkG3uqN9x1zKOhnvW/XgvhJXWqjV6zZiT2FMjlEayugQ1mzpSqr7uf89+BzjTzuZKERmOsEAmewLbxw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/eventstream-serde-universal': 2.0.12 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@smithy/eventstream-serde-universal@2.0.11: resolution: {integrity: sha512-F8FsxLTbFN4+Esgpo+nNKcEajrgRZJ+pG9c8+MhLM4Odp5ejLHw2GMCXd81cGsgmfcbnzdDEXazPPVzOwj89MQ==} engines: {node: '>=14.0.0'} @@ -2302,6 +2729,14 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@smithy/eventstream-serde-universal@2.0.12: + resolution: {integrity: sha512-xZ3ZNpCxIND+q+UCy7y1n1/5VQEYicgSTNCcPqsKawX+Vd+6OcFX7gUHMyPzL8cZr+GdmJuxNleqHlH4giK2tw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/eventstream-codec': 2.0.12 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@smithy/fetch-http-handler@1.1.0: resolution: {integrity: sha512-N22C9R44u5WGlcY+Wuv8EXmCAq62wWwriRAuoczMEwAIjPbvHSthyPSLqI4S7kAST1j6niWg8kwpeJ3ReAv3xg==} dependencies: @@ -2320,6 +2755,15 @@ packages: '@smithy/util-base64': 2.0.0 tslib: 2.6.2 + /@smithy/fetch-http-handler@2.2.4: + resolution: {integrity: sha512-gIPRFEGi+c6V52eauGKrjDzPWF2Cu7Z1r5F8A3j2wcwz25sPG/t8kjsbEhli/tS/2zJp/ybCZXe4j4ro3yv/HA==} + dependencies: + '@smithy/protocol-http': 3.0.8 + '@smithy/querystring-builder': 2.0.12 + '@smithy/types': 2.4.0 + '@smithy/util-base64': 2.0.0 + tslib: 2.6.2 + /@smithy/hash-blob-browser@2.0.11: resolution: {integrity: sha512-/6vq/NiH2EN3mWdwcLdjVohP+VCng+ZA1GnlUdx959egsfgIlLWQvCyjnB2ze9Hr6VHV5XEFLLpLQH2dHA6Sgw==} dependencies: @@ -2337,6 +2781,15 @@ packages: '@smithy/util-utf8': 2.0.0 tslib: 2.6.2 + /@smithy/hash-node@2.0.12: + resolution: {integrity: sha512-fDZnTr5j9t5qcbeJ037aMZXxMka13Znqwrgy3PAqYj6Dm3XHXHftTH3q+NWgayUxl1992GFtQt1RuEzRMy3NnQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.4.0 + '@smithy/util-buffer-from': 2.0.0 + '@smithy/util-utf8': 2.0.0 + tslib: 2.6.2 + /@smithy/hash-stream-node@2.0.11: resolution: {integrity: sha512-Jn2yl+Dn0kvwKvSavvR1/BFVYa2wIkaJKWeTH48kno89gqHAJxMh1hrtBN6SJ7F8VhodNZTiNOlQVqCSfLheNQ==} engines: {node: '>=14.0.0'} @@ -2351,6 +2804,12 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@smithy/invalid-dependency@2.0.12: + resolution: {integrity: sha512-p5Y+iMHV3SoEpy3VSR7mifbreHQwVSvHSAz/m4GdoXfOzKzaYC8hYv10Ks7Deblkf7lhas8U+lAp9ThbBM+ZXA==} + dependencies: + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@smithy/is-array-buffer@1.1.0: resolution: {integrity: sha512-twpQ/n+3OWZJ7Z+xu43MJErmhB/WO/mMTnqR6PwWQShvSJ/emx5d1N59LQZk6ZpTAeuRWrc+eHhkzTp9NFjNRQ==} engines: {node: '>=14.0.0'} @@ -2378,6 +2837,14 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@smithy/middleware-content-length@2.0.14: + resolution: {integrity: sha512-poUNgKTw9XwPXfX9nEHpVgrMNVpaSMZbshqvPxFVoalF4wp6kRzYKOfdesSVectlQ51VtigoLfbXcdyPwvxgTg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/protocol-http': 3.0.8 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@smithy/middleware-endpoint@2.1.2: resolution: {integrity: sha512-dua4r2EbSTRzNefz72snz+KDuXN73RCe1K+rGeemzUyYemxuh1jujFbLQbTU6DVlTgHkhtrbH0+kdOFY/SV4Qg==} engines: {node: '>=14.0.0'} @@ -2390,6 +2857,18 @@ packages: '@smithy/util-middleware': 2.0.4 tslib: 2.6.2 + /@smithy/middleware-endpoint@2.1.3: + resolution: {integrity: sha512-ZrQ0/YX6hNVTxqMEHtEaDbDv6pNeEji/a5Vk3HuFC5R3ZY8lfoATyxmOGxBVYnF3NUvZLNC7umEv1WzWGWvCGQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/middleware-serde': 2.0.12 + '@smithy/node-config-provider': 2.1.3 + '@smithy/shared-ini-file-loader': 2.2.2 + '@smithy/types': 2.4.0 + '@smithy/url-parser': 2.0.12 + '@smithy/util-middleware': 2.0.5 + tslib: 2.6.2 + /@smithy/middleware-retry@1.1.0: resolution: {integrity: sha512-lINKYxIvT+W20YFOtHBKeGm7npuJg0/YCoShttU7fVpsmU+a2rdb9zrJn1MHqWfUL6DhTAWGa0tH2O7l4XrDcw==} engines: {node: '>=14.0.0'} @@ -2415,6 +2894,19 @@ packages: tslib: 2.6.2 uuid: 8.3.2 + /@smithy/middleware-retry@2.0.18: + resolution: {integrity: sha512-VyrHQRldGSb3v9oFOB5yPxmLT7U2sQic2ytylOnYlnsmVOLlFIaI6sW22c+w2675yq+XZ6HOuzV7x2OBYCWRNA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/node-config-provider': 2.1.3 + '@smithy/protocol-http': 3.0.8 + '@smithy/service-error-classification': 2.0.5 + '@smithy/types': 2.4.0 + '@smithy/util-middleware': 2.0.5 + '@smithy/util-retry': 2.0.5 + tslib: 2.6.2 + uuid: 8.3.2 + /@smithy/middleware-serde@2.0.11: resolution: {integrity: sha512-NuxnjMyf4zQqhwwdh0OTj5RqpnuT6HcH5Xg5GrPijPcKzc2REXVEVK4Yyk8ckj8ez1XSj/bCmJ+oNjmqB02GWA==} engines: {node: '>=14.0.0'} @@ -2422,6 +2914,13 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@smithy/middleware-serde@2.0.12: + resolution: {integrity: sha512-IBeco157lIScecq2Z+n0gq56i4MTnfKxS7rbfrAORveDJgnbBAaEQgYqMqp/cYqKrpvEXcyTjwKHrBjCCIZh2A==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@smithy/middleware-stack@1.1.0: resolution: {integrity: sha512-XynYiIvXNea2BbLcppvpNK0zu8o2woJqgnmxqYTn4FWagH/Hr2QIk8LOsUz7BIJ4tooFhmx8urHKCdlPbbPDCA==} engines: {node: '>=14.0.0'} @@ -2435,6 +2934,13 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@smithy/middleware-stack@2.0.6: + resolution: {integrity: sha512-YSvNZeOKWLJ0M/ycxwDIe2Ztkp6Qixmcml1ggsSv2fdHKGkBPhGrX5tMzPGMI1yyx55UEYBi2OB4s+RriXX48A==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@smithy/node-config-provider@2.1.2: resolution: {integrity: sha512-tbYh/JK/ddxKWYTtjLgap0juyivJ0wCvywMqINb54zyOVHoKYM6iYl7DosQA0owFaNp6GAx1lXFjqGz7L2fAqA==} engines: {node: '>=14.0.0'} @@ -2444,6 +2950,15 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@smithy/node-config-provider@2.1.3: + resolution: {integrity: sha512-J6lXvRHGVnSX3n1PYi+e1L5HN73DkkJpUviV3Ebf+8wSaIjAf+eVNbzyvh/S5EQz7nf4KVfwbD5vdoZMAthAEQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/property-provider': 2.0.13 + '@smithy/shared-ini-file-loader': 2.2.2 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@smithy/node-http-handler@1.1.0: resolution: {integrity: sha512-d3kRriEgaIiGXLziAM8bjnaLn1fthCJeTLZIwEIpzQqe6yPX0a+yQoLCTyjb2fvdLwkMoG4p7THIIB5cj5lkbg==} engines: {node: '>=14.0.0'} @@ -2464,6 +2979,16 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@smithy/node-http-handler@2.1.8: + resolution: {integrity: sha512-KZylM7Wff/So5SmCiwg2kQNXJ+RXgz34wkxS7WNwIUXuZrZZpY/jKJCK+ZaGyuESDu3TxcaY+zeYGJmnFKbQsA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/abort-controller': 2.0.12 + '@smithy/protocol-http': 3.0.8 + '@smithy/querystring-builder': 2.0.12 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@smithy/property-provider@2.0.12: resolution: {integrity: sha512-Un/OvvuQ1Kg8WYtoMCicfsFFuHb/TKL3pCA6ZIo/WvNTJTR94RtoRnL7mY4XkkUAoFMyf6KjcQJ76y1FX7S5rw==} engines: {node: '>=14.0.0'} @@ -2471,6 +2996,13 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@smithy/property-provider@2.0.13: + resolution: {integrity: sha512-VJqUf2CbsQX6uUiC5dUPuoEATuFjkbkW3lJHbRnpk9EDC9X+iKqhfTK+WP+lve5EQ9TcCI1Q6R7hrg41FyC54w==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@smithy/protocol-http@1.2.0: resolution: {integrity: sha512-GfGfruksi3nXdFok5RhgtOnWe5f6BndzYfmEXISD+5gAGdayFGpjWu5pIqIweTudMtse20bGbc+7MFZXT1Tb8Q==} engines: {node: '>=14.0.0'} @@ -2485,6 +3017,13 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@smithy/protocol-http@3.0.8: + resolution: {integrity: sha512-SHJvYeWq8q0FK8xHk+xjV9dzDUDjFMT+G1pZbV+XB6OVoac/FSVshlMNPeUJ8AmSkcDKHRu5vASnRqZHgD3qhw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@smithy/querystring-builder@1.1.0: resolution: {integrity: sha512-gDEi4LxIGLbdfjrjiY45QNbuDmpkwh9DX4xzrR2AzjjXpxwGyfSpbJaYhXARw9p17VH0h9UewnNQXNwaQyYMDA==} engines: {node: '>=14.0.0'} @@ -2501,6 +3040,14 @@ packages: '@smithy/util-uri-escape': 2.0.0 tslib: 2.6.2 + /@smithy/querystring-builder@2.0.12: + resolution: {integrity: sha512-cDbF07IuCjiN8CdGvPzfJjXIrmDSelScRfyJYrYBNBbKl2+k7QD/KqiHhtRyEKgID5mmEVrV6KE6L/iPJ98sFw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.4.0 + '@smithy/util-uri-escape': 2.0.0 + tslib: 2.6.2 + /@smithy/querystring-parser@2.0.11: resolution: {integrity: sha512-YXe7jhi7s3dQ0Fu9dLoY/gLu6NCyy8tBWJL/v2c9i7/RLpHgKT+uT96/OqZkHizCJ4kr0ZD46tzMjql/o60KLg==} engines: {node: '>=14.0.0'} @@ -2508,6 +3055,13 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@smithy/querystring-parser@2.0.12: + resolution: {integrity: sha512-fytyTcXaMzPBuNtPlhj5v6dbl4bJAnwKZFyyItAGt4Tgm9HFPZNo7a9r1SKPr/qdxUEBzvL9Rh+B9SkTX3kFxg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@smithy/service-error-classification@1.1.0: resolution: {integrity: sha512-OCTEeJ1igatd5kFrS2VDlYbainNNpf7Lj1siFOxnRWqYOP9oNvC5HOJBd3t+Z8MbrmehBtuDJ2QqeBsfeiNkww==} engines: {node: '>=14.0.0'} @@ -2518,6 +3072,12 @@ packages: dependencies: '@smithy/types': 2.3.5 + /@smithy/service-error-classification@2.0.5: + resolution: {integrity: sha512-M0SeJnEgD2ywJyV99Fb1yKFzmxDe9JfpJiYTVSRMyRLc467BPU0qsuuDPzMCdB1mU8M8u1rVOdkqdoyFN8UFTw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.4.0 + /@smithy/shared-ini-file-loader@2.2.1: resolution: {integrity: sha512-eAYajwo2eTTVU5KPX90+V6ccfrWphrzcUwOt7n9pLOMBO0fOKlRVshbvCBqfRCxEn7OYDGH6TsL3yrx+hAjddA==} engines: {node: '>=14.0.0'} @@ -2525,6 +3085,13 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@smithy/shared-ini-file-loader@2.2.2: + resolution: {integrity: sha512-noyQUPn7b1M8uB0GEXc/Zyxq+5K2b7aaqWnLp+hgJ7+xu/FCvtyWy5eWLDjQEsHnAet2IZhS5QF8872OR69uNg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@smithy/signature-v4@2.0.11: resolution: {integrity: sha512-EFVU1dT+2s8xi227l1A9O27edT/GNKvyAK6lZnIZ0zhIHq/jSLznvkk15aonGAM1kmhmZBVGpI7Tt0odueZK9A==} engines: {node: '>=14.0.0'} @@ -2556,6 +3123,15 @@ packages: '@smithy/util-stream': 2.0.16 tslib: 2.6.2 + /@smithy/smithy-client@2.1.12: + resolution: {integrity: sha512-XXqhridfkKnpj+lt8vM6HRlZbqUAqBjVC74JIi13F/AYQd/zTj9SOyGfxnbp4mjY9q28LityxIuV8CTinr9r5w==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/middleware-stack': 2.0.6 + '@smithy/types': 2.4.0 + '@smithy/util-stream': 2.0.17 + tslib: 2.6.2 + /@smithy/types@1.2.0: resolution: {integrity: sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==} engines: {node: '>=14.0.0'} @@ -2581,6 +3157,13 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@smithy/url-parser@2.0.12: + resolution: {integrity: sha512-qgkW2mZqRvlNUcBkxYB/gYacRaAdck77Dk3/g2iw0S9F0EYthIS3loGfly8AwoWpIvHKhkTsCXXQfzksgZ4zIA==} + dependencies: + '@smithy/querystring-parser': 2.0.12 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@smithy/util-base64@1.1.0: resolution: {integrity: sha512-FpYmDmVbOXAxqvoVCwqehUN0zXS+lN8V7VS9O7I8MKeVHdSTsZzlwiMEvGoyTNOXWn8luF4CTDYgNHnZViR30g==} engines: {node: '>=14.0.0'} @@ -2642,6 +3225,16 @@ packages: bowser: 2.11.0 tslib: 2.6.2 + /@smithy/util-defaults-mode-browser@2.0.16: + resolution: {integrity: sha512-Uv5Cu8nVkuvLn0puX+R9zWbSNpLIR3AxUlPoLJ7hC5lvir8B2WVqVEkJLwtixKAncVLasnTVjPDCidtAUTGEQw==} + engines: {node: '>= 10.0.0'} + dependencies: + '@smithy/property-provider': 2.0.13 + '@smithy/smithy-client': 2.1.12 + '@smithy/types': 2.4.0 + bowser: 2.11.0 + tslib: 2.6.2 + /@smithy/util-defaults-mode-node@2.0.20: resolution: {integrity: sha512-kJjcZ/Lzvs3sPDKBwlhZsFFcgPNIpB3CMb6/saCakawRzo0E+JkyS3ZZRjVR3ce29yHtwoP/0YLKC1PeH0Dffg==} engines: {node: '>= 10.0.0'} @@ -2654,6 +3247,26 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@smithy/util-defaults-mode-node@2.0.21: + resolution: {integrity: sha512-cUEsttVZ79B7Al2rWK2FW03HBpD9LyuqFtm+1qFty5u9sHSdesr215gS2Ln53fTopNiPgeXpdoM3IgjvIO0rJw==} + engines: {node: '>= 10.0.0'} + dependencies: + '@smithy/config-resolver': 2.0.16 + '@smithy/credential-provider-imds': 2.0.18 + '@smithy/node-config-provider': 2.1.3 + '@smithy/property-provider': 2.0.13 + '@smithy/smithy-client': 2.1.12 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + + /@smithy/util-endpoints@1.0.2: + resolution: {integrity: sha512-QEdq+sP68IJHAMVB2ugKVVZEWeKQtZLuf+akHzc8eTVElsZ2ZdVLWC6Cp+uKjJ/t4yOj1qu6ZzyxJQEQ8jdEjg==} + engines: {node: '>= 14.0.0'} + dependencies: + '@smithy/node-config-provider': 2.1.3 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@smithy/util-hex-encoding@1.1.0: resolution: {integrity: sha512-7UtIE9eH0u41zpB60Jzr0oNCQ3hMJUabMcKRUVjmyHTXiWDE4vjSqN6qlih7rCNeKGbioS7f/y2Jgym4QZcKFg==} engines: {node: '>=14.0.0'} @@ -2679,6 +3292,13 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@smithy/util-middleware@2.0.5: + resolution: {integrity: sha512-1lyT3TcaMJQe+OFfVI+TlomDkPuVzb27NZYdYtmSTltVmLaUjdCyt4KE+OH1CnhZKsz4/cdCL420Lg9UH5Z2Mw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@smithy/util-retry@1.1.0: resolution: {integrity: sha512-ygQW5HBqYXpR3ua09UciS0sL7UGJzGiktrKkOuEJwARoUuzz40yaEGU6xd9Gs7KBmAaFC8gMfnghHtwZ2nyBCQ==} engines: {node: '>= 14.0.0'} @@ -2694,6 +3314,14 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@smithy/util-retry@2.0.5: + resolution: {integrity: sha512-x3t1+MQAJ6QONk3GTbJNcugCFDVJ+Bkro5YqQQK1EyVesajNDqxFtCx9WdOFNGm/Cbm7tUdwVEmfKQOJoU2Vtw==} + engines: {node: '>= 14.0.0'} + dependencies: + '@smithy/service-error-classification': 2.0.5 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@smithy/util-stream@1.1.0: resolution: {integrity: sha512-w3lsdGsntaLQIrwDWJkIFKrFscgZXwU/oxsse09aSTNv5TckPhDeYea3LhsDrU5MGAG3vprhVZAKr33S45coVA==} engines: {node: '>=14.0.0'} @@ -2720,6 +3348,19 @@ packages: '@smithy/util-utf8': 2.0.0 tslib: 2.6.2 + /@smithy/util-stream@2.0.17: + resolution: {integrity: sha512-fP/ZQ27rRvHsqItds8yB7jerwMpZFTL3QqbQbidUiG0+mttMoKdP0ZqnvM8UK5q0/dfc3/pN7g4XKPXOU7oRWw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/fetch-http-handler': 2.2.4 + '@smithy/node-http-handler': 2.1.8 + '@smithy/types': 2.4.0 + '@smithy/util-base64': 2.0.0 + '@smithy/util-buffer-from': 2.0.0 + '@smithy/util-hex-encoding': 2.0.0 + '@smithy/util-utf8': 2.0.0 + tslib: 2.6.2 + /@smithy/util-uri-escape@1.1.0: resolution: {integrity: sha512-/jL/V1xdVRt5XppwiaEU8Etp5WHZj609n0xMTuehmCqdoOFbId1M+aEeDWZsQ+8JbEB/BJ6ynY2SlYmOaKtt8w==} engines: {node: '>=14.0.0'} @@ -2754,6 +3395,14 @@ packages: '@smithy/types': 2.3.5 tslib: 2.6.2 + /@smithy/util-waiter@2.0.12: + resolution: {integrity: sha512-3sENmyVa1NnOPoiT2NCApPmu7ukP7S/v7kL9IxNmnygkDldn7/yK0TP42oPJLwB2k3mospNsSePIlqdXEUyPHA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/abort-controller': 2.0.12 + '@smithy/types': 2.4.0 + tslib: 2.6.2 + /@theapexlab/serverless-icebreaker@1.1.3: resolution: {integrity: sha512-88JuMTMu2GeXw8PszJOdqCvzTnJghNqd5JpIuKtlduFIGA/8UA0MLPRVjXIF+JdUeckSLfYQOG+dydZ80clUSQ==} hasBin: true @@ -2853,6 +3502,13 @@ packages: /@types/p-queue@2.3.2: resolution: {integrity: sha512-eKAv5Ql6k78dh3ULCsSBxX6bFNuGjTmof5Q/T6PiECDq0Yf8IIn46jCyp3RJvCi8owaEmm3DZH1PEImjBMd/vQ==} + /@types/pg@8.10.7: + resolution: {integrity: sha512-ksJqHipwYaSEHz9e1fr6H6erjoEdNNaOxwyJgPx9bNeaqOW3iWBQgVHfpwiSAoqGzchfc+ZyRLwEfeCcyYD3uQ==} + dependencies: + '@types/node': 20.8.6 + pg-protocol: 1.6.0 + pg-types: 4.0.1 + /@types/promise.allsettled@1.0.4: resolution: {integrity: sha512-W7uaCh7E+jhL2u8Fx4+er8VW3iHdkofg0J/8p0HkBWigSUCq6i4vK/VA/0JQzewPHoaS1Tv1csSyfUVvO6RMtA==} @@ -3626,6 +4282,10 @@ packages: /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + /buffer-writer@2.0.0: + resolution: {integrity: sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==} + engines: {node: '>=4'} + /buffer@4.9.2: resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} dependencies: @@ -3675,6 +4335,11 @@ packages: engines: {node: '>=6'} dev: true + /camelcase@7.0.1: + resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} + engines: {node: '>=14.16'} + dev: true + /caniuse-lite@1.0.30001549: resolution: {integrity: sha512-qRp48dPYSCYaP+KurZLhDYdVE+yEyht/3NlmcJgVQ2VMGt6JL36ndQ/7rgspdZsJuxDPFIo/OzBT2+GmIJ53BA==} @@ -3762,6 +4427,17 @@ packages: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} + /cli-color@2.0.3: + resolution: {integrity: sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==} + engines: {node: '>=0.10'} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + es6-iterator: 2.0.3 + memoizee: 0.4.15 + timers-ext: 0.1.7 + dev: true + /cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} @@ -3851,6 +4527,11 @@ packages: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true + /commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + dev: true + /commist@1.1.0: resolution: {integrity: sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg==} dependencies: @@ -3953,6 +4634,13 @@ packages: /crypto-js@4.1.1: resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==} + /d@1.0.1: + resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} + dependencies: + es5-ext: 0.10.62 + type: 1.2.0 + dev: true + /debounce-fn@4.0.0: resolution: {integrity: sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==} engines: {node: '>=10'} @@ -4105,6 +4793,12 @@ packages: resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} engines: {node: '>=0.3.1'} + /difflib@0.2.4: + resolution: {integrity: sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==} + dependencies: + heap: 0.2.7 + dev: true + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -4136,6 +4830,100 @@ packages: resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} engines: {node: '>=12'} + /dreamopt@0.8.0: + resolution: {integrity: sha512-vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg==} + engines: {node: '>=0.4.0'} + dependencies: + wordwrap: 1.0.0 + dev: true + + /drizzle-kit@0.19.13: + resolution: {integrity: sha512-Rba5VW1O2JfJlwVBeZ8Zwt2E2us5oZ08PQBDiVSGlug53TOc8hzXjblZFuF+dnll9/RQEHrkzBmJFgqTvn5Rxg==} + hasBin: true + dependencies: + '@drizzle-team/studio': 0.0.5 + '@esbuild-kit/esm-loader': 2.6.5 + camelcase: 7.0.1 + chalk: 5.3.0 + commander: 9.5.0 + esbuild: 0.18.20 + esbuild-register: 3.5.0(esbuild@0.18.20) + glob: 8.1.0 + hanji: 0.0.5 + json-diff: 0.9.0 + minimatch: 7.4.6 + zod: 3.22.4 + transitivePeerDependencies: + - supports-color + dev: true + + /drizzle-orm@0.28.6(@aws-sdk/client-rds-data@3.438.0)(@types/pg@8.10.7)(kysely@0.25.0)(pg@8.11.3): + resolution: {integrity: sha512-yBe+F9htrlYER7uXgDJUQsTHFoIrI5yMm5A0bg0GiZ/kY5jNXTWoEy4KQtg35cE27sw1VbgzoMWHAgCckUUUww==} + peerDependencies: + '@aws-sdk/client-rds-data': '>=3' + '@cloudflare/workers-types': '>=3' + '@libsql/client': '*' + '@neondatabase/serverless': '>=0.1' + '@opentelemetry/api': ^1.4.1 + '@planetscale/database': '>=1' + '@types/better-sqlite3': '*' + '@types/pg': '*' + '@types/sql.js': '*' + '@vercel/postgres': '*' + better-sqlite3: '>=7' + bun-types: '*' + knex: '*' + kysely: '*' + mysql2: '>=2' + pg: '>=8' + postgres: '>=3' + sql.js: '>=1' + sqlite3: '>=5' + peerDependenciesMeta: + '@aws-sdk/client-rds-data': + optional: true + '@cloudflare/workers-types': + optional: true + '@libsql/client': + optional: true + '@neondatabase/serverless': + optional: true + '@opentelemetry/api': + optional: true + '@planetscale/database': + optional: true + '@types/better-sqlite3': + optional: true + '@types/pg': + optional: true + '@types/sql.js': + optional: true + '@vercel/postgres': + optional: true + better-sqlite3: + optional: true + bun-types: + optional: true + knex: + optional: true + kysely: + optional: true + mysql2: + optional: true + pg: + optional: true + postgres: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + dependencies: + '@aws-sdk/client-rds-data': 3.438.0 + '@types/pg': 8.10.7 + kysely: 0.25.0 + pg: 8.11.3 + /dset@3.1.2: resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==} engines: {node: '>=4'} @@ -4271,6 +5059,51 @@ packages: is-date-object: 1.0.5 is-symbol: 1.0.4 + /es5-ext@0.10.62: + resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} + engines: {node: '>=0.10'} + requiresBuild: true + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.3 + next-tick: 1.1.0 + dev: true + + /es6-iterator@2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + es6-symbol: 3.1.3 + dev: true + + /es6-symbol@3.1.3: + resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} + dependencies: + d: 1.0.1 + ext: 1.7.0 + dev: true + + /es6-weak-map@2.0.3: + resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + es6-iterator: 2.0.3 + es6-symbol: 3.1.3 + dev: true + + /esbuild-register@3.5.0(esbuild@0.18.20): + resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} + peerDependencies: + esbuild: '>=0.12 <1' + dependencies: + debug: 4.3.4 + esbuild: 0.18.20 + transitivePeerDependencies: + - supports-color + dev: true + /esbuild@0.18.13: resolution: {integrity: sha512-vhg/WR/Oiu4oUIkVhmfcc23G6/zWuEQKFS+yiosSHe4aN6+DQRXIfeloYGibIfVhkr4wyfuVsGNLr+sQU1rWWw==} engines: {node: '>=12'} @@ -4542,6 +5375,13 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + /event-emitter@0.3.5: + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + dev: true + /eventemitter3@3.1.2: resolution: {integrity: sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==} @@ -4609,6 +5449,12 @@ packages: transitivePeerDependencies: - supports-color + /ext@1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + dependencies: + type: 2.7.2 + dev: true + /external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} @@ -4893,6 +5739,12 @@ packages: call-bind: 1.0.2 get-intrinsic: 1.2.1 + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -4990,6 +5842,13 @@ packages: resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + /hanji@0.0.5: + resolution: {integrity: sha512-Abxw1Lq+TnYiL4BueXqMau222fPSPMFtya8HdpWsz/xVAhifXou71mPh/kY2+08RgFcVccjG3uZHs6K5HAe3zw==} + dependencies: + lodash.throttle: 4.1.1 + sisteransi: 1.0.5 + dev: true + /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} @@ -5027,6 +5886,10 @@ packages: /hash-it@6.0.0: resolution: {integrity: sha512-KHzmSFx1KwyMPw0kXeeUD752q/Kfbzhy6dAZrjXV9kAIXGqzGvv8vhkUqj+2MGZldTo0IBpw6v7iWE7uxsvH0w==} + /heap@0.2.7: + resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} + dev: true + /help-me@3.0.0: resolution: {integrity: sha512-hx73jClhyk910sidBB7ERlnhMlFsJJIBqSVMFDwPN8o2v9nmp5KgLq1Xz1Bf1fCMMZ6mPrX159iG0VLy/fPMtQ==} dependencies: @@ -5324,6 +6187,10 @@ packages: engines: {node: '>=8'} dev: true + /is-promise@2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + dev: true + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -5439,6 +6306,15 @@ packages: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} dev: true + /json-diff@0.9.0: + resolution: {integrity: sha512-cVnggDrVkAAA3OvFfHpFEhOnmcsUpleEKq4d4O8sQWWSH40MBrWstKigVB1kGrgLWzuom+7rRdaCsnBD6VyObQ==} + hasBin: true + dependencies: + cli-color: 2.0.3 + difflib: 0.2.4 + dreamopt: 0.8.0 + dev: true + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true @@ -5513,7 +6389,7 @@ packages: json-buffer: 3.0.1 dev: true - /kysely-codegen@0.10.1(kysely@0.25.0): + /kysely-codegen@0.10.1(kysely@0.25.0)(pg@8.11.3): resolution: {integrity: sha512-8Bslh952gN5gtucRv4jTZDFD18RBioS6M50zHfe5kwb5iSyEAunU4ZYMdHzkHraa4zxjg5/183XlOryBCXLRIw==} hasBin: true peerDependencies: @@ -5534,14 +6410,15 @@ packages: kysely: 0.25.0 micromatch: 4.0.5 minimist: 1.2.8 + pg: 8.11.3 - /kysely-data-api@0.2.1(@aws-sdk/client-rds-data@3.429.0)(kysely@0.25.0): + /kysely-data-api@0.2.1(@aws-sdk/client-rds-data@3.438.0)(kysely@0.25.0): resolution: {integrity: sha512-KmASvF1gmjVqyU9WOUXhCQlv29ofR+xc2DhjaIomz1+Bjd/VtR2/3g4ZuXwG1L4lWGKxMuo5iOvK3XyPbB4LdQ==} peerDependencies: '@aws-sdk/client-rds-data': 3.x kysely: 0.x dependencies: - '@aws-sdk/client-rds-data': 3.429.0 + '@aws-sdk/client-rds-data': 3.438.0 kysely: 0.25.0 /kysely@0.25.0: @@ -5661,6 +6538,10 @@ packages: /lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + /lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + dev: true + /lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} @@ -5723,6 +6604,12 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} + /lru-queue@0.1.0: + resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} + dependencies: + es5-ext: 0.10.62 + dev: true + /luxon@3.4.3: resolution: {integrity: sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==} engines: {node: '>=12'} @@ -5753,6 +6640,19 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} + /memoizee@0.4.15: + resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + es6-weak-map: 2.0.3 + event-emitter: 0.3.5 + is-promise: 2.2.2 + lru-queue: 0.1.0 + next-tick: 1.1.0 + timers-ext: 0.1.7 + dev: true + /merge-descriptors@1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} @@ -5829,6 +6729,13 @@ packages: dependencies: brace-expansion: 2.0.1 + /minimatch@7.4.6: + resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist@1.2.6: resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} @@ -5944,6 +6851,10 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + /next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + dev: true + /node-releases@2.0.13: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} @@ -6021,6 +6932,9 @@ packages: /obliterator@2.0.4: resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} + /obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + /oidc-token-hash@5.0.3: resolution: {integrity: sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==} engines: {node: ^10.13.0 || >=12.0.0} @@ -6172,6 +7086,9 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + /packet-reader@1.0.0: + resolution: {integrity: sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==} + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -6236,6 +7153,78 @@ packages: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} dev: true + /pg-cloudflare@1.1.1: + resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==} + requiresBuild: true + optional: true + + /pg-connection-string@2.6.2: + resolution: {integrity: sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==} + + /pg-int8@1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + + /pg-numeric@1.0.2: + resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==} + engines: {node: '>=4'} + + /pg-pool@3.6.1(pg@8.11.3): + resolution: {integrity: sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==} + peerDependencies: + pg: '>=8.0' + dependencies: + pg: 8.11.3 + + /pg-protocol@1.6.0: + resolution: {integrity: sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==} + + /pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.0 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + + /pg-types@4.0.1: + resolution: {integrity: sha512-hRCSDuLII9/LE3smys1hRHcu5QGcLs9ggT7I/TCs0IE+2Eesxi9+9RWAAwZ0yaGjxoWICF/YHLOEjydGujoJ+g==} + engines: {node: '>=10'} + dependencies: + pg-int8: 1.0.1 + pg-numeric: 1.0.2 + postgres-array: 3.0.2 + postgres-bytea: 3.0.0 + postgres-date: 2.0.1 + postgres-interval: 3.0.0 + postgres-range: 1.1.3 + + /pg@8.11.3: + resolution: {integrity: sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==} + engines: {node: '>= 8.0.0'} + peerDependencies: + pg-native: '>=3.0.1' + peerDependenciesMeta: + pg-native: + optional: true + dependencies: + buffer-writer: 2.0.0 + packet-reader: 1.0.0 + pg-connection-string: 2.6.2 + pg-pool: 3.6.1(pg@8.11.3) + pg-protocol: 1.6.0 + pg-types: 2.2.0 + pgpass: 1.0.5 + optionalDependencies: + pg-cloudflare: 1.1.1 + + /pgpass@1.0.5: + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + dependencies: + split2: 4.2.0 + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -6299,6 +7288,45 @@ packages: source-map-js: 1.0.2 dev: true + /postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + + /postgres-array@3.0.2: + resolution: {integrity: sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==} + engines: {node: '>=12'} + + /postgres-bytea@1.0.0: + resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} + engines: {node: '>=0.10.0'} + + /postgres-bytea@3.0.0: + resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==} + engines: {node: '>= 6'} + dependencies: + obuf: 1.1.2 + + /postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + + /postgres-date@2.0.1: + resolution: {integrity: sha512-YtMKdsDt5Ojv1wQRvUhnyDJNSr2dGIC96mQVKz7xufp07nfuFONzdaowrMHjlAzY6GDLd4f+LUHHAAM1h4MdUw==} + engines: {node: '>=12'} + + /postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + dependencies: + xtend: 4.0.2 + + /postgres-interval@3.0.0: + resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==} + engines: {node: '>=12'} + + /postgres-range@1.1.3: + resolution: {integrity: sha512-VdlZoocy5lCP0c/t66xAfclglEapXPCIVhqqJRncYpvbCgImF0w67aPKfbqUMr72tO2k5q0TdTZwCLjPTI6C9g==} + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -6494,6 +7522,10 @@ packages: engines: {node: '>=4'} dev: true + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -6682,6 +7714,10 @@ packages: /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -6714,11 +7750,27 @@ packages: engines: {node: '>=0.10.0'} dev: true + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + /split2@3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: readable-stream: 3.6.2 + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + /sst-aws-cdk@2.95.1: resolution: {integrity: sha512-C9ZITc6GLscxLbIhtjzralohDF6VGwmYKmZ+zFp7gfYgX5zCbJkBvI8q9jUbEDAGm6YK92xvQz2CJDUhTqsdSg==} engines: {node: '>= 14.15.0'} @@ -6731,7 +7783,7 @@ packages: optionalDependencies: fsevents: 2.3.2 - /sst@2.29.2: + /sst@2.29.2(pg@8.11.3): resolution: {integrity: sha512-Dx3ZXVSe++CiyComcD5InGija6cBqi8asr4hsGxEbmUos1tJbdHFQLoDs0cjdpY2syP2JInQ8/whCgAjRrtiEA==} hasBin: true peerDependencies: @@ -6753,8 +7805,8 @@ packages: '@aws-sdk/client-iam': 3.429.0 '@aws-sdk/client-iot': 3.429.0 '@aws-sdk/client-iot-data-plane': 3.429.0 - '@aws-sdk/client-lambda': 3.429.0 - '@aws-sdk/client-rds-data': 3.429.0 + '@aws-sdk/client-lambda': 3.438.0 + '@aws-sdk/client-rds-data': 3.438.0 '@aws-sdk/client-s3': 3.429.0 '@aws-sdk/client-ssm': 3.429.0 '@aws-sdk/client-sts': 3.429.0 @@ -6795,8 +7847,8 @@ packages: ink: 4.4.1(react@18.2.0) ink-spinner: 5.0.0(ink@4.4.1)(react@18.2.0) kysely: 0.25.0 - kysely-codegen: 0.10.1(kysely@0.25.0) - kysely-data-api: 0.2.1(@aws-sdk/client-rds-data@3.429.0)(kysely@0.25.0) + kysely-codegen: 0.10.1(kysely@0.25.0)(pg@8.11.3) + kysely-data-api: 0.2.1(@aws-sdk/client-rds-data@3.438.0)(kysely@0.25.0) minimatch: 6.2.0 openid-client: 5.6.1 ora: 6.3.1 @@ -7011,6 +8063,13 @@ packages: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true + /timers-ext@0.1.7: + resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} + dependencies: + es5-ext: 0.10.62 + next-tick: 1.1.0 + dev: true + /tinybench@2.5.1: resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} dev: true @@ -7087,6 +8146,17 @@ packages: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} + /tsx@3.14.0: + resolution: {integrity: sha512-xHtFaKtHxM9LOklMmJdI3BEnQq/D5F73Of2E1GDrITi9sgoVkvIsrQUTY1G8FlmGtA+awCI4EBlTRRYxkL2sRg==} + hasBin: true + dependencies: + esbuild: 0.18.20 + get-tsconfig: 4.7.2 + source-map-support: 0.5.21 + optionalDependencies: + fsevents: 2.3.3 + dev: true + /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -7129,6 +8199,14 @@ packages: media-typer: 0.3.0 mime-types: 2.1.35 + /type@1.2.0: + resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} + dev: true + + /type@2.7.2: + resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} + dev: true + /typed-array-buffer@1.0.0: resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} engines: {node: '>= 0.4'} @@ -7589,6 +8667,10 @@ packages: dependencies: string-width: 5.1.2 + /wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + dev: true + /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} diff --git a/scripts/migrateCi.ts b/scripts/migrateCi.ts new file mode 100644 index 0000000..3e51f16 --- /dev/null +++ b/scripts/migrateCi.ts @@ -0,0 +1,21 @@ +import { InvokeCommand, LambdaClient } from "@aws-sdk/client-lambda"; + +const client = new LambdaClient({ region: "eu-central-1" }); + +const res = await client.send( + new InvokeCommand({ + FunctionName: process.argv[2], + Payload: JSON.stringify({}), + }), +); + +const payload = res.Payload + ? Buffer.from(res.Payload?.buffer).toString() + : undefined; + +const payloadJson = JSON.parse(payload || ""); + +if (payloadJson.statusCode !== 200) { + console.error(payloadJson); + process.exit(1); +} diff --git a/scripts/migrateLocal.ts b/scripts/migrateLocal.ts new file mode 100644 index 0000000..9a020f1 --- /dev/null +++ b/scripts/migrateLocal.ts @@ -0,0 +1,20 @@ +import dotenv from "dotenv"; + +import { dbFactory } from "@/db/dbFactory"; + +dotenv.config({ + path: ".env.local", +}); + +const [, migrate] = dbFactory("node", { + node: { + connectionString: process.env.DB_URL ?? "", + }, + aws: { + database: "", + secretArn: "", + resourceArn: "", + }, +}); + +await migrate(); diff --git a/sst.config.ts b/sst.config.ts index a5c8558..91b53c6 100644 --- a/sst.config.ts +++ b/sst.config.ts @@ -2,6 +2,7 @@ import type { SSTConfig } from "sst"; import { ConfigStack } from "./stacks/ConfigStack"; import { MyStack } from "./stacks/MyStack"; +import { StorageStack } from "./stacks/StorageStack"; export default { config() { @@ -11,6 +12,6 @@ export default { }; }, stacks(app) { - app.stack(ConfigStack).stack(MyStack); + app.stack(ConfigStack).stack(StorageStack).stack(MyStack); }, } satisfies SSTConfig; diff --git a/stacks/MyStack.ts b/stacks/MyStack.ts index c19b1d6..4469227 100644 --- a/stacks/MyStack.ts +++ b/stacks/MyStack.ts @@ -1,12 +1,16 @@ import type { StackContext } from "sst/constructs"; -import { Api, EventBus, Queue, use } from "sst/constructs"; +import { Api, EventBus, Function, Queue, use } from "sst/constructs"; import { eventTypes } from "@/events"; import { ConfigStack } from "./ConfigStack"; +import { StorageStack } from "./StorageStack"; export function MyStack({ stack }: StackContext) { const secrets = use(ConfigStack); + const { db } = use(StorageStack); + + const bind = [...secrets, ...(db ? [db] : [])]; const eventBus = new EventBus(stack, "Bus", {}); @@ -25,8 +29,10 @@ export function MyStack({ stack }: StackContext) { permissions: [eventBus], environment: { EVENT_BUS_NAME: eventBus.eventBusName, + DB_URL: process.env.DB_URL || "", }, - bind: secrets, + bind, + runtime: "nodejs18.x", }, }, }), @@ -40,10 +46,12 @@ export function MyStack({ stack }: StackContext) { const api = new Api(stack, "Api", { defaults: { function: { - bind: secrets, + bind, environment: { EVENT_BUS_NAME: eventBus.eventBusName, + DB_URL: process.env.DB_URL || "", }, + runtime: "nodejs18.x", }, }, routes: { @@ -54,7 +62,24 @@ export function MyStack({ stack }: StackContext) { api.attachPermissions([eventBus]); + const migrationFn = new Function(stack, "MigrateDb", { + handler: "packages/functions/lambdas/migrateDb.handler", + bind, + functionName: "MigrateDb", + environment: { + DB_URL: process.env.DB_URL || "", + }, + copyFiles: [ + { + from: "packages/core/db/migrations", + }, + ], + timeout: "60 seconds", + runtime: "nodejs18.x", + }); + stack.addOutputs({ ApiEndpoint: api.url, + MigrationFunctionName: migrationFn.functionName, }); } diff --git a/stacks/StorageStack.ts b/stacks/StorageStack.ts new file mode 100644 index 0000000..bd28322 --- /dev/null +++ b/stacks/StorageStack.ts @@ -0,0 +1,22 @@ +import { RDS, type StackContext } from "sst/constructs"; + +export function StorageStack({ stack }: StackContext) { + if (process.env.USE_LOCAL_DB) { + return {}; + } + + const db = new RDS(stack, "Database", { + defaultDatabaseName: "birthdayBotDb", + engine: "postgresql13.9", + }); + + stack.addOutputs({ + RDS_CLUSTER_ARN: db.clusterArn, + RDS_SECRET_ARN: db.secretArn, + RDS_DATABASE: db.defaultDatabaseName, + }); + + return { + db, + }; +} diff --git a/tests/env.d.ts b/tests/env.d.ts index c73ec3a..300cd17 100644 --- a/tests/env.d.ts +++ b/tests/env.d.ts @@ -9,6 +9,11 @@ interface ImportMetaEnv { readonly VITE_CORE_SLACK_CHANNEL_ID: string; readonly VITE_SLACK_BOT_USER_ID: string; readonly VITE_SLACK_DM_ID: string; + readonly VITE_CI: string | undefined; + readonly VITE_DB_NAME: string | undefined; + readonly VITE_DB_SECRET_ARN: string | undefined; + readonly VITE_DB_CLUSTER_ARN: string | undefined; + readonly VITE_DB_URL: string | undefined; } interface ImportMeta { diff --git a/tests/utils/testDb.ts b/tests/utils/testDb.ts new file mode 100644 index 0000000..7df9867 --- /dev/null +++ b/tests/utils/testDb.ts @@ -0,0 +1,12 @@ +import { dbFactory } from "@/db/dbFactory"; + +export const [testDb] = dbFactory(import.meta.env.VITE_CI ? "aws" : "node", { + node: { + connectionString: import.meta.env.VITE_DB_URL!, + }, + aws: { + database: import.meta.env.VITE_DB_NAME!, + secretArn: import.meta.env.VITE_DB_SECRET_ARN!, + resourceArn: import.meta.env.VITE_DB_CLUSTER_ARN!, + }, +}); diff --git a/tsconfig.json b/tsconfig.json index a6b9d8b..af9bff8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,6 +6,7 @@ "moduleResolution": "node", "baseUrl": ".", "paths": { + "@/db/*": ["packages/core/db/*"], "@/events": ["packages/core/events/index.ts"], "@/functions/*": ["packages/functions/*"], "@/services/*": ["packages/core/services/*"], diff --git a/vite.config.ts b/vite.config.ts index 0bb383b..30d9fa8 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -7,6 +7,7 @@ export default defineConfig({ }, resolve: { alias: { + "@/db": path.resolve(__dirname, "packages/core/db"), "@/events": path.resolve(__dirname, "packages/core/events"), "@/functions": path.resolve(__dirname, "packages/functions"), "@/services": path.resolve(__dirname, "packages/core/services"), From 675976c8627e5ac4115d611e4d67ced50d774711 Mon Sep 17 00:00:00 2001 From: Balint Dolla Date: Tue, 31 Oct 2023 13:57:44 +0100 Subject: [PATCH 2/3] fix: make migration function unique + add staging migration --- .github/workflows/staging.yaml | 9 +++++++++ stacks/MyStack.ts | 1 - 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/staging.yaml b/.github/workflows/staging.yaml index 05cd492..ec11eb5 100644 --- a/.github/workflows/staging.yaml +++ b/.github/workflows/staging.yaml @@ -58,3 +58,12 @@ jobs: - name: Deploy stack run: pnpm run deploy --stage "${{ env.stage }}" + + - name: Extract stack outputs + id: sst-output + run: | + MIGRATION_FUNCTION=$(jq -r '.["${{env.STAGE}}-birthday-slack-bot-MyStack"].MigrationFunctionName' .sst/outputs.json) + echo "migrationFunction=$MIGRATION_FUNCTION" >> "$GITHUB_OUTPUT" + + - name: Migration + run: pnpm migration:ci ${{ steps.sst-output.outputs.migrationFunction }} diff --git a/stacks/MyStack.ts b/stacks/MyStack.ts index 4469227..d020948 100644 --- a/stacks/MyStack.ts +++ b/stacks/MyStack.ts @@ -65,7 +65,6 @@ export function MyStack({ stack }: StackContext) { const migrationFn = new Function(stack, "MigrateDb", { handler: "packages/functions/lambdas/migrateDb.handler", bind, - functionName: "MigrateDb", environment: { DB_URL: process.env.DB_URL || "", }, From 7c1911dab68f0dd57fb9afe46977ec2b1b3d83a0 Mon Sep 17 00:00:00 2001 From: Balint Dolla Date: Tue, 31 Oct 2023 16:25:45 +0100 Subject: [PATCH 3/3] chore: refactor db factory --- packages/core/db/dbFactory.ts | 33 ++++++++++++++++----------------- packages/core/db/index.ts | 28 +++++++++++++--------------- scripts/migrateLocal.ts | 12 +++--------- tests/utils/testDb.ts | 23 +++++++++++++---------- 4 files changed, 45 insertions(+), 51 deletions(-) diff --git a/packages/core/db/dbFactory.ts b/packages/core/db/dbFactory.ts index 531f6b3..2971f04 100644 --- a/packages/core/db/dbFactory.ts +++ b/packages/core/db/dbFactory.ts @@ -7,23 +7,22 @@ import pg from "pg"; const migrationsFolder = "./packages/core/db/migrations"; -type DbType = "node" | "aws"; - -type FactoryPayload = { - node: { - connectionString: string; - }; - aws: { - database: string; - secretArn: string; - resourceArn: string; - }; -}; - -export const dbFactory = (type: DbType, payload: FactoryPayload) => { - if (type === "node") { +type FactoryPayload = + | { + type: "node"; + connectionString: string; + } + | { + type: "aws"; + database: string; + secretArn: string; + resourceArn: string; + }; + +export const dbFactory = (payload: FactoryPayload) => { + if (payload.type === "node") { const pool = new pg.Pool({ - ...payload.node, + ...payload, }); const db = drizzleNode(pool); @@ -39,7 +38,7 @@ export const dbFactory = (type: DbType, payload: FactoryPayload) => { } const db = drizzleRds(new RDSDataClient({}), { - ...payload.aws, + ...payload, }); return [ diff --git a/packages/core/db/index.ts b/packages/core/db/index.ts index 7be71f1..0fbcec6 100644 --- a/packages/core/db/index.ts +++ b/packages/core/db/index.ts @@ -5,19 +5,17 @@ import { dbFactory } from "./dbFactory"; export const [db, migrate] = dbFactory( process.env.IS_LOCAL || process.env.NODE_ENV === "development" - ? "node" - : "aws", - { - node: { - connectionString: process.env.DB_URL ?? "", - }, - aws: { - //@ts-ignore - database: RDS.Database.defaultDatabaseName, - //@ts-ignore - secretArn: RDS.Database.secretArn, - //@ts-ignore - resourceArn: RDS.Database.clusterArn, - }, - }, + ? { + type: "node", + connectionString: process.env.DB_URL ?? "", + } + : { + type: "aws", + //@ts-ignore + database: RDS.Database.defaultDatabaseName, + //@ts-ignore + secretArn: RDS.Database.secretArn, + //@ts-ignore + resourceArn: RDS.Database.clusterArn, + }, ); diff --git a/scripts/migrateLocal.ts b/scripts/migrateLocal.ts index 9a020f1..17dd934 100644 --- a/scripts/migrateLocal.ts +++ b/scripts/migrateLocal.ts @@ -6,15 +6,9 @@ dotenv.config({ path: ".env.local", }); -const [, migrate] = dbFactory("node", { - node: { - connectionString: process.env.DB_URL ?? "", - }, - aws: { - database: "", - secretArn: "", - resourceArn: "", - }, +const [, migrate] = dbFactory({ + type: "node", + connectionString: process.env.DB_URL ?? "", }); await migrate(); diff --git a/tests/utils/testDb.ts b/tests/utils/testDb.ts index 7df9867..9e94e01 100644 --- a/tests/utils/testDb.ts +++ b/tests/utils/testDb.ts @@ -1,12 +1,15 @@ import { dbFactory } from "@/db/dbFactory"; -export const [testDb] = dbFactory(import.meta.env.VITE_CI ? "aws" : "node", { - node: { - connectionString: import.meta.env.VITE_DB_URL!, - }, - aws: { - database: import.meta.env.VITE_DB_NAME!, - secretArn: import.meta.env.VITE_DB_SECRET_ARN!, - resourceArn: import.meta.env.VITE_DB_CLUSTER_ARN!, - }, -}); +export const [testDb] = dbFactory( + import.meta.env.VITE_CI + ? { + type: "aws", + database: import.meta.env.VITE_DB_NAME!, + secretArn: import.meta.env.VITE_DB_SECRET_ARN!, + resourceArn: import.meta.env.VITE_DB_CLUSTER_ARN!, + } + : { + type: "node", + connectionString: import.meta.env.VITE_DB_URL!, + }, +);