From 39734d4133fd323d105ccac4a7c55a1b8bbb3f16 Mon Sep 17 00:00:00 2001 From: sdairs Date: Mon, 5 Oct 2026 09:41:02 +0100 Subject: [PATCH] Add typed GraphQL product collection workbench --- .github/workflows/product-graphql.yml | 23 + applications/product-graphql/.env.example | 5 + applications/product-graphql/.gitignore | 7 + applications/product-graphql/README.md | 273 ++++++ applications/product-graphql/bun.lock | 839 ++++++++++++++++++ applications/product-graphql/codegen.ts | 13 + .../product-graphql/docs/product-graphql.png | Bin 0 -> 228764 bytes applications/product-graphql/index.html | 1 + applications/product-graphql/package.json | 38 + .../product-graphql/playwright.config.ts | 10 + applications/product-graphql/schema.graphql | 42 + .../product-graphql/scripts/schema.ts | 3 + .../product-graphql/sql/001_roles.sql | 10 + .../product-graphql/sql/002_schema.sql | 12 + applications/product-graphql/sql/003_seed.sql | 106 +++ .../product-graphql/src/client/env.d.ts | 1 + .../product-graphql/src/client/gql/gql.ts | 46 + .../product-graphql/src/client/gql/graphql.ts | 55 ++ .../product-graphql/src/client/gql/index.ts | 2 + .../product-graphql/src/client/main.tsx | 394 ++++++++ .../src/client/operations.graphql | 90 ++ .../product-graphql/src/client/style.css | 356 ++++++++ .../product-graphql/src/server/collections.ts | 108 +++ .../product-graphql/src/server/context.ts | 19 + .../product-graphql/src/server/database.ts | 89 ++ .../product-graphql/src/server/graphql.ts | 140 +++ .../product-graphql/src/server/index.ts | 38 + .../product-graphql/src/server/tables.ts | 48 + .../product-graphql/src/server/validation.ts | 39 + .../tests/browser/studio.spec.ts | 60 ++ .../product-graphql/tests/database.test.ts | 200 +++++ .../product-graphql/tests/validation.test.ts | 15 + applications/product-graphql/tsconfig.json | 21 + applications/product-graphql/vite.config.ts | 3 + 34 files changed, 3106 insertions(+) create mode 100644 .github/workflows/product-graphql.yml create mode 100644 applications/product-graphql/.env.example create mode 100644 applications/product-graphql/.gitignore create mode 100644 applications/product-graphql/README.md create mode 100644 applications/product-graphql/bun.lock create mode 100644 applications/product-graphql/codegen.ts create mode 100644 applications/product-graphql/docs/product-graphql.png create mode 100644 applications/product-graphql/index.html create mode 100644 applications/product-graphql/package.json create mode 100644 applications/product-graphql/playwright.config.ts create mode 100644 applications/product-graphql/schema.graphql create mode 100644 applications/product-graphql/scripts/schema.ts create mode 100644 applications/product-graphql/sql/001_roles.sql create mode 100644 applications/product-graphql/sql/002_schema.sql create mode 100644 applications/product-graphql/sql/003_seed.sql create mode 100644 applications/product-graphql/src/client/env.d.ts create mode 100644 applications/product-graphql/src/client/gql/gql.ts create mode 100644 applications/product-graphql/src/client/gql/graphql.ts create mode 100644 applications/product-graphql/src/client/gql/index.ts create mode 100644 applications/product-graphql/src/client/main.tsx create mode 100644 applications/product-graphql/src/client/operations.graphql create mode 100644 applications/product-graphql/src/client/style.css create mode 100644 applications/product-graphql/src/server/collections.ts create mode 100644 applications/product-graphql/src/server/context.ts create mode 100644 applications/product-graphql/src/server/database.ts create mode 100644 applications/product-graphql/src/server/graphql.ts create mode 100644 applications/product-graphql/src/server/index.ts create mode 100644 applications/product-graphql/src/server/tables.ts create mode 100644 applications/product-graphql/src/server/validation.ts create mode 100644 applications/product-graphql/tests/browser/studio.spec.ts create mode 100644 applications/product-graphql/tests/database.test.ts create mode 100644 applications/product-graphql/tests/validation.test.ts create mode 100644 applications/product-graphql/tsconfig.json create mode 100644 applications/product-graphql/vite.config.ts diff --git a/.github/workflows/product-graphql.yml b/.github/workflows/product-graphql.yml new file mode 100644 index 00000000..e4033bab --- /dev/null +++ b/.github/workflows/product-graphql.yml @@ -0,0 +1,23 @@ +name: Product GraphQL +on: + pull_request: + paths: ['applications/product-graphql/**', '.github/workflows/product-graphql.yml'] + push: + paths: ['applications/product-graphql/**', '.github/workflows/product-graphql.yml'] +jobs: + build: + runs-on: ubuntu-latest + defaults: + run: + working-directory: applications/product-graphql + steps: + - uses: actions/checkout@v4 + - uses: oven-sh/setup-bun@v2 + with: + bun-version: '1.4.2' + - run: bun install --frozen-lockfile --ignore-scripts + - run: bun run codegen + - run: git diff --exit-code -- schema.graphql src/client/gql + - run: bun run typecheck + - run: bun run test + - run: bun run build diff --git a/applications/product-graphql/.env.example b/applications/product-graphql/.env.example new file mode 100644 index 00000000..83b62fd9 --- /dev/null +++ b/applications/product-graphql/.env.example @@ -0,0 +1,5 @@ +DATABASE_URL=postgres://catalog_app:YOUR_PASSWORD@YOUR_HOST:5432/postgres +PG_CA_CERT_PATH=.deployment/postgres-ca.pem +APP_ORIGIN=http://127.0.0.1:3001 +PORT=3001 +# DATABASE_LOCAL=true is only for loopback local Postgres. diff --git a/applications/product-graphql/.gitignore b/applications/product-graphql/.gitignore new file mode 100644 index 00000000..b8df62e7 --- /dev/null +++ b/applications/product-graphql/.gitignore @@ -0,0 +1,7 @@ +.env +.deployment/ +node_modules/ +dist/ +test-results/ +playwright-report/ +.clickhouse/ diff --git a/applications/product-graphql/README.md b/applications/product-graphql/README.md new file mode 100644 index 00000000..8aa80eef --- /dev/null +++ b/applications/product-graphql/README.md @@ -0,0 +1,273 @@ +# Collection studio: typed GraphQL and Postgres + +Explore a small design catalogue, inspect variants, and curate an ordered +collection. Save a new collection from your draft, move products up, remove items, +and save again. A stale tab receives a conflict and keeps its draft until reload. + +![Collection studio](docs/product-graphql.png) + +This is a trusted local demo with synthetic products, no accounts or payments. +It binds to loopback and checks Host and write Origin. + +## How the pieces fit + +Pothos constructs Product, Variant and Collection types from typed Drizzle rows +and explicit resolvers. GraphQL Yoga serves the schema through Bun’s Fetch API. +Drizzle queries Postgres and commits collection revisions and item replacements +atomically. A request-scoped DataLoader batches variant lookups. GraphQL Code +Generator emits real typed operation documents from the printed Pothos schema; +urql runs those queries and mutations in React. + +The catalogue has 24 seeded products and three variants each. Pagination accepts +`first` 1–20 and `offset` 0–10,000; the UI shows twelve products per page. +Collections contain at most twelve distinct products with unique ordered +positions 0–11. The switcher lists the first twenty collections by title. This +small local workbench does not expose a public arbitrary-query API. + +Stable Drizzle uses explicit resolvers, avoiding the Pothos Drizzle plugin’s +release-candidate relational API requirement. + +## Get the source and tools + +Run application dependencies inside Linux. On macOS, an isolated +[OrbStack machine](https://docs.orbstack.dev/machines/isolated) keeps dependencies +off the host: + +```sh +orbctl create ubuntu:noble catalog-dev --isolated --arch arm64 --memory 4G --cpus 2 +orbctl run -m catalog-dev -w /home/$USER bash +``` + +Inside Linux: + +```sh +sudo apt-get update +sudo apt-get install -y ca-certificates curl git unzip jq openssl postgresql-client docker.io +sudo systemctl start docker +sudo usermod -aG docker "$USER" +# Reopen your Linux shell so the Docker group applies. +curl -fsSL https://bun.sh/install -o /tmp/bun-install.sh +bash /tmp/bun-install.sh bun-v1.4.2 +export PATH="$HOME/.bun/bin:$HOME/.local/bin:$PATH" +curl -fsSL https://clickhouse.com/cli | sh +git clone https://github.com/ClickHouse/examples.git +cd examples/applications/product-graphql +bun install --frozen-lockfile --ignore-scripts +``` + +The checked-in lockfile pins the library versions. Bun must report `1.4.2`. +No third-party application service is required. Cloud lifecycle commands may +instead run with an existing host `clickhousectl`; copy only the database CA and +step-specific credentials into the VM, keeping Cloud API keys on the host. + +## Choose a database + +### Local Postgres with clickhousectl + +```sh +umask 077 +mkdir -p .deployment +clickhousectl local postgres start --name catalog --version 18 --json \ + > .deployment/local-create.json +export PGHOST=127.0.0.1 +export PGPORT="$(jq -er '.port' .deployment/local-create.json)" +export PGDATABASE="$(jq -er '.database' .deployment/local-create.json)" +export PGADMIN="$(jq -er '.user' .deployment/local-create.json)" +export PGPASSWORD="$(jq -er '.password' .deployment/local-create.json)" +export PGSSLMODE=disable +``` + +Use the actual returned port. This receipt contains a password and belongs in +the ignored private directory. + +### ClickHouse Managed Postgres with clickhousectl + +Create an Admin API key following the +[Cloud API guide](https://clickhouse.com/docs/cloud/manage/openapi), then enter +it interactively: + +```sh +clickhousectl cloud auth login --interactive +clickhousectl cloud auth status +clickhousectl cloud org list +umask 077 +mkdir -p .deployment +``` + +Create `.deployment/resources.env` in an editor with your organization, an +available AWS region and Postgres size: + +```dotenv +CH_ORG_ID=YOUR_ORGANIZATION_UUID +CLOUD_REGION=YOUR_AVAILABLE_REGION +PG_SIZE=YOUR_AVAILABLE_SIZE +``` + +One non-HA Postgres 18 service is enough for this example. Review +[pricing](https://clickhouse.com/pricing) before creating it. Compute, storage, +backups and network usage can incur charges; stopping the application or VM +does not stop the managed service's billing. + +```sh +source .deployment/resources.env +clickhousectl cloud postgres create --org-id "$CH_ORG_ID" \ + --name product-graphql-example --provider aws --region "$CLOUD_REGION" \ + --size "$PG_SIZE" --pg-version 18 --ha-type none \ + --tag project=product-graphql --json > .deployment/postgres-create.json +PG_SERVICE_ID="$(jq -er '.id' .deployment/postgres-create.json)" +``` + +Save the service ID in `.deployment/resources.env`. Preserve the create receipt: +its initial password is returned once. If creation is interrupted, inspect +`clickhousectl cloud postgres list --org-id "$CH_ORG_ID" --json` before retrying. + +Repeat inspection until `state` is `running`: + +```sh +clickhousectl cloud postgres get "$PG_SERVICE_ID" --org-id "$CH_ORG_ID" --json \ + > .deployment/postgres-status.json +jq '{id,state,hostname,username,postgresVersion,size}' .deployment/postgres-status.json +clickhousectl cloud postgres certs get "$PG_SERVICE_ID" --org-id "$CH_ORG_ID" \ + --output .deployment/postgres-ca.pem +``` + +Use the service's actual direct hostname, port, database and administrator. +For a direct service connection, use port 5432 and database `postgres`; check the service response for the actual connection details: + +```sh +export PGHOST="$(jq -er '.hostname' .deployment/postgres-status.json)" +export PGPORT=5432 PGDATABASE=postgres +export PGADMIN="$(jq -er '.username' .deployment/postgres-status.json)" +export PGPASSWORD="$(jq -er '.password' .deployment/postgres-create.json)" +export PGSSLMODE=verify-full +export PGSSLROOTCERT="$PWD/.deployment/postgres-ca.pem" +``` + +## Apply roles, schema and seed + +Run once on your dedicated fresh database. Passwords are read by psql from +environment variables and do not become command arguments. + +```sh +cat > .deployment/passwords.env < .env <=18" }, "optionalPeers": ["@types/node"] }, "sha512-XkOardciF3tow2NUlY6/Qjk1QqYa+6WpmVLTpxXl97Uv4erczDEZ+xg1j6LqBf0ekcRSUiICQA4nQXHHkVKQ9w=="], + + "@inquirer/confirm": ["@inquirer/confirm@6.3.3", "", { "dependencies": { "@inquirer/core": "^12.0.4", "@inquirer/type": "4.2.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-ImOBgpl/sJTFp8naeSkNu4S0Sf8F8pxv3/CUx+LoBAdQvCVqFz6rSB2A/oZYsJge3+yphbEDxEkfaRNYq1OU0A=="], + + "@inquirer/core": ["@inquirer/core@12.0.4", "", { "dependencies": { "@inquirer/ansi": "^2.0.9", "@inquirer/figures": "^2.0.9", "@inquirer/type": "4.2.0", "cli-width": "^4.1.0", "fast-wrap-ansi": "^0.2.0", "mute-stream": "^3.0.0", "signal-exit": "^4.1.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-M5fB67y7jPObI45vhD82RskWwCSm0scOvenV/I6K8tIi2gfr9DXqQqJ+iw+Wi6SgapikdOiJibYzz1gW47fsDg=="], + + "@inquirer/editor": ["@inquirer/editor@5.3.4", "", { "dependencies": { "@inquirer/core": "^12.0.4", "@inquirer/external-editor": "^3.0.6", "@inquirer/type": "4.2.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-imzxQDfw26NpcJAubMj/dE5RjU9Mp80IcT+FzsD6YoxXmL8L1QYnAFdCNv7ccGWh//73+0YP+1kfhwnExdl2VQ=="], + + "@inquirer/expand": ["@inquirer/expand@5.1.6", "", { "dependencies": { "@inquirer/core": "^12.0.4", "@inquirer/type": "4.2.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-JfiLKi7qGuHmcQO/DqR10UFEp054Y1FXZaszP5ZEfHhgHeuFoT5nNFQIXFhed/5/p07SbsV2tIJFwG/dg5+NmQ=="], + + "@inquirer/external-editor": ["@inquirer/external-editor@3.0.6", "", { "dependencies": { "chardet": "^2.1.1", "iconv-lite": "^0.7.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-rWmw6WG8JZ7LMn/srXEylYGhL6EXXJeROE7/4x4GREh6NgzqJBDbIgpNGsYoLPfobeb4VZtEYzPGnT5EFNYhiQ=="], + + "@inquirer/figures": ["@inquirer/figures@2.0.9", "", {}, "sha512-EAWgUTGQ/Umgga51dE3B2PUHbufuXarDfg86uVgoSgNHNNQnyFKcOrQLWVqYMghuSyHh8+2HUH0Js9cTC1WAdg=="], + + "@inquirer/input": ["@inquirer/input@5.1.7", "", { "dependencies": { "@inquirer/core": "^12.0.4", "@inquirer/type": "4.2.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-Icrs9tuMBCxGI+lFYNO71VFOnqGO8IIrLIGqnTGh07X8jZ2la9QLAYxXcikHZQjjVhIZUtU2xyH89DVN/pPhVg=="], + + "@inquirer/number": ["@inquirer/number@4.2.4", "", { "dependencies": { "@inquirer/core": "^12.0.4", "@inquirer/type": "4.2.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-C6g80U4U2+w2Vxa1CB0MN3a2WnQIfzLSUG0lduO3Au9GsirJsKATZkOwZPK+vZ1BlAlz+/Z5ParfQCS9E0svmg=="], + + "@inquirer/password": ["@inquirer/password@5.2.3", "", { "dependencies": { "@inquirer/ansi": "^2.0.9", "@inquirer/core": "^12.0.4", "@inquirer/type": "4.2.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-1Uo2qfI2K3wXbfunMpvwAzoZPIUf5iEETwDGqRVbswoorXGqYQJ/bfIJFeLj+pxjq+e2UFPNOmx+fsIl4Urigw=="], + + "@inquirer/prompts": ["@inquirer/prompts@8.7.3", "", { "dependencies": { "@inquirer/checkbox": "^5.2.6", "@inquirer/confirm": "^6.3.3", "@inquirer/editor": "^5.3.4", "@inquirer/expand": "^5.1.6", "@inquirer/input": "^5.1.7", "@inquirer/number": "^4.2.4", "@inquirer/password": "^5.2.3", "@inquirer/rawlist": "^5.3.6", "@inquirer/search": "^4.3.4", "@inquirer/select": "^5.2.6" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-DHK20kO+H5k/XcJQpHQUpVQbMYHHhZchlGWhZVMUV4WIuRuBW5744hipOtriE1vMqPLgnIyXFMHWKkIbTepa4Q=="], + + "@inquirer/rawlist": ["@inquirer/rawlist@5.3.6", "", { "dependencies": { "@inquirer/core": "^12.0.4", "@inquirer/type": "4.2.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-2exExhQ5xTBqfN/rRlZkvM1Gm3b0eiLcWe2NqxWxe7qYmnU4M3j/n9TwzfPUb+Q7dAAz9TmBtDWWdF3jbp4ZLA=="], + + "@inquirer/search": ["@inquirer/search@4.3.4", "", { "dependencies": { "@inquirer/core": "^12.0.4", "@inquirer/figures": "^2.0.9", "@inquirer/type": "4.2.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-xsk0UeFP04jsbEeFMzghjUaH2aHXyt+WykSajQzq/8qyBNHsgGYHea/sFwv5T08kW7Sp+KDX8aF124zPUIs1Ww=="], + + "@inquirer/select": ["@inquirer/select@5.2.6", "", { "dependencies": { "@inquirer/ansi": "^2.0.9", "@inquirer/core": "^12.0.4", "@inquirer/figures": "^2.0.9", "@inquirer/type": "4.2.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-jFu7CFghlr0vpi/326a4wz6BGkJH9X3H/iIu+ahyV2Ja52ktqQE3fC9BYP47JKeSPQYGUv5xquE2Vp9PbepZ3g=="], + + "@inquirer/type": ["@inquirer/type@4.2.0", "", { "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-2rnHX8RPo4glJYqnFc/v3nQeIhDcjyRRyaT7MGcfL/8xv/8K03SXYoA2tX06WVSKywWOE/ncbG3dtuzLjR5TCQ=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.6.0", "", {}, "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + + "@oxc-project/types": ["@oxc-project/types@0.152.0", "", {}, "sha512-oM/5rLBm2tPkg0iBgkH/FOeR3PCDpY19GTgAZjMFM8h9WI9VW7cLgzp6nwtarYKmovavIQZ+Fe/RKX/8C8O/Rw=="], + + "@playwright/test": ["@playwright/test@1.63.0", "", { "dependencies": { "playwright": "1.63.0" }, "bin": { "playwright": "cli.js" } }, "sha512-oxMK4vllB9RK5NQ2l1pq1IfOf2AvnEuj/vYGDj0H2nMtmtZpKtCwt/l00GEO6xjGfpBNAvjovvYdCm50dRQkpQ=="], + + "@pothos/core": ["@pothos/core@4.15.1", "", { "peerDependencies": { "graphql": "^16.10.0 || ^17.0.0" } }, "sha512-G0riOIbF6zer2SU7V1MmivkSdoKk+gYRf+Ru8JVcy3p9GhyJ8OzQj92RgCfCpEvkTgl6EdH8VueLe1Lm7lY4aA=="], + + "@repeaterjs/repeater": ["@repeaterjs/repeater@3.1.0", "", {}, "sha512-TaoVksZRSx2KWYYpyLQtMQXXeS98VsgZImzW65xmiVgbYhXLk+aEsmzPLirqVuE4/XuUapH2iMtxUzaBNDzdSQ=="], + + "@rolldown/binding-android-arm-eabi": ["@rolldown/binding-android-arm-eabi@1.2.12", "", { "os": "android", "cpu": "arm" }, "sha512-dB/a1214qKfHMXCpgqR4OZT+jS4kTyEXbQGJPqzobt5EwH5rX080pxE37alt3RzvR1bf1Yz/yGqRfrYAxuPw0A=="], + + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.2.12", "", { "os": "android", "cpu": "arm64" }, "sha512-7KHFgQ5VJxIHcLlrwrc3Xbds7oTNQT7Pgi9gQCJKrd2VGab/UksIOYp6VD8MzCstGxOKMgNamPwUCfxPdP1OHg=="], + + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.2.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-3YIhqHD96nA5SaYNRBR16HnGv4oavZvXfD/ayHM+oYZ0WD/8lBAtf6zQua4kEyAvpqrluKXl0lnOBoiNby7x9w=="], + + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.2.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-UuuJ35MFw4gmFOrE9pEqIV+K3syIKveph+Qc1/ljHZVdoDW4pz/JHR/eMVom+TZGl/5OOvGJOWaOCVt3ZfqhxA=="], + + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.2.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-uMvssit0a4W+/7D8CbHUvG719mH3R2jwXAlh/XcPvuHTE0g++LymF88DCGNX0HM2rBOn0xrzgXktIB6fLSJBTQ=="], + + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.2.12", "", { "os": "linux", "cpu": "arm" }, "sha512-XcFu0R0xWnwzSf4IQgFH1rJIckPN1pLy2R+4r9IDB7Yfu/ys9cVqfa4pBrMHj7a3gl8mIR4nRNPg0e5IvEVs6g=="], + + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.2.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-260UrKgn8tz39ak+SMDOirKzr7V04M9dWPw5llW00SwBivCZoWcRBKV1d8cXnRkUmSZA3BdiUmBHWk7734Ulpw=="], + + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.2.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-5YK1I9SqDkbPgc1IA8BgDl34suqUS2q0KWnBrirm0E51YjOs6eo6dV6jbQfNE/argHRSvd0QUGgtpIoYx+WWpw=="], + + "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.2.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-Rkcrmp7eFRg74yL5fXEU91JEWbdEPLevWwGtXpmhbjlD1StScbWTmO94Bhly+Mo+ketKYkdmM1vNUKeWSlx8cQ=="], + + "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.2.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-qvK4DuAsQc2BSjlx+Xr+IzOIvvxbGZqxFwdWfG6F518Erj0GGISyQbJ6pIappnOxlNPzNHvo/L0BwB30GZ+zVw=="], + + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.2.12", "", { "os": "linux", "cpu": "x64" }, "sha512-Q9uLBO53Xd4QIq1WOycVQyPP1O4HhraEV2qqb3uTrnVw6QZih9duY4vNXOivL1xoUS1/z+W8eF4NMfl2a8Sdjw=="], + + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.2.12", "", { "os": "linux", "cpu": "x64" }, "sha512-3IBxWFMjbOZskDPKv8Lf9BCnahlKuHthWkYnyIxOH/QcJrFcS4EmcenthApkwr/5+nEqZlLzeYbxeMaX7A5u4g=="], + + "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.2.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xtX61xg4LKPkPWilZU1ynKClz5Gj4bf74LML4r3eVLWumKnGjoEr1OSHQhMdbBDoYTi+yjrujvpZe2pUnqCrrA=="], + + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.2.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-At7fPB6PCaIjzgIhEZFxuT+BBFqiQibJDT4d3PhiR3f4E7bbMZF4aKblbFfEM3sETRDd1YiQx/+U/g/B/ou5Ew=="], + + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.2.12", "", { "os": "win32", "cpu": "x64" }, "sha512-WIw2haVKwjuYdXkHaoC0mF8Le71TuCBxjrdKqLbJGctbBABj+ClfmNvtbOnzpq3RokNo5+V1qhtSzJyXorsklQ=="], + + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="], + + "@types/bun": ["@types/bun@1.4.2", "", { "dependencies": { "bun-types": "1.4.2" } }, "sha512-GimotNn7+ZV0uVArItBbriZsR1oNf0+WTzPkdcFrzShI7k2norL0uzEaJT8T33dWr7O/c9ZDuAFQrctKCi72oQ=="], + + "@types/node": ["@types/node@26.6.4", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg=="], + + "@types/pg": ["@types/pg@8.23.1", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-fKVHpikPdg4GKks3JuLEhvwSyvwzF23hnabPy6DD8ljVbC7+6J5dQzdv4arV6jqq57djnMgs1HKBxX4P8aBI3A=="], + + "@types/react": ["@types/react@19.3.0", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg=="], + + "@types/react-dom": ["@types/react-dom@19.3.0", "", { "peerDependencies": { "@types/react": "^19.3.0" } }, "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q=="], + + "@types/ws": ["@types/ws@8.18.2", "", { "dependencies": { "@types/node": "*" } }, "sha512-67MQl+fpWKVTT1NYdnmo3U4sc/xPo/zQBncVnI74qmQa0z/b+1g6iYqNmGCPbxO+zz2aklb08a0oHfegiVd0/w=="], + + "@typescript/typescript-aix-ppc64": ["@typescript/typescript-aix-ppc64@7.0.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ=="], + + "@typescript/typescript-darwin-arm64": ["@typescript/typescript-darwin-arm64@7.0.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA=="], + + "@typescript/typescript-darwin-x64": ["@typescript/typescript-darwin-x64@7.0.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA=="], + + "@typescript/typescript-freebsd-arm64": ["@typescript/typescript-freebsd-arm64@7.0.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ=="], + + "@typescript/typescript-freebsd-x64": ["@typescript/typescript-freebsd-x64@7.0.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw=="], + + "@typescript/typescript-linux-arm": ["@typescript/typescript-linux-arm@7.0.2", "", { "os": "linux", "cpu": "arm" }, "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ=="], + + "@typescript/typescript-linux-arm64": ["@typescript/typescript-linux-arm64@7.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ=="], + + "@typescript/typescript-linux-loong64": ["@typescript/typescript-linux-loong64@7.0.2", "", { "os": "linux", "cpu": "none" }, "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ=="], + + "@typescript/typescript-linux-mips64el": ["@typescript/typescript-linux-mips64el@7.0.2", "", { "os": "linux", "cpu": "none" }, "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA=="], + + "@typescript/typescript-linux-ppc64": ["@typescript/typescript-linux-ppc64@7.0.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA=="], + + "@typescript/typescript-linux-riscv64": ["@typescript/typescript-linux-riscv64@7.0.2", "", { "os": "linux", "cpu": "none" }, "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ=="], + + "@typescript/typescript-linux-s390x": ["@typescript/typescript-linux-s390x@7.0.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw=="], + + "@typescript/typescript-linux-x64": ["@typescript/typescript-linux-x64@7.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A=="], + + "@typescript/typescript-netbsd-arm64": ["@typescript/typescript-netbsd-arm64@7.0.2", "", { "os": "none", "cpu": "arm64" }, "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA=="], + + "@typescript/typescript-netbsd-x64": ["@typescript/typescript-netbsd-x64@7.0.2", "", { "os": "none", "cpu": "x64" }, "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA=="], + + "@typescript/typescript-openbsd-arm64": ["@typescript/typescript-openbsd-arm64@7.0.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ=="], + + "@typescript/typescript-openbsd-x64": ["@typescript/typescript-openbsd-x64@7.0.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg=="], + + "@typescript/typescript-sunos-x64": ["@typescript/typescript-sunos-x64@7.0.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g=="], + + "@typescript/typescript-win32-arm64": ["@typescript/typescript-win32-arm64@7.0.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ=="], + + "@typescript/typescript-win32-x64": ["@typescript/typescript-win32-x64@7.0.2", "", { "os": "win32", "cpu": "x64" }, "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g=="], + + "@urql/core": ["@urql/core@6.0.3", "", { "dependencies": { "@0no-co/graphql.web": "^1.0.13", "wonka": "^6.3.2" } }, "sha512-0F39XWR21+IVLJfsqBvLShvoSzxT6h6wWXwrDhN8j9J+IEVOpQIUNHwpgjsp+2ePzn9aCH+rpDonn3HOAUnn9A=="], + + "@vitejs/plugin-react": ["@vitejs/plugin-react@6.1.1", "", { "dependencies": { "@rolldown/pluginutils": "^1.0.1" }, "peerDependencies": { "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", "babel-plugin-react-compiler": "^1.0.0", "oxc-transform-react": "^0.145.0", "vite": "^8.0.0" }, "optionalPeers": ["@rolldown/plugin-babel", "babel-plugin-react-compiler", "oxc-transform-react"] }, "sha512-yxLaQV9gkhS8ezJqCM6+ndU7mDY6gqAg75NQ+0IjwEI8IYOmQCgkRwHKVSfWXW076DsqMo0Dk+0FK1U+M5RgFw=="], + + "@whatwg-node/disposablestack": ["@whatwg-node/disposablestack@0.1.0", "", { "dependencies": { "@whatwg-node/promise-helpers": "^2.0.0", "tslib": "^2.6.3" } }, "sha512-ok0A9+D+mdeb3w1GNCpVr+2gVVLRWKo9Ywm/whNsoWSNfNg3jNxS0/wUF6NSUYbfOtFGu2wZgJnLjasbaQEfvA=="], + + "@whatwg-node/events": ["@whatwg-node/events@0.1.2", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-ApcWxkrs1WmEMS2CaLLFUEem/49erT3sxIVjpzU5f6zmVcnijtDSrhoK2zVobOIikZJdH63jdAXOrvjf6eOUNQ=="], + + "@whatwg-node/fetch": ["@whatwg-node/fetch@0.10.13", "", { "dependencies": { "@whatwg-node/node-fetch": "^0.8.3", "urlpattern-polyfill": "^10.0.0" } }, "sha512-b4PhJ+zYj4357zwk4TTuF2nEe0vVtOrwdsrNo5hL+u1ojXNhh1FgJ6pg1jzDlwlT4oBdzfSwaBwMCtFCsIWg8Q=="], + + "@whatwg-node/node-fetch": ["@whatwg-node/node-fetch@0.8.6", "", { "dependencies": { "@fastify/busboy": "^3.1.1", "@whatwg-node/disposablestack": "^0.0.6", "@whatwg-node/promise-helpers": "^1.3.2", "tslib": "^2.6.3" } }, "sha512-BDMdYFcerLQkwA2RTldxOqRCs6ZQD1S7UgP3pUdGUkcbgTrP/V5ko77ZkCww9DHmC4lpoYuwigGfQYj285gMvA=="], + + "@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@1.3.2", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA=="], + + "@whatwg-node/server": ["@whatwg-node/server@0.11.0", "", { "dependencies": { "@envelop/instrumentation": "^1.0.0", "@whatwg-node/disposablestack": "^0.0.6", "@whatwg-node/fetch": "^0.10.13", "@whatwg-node/promise-helpers": "^1.3.2", "tslib": "^2.6.3" } }, "sha512-VSdkwnJRr8Yv9UgB2aXB3VUPWwd6Oqnn0hycFwhg9pZgWxJXb7JmhsiXe9tmpMwjHFxli12PGcz9aI63YYloGQ=="], + + "ansi-escapes": ["ansi-escapes@7.3.0", "", { "dependencies": { "environment": "^1.0.0" } }, "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg=="], + + "ansi-regex": ["ansi-regex@6.4.0", "", {}, "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw=="], + + "ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + + "array-union": ["array-union@2.1.0", "", {}, "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="], + + "auto-bind": ["auto-bind@5.0.1", "", {}, "sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg=="], + + "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + + "baseline-browser-mapping": ["baseline-browser-mapping@2.11.27", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-ElY12DaROGuan+lMmZ8Cvo/ZUbXPe7Enc/9VU/b1T3Kp4dwytRcNdR8DoSJN5SNJT/CuvcCA0DHDVmMOCePdRQ=="], + + "brace-expansion": ["brace-expansion@5.0.12", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ=="], + + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + + "browserslist": ["browserslist@4.29.3", "", { "dependencies": { "baseline-browser-mapping": "^2.11.26", "caniuse-lite": "^1.0.30001813", "electron-to-chromium": "^1.5.439", "node-releases": "^2.0.57", "update-browserslist-db": "^1.3.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-1R4kiYKXGViqEN0CnoDrXc1StD9niAwu+j2dukWzrD4bJgsD4lDmEp0CRbc6E/vYJIfTHwPmwyaKtVSudICdPA=="], + + "bun-types": ["bun-types@1.4.2", "", { "dependencies": { "@types/node": "*" } }, "sha512-bxV1FgK7yBIzjRe5zBozIM4Bem11ZJcCXSrjWRG3YWLt8yFDePu4cLjpebO8OvPeIE9trbyPF4fuj3Cia4Fj3w=="], + + "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], + + "caniuse-lite": ["caniuse-lite@1.0.30001814", "", {}, "sha512-/Uaf1lAzr59XcMpW0o96WoEfr+VXK2OX4U9AgFoiSHsVJ4HppnIFUjtYzsyDH2+tgANaQb2/oxYGwCPapN1FpA=="], + + "chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "change-case": ["change-case@5.4.4", "", {}, "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w=="], + + "change-case-all": ["change-case-all@2.1.0", "", { "dependencies": { "change-case": "^5.2.0", "sponge-case": "^2.0.2", "swap-case": "^3.0.2", "title-case": "^3.0.3" } }, "sha512-v6b0WWWkZUMHVuYk82l+WROgkUm4qEN2w5hKRNWtEOYwWqUGoi8C6xH0l1RLF1EoWqDFK6MFclmN3od6ws3/uw=="], + + "chardet": ["chardet@2.2.0", "", {}, "sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA=="], + + "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], + + "cli-truncate": ["cli-truncate@5.2.0", "", { "dependencies": { "slice-ansi": "^8.0.0", "string-width": "^8.2.0" } }, "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw=="], + + "cli-width": ["cli-width@4.1.0", "", {}, "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ=="], + + "cliui": ["cliui@9.0.1", "", { "dependencies": { "string-width": "^7.2.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w=="], + + "common-tags": ["common-tags@1.8.2", "", {}, "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA=="], + + "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + + "cosmiconfig": ["cosmiconfig@9.0.2", "", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg=="], + + "cross-inspect": ["cross-inspect@1.0.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A=="], + + "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], + + "data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="], + + "dataloader": ["dataloader@2.2.3", "", {}, "sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA=="], + + "debounce": ["debounce@3.0.0", "", {}, "sha512-64byRbF0/AirwbuHqB3/ZpMG9/nckDa6ZA0yd6UnaQNwbbemCOwvz2sL5sjXLHhZHADyiwLm0M5qMhltUUx+TA=="], + + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "dependency-graph": ["dependency-graph@1.0.0", "", {}, "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg=="], + + "detect-indent": ["detect-indent@7.0.2", "", {}, "sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A=="], + + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + + "dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], + + "drizzle-orm": ["drizzle-orm@0.45.3", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@netlify/db": ">=0.4.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "prisma": "*", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@netlify/db", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@upstash/redis", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "prisma", "sql.js", "sqlite3"] }, "sha512-CAloER21cDdcgZ1OmjrZX82EeRNsdP+y0onX/eyoYDaYzki/adrAa91lzM5jWh7zZPK4qUbw/6LGv9J+A+uizA=="], + + "electron-to-chromium": ["electron-to-chromium@1.5.444", "", {}, "sha512-5ss/uJfoDYDHT0lfJzT6FbcskIzROIOPf0BbbFkGcvDzoJU7i//9GDrwwIHQVmIsrAGiF3ihpADBRIsrEFt1rQ=="], + + "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], + + "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], + + "environment": ["environment@1.1.0", "", {}, "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q=="], + + "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], + + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "eventemitter3": ["eventemitter3@5.0.4", "", {}, "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="], + + "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], + + "fast-string-truncated-width": ["fast-string-truncated-width@3.0.3", "", {}, "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g=="], + + "fast-string-width": ["fast-string-width@3.0.2", "", { "dependencies": { "fast-string-truncated-width": "^3.0.2" } }, "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg=="], + + "fast-wrap-ansi": ["fast-wrap-ansi@0.2.2", "", { "dependencies": { "fast-string-width": "^3.0.2" } }, "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q=="], + + "fastq": ["fastq@1.20.3", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw=="], + + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "fetch-blob": ["fetch-blob@3.2.0", "", { "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" } }, "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ=="], + + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + + "formdata-polyfill": ["formdata-polyfill@4.0.10", "", { "dependencies": { "fetch-blob": "^3.1.2" } }, "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], + + "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], + + "get-east-asian-width": ["get-east-asian-width@1.7.0", "", {}, "sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q=="], + + "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="], + + "graphql": ["graphql@16.12.0", "", {}, "sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ=="], + + "graphql-config": ["graphql-config@5.1.7", "", { "dependencies": { "@graphql-tools/graphql-file-loader": "^8.0.0", "@graphql-tools/json-file-loader": "^8.0.0", "@graphql-tools/load": "^8.1.0", "@graphql-tools/merge": "^9.0.0", "@graphql-tools/url-loader": "^9.0.0", "@graphql-tools/utils": "^11.0.0", "cosmiconfig": "^8.1.0", "jiti": "^2.0.0", "minimatch": "^10.0.0", "string-env-interpolation": "^1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "cosmiconfig-toml-loader": "^1.0.0", "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" }, "optionalPeers": ["cosmiconfig-toml-loader"] }, "sha512-7/2bD8fvACyXiRkuwgVE5U+WAVyBgcL2h85+FeafAMZRs1mZhZSzioSnJ3pWnh+EA50y8VdQRntF7jX5aznMIg=="], + + "graphql-tag": ["graphql-tag@2.12.7", "", { "dependencies": { "tslib": "^2.1.0" }, "peerDependencies": { "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-xnE/NFzy+0eIesvAsREJZ284zTl/wYuBAvpsFSDhRGRdRHdnE90M21Q3xAWyYInb0J756c6x0pIQ62+vtvOs1Q=="], + + "graphql-ws": ["graphql-ws@6.3.0", "", { "peerDependencies": { "@fastify/websocket": "^10 || ^11", "crossws": "~0.3 || ~0.4", "graphql": "^15.10.1 || ^16 || ^17", "ws": "^8" }, "optionalPeers": ["@fastify/websocket", "crossws", "ws"] }, "sha512-qBAXPtFjWHF3QypDyNcBp8Rycd+rmofxUSJsu3bGI9QMMq7pImKBSLSg9hZ2ojIMbJ54T/LPjKBIeOUoJbNBnQ=="], + + "graphql-yoga": ["graphql-yoga@5.24.1", "", { "dependencies": { "@envelop/core": "^5.6.1", "@envelop/instrumentation": "^1.0.1", "@graphql-tools/executor": "^2.0.0", "@graphql-tools/schema": "^10.0.11", "@graphql-tools/utils": "^11.2.0", "@graphql-yoga/logger": "^2.0.2", "@graphql-yoga/subscription": "^5.1.1", "@whatwg-node/fetch": "^0.10.6", "@whatwg-node/promise-helpers": "^1.3.2", "@whatwg-node/server": "^0.11.0", "lru-cache": "^10.0.0", "tslib": "^2.8.1" }, "peerDependencies": { "graphql": "^15.2.0 || ^16.0.0 || ^17.0.0" } }, "sha512-NA2aQ4sZvR/bniCCLOlMG6OSZf5hPg3mUf3Phm33ObqRMZEq6WtZrj2hTcHfT2ZEFVV5FRCbcMb4NB1w7BIKaA=="], + + "iconv-lite": ["iconv-lite@0.7.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ=="], + + "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + + "immutable": ["immutable@5.1.9", "", {}, "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg=="], + + "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], + + "import-from": ["import-from@4.0.0", "", {}, "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ=="], + + "invariant": ["invariant@2.2.4", "", { "dependencies": { "loose-envify": "^1.0.0" } }, "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA=="], + + "is-absolute": ["is-absolute@1.0.0", "", { "dependencies": { "is-relative": "^1.0.0", "is-windows": "^1.0.1" } }, "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA=="], + + "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-fullwidth-code-point": ["is-fullwidth-code-point@5.1.0", "", { "dependencies": { "get-east-asian-width": "^1.3.1" } }, "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + + "is-relative": ["is-relative@1.0.0", "", { "dependencies": { "is-unc-path": "^1.0.0" } }, "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA=="], + + "is-unc-path": ["is-unc-path@1.0.0", "", { "dependencies": { "unc-path-regex": "^0.1.2" } }, "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ=="], + + "is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], + + "is-windows": ["is-windows@1.0.2", "", {}, "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="], + + "isomorphic-ws": ["isomorphic-ws@5.0.0", "", { "peerDependencies": { "ws": "*" } }, "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw=="], + + "isows": ["isows@1.0.7", "", { "peerDependencies": { "ws": "*" } }, "sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg=="], + + "jiti": ["jiti@2.7.0", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="], + + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "js-yaml": ["js-yaml@4.3.2", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA=="], + + "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], + + "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], + + "json-to-pretty-yaml": ["json-to-pretty-yaml@1.2.2", "", { "dependencies": { "remedial": "^1.0.7", "remove-trailing-spaces": "^1.0.6" } }, "sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A=="], + + "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], + + "lightningcss": ["lightningcss@1.33.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.33.0", "lightningcss-darwin-arm64": "1.33.0", "lightningcss-darwin-x64": "1.33.0", "lightningcss-freebsd-x64": "1.33.0", "lightningcss-linux-arm-gnueabihf": "1.33.0", "lightningcss-linux-arm64-gnu": "1.33.0", "lightningcss-linux-arm64-musl": "1.33.0", "lightningcss-linux-x64-gnu": "1.33.0", "lightningcss-linux-x64-musl": "1.33.0", "lightningcss-win32-arm64-msvc": "1.33.0", "lightningcss-win32-x64-msvc": "1.33.0" } }, "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA=="], + + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.33.0", "", { "os": "android", "cpu": "arm64" }, "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg=="], + + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.33.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg=="], + + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.33.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.33.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.33.0", "", { "os": "linux", "cpu": "arm" }, "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.33.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg=="], + + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.33.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.33.0", "", { "os": "linux", "cpu": "x64" }, "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.33.0", "", { "os": "linux", "cpu": "x64" }, "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.33.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.33.0", "", { "os": "win32", "cpu": "x64" }, "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA=="], + + "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + + "listr2": ["listr2@10.2.2", "", { "dependencies": { "cli-truncate": "^5.2.0", "eventemitter3": "^5.0.4", "log-update": "^6.1.0", "rfdc": "^1.4.1", "wrap-ansi": "^10.0.0" } }, "sha512-JtNtbZj8q5BnDMR7trpwvwk3RIrANtIVzEUm8w7amp6xelLgyuq+4WZoTH913XaQAoH/cNdYhaNzBPA2U3xbDw=="], + + "log-symbols": ["log-symbols@7.0.1", "", { "dependencies": { "is-unicode-supported": "^2.0.0", "yoctocolors": "^2.1.1" } }, "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg=="], + + "log-update": ["log-update@6.1.0", "", { "dependencies": { "ansi-escapes": "^7.0.0", "cli-cursor": "^5.0.0", "slice-ansi": "^7.1.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w=="], + + "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], + + "lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + + "map-cache": ["map-cache@0.2.2", "", {}, "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg=="], + + "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + + "meros": ["meros@1.3.2", "", { "peerDependencies": { "@types/node": ">=13" }, "optionalPeers": ["@types/node"] }, "sha512-Q3mobPbvEx7XbwhnC1J1r60+5H6EZyNccdzSz0eGexJRwouUtTZxPVRGdqKtxlpD84ScK4+tIGldkqDtCKdI0A=="], + + "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], + + "minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "mute-stream": ["mute-stream@3.0.0", "", {}, "sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw=="], + + "nanoid": ["nanoid@3.3.19", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug=="], + + "node-domexception": ["node-domexception@1.0.0", "", {}, "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="], + + "node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], + + "node-releases": ["node-releases@2.0.57", "", {}, "sha512-kQK9LGGFiHtrWiNhZtA7Qbw17AQz+dmsEKODRIVTXA9+e5MS/2gZEBhYJt13GrAz5/IOZKddH/0Z3TP/Zgo+yw=="], + + "normalize-path": ["normalize-path@2.1.1", "", { "dependencies": { "remove-trailing-separator": "^1.0.1" } }, "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w=="], + + "onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], + + "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + + "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], + + "parse-filepath": ["parse-filepath@1.0.2", "", { "dependencies": { "is-absolute": "^1.0.0", "map-cache": "^0.2.0", "path-root": "^0.1.1" } }, "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q=="], + + "parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], + + "path-root": ["path-root@0.1.1", "", { "dependencies": { "path-root-regex": "^0.1.0" } }, "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg=="], + + "path-root-regex": ["path-root-regex@0.1.2", "", {}, "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ=="], + + "path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], + + "pg": ["pg@8.23.1", "", { "dependencies": { "pg-connection-string": "^2.14.1", "pg-pool": "^3.14.0", "pg-protocol": "^1.16.1", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.4.1" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-aL96AHANtWjPLDOLqnhx+ngp9+UK7ETEU8VJrDCGvsSSi/mGLcWYsS6Herg7lmaBJe4uwrfqsa7gTEFaSizDoQ=="], + + "pg-cloudflare": ["pg-cloudflare@1.4.1", "", {}, "sha512-6PQbsFWZcp9EmJEwy5cGQ2La+AMWpP46lgbb8X+U/XsHIUweYDNCpeuKck5RxL2MdVFi7krbbEi5nX4Zh7JhrQ=="], + + "pg-connection-string": ["pg-connection-string@2.14.1", "", {}, "sha512-qR3kGNPBLpCNtz0evbKA0Y/MRFXwSSdT+pTJvYp/bXTcReZbvX1kzF0IyTc1QnxqF7AZbOeBhNL8R5mYQZV/MA=="], + + "pg-int8": ["pg-int8@1.0.1", "", {}, "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="], + + "pg-pool": ["pg-pool@3.14.0", "", { "peerDependencies": { "pg": ">=8.0" } }, "sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw=="], + + "pg-protocol": ["pg-protocol@1.16.1", "", {}, "sha512-p9VOFMiHB/ZbJATetbg+99PxssTVSQRnyuPSQ67mN1+1KBOjZaZ83ZQzltnxPhJwSsC3nwVjJ10DVJlerbFzLg=="], + + "pg-types": ["pg-types@2.2.0", "", { "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", "postgres-bytea": "~1.0.0", "postgres-date": "~1.0.4", "postgres-interval": "^1.1.0" } }, "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA=="], + + "pgpass": ["pgpass@1.0.5", "", { "dependencies": { "split2": "^4.1.0" } }, "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.7", "", {}, "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="], + + "playwright": ["playwright@1.63.0", "", { "dependencies": { "playwright-core": "1.63.0" }, "bin": { "playwright": "cli.js" } }, "sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg=="], + + "playwright-core": ["playwright-core@1.63.0", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg=="], + + "postcss": ["postcss@8.5.28", "", { "dependencies": { "nanoid": "^3.3.18", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A=="], + + "postgres-array": ["postgres-array@2.0.0", "", {}, "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="], + + "postgres-bytea": ["postgres-bytea@1.0.1", "", {}, "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ=="], + + "postgres-date": ["postgres-date@1.0.7", "", {}, "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="], + + "postgres-interval": ["postgres-interval@1.2.0", "", { "dependencies": { "xtend": "^4.0.0" } }, "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="], + + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + + "react": ["react@19.3.0", "", {}, "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog=="], + + "react-dom": ["react-dom@19.3.0", "", { "dependencies": { "scheduler": "^0.28.0" }, "peerDependencies": { "react": "^19.3.0" } }, "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q=="], + + "remedial": ["remedial@1.0.8", "", {}, "sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg=="], + + "remove-trailing-separator": ["remove-trailing-separator@1.1.0", "", {}, "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw=="], + + "remove-trailing-spaces": ["remove-trailing-spaces@1.0.9", "", {}, "sha512-xzG7w5IRijvIkHIjDk65URsJJ7k4J95wmcArY5PRcmjldIOl7oTvG8+X2Ag690R7SfwiOcHrWZKVc1Pp5WIOzA=="], + + "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], + + "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], + + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + + "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], + + "rolldown": ["rolldown@1.2.12", "", { "dependencies": { "@oxc-project/types": "=0.152.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm-eabi": "1.2.12", "@rolldown/binding-android-arm64": "1.2.12", "@rolldown/binding-darwin-arm64": "1.2.12", "@rolldown/binding-darwin-x64": "1.2.12", "@rolldown/binding-freebsd-x64": "1.2.12", "@rolldown/binding-linux-arm-gnueabihf": "1.2.12", "@rolldown/binding-linux-arm64-gnu": "1.2.12", "@rolldown/binding-linux-arm64-musl": "1.2.12", "@rolldown/binding-linux-ppc64-gnu": "1.2.12", "@rolldown/binding-linux-s390x-gnu": "1.2.12", "@rolldown/binding-linux-x64-gnu": "1.2.12", "@rolldown/binding-linux-x64-musl": "1.2.12", "@rolldown/binding-openharmony-arm64": "1.2.12", "@rolldown/binding-win32-arm64-msvc": "1.2.12", "@rolldown/binding-win32-x64-msvc": "1.2.12" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-8wafseiaG80xmXSfqidUNqZcylTlhmPZZt+za2m+js2sFZ8dTNlhIOV2WcbIPx2hgwPBJpEUGFAMZ9bgBBLTSQ=="], + + "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + + "scheduler": ["scheduler@0.28.0", "", {}, "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw=="], + + "semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "shell-quote": ["shell-quote@1.12.0", "", {}, "sha512-PcByqNyT/38F2kDNi006HAMRJaULuBzq/FOsw3qdZvX/GA9W/jamDaRskgHjubHiftXK5sIFxLNkvrXUwcof6Q=="], + + "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], + + "slice-ansi": ["slice-ansi@8.0.0", "", { "dependencies": { "ansi-styles": "^6.2.3", "is-fullwidth-code-point": "^5.1.0" } }, "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg=="], + + "source-map-js": ["source-map-js@1.2.2", "", {}, "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw=="], + + "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], + + "sponge-case": ["sponge-case@2.0.3", "", {}, "sha512-i4h9ZGRfxV6Xw3mpZSFOfbXjf0cQcYmssGWutgNIfFZ2VM+YIWfD71N/kjjwK6X/AAHzBr+rciEcn/L34S8TGw=="], + + "string-env-interpolation": ["string-env-interpolation@1.0.1", "", {}, "sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg=="], + + "string-width": ["string-width@8.3.0", "", { "dependencies": { "get-east-asian-width": "^1.5.0", "strip-ansi": "^7.1.2" } }, "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ=="], + + "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], + + "swap-case": ["swap-case@3.0.3", "", {}, "sha512-6p4op8wE9CQv7uDFzulI6YXUw4lD9n4oQierdbFThEKVWVQcbQcUjdP27W8XE7V4QnWmnq9jueSHceyyQnqQVA=="], + + "sync-fetch": ["sync-fetch@0.7.1", "", { "dependencies": { "node-fetch": "^3.3.2", "timeout-signal": "^2.0.0", "whatwg-mimetype": "^5.0.0" } }, "sha512-tTw2sPVgJb/ZO+Uz5Cs1haWg7aL0cw+DvD8mXos+ws5YaelM3IBZ50M717T1+RD5Qq0TdeZ/EI/wVMnAdJA0Eg=="], + + "timeout-signal": ["timeout-signal@2.0.0", "", {}, "sha512-YBGpG4bWsHoPvofT6y/5iqulfXIiIErl5B0LdtHT1mGXDFTAhhRrbUpTvBgYbovr+3cKblya2WAOcpoy90XguA=="], + + "tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="], + + "title-case": ["title-case@3.0.3", "", { "dependencies": { "tslib": "^2.0.3" } }, "sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA=="], + + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + + "ts-log": ["ts-log@3.0.3", "", {}, "sha512-4uxVlS/cbNFeSmZbXgBCq+MRkbck1iW7B2Vqd+gziasf//uZP/HFI2IcoHlyYWFgFRl+5G5iqHe4RvY/h/qUxw=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "typescript": ["typescript@7.0.2", "", { "optionalDependencies": { "@typescript/typescript-aix-ppc64": "7.0.2", "@typescript/typescript-darwin-arm64": "7.0.2", "@typescript/typescript-darwin-x64": "7.0.2", "@typescript/typescript-freebsd-arm64": "7.0.2", "@typescript/typescript-freebsd-x64": "7.0.2", "@typescript/typescript-linux-arm": "7.0.2", "@typescript/typescript-linux-arm64": "7.0.2", "@typescript/typescript-linux-loong64": "7.0.2", "@typescript/typescript-linux-mips64el": "7.0.2", "@typescript/typescript-linux-ppc64": "7.0.2", "@typescript/typescript-linux-riscv64": "7.0.2", "@typescript/typescript-linux-s390x": "7.0.2", "@typescript/typescript-linux-x64": "7.0.2", "@typescript/typescript-netbsd-arm64": "7.0.2", "@typescript/typescript-netbsd-x64": "7.0.2", "@typescript/typescript-openbsd-arm64": "7.0.2", "@typescript/typescript-openbsd-x64": "7.0.2", "@typescript/typescript-sunos-x64": "7.0.2", "@typescript/typescript-win32-arm64": "7.0.2", "@typescript/typescript-win32-x64": "7.0.2" }, "bin": { "tsc": "bin/tsc" } }, "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA=="], + + "unc-path-regex": ["unc-path-regex@0.1.2", "", {}, "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg=="], + + "undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="], + + "unixify": ["unixify@1.0.0", "", { "dependencies": { "normalize-path": "^2.1.1" } }, "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg=="], + + "update-browserslist-db": ["update-browserslist-db@1.3.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ=="], + + "urlpattern-polyfill": ["urlpattern-polyfill@10.1.0", "", {}, "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw=="], + + "urql": ["urql@5.0.4", "", { "dependencies": { "@urql/core": "^6.0.3", "wonka": "^6.3.2" }, "peerDependencies": { "react": ">= 16.8.0" } }, "sha512-OKNx8hUtt6RPSfsMsTsvas9rvMNN7BPMTvbXCwbiuO/mYa8Y+G4pxTzMJL7Sf1jXwR9gMpQheJ21LQy+nUjMkw=="], + + "vite": ["vite@8.3.2", "", { "dependencies": { "lightningcss": "^1.33.0", "picomatch": "^4.0.7", "postcss": "^8.5.28", "rolldown": "~1.2.11", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.7.1", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-SQr1x6W5vVSbROg7vsyXIaxK9b0G7zsT68acdWWRmnBUsgDieLCRG+Rep9WdZgcposvv/GSnr4GUUBqB3vXq6w=="], + + "web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="], + + "whatwg-mimetype": ["whatwg-mimetype@5.0.0", "", {}, "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw=="], + + "wonka": ["wonka@6.3.6", "", {}, "sha512-MXH+6mDHAZ2GuMpgKS055FR6v0xVP3XwquxIMYXgiW+FejHQlMGlvVRZT4qMCxR+bEo/FCtIdKxwej9WV3YQag=="], + + "wrap-ansi": ["wrap-ansi@10.0.2", "", { "dependencies": { "ansi-styles": "^6.2.3", "string-width": "^8.2.0" } }, "sha512-6OLRNZqRntVGBm26ghZ5eZhCuWWyOkRCSn8XsOIuq5stpCE/tjLbdozd93naILZig0lmD8ANfRwnhn0DLeXGlg=="], + + "ws": ["ws@8.22.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-Ydggc987+RO0AnWtZ/7Wq9FtNvcrL1b/RO0ud9mWjUPgDrsAAwQSF51sm2hm1XofbU/4jkpGEsLFsZZxU+1DOg=="], + + "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], + + "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], + + "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + + "yaml": ["yaml@2.9.1", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw=="], + + "yargs": ["yargs@18.2.0", "", { "dependencies": { "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "string-width": "^8.2.1", "y18n": "^5.0.5", "yargs-parser": "^22.0.0" } }, "sha512-9OpKOLeaoNFecEp7P6iYbzze/5CqWoH7N3SMs/6y1XF4nMvFMspEGZzJ6uFi9MmQwXhyzqYoSEKO3tvA3Z/o2w=="], + + "yargs-parser": ["yargs-parser@22.0.0", "", {}, "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw=="], + + "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + + "yoctocolors": ["yoctocolors@2.2.0", "", {}, "sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg=="], + + "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + + "@graphql-tools/apollo-engine-loader/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@graphql-tools/apollo-engine-loader/@whatwg-node/fetch": ["@whatwg-node/fetch@0.12.1", "", { "dependencies": { "@whatwg-node/node-fetch": "^0.9.1", "urlpattern-polyfill": "^10.0.0" } }, "sha512-MjSXerFVxhWwPXZMNp4b4Q3WZMEIqzinHVWuH5tF2LNGy4hHypqPJCNpaR6bEZbaGdlH+r5dRAmQ8bxowcetjQ=="], + + "@graphql-tools/batch-execute/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@graphql-tools/code-file-loader/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@graphql-tools/delegate/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@graphql-tools/executor/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@graphql-tools/executor/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@graphql-tools/executor-common/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@graphql-tools/executor-graphql-ws/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@graphql-tools/executor-graphql-ws/@whatwg-node/disposablestack": ["@whatwg-node/disposablestack@0.0.6", "", { "dependencies": { "@whatwg-node/promise-helpers": "^1.0.0", "tslib": "^2.6.3" } }, "sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw=="], + + "@graphql-tools/executor-http/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@graphql-tools/executor-http/@whatwg-node/disposablestack": ["@whatwg-node/disposablestack@0.0.6", "", { "dependencies": { "@whatwg-node/promise-helpers": "^1.0.0", "tslib": "^2.6.3" } }, "sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw=="], + + "@graphql-tools/executor-legacy-ws/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@graphql-tools/git-loader/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@graphql-tools/github-loader/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@graphql-tools/github-loader/@whatwg-node/fetch": ["@whatwg-node/fetch@0.12.1", "", { "dependencies": { "@whatwg-node/node-fetch": "^0.9.1", "urlpattern-polyfill": "^10.0.0" } }, "sha512-MjSXerFVxhWwPXZMNp4b4Q3WZMEIqzinHVWuH5tF2LNGy4hHypqPJCNpaR6bEZbaGdlH+r5dRAmQ8bxowcetjQ=="], + + "@graphql-tools/github-loader/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@graphql-tools/graphql-file-loader/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@graphql-tools/graphql-tag-pluck/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@graphql-tools/import/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@graphql-tools/json-file-loader/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@graphql-tools/load/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@graphql-tools/merge/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@graphql-tools/relay-operation-optimizer/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@graphql-tools/schema/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@graphql-tools/url-loader/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@graphql-tools/url-loader/@whatwg-node/fetch": ["@whatwg-node/fetch@0.12.1", "", { "dependencies": { "@whatwg-node/node-fetch": "^0.9.1", "urlpattern-polyfill": "^10.0.0" } }, "sha512-MjSXerFVxhWwPXZMNp4b4Q3WZMEIqzinHVWuH5tF2LNGy4hHypqPJCNpaR6bEZbaGdlH+r5dRAmQ8bxowcetjQ=="], + + "@graphql-tools/url-loader/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@graphql-tools/wrap/@graphql-tools/utils": ["@graphql-tools/utils@12.0.3", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@whatwg-node/promise-helpers": "^2.0.0", "cross-inspect": "1.0.1", "tslib": "^2.4.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-M+04bHvI1SKoug7W2EkwfKjig2mdtgIIlFY8p2jLHmxPNVs5bC/3R+58JrD+7ZXWgPILWTwuqJ9AqTjPlahroA=="], + + "@whatwg-node/disposablestack/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@whatwg-node/node-fetch/@whatwg-node/disposablestack": ["@whatwg-node/disposablestack@0.0.6", "", { "dependencies": { "@whatwg-node/promise-helpers": "^1.0.0", "tslib": "^2.6.3" } }, "sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw=="], + + "@whatwg-node/server/@whatwg-node/disposablestack": ["@whatwg-node/disposablestack@0.0.6", "", { "dependencies": { "@whatwg-node/promise-helpers": "^1.0.0", "tslib": "^2.6.3" } }, "sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw=="], + + "cliui/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + + "cliui/wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], + + "graphql-config/cosmiconfig": ["cosmiconfig@8.3.6", "", { "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA=="], + + "import-fresh/resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], + + "log-update/slice-ansi": ["slice-ansi@7.1.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" } }, "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w=="], + + "log-update/wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], + + "micromatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], + + "@graphql-tools/apollo-engine-loader/@graphql-tools/utils/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@graphql-tools/apollo-engine-loader/@whatwg-node/fetch/@whatwg-node/node-fetch": ["@whatwg-node/node-fetch@0.9.1", "", { "dependencies": { "@fastify/busboy": "^3.1.1", "@whatwg-node/disposablestack": "^0.1.0", "@whatwg-node/promise-helpers": "^2.0.0", "tslib": "^2.6.3" } }, "sha512-LX/1X2QEHupCz6YXRjefZRoOsycCGOIJdXtQPVVxhzPQ/CpWpWFaXl53ShqLystvLZSvtUDKLhCA/yLveHA/LA=="], + + "@graphql-tools/batch-execute/@graphql-tools/utils/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@graphql-tools/code-file-loader/@graphql-tools/utils/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@graphql-tools/delegate/@graphql-tools/utils/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@graphql-tools/executor-common/@graphql-tools/utils/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@graphql-tools/executor-graphql-ws/@graphql-tools/utils/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@graphql-tools/executor-http/@graphql-tools/utils/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@graphql-tools/executor-legacy-ws/@graphql-tools/utils/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@graphql-tools/git-loader/@graphql-tools/utils/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@graphql-tools/github-loader/@whatwg-node/fetch/@whatwg-node/node-fetch": ["@whatwg-node/node-fetch@0.9.1", "", { "dependencies": { "@fastify/busboy": "^3.1.1", "@whatwg-node/disposablestack": "^0.1.0", "@whatwg-node/promise-helpers": "^2.0.0", "tslib": "^2.6.3" } }, "sha512-LX/1X2QEHupCz6YXRjefZRoOsycCGOIJdXtQPVVxhzPQ/CpWpWFaXl53ShqLystvLZSvtUDKLhCA/yLveHA/LA=="], + + "@graphql-tools/graphql-file-loader/@graphql-tools/utils/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@graphql-tools/graphql-tag-pluck/@graphql-tools/utils/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@graphql-tools/import/@graphql-tools/utils/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@graphql-tools/json-file-loader/@graphql-tools/utils/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@graphql-tools/load/@graphql-tools/utils/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@graphql-tools/merge/@graphql-tools/utils/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@graphql-tools/relay-operation-optimizer/@graphql-tools/utils/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@graphql-tools/schema/@graphql-tools/utils/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "@graphql-tools/url-loader/@whatwg-node/fetch/@whatwg-node/node-fetch": ["@whatwg-node/node-fetch@0.9.1", "", { "dependencies": { "@fastify/busboy": "^3.1.1", "@whatwg-node/disposablestack": "^0.1.0", "@whatwg-node/promise-helpers": "^2.0.0", "tslib": "^2.6.3" } }, "sha512-LX/1X2QEHupCz6YXRjefZRoOsycCGOIJdXtQPVVxhzPQ/CpWpWFaXl53ShqLystvLZSvtUDKLhCA/yLveHA/LA=="], + + "@graphql-tools/wrap/@graphql-tools/utils/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + + "log-update/wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + + "@graphql-tools/apollo-engine-loader/@whatwg-node/fetch/@whatwg-node/node-fetch/@whatwg-node/promise-helpers": ["@whatwg-node/promise-helpers@2.0.0", "", { "dependencies": { "tslib": "^2.6.3" } }, "sha512-/i9CS0Z96o+cPwaYoAyVxAThDiUX1wV3tDmNWPJbn+vtdR+JftuCDg1NGCXBrzIYVDGkJ8uT6ctwmrBOUzOpKQ=="], + } +} diff --git a/applications/product-graphql/codegen.ts b/applications/product-graphql/codegen.ts new file mode 100644 index 00000000..4672d760 --- /dev/null +++ b/applications/product-graphql/codegen.ts @@ -0,0 +1,13 @@ +import type { CodegenConfig } from "@graphql-codegen/cli"; +const config: CodegenConfig = { + schema: "schema.graphql", + documents: ["src/client/operations.graphql"], + generates: { + "src/client/gql/": { + preset: "client", + presetConfig: { fragmentMasking: false }, + config: { useTypeImports: true }, + }, + }, +}; +export default config; diff --git a/applications/product-graphql/docs/product-graphql.png b/applications/product-graphql/docs/product-graphql.png new file mode 100644 index 0000000000000000000000000000000000000000..2d4b823f9d13800f1dc5f62a56d642b4e8042c3f GIT binary patch literal 228764 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%0DviaML?>_#x#o{E@qP% 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

oWkH&|si4f2!-#(w_*p2EU}G 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�f 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 literal 0 HcmV?d00001 diff --git a/applications/product-graphql/index.html b/applications/product-graphql/index.html new file mode 100644 index 00000000..81fceb53 --- /dev/null +++ b/applications/product-graphql/index.html @@ -0,0 +1 @@ +Collection studio

diff --git a/applications/product-graphql/package.json b/applications/product-graphql/package.json new file mode 100644 index 00000000..bd86896c --- /dev/null +++ b/applications/product-graphql/package.json @@ -0,0 +1,38 @@ +{ + "name": "product-graphql", + "private": true, + "type": "module", + "scripts": { + "schema": "bun scripts/schema.ts", + "codegen": "bun run schema && graphql-codegen --config codegen.ts", + "typecheck": "tsc --noEmit", + "build": "vite build", + "start": "bun src/server/index.ts", + "test": "bun test tests/validation.test.ts", + "test:integration": "bun test tests/database.test.ts", + "test:browser": "playwright test" + }, + "dependencies": { + "@pothos/core": "4.15.1", + "graphql-yoga": "5.24.1", + "graphql": "16.12.0", + "drizzle-orm": "0.45.3", + "pg": "8.23.1", + "dataloader": "2.2.3", + "urql": "5.0.4", + "react": "19.3.0", + "react-dom": "19.3.0" + }, + "devDependencies": { + "@graphql-codegen/cli": "7.4.3", + "@graphql-codegen/client-preset": "6.2.0", + "@types/pg": "8.23.1", + "@types/bun": "1.4.2", + "@types/react": "19.3.0", + "@types/react-dom": "19.3.0", + "@vitejs/plugin-react": "6.1.1", + "vite": "8.3.2", + "typescript": "7.0.2", + "@playwright/test": "1.63.0" + } +} diff --git a/applications/product-graphql/playwright.config.ts b/applications/product-graphql/playwright.config.ts new file mode 100644 index 00000000..5a776e73 --- /dev/null +++ b/applications/product-graphql/playwright.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from "@playwright/test"; +export default defineConfig({ + testDir: "tests/browser", + use: { + baseURL: "http://127.0.0.1:3001", + viewport: { width: 1440, height: 1080 }, + }, + workers: 1, + timeout: 30000, +}); diff --git a/applications/product-graphql/schema.graphql b/applications/product-graphql/schema.graphql new file mode 100644 index 00000000..f716becd --- /dev/null +++ b/applications/product-graphql/schema.graphql @@ -0,0 +1,42 @@ +type Collection { + id: ID! + products: [Product!]! + revision: Int! + title: String! +} + +type CollectionSave { + collection: Collection + status: SaveStatus! +} + +type Mutation { + createCollection(productIds: [ID!]!, title: String!): Collection! + replaceCollection(baseRevision: Int!, id: ID!, productIds: [ID!]!): CollectionSave! +} + +type Product { + category: String! + description: String! + id: ID! + name: String! + variants: [Variant!]! +} + +type Query { + collection(id: ID!): Collection + collections: [Collection!]! + products(category: String, first: Int!, offset: Int!, search: String): [Product!]! +} + +enum SaveStatus { + CONFLICT + OK +} + +type Variant { + id: ID! + name: String! + priceCents: Int! + sku: String! +} diff --git a/applications/product-graphql/scripts/schema.ts b/applications/product-graphql/scripts/schema.ts new file mode 100644 index 00000000..6a74d1a3 --- /dev/null +++ b/applications/product-graphql/scripts/schema.ts @@ -0,0 +1,3 @@ +import { printSchema } from "graphql"; +import { schema } from "../src/server/graphql"; +await Bun.write("schema.graphql", printSchema(schema) + "\n"); diff --git a/applications/product-graphql/sql/001_roles.sql b/applications/product-graphql/sql/001_roles.sql new file mode 100644 index 00000000..d7ad0926 --- /dev/null +++ b/applications/product-graphql/sql/001_roles.sql @@ -0,0 +1,10 @@ +\set ON_ERROR_STOP on +\getenv migration_password PG_MIGRATION_PASSWORD +\getenv app_password PG_APP_PASSWORD +CREATE ROLE catalog_owner NOLOGIN; +CREATE ROLE catalog_migration LOGIN PASSWORD :'migration_password'; +CREATE ROLE catalog_app LOGIN PASSWORD :'app_password'; +GRANT catalog_owner TO catalog_migration; +CREATE SCHEMA product_catalog AUTHORIZATION catalog_owner; +REVOKE ALL ON SCHEMA product_catalog FROM PUBLIC; +GRANT USAGE ON SCHEMA product_catalog TO catalog_app; diff --git a/applications/product-graphql/sql/002_schema.sql b/applications/product-graphql/sql/002_schema.sql new file mode 100644 index 00000000..424f7f62 --- /dev/null +++ b/applications/product-graphql/sql/002_schema.sql @@ -0,0 +1,12 @@ +\set ON_ERROR_STOP on +BEGIN; +SET LOCAL ROLE catalog_owner; +CREATE TABLE product_catalog.products(id UUID PRIMARY KEY,name TEXT NOT NULL CHECK(length(name) BETWEEN 1 AND 80),category TEXT NOT NULL CHECK(category IN ('Desk','Travel','Lighting')),description TEXT NOT NULL); +CREATE TABLE product_catalog.variants(id UUID PRIMARY KEY,product_id UUID NOT NULL REFERENCES product_catalog.products(id),name TEXT NOT NULL,sku TEXT NOT NULL UNIQUE,price_cents INTEGER NOT NULL CHECK(price_cents BETWEEN 1 AND 1000000),position INTEGER NOT NULL CHECK(position BETWEEN 0 AND 2),UNIQUE(product_id,position)); +CREATE TABLE product_catalog.collections(id UUID PRIMARY KEY,title TEXT NOT NULL CHECK(length(btrim(title)) BETWEEN 1 AND 60),revision INTEGER NOT NULL CHECK(revision>0)); +CREATE TABLE product_catalog.collection_items(collection_id UUID NOT NULL REFERENCES product_catalog.collections(id) ON DELETE CASCADE,product_id UUID NOT NULL REFERENCES product_catalog.products(id),position INTEGER NOT NULL CHECK(position BETWEEN 0 AND 11),PRIMARY KEY(collection_id,product_id),UNIQUE(collection_id,position)); +GRANT SELECT ON ALL TABLES IN SCHEMA product_catalog TO catalog_app; +GRANT INSERT ON product_catalog.collections,product_catalog.collection_items TO catalog_app; +GRANT UPDATE(revision) ON product_catalog.collections TO catalog_app; +GRANT DELETE ON product_catalog.collection_items TO catalog_app; +COMMIT; diff --git a/applications/product-graphql/sql/003_seed.sql b/applications/product-graphql/sql/003_seed.sql new file mode 100644 index 00000000..887c9fd8 --- /dev/null +++ b/applications/product-graphql/sql/003_seed.sql @@ -0,0 +1,106 @@ +\set ON_ERROR_STOP on +BEGIN; +SET LOCAL ROLE catalog_owner; +INSERT INTO product_catalog.products(id,name,category,description) VALUES +('10000000-0000-4000-8000-000000000001','Arc desk lamp','Lighting','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000002','Canvas weekender','Travel','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000003','Ceramic pen cup','Desk','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000004','Compact field bag','Travel','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000005','Cork desk mat','Desk','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000006','Dawn task light','Lighting','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000007','Felt organiser','Desk','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000008','Fold travel pouch','Travel','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000009','Frame bookend','Desk','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000010','Harbour lantern','Lighting','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000011','Linen cable wrap','Desk','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000012','Loop key case','Travel','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000013','Maple tray','Desk','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000014','Mesh travel kit','Travel','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000015','Orbit reading lamp','Lighting','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000016','Pocket notebook','Travel','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000017','Porcelain task light','Lighting','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000018','Ridge card holder','Travel','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000019','Slate desk stand','Desk','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000020','Soft packing cube','Travel','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000021','Stem wall light','Lighting','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000022','Studio ruler','Desk','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000023','Terra table lamp','Lighting','A thoughtful everyday object, made for a slower rhythm.'), +('10000000-0000-4000-8000-000000000024','Woven document sleeve','Desk','A thoughtful everyday object, made for a slower rhythm.') +ON CONFLICT DO NOTHING; +INSERT INTO product_catalog.variants(id,product_id,name,sku,price_cents,position) VALUES +('20000000-0000-4000-8000-000000000010','10000000-0000-4000-8000-000000000001','Natural','STUDIO-01-0',2625,0), +('20000000-0000-4000-8000-000000000011','10000000-0000-4000-8000-000000000001','Moss','STUDIO-01-1',2825,1), +('20000000-0000-4000-8000-000000000012','10000000-0000-4000-8000-000000000001','Ink','STUDIO-01-2',3025,2), +('20000000-0000-4000-8000-000000000020','10000000-0000-4000-8000-000000000002','Natural','STUDIO-02-0',2750,0), +('20000000-0000-4000-8000-000000000021','10000000-0000-4000-8000-000000000002','Moss','STUDIO-02-1',2950,1), +('20000000-0000-4000-8000-000000000022','10000000-0000-4000-8000-000000000002','Ink','STUDIO-02-2',3150,2), +('20000000-0000-4000-8000-000000000030','10000000-0000-4000-8000-000000000003','Natural','STUDIO-03-0',2875,0), +('20000000-0000-4000-8000-000000000031','10000000-0000-4000-8000-000000000003','Moss','STUDIO-03-1',3075,1), +('20000000-0000-4000-8000-000000000032','10000000-0000-4000-8000-000000000003','Ink','STUDIO-03-2',3275,2), +('20000000-0000-4000-8000-000000000040','10000000-0000-4000-8000-000000000004','Natural','STUDIO-04-0',3000,0), +('20000000-0000-4000-8000-000000000041','10000000-0000-4000-8000-000000000004','Moss','STUDIO-04-1',3200,1), +('20000000-0000-4000-8000-000000000042','10000000-0000-4000-8000-000000000004','Ink','STUDIO-04-2',3400,2), +('20000000-0000-4000-8000-000000000050','10000000-0000-4000-8000-000000000005','Natural','STUDIO-05-0',3125,0), +('20000000-0000-4000-8000-000000000051','10000000-0000-4000-8000-000000000005','Moss','STUDIO-05-1',3325,1), +('20000000-0000-4000-8000-000000000052','10000000-0000-4000-8000-000000000005','Ink','STUDIO-05-2',3525,2), +('20000000-0000-4000-8000-000000000060','10000000-0000-4000-8000-000000000006','Natural','STUDIO-06-0',3250,0), +('20000000-0000-4000-8000-000000000061','10000000-0000-4000-8000-000000000006','Moss','STUDIO-06-1',3450,1), +('20000000-0000-4000-8000-000000000062','10000000-0000-4000-8000-000000000006','Ink','STUDIO-06-2',3650,2), +('20000000-0000-4000-8000-000000000070','10000000-0000-4000-8000-000000000007','Natural','STUDIO-07-0',3375,0), +('20000000-0000-4000-8000-000000000071','10000000-0000-4000-8000-000000000007','Moss','STUDIO-07-1',3575,1), +('20000000-0000-4000-8000-000000000072','10000000-0000-4000-8000-000000000007','Ink','STUDIO-07-2',3775,2), +('20000000-0000-4000-8000-000000000080','10000000-0000-4000-8000-000000000008','Natural','STUDIO-08-0',3500,0), +('20000000-0000-4000-8000-000000000081','10000000-0000-4000-8000-000000000008','Moss','STUDIO-08-1',3700,1), +('20000000-0000-4000-8000-000000000082','10000000-0000-4000-8000-000000000008','Ink','STUDIO-08-2',3900,2), +('20000000-0000-4000-8000-000000000090','10000000-0000-4000-8000-000000000009','Natural','STUDIO-09-0',3625,0), +('20000000-0000-4000-8000-000000000091','10000000-0000-4000-8000-000000000009','Moss','STUDIO-09-1',3825,1), +('20000000-0000-4000-8000-000000000092','10000000-0000-4000-8000-000000000009','Ink','STUDIO-09-2',4025,2), +('20000000-0000-4000-8000-000000000100','10000000-0000-4000-8000-000000000010','Natural','STUDIO-10-0',3750,0), +('20000000-0000-4000-8000-000000000101','10000000-0000-4000-8000-000000000010','Moss','STUDIO-10-1',3950,1), +('20000000-0000-4000-8000-000000000102','10000000-0000-4000-8000-000000000010','Ink','STUDIO-10-2',4150,2), +('20000000-0000-4000-8000-000000000110','10000000-0000-4000-8000-000000000011','Natural','STUDIO-11-0',3875,0), +('20000000-0000-4000-8000-000000000111','10000000-0000-4000-8000-000000000011','Moss','STUDIO-11-1',4075,1), +('20000000-0000-4000-8000-000000000112','10000000-0000-4000-8000-000000000011','Ink','STUDIO-11-2',4275,2), +('20000000-0000-4000-8000-000000000120','10000000-0000-4000-8000-000000000012','Natural','STUDIO-12-0',4000,0), +('20000000-0000-4000-8000-000000000121','10000000-0000-4000-8000-000000000012','Moss','STUDIO-12-1',4200,1), +('20000000-0000-4000-8000-000000000122','10000000-0000-4000-8000-000000000012','Ink','STUDIO-12-2',4400,2), +('20000000-0000-4000-8000-000000000130','10000000-0000-4000-8000-000000000013','Natural','STUDIO-13-0',4125,0), +('20000000-0000-4000-8000-000000000131','10000000-0000-4000-8000-000000000013','Moss','STUDIO-13-1',4325,1), +('20000000-0000-4000-8000-000000000132','10000000-0000-4000-8000-000000000013','Ink','STUDIO-13-2',4525,2), +('20000000-0000-4000-8000-000000000140','10000000-0000-4000-8000-000000000014','Natural','STUDIO-14-0',4250,0), +('20000000-0000-4000-8000-000000000141','10000000-0000-4000-8000-000000000014','Moss','STUDIO-14-1',4450,1), +('20000000-0000-4000-8000-000000000142','10000000-0000-4000-8000-000000000014','Ink','STUDIO-14-2',4650,2), +('20000000-0000-4000-8000-000000000150','10000000-0000-4000-8000-000000000015','Natural','STUDIO-15-0',4375,0), +('20000000-0000-4000-8000-000000000151','10000000-0000-4000-8000-000000000015','Moss','STUDIO-15-1',4575,1), +('20000000-0000-4000-8000-000000000152','10000000-0000-4000-8000-000000000015','Ink','STUDIO-15-2',4775,2), +('20000000-0000-4000-8000-000000000160','10000000-0000-4000-8000-000000000016','Natural','STUDIO-16-0',4500,0), +('20000000-0000-4000-8000-000000000161','10000000-0000-4000-8000-000000000016','Moss','STUDIO-16-1',4700,1), +('20000000-0000-4000-8000-000000000162','10000000-0000-4000-8000-000000000016','Ink','STUDIO-16-2',4900,2), +('20000000-0000-4000-8000-000000000170','10000000-0000-4000-8000-000000000017','Natural','STUDIO-17-0',4625,0), +('20000000-0000-4000-8000-000000000171','10000000-0000-4000-8000-000000000017','Moss','STUDIO-17-1',4825,1), +('20000000-0000-4000-8000-000000000172','10000000-0000-4000-8000-000000000017','Ink','STUDIO-17-2',5025,2), +('20000000-0000-4000-8000-000000000180','10000000-0000-4000-8000-000000000018','Natural','STUDIO-18-0',4750,0), +('20000000-0000-4000-8000-000000000181','10000000-0000-4000-8000-000000000018','Moss','STUDIO-18-1',4950,1), +('20000000-0000-4000-8000-000000000182','10000000-0000-4000-8000-000000000018','Ink','STUDIO-18-2',5150,2), +('20000000-0000-4000-8000-000000000190','10000000-0000-4000-8000-000000000019','Natural','STUDIO-19-0',4875,0), +('20000000-0000-4000-8000-000000000191','10000000-0000-4000-8000-000000000019','Moss','STUDIO-19-1',5075,1), +('20000000-0000-4000-8000-000000000192','10000000-0000-4000-8000-000000000019','Ink','STUDIO-19-2',5275,2), +('20000000-0000-4000-8000-000000000200','10000000-0000-4000-8000-000000000020','Natural','STUDIO-20-0',5000,0), +('20000000-0000-4000-8000-000000000201','10000000-0000-4000-8000-000000000020','Moss','STUDIO-20-1',5200,1), +('20000000-0000-4000-8000-000000000202','10000000-0000-4000-8000-000000000020','Ink','STUDIO-20-2',5400,2), +('20000000-0000-4000-8000-000000000210','10000000-0000-4000-8000-000000000021','Natural','STUDIO-21-0',5125,0), +('20000000-0000-4000-8000-000000000211','10000000-0000-4000-8000-000000000021','Moss','STUDIO-21-1',5325,1), +('20000000-0000-4000-8000-000000000212','10000000-0000-4000-8000-000000000021','Ink','STUDIO-21-2',5525,2), +('20000000-0000-4000-8000-000000000220','10000000-0000-4000-8000-000000000022','Natural','STUDIO-22-0',5250,0), +('20000000-0000-4000-8000-000000000221','10000000-0000-4000-8000-000000000022','Moss','STUDIO-22-1',5450,1), +('20000000-0000-4000-8000-000000000222','10000000-0000-4000-8000-000000000022','Ink','STUDIO-22-2',5650,2), +('20000000-0000-4000-8000-000000000230','10000000-0000-4000-8000-000000000023','Natural','STUDIO-23-0',5375,0), +('20000000-0000-4000-8000-000000000231','10000000-0000-4000-8000-000000000023','Moss','STUDIO-23-1',5575,1), +('20000000-0000-4000-8000-000000000232','10000000-0000-4000-8000-000000000023','Ink','STUDIO-23-2',5775,2), +('20000000-0000-4000-8000-000000000240','10000000-0000-4000-8000-000000000024','Natural','STUDIO-24-0',5500,0), +('20000000-0000-4000-8000-000000000241','10000000-0000-4000-8000-000000000024','Moss','STUDIO-24-1',5700,1), +('20000000-0000-4000-8000-000000000242','10000000-0000-4000-8000-000000000024','Ink','STUDIO-24-2',5900,2) +ON CONFLICT DO NOTHING; +INSERT INTO product_catalog.collections VALUES ('67bc2cf0-5b0f-45c8-bf6a-7b4bb5155a50','Quiet workspace',1) ON CONFLICT DO NOTHING; +INSERT INTO product_catalog.collection_items SELECT '67bc2cf0-5b0f-45c8-bf6a-7b4bb5155a50'::uuid,p.id,row_number() OVER (ORDER BY p.name)-1 FROM product_catalog.products p WHERE p.id IN ('10000000-0000-4000-8000-000000000001','10000000-0000-4000-8000-000000000003','10000000-0000-4000-8000-000000000005') AND EXISTS(SELECT 1 FROM product_catalog.collections WHERE id='67bc2cf0-5b0f-45c8-bf6a-7b4bb5155a50' AND revision=1) ON CONFLICT DO NOTHING; +COMMIT; diff --git a/applications/product-graphql/src/client/env.d.ts b/applications/product-graphql/src/client/env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/applications/product-graphql/src/client/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/applications/product-graphql/src/client/gql/gql.ts b/applications/product-graphql/src/client/gql/gql.ts new file mode 100644 index 00000000..a20f9f5d --- /dev/null +++ b/applications/product-graphql/src/client/gql/gql.ts @@ -0,0 +1,46 @@ +/* eslint-disable */ +import * as types from './graphql'; +import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core'; + +/** + * Map of all GraphQL operations in the project. + * + * This map has several performance disadvantages: + * 1. It is not tree-shakeable, so it will include all operations in the project. + * 2. It is not minifiable, so the string of a GraphQL query will be multiple times inside the bundle. + * 3. It does not support dead code elimination, so it will add unused operations. + * + * Therefore it is highly recommended to use the babel or swc plugin for production. + * Learn more about it here: https://the-guild.dev/graphql/codegen/plugins/presets/preset-client#reducing-bundle-size + */ +type Documents = { + "query Catalog($first: Int!, $offset: Int!, $search: String, $category: String) {\n products(first: $first, offset: $offset, search: $search, category: $category) {\n id\n name\n category\n description\n variants {\n id\n name\n sku\n priceCents\n }\n }\n}\n\nquery CollectionList {\n collections {\n id\n title\n revision\n }\n}\n\nquery CollectionDetail($id: ID!) {\n collection(id: $id) {\n id\n title\n revision\n products {\n id\n name\n category\n description\n variants {\n id\n name\n sku\n priceCents\n }\n }\n }\n}\n\nmutation NewCollection($title: String!, $productIds: [ID!]!) {\n createCollection(title: $title, productIds: $productIds) {\n id\n title\n revision\n products {\n id\n name\n category\n description\n variants {\n id\n name\n sku\n priceCents\n }\n }\n }\n}\n\nmutation SaveCollection($id: ID!, $baseRevision: Int!, $productIds: [ID!]!) {\n replaceCollection(id: $id, baseRevision: $baseRevision, productIds: $productIds) {\n status\n collection {\n id\n title\n revision\n products {\n id\n name\n category\n description\n variants {\n id\n name\n sku\n priceCents\n }\n }\n }\n }\n}": typeof types.CatalogDocument, +}; +const documents: Documents = { + "query Catalog($first: Int!, $offset: Int!, $search: String, $category: String) {\n products(first: $first, offset: $offset, search: $search, category: $category) {\n id\n name\n category\n description\n variants {\n id\n name\n sku\n priceCents\n }\n }\n}\n\nquery CollectionList {\n collections {\n id\n title\n revision\n }\n}\n\nquery CollectionDetail($id: ID!) {\n collection(id: $id) {\n id\n title\n revision\n products {\n id\n name\n category\n description\n variants {\n id\n name\n sku\n priceCents\n }\n }\n }\n}\n\nmutation NewCollection($title: String!, $productIds: [ID!]!) {\n createCollection(title: $title, productIds: $productIds) {\n id\n title\n revision\n products {\n id\n name\n category\n description\n variants {\n id\n name\n sku\n priceCents\n }\n }\n }\n}\n\nmutation SaveCollection($id: ID!, $baseRevision: Int!, $productIds: [ID!]!) {\n replaceCollection(id: $id, baseRevision: $baseRevision, productIds: $productIds) {\n status\n collection {\n id\n title\n revision\n products {\n id\n name\n category\n description\n variants {\n id\n name\n sku\n priceCents\n }\n }\n }\n }\n}": types.CatalogDocument, +}; + +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + * + * + * @example + * ```ts + * const query = graphql(`query GetUser($id: ID!) { user(id: $id) { name } }`); + * ``` + * + * The query argument is unknown! + * Please regenerate the types. + */ +export function graphql(source: string): unknown; + +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "query Catalog($first: Int!, $offset: Int!, $search: String, $category: String) {\n products(first: $first, offset: $offset, search: $search, category: $category) {\n id\n name\n category\n description\n variants {\n id\n name\n sku\n priceCents\n }\n }\n}\n\nquery CollectionList {\n collections {\n id\n title\n revision\n }\n}\n\nquery CollectionDetail($id: ID!) {\n collection(id: $id) {\n id\n title\n revision\n products {\n id\n name\n category\n description\n variants {\n id\n name\n sku\n priceCents\n }\n }\n }\n}\n\nmutation NewCollection($title: String!, $productIds: [ID!]!) {\n createCollection(title: $title, productIds: $productIds) {\n id\n title\n revision\n products {\n id\n name\n category\n description\n variants {\n id\n name\n sku\n priceCents\n }\n }\n }\n}\n\nmutation SaveCollection($id: ID!, $baseRevision: Int!, $productIds: [ID!]!) {\n replaceCollection(id: $id, baseRevision: $baseRevision, productIds: $productIds) {\n status\n collection {\n id\n title\n revision\n products {\n id\n name\n category\n description\n variants {\n id\n name\n sku\n priceCents\n }\n }\n }\n }\n}"): (typeof documents)["query Catalog($first: Int!, $offset: Int!, $search: String, $category: String) {\n products(first: $first, offset: $offset, search: $search, category: $category) {\n id\n name\n category\n description\n variants {\n id\n name\n sku\n priceCents\n }\n }\n}\n\nquery CollectionList {\n collections {\n id\n title\n revision\n }\n}\n\nquery CollectionDetail($id: ID!) {\n collection(id: $id) {\n id\n title\n revision\n products {\n id\n name\n category\n description\n variants {\n id\n name\n sku\n priceCents\n }\n }\n }\n}\n\nmutation NewCollection($title: String!, $productIds: [ID!]!) {\n createCollection(title: $title, productIds: $productIds) {\n id\n title\n revision\n products {\n id\n name\n category\n description\n variants {\n id\n name\n sku\n priceCents\n }\n }\n }\n}\n\nmutation SaveCollection($id: ID!, $baseRevision: Int!, $productIds: [ID!]!) {\n replaceCollection(id: $id, baseRevision: $baseRevision, productIds: $productIds) {\n status\n collection {\n id\n title\n revision\n products {\n id\n name\n category\n description\n variants {\n id\n name\n sku\n priceCents\n }\n }\n }\n }\n}"]; + +export function graphql(source: string) { + return (documents as any)[source] ?? {}; +} + +export type DocumentType> = TDocumentNode extends DocumentNode< infer TType, any> ? TType : never; \ No newline at end of file diff --git a/applications/product-graphql/src/client/gql/graphql.ts b/applications/product-graphql/src/client/gql/graphql.ts new file mode 100644 index 00000000..3f07e939 --- /dev/null +++ b/applications/product-graphql/src/client/gql/graphql.ts @@ -0,0 +1,55 @@ +/* eslint-disable */ +/** Internal type. DO NOT USE DIRECTLY. */ +type Exact = { [K in keyof T]: T[K] }; +/** Internal type. DO NOT USE DIRECTLY. */ +export type Incremental = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never }; +import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core'; +export type SaveStatus = + | 'CONFLICT' + | 'OK'; + +export type CatalogQueryVariables = Exact<{ + first: number; + offset: number; + search?: string | null | undefined; + category?: string | null | undefined; +}>; + + +export type CatalogQuery = { products: Array<{ id: string, name: string, category: string, description: string, variants: Array<{ id: string, name: string, sku: string, priceCents: number }> }> }; + +export type CollectionListQueryVariables = Exact<{ [key: string]: never; }>; + + +export type CollectionListQuery = { collections: Array<{ id: string, title: string, revision: number }> }; + +export type CollectionDetailQueryVariables = Exact<{ + id: string | number; +}>; + + +export type CollectionDetailQuery = { collection: { id: string, title: string, revision: number, products: Array<{ id: string, name: string, category: string, description: string, variants: Array<{ id: string, name: string, sku: string, priceCents: number }> }> } | null }; + +export type NewCollectionMutationVariables = Exact<{ + title: string; + productIds: Array | string | number; +}>; + + +export type NewCollectionMutation = { createCollection: { id: string, title: string, revision: number, products: Array<{ id: string, name: string, category: string, description: string, variants: Array<{ id: string, name: string, sku: string, priceCents: number }> }> } }; + +export type SaveCollectionMutationVariables = Exact<{ + id: string | number; + baseRevision: number; + productIds: Array | string | number; +}>; + + +export type SaveCollectionMutation = { replaceCollection: { status: SaveStatus, collection: { id: string, title: string, revision: number, products: Array<{ id: string, name: string, category: string, description: string, variants: Array<{ id: string, name: string, sku: string, priceCents: number }> }> } | null } }; + + +export const CatalogDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"Catalog"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"first"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"offset"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"search"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"category"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"products"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"Variable","name":{"kind":"Name","value":"first"}}},{"kind":"Argument","name":{"kind":"Name","value":"offset"},"value":{"kind":"Variable","name":{"kind":"Name","value":"offset"}}},{"kind":"Argument","name":{"kind":"Name","value":"search"},"value":{"kind":"Variable","name":{"kind":"Name","value":"search"}}},{"kind":"Argument","name":{"kind":"Name","value":"category"},"value":{"kind":"Variable","name":{"kind":"Name","value":"category"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"variants"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"sku"}},{"kind":"Field","name":{"kind":"Name","value":"priceCents"}}]}}]}}]}}]} as unknown as DocumentNode; +export const CollectionListDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"CollectionList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"collections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"revision"}}]}}]}}]} as unknown as DocumentNode; +export const CollectionDetailDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"CollectionDetail"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"collection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"revision"}},{"kind":"Field","name":{"kind":"Name","value":"products"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"variants"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"sku"}},{"kind":"Field","name":{"kind":"Name","value":"priceCents"}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const NewCollectionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"NewCollection"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"title"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"productIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createCollection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"title"},"value":{"kind":"Variable","name":{"kind":"Name","value":"title"}}},{"kind":"Argument","name":{"kind":"Name","value":"productIds"},"value":{"kind":"Variable","name":{"kind":"Name","value":"productIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"revision"}},{"kind":"Field","name":{"kind":"Name","value":"products"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"variants"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"sku"}},{"kind":"Field","name":{"kind":"Name","value":"priceCents"}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const SaveCollectionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SaveCollection"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"baseRevision"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"productIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"replaceCollection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}},{"kind":"Argument","name":{"kind":"Name","value":"baseRevision"},"value":{"kind":"Variable","name":{"kind":"Name","value":"baseRevision"}}},{"kind":"Argument","name":{"kind":"Name","value":"productIds"},"value":{"kind":"Variable","name":{"kind":"Name","value":"productIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"collection"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"revision"}},{"kind":"Field","name":{"kind":"Name","value":"products"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"variants"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"sku"}},{"kind":"Field","name":{"kind":"Name","value":"priceCents"}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file diff --git a/applications/product-graphql/src/client/gql/index.ts b/applications/product-graphql/src/client/gql/index.ts new file mode 100644 index 00000000..93bcc44c --- /dev/null +++ b/applications/product-graphql/src/client/gql/index.ts @@ -0,0 +1,2 @@ +/* eslint-disable */ +export * from "./gql"; \ No newline at end of file diff --git a/applications/product-graphql/src/client/main.tsx b/applications/product-graphql/src/client/main.tsx new file mode 100644 index 00000000..90b49419 --- /dev/null +++ b/applications/product-graphql/src/client/main.tsx @@ -0,0 +1,394 @@ +import React, { useEffect, useState } from "react"; +import { createRoot } from "react-dom/client"; +import { + Provider, + createClient, + cacheExchange, + fetchExchange, + useQuery, + useMutation, +} from "urql"; +import { + CatalogDocument, + CollectionListDocument, + CollectionDetailDocument, + NewCollectionDocument, + SaveCollectionDocument, + type CatalogQuery, +} from "./gql/graphql"; +import "./style.css"; +type Product = CatalogQuery["products"][number]; +const client = createClient({ + url: window.location.origin + "/graphql", + exchanges: [cacheExchange, fetchExchange], + requestPolicy: "network-only", +}); +const seed = "67bc2cf0-5b0f-45c8-bf6a-7b4bb5155a50"; +function Studio() { + const [searchText, setSearchText] = useState(""); + const [search, setSearch] = useState(""); + const [category, setCategory] = useState(""); + const [offset, setOffset] = useState(0); + const [id, setId] = useState( + new URLSearchParams(window.location.search).get("collection") || seed, + ); + const [catalog] = useQuery({ + query: CatalogDocument, + variables: { + first: 12, + offset, + search: search || null, + category: category || null, + }, + }); + const [list, reloadList] = useQuery({ query: CollectionListDocument }); + const [detail, reload] = useQuery({ + query: CollectionDetailDocument, + variables: { id }, + }); + const [creating, create] = useMutation(NewCollectionDocument); + const [saving, save] = useMutation(SaveCollectionDocument); + const [draft, setDraft] = useState([]); + const [loaded, setLoaded] = useState<{ + title: string; + revision: number; + } | null>(null); + const [dirty, setDirty] = useState(false); + const [message, setMessage] = useState(""); + const [conflict, setConflict] = useState(false); + const [name, setName] = useState("New collection"); + useEffect(() => { + if (detail.data?.collection === null) { + setLoaded(null); + setDraft([]); + setDirty(false); + setConflict(false); + } + if (detail.data?.collection?.id === id) { + setDraft(detail.data.collection.products); + setLoaded(detail.data.collection); + setDirty(false); + setConflict(false); + setMessage(""); + } + }, [detail.data, id]); + const missing = !detail.fetching && detail.data?.collection === null; + const busy = detail.fetching || saving.fetching || creating.fetching; + function edit(next: Product[]) { + setDraft(next); + setDirty(true); + setMessage(""); + } + function activate(next: string) { + const url = new URL(window.location.href); + url.searchParams.set("collection", next); + history.replaceState(null, "", url); + setId(next); + } + function choose(next: string) { + if (next === id) return; + if (dirty && !confirm("Discard unsaved collection changes?")) return; + activate(next); + setLoaded(null); + } + async function persist() { + if (!loaded) return; + const result = await save({ + id, + baseRevision: loaded.revision, + productIds: draft.map((p) => p.id), + }); + if (result.error) { + setMessage(result.error.message); + return; + } + const answer = result.data?.replaceCollection; + if (answer?.status === "CONFLICT") { + setConflict(true); + setMessage( + "Collection changed in another tab. Your draft is still here.", + ); + return; + } + if (answer?.collection) { + setLoaded(answer.collection); + setDraft(answer.collection.products); + setDirty(false); + setMessage("Collection saved"); + reloadList({ requestPolicy: "network-only" }); + } + } + async function newCollection() { + const result = await create({ + title: name, + productIds: draft.map((p) => p.id), + }); + if (result.error) { + setMessage(result.error.message); + return; + } + if (result.data) { + activate(result.data.createCollection.id); + setLoaded(null); + setDirty(false); + reloadList({ requestPolicy: "network-only" }); + } + } + return ( + <> +
+ + ▦{" "} + + Collection studioMake room for good things. + + + Trusted local demo +
+
+
+
+

THE CURATOR’S DESK

+

A considered collection.

+

Explore the catalogue. Choose the pieces. Save the order.

+
+
+ CATALOGUE + 24 + objects · 3 variants each +
+
+
+
+
{ + e.preventDefault(); + setSearch(searchText); + setOffset(0); + }} + > + setSearchText(e.target.value)} + /> + + +
+ {catalog.error &&

{catalog.error.message}

} +
+ {catalog.data?.products.map((product) => ( +
+
+ + {product.category === "Desk" + ? "▱" + : product.category === "Travel" + ? "◈" + : "◉"} + + {product.category} +
+
+

{product.name}

+

{product.description}

+
+ + {product.variants.length} variants · from $ + {( + Math.min( + ...product.variants.map((v) => v.priceCents), + ) / 100 + ).toFixed(2)} + +
    + {product.variants.map((v) => ( +
  • + {v.name} + ${(v.priceCents / 100).toFixed(2)} + {v.sku} +
  • + ))} +
+
+ +
+
+ ))} +
+ +
+ +
+
+ Yoga · Pothos · Drizzle · Code Generator · urql{" "} + ClickHouse Managed Postgres +
+
+ + ); +} +createRoot(document.getElementById("root")!).render( + + + , +); diff --git a/applications/product-graphql/src/client/operations.graphql b/applications/product-graphql/src/client/operations.graphql new file mode 100644 index 00000000..9660bd76 --- /dev/null +++ b/applications/product-graphql/src/client/operations.graphql @@ -0,0 +1,90 @@ +query Catalog($first: Int!, $offset: Int!, $search: String, $category: String) { + products( + first: $first + offset: $offset + search: $search + category: $category + ) { + id + name + category + description + variants { + id + name + sku + priceCents + } + } +} +query CollectionList { + collections { + id + title + revision + } +} +query CollectionDetail($id: ID!) { + collection(id: $id) { + id + title + revision + products { + id + name + category + description + variants { + id + name + sku + priceCents + } + } + } +} +mutation NewCollection($title: String!, $productIds: [ID!]!) { + createCollection(title: $title, productIds: $productIds) { + id + title + revision + products { + id + name + category + description + variants { + id + name + sku + priceCents + } + } + } +} +mutation SaveCollection($id: ID!, $baseRevision: Int!, $productIds: [ID!]!) { + replaceCollection( + id: $id + baseRevision: $baseRevision + productIds: $productIds + ) { + status + collection { + id + title + revision + products { + id + name + category + description + variants { + id + name + sku + priceCents + } + } + } + } +} diff --git a/applications/product-graphql/src/client/style.css b/applications/product-graphql/src/client/style.css new file mode 100644 index 00000000..b0189cbe --- /dev/null +++ b/applications/product-graphql/src/client/style.css @@ -0,0 +1,356 @@ +* { + box-sizing: border-box; +} +body { + margin: 0; + background: #f8f6f0; + color: #263c36; + font-family: system-ui, sans-serif; + font-size: 14px; +} +button, +input, +select { + font: inherit; +} +button { + cursor: pointer; + padding: 10px 14px; + background: #fffdf7; + border: 1px solid #d8dbcd; + border-radius: 5px; + color: #263c36; +} +button:disabled { + opacity: 0.5; + cursor: default; +} +input, +select { + min-width: 0; + padding: 12px; + border: 1px solid #d8dbcd; + border-radius: 5px; + background: #fffdf7; + color: #263c36; +} +header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 24px 42px; + border-bottom: 1px solid #d8dbcd; + background: #fffcf5; +} +.brand { + display: flex; + align-items: center; + gap: 14px; + text-decoration: none; + color: inherit; + font-size: 26px; +} +.brand span { + font-size: 21px; + font-weight: 650; +} +.brand small { + display: block; + font-size: 12px; + font-weight: 400; + margin-top: 4px; + color: #728178; +} +.badge { + font-size: 12px; + color: #74806e; +} +.badge:before { + content: "●"; + margin-right: 9px; + color: #94a871; +} +main { + padding: 34px 42px; +} +.intro { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 32px; +} +.eyebrow { + font-size: 10px; + letter-spacing: 2.6px; + color: #75866b; +} +h1 { + font-family: Georgia, serif; + font-weight: 400; + font-size: 46px; + letter-spacing: -1px; + margin: 12px 0; +} +.intro p:not(.eyebrow) { + color: #758178; + font-size: 16px; +} +.stat { + padding: 18px 30px; + border: 1px solid #d8dbcd; + border-radius: 8px; + display: grid; + grid-template-columns: 1fr auto; + gap: 4px 22px; + align-items: center; +} +.stat small { + letter-spacing: 1.6px; + font-size: 9px; +} +.stat strong { + font-family: Georgia, serif; + font-size: 44px; + font-weight: 400; + grid-column: 2; + grid-row: 1/3; +} +.stat span { + font-size: 11px; + color: #758178; +} +.layout { + display: grid; + grid-template-columns: minmax(0, 1fr) 355px; + gap: 30px; +} +.filters { + display: flex; + gap: 10px; + margin-bottom: 22px; +} +.filters input { + flex: 1; +} +.cards { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 20px; +} +.card { + background: #fffdf7; + border: 1px solid #d8dbcd; + border-radius: 9px; + overflow: hidden; +} +.illustration { + height: 120px; + display: flex; + align-items: center; + justify-content: center; + position: relative; + color: #5a7365; + background: #e5e8d7; +} +.illustration span { + font-size: 85px; + line-height: 1; + transform: rotate(-12deg); +} +.illustration small { + position: absolute; + bottom: 12px; + left: 14px; + font-size: 9px; + text-transform: uppercase; + letter-spacing: 1.5px; +} +.travel { + background: #e5d8bd; + color: #987d51; +} +.lighting { + background: #dce4e4; + color: #708c93; +} +.card-body { + padding: 16px; +} +.card h2 { + font-family: Georgia, serif; + font-size: 21px; + font-weight: 400; + margin: 0 0 8px; +} +.card p { + font-size: 12px; + line-height: 1.5; + color: #7a8275; + margin: 0 0 12px; + min-height: 36px; +} +.card summary { + font-size: 11px; + cursor: pointer; +} +.card ul { + padding: 0; + list-style: none; +} +.card li { + display: grid; + grid-template-columns: 1fr auto; + font-size: 11px; + padding: 7px 0; + border-bottom: 1px solid #e8e7df; +} +.card li small { + grid-column: 1/3; + color: #7a8275; +} +.card button { + margin-top: 14px; + width: 100%; + font-size: 11px; +} +.catalog nav { + display: flex; + justify-content: space-between; + align-items: center; + margin: 24px 0; + color: #7a8275; + font-size: 12px; +} +aside { + background: #eef0e2; + border: 1px solid #d6ddc5; + border-radius: 9px; + padding: 24px; + height: max-content; + position: sticky; + top: 20px; +} +aside > select { + width: 100%; + margin: 8px 0 18px; +} +.collection-heading { + display: flex; + gap: 15px; + align-items: center; + justify-content: space-between; +} +.collection-heading h2 { + font-family: Georgia, serif; + font-size: 26px; + font-weight: 400; + margin: 0; +} +.collection-heading span { + padding: 6px 9px; + background: #dce4cc; + border-radius: 4px; + font-size: 12px; +} +.subtle, +.footnote { + color: #788471; + font-size: 11px; + line-height: 1.6; +} +.selection { + list-style: none; + padding: 0; + margin: 24px 0; +} +.selection li { + display: flex; + align-items: center; + gap: 12px; + border-top: 1px solid #d7ddca; + padding: 14px 0; +} +.number { + font-size: 10px; + color: #839572; +} +.selection strong { + font-size: 12px; + font-weight: 500; +} +.selection small { + display: block; + font-size: 10px; + color: #7a8275; + margin-top: 5px; +} +.item-actions { + display: flex; + margin-left: auto; + gap: 4px; +} +.item-actions button { + padding: 3px 7px; + background: transparent; + font-size: 13px; +} +.status { + font-size: 12px; + line-height: 1.5; +} +.primary, +.reload { + width: 100%; + margin-top: 7px; +} +.primary { + background: #3c5646; + border-color: #3c5646; + color: white; +} +.reload { + background: transparent; + font-size: 11px; +} +.new-collection { + border-top: 1px solid #d7ddca; + margin-top: 24px; + padding-top: 20px; +} +.new-collection label { + font-size: 11px; + display: block; + margin-bottom: 9px; +} +.new-collection input, +.new-collection button { + width: 100%; + margin-bottom: 8px; +} +.empty { + font-family: Georgia, serif; + font-size: 19px; + color: #75866b; + padding: 20px 0; +} +.footnote { + margin-top: 18px; +} +footer { + display: flex; + justify-content: space-between; + color: #89917f; + font-size: 10px; + margin-top: 24px; +} +@media (max-width: 1000px) { + .layout { + grid-template-columns: 1fr; + } + .cards { + grid-template-columns: repeat(2, 1fr); + } + aside { + position: static; + } +} diff --git a/applications/product-graphql/src/server/collections.ts b/applications/product-graphql/src/server/collections.ts new file mode 100644 index 00000000..e6732e47 --- /dev/null +++ b/applications/product-graphql/src/server/collections.ts @@ -0,0 +1,108 @@ +import { and, eq, inArray, asc } from "drizzle-orm"; +import type { Database } from "./database"; +import { + products, + collections, + items, + type Product, + type Collection, +} from "./tables"; +import { contents, uuid, title, revision, bad } from "./validation"; +export type CollectionSnapshot = Collection & { products: Product[] }; +async function known(tx: Pick, ids: string[]) { + const rows = ids.length + ? await tx.select().from(products).where(inArray(products.id, ids)) + : []; + if (rows.length !== ids.length) bad("A chosen product no longer exists"); + return ids.map((id) => rows.find((row) => row.id === id)!); +} +export async function readCollections( + db: Database, + id?: string, +): Promise { + return db.transaction( + async (tx) => { + const headers = await tx + .select() + .from(collections) + .where(id ? eq(collections.id, uuid(id)) : undefined) + .orderBy(asc(collections.title), asc(collections.id)) + .limit(20); + if (!headers.length) return []; + const rows = await tx + .select({ collectionId: items.collectionId, product: products }) + .from(items) + .innerJoin(products, eq(items.productId, products.id)) + .where( + inArray( + items.collectionId, + headers.map((row) => row.id), + ), + ) + .orderBy(asc(items.position)); + return headers.map((header) => ({ + ...header, + products: rows + .filter((row) => row.collectionId === header.id) + .map((row) => row.product), + })); + }, + { isolationLevel: "repeatable read", accessMode: "read only" }, + ); +} +export async function createCollection( + db: Database, + name: string, + ids: string[], +) { + ids = contents(ids); + name = title(name); + return db.transaction(async (tx) => { + const selected = await known(tx, ids); + const [row] = await tx + .insert(collections) + .values({ id: crypto.randomUUID(), title: name, revision: 1 }) + .returning(); + if (ids.length) + await tx.insert(items).values( + ids.map((productId, position) => ({ + collectionId: row.id, + productId, + position, + })), + ); + return { ...row, products: selected }; + }); +} +export async function replaceCollection( + db: Database, + id: string, + base: number, + ids: string[], +) { + uuid(id); + revision(base); + ids = contents(ids); + return db.transaction(async (tx) => { + const [row] = await tx + .update(collections) + .set({ revision: base + 1 }) + .where(and(eq(collections.id, id), eq(collections.revision, base))) + .returning(); + if (!row) return { status: "CONFLICT" as const, collection: null }; + const selected = await known(tx, ids); + await tx.delete(items).where(eq(items.collectionId, id)); + if (ids.length) + await tx.insert(items).values( + ids.map((productId, position) => ({ + collectionId: id, + productId, + position, + })), + ); + return { + status: "OK" as const, + collection: { ...row, products: selected }, + }; + }); +} diff --git a/applications/product-graphql/src/server/context.ts b/applications/product-graphql/src/server/context.ts new file mode 100644 index 00000000..ec4e231b --- /dev/null +++ b/applications/product-graphql/src/server/context.ts @@ -0,0 +1,19 @@ +import DataLoader from "dataloader"; +import { inArray, asc } from "drizzle-orm"; +import type { Pool } from "pg"; +import { database } from "./database"; +import { variants, type Variant } from "./tables"; +export function context(pool: Pool) { + const count = { reads: 0 }; + const db = database(pool, count); + const variantLoader = new DataLoader(async (ids) => { + const rows = await db + .select() + .from(variants) + .where(inArray(variants.productId, [...ids])) + .orderBy(asc(variants.sku)); + return ids.map((id) => rows.filter((row) => row.productId === id)); + }); + return { db, count, variantLoader }; +} +export type Context = ReturnType; diff --git a/applications/product-graphql/src/server/database.ts b/applications/product-graphql/src/server/database.ts new file mode 100644 index 00000000..b0308e3a --- /dev/null +++ b/applications/product-graphql/src/server/database.ts @@ -0,0 +1,89 @@ +import { Pool } from "pg"; +import { drizzle } from "drizzle-orm/node-postgres"; +export async function connectDatabase( + urlText = process.env.DATABASE_URL, + caPath = process.env.PG_CA_CERT_PATH, +) { + if (!urlText) throw new Error("DATABASE_URL is required"); + const url = new URL(urlText); + if ( + !["postgres:", "postgresql:"].includes(url.protocol) || + url.search || + url.hash + ) + throw new Error("Use a plain Postgres URL without query parameters"); + const local = process.env.DATABASE_LOCAL === "true"; + if (local && !["127.0.0.1", "localhost", "[::1]"].includes(url.hostname)) + throw new Error("Local mode requires loopback"); + if (!local && !caPath) throw new Error("PG_CA_CERT_PATH required"); + const ca = local ? undefined : await Bun.file(caPath!).text(); + const certificates = + ca?.match( + /-----BEGIN CERTIFICATE-----[\s\S]+?-----END CERTIFICATE-----/g, + ) ?? []; + if (!local && (certificates.length < 1 || certificates.length > 16)) + throw new Error("CA file must contain 1..16 PEM certificates"); + async function connect(trustedCa: string | undefined) { + const pool = new Pool({ + connectionString: url.toString(), + max: 5, + connectionTimeoutMillis: 10000, + idleTimeoutMillis: 30000, + ssl: local + ? false + : { ca: trustedCa, servername: url.hostname, rejectUnauthorized: true }, + }); + try { + await pool.query("SELECT 1"); + return pool; + } catch (error) { + await pool.end(); + throw error; + } + } + try { + return await connect(ca); + } catch (originalError) { + if ( + errorCode(originalError) !== "CERT_SIGNATURE_FAILURE" || + certificates.length < 2 + ) + throw originalError; + // Bun1.4.2 can reject duplicate-subject roots in a rotation bundle. + // Only supplied anchors are retried; certificate and hostname checks remain enabled. + for (const certificate of certificates) { + try { + return await connect(certificate); + } catch (error) { + if (!CA_ERRORS.has(errorCode(error))) throw error; + } + } + throw originalError; + } +} +function errorCode(error: unknown) { + return error !== null && typeof error === "object" && "code" in error + ? String(error.code) + : ""; +} +const CA_ERRORS = new Set([ + "CERT_SIGNATURE_FAILURE", + "UNABLE_TO_GET_ISSUER_CERT", + "UNABLE_TO_GET_ISSUER_CERT_LOCALLY", + "UNABLE_TO_VERIFY_LEAF_SIGNATURE", + "SELF_SIGNED_CERT_IN_CHAIN", + "DEPTH_ZERO_SELF_SIGNED_CERT", + "CERT_HAS_EXPIRED", + "CERT_NOT_YET_VALID", +]); + +export function database(pool: Pool, counter?: { reads: number }) { + return drizzle(pool, { + logger: { + logQuery(query) { + if (/^select\b/i.test(query)) counter && counter.reads++; + }, + }, + }); +} +export type Database = ReturnType; diff --git a/applications/product-graphql/src/server/graphql.ts b/applications/product-graphql/src/server/graphql.ts new file mode 100644 index 00000000..ac648bd0 --- /dev/null +++ b/applications/product-graphql/src/server/graphql.ts @@ -0,0 +1,140 @@ +import SchemaBuilder from "@pothos/core"; +import { asc, eq, ilike, and } from "drizzle-orm"; +import type { Context } from "./context"; +import { products, collections, type Product, type Variant } from "./tables"; +import { + readCollections, + type CollectionSnapshot, + createCollection, + replaceCollection, +} from "./collections"; +import { page, uuid, bad } from "./validation"; +const builder = new SchemaBuilder<{ + Context: Context; + DefaultFieldNullability: false; +}>({ defaultFieldNullability: false }); +const VariantRef = builder.objectRef("Variant").implement({ + fields: (t) => ({ + id: t.exposeID("id"), + name: t.exposeString("name"), + sku: t.exposeString("sku"), + priceCents: t.exposeInt("priceCents"), + }), +}); +const ProductRef = builder.objectRef("Product").implement({ + fields: (t) => ({ + id: t.exposeID("id"), + name: t.exposeString("name"), + category: t.exposeString("category"), + description: t.exposeString("description"), + variants: t.field({ + type: [VariantRef], + resolve: (product, _args, ctx) => ctx.variantLoader.load(product.id), + }), + }), +}); +const CollectionRef = builder + .objectRef("Collection") + .implement({ + fields: (t) => ({ + id: t.exposeID("id"), + title: t.exposeString("title"), + revision: t.exposeInt("revision"), + products: t.field({ + type: [ProductRef], + resolve: (collection) => collection.products, + }), + }), + }); +const Status = builder.enumType("SaveStatus", { + values: ["OK", "CONFLICT"] as const, +}); +const SaveRef = builder + .objectRef<{ + status: "OK" | "CONFLICT"; + collection: CollectionSnapshot | null; + }>("CollectionSave") + .implement({ + fields: (t) => ({ + status: t.field({ type: Status, resolve: (r) => r.status }), + collection: t.field({ + type: CollectionRef, + nullable: true, + resolve: (r) => r.collection, + }), + }), + }); +builder.queryType({ + fields: (t) => ({ + products: t.field({ + type: [ProductRef], + args: { + first: t.arg.int({ required: true }), + offset: t.arg.int({ required: true }), + search: t.arg.string(), + category: t.arg.string(), + }, + resolve: (_root, args, ctx) => { + page(args.first, args.offset); + if ((args.search?.length ?? 0) > 60) bad("Search is too long"); + if ( + args.category && + !["Desk", "Travel", "Lighting"].includes(args.category) + ) + bad("Unknown category"); + return ctx.db + .select() + .from(products) + .where( + and( + args.search + ? ilike( + products.name, + "%" + args.search.replace(/[\\%_]/g, "\\$&") + "%", + ) + : undefined, + args.category ? eq(products.category, args.category) : undefined, + ), + ) + .orderBy(asc(products.name), asc(products.id)) + .limit(args.first) + .offset(args.offset); + }, + }), + collections: t.field({ + type: [CollectionRef], + resolve: (_r, _a, ctx) => readCollections(ctx.db), + }), + collection: t.field({ + type: CollectionRef, + nullable: true, + args: { id: t.arg.id({ required: true }) }, + resolve: async (_r, args, ctx) => + (await readCollections(ctx.db, uuid(args.id)))[0] ?? null, + }), + }), +}); +builder.mutationType({ + fields: (t) => ({ + createCollection: t.field({ + type: CollectionRef, + args: { + title: t.arg.string({ required: true }), + productIds: t.arg.idList({ required: true }), + }, + resolve: (_r, args, ctx) => + createCollection(ctx.db, args.title, args.productIds), + }), + replaceCollection: t.field({ + type: SaveRef, + args: { + id: t.arg.id({ required: true }), + baseRevision: t.arg.int({ required: true }), + productIds: t.arg.idList({ required: true }), + }, + resolve: (_r, args, ctx) => + replaceCollection(ctx.db, args.id, args.baseRevision, args.productIds), + }), + }), +}); +export const schema = builder.toSchema(); diff --git a/applications/product-graphql/src/server/index.ts b/applications/product-graphql/src/server/index.ts new file mode 100644 index 00000000..3d60ee1f --- /dev/null +++ b/applications/product-graphql/src/server/index.ts @@ -0,0 +1,38 @@ +import { createYoga } from "graphql-yoga"; +import { schema } from "./graphql"; +import { context } from "./context"; +import { connectDatabase } from "./database"; +const pool = await connectDatabase(); +const origin = process.env.APP_ORIGIN || "http://127.0.0.1:3001"; +const yoga = createYoga({ + schema, + graphqlEndpoint: "/graphql", + graphiql: false, + logging: false, + cors: false, + context: () => context(pool), +}); +const server = Bun.serve({ + hostname: "127.0.0.1", + port: Number(process.env.PORT || 3001), + async fetch(request) { + const url = new URL(request.url); + if ( + url.host !== new URL(origin).host || + (request.method !== "GET" && request.headers.get("origin") !== origin) + ) + return new Response("Forbidden", { status: 403 }); + if (url.pathname === "/graphql") return yoga.fetch(request); + if (url.pathname === "/") return new Response(Bun.file("dist/index.html")); + if (/^\/assets\/[a-zA-Z0-9_.-]+$/.test(url.pathname)) + return new Response(Bun.file("dist" + url.pathname)); + return new Response("Not found", { status: 404 }); + }, +}); +console.log("Collection studio listening on " + origin); +for (const signal of ["SIGTERM", "SIGINT"] as const) + process.on(signal, async () => { + server.stop(); + await pool.end(); + process.exit(0); + }); diff --git a/applications/product-graphql/src/server/tables.ts b/applications/product-graphql/src/server/tables.ts new file mode 100644 index 00000000..22a565a1 --- /dev/null +++ b/applications/product-graphql/src/server/tables.ts @@ -0,0 +1,48 @@ +import { + pgSchema, + uuid, + text, + integer, + primaryKey, + unique, +} from "drizzle-orm/pg-core"; +const s = pgSchema("product_catalog"); +export const products = s.table("products", { + id: uuid().primaryKey(), + name: text().notNull(), + category: text().notNull(), + description: text().notNull(), +}); +export const variants = s.table("variants", { + id: uuid().primaryKey(), + productId: uuid("product_id") + .notNull() + .references(() => products.id), + name: text().notNull(), + sku: text().notNull(), + priceCents: integer("price_cents").notNull(), +}); +export const collections = s.table("collections", { + id: uuid().primaryKey(), + title: text().notNull(), + revision: integer().notNull(), +}); +export const items = s.table( + "collection_items", + { + collectionId: uuid("collection_id") + .notNull() + .references(() => collections.id, { onDelete: "cascade" }), + productId: uuid("product_id") + .notNull() + .references(() => products.id), + position: integer().notNull(), + }, + (t) => [ + primaryKey({ columns: [t.collectionId, t.productId] }), + unique().on(t.collectionId, t.position), + ], +); +export type Product = typeof products.$inferSelect; +export type Variant = typeof variants.$inferSelect; +export type Collection = typeof collections.$inferSelect; diff --git a/applications/product-graphql/src/server/validation.ts b/applications/product-graphql/src/server/validation.ts new file mode 100644 index 00000000..86c1f309 --- /dev/null +++ b/applications/product-graphql/src/server/validation.ts @@ -0,0 +1,39 @@ +import { GraphQLError } from "graphql"; +export function bad(message: string): never { + throw new GraphQLError(message, { extensions: { code: "BAD_USER_INPUT" } }); +} +export function uuid(value: string) { + if ( + !/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test( + value, + ) + ) + bad("Expected a UUID"); + return value; +} +export function contents(ids: string[]) { + if (ids.length > 12 || new Set(ids).size !== ids.length) + bad("Choose up to 12 distinct products"); + return ids.map(uuid); +} +export function page(first: number, offset: number) { + if ( + !Number.isInteger(first) || + first < 1 || + first > 20 || + !Number.isInteger(offset) || + offset < 0 || + offset > 10000 + ) + bad("Use first 1..20 and offset 0..10000"); +} +export function title(value: string) { + const v = value.trim(); + if (v.length < 1 || v.length > 60) bad("Use a title of 1..60 characters"); + return v; +} +export function revision(value: number) { + if (!Number.isInteger(value) || value < 1 || value >= 2147483647) + bad("Invalid revision"); + return value; +} diff --git a/applications/product-graphql/tests/browser/studio.spec.ts b/applications/product-graphql/tests/browser/studio.spec.ts new file mode 100644 index 00000000..bdf6fdde --- /dev/null +++ b/applications/product-graphql/tests/browser/studio.spec.ts @@ -0,0 +1,60 @@ +import { test, expect } from "@playwright/test"; +test("browse nested variants, create, reorder, save and recover conflict", async ({ + page, + context, +}) => { + await page.goto("/"); + await expect(page.getByTestId("revision")).toHaveText(/^r\d+$/); + await page.getByLabel("Category").selectOption("Travel"); + await expect(page.getByTestId("product").first()).toContainText("Travel"); + await page.getByLabel("Category").selectOption(""); + await page.getByLabel("Search products").fill("Canvas"); + await page.getByRole("button", { name: "Search", exact: true }).click(); + await expect(page.getByTestId("product")).toHaveCount(1); + await page.getByText("3 variants · from").click(); + await expect(page.getByText("STUDIO-02-0")).toBeVisible(); + await page + .getByRole("button", { name: "Add Canvas weekender", exact: true }) + .click(); + await page + .getByLabel("Save this edit as a new collection") + .fill("Weekend edit"); + await page + .getByRole("button", { name: "Create collection", exact: true }) + .click(); + await expect( + page.getByRole("heading", { name: "Weekend edit", exact: true }), + ).toBeVisible(); + await expect(page.getByTestId("revision")).toHaveText("r1"); + const other = await context.newPage(); + const selected = new URL(page.url()).searchParams.get("collection")!; + await other.goto("/?collection=" + selected); + await expect( + other.getByRole("heading", { name: "Weekend edit", exact: true }), + ).toBeVisible(); + await expect(other.getByTestId("revision")).toHaveText("r1"); + await page.getByLabel("Move Canvas weekender up").click(); + await page + .getByRole("button", { name: "Save collection", exact: true }) + .click(); + await expect(page.getByTestId("revision")).toHaveText("r2"); + await page.reload(); + await expect(page.locator(".selection li").nth(2)).toContainText( + "Canvas weekender", + ); + await other.getByLabel("Remove Arc desk lamp").click(); + await other + .getByRole("button", { name: "Save collection", exact: true }) + .click(); + await expect(other.getByRole("status")).toContainText("another tab"); + other.once("dialog", (d) => d.accept()); + await other + .getByRole("button", { name: "Reload saved collection", exact: true }) + .click(); + await expect(other.getByTestId("revision")).toHaveText("r2"); + await page.screenshot({ + path: "test-results/product-graphql.png", + fullPage: true, + }); + await other.close(); +}); diff --git a/applications/product-graphql/tests/database.test.ts b/applications/product-graphql/tests/database.test.ts new file mode 100644 index 00000000..ff8e2e4b --- /dev/null +++ b/applications/product-graphql/tests/database.test.ts @@ -0,0 +1,200 @@ +import { + beforeAll, + afterAll, + beforeEach, + afterEach, + test, + expect, +} from "bun:test"; +import { setDefaultTimeout } from "bun:test"; +setDefaultTimeout(30000); +import { graphql, execute } from "graphql"; +import { createYoga } from "graphql-yoga"; +import { connectDatabase } from "../src/server/database"; +import { context } from "../src/server/context"; +import { schema } from "../src/server/graphql"; +import { CatalogDocument } from "../src/client/gql/graphql"; +import type { Pool } from "pg"; +let pool: Pool; +let admin: Pool; +let id: string; +const p1 = "10000000-0000-4000-8000-000000000001", + p2 = "10000000-0000-4000-8000-000000000002"; +beforeAll(async () => { + pool = await connectDatabase(); + if (!process.env.DATABASE_TEST_ADMIN_URL) + throw new Error("Dedicated migration test login required"); + admin = await connectDatabase(process.env.DATABASE_TEST_ADMIN_URL); +}); +afterAll(async () => { + await pool?.end(); + await admin?.end(); +}); +beforeEach(async () => { + id = crypto.randomUUID(); + const c = await admin.connect(); + try { + await c.query("BEGIN"); + await c.query("SET LOCAL ROLE catalog_owner"); + await c.query( + "INSERT INTO product_catalog.collections VALUES($1,'Test collection',1)", + [id], + ); + await c.query( + "INSERT INTO product_catalog.collection_items VALUES($1,$2,0)", + [id, p1], + ); + await c.query("COMMIT"); + } finally { + c.release(); + } +}); +afterEach(async () => { + const c = await admin.connect(); + try { + await c.query("BEGIN"); + await c.query("SET LOCAL ROLE catalog_owner"); + await c.query("DELETE FROM product_catalog.collections WHERE id=$1", [id]); + await c.query("COMMIT"); + } finally { + c.release(); + } +}); +const mutation = `mutation Save($id:ID!,$base:Int!,$ids:[ID!]!){replaceCollection(id:$id,baseRevision:$base,productIds:$ids){status collection{id revision products{id}}}}`; +const run = (source: string, variables: Record = {}) => + graphql({ + schema, + source, + variableValues: variables, + contextValue: context(pool), + }); +const save = (ids: string[], base = 1) => run(mutation, { id, base, ids }); +test("nested catalog is two SQL SELECTs for 1,12 and20 products", async () => { + for (const first of [1, 12, 20]) { + const ctx = context(pool); + const result = await execute({ + schema, + document: CatalogDocument, + variableValues: { first, offset: 0 }, + contextValue: ctx, + }); + expect(result.errors).toBeUndefined(); + expect((result.data?.products as unknown[]).length).toBe(first); + expect(ctx.count.reads).toBe(2); + console.log( + `Catalog ${first} products + variants: ${ctx.count.reads} SQL SELECTs`, + ); + } +}); +test("eight concurrent replacements commit exactly one revision", async () => { + const results = await Promise.all( + Array.from({ length: 8 }, () => save([p2, p1])), + ); + expect(results.every((x) => !x.errors)).toBe(true); + const statuses = results.map( + (x) => (x.data?.replaceCollection as { status: string }).status, + ); + expect(statuses.filter((x) => x === "OK")).toHaveLength(1); + expect(statuses.filter((x) => x === "CONFLICT")).toHaveLength(7); + const row = await pool.query( + "SELECT revision FROM product_catalog.collections WHERE id=$1", + [id], + ); + expect(row.rows[0].revision).toBe(2); + const items = await pool.query( + "SELECT product_id FROM product_catalog.collection_items WHERE collection_id=$1 ORDER BY position", + [id], + ); + expect(items.rows.map((r) => r.product_id)).toEqual([p2, p1]); +}); +test("unknown product rolls version and replacement back", async () => { + const result = await save([p2, crypto.randomUUID()]); + expect(result.errors?.[0].extensions.code).toBe("BAD_USER_INPUT"); + expect( + ( + await pool.query( + "SELECT revision FROM product_catalog.collections WHERE id=$1", + [id], + ) + ).rows[0].revision, + ).toBe(1); + expect( + ( + await pool.query( + "SELECT product_id FROM product_catalog.collection_items WHERE collection_id=$1", + [id], + ) + ).rows[0].product_id, + ).toBe(p1); +}); +test("invalid contents and page return explicit errors", async () => { + expect((await save([p1, p1])).errors?.[0].extensions.code).toBe( + "BAD_USER_INPUT", + ); + expect( + (await save(Array.from({ length: 13 }, () => crypto.randomUUID()))) + .errors?.[0].extensions.code, + ).toBe("BAD_USER_INPUT"); + expect( + (await run("{products(first:21,offset:0){id}}")).errors?.[0].extensions + .code, + ).toBe("BAD_USER_INPUT"); +}); +test("runtime cannot alter catalog, schema or collection title", async () => { + await expect( + pool.query("CREATE TABLE product_catalog.forbidden(id int)"), + ).rejects.toThrow(); + await expect( + pool.query("UPDATE product_catalog.products SET name='Other' WHERE id=$1", [ + p1, + ]), + ).rejects.toThrow(); + await expect( + pool.query( + "UPDATE product_catalog.collections SET title='Other' WHERE id=$1", + [id], + ), + ).rejects.toThrow(); +}); +test("Yoga serves the real generated nested operation", async () => { + const yoga = createYoga({ + schema, + logging: false, + context: () => context(pool), + }); + const response = await yoga.fetch("http://localhost/graphql", { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ + query: "{products(first:2,offset:0){name variants{sku priceCents}}}", + }), + }); + const result = await response.json(); + expect(result.errors).toBeUndefined(); + expect(result.data.products).toHaveLength(2); + expect(result.data.products[0].variants).toHaveLength(3); +}); + +test("collection reads retain matching revision and ordered items during replacements", async () => { + const writer = (async () => { + for (let base = 1; base <= 12; base++) { + const result = await save([(base + 1) % 2 === 0 ? p2 : p1], base); + expect(result.errors).toBeUndefined(); + } + })(); + for (let n = 0; n < 24; n++) { + const result = await run( + "query Read($id:ID!){collection(id:$id){revision products{id}}}", + { id }, + ); + expect(result.errors).toBeUndefined(); + const collection = result.data?.collection as { + revision: number; + products: { id: string }[]; + }; + expect(collection.products.map((p) => p.id)).toEqual([ + collection.revision % 2 === 0 ? p2 : p1, + ]); + } + await writer; +}); diff --git a/applications/product-graphql/tests/validation.test.ts b/applications/product-graphql/tests/validation.test.ts new file mode 100644 index 00000000..af25c372 --- /dev/null +++ b/applications/product-graphql/tests/validation.test.ts @@ -0,0 +1,15 @@ +import { test, expect } from "bun:test"; +import { contents, page, title, revision } from "../src/server/validation"; +test("pagination bounds and collection bounds", () => { + expect(() => page(21, 0)).toThrow(); + expect(() => page(1, -1)).toThrow(); + expect(() => contents(Array(13).fill("x"))).toThrow(); + expect(() => contents(["x", "x"])).toThrow(); + expect(() => contents(["not-a-uuid"])).toThrow(); +}); +test("title and revision inputs", () => { + expect(title(" Weekend ")).toBe("Weekend"); + expect(() => title(" ")).toThrow(); + expect(() => revision(0)).toThrow(); + expect(() => revision(2147483647)).toThrow(); +}); diff --git a/applications/product-graphql/tsconfig.json b/applications/product-graphql/tsconfig.json new file mode 100644 index 00000000..97796e79 --- /dev/null +++ b/applications/product-graphql/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "Bundler", + "jsx": "react-jsx", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "types": [ + "bun" + ], + "noEmit": true + }, + "include": [ + "src", + "scripts", + "tests", + "*.ts" + ] +} diff --git a/applications/product-graphql/vite.config.ts b/applications/product-graphql/vite.config.ts new file mode 100644 index 00000000..1826ab6a --- /dev/null +++ b/applications/product-graphql/vite.config.ts @@ -0,0 +1,3 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; +export default defineConfig({ plugins: [react()] });