diff --git a/.github/workflows/continuous-release.yml b/.github/workflows/continuous-release.yml index 023c0516..f5fe4042 100644 --- a/.github/workflows/continuous-release.yml +++ b/.github/workflows/continuous-release.yml @@ -1,10 +1,79 @@ name: Publish Any Commit on: [push, pull_request] +env: + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + TURBO_TEAM: ${{ vars.TURBO_TEAM }} + jobs: - build: + lint: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - run: corepack enable + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: "pnpm" + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Lint + run: pnpm lint + + typecheck: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - run: corepack enable + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: "pnpm" + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Type Check + run: pnpm typecheck + + test: runs-on: ubuntu-latest + needs: [lint, typecheck] + steps: + - name: Checkout code + uses: actions/checkout@v4 + - run: corepack enable + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: "pnpm" + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Install 1Password CLI + uses: 1password/install-cli-action@v1 + + - name: Run Unit Tests + run: op run --env-file=op.env -- pnpm test + env: + OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} + + - name: Run fmodata E2E Tests + run: op run --env-file=op.env -- pnpm --filter @proofkit/fmodata test:e2e:ci + env: + OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} + + build: + runs-on: ubuntu-latest + needs: [test] steps: - name: Checkout code uses: actions/checkout@v4 @@ -20,4 +89,5 @@ jobs: - name: Build run: pnpm build + - run: pnpm dlx pkg-pr-new publish './packages/*' --packageManager=pnpm diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3964579a..ba73d112 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,21 +1,65 @@ name: Release on: + workflow_dispatch: + push: branches: - main concurrency: ${{ github.workflow }}-${{ github.ref }} +env: + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + TURBO_TEAM: ${{ vars.TURBO_TEAM }} + permissions: - # Changesets/action needs to push version commits and open/update a PR contents: write pull-requests: write - id-token: write # Required for OIDC + id-token: write jobs: + quality: + name: Quality Checks + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v4 + + - name: Enable Corepack + run: corepack enable + + - name: Setup Node.js 22.x + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: "pnpm" + + - name: Install Dependencies + run: pnpm install --frozen-lockfile + + - name: Lint + run: pnpm lint + + - name: Type Check + run: pnpm typecheck + + - name: Install 1Password CLI + uses: 1password/install-cli-action@v1 + + - name: Run Tests + run: op run --env-file=op.env -- pnpm test + env: + OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} + + - name: Run fmodata E2E Tests + run: op run --env-file=op.env -- pnpm --filter @proofkit/fmodata test:e2e:ci + env: + OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} + release: name: Release + needs: [quality] runs-on: ubuntu-latest steps: - name: Checkout Repo @@ -38,9 +82,7 @@ jobs: id: changesets uses: changesets/action@v1 with: - # This expects you to have a script called release which does a build for your packages and calls changeset publish publish: pnpm release env: GITHUB_TOKEN: ${{ github.token }} - NODE_AUTH_TOKEN: ${{ secrets.NPM_ACCESS_TOKEN }} NPM_CONFIG_PROVENANCE: true diff --git a/packages/typegen/op.env b/op.env similarity index 76% rename from packages/typegen/op.env rename to op.env index fea92cfb..d0b56ebb 100644 --- a/packages/typegen/op.env +++ b/op.env @@ -5,22 +5,27 @@ # | | | | (_| \__ \__ \\ V V / (_) | | | (_| || __/ | | \ V / # |_|_| \__,_|___/___/ \_/\_/ \___/|_| \__,_(_)___|_| |_|\_/ # -# This file is intentionally commited to source control. +# This file is intentionally committed to source control. # It should only reference secrets in 1Password -DIFFERENT_FM_SERVER="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/1Password env Values/FM_SERVER" -DIFFERENT_FM_DATABASE="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/1Password env Values/FM_DATABASE" -DIFFERENT_OTTO_API_KEY="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/1Password env Values/OTTO_API_KEY" - +# fmdapi & typegen secrets FM_SERVER="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/1Password env Values/FM_SERVER" FM_DATABASE="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/1Password env Values/FM_DATABASE" OTTO_API_KEY="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/1Password env Values/OTTO_API_KEY" FM_USERNAME="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/username" FM_PASSWORD="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/password" - -# Test environment variables +DIFFERENT_FM_SERVER="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/1Password env Values/FM_SERVER" +DIFFERENT_FM_DATABASE="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/1Password env Values/FM_DATABASE" +DIFFERENT_OTTO_API_KEY="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/1Password env Values/OTTO_API_KEY" TEST_FM_SERVER="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/1Password env Values/FM_SERVER" TEST_FM_DATABASE="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/1Password env Values/FM_DATABASE" TEST_OTTO_API_KEY="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/1Password env Values/OTTO_API_KEY" TEST_USERNAME="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/username" TEST_PASSWORD="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/password" + +# fmodata secrets +FMODATA_SERVER_URL="op://xrs5sehh2gm36me62rlfpmsyde/fmdapi_test/1Password env Values/FM_SERVER" +FMODATA_DATABASE="op://xrs5sehh2gm36me62rlfpmsyde/fmdapi_test/1Password env Values/FM_DATABASE" +FMODATA_API_KEY="op://xrs5sehh2gm36me62rlfpmsyde/fmdapi_test/1Password env Values/OTTO_API_KEY" +FMODATA_USERNAME="op://xrs5sehh2gm36me62rlfpmsyde/fmdapi_test/username" +FMODATA_PASSWORD="op://xrs5sehh2gm36me62rlfpmsyde/fmdapi_test/password" diff --git a/package.json b/package.json index 1405e352..b8b79e3d 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "build": "turbo run build --filter={./packages/*} --filter=@proofkit/docs", "dev": "turbo run dev", "lint": "turbo run lint", + "typecheck": "turbo run typecheck", "clean": "turbo run clean && rm -rf node_modules", "format": "biome format --write .", "changeset": "changeset", @@ -22,12 +23,12 @@ "husky": "^9.1.7", "knip": "^5.56.0", "lint-staged": "^16.2.7", - "turbo": "^2.5.4", + "turbo": "^2.7.3", "typescript": "^5.9.3", "ultracite": "7.0.8", "vitest": "^4.0.7" }, - "packageManager": "pnpm@10.14.0", + "packageManager": "pnpm@10.27.0", "engines": { "node": ">=18" }, diff --git a/packages/better-auth/package.json b/packages/better-auth/package.json index e990acd1..0870f3b0 100644 --- a/packages/better-auth/package.json +++ b/packages/better-auth/package.json @@ -7,6 +7,7 @@ "scripts": { "dev": "pnpm build:watch", "test": "vitest run", + "typecheck": "tsc --noEmit", "build": "vite build && publint --strict", "build:watch": "vite build --watch", "ci": "pnpm run build && pnpm run test", diff --git a/packages/cli/package.json b/packages/cli/package.json index ebc620eb..cb091f02 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -45,10 +45,8 @@ "dev": "tsdown --watch", "clean": "rm -rf dist .turbo node_modules", "start": "node dist/index.js", - "lint": "biome check .", + "lint": "biome check . --write", "lint:summary": "biome check . --reporter=summary", - "format": "biome format --write .", - "format:check": "biome format --check .", "release": "changeset version", "pub:beta": "NODE_ENV=production pnpm build && npm publish --tag beta --access public", "pub:next": "NODE_ENV=production pnpm build && npm publish --tag next --access public", diff --git a/packages/cli/src/cli/add/index.ts b/packages/cli/src/cli/add/index.ts index d2ea8692..4cc49092 100644 --- a/packages/cli/src/cli/add/index.ts +++ b/packages/cli/src/cli/add/index.ts @@ -1,8 +1,8 @@ import { select } from "@clack/prompts"; +import type { RegistryIndex } from "@proofkit/registry"; import { Command } from "commander"; import { capitalize, groupBy, uniq } from "es-toolkit"; import ora from "ora"; - import { ciOption, debugOption } from "~/globalOptions.js"; import { initProgramState, state } from "~/state.js"; import { logger } from "~/utils/logger.js"; @@ -77,7 +77,7 @@ const runAddFromRegistry = async (_options?: { noInstall?: boolean }) => { await runAddSchemaAction(); } else if (addType === "data") { await runAddDataSourceCommand(); - } else if (categories.includes(addType)) { + } else if ((categories as string[]).includes(addType)) { // one of the categories const itemsFromCategory = groupedByCategory[addType as keyof typeof groupedByCategory]; diff --git a/packages/cli/src/cli/add/registry/postInstall/wrap-provider.ts b/packages/cli/src/cli/add/registry/postInstall/wrap-provider.ts index 21f09c34..dd1ec34e 100644 --- a/packages/cli/src/cli/add/registry/postInstall/wrap-provider.ts +++ b/packages/cli/src/cli/add/registry/postInstall/wrap-provider.ts @@ -1,6 +1,6 @@ import path from "node:path"; import type { PostInstallStep } from "@proofkit/registry"; -import { type ImportDeclarationStructure, StructureKind, SyntaxKind } from "ts-morph"; +import { type ImportDeclarationStructure, type JsxChild, type JsxElement, StructureKind, SyntaxKind } from "ts-morph"; import { getShadcnConfig } from "~/helpers/shadcn-cli.js"; import { state } from "~/state.js"; @@ -66,9 +66,7 @@ export async function wrapProvider(step: Extract)[number]["getParentIfKind"] - >; + let targetElement: JsxElement | undefined; // Try to find the parent tag if specified if (parentTag && parentTag.length > 0) { @@ -88,7 +86,7 @@ export async function wrapProvider(step: Extract child.getText()) + .map((child: JsxChild) => child.getText()) .filter(Boolean) .join("\n"); diff --git a/packages/cli/src/cli/deploy/index.ts b/packages/cli/src/cli/deploy/index.ts index 0103dab7..dd976ae8 100644 --- a/packages/cli/src/cli/deploy/index.ts +++ b/packages/cli/src/cli/deploy/index.ts @@ -182,7 +182,7 @@ async function pushEnvironmentVariables() { try { const settings = getSettings(); - const envFile = path.join(process.cwd(), settings.envFile); + const envFile = path.join(process.cwd(), settings.envFile ?? ".env"); if (!fs.existsSync(envFile)) { spinner.stop("No environment file found"); diff --git a/packages/cli/src/generators/fmdapi.ts b/packages/cli/src/generators/fmdapi.ts index 38525a55..66bed1e8 100644 --- a/packages/cli/src/generators/fmdapi.ts +++ b/packages/cli/src/generators/fmdapi.ts @@ -21,15 +21,35 @@ interface Schema { strictNumbers?: boolean; } -// For a single data source configuration object -type ImportedDataSourceConfig = z.infer; +// For any data source configuration object (fmdapi or fmodata) +type AnyDataSourceConfig = z.infer; +// For a single fmdapi data source configuration object +type FmdapiDataSourceConfig = Extract; // For a single layout configuration object within a data source -type ImportedLayoutConfig = ImportedDataSourceConfig["layouts"][number]; +type ImportedLayoutConfig = FmdapiDataSourceConfig["layouts"][number]; // This type represents the actual structure of the JSONC file, including $schema interface FullProofkitTypegenJsonFile { $schema?: string; - config: ImportedDataSourceConfig | ImportedDataSourceConfig[]; + config: AnyDataSourceConfig | AnyDataSourceConfig[]; +} + +// Helper function to normalize data sources by adding default type for backwards compatibility +// This mirrors the zod preprocess in @proofkit/typegen that defaults type to "fmdapi" +function normalizeDataSource(ds: AnyDataSourceConfig): AnyDataSourceConfig { + if (!("type" in ds) || ds.type === undefined) { + return { ...(ds as object), type: "fmdapi" } as AnyDataSourceConfig; + } + return ds; +} + +function normalizeConfig( + config: AnyDataSourceConfig | AnyDataSourceConfig[], +): AnyDataSourceConfig | AnyDataSourceConfig[] { + if (Array.isArray(config)) { + return config.map(normalizeDataSource); + } + return normalizeDataSource(config); } // Helper functions for JSON config @@ -40,6 +60,10 @@ async function readJsonConfigFile(configPath: string): Promise ds.path?.endsWith(dataSourceName) || ds.path?.endsWith(`${dataSourceName}/`) || ds.path === dataSourceName, + let targetDataSource: FmdapiDataSourceConfig | undefined = configArray.find( + (ds): ds is FmdapiDataSourceConfig => + ds.type === "fmdapi" && + (ds.path?.endsWith(dataSourceName) || ds.path?.endsWith(`${dataSourceName}/`) || ds.path === dataSourceName), ); if (targetDataSource) { targetDataSource.layouts = targetDataSource.layouts || []; } else { targetDataSource = { + type: "fmdapi", layouts: [], path: `./src/config/schemas/${dataSourceName}`, // other default properties for a new DataSourceConfig can be added here if needed + envNames: undefined, }; configArray.push(targetDataSource); } @@ -141,7 +169,7 @@ export async function addConfig({ projectDir, runCodegen = true, }: { - config: ImportedDataSourceConfig | ImportedDataSourceConfig[]; + config: FmdapiDataSourceConfig | FmdapiDataSourceConfig[]; projectDir: string; runCodegen?: boolean; }) { @@ -207,11 +235,14 @@ export function getClientSuffix({ const fileContent = fs.readFileSync(jsonConfigPath, "utf8"); const parsed = parseJsonc(fileContent) as FullProofkitTypegenJsonFile; - const configToSearch = Array.isArray(parsed.config) ? parsed.config : [parsed.config]; + // Normalize config to add default type for backwards compatibility + const normalizedConfig = normalizeConfig(parsed.config); + const configToSearch = Array.isArray(normalizedConfig) ? normalizedConfig : [normalizedConfig]; const targetDataSource = configToSearch.find( - (ds) => - ds.path?.endsWith(dataSourceName) || ds.path?.endsWith(`${dataSourceName}/`) || ds.path === dataSourceName, + (ds): ds is FmdapiDataSourceConfig => + ds.type === "fmdapi" && + (ds.path?.endsWith(dataSourceName) || ds.path?.endsWith(`${dataSourceName}/`) || ds.path === dataSourceName), ); return targetDataSource?.clientSuffix ?? "Client"; } catch (error) { @@ -234,13 +265,15 @@ export function getExistingSchemas({ try { const fileContent = fs.readFileSync(jsonConfigPath, "utf8"); const parsed = parseJsonc(fileContent) as FullProofkitTypegenJsonFile; - let targetDataSource: ImportedDataSourceConfig | undefined; - const configToSearch = Array.isArray(parsed.config) ? parsed.config : [parsed.config]; + // Normalize config to add default type for backwards compatibility + const normalizedConfig = normalizeConfig(parsed.config); + const configToSearch = Array.isArray(normalizedConfig) ? normalizedConfig : [normalizedConfig]; - targetDataSource = configToSearch.find( - (ds) => - ds.path?.endsWith(dataSourceName) || ds.path?.endsWith(`${dataSourceName}/`) || ds.path === dataSourceName, + const targetDataSource = configToSearch.find( + (ds): ds is FmdapiDataSourceConfig => + ds.type === "fmdapi" && + (ds.path?.endsWith(dataSourceName) || ds.path?.endsWith(`${dataSourceName}/`) || ds.path === dataSourceName), ); if (targetDataSource?.layouts) { @@ -267,9 +300,11 @@ export async function addToFmschemaConfig({ const jsonConfigPath = path.join(projectDir, "proofkit-typegen.config.jsonc"); let fileContent = await readJsonConfigFile(jsonConfigPath); - const newDataSource: ImportedDataSourceConfig = { + const newDataSource: FmdapiDataSourceConfig = { + type: "fmdapi", layouts: [], path: `./src/config/schemas/${dataSourceName}`, + envNames: undefined, clearOldFiles: true, clientSuffix: "Layout", }; @@ -286,7 +321,7 @@ export async function addToFmschemaConfig({ } if (fileContent) { - let configArray: ImportedDataSourceConfig[]; + let configArray: AnyDataSourceConfig[]; if (Array.isArray(fileContent.config)) { configArray = fileContent.config; } else { @@ -294,14 +329,15 @@ export async function addToFmschemaConfig({ fileContent.config = configArray; } - const existingDsIndex = configArray.findIndex((ds) => ds.path === newDataSource.path); + const existingDsIndex = configArray.findIndex((ds) => ds.type === "fmdapi" && ds.path === newDataSource.path); if (existingDsIndex === -1) { configArray.push(newDataSource); } else { + const existingConfig = configArray[existingDsIndex] as FmdapiDataSourceConfig; configArray[existingDsIndex] = { - ...configArray[existingDsIndex], + ...existingConfig, ...newDataSource, - layouts: newDataSource.layouts.length > 0 ? newDataSource.layouts : configArray[existingDsIndex]?.layouts || [], + layouts: newDataSource.layouts.length > 0 ? newDataSource.layouts : existingConfig.layouts || [], }; } } else { @@ -360,10 +396,10 @@ export async function removeFromFmschemaConfig({ dataSourceName }: { dataSourceN const pathToRemove = `./src/config/schemas/${dataSourceName}`; if (Array.isArray(fileContent.config)) { - fileContent.config = fileContent.config.filter((ds) => ds.path !== pathToRemove); + fileContent.config = fileContent.config.filter((ds) => !(ds.type === "fmdapi" && ds.path === pathToRemove)); } else { - const currentConfig = fileContent.config as ImportedDataSourceConfig; - if (currentConfig.path === pathToRemove) { + const currentConfig = fileContent.config; + if (currentConfig.type === "fmdapi" && currentConfig.path === pathToRemove) { fileContent.config = []; } } @@ -391,7 +427,7 @@ export async function removeLayout({ let dataSourceModified = false; const targetDsPath = `./src/config/schemas/${dataSourceName}`; - let configArray: ImportedDataSourceConfig[]; + let configArray: AnyDataSourceConfig[]; if (Array.isArray(fileContent.config)) { configArray = fileContent.config; } else { @@ -399,7 +435,9 @@ export async function removeLayout({ fileContent.config = configArray; } - const targetDataSource = configArray.find((ds) => ds.path === targetDsPath); + const targetDataSource = configArray.find( + (ds): ds is FmdapiDataSourceConfig => ds.type === "fmdapi" && ds.path === targetDsPath, + ); if (targetDataSource?.layouts) { const initialCount = targetDataSource.layouts.length; diff --git a/packages/cli/src/installers/proofkit-auth.ts b/packages/cli/src/installers/proofkit-auth.ts index 3f6dd0ce..7099bcca 100644 --- a/packages/cli/src/installers/proofkit-auth.ts +++ b/packages/cli/src/installers/proofkit-auth.ts @@ -1,11 +1,11 @@ import path from "node:path"; import * as p from "@clack/prompts"; +import type { OttoAPIKey } from "@proofkit/fmdapi"; import chalk from "chalk"; import dotenv from "dotenv"; import fs from "fs-extra"; import ora, { type Ora } from "ora"; import { type SourceFile, SyntaxKind } from "ts-morph"; - import { getLayouts } from "~/cli/fmdapi.js"; import { abortIfCancel, UserAbortedError } from "~/cli/utils.js"; import { PKG_ROOT } from "~/consts.js"; @@ -62,6 +62,8 @@ export const proofkitAuthInstaller = async () => { await addConfig({ config: { + type: "fmdapi", + envNames: undefined, clientSuffix: "Layout", layouts: [ { diff --git a/packages/fmdapi/op.env b/packages/fmdapi/op.env deleted file mode 100644 index a35f225f..00000000 --- a/packages/fmdapi/op.env +++ /dev/null @@ -1,19 +0,0 @@ -# __ _____ _ -# /_ | __ \ | | -# | | |__) |_ _ ___ _____ _____ _ __ __| | ___ _ ____ __ -# | | ___/ _` / __/ __\ \ /\ / / _ \| '__/ _` | / _ \ '_ \ \ / / -# | | | | (_| \__ \__ \\ V V / (_) | | | (_| || __/ | | \ V / -# |_|_| \__,_|___/___/ \_/\_/ \___/|_| \__,_(_)___|_| |_|\_/ -# -# This file is intentionally commited to source control. -# It should only reference secrets in 1Password - -DIFFERENT_FM_SERVER="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/1Password env Values/FM_SERVER" -DIFFERENT_FM_DATABASE="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/1Password env Values/FM_DATABASE" -DIFFERENT_OTTO_API_KEY="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/1Password env Values/OTTO_API_KEY" - -FM_SERVER="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/1Password env Values/FM_SERVER" -FM_DATABASE="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/1Password env Values/FM_DATABASE" -OTTO_API_KEY="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/1Password env Values/OTTO_API_KEY" -FM_USERNAME="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/username" -FM_PASSWORD="op://xrs5sehh2gm36me62rlfpmsyde/ztcjgvgc4i5aa6cjh5vudpco4m/password" diff --git a/packages/fmdapi/package.json b/packages/fmdapi/package.json index a1478312..82010a18 100644 --- a/packages/fmdapi/package.json +++ b/packages/fmdapi/package.json @@ -45,7 +45,8 @@ "dev": "tsc --watch", "ci": "pnpm build && pnpm check-format && pnpm publint --strict && pnpm test", "test": "vitest run", - "setup-env": "op inject -i op.env -o .env.local -f", + "typecheck": "tsc --noEmit", + "setup-env": "op inject -i ../../op.env -o .env.local -f", "changeset": "changeset", "release": "pnpm build && changeset publish --access public", "knip": "knip", diff --git a/packages/fmodata/op.env b/packages/fmodata/op.env deleted file mode 100644 index 09dca379..00000000 --- a/packages/fmodata/op.env +++ /dev/null @@ -1,15 +0,0 @@ -# __ _____ _ -# /_ | __ \ | | -# | | |__) |_ _ ___ _____ _____ _ __ __| | ___ _ ____ __ -# | | ___/ _` / __/ __\ \ /\ / / _ \| '__/ _` | / _ \ '_ \ \ / / -# | | | | (_| \__ \__ \\ V V / (_) | | | (_| || __/ | | \ V / -# |_|_| \__,_|___/___/ \_/\_/ \___/|_| \__,_(_)___|_| |_|\_/ -# -# This file is intentionally commited to source control. -# It should only reference secrets in 1Password - -FMODATA_SERVER_URL="op://xrs5sehh2gm36me62rlfpmsyde/fmdapi_test/1Password env Values/FM_SERVER" -FMODATA_DATABASE="op://xrs5sehh2gm36me62rlfpmsyde/fmdapi_test/1Password env Values/FM_DATABASE" -FMODATA_API_KEY="op://xrs5sehh2gm36me62rlfpmsyde/fmdapi_test/1Password env Values/OTTO_API_KEY" -FMODATA_USERNAME="op://xrs5sehh2gm36me62rlfpmsyde/fmdapi_test/username" -FMODATA_PASSWORD="op://xrs5sehh2gm36me62rlfpmsyde/fmdapi_test/password" \ No newline at end of file diff --git a/packages/fmodata/package.json b/packages/fmodata/package.json index 6f9decee..da0c75ea 100644 --- a/packages/fmodata/package.json +++ b/packages/fmodata/package.json @@ -28,13 +28,14 @@ "lint:fix": "pnpm lint --fix", "dev": "tsc --watch", "test": "vitest run --typecheck", - "tsc": "tsc --noEmit", + "typecheck": "tsc --noEmit", "test:typecheck": "vitest run --typecheck", "test:watch": "vitest --typecheck", "test:build": "pnpm build && TEST_BUILD=true vitest run --typecheck", "test:watch:build": "TEST_BUILD=true vitest --typecheck", - "test:e2e": "op inject -i op.env -o .env.local -f && vitest run tests/e2e.test.ts", - "capture": "op inject -i op.env -o .env.local -f && tsx scripts/capture-responses.ts", + "test:e2e": "op inject -i ../../op.env -o .env.local -f && vitest run tests/e2e.test.ts", + "test:e2e:ci": "vitest run tests/e2e.test.ts", + "capture": "op inject -i ../../op.env -o .env.local -f && tsx scripts/capture-responses.ts", "knip": "knip", "pub:alpha": "bun run scripts/publish-alpha.ts", "global:link": "pnpm link --global" diff --git a/packages/registry/lib/types.ts b/packages/registry/lib/types.ts index 0f26f9f8..4e03a335 100644 --- a/packages/registry/lib/types.ts +++ b/packages/registry/lib/types.ts @@ -1,4 +1,3 @@ -import { registryItemSchema, type RegistryItem as ShadcnRegistryItem } from "shadcn/registry"; import { z } from "zod/v3"; const registryTypeSchema = z @@ -20,6 +19,66 @@ const registryTypeSchema = z "The type property is used to specify the type of your registry item. This is used to determine the type and target path of the item when resolved for a project.", ); +type RegistryType = z.infer; + +/** + * Minimal file schema for shadcn CLI compatibility. + * This matches the structure expected by shadcn but avoids importing heavy types. + */ +const registryItemFileSchema = z.discriminatedUnion("type", [ + z.object({ + path: z.string(), + content: z.string().optional(), + type: registryTypeSchema.extract(["registry:file", "registry:page"]), + target: z.string(), + }), + z.object({ + path: z.string(), + content: z.string().optional(), + type: registryTypeSchema.exclude(["registry:file", "registry:page"]), + target: z.string().optional(), + }), +]); + +/** + * Base schema with common fields from shadcn's registryItemSchema. + * We define our own to avoid importing the heavy shadcn types. + */ +const baseRegistryItemSchema = z.object({ + $schema: z.string().optional(), + extends: z.string().optional(), + title: z.string().optional(), + author: z.string().optional(), + description: z.string().optional(), + dependencies: z.array(z.string()).optional(), + devDependencies: z.array(z.string()).optional(), + registryDependencies: z.array(z.string()).optional(), + tailwind: z + .object({ + config: z + .object({ + content: z.array(z.string()).optional(), + theme: z.record(z.string(), z.any()).optional(), + plugins: z.array(z.string()).optional(), + }) + .optional(), + }) + .optional(), + cssVars: z + .object({ + theme: z.record(z.string(), z.string()).optional(), + light: z.record(z.string(), z.string()).optional(), + dark: z.record(z.string(), z.string()).optional(), + }) + .optional(), + css: z.record(z.string(), z.any()).optional(), + envVars: z.record(z.string(), z.string()).optional(), + meta: z.record(z.string(), z.any()).optional(), + categories: z.array(z.string()).optional(), +}); + +type BaseRegistryItem = z.infer; + // Defines a single file within a template export const templateFileSchema = z.discriminatedUnion("type", [ z.object({ @@ -116,12 +175,12 @@ const categorySchema = z.enum(["component", "page", "utility", "hook", "email"]) export const frameworkSchema = z.enum(["next-pages", "next-app", "manual"]); -export type TemplateMetadata = z.infer & { +export type TemplateMetadata = BaseRegistryItem & { title: string; description?: string; category: z.infer; files: TemplateFile[]; - registryType: z.infer; + registryType: RegistryType; postInstall?: PostInstallStep[]; minimumProofKitVersion?: string; allowedFrameworks?: z.infer[]; @@ -129,25 +188,23 @@ export type TemplateMetadata = z.infer & { }; // Defines the metadata for a single template (_meta.ts) -export const templateMetadataSchema: z.ZodType = registryItemSchema - .omit({ name: true, type: true, files: true, docs: true }) - .extend({ - title: z.string(), - description: z.string().optional(), - category: categorySchema, - files: z.array(templateFileSchema), - registryType: registryTypeSchema, - postInstall: z - .array(postInstallStepsSchema) - .optional() - .describe("Steps that should be run by the ProofKit CLI after shadcn CLI is done"), - minimumProofKitVersion: z - .string() - .describe("The minimum version of ProofKit required to use this template") - .optional(), - allowedFrameworks: z.array(frameworkSchema).optional(), - schemaRequired: z.boolean().optional().describe("Whether this template requires a database schema to be selected"), - }); +export const templateMetadataSchema: z.ZodType = baseRegistryItemSchema.extend({ + title: z.string(), + description: z.string().optional(), + category: categorySchema, + files: z.array(templateFileSchema), + registryType: registryTypeSchema, + postInstall: z + .array(postInstallStepsSchema) + .optional() + .describe("Steps that should be run by the ProofKit CLI after shadcn CLI is done"), + minimumProofKitVersion: z + .string() + .describe("The minimum version of ProofKit required to use this template") + .optional(), + allowedFrameworks: z.array(frameworkSchema).optional(), + schemaRequired: z.boolean().optional().describe("Whether this template requires a database schema to be selected"), +}); export type TemplateFile = z.infer; @@ -158,11 +215,22 @@ export type RegistryIndex = Array<{ description?: string; }>; -export const registryIndexSchema: z.ZodType = templateMetadataSchema - .pick({ title: true, category: true, description: true }) - .extend({ +export const registryIndexSchema: z.ZodType = z + .object({ name: z.string(), + title: z.string(), + category: categorySchema, + description: z.string().optional(), }) .array(); -export type RegistryItem = ShadcnRegistryItem; +/** + * Output type compatible with shadcn CLI's RegistryItem. + * Defined locally to avoid importing heavy shadcn types. + */ +export type RegistryItem = BaseRegistryItem & { + name: string; + type: RegistryType; + files?: z.infer[]; + docs?: string; +}; diff --git a/packages/registry/package.json b/packages/registry/package.json index ffe7fa6f..0628a13f 100644 --- a/packages/registry/package.json +++ b/packages/registry/package.json @@ -30,7 +30,8 @@ "test": "vitest run", "test:watch": "vitest", "test:coverage": "vitest run --coverage", - "lint": "biome check .", + "typecheck": "tsc --noEmit", + "lint": "biome check . --write", "lint:summary": "biome check . --reporter=summary" }, "keywords": [ @@ -53,7 +54,6 @@ }, "dependencies": { "jiti": "^1.21.7", - "shadcn": "^2.10.0", "zod": "^4.2.0" } } diff --git a/packages/typegen/package.json b/packages/typegen/package.json index 704b9d1c..f278a1b7 100644 --- a/packages/typegen/package.json +++ b/packages/typegen/package.json @@ -10,7 +10,8 @@ "dev:api": "concurrently -n \"build,server\" -c \"cyan,magenta\" \"pnpm build:watch\" \"nodemon --watch dist/esm --delay 1 --exec 'node dist/esm/cli.js ui --port 3141 --no-open'\"", "test": "vitest run", "test:watch": "vitest --watch", - "setup-env": "op inject -i op.env -o .env.local -f", + "typecheck": "tsc --noEmit", + "setup-env": "op inject -i ../../op.env -o .env.local -f", "build": "pnpm -C web build && pnpm vite build && node scripts/build-copy.js && publint --strict", "build:watch": "vite build --watch", "ci": "pnpm run build && pnpm run test", diff --git a/packages/webviewer/package.json b/packages/webviewer/package.json index 80931c45..8f2bcb8f 100644 --- a/packages/webviewer/package.json +++ b/packages/webviewer/package.json @@ -49,6 +49,7 @@ "access": "public" }, "scripts": { + "typecheck": "tsc --noEmit", "prepublishOnly": "tsc", "build": "tsc && vite build && publint --strict", "build:watch": "tsc && vite build --watch", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8deca935..b3db611b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,8 +31,8 @@ importers: specifier: ^16.2.7 version: 16.2.7 turbo: - specifier: ^2.5.4 - version: 2.5.4 + specifier: ^2.7.3 + version: 2.7.3 typescript: specifier: ^5.9.3 version: 5.9.3 @@ -86,19 +86,19 @@ importers: version: 2.1.1 fumadocs-core: specifier: 16.4.4 - version: 16.4.4(@types/react@19.2.7)(lucide-react@0.511.0(react@19.2.3))(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5) + version: 16.4.4(@types/react@19.2.7)(lucide-react@0.511.0(react@19.2.3))(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5) fumadocs-mdx: specifier: 14.2.4 - version: 14.2.4(@types/react@19.2.7)(fumadocs-core@16.4.4(@types/react@19.2.7)(lucide-react@0.511.0(react@19.2.3))(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5))(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(vite@6.3.5(@types/node@22.17.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)) + version: 14.2.4(@types/react@19.2.7)(fumadocs-core@16.4.4(@types/react@19.2.7)(lucide-react@0.511.0(react@19.2.3))(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5))(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(vite@6.3.5(@types/node@22.17.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)) fumadocs-twoslash: specifier: ^3.1.12 - version: 3.1.12(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(fumadocs-ui@16.4.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.11)(zod@4.3.5))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + version: 3.1.12(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(fumadocs-ui@16.4.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.11)(zod@4.3.5))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) fumadocs-typescript: specifier: ^5.0.1 - version: 5.0.1(@types/react@19.2.7)(fumadocs-core@16.4.4(@types/react@19.2.7)(lucide-react@0.511.0(react@19.2.3))(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5))(fumadocs-ui@16.4.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.11)(zod@4.3.5))(react@19.2.3)(typescript@5.9.3) + version: 5.0.1(@types/react@19.2.7)(fumadocs-core@16.4.4(@types/react@19.2.7)(lucide-react@0.511.0(react@19.2.3))(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5))(fumadocs-ui@16.4.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.11)(zod@4.3.5))(react@19.2.3)(typescript@5.9.3) fumadocs-ui: specifier: 16.4.4 - version: 16.4.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.11)(zod@4.3.5) + version: 16.4.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.11)(zod@4.3.5) hono: specifier: ^4.9.0 version: 4.9.0 @@ -110,7 +110,7 @@ importers: version: 0.511.0(react@19.2.3) next: specifier: 16.1.1 - version: 16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -368,7 +368,7 @@ importers: version: 11.0.0-rc.441(@trpc/server@11.0.0-rc.441) '@trpc/next': specifier: 11.0.0-rc.441 - version: 11.0.0-rc.441(@tanstack/react-query@5.90.12(react@19.2.3))(@trpc/client@11.0.0-rc.441(@trpc/server@11.0.0-rc.441))(@trpc/react-query@11.0.0-rc.441(@tanstack/react-query@5.90.12(react@19.2.3))(@trpc/client@11.0.0-rc.441(@trpc/server@11.0.0-rc.441))(@trpc/server@11.0.0-rc.441)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@trpc/server@11.0.0-rc.441)(next@16.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 11.0.0-rc.441(@tanstack/react-query@5.90.12(react@19.2.3))(@trpc/client@11.0.0-rc.441(@trpc/server@11.0.0-rc.441))(@trpc/react-query@11.0.0-rc.441(@tanstack/react-query@5.90.12(react@19.2.3))(@trpc/client@11.0.0-rc.441(@trpc/server@11.0.0-rc.441))(@trpc/server@11.0.0-rc.441)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@trpc/server@11.0.0-rc.441)(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@trpc/react-query': specifier: 11.0.0-rc.441 version: 11.0.0-rc.441(@tanstack/react-query@5.90.12(react@19.2.3))(@trpc/client@11.0.0-rc.441(@trpc/server@11.0.0-rc.441))(@trpc/server@11.0.0-rc.441)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -410,10 +410,10 @@ importers: version: 3.14.1 next: specifier: 16.1.1 - version: 16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) next-auth: specifier: ^4.24.7 - version: 4.24.11(next@16.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 4.24.11(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3) postgres: specifier: ^3.4.4 version: 3.4.5 @@ -572,9 +572,6 @@ importers: jiti: specifier: ^1.21.7 version: 1.21.7 - shadcn: - specifier: ^2.10.0 - version: 2.10.0(@types/node@22.19.3)(typescript@5.9.3) zod: specifier: ^4.2.0 version: 4.2.0 @@ -2758,8 +2755,8 @@ packages: resolution: {integrity: sha512-a61ljmRVVyG5MC/698C8/FfFDw5a8LOIvyOLW5fztgUXqUpc1jOfQzOitSCbge657OgXXThmY3Tk8fpiDb4UcA==} engines: {node: '>= 20.0.0'} - '@oxc-project/types@0.106.0': - resolution: {integrity: sha512-QdsH3rZq480VnOHSHgPYOhjL8O8LBdcnSjM408BpPCCUc0JYYZPG9Gafl9i3OcGk/7137o+gweb4cCv3WAUykg==} + '@oxc-project/types@0.107.0': + resolution: {integrity: sha512-QFDRbYfV2LVx8tyqtyiah3jQPUj1mK2+RYwxyFWyGoys6XJnwTdlzO6rdNNHOPorHAu5Uo34oWRKcvNpbJarmQ==} '@oxc-resolver/binding-darwin-arm64@9.0.2': resolution: {integrity: sha512-MVyRgP2gzJJtAowjG/cHN3VQXwNLWnY+FpOEsyvDepJki1SdAX/8XDijM1yN6ESD1kr9uhBKjGelC6h3qtT+rA==} @@ -3638,79 +3635,79 @@ packages: peerDependencies: react: '>=18.2.0' - '@rolldown/binding-android-arm64@1.0.0-beta.58': - resolution: {integrity: sha512-mWj5eE4Qc8TbPdGGaaLvBb9XfDPvE1EmZkJQgiGKwchkWH4oAJcRAKMTw7ZHnb1L+t7Ah41sBkAecaIsuUgsug==} + '@rolldown/binding-android-arm64@1.0.0-beta.59': + resolution: {integrity: sha512-6yLLgyswYwiCfls9+hoNFY9F8TQdwo15hpXDHzlAR0X/GojeKF+AuNcXjYNbOJ4zjl/5D6lliE8CbpB5t1OWIQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-beta.58': - resolution: {integrity: sha512-wFxUymI/5R8bH8qZFYDfAxAN9CyISEIYke+95oZPiv6EWo88aa5rskjVcCpKA532R+klFmdqjbbaD56GNmTF4Q==} + '@rolldown/binding-darwin-arm64@1.0.0-beta.59': + resolution: {integrity: sha512-hqGXRc162qCCIOAcHN2Cw4eXiVTwYsMFLOhAy1IG2CxY+dwc/l4Ga+dLPkLor3Ikqy5WDn+7kxHbbh6EmshEpQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.58': - resolution: {integrity: sha512-ybp3MkPj23VDV9PhtRwdU5qrGhlViWRV5BjKwO6epaSlUD5lW0WyY+roN3ZAzbma/9RrMTgZ/a/gtQq8YXOcqw==} + '@rolldown/binding-darwin-x64@1.0.0-beta.59': + resolution: {integrity: sha512-ezvvGuhteE15JmMhJW0wS7BaXmhwLy1YHeEwievYaPC1PgGD86wgBKfOpHr9tSKllAXbCe0BeeMvasscWLhKdA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-beta.58': - resolution: {integrity: sha512-Evxj3yh7FWvyklUYZa0qTVT9N2zX9TPDqGF056hl8hlCZ9/ndQ2xMv6uw9PD1VlLpukbsqL+/C6M0qwipL0QMg==} + '@rolldown/binding-freebsd-x64@1.0.0-beta.59': + resolution: {integrity: sha512-4fhKVJiEYVd5n6no/mrL3LZ9kByfCGwmONOrdtvx8DJGDQhehH/q3RfhG3V/4jGKhpXgbDjpIjkkFdybCTcgew==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.58': - resolution: {integrity: sha512-tYeXprDOrEgVHUbPXH6MPso4cM/c6RTkmJNICMQlYdki4hGMh92aj3yU6CKs+4X5gfG0yj5kVUw/L4M685SYag==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.59': + resolution: {integrity: sha512-T3Y52sW6JAhvIqArBw+wtjNU1Ieaz4g0NBxyjSJoW971nZJBZygNlSYx78G4cwkCmo1dYTciTPDOnQygLV23pA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.58': - resolution: {integrity: sha512-N78vmZzP6zG967Ohr+MasCjmKtis0geZ1SOVmxrA0/bklTQSzH5kHEjW5Qn+i1taFno6GEre1E40v0wuWsNOQw==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.59': + resolution: {integrity: sha512-NIW40jQDSQap2KDdmm9z3B/4OzWJ6trf8dwx3FD74kcQb3v34ThsBFTtzE5KjDuxnxgUlV+DkAu+XgSMKrgufw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.58': - resolution: {integrity: sha512-l+p4QVtG72C7wI2SIkNQw/KQtSjuYwS3rV6AKcWrRBF62ClsFUcif5vLaZIEbPrCXu5OFRXigXFJnxYsVVZqdQ==} + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.59': + resolution: {integrity: sha512-CCKEk+H+8c0WGe/8n1E20n85Tq4Pv+HNAbjP1KfUXW+01aCWSMjU56ChNrM2tvHnXicfm7QRNoZyfY8cWh7jLQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.58': - resolution: {integrity: sha512-urzJX0HrXxIh0FfxwWRjfPCMeInU9qsImLQxHBgLp5ivji1EEUnOfux8KxPPnRQthJyneBrN2LeqUix9DYrNaQ==} + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.59': + resolution: {integrity: sha512-VlfwJ/HCskPmQi8R0JuAFndySKVFX7yPhE658o27cjSDWWbXVtGkSbwaxstii7Q+3Rz87ZXN+HLnb1kd4R9Img==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.58': - resolution: {integrity: sha512-7ijfVK3GISnXIwq/1FZo+KyAUJjL3kWPJ7rViAL6MWeEBhEgRzJ0yEd9I8N9aut8Y8ab+EKFJyRNMWZuUBwQ0A==} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.59': + resolution: {integrity: sha512-kuO92hTRyGy0Ts3Nsqll0rfO8eFsEJe9dGQGktkQnZ2hrJrDVN0y419dMgKy/gB2S2o7F2dpWhpfQOBehZPwVA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@rolldown/binding-openharmony-arm64@1.0.0-beta.58': - resolution: {integrity: sha512-/m7sKZCS+cUULbzyJTIlv8JbjNohxbpAOA6cM+lgWgqVzPee3U6jpwydrib328JFN/gF9A99IZEnuGYqEDJdww==} + '@rolldown/binding-openharmony-arm64@1.0.0-beta.59': + resolution: {integrity: sha512-PXAebvNL4sYfCqi8LdY4qyFRacrRoiPZLo3NoUmiTxm7MPtYYR8CNtBGNokqDmMuZIQIecRaD/jbmFAIDz7DxQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.58': - resolution: {integrity: sha512-6SZk7zMgv+y3wFFQ9qE5P9NnRHcRsptL1ypmudD26PDY+PvFCvfHRkJNfclWnvacVGxjowr7JOL3a9fd1wWhUw==} + '@rolldown/binding-wasm32-wasi@1.0.0-beta.59': + resolution: {integrity: sha512-yJoklQg7XIZq8nAg0bbkEXcDK6sfpjxQGxpg2Nd6ERNtvg+eOaEBRgPww0BVTrYFQzje1pB5qPwC2VnJHT3koQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.58': - resolution: {integrity: sha512-sFqfYPnBZ6xBhMkadB7UD0yjEDRvs7ipR3nCggblN+N4ODCXY6qhg/bKL39+W+dgQybL7ErD4EGERVbW9DAWvg==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.59': + resolution: {integrity: sha512-ljZ4+McmCbIuZwEBaoGtiG8Rq2nJjaXEnLEIx+usWetXn1ECjXY0LAhkELxOV6ytv4ensEmoJJ8nXg47hRMjlw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.58': - resolution: {integrity: sha512-AnFWJdAqB8+IDPcGrATYs67Kik/6tnndNJV2jGRmwlbeNiQQ8GhRJU8ETRlINfII0pqi9k4WWLnb00p1QCxw/Q==} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.59': + resolution: {integrity: sha512-bMY4tTIwbdZljW+xe/ln1hvs0SRitahQSXfWtvgAtIzgSX9Ar7KqJzU7lRm33YTRFIHLULRi53yNjw9nJGd6uQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -3718,8 +3715,8 @@ packages: '@rolldown/pluginutils@1.0.0-beta.27': resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} - '@rolldown/pluginutils@1.0.0-beta.58': - resolution: {integrity: sha512-qWhDs6yFGR5xDfdrwiSa3CWGIHxD597uGE/A9xGqytBjANvh4rLCTTkq7szhMV4+Ygh+PMS90KVJ8xWG/TkX4w==} + '@rolldown/pluginutils@1.0.0-beta.59': + resolution: {integrity: sha512-aoh6LAJRyhtazs98ydgpNOYstxUlsOV1KJXcpf/0c0vFcUA8uyd/hwKRhqE/AAPNqAho9RliGsvitCoOzREoVA==} '@rollup/plugin-replace@6.0.3': resolution: {integrity: sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA==} @@ -7579,8 +7576,8 @@ packages: vue-tsc: optional: true - rolldown@1.0.0-beta.58: - resolution: {integrity: sha512-v1FCjMZCan7f+xGAHBi+mqiE4MlH7I+SXEHSQSJoMOGNNB2UYtvMiejsq9YuUOiZjNeUeV/a21nSFbrUR+4ZCQ==} + rolldown@1.0.0-beta.59: + resolution: {integrity: sha512-Slm000Gd8/AO9z4Kxl4r8mp/iakrbAuJ1L+7ddpkNxgQ+Vf37WPvY63l3oeyZcfuPD1DRrUYBsRPIXSOhvOsmw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -8162,38 +8159,38 @@ packages: tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - turbo-darwin-64@2.5.4: - resolution: {integrity: sha512-ah6YnH2dErojhFooxEzmvsoZQTMImaruZhFPfMKPBq8sb+hALRdvBNLqfc8NWlZq576FkfRZ/MSi4SHvVFT9PQ==} + turbo-darwin-64@2.7.3: + resolution: {integrity: sha512-aZHhvRiRHXbJw1EcEAq4aws1hsVVUZ9DPuSFaq9VVFAKCup7niIEwc22glxb7240yYEr1vLafdQ2U294Vcwz+w==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.5.4: - resolution: {integrity: sha512-2+Nx6LAyuXw2MdXb7pxqle3MYignLvS7OwtsP9SgtSBaMlnNlxl9BovzqdYAgkUW3AsYiQMJ/wBRb7d+xemM5A==} + turbo-darwin-arm64@2.7.3: + resolution: {integrity: sha512-CkVrHSq+Bnhl9sX2LQgqQYVfLTWC2gvI74C4758OmU0djfrssDKU9d4YQF0AYXXhIIRZipSXfxClQziIMD+EAg==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.5.4: - resolution: {integrity: sha512-5May2kjWbc8w4XxswGAl74GZ5eM4Gr6IiroqdLhXeXyfvWEdm2mFYCSWOzz0/z5cAgqyGidF1jt1qzUR8hTmOA==} + turbo-linux-64@2.7.3: + resolution: {integrity: sha512-GqDsCNnzzr89kMaLGpRALyigUklzgxIrSy2pHZVXyifgczvYPnLglex78Aj3T2gu+T3trPPH2iJ+pWucVOCC2Q==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.5.4: - resolution: {integrity: sha512-/2yqFaS3TbfxV3P5yG2JUI79P7OUQKOUvAnx4MV9Bdz6jqHsHwc9WZPpO4QseQm+NvmgY6ICORnoVPODxGUiJg==} + turbo-linux-arm64@2.7.3: + resolution: {integrity: sha512-NdCDTfIcIo3dWjsiaAHlxu5gW61Ed/8maah1IAF/9E3EtX0aAHNiBMbuYLZaR4vRJ7BeVkYB6xKWRtdFLZ0y3g==} cpu: [arm64] os: [linux] - turbo-windows-64@2.5.4: - resolution: {integrity: sha512-EQUO4SmaCDhO6zYohxIjJpOKRN3wlfU7jMAj3CgcyTPvQR/UFLEKAYHqJOnJtymbQmiiM/ihX6c6W6Uq0yC7mA==} + turbo-windows-64@2.7.3: + resolution: {integrity: sha512-7bVvO987daXGSJVYBoG8R4Q+csT1pKIgLJYZevXRQ0Hqw0Vv4mKme/TOjYXs9Qb1xMKh51Tb3bXKDbd8/4G08g==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.5.4: - resolution: {integrity: sha512-oQ8RrK1VS8lrxkLriotFq+PiF7iiGgkZtfLKF4DDKsmdbPo0O9R2mQxm7jHLuXraRCuIQDWMIw6dpcr7Iykf4A==} + turbo-windows-arm64@2.7.3: + resolution: {integrity: sha512-nTodweTbPmkvwMu/a55XvjMsPtuyUSC+sV7f/SR57K36rB2I0YG21qNETN+00LOTUW9B3omd8XkiXJkt4kx/cw==} cpu: [arm64] os: [win32] - turbo@2.5.4: - resolution: {integrity: sha512-kc8ZibdRcuWUG1pbYSBFWqmIjynlD8Lp7IB6U3vIzvOv9VG+6Sp8bzyeBWE3Oi8XV5KsQrznyRTBPvrf99E4mA==} + turbo@2.7.3: + resolution: {integrity: sha512-+HjKlP4OfYk+qzvWNETA3cUO5UuK6b5MSc2UJOKyvBceKucQoQGb2g7HlC2H1GHdkfKrk4YF1VPvROkhVZDDLQ==} hasBin: true tw-animate-css@1.3.6: @@ -9884,9 +9881,9 @@ snapshots: '@formatjs/fast-memoize': 3.0.3 tslib: 2.8.1 - '@fumadocs/ui@16.4.4(@types/react@19.2.7)(lucide-react@0.562.0(react@19.2.3))(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.11)(zod@4.3.5)': + '@fumadocs/ui@16.4.4(@types/react@19.2.7)(lucide-react@0.562.0(react@19.2.3))(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.11)(zod@4.3.5)': dependencies: - fumadocs-core: 16.4.4(@types/react@19.2.7)(lucide-react@0.562.0(react@19.2.3))(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5) + fumadocs-core: 16.4.4(@types/react@19.2.7)(lucide-react@0.562.0(react@19.2.3))(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5) next-themes: 0.4.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) postcss-selector-parser: 7.1.1 react: 19.2.3 @@ -9894,7 +9891,7 @@ snapshots: tailwind-merge: 3.4.0 optionalDependencies: '@types/react': 19.2.7 - next: 16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + next: 16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) tailwindcss: 4.1.11 transitivePeerDependencies: - '@mixedbread/sdk' @@ -10042,6 +10039,7 @@ snapshots: '@inquirer/type': 3.0.7(@types/node@22.19.3) optionalDependencies: '@types/node': 22.19.3 + optional: true '@inquirer/core@10.1.13(@types/node@22.17.1)': dependencies: @@ -10068,6 +10066,7 @@ snapshots: yoctocolors-cjs: 2.1.2 optionalDependencies: '@types/node': 22.19.3 + optional: true '@inquirer/figures@1.0.12': {} @@ -10078,6 +10077,7 @@ snapshots: '@inquirer/type@3.0.7(@types/node@22.19.3)': optionalDependencies: '@types/node': 22.19.3 + optional: true '@isaacs/balanced-match@4.0.1': {} @@ -10450,7 +10450,7 @@ snapshots: '@orama/orama@3.1.18': {} - '@oxc-project/types@0.106.0': {} + '@oxc-project/types@0.107.0': {} '@oxc-resolver/binding-darwin-arm64@9.0.2': optional: true @@ -11357,50 +11357,50 @@ snapshots: dependencies: react: 19.2.3 - '@rolldown/binding-android-arm64@1.0.0-beta.58': + '@rolldown/binding-android-arm64@1.0.0-beta.59': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.58': + '@rolldown/binding-darwin-arm64@1.0.0-beta.59': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.58': + '@rolldown/binding-darwin-x64@1.0.0-beta.59': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.58': + '@rolldown/binding-freebsd-x64@1.0.0-beta.59': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.58': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.59': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.58': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.59': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.58': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.59': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.58': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.59': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.58': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.59': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-beta.58': + '@rolldown/binding-openharmony-arm64@1.0.0-beta.59': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.58': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.59': dependencies: '@napi-rs/wasm-runtime': 1.1.1 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.58': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.59': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.58': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.59': optional: true '@rolldown/pluginutils@1.0.0-beta.27': {} - '@rolldown/pluginutils@1.0.0-beta.58': {} + '@rolldown/pluginutils@1.0.0-beta.59': {} '@rollup/plugin-replace@6.0.3(rollup@4.40.2)': dependencies: @@ -11908,11 +11908,11 @@ snapshots: dependencies: '@trpc/server': 11.0.0-rc.441 - '@trpc/next@11.0.0-rc.441(@tanstack/react-query@5.90.12(react@19.2.3))(@trpc/client@11.0.0-rc.441(@trpc/server@11.0.0-rc.441))(@trpc/react-query@11.0.0-rc.441(@tanstack/react-query@5.90.12(react@19.2.3))(@trpc/client@11.0.0-rc.441(@trpc/server@11.0.0-rc.441))(@trpc/server@11.0.0-rc.441)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@trpc/server@11.0.0-rc.441)(next@16.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@trpc/next@11.0.0-rc.441(@tanstack/react-query@5.90.12(react@19.2.3))(@trpc/client@11.0.0-rc.441(@trpc/server@11.0.0-rc.441))(@trpc/react-query@11.0.0-rc.441(@tanstack/react-query@5.90.12(react@19.2.3))(@trpc/client@11.0.0-rc.441(@trpc/server@11.0.0-rc.441))(@trpc/server@11.0.0-rc.441)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@trpc/server@11.0.0-rc.441)(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@trpc/client': 11.0.0-rc.441(@trpc/server@11.0.0-rc.441) '@trpc/server': 11.0.0-rc.441 - next: 16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + next: 16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: 19.2.3 react-dom: 19.2.3(react@19.2.3) optionalDependencies: @@ -13582,7 +13582,7 @@ snapshots: fsevents@2.3.3: optional: true - fumadocs-core@16.4.4(@types/react@19.2.7)(lucide-react@0.511.0(react@19.2.3))(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5): + fumadocs-core@16.4.4(@types/react@19.2.7)(lucide-react@0.511.0(react@19.2.3))(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5): dependencies: '@formatjs/intl-localematcher': 0.7.5 '@orama/orama': 3.1.18 @@ -13606,14 +13606,14 @@ snapshots: optionalDependencies: '@types/react': 19.2.7 lucide-react: 0.511.0(react@19.2.3) - next: 16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + next: 16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: 19.2.3 react-dom: 19.2.3(react@19.2.3) zod: 4.3.5 transitivePeerDependencies: - supports-color - fumadocs-core@16.4.4(@types/react@19.2.7)(lucide-react@0.562.0(react@19.2.3))(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5): + fumadocs-core@16.4.4(@types/react@19.2.7)(lucide-react@0.562.0(react@19.2.3))(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5): dependencies: '@formatjs/intl-localematcher': 0.7.5 '@orama/orama': 3.1.18 @@ -13637,21 +13637,21 @@ snapshots: optionalDependencies: '@types/react': 19.2.7 lucide-react: 0.562.0(react@19.2.3) - next: 16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + next: 16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: 19.2.3 react-dom: 19.2.3(react@19.2.3) zod: 4.3.5 transitivePeerDependencies: - supports-color - fumadocs-mdx@14.2.4(@types/react@19.2.7)(fumadocs-core@16.4.4(@types/react@19.2.7)(lucide-react@0.511.0(react@19.2.3))(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5))(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(vite@6.3.5(@types/node@22.17.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)): + fumadocs-mdx@14.2.4(@types/react@19.2.7)(fumadocs-core@16.4.4(@types/react@19.2.7)(lucide-react@0.511.0(react@19.2.3))(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5))(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(vite@6.3.5(@types/node@22.17.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)): dependencies: '@mdx-js/mdx': 3.1.1 '@standard-schema/spec': 1.1.0 chokidar: 5.0.0 esbuild: 0.27.2 estree-util-value-to-estree: 3.5.0 - fumadocs-core: 16.4.4(@types/react@19.2.7)(lucide-react@0.511.0(react@19.2.3))(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5) + fumadocs-core: 16.4.4(@types/react@19.2.7)(lucide-react@0.511.0(react@19.2.3))(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5) js-yaml: 4.1.1 mdast-util-to-markdown: 2.1.2 picocolors: 1.1.1 @@ -13666,17 +13666,17 @@ snapshots: zod: 4.3.5 optionalDependencies: '@types/react': 19.2.7 - next: 16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + next: 16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: 19.2.3 vite: 6.3.5(@types/node@22.17.1)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color - fumadocs-twoslash@3.1.12(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(fumadocs-ui@16.4.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.11)(zod@4.3.5))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3): + fumadocs-twoslash@3.1.12(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(fumadocs-ui@16.4.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.11)(zod@4.3.5))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3): dependencies: '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@shikijs/twoslash': 3.20.0(typescript@5.9.3) - fumadocs-ui: 16.4.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.11)(zod@4.3.5) + fumadocs-ui: 16.4.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.11)(zod@4.3.5) mdast-util-from-markdown: 2.0.2 mdast-util-gfm: 3.1.0 mdast-util-to-hast: 13.2.1 @@ -13692,10 +13692,10 @@ snapshots: - supports-color - typescript - fumadocs-typescript@5.0.1(@types/react@19.2.7)(fumadocs-core@16.4.4(@types/react@19.2.7)(lucide-react@0.511.0(react@19.2.3))(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5))(fumadocs-ui@16.4.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.11)(zod@4.3.5))(react@19.2.3)(typescript@5.9.3): + fumadocs-typescript@5.0.1(@types/react@19.2.7)(fumadocs-core@16.4.4(@types/react@19.2.7)(lucide-react@0.511.0(react@19.2.3))(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5))(fumadocs-ui@16.4.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.11)(zod@4.3.5))(react@19.2.3)(typescript@5.9.3): dependencies: estree-util-value-to-estree: 3.5.0 - fumadocs-core: 16.4.4(@types/react@19.2.7)(lucide-react@0.511.0(react@19.2.3))(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5) + fumadocs-core: 16.4.4(@types/react@19.2.7)(lucide-react@0.511.0(react@19.2.3))(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5) hast-util-to-estree: 3.1.3 hast-util-to-jsx-runtime: 2.3.6 react: 19.2.3 @@ -13707,13 +13707,13 @@ snapshots: unist-util-visit: 5.0.0 optionalDependencies: '@types/react': 19.2.7 - fumadocs-ui: 16.4.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.11)(zod@4.3.5) + fumadocs-ui: 16.4.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.11)(zod@4.3.5) transitivePeerDependencies: - supports-color - fumadocs-ui@16.4.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.11)(zod@4.3.5): + fumadocs-ui@16.4.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.11)(zod@4.3.5): dependencies: - '@fumadocs/ui': 16.4.4(@types/react@19.2.7)(lucide-react@0.562.0(react@19.2.3))(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.11)(zod@4.3.5) + '@fumadocs/ui': 16.4.4(@types/react@19.2.7)(lucide-react@0.562.0(react@19.2.3))(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.11)(zod@4.3.5) '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -13725,7 +13725,7 @@ snapshots: '@radix-ui/react-slot': 1.2.4(@types/react@19.2.7)(react@19.2.3) '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) class-variance-authority: 0.7.1 - fumadocs-core: 16.4.4(@types/react@19.2.7)(lucide-react@0.562.0(react@19.2.3))(next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5) + fumadocs-core: 16.4.4(@types/react@19.2.7)(lucide-react@0.562.0(react@19.2.3))(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.5) lucide-react: 0.562.0(react@19.2.3) next-themes: 0.4.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: 19.2.3 @@ -15103,6 +15103,7 @@ snapshots: typescript: 5.9.3 transitivePeerDependencies: - '@types/node' + optional: true muggle-string@0.4.1: {} @@ -15147,13 +15148,13 @@ snapshots: optionalDependencies: '@rollup/rollup-linux-x64-gnu': 4.40.2 - next-auth@4.24.11(next@16.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + next-auth@4.24.11(next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: '@babel/runtime': 7.27.1 '@panva/hkdf': 1.2.1 cookie: 0.7.2 jose: 4.15.9 - next: 16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + next: 16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) oauth: 0.9.15 openid-client: 5.7.1 preact: 10.26.6 @@ -15169,7 +15170,7 @@ snapshots: next-tick@1.1.0: {} - next@16.1.1(@babel/core@7.27.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + next@16.1.1(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: '@next/env': 16.1.1 '@swc/helpers': 0.5.15 @@ -15178,7 +15179,7 @@ snapshots: postcss: 8.4.31 react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - styled-jsx: 5.1.6(@babel/core@7.27.7)(react@19.2.3) + styled-jsx: 5.1.6(@babel/core@7.28.5)(react@19.2.3) optionalDependencies: '@next/swc-darwin-arm64': 16.1.1 '@next/swc-darwin-x64': 16.1.1 @@ -15926,7 +15927,7 @@ snapshots: rfdc@1.4.1: {} - rolldown-plugin-dts@0.15.10(rolldown@1.0.0-beta.58)(typescript@5.9.3): + rolldown-plugin-dts@0.15.10(rolldown@1.0.0-beta.59)(typescript@5.9.3): dependencies: '@babel/generator': 7.28.5 '@babel/parser': 7.28.5 @@ -15936,31 +15937,31 @@ snapshots: debug: 4.4.1(supports-color@5.5.0) dts-resolver: 2.1.3 get-tsconfig: 4.13.0 - rolldown: 1.0.0-beta.58 + rolldown: 1.0.0-beta.59 optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - oxc-resolver - supports-color - rolldown@1.0.0-beta.58: + rolldown@1.0.0-beta.59: dependencies: - '@oxc-project/types': 0.106.0 - '@rolldown/pluginutils': 1.0.0-beta.58 + '@oxc-project/types': 0.107.0 + '@rolldown/pluginutils': 1.0.0-beta.59 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-beta.58 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.58 - '@rolldown/binding-darwin-x64': 1.0.0-beta.58 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.58 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.58 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.58 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.58 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.58 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.58 - '@rolldown/binding-openharmony-arm64': 1.0.0-beta.58 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.58 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.58 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.58 + '@rolldown/binding-android-arm64': 1.0.0-beta.59 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.59 + '@rolldown/binding-darwin-x64': 1.0.0-beta.59 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.59 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.59 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.59 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.59 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.59 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.59 + '@rolldown/binding-openharmony-arm64': 1.0.0-beta.59 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.59 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.59 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.59 rollup-plugin-preserve-directives@0.4.0(rollup@4.40.2): dependencies: @@ -16105,38 +16106,6 @@ snapshots: - supports-color - typescript - shadcn@2.10.0(@types/node@22.19.3)(typescript@5.9.3): - dependencies: - '@antfu/ni': 23.3.1 - '@babel/core': 7.27.7 - '@babel/parser': 7.28.3 - '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.7) - '@modelcontextprotocol/sdk': 1.17.2 - commander: 10.0.1 - cosmiconfig: 8.3.6(typescript@5.9.3) - deepmerge: 4.3.1 - diff: 5.2.0 - execa: 7.2.0 - fast-glob: 3.3.3 - fs-extra: 11.3.0 - https-proxy-agent: 6.2.1 - kleur: 4.1.5 - msw: 2.10.2(@types/node@22.19.3)(typescript@5.9.3) - node-fetch: 3.3.2 - ora: 6.3.1 - postcss: 8.5.6 - prompts: 2.4.2 - recast: 0.23.11 - stringify-object: 5.0.0 - ts-morph: 18.0.0 - tsconfig-paths: 4.2.0 - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - '@types/node' - - supports-color - - typescript - sharp@0.34.5: dependencies: '@img/colour': 1.0.0 @@ -16405,12 +16374,12 @@ snapshots: dependencies: inline-style-parser: 0.2.4 - styled-jsx@5.1.6(@babel/core@7.27.7)(react@19.2.3): + styled-jsx@5.1.6(@babel/core@7.28.5)(react@19.2.3): dependencies: client-only: 0.0.1 react: 19.2.3 optionalDependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.28.5 superjson@2.2.2: dependencies: @@ -16607,8 +16576,8 @@ snapshots: diff: 8.0.2 empathic: 2.0.0 hookable: 5.5.3 - rolldown: 1.0.0-beta.58 - rolldown-plugin-dts: 0.15.10(rolldown@1.0.0-beta.58)(typescript@5.9.3) + rolldown: 1.0.0-beta.59 + rolldown-plugin-dts: 0.15.10(rolldown@1.0.0-beta.59)(typescript@5.9.3) semver: 7.7.2 tinyexec: 1.0.1 tinyglobby: 0.2.14 @@ -16644,32 +16613,32 @@ snapshots: safe-buffer: 5.2.1 optional: true - turbo-darwin-64@2.5.4: + turbo-darwin-64@2.7.3: optional: true - turbo-darwin-arm64@2.5.4: + turbo-darwin-arm64@2.7.3: optional: true - turbo-linux-64@2.5.4: + turbo-linux-64@2.7.3: optional: true - turbo-linux-arm64@2.5.4: + turbo-linux-arm64@2.7.3: optional: true - turbo-windows-64@2.5.4: + turbo-windows-64@2.7.3: optional: true - turbo-windows-arm64@2.5.4: + turbo-windows-arm64@2.7.3: optional: true - turbo@2.5.4: + turbo@2.7.3: optionalDependencies: - turbo-darwin-64: 2.5.4 - turbo-darwin-arm64: 2.5.4 - turbo-linux-64: 2.5.4 - turbo-linux-arm64: 2.5.4 - turbo-windows-64: 2.5.4 - turbo-windows-arm64: 2.5.4 + turbo-darwin-64: 2.7.3 + turbo-darwin-arm64: 2.7.3 + turbo-linux-64: 2.7.3 + turbo-linux-arm64: 2.7.3 + turbo-windows-64: 2.7.3 + turbo-windows-arm64: 2.7.3 tw-animate-css@1.3.6: {} diff --git a/turbo.json b/turbo.json index 4f7784de..24d7b5a3 100644 --- a/turbo.json +++ b/turbo.json @@ -21,6 +21,10 @@ "outputs": ["coverage/**"], "dependsOn": [] }, + "typecheck": { + "dependsOn": ["^build"], + "outputs": [] + }, "lint": {}, "dev": { "cache": false,