diff --git a/packages/server/src/schema/types.generated.ts b/packages/server/src/schema/types.generated.ts index 2effb99..7b9d631 100644 --- a/packages/server/src/schema/types.generated.ts +++ b/packages/server/src/schema/types.generated.ts @@ -685,8 +685,8 @@ export type ResolversParentTypes = { export type BlockResolvers< ContextType = DataProvider, - ParentType extends - ResolversParentTypes['Block'] = ResolversParentTypes['Block'], + ParentType extends ResolversParentTypes['Block'] = + ResolversParentTypes['Block'], > = { blockLabel?: Resolver< Maybe, @@ -775,8 +775,8 @@ export type BlockLayoutResolvers = EnumResolverSignature< export type CertificationResolvers< ContextType = DataProvider, - ParentType extends - ResolversParentTypes['Certification'] = ResolversParentTypes['Certification'], + ParentType extends ResolversParentTypes['Certification'] = + ResolversParentTypes['Certification'], > = { dashedName?: Resolver; superblock?: Resolver; @@ -784,8 +784,8 @@ export type CertificationResolvers< export type ChallengeResolvers< ContextType = DataProvider, - ParentType extends - ResolversParentTypes['Challenge'] = ResolversParentTypes['Challenge'], + ParentType extends ResolversParentTypes['Challenge'] = + ResolversParentTypes['Challenge'], > = { block?: Resolver; content?: Resolver< @@ -799,8 +799,8 @@ export type ChallengeResolvers< export type ChallengeContentResolvers< ContextType = DataProvider, - ParentType extends - ResolversParentTypes['ChallengeContent'] = ResolversParentTypes['ChallengeContent'], + ParentType extends ResolversParentTypes['ChallengeContent'] = + ResolversParentTypes['ChallengeContent'], > = { description?: Resolver; files?: Resolver< @@ -819,8 +819,8 @@ export type ChallengeContentResolvers< export type ChallengeFileResolvers< ContextType = DataProvider, - ParentType extends - ResolversParentTypes['ChallengeFile'] = ResolversParentTypes['ChallengeFile'], + ParentType extends ResolversParentTypes['ChallengeFile'] = + ResolversParentTypes['ChallengeFile'], > = { contents?: Resolver; editableRegionBoundaries?: Resolver< @@ -834,8 +834,8 @@ export type ChallengeFileResolvers< export type ChapterResolvers< ContextType = DataProvider, - ParentType extends - ResolversParentTypes['Chapter'] = ResolversParentTypes['Chapter'], + ParentType extends ResolversParentTypes['Chapter'] = + ResolversParentTypes['Chapter'], > = { comingSoon?: Resolver; dashedName?: Resolver; @@ -845,8 +845,8 @@ export type ChapterResolvers< export type CurriculumResolvers< ContextType = DataProvider, - ParentType extends - ResolversParentTypes['Curriculum'] = ResolversParentTypes['Curriculum'], + ParentType extends ResolversParentTypes['Curriculum'] = + ResolversParentTypes['Curriculum'], > = { certifications?: Resolver< Array, @@ -862,8 +862,8 @@ export type CurriculumResolvers< export type DataStoreMetricsResolvers< ContextType = DataProvider, - ParentType extends - ResolversParentTypes['DataStoreMetrics'] = ResolversParentTypes['DataStoreMetrics'], + ParentType extends ResolversParentTypes['DataStoreMetrics'] = + ResolversParentTypes['DataStoreMetrics'], > = { blockCount?: Resolver; challengeCount?: Resolver; @@ -875,8 +875,8 @@ export type DataStoreMetricsResolvers< export type HealthCheckResolvers< ContextType = DataProvider, - ParentType extends - ResolversParentTypes['HealthCheck'] = ResolversParentTypes['HealthCheck'], + ParentType extends ResolversParentTypes['HealthCheck'] = + ResolversParentTypes['HealthCheck'], > = { dataStore?: Resolver< ResolversTypes['DataStoreMetrics'], @@ -889,8 +889,8 @@ export type HealthCheckResolvers< export type ModuleResolvers< ContextType = DataProvider, - ParentType extends - ResolversParentTypes['Module'] = ResolversParentTypes['Module'], + ParentType extends ResolversParentTypes['Module'] = + ResolversParentTypes['Module'], > = { blockObjects?: Resolver< Array, @@ -910,8 +910,8 @@ export type ModuleResolvers< export type QueryResolvers< ContextType = DataProvider, - ParentType extends - ResolversParentTypes['Query'] = ResolversParentTypes['Query'], + ParentType extends ResolversParentTypes['Query'] = + ResolversParentTypes['Query'], > = { _health?: Resolver; block?: Resolver< @@ -971,8 +971,8 @@ export type QueryResolvers< export type RequiredResourceResolvers< ContextType = DataProvider, - ParentType extends - ResolversParentTypes['RequiredResource'] = ResolversParentTypes['RequiredResource'], + ParentType extends ResolversParentTypes['RequiredResource'] = + ResolversParentTypes['RequiredResource'], > = { link?: Resolver, ParentType, ContextType>; src?: Resolver, ParentType, ContextType>; @@ -980,8 +980,8 @@ export type RequiredResourceResolvers< export type SolutionResolvers< ContextType = DataProvider, - ParentType extends - ResolversParentTypes['Solution'] = ResolversParentTypes['Solution'], + ParentType extends ResolversParentTypes['Solution'] = + ResolversParentTypes['Solution'], > = { files?: Resolver< Array, @@ -992,8 +992,8 @@ export type SolutionResolvers< export type SuperblockResolvers< ContextType = DataProvider, - ParentType extends - ResolversParentTypes['Superblock'] = ResolversParentTypes['Superblock'], + ParentType extends ResolversParentTypes['Superblock'] = + ResolversParentTypes['Superblock'], > = { blockObjects?: Resolver< Array, @@ -1017,8 +1017,8 @@ export type SuperblockResolvers< export type TestResolvers< ContextType = DataProvider, - ParentType extends - ResolversParentTypes['Test'] = ResolversParentTypes['Test'], + ParentType extends ResolversParentTypes['Test'] = + ResolversParentTypes['Test'], > = { testString?: Resolver; text?: Resolver; diff --git a/packages/studio/.prettierrc b/packages/studio/.prettierrc new file mode 100644 index 0000000..5329a56 --- /dev/null +++ b/packages/studio/.prettierrc @@ -0,0 +1,7 @@ +{ + "semi": true, + "singleQuote": true, + "tabWidth": 2, + "printWidth": 80, + "trailingComma": "es5" +} diff --git a/packages/studio/README.md b/packages/studio/README.md new file mode 100644 index 0000000..80f0fb6 --- /dev/null +++ b/packages/studio/README.md @@ -0,0 +1,159 @@ +# Curriculum Studio + +Visual editor for freeCodeCamp curriculum metadata. Connects to the curriculum GraphQL API to browse and edit superblocks, blocks, and challenges. + +**MVP1** -- read-only GraphQL queries with local-only draft editing. No authentication, no mutations. + +## Setup + +### Prerequisites + +- Node.js 20+ +- pnpm 10+ +- The GraphQL API server running (see root project README) + +### Environment + +Copy the example env file and adjust if needed: + +```bash +cp .env.local.example .env.local +``` + +| Variable | Default | Description | +| ------------------------- | ------------------------------- | -------------------- | +| `NEXT_PUBLIC_GRAPHQL_URL` | `http://localhost:4000/graphql` | GraphQL API endpoint | + +### Commands + +```bash +pnpm dev # Start dev server (Turbopack) +pnpm build # Production build +pnpm type-check # TypeScript strict check +pnpm lint # Lint with oxlint +pnpm test # Run tests with vitest +pnpm codegen # Regenerate GraphQL types from schema +``` + +To run the full stack from the monorepo root: + +```bash +pnpm develop # Starts both the GraphQL server and Studio +``` + +## Architecture + +### Tech stack + +- **Framework**: Next.js 15 (App Router) with TypeScript strict mode +- **GraphQL client**: urql v5 with document cache +- **UI**: Tailwind CSS v4, shadcn-style components (CVA + clsx) +- **Draft system**: localStorage + fast-json-patch (RFC 6902) +- **Testing**: vitest + +### Project structure + +``` +src/ + app/ # Next.js App Router pages + page.tsx # Curriculum overview (/) + layout.tsx # Root layout with sidebar + superblocks/ + [dashedName]/page.tsx # Superblock detail + blocks/ + [dashedName]/page.tsx # Block detail (main editing page) + challenges/ + [id]/page.tsx # Challenge detail + drafts/ + page.tsx # Drafts listing + components/ # React components + providers.tsx # urql Provider + sidebar.tsx # Searchable superblock sidebar + breadcrumbs.tsx # Breadcrumb navigation + challenge-table.tsx # Challenge order table with reorder + diff-viewer.tsx # JSON Patch diff viewer + draft-indicator.tsx # Draft status badges + ui/ # Reusable UI primitives + graphql/ + types.ts # TypeScript types matching GraphQL schema + queries.ts # GraphQL query definitions + lib/ + drafts.ts # Draft store (localStorage + JSON Patch) + use-draft.ts # React hook for draft management + validation.ts # Validation rules + urql.ts # urql client configuration + utils.ts # Shared utilities +``` + +## How drafts work + +Drafts are stored in `localStorage` using keys like `draft:block:{dashedName}` and `draft:challenge:{id}`. + +Each draft record contains: + +- `updatedAt` -- ISO timestamp of last save +- `originalHash` -- djb2 hash of the original data (for drift detection) +- `patch` -- array of RFC 6902 JSON Patch operations + +### Draft lifecycle + +1. Open a block or challenge page +2. If a saved draft exists, it is applied on top of the current server data +3. Edit fields -- changes are held in memory (not written to localStorage on every keystroke) +4. Click **Save Draft** to persist to localStorage +5. Click **Discard Changes** to reset to original server data + +### Drift detection + +When the server data changes after a draft was created, the `originalHash` will not match. The UI shows a "Draft may be out of date" warning. The draft can still be viewed and edited. + +## How to export/import patches + +### Export + +On the block detail page, click **Export Patch**. This downloads a JSON file containing: + +```json +{ + "type": "block", + "id": "basic-html", + "updatedAt": "2025-01-15T10:30:00.000Z", + "originalHash": "abc123", + "patch": [{ "op": "replace", "path": "/helpCategory", "value": "JavaScript" }] +} +``` + +### Import + +Click **Import Patch** and select a previously exported JSON file. The patch operations are applied to the current server data and loaded into the editor. You can then review and save the draft. + +## Schema assumptions + +- `Challenge.content` always returns `null` in MVP. The UI shows "Content not available in MVP". +- `Block.blockLabel` is nullable (some blocks do not have a label). +- `Block.usesMultifileEditor` and `Block.hasEditableBoundaries` are nullable booleans. +- `Block.superblocks` returns parent superblocks (blocks can be shared across superblocks in v9). +- The GraphQL schema uses `BlockLabel` (not `BlockType`) for pedagogical classification. + +## Validation rules + +- `block.helpCategory` must be non-empty +- `challenge.title` must be non-empty +- `challengeOrder` must not contain duplicate challenge IDs +- Enum selects only allow valid values (enforced by the UI) +- Saving a draft is blocked when validation fails + +## GraphQL Code Generation + +The codegen config (`codegen.ts`) points to the server's GraphQL schema file. Running `pnpm codegen` generates typed document nodes in `src/graphql/generated/`. This is optional -- the app uses manually maintained types in `src/graphql/types.ts` by default. + +## Follow-up improvements (MVP2) + +- **Mutations**: persist edits to the server via GraphQL mutations +- **Review workflow**: draft approval flow with multiple reviewers +- **Authentication**: user login and role-based permissions +- **Drag-and-drop**: replace up/down buttons with drag-and-drop reorder (e.g. @dnd-kit) +- **Undo/redo**: operation history for draft edits +- **Collaborative editing**: real-time multi-user editing with conflict resolution +- **Challenge content**: display and edit challenge descriptions, instructions, and tests +- **Search**: global search across all blocks and challenges diff --git a/packages/studio/codegen.ts b/packages/studio/codegen.ts new file mode 100644 index 0000000..349da70 --- /dev/null +++ b/packages/studio/codegen.ts @@ -0,0 +1,22 @@ +import type { CodegenConfig } from '@graphql-codegen/cli'; + +const config: CodegenConfig = { + schema: '../server/src/schema/schema.graphql', + documents: ['src/**/*.ts', 'src/**/*.tsx'], + generates: { + 'src/graphql/generated/': { + preset: 'client', + config: { + useTypeImports: true, + enumsAsTypes: true, + skipTypename: true, + scalars: { + ID: 'string', + }, + }, + }, + }, + ignoreNoDocuments: true, +}; + +export default config; diff --git a/packages/studio/next-env.d.ts b/packages/studio/next-env.d.ts new file mode 100644 index 0000000..830fb59 --- /dev/null +++ b/packages/studio/next-env.d.ts @@ -0,0 +1,6 @@ +/// +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/packages/studio/next.config.ts b/packages/studio/next.config.ts new file mode 100644 index 0000000..94647ad --- /dev/null +++ b/packages/studio/next.config.ts @@ -0,0 +1,7 @@ +import type { NextConfig } from 'next'; + +const nextConfig: NextConfig = { + output: 'standalone', +}; + +export default nextConfig; diff --git a/packages/studio/package.json b/packages/studio/package.json new file mode 100644 index 0000000..3908f7c --- /dev/null +++ b/packages/studio/package.json @@ -0,0 +1,42 @@ +{ + "name": "@freecodecamp/studio", + "version": "0.1.0", + "private": true, + "type": "module", + "scripts": { + "dev": "next dev --turbopack", + "develop": "next dev --turbopack", + "build": "next build", + "start": "next start", + "type-check": "tsc --noEmit", + "lint": "oxlint src", + "format": "prettier --write src/", + "format:check": "prettier --check src/", + "test": "vitest run", + "test:watch": "vitest", + "codegen": "graphql-codegen --config codegen.ts" + }, + "dependencies": { + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "fast-json-patch": "^3.1.1", + "lucide-react": "^0.474.0", + "next": "^15.3.3", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "tailwind-merge": "^3.0.2", + "urql": "^5.0.1" + }, + "devDependencies": { + "@graphql-codegen/cli": "^6.0.1", + "@graphql-codegen/client-preset": "^4.8.2", + "@tailwindcss/postcss": "^4.1.8", + "@types/node": "^24.9.1", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "graphql": "^16.11.0", + "postcss": "^8.5.6", + "tailwindcss": "^4.1.8", + "typescript": "^5.9.3" + } +} diff --git a/packages/studio/postcss.config.mjs b/packages/studio/postcss.config.mjs new file mode 100644 index 0000000..5d6d845 --- /dev/null +++ b/packages/studio/postcss.config.mjs @@ -0,0 +1,8 @@ +/** @type {import('postcss-load-config').Config} */ +const config = { + plugins: { + '@tailwindcss/postcss': {}, + }, +}; + +export default config; diff --git a/packages/studio/src/app/blocks/[dashedName]/page.tsx b/packages/studio/src/app/blocks/[dashedName]/page.tsx new file mode 100644 index 0000000..1d582cb --- /dev/null +++ b/packages/studio/src/app/blocks/[dashedName]/page.tsx @@ -0,0 +1,411 @@ +'use client'; + +import { useState, useRef, use, useEffect } from 'react'; +import Link from 'next/link'; +import { useQuery } from 'urql'; +import { BLOCK_DETAIL_QUERY } from '@/graphql/queries'; +import type { BlockDetailResult, BlockDetail } from '@/graphql/types'; +import { BLOCK_LAYOUTS, BLOCK_LABELS } from '@/graphql/types'; +import { useDraft } from '@/lib/use-draft'; +import { validateBlock, type ValidationError } from '@/lib/validation'; +import { Breadcrumbs } from '@/components/breadcrumbs'; +import { DraftIndicator } from '@/components/draft-indicator'; +import { DiffViewer } from '@/components/diff-viewer'; +import { ChallengeTable } from '@/components/challenge-table'; +import { Button } from '@/components/ui/button'; +import { ConfirmModal } from '@/components/ui/confirm-modal'; +import { + FlashMessage, + type FlashMessageVariant, +} from '@/components/ui/flash-message'; +import { Input } from '@/components/ui/input'; +import { Select } from '@/components/ui/select'; +import { Card, CardHeader, CardContent } from '@/components/ui/card'; +import { Badge } from '@/components/ui/badge'; +import { Download, Upload, Eye, Save, Undo2 } from 'lucide-react'; + +export default function BlockDetailPage({ + params, +}: { + params: Promise<{ dashedName: string }>; +}) { + const { dashedName } = use(params); + const [result] = useQuery({ + query: BLOCK_DETAIL_QUERY, + variables: { dashedName }, + }); + + const original = result.data?.block ?? undefined; + const draft = useDraft('block', dashedName, original); + + const [showDiff, setShowDiff] = useState(false); + const [errors, setErrors] = useState([]); + const fileInputRef = useRef(null); + const flashTimeoutRef = useRef | null>(null); + const [flashMessage, setFlashMessage] = useState<{ + text: string; + variant: FlashMessageVariant; + } | null>(null); + const [isDiscardModalOpen, setIsDiscardModalOpen] = useState(false); + + const { data, fetching, error: queryError } = result; + + useEffect( + () => () => { + if (flashTimeoutRef.current) { + clearTimeout(flashTimeoutRef.current); + } + }, + [] + ); + + if (fetching) { + return ( +
+

Loading block...

+
+ ); + } + + if (queryError) { + return ( +
+

Error: {queryError.message}

+
+ ); + } + + if (!data?.block || !draft.edited) { + return ( +
+

Block not found

+
+ ); + } + + const block = draft.edited; + const parentSuperblock = block.superblocks[0]; + + function getFieldError(field: string): string | undefined { + return errors.find((e) => e.field === field)?.message; + } + + function clearFlashMessage() { + if (flashTimeoutRef.current) { + clearTimeout(flashTimeoutRef.current); + flashTimeoutRef.current = null; + } + setFlashMessage(null); + } + + function showFlashMessage( + text: string, + variant: FlashMessageVariant = 'success' + ) { + if (flashTimeoutRef.current) { + clearTimeout(flashTimeoutRef.current); + flashTimeoutRef.current = null; + } + + setFlashMessage({ text, variant }); + flashTimeoutRef.current = setTimeout(() => { + setFlashMessage(null); + flashTimeoutRef.current = null; + }, 2500); + } + + function handleSave() { + clearFlashMessage(); + + const validationErrors = validateBlock(block); + setErrors(validationErrors); + if (validationErrors.length > 0) return; + + const saveResult = draft.save(); + if (saveResult === 'saved') { + showFlashMessage('Draft saved locally.', 'success'); + } else if (saveResult === 'no_changes') { + showFlashMessage('No active changes to save.', 'info'); + } + } + + function handleExport() { + if (draft.currentPatch.length === 0) return; + const json = draft.getExportData(); + if (!json) return; + const blob = new Blob([json], { type: 'application/json' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = `patch-block-${dashedName}.json`; + a.click(); + URL.revokeObjectURL(url); + } + + function handleImport(e: React.ChangeEvent) { + const file = e.target.files?.[0]; + if (!file) return; + const reader = new FileReader(); + reader.onload = () => { + draft.importPatchData(reader.result as string); + }; + reader.readAsText(file); + e.target.value = ''; + } + + function handleDiscardConfirm() { + draft.discard(); + setErrors([]); + setIsDiscardModalOpen(false); + showFlashMessage('Draft changes discarded.', 'info'); + } + + const titleErrors = new Map(); + for (const err of errors) { + if (err.field.startsWith('challenge:')) { + titleErrors.set(err.field.replace('challenge:', ''), err.message); + } + } + const hasActiveChanges = draft.currentPatch.length > 0; + + return ( +
+ + +
+
+

{block.name}

+

+ {block.dashedName} +

+
+ +
+ + {block.superblocks.length > 1 && ( +
+ Shared across: + {block.superblocks.map((sb) => ( + + {sb.name} + + ))} +
+ )} + + {/* Block Metadata */} + + +

Block Metadata

+
+ +
+ + draft.updateEdited((prev) => ({ + ...prev, + helpCategory: e.target.value, + })) + } + error={getFieldError('helpCategory')} + /> + + + draft.updateEdited((prev) => ({ + ...prev, + blockLabel: + (e.target.value as BlockDetail['blockLabel']) || null, + })) + } + options={[ + { value: '', label: 'None' }, + ...BLOCK_LABELS.map((v) => ({ value: v, label: v })), + ]} + /> + +
+ + + + + +
+
+
+
+ + {/* Challenge Order */} +
+

+ Challenge Order ({block.challengeOrder.length}) +

+ {getFieldError('challengeOrder') && ( +

+ {getFieldError('challengeOrder')} +

+ )} + + draft.updateEdited((prev) => ({ ...prev, challengeOrder })) + } + titleErrors={titleErrors} + /> +
+ + {/* Action Buttons */} +
+ + + + + + +
+ + {errors.length > 0 && ( +
+

+ Cannot save draft. Fix the following errors: +

+
    + {errors.map((e, i) => ( +
  • {e.message}
  • + ))} +
+
+ )} + + {/* Diff Viewer */} + {showDiff && ( +
+ setShowDiff(false)} + /> +
+ )} + + setIsDiscardModalOpen(false)} + onConfirm={handleDiscardConfirm} + /> + + +
+ ); +} diff --git a/packages/studio/src/app/challenges/[id]/page.tsx b/packages/studio/src/app/challenges/[id]/page.tsx new file mode 100644 index 0000000..ec5641c --- /dev/null +++ b/packages/studio/src/app/challenges/[id]/page.tsx @@ -0,0 +1,292 @@ +'use client'; + +import { use, useEffect, useRef, useState } from 'react'; +import Link from 'next/link'; +import { useQuery } from 'urql'; +import { CHALLENGE_DETAIL_QUERY } from '@/graphql/queries'; +import type { ChallengeDetailResult, ChallengeDetail } from '@/graphql/types'; +import { useDraft } from '@/lib/use-draft'; +import { validateChallengeTitle } from '@/lib/validation'; +import { Breadcrumbs } from '@/components/breadcrumbs'; +import { DraftIndicator } from '@/components/draft-indicator'; +import { Button } from '@/components/ui/button'; +import { ConfirmModal } from '@/components/ui/confirm-modal'; +import { + FlashMessage, + type FlashMessageVariant, +} from '@/components/ui/flash-message'; +import { Input } from '@/components/ui/input'; +import { Card, CardHeader, CardContent } from '@/components/ui/card'; +import { Save, Undo2 } from 'lucide-react'; + +export default function ChallengeDetailPage({ + params, +}: { + params: Promise<{ id: string }>; +}) { + const { id } = use(params); + const [result] = useQuery({ + query: CHALLENGE_DETAIL_QUERY, + variables: { id }, + }); + + const original = result.data?.challenge ?? undefined; + const draft = useDraft('challenge', id, original); + const flashTimeoutRef = useRef | null>(null); + const [flashMessage, setFlashMessage] = useState<{ + text: string; + variant: FlashMessageVariant; + } | null>(null); + const [isDiscardModalOpen, setIsDiscardModalOpen] = useState(false); + + const { fetching, error: queryError } = result; + + useEffect( + () => () => { + if (flashTimeoutRef.current) { + clearTimeout(flashTimeoutRef.current); + } + }, + [] + ); + + if (fetching) { + return ( +
+

Loading challenge...

+
+ ); + } + + if (queryError) { + return ( +
+

Error: {queryError.message}

+
+ ); + } + + if (!original || !draft.edited) { + return ( +
+

Challenge not found

+
+ ); + } + + const challenge = draft.edited; + const titleErrors = validateChallengeTitle(challenge.title); + const challengeContent = challenge.content; + + function clearFlashMessage() { + if (flashTimeoutRef.current) { + clearTimeout(flashTimeoutRef.current); + flashTimeoutRef.current = null; + } + setFlashMessage(null); + } + + function showFlashMessage( + text: string, + variant: FlashMessageVariant = 'success' + ) { + if (flashTimeoutRef.current) { + clearTimeout(flashTimeoutRef.current); + flashTimeoutRef.current = null; + } + + setFlashMessage({ text, variant }); + flashTimeoutRef.current = setTimeout(() => { + setFlashMessage(null); + flashTimeoutRef.current = null; + }, 2500); + } + + function handleSave() { + clearFlashMessage(); + + if (titleErrors.length > 0) return; + + const saveResult = draft.save(); + if (saveResult === 'saved') { + showFlashMessage('Draft saved locally.', 'success'); + } else if (saveResult === 'no_changes') { + showFlashMessage('No active changes to save.', 'info'); + } + } + + function handleDiscardConfirm() { + draft.discard(); + setIsDiscardModalOpen(false); + showFlashMessage('Draft changes discarded.', 'info'); + } + + return ( +
+ + +
+

{challenge.title}

+ +
+ + + +

Challenge Metadata

+
+ +
+ +

+ {challenge.id} +

+
+ + + draft.updateEdited((prev) => ({ + ...prev, + title: e.target.value, + })) + } + error={titleErrors[0]?.message} + /> + +
+ +

+ + {challenge.block.name} + +

+
+
+
+ + + +

Content

+
+ + {challengeContent ? ( +
+
+

Description

+

+ {challengeContent.description} +

+
+ +
+

Instructions

+

+ {challengeContent.instructions} +

+
+ +
+

Starter Files

+ {challengeContent.files.length === 0 ? ( +

No starter files

+ ) : ( +
    + {challengeContent.files.map((file) => ( +
  • + {file.name}.{file.ext} +
  • + ))} +
+ )} +
+ +
+

Tests

+ {challengeContent.tests.length === 0 ? ( +

No tests

+ ) : ( +
    + {challengeContent.tests.slice(0, 10).map((test, index) => ( +
  • + {index + 1}. {test.text} +
  • + ))} +
+ )} + {challengeContent.tests.length > 10 && ( +

+ Showing 10 of {challengeContent.tests.length} tests +

+ )} +
+ +
+

Solutions

+

+ {challengeContent.solutions.length} solution + {challengeContent.solutions.length === 1 ? '' : 's'} +

+
+
+ ) : ( +
+

+ Content not available in MVP +

+

+ Challenge content (description, instructions, tests) will be + available in a future version. +

+
+ )} +
+
+ +
+ + +
+ + setIsDiscardModalOpen(false)} + onConfirm={handleDiscardConfirm} + /> + + +
+ ); +} diff --git a/packages/studio/src/app/drafts/page.tsx b/packages/studio/src/app/drafts/page.tsx new file mode 100644 index 0000000..eab2588 --- /dev/null +++ b/packages/studio/src/app/drafts/page.tsx @@ -0,0 +1,97 @@ +'use client'; + +import { useState, useEffect } from 'react'; +import Link from 'next/link'; +import { + listAllDrafts, + discardDraftRecord, + type DraftEntry, +} from '@/lib/drafts'; +import { formatDate } from '@/lib/utils'; +import { Breadcrumbs } from '@/components/breadcrumbs'; +import { Button } from '@/components/ui/button'; +import { Badge } from '@/components/ui/badge'; +import { Card, CardContent } from '@/components/ui/card'; +import { Trash2, ExternalLink, FileText } from 'lucide-react'; + +export default function DraftsPage() { + const [drafts, setDrafts] = useState([]); + + useEffect(() => { + setDrafts(listAllDrafts()); + }, []); + + function removeDraft(entry: DraftEntry) { + discardDraftRecord(entry.type, entry.id); + setDrafts(listAllDrafts()); + } + + function getLink(entry: DraftEntry): string { + if (entry.type === 'block') return `/blocks/${entry.id}`; + return `/challenges/${entry.id}`; + } + + return ( +
+ + +

Draft Changes

+

+ All locally saved drafts. These are stored in your browser and not + persisted to the server. +

+ + {drafts.length === 0 ? ( + + + +

No drafts yet

+

+ Edit a block or challenge and save a draft to see it here. +

+
+
+ ) : ( +
+ {drafts.map((entry) => ( +
+
+ {entry.type} +
+

{entry.id}

+

+ {entry.record.patch.length} change + {entry.record.patch.length !== 1 ? 's' : ''} --{' '} + {formatDate(entry.record.updatedAt)} +

+
+
+
+ + + + +
+
+ ))} +
+ )} +
+ ); +} diff --git a/packages/studio/src/app/globals.css b/packages/studio/src/app/globals.css new file mode 100644 index 0000000..aae2820 --- /dev/null +++ b/packages/studio/src/app/globals.css @@ -0,0 +1,29 @@ +@import 'tailwindcss'; + +@theme { + --color-background: #ffffff; + --color-foreground: #0a0a0a; + --color-muted: #f5f5f5; + --color-muted-foreground: #737373; + --color-border: #e5e5e5; + --color-primary: #0a0a0a; + --color-primary-foreground: #ffffff; + --color-accent: #f5f5f5; + --color-accent-foreground: #0a0a0a; + --color-destructive: #ef4444; + --color-destructive-foreground: #ffffff; + --color-warning: #f59e0b; + --color-success: #22c55e; + --color-draft: #3b82f6; + --radius-sm: 0.25rem; + --radius-md: 0.375rem; + --radius-lg: 0.5rem; +} + +@layer base { + body { + font-family: var(--font-sans, ui-sans-serif, system-ui, sans-serif); + background-color: var(--color-background); + color: var(--color-foreground); + } +} diff --git a/packages/studio/src/app/layout.tsx b/packages/studio/src/app/layout.tsx new file mode 100644 index 0000000..10564e7 --- /dev/null +++ b/packages/studio/src/app/layout.tsx @@ -0,0 +1,28 @@ +import type { Metadata } from 'next'; +import { Providers } from '@/components/providers'; +import { Sidebar } from '@/components/sidebar'; +import './globals.css'; + +export const metadata: Metadata = { + title: 'Curriculum Studio', + description: 'Visual editor for freeCodeCamp curriculum metadata', +}; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + + + +
+ +
{children}
+
+
+ + + ); +} diff --git a/packages/studio/src/app/page.tsx b/packages/studio/src/app/page.tsx new file mode 100644 index 0000000..5b99a15 --- /dev/null +++ b/packages/studio/src/app/page.tsx @@ -0,0 +1,108 @@ +'use client'; + +import Link from 'next/link'; +import { useQuery } from 'urql'; +import { CURRICULUM_OVERVIEW_QUERY } from '@/graphql/queries'; +import type { CurriculumOverviewResult } from '@/graphql/types'; +import { Breadcrumbs } from '@/components/breadcrumbs'; +import { Badge } from '@/components/ui/badge'; +import { Card, CardContent } from '@/components/ui/card'; +import { BookOpen, Award, Layers } from 'lucide-react'; + +export default function CurriculumOverview() { + const [result] = useQuery({ + query: CURRICULUM_OVERVIEW_QUERY, + }); + + const { data, fetching, error } = result; + + if (fetching) { + return ( +
+

Loading curriculum data...

+
+ ); + } + + if (error) { + return ( +
+

Error: {error.message}

+

+ Make sure the GraphQL server is running at the configured endpoint. +

+
+ ); + } + + if (!data) return null; + + const totalBlocks = data.superblocks.reduce( + (sum, sb) => sum + sb.blocks.length, + 0 + ); + + return ( +
+ + +

Curriculum Overview

+

+ Browse and edit freeCodeCamp curriculum metadata +

+ +
+ + + +
+

{data.superblocks.length}

+

Superblocks

+
+
+
+ + + +
+

{data.certifications.length}

+

Certifications

+
+
+
+ + + +
+

{totalBlocks}

+

Total Blocks

+
+
+
+
+ +

Superblocks

+
+ {data.superblocks.map((sb) => ( + +
+ {sb.name} + + {sb.blocks.length} block{sb.blocks.length !== 1 ? 's' : ''} + +
+
+ {sb.isCertification && ( + Certification + )} +
+ + ))} +
+
+ ); +} diff --git a/packages/studio/src/app/superblocks/[dashedName]/chapters/[chapterDashedName]/modules/[moduleDashedName]/page.tsx b/packages/studio/src/app/superblocks/[dashedName]/chapters/[chapterDashedName]/modules/[moduleDashedName]/page.tsx new file mode 100644 index 0000000..c1311ad --- /dev/null +++ b/packages/studio/src/app/superblocks/[dashedName]/chapters/[chapterDashedName]/modules/[moduleDashedName]/page.tsx @@ -0,0 +1,24 @@ +'use client'; + +import { use } from 'react'; +import { ModuleDetailPage } from '@/components/module-detail-page'; + +export default function NestedModuleDetailRoute({ + params, +}: { + params: Promise<{ + dashedName: string; + chapterDashedName: string; + moduleDashedName: string; + }>; +}) { + const { dashedName, chapterDashedName, moduleDashedName } = use(params); + + return ( + + ); +} diff --git a/packages/studio/src/app/superblocks/[dashedName]/page.tsx b/packages/studio/src/app/superblocks/[dashedName]/page.tsx new file mode 100644 index 0000000..b71908d --- /dev/null +++ b/packages/studio/src/app/superblocks/[dashedName]/page.tsx @@ -0,0 +1,158 @@ +'use client'; + +import { useState, use } from 'react'; +import Link from 'next/link'; +import { useQuery } from 'urql'; +import { SUPERBLOCK_DETAIL_QUERY } from '@/graphql/queries'; +import type { SuperblockDetailResult } from '@/graphql/types'; +import { BLOCK_LAYOUTS, BLOCK_LABELS } from '@/graphql/types'; +import { Breadcrumbs } from '@/components/breadcrumbs'; +import { Badge } from '@/components/ui/badge'; +import { Select } from '@/components/ui/select'; + +export default function SuperblockDetailPage({ + params, +}: { + params: Promise<{ dashedName: string }>; +}) { + const { dashedName } = use(params); + const [result] = useQuery({ + query: SUPERBLOCK_DETAIL_QUERY, + variables: { dashedName }, + }); + + const [layoutFilter, setLayoutFilter] = useState(''); + const [labelFilter, setLabelFilter] = useState(''); + const [upcomingFilter, setUpcomingFilter] = useState(''); + + const { data, fetching, error } = result; + + if (fetching) { + return ( +
+

Loading superblock...

+
+ ); + } + + if (error) { + return ( +
+

Error: {error.message}

+
+ ); + } + + const superblock = data?.superblock; + if (!superblock) { + return ( +
+

Superblock not found

+
+ ); + } + + let blocks = superblock.blockObjects; + if (layoutFilter) { + blocks = blocks.filter((b) => b.blockLayout === layoutFilter); + } + if (labelFilter) { + blocks = blocks.filter((b) => b.blockLabel === labelFilter); + } + if (upcomingFilter === 'true') { + blocks = blocks.filter((b) => b.isUpcomingChange); + } else if (upcomingFilter === 'false') { + blocks = blocks.filter((b) => !b.isUpcomingChange); + } + + return ( +
+ + +
+

{superblock.name}

+ {superblock.isCertification && ( + Certification + )} +
+ +
+
+
Dashed Name
+
{superblock.dashedName}
+
+
+
Blocks
+
{superblock.blockObjects.length}
+
+
+ +
+ setLabelFilter(e.target.value)} + options={[ + { value: '', label: 'All labels' }, + ...BLOCK_LABELS.map((v) => ({ value: v, label: v })), + ]} + /> + updateTitle(index, e.target.value)} + className={`w-full rounded border bg-background px-2 py-1 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/20 ${error ? 'border-destructive' : 'border-border'}`} + /> + {error && ( +

{error}

+ )} + + +
+ + + + + +
+ + + ); + })} + + + {challenges.length === 0 && ( +

+ No challenges in this block +

+ )} +
+ ); +} diff --git a/packages/studio/src/components/diff-viewer.tsx b/packages/studio/src/components/diff-viewer.tsx new file mode 100644 index 0000000..0eda023 --- /dev/null +++ b/packages/studio/src/components/diff-viewer.tsx @@ -0,0 +1,78 @@ +'use client'; + +import type { Operation } from 'fast-json-patch'; +import { cn } from '@/lib/utils'; +import { Button } from '@/components/ui/button'; +import { X } from 'lucide-react'; + +interface DiffViewerProps { + patch: Operation[]; + onClose: () => void; +} + +function opColor(op: string): string { + switch (op) { + case 'add': + return 'bg-success/10 text-success'; + case 'remove': + return 'bg-destructive/10 text-destructive'; + case 'replace': + return 'bg-warning/10 text-warning'; + case 'move': + return 'bg-draft/10 text-draft'; + default: + return 'bg-muted text-muted-foreground'; + } +} + +function formatValue(value: unknown): string { + if (value === undefined) return ''; + if (typeof value === 'string') return `"${value}"`; + return JSON.stringify(value); +} + +export function DiffViewer({ patch, onClose }: DiffViewerProps) { + if (patch.length === 0) { + return ( +
+

No changes detected

+ +
+ ); + } + + return ( +
+
+

+ Changes ({patch.length} operation{patch.length !== 1 ? 's' : ''}) +

+ +
+
+ {patch.map((op, i) => ( +
+ + {op.op} + + {op.path} + {'value' in op && ( + + {formatValue(op.value)} + + )} +
+ ))} +
+
+ ); +} diff --git a/packages/studio/src/components/draft-indicator.tsx b/packages/studio/src/components/draft-indicator.tsx new file mode 100644 index 0000000..af5149b --- /dev/null +++ b/packages/studio/src/components/draft-indicator.tsx @@ -0,0 +1,23 @@ +import { Badge } from '@/components/ui/badge'; + +interface DraftIndicatorProps { + hasSavedDraft: boolean; + hasUnsavedChanges: boolean; + isDraftOutdated: boolean; +} + +export function DraftIndicator({ + hasSavedDraft, + hasUnsavedChanges, + isDraftOutdated, +}: DraftIndicatorProps) { + return ( +
+ {hasSavedDraft && Draft changes} + {hasUnsavedChanges && Unsaved changes} + {isDraftOutdated && ( + Draft may be out of date + )} +
+ ); +} diff --git a/packages/studio/src/components/module-detail-page.tsx b/packages/studio/src/components/module-detail-page.tsx new file mode 100644 index 0000000..8109975 --- /dev/null +++ b/packages/studio/src/components/module-detail-page.tsx @@ -0,0 +1,150 @@ +'use client'; + +import Link from 'next/link'; +import { useQuery } from 'urql'; +import { MODULE_DETAIL_QUERY } from '@/graphql/queries'; +import type { ModuleDetailResult } from '@/graphql/types'; +import { Breadcrumbs } from '@/components/breadcrumbs'; +import { Badge } from '@/components/ui/badge'; + +const ACRONYMS = new Set(['api', 'css', 'html', 'json', 'sql']); + +function formatDashedNameLabel(dashedName: string): string { + return dashedName + .split('-') + .filter(Boolean) + .map((word) => + ACRONYMS.has(word.toLowerCase()) + ? word.toUpperCase() + : word.charAt(0).toUpperCase() + word.slice(1) + ) + .join(' '); +} + +interface ModuleDetailPageProps { + superblockDashedName: string; + chapterDashedName: string; + moduleDashedName: string; +} + +export function ModuleDetailPage({ + superblockDashedName, + chapterDashedName, + moduleDashedName, +}: ModuleDetailPageProps) { + const [result] = useQuery({ + query: MODULE_DETAIL_QUERY, + variables: { + superblockDashedName, + chapterDashedName, + }, + }); + + const matches = (result.data?.modules ?? []).filter( + (module) => module.dashedName === moduleDashedName + ); + const moduleMatch = matches[0] ?? null; + const totalMatches = matches.length; + + if (result.fetching) { + return ( +
+

Loading module...

+
+ ); + } + + if (result.error) { + return ( +
+

Error: {result.error.message}

+
+ ); + } + + if (!moduleMatch) { + return ( +
+

Module not found

+
+ ); + } + + const moduleName = formatDashedNameLabel(moduleMatch.dashedName); + const chapterName = formatDashedNameLabel(moduleMatch.chapter.dashedName); + + return ( +
+ + +
+

{moduleName}

+ {moduleMatch.moduleType && ( + {moduleMatch.moduleType} + )} + {moduleMatch.comingSoon && Coming Soon} +
+ +
+
+
Dashed Name
+
{moduleMatch.dashedName}
+
+
+
Blocks
+
{moduleMatch.blocks.length}
+
+ {totalMatches > 1 && ( +
+
Note
+
+ Multiple modules share this dashed name +
+
+ )} +
+ +
+ {moduleMatch.blockObjects.map((block) => ( + +
+ {block.name} + + {block.dashedName} + +
+
+ {block.blockLayout} + {block.blockLabel && ( + {block.blockLabel} + )} + {block.isUpcomingChange && ( + Upcoming + )} +
+ + ))} + + {moduleMatch.blockObjects.length === 0 && ( +

+ This module currently has no blocks +

+ )} +
+
+ ); +} diff --git a/packages/studio/src/components/providers.tsx b/packages/studio/src/components/providers.tsx new file mode 100644 index 0000000..f7b04c2 --- /dev/null +++ b/packages/studio/src/components/providers.tsx @@ -0,0 +1,8 @@ +'use client'; + +import { Provider } from 'urql'; +import { client } from '@/lib/urql'; + +export function Providers({ children }: { children: React.ReactNode }) { + return {children}; +} diff --git a/packages/studio/src/components/sidebar.tsx b/packages/studio/src/components/sidebar.tsx new file mode 100644 index 0000000..d203203 --- /dev/null +++ b/packages/studio/src/components/sidebar.tsx @@ -0,0 +1,294 @@ +'use client'; + +import { useMemo, useState } from 'react'; +import Link from 'next/link'; +import { usePathname } from 'next/navigation'; +import { useQuery } from 'urql'; +import { SIDEBAR_NAV_QUERY } from '@/graphql/queries'; +import type { + SidebarNavResult, + SidebarSuperblockListItem, +} from '@/graphql/types'; +import { Badge } from '@/components/ui/badge'; +import { cn } from '@/lib/utils'; +import { + buildSidebarTree, + filterSidebarTree, + getModuleHref, + type SidebarModuleNode, +} from '@/lib/sidebar-nav'; +import { BookOpen, ChevronRight, FileText, Search } from 'lucide-react'; + +const HIDDEN_SUPERBLOCKS = new Set(['full-stack-open']); + +export function Sidebar() { + const [search, setSearch] = useState(''); + const [expandedCertifications, setExpandedCertifications] = useState< + Record + >({}); + const [expandedChapters, setExpandedChapters] = useState< + Record + >({}); + const [result] = useQuery({ + query: SIDEBAR_NAV_QUERY, + }); + const pathname = usePathname(); + + const sidebarTree = useMemo( + () => buildSidebarTree(result.data, HIDDEN_SUPERBLOCKS), + [result.data] + ); + const filteredTree = useMemo( + () => filterSidebarTree(sidebarTree, search), + [sidebarTree, search] + ); + const normalizedSearch = search.trim().toLowerCase(); + + const hasNoMatches = + !result.fetching && + !result.error && + filteredTree.certifications.length === 0 && + filteredTree.otherSuperblocks.length === 0; + + const isSuperblockActive = (dashedName: string) => + pathname === `/superblocks/${dashedName}`; + const isModuleActive = (module: SidebarModuleNode) => + pathname === + getModuleHref({ + superblockDashedName: module.superblockDashedName, + chapterDashedName: module.chapterDashedName, + moduleDashedName: module.dashedName, + }); + + const renderSuperblockLink = ( + superblock: SidebarSuperblockListItem, + className?: string + ) => ( + + {superblock.name} + {superblock.isCertification && ( + + Cert + + )} + + ); + + const renderModuleItem = (module: SidebarModuleNode, className?: string) => ( + + {module.name} + + {module.blockCount} block{module.blockCount === 1 ? '' : 's'} + + + ); + + return ( + + ); +} diff --git a/packages/studio/src/components/ui/badge.tsx b/packages/studio/src/components/ui/badge.tsx new file mode 100644 index 0000000..cbe23c5 --- /dev/null +++ b/packages/studio/src/components/ui/badge.tsx @@ -0,0 +1,34 @@ +import { cva, type VariantProps } from 'class-variance-authority'; +import { cn } from '@/lib/utils'; + +const badgeVariants = cva( + 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-semibold transition-colors', + { + variants: { + variant: { + default: 'bg-primary text-primary-foreground', + secondary: 'bg-muted text-muted-foreground', + outline: 'border border-border text-foreground', + draft: 'bg-draft/10 text-draft border border-draft/20', + warning: 'bg-warning/10 text-warning border border-warning/20', + success: 'bg-success/10 text-success border border-success/20', + destructive: + 'bg-destructive/10 text-destructive border border-destructive/20', + }, + }, + defaultVariants: { + variant: 'default', + }, + } +); + +export interface BadgeProps + extends + React.HTMLAttributes, + VariantProps {} + +export function Badge({ className, variant, ...props }: BadgeProps) { + return ( + + ); +} diff --git a/packages/studio/src/components/ui/button.tsx b/packages/studio/src/components/ui/button.tsx new file mode 100644 index 0000000..af5a6c6 --- /dev/null +++ b/packages/studio/src/components/ui/button.tsx @@ -0,0 +1,45 @@ +import { forwardRef, type ButtonHTMLAttributes } from 'react'; +import { cva, type VariantProps } from 'class-variance-authority'; +import { cn } from '@/lib/utils'; + +const buttonVariants = cva( + 'inline-flex cursor-pointer items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:pointer-events-none disabled:opacity-50', + { + variants: { + variant: { + default: 'bg-primary text-primary-foreground hover:bg-primary/90', + destructive: + 'bg-destructive text-destructive-foreground hover:bg-destructive/90', + outline: + 'border border-border bg-background hover:bg-accent hover:text-accent-foreground', + ghost: 'hover:bg-accent hover:text-accent-foreground', + }, + size: { + sm: 'h-8 px-3 text-xs', + md: 'h-9 px-4', + lg: 'h-10 px-6', + icon: 'h-9 w-9', + }, + }, + defaultVariants: { + variant: 'default', + size: 'md', + }, + } +); + +export interface ButtonProps + extends + ButtonHTMLAttributes, + VariantProps {} + +export const Button = forwardRef( + ({ className, variant, size, ...props }, ref) => ( + + +
+ + + ); +} diff --git a/packages/studio/src/components/ui/flash-message.tsx b/packages/studio/src/components/ui/flash-message.tsx new file mode 100644 index 0000000..8d2ee40 --- /dev/null +++ b/packages/studio/src/components/ui/flash-message.tsx @@ -0,0 +1,39 @@ +import { CheckCircle2, Info } from 'lucide-react'; +import { cn } from '@/lib/utils'; + +export type FlashMessageVariant = 'success' | 'info'; + +interface FlashMessageProps { + message: string | null; + variant?: FlashMessageVariant; +} + +export function FlashMessage({ + message, + variant = 'success', +}: FlashMessageProps) { + if (!message) return null; + + const classes = + variant === 'success' + ? 'border-success/25 bg-success/10 text-success' + : 'border-draft/25 bg-draft/10 text-draft'; + + return ( +
+ {variant === 'success' ? ( + + ) : ( + + )} + {message} +
+ ); +} diff --git a/packages/studio/src/components/ui/input.tsx b/packages/studio/src/components/ui/input.tsx new file mode 100644 index 0000000..1cc6bcc --- /dev/null +++ b/packages/studio/src/components/ui/input.tsx @@ -0,0 +1,31 @@ +import { forwardRef, type InputHTMLAttributes } from 'react'; +import { cn } from '@/lib/utils'; + +export interface InputProps extends InputHTMLAttributes { + label?: string; + error?: string; +} + +export const Input = forwardRef( + ({ className, label, error, id, ...props }, ref) => ( +
+ {label && ( + + )} + + {error &&

{error}

} +
+ ) +); +Input.displayName = 'Input'; diff --git a/packages/studio/src/components/ui/select.tsx b/packages/studio/src/components/ui/select.tsx new file mode 100644 index 0000000..c90426b --- /dev/null +++ b/packages/studio/src/components/ui/select.tsx @@ -0,0 +1,44 @@ +import { forwardRef, type SelectHTMLAttributes } from 'react'; +import { cn } from '@/lib/utils'; + +export interface SelectProps extends SelectHTMLAttributes { + label?: string; + error?: string; + options: Array<{ value: string; label: string }>; + placeholder?: string; +} + +export const Select = forwardRef( + ({ className, label, error, options, placeholder, id, ...props }, ref) => ( +
+ {label && ( + + )} + + {error &&

{error}

} +
+ ) +); +Select.displayName = 'Select'; diff --git a/packages/studio/src/graphql/generated/fragment-masking.ts b/packages/studio/src/graphql/generated/fragment-masking.ts new file mode 100644 index 0000000..f2e0577 --- /dev/null +++ b/packages/studio/src/graphql/generated/fragment-masking.ts @@ -0,0 +1,111 @@ +/* eslint-disable */ +import type { + ResultOf, + DocumentTypeDecoration, + TypedDocumentNode, +} from '@graphql-typed-document-node/core'; +import type { FragmentDefinitionNode } from 'graphql'; +import type { Incremental } from './graphql'; + +export type FragmentType< + TDocumentType extends DocumentTypeDecoration, +> = + TDocumentType extends DocumentTypeDecoration + ? [TType] extends [{ ' $fragmentName'?: infer TKey }] + ? TKey extends string + ? { ' $fragmentRefs'?: { [key in TKey]: TType } } + : never + : never + : never; + +// return non-nullable if `fragmentType` is non-nullable +export function useFragment( + _documentNode: DocumentTypeDecoration, + fragmentType: FragmentType> +): TType; +// return nullable if `fragmentType` is undefined +export function useFragment( + _documentNode: DocumentTypeDecoration, + fragmentType: FragmentType> | undefined +): TType | undefined; +// return nullable if `fragmentType` is nullable +export function useFragment( + _documentNode: DocumentTypeDecoration, + fragmentType: FragmentType> | null +): TType | null; +// return nullable if `fragmentType` is nullable or undefined +export function useFragment( + _documentNode: DocumentTypeDecoration, + fragmentType: + | FragmentType> + | null + | undefined +): TType | null | undefined; +// return array of non-nullable if `fragmentType` is array of non-nullable +export function useFragment( + _documentNode: DocumentTypeDecoration, + fragmentType: Array>> +): Array; +// return array of nullable if `fragmentType` is array of nullable +export function useFragment( + _documentNode: DocumentTypeDecoration, + fragmentType: + | Array>> + | null + | undefined +): Array | null | undefined; +// return readonly array of non-nullable if `fragmentType` is array of non-nullable +export function useFragment( + _documentNode: DocumentTypeDecoration, + fragmentType: ReadonlyArray>> +): ReadonlyArray; +// return readonly array of nullable if `fragmentType` is array of nullable +export function useFragment( + _documentNode: DocumentTypeDecoration, + fragmentType: + | ReadonlyArray>> + | null + | undefined +): ReadonlyArray | null | undefined; +export function useFragment( + _documentNode: DocumentTypeDecoration, + fragmentType: + | FragmentType> + | Array>> + | ReadonlyArray>> + | null + | undefined +): TType | Array | ReadonlyArray | null | undefined { + return fragmentType as any; +} + +export function makeFragmentData< + F extends DocumentTypeDecoration, + FT extends ResultOf, +>(data: FT, _fragment: F): FragmentType { + return data as FragmentType; +} +export function isFragmentReady( + queryNode: DocumentTypeDecoration, + fragmentNode: TypedDocumentNode, + data: + | FragmentType, any>> + | null + | undefined +): data is FragmentType { + const deferredFields = ( + queryNode as { + __meta__?: { deferredFields: Record }; + } + ).__meta__?.deferredFields; + + if (!deferredFields) return true; + + const fragDef = fragmentNode.definitions[0] as + | FragmentDefinitionNode + | undefined; + const fragName = fragDef?.name?.value; + + const fields = (fragName && deferredFields[fragName]) || []; + return fields.length > 0 && fields.every((field) => data && field in data); +} diff --git a/packages/studio/src/graphql/generated/gql.ts b/packages/studio/src/graphql/generated/gql.ts new file mode 100644 index 0000000..97cc201 --- /dev/null +++ b/packages/studio/src/graphql/generated/gql.ts @@ -0,0 +1,104 @@ +/* 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 = { + '\n query Superblocks {\n superblocks {\n name\n dashedName\n isCertification\n }\n }\n': typeof types.SuperblocksDocument; + '\n query SidebarNav {\n curriculum {\n superblocks\n certifications\n }\n superblocks {\n name\n dashedName\n isCertification\n chapters {\n dashedName\n modules {\n dashedName\n blocks\n }\n }\n }\n }\n': typeof types.SidebarNavDocument; + '\n query CurriculumOverview {\n curriculum {\n superblocks\n certifications\n }\n superblocks {\n name\n dashedName\n isCertification\n blocks\n }\n certifications {\n dashedName\n }\n }\n': typeof types.CurriculumOverviewDocument; + '\n query SuperblockDetail($dashedName: String!) {\n superblock(dashedName: $dashedName) {\n name\n dashedName\n isCertification\n blocks\n blockObjects {\n name\n dashedName\n helpCategory\n blockLayout\n blockLabel\n isUpcomingChange\n }\n }\n }\n': typeof types.SuperblockDetailDocument; + '\n query ModuleDetail(\n $superblockDashedName: String\n $chapterDashedName: String\n ) {\n modules(\n superblockDashedName: $superblockDashedName\n chapterDashedName: $chapterDashedName\n ) {\n dashedName\n moduleType\n comingSoon\n blocks\n blockObjects {\n name\n dashedName\n helpCategory\n blockLayout\n blockLabel\n isUpcomingChange\n }\n chapter {\n dashedName\n superblock {\n name\n dashedName\n isCertification\n }\n }\n }\n }\n': typeof types.ModuleDetailDocument; + '\n query BlockDetail($dashedName: String!) {\n block(dashedName: $dashedName) {\n name\n dashedName\n helpCategory\n blockLayout\n blockLabel\n isUpcomingChange\n usesMultifileEditor\n hasEditableBoundaries\n challengeOrder {\n id\n title\n }\n superblocks {\n name\n dashedName\n }\n }\n }\n': typeof types.BlockDetailDocument; + '\n query ChallengeDetail($id: ID!) {\n challenge(id: $id) {\n id\n title\n block {\n name\n dashedName\n }\n content {\n description\n instructions\n files {\n name\n ext\n }\n tests {\n text\n }\n solutions {\n files {\n name\n ext\n }\n }\n }\n }\n }\n': typeof types.ChallengeDetailDocument; +}; +const documents: Documents = { + '\n query Superblocks {\n superblocks {\n name\n dashedName\n isCertification\n }\n }\n': + types.SuperblocksDocument, + '\n query SidebarNav {\n curriculum {\n superblocks\n certifications\n }\n superblocks {\n name\n dashedName\n isCertification\n chapters {\n dashedName\n modules {\n dashedName\n blocks\n }\n }\n }\n }\n': + types.SidebarNavDocument, + '\n query CurriculumOverview {\n curriculum {\n superblocks\n certifications\n }\n superblocks {\n name\n dashedName\n isCertification\n blocks\n }\n certifications {\n dashedName\n }\n }\n': + types.CurriculumOverviewDocument, + '\n query SuperblockDetail($dashedName: String!) {\n superblock(dashedName: $dashedName) {\n name\n dashedName\n isCertification\n blocks\n blockObjects {\n name\n dashedName\n helpCategory\n blockLayout\n blockLabel\n isUpcomingChange\n }\n }\n }\n': + types.SuperblockDetailDocument, + '\n query ModuleDetail(\n $superblockDashedName: String\n $chapterDashedName: String\n ) {\n modules(\n superblockDashedName: $superblockDashedName\n chapterDashedName: $chapterDashedName\n ) {\n dashedName\n moduleType\n comingSoon\n blocks\n blockObjects {\n name\n dashedName\n helpCategory\n blockLayout\n blockLabel\n isUpcomingChange\n }\n chapter {\n dashedName\n superblock {\n name\n dashedName\n isCertification\n }\n }\n }\n }\n': + types.ModuleDetailDocument, + '\n query BlockDetail($dashedName: String!) {\n block(dashedName: $dashedName) {\n name\n dashedName\n helpCategory\n blockLayout\n blockLabel\n isUpcomingChange\n usesMultifileEditor\n hasEditableBoundaries\n challengeOrder {\n id\n title\n }\n superblocks {\n name\n dashedName\n }\n }\n }\n': + types.BlockDetailDocument, + '\n query ChallengeDetail($id: ID!) {\n challenge(id: $id) {\n id\n title\n block {\n name\n dashedName\n }\n content {\n description\n instructions\n files {\n name\n ext\n }\n tests {\n text\n }\n solutions {\n files {\n name\n ext\n }\n }\n }\n }\n }\n': + types.ChallengeDetailDocument, +}; + +/** + * 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: '\n query Superblocks {\n superblocks {\n name\n dashedName\n isCertification\n }\n }\n' +): (typeof documents)['\n query Superblocks {\n superblocks {\n name\n dashedName\n isCertification\n }\n }\n']; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql( + source: '\n query SidebarNav {\n curriculum {\n superblocks\n certifications\n }\n superblocks {\n name\n dashedName\n isCertification\n chapters {\n dashedName\n modules {\n dashedName\n blocks\n }\n }\n }\n }\n' +): (typeof documents)['\n query SidebarNav {\n curriculum {\n superblocks\n certifications\n }\n superblocks {\n name\n dashedName\n isCertification\n chapters {\n dashedName\n modules {\n dashedName\n blocks\n }\n }\n }\n }\n']; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql( + source: '\n query CurriculumOverview {\n curriculum {\n superblocks\n certifications\n }\n superblocks {\n name\n dashedName\n isCertification\n blocks\n }\n certifications {\n dashedName\n }\n }\n' +): (typeof documents)['\n query CurriculumOverview {\n curriculum {\n superblocks\n certifications\n }\n superblocks {\n name\n dashedName\n isCertification\n blocks\n }\n certifications {\n dashedName\n }\n }\n']; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql( + source: '\n query SuperblockDetail($dashedName: String!) {\n superblock(dashedName: $dashedName) {\n name\n dashedName\n isCertification\n blocks\n blockObjects {\n name\n dashedName\n helpCategory\n blockLayout\n blockLabel\n isUpcomingChange\n }\n }\n }\n' +): (typeof documents)['\n query SuperblockDetail($dashedName: String!) {\n superblock(dashedName: $dashedName) {\n name\n dashedName\n isCertification\n blocks\n blockObjects {\n name\n dashedName\n helpCategory\n blockLayout\n blockLabel\n isUpcomingChange\n }\n }\n }\n']; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql( + source: '\n query ModuleDetail(\n $superblockDashedName: String\n $chapterDashedName: String\n ) {\n modules(\n superblockDashedName: $superblockDashedName\n chapterDashedName: $chapterDashedName\n ) {\n dashedName\n moduleType\n comingSoon\n blocks\n blockObjects {\n name\n dashedName\n helpCategory\n blockLayout\n blockLabel\n isUpcomingChange\n }\n chapter {\n dashedName\n superblock {\n name\n dashedName\n isCertification\n }\n }\n }\n }\n' +): (typeof documents)['\n query ModuleDetail(\n $superblockDashedName: String\n $chapterDashedName: String\n ) {\n modules(\n superblockDashedName: $superblockDashedName\n chapterDashedName: $chapterDashedName\n ) {\n dashedName\n moduleType\n comingSoon\n blocks\n blockObjects {\n name\n dashedName\n helpCategory\n blockLayout\n blockLabel\n isUpcomingChange\n }\n chapter {\n dashedName\n superblock {\n name\n dashedName\n isCertification\n }\n }\n }\n }\n']; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql( + source: '\n query BlockDetail($dashedName: String!) {\n block(dashedName: $dashedName) {\n name\n dashedName\n helpCategory\n blockLayout\n blockLabel\n isUpcomingChange\n usesMultifileEditor\n hasEditableBoundaries\n challengeOrder {\n id\n title\n }\n superblocks {\n name\n dashedName\n }\n }\n }\n' +): (typeof documents)['\n query BlockDetail($dashedName: String!) {\n block(dashedName: $dashedName) {\n name\n dashedName\n helpCategory\n blockLayout\n blockLabel\n isUpcomingChange\n usesMultifileEditor\n hasEditableBoundaries\n challengeOrder {\n id\n title\n }\n superblocks {\n name\n dashedName\n }\n }\n }\n']; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql( + source: '\n query ChallengeDetail($id: ID!) {\n challenge(id: $id) {\n id\n title\n block {\n name\n dashedName\n }\n content {\n description\n instructions\n files {\n name\n ext\n }\n tests {\n text\n }\n solutions {\n files {\n name\n ext\n }\n }\n }\n }\n }\n' +): (typeof documents)['\n query ChallengeDetail($id: ID!) {\n challenge(id: $id) {\n id\n title\n block {\n name\n dashedName\n }\n content {\n description\n instructions\n files {\n name\n ext\n }\n tests {\n text\n }\n solutions {\n files {\n name\n ext\n }\n }\n }\n }\n }\n']; + +export function graphql(source: string) { + return (documents as any)[source] ?? {}; +} + +export type DocumentType> = + TDocumentNode extends DocumentNode ? TType : never; diff --git a/packages/studio/src/graphql/generated/graphql.ts b/packages/studio/src/graphql/generated/graphql.ts new file mode 100644 index 0000000..9d4ae24 --- /dev/null +++ b/packages/studio/src/graphql/generated/graphql.ts @@ -0,0 +1,1282 @@ +/* eslint-disable */ +import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core'; +export type Maybe = T | null; +export type InputMaybe = Maybe; +export type Exact = { + [K in keyof T]: T[K]; +}; +export type MakeOptional = Omit & { + [SubKey in K]?: Maybe; +}; +export type MakeMaybe = Omit & { + [SubKey in K]: Maybe; +}; +export type MakeEmpty< + T extends { [key: string]: unknown }, + K extends keyof T, +> = { [_ in K]?: never }; +export type Incremental = + | T + | { + [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never; + }; +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: { input: string; output: string }; + String: { input: string; output: string }; + Boolean: { input: boolean; output: boolean }; + Int: { input: number; output: number }; + Float: { input: number; output: number }; +}; + +/** + * Learning module within a superblock + * Contains challenges, layout information, and pedagogical metadata + */ +export type Block = { + /** + * Pedagogical classification (optional) + * Field name changed from blockType to blockLabel to match actual JSON data + */ + blockLabel?: Maybe; + /** UI layout type for this block */ + blockLayout: BlockLayout; + /** Ordered list of challenges in this block */ + challengeOrder: Array; + /** Unique identifier (e.g., 'basic-html') */ + dashedName: Scalars['String']['output']; + /** + * Disable infinite loop protection in preview (optional) + * Used for challenges that need continuous execution + */ + disableLoopProtectPreview?: Maybe; + /** + * Disable infinite loop protection in tests (optional) + * Used for performance-intensive challenges like algorithms + */ + disableLoopProtectTests?: Maybe; + /** Flag indicating editable region boundaries feature */ + hasEditableBoundaries?: Maybe; + /** Category for help/support (e.g., 'HTML-CSS') */ + helpCategory: Scalars['String']['output']; + /** Flag indicating work-in-progress module */ + isUpcomingChange: Scalars['Boolean']['output']; + /** Human-readable name (e.g., 'Basic HTML') */ + name: Scalars['String']['output']; + /** + * External resources required for challenges (optional) + * CDN scripts for libraries like React, jQuery, D3, Bootstrap + */ + required?: Maybe>; + /** + * Parent superblocks (reverse reference for bidirectional navigation) + * Note: In v9 curriculum, blocks can be shared across multiple superblocks + */ + superblocks: Array; + /** + * HTML template for challenge rendering (optional) + * Contains placeholders for dynamic content injection + */ + template?: Maybe; + /** Flag indicating multi-file editor feature */ + usesMultifileEditor?: Maybe; +}; + +/** + * Pedagogical classification for blocks + * Describes the learning approach or activity type + * Renamed from BlockType to BlockLabel to match actual JSON data + */ +export type BlockLabel = + /** Formal assessment block */ + | 'EXAM' + /** Hands-on practice block */ + | 'LAB' + /** General learning block */ + | 'LEARN' + /** Instructional content block */ + | 'LECTURE' + /** Skill reinforcement block */ + | 'PRACTICE' + /** Knowledge check block */ + | 'QUIZ' + /** Concept review block */ + | 'REVIEW' + /** Preparatory exercises block */ + | 'WARM_UP' + /** Project-based learning block */ + | 'WORKSHOP'; + +/** + * UI layout types for blocks + * Determines how challenges are displayed in the frontend + */ +export type BlockLayout = + /** Grid layout of challenges */ + | 'CHALLENGE_GRID' + /** Vertical list of challenges */ + | 'CHALLENGE_LIST' + /** Interactive dialogue-based layout */ + | 'DIALOGUE_GRID' + /** Legacy grid layout */ + | 'LEGACY_CHALLENGE_GRID' + /** Legacy vertical list layout */ + | 'LEGACY_CHALLENGE_LIST' + /** Legacy link-based layout */ + | 'LEGACY_LINK' + /** Link-based navigation layout */ + | 'LINK' + /** Project-focused list layout */ + | 'PROJECT_LIST'; + +/** + * Certification wrapper around superblock + * Distinguishes certification-eligible curricula + */ +export type Certification = { + /** Certification identifier (same as superblock dashedName) */ + dashedName: Scalars['String']['output']; + /** Reference to underlying superblock */ + superblock: Superblock; +}; + +/** + * Individual coding challenge + * Metadata always available, content lazy-loaded in future v2 + */ +export type Challenge = { + /** Parent block (reverse reference for bidirectional navigation) */ + block: Block; + /** + * Full challenge content - MVP returns null + * Future v2: Lazy-loaded from database with LRU cache + * Enables v2 migration without breaking changes + */ + content?: Maybe; + /** Unique UUID identifier */ + id: Scalars['ID']['output']; + /** Challenge title */ + title: Scalars['String']['output']; +}; + +/** + * Full challenge content (future v2, returns null in MVP) + * Includes description, instructions, starter code, tests, and solutions + */ +export type ChallengeContent = { + /** Challenge overview/description */ + description: Scalars['String']['output']; + /** Starter code files */ + files: Array; + /** Step-by-step instructions */ + instructions: Scalars['String']['output']; + /** Example solutions */ + solutions: Array; + /** Validation tests */ + tests: Array; +}; + +/** + * Code file within a challenge or solution + * Contains file metadata and content + */ +export type ChallengeFile = { + /** File content as string */ + contents: Scalars['String']['output']; + /** Line numbers defining editable regions (optional) */ + editableRegionBoundaries?: Maybe>; + /** File extension (e.g., 'html') */ + ext: Scalars['String']['output']; + /** File name (e.g., 'index.html') */ + name: Scalars['String']['output']; +}; + +/** + * Chapter within a superblock (new v9 curriculum) + * Groups related modules together + */ +export type Chapter = { + /** Flag indicating if chapter is coming soon (not yet available) */ + comingSoon: Scalars['Boolean']['output']; + /** Unique identifier for the chapter (e.g., 'html', 'javascript') */ + dashedName: Scalars['String']['output']; + /** Modules within this chapter */ + modules: Array; + /** Parent superblock (reverse reference for bidirectional navigation) */ + superblock: Superblock; +}; + +/** + * Top-level curriculum structure + * Contains lists of superblocks and certifications + */ +export type Curriculum = { + /** Array of certification identifiers (subset of superblocks) */ + certifications: Array; + /** Array of superblock identifiers (dashedNames) */ + superblocks: Array; +}; + +/** Curriculum data store metrics and memory usage */ +export type DataStoreMetrics = { + /** Number of loaded unique blocks (deduplicated) */ + blockCount: Scalars['Int']['output']; + /** Number of loaded challenge metadata entries */ + challengeCount: Scalars['Int']['output']; + /** Number of loaded chapters (v9 curriculum primitive) */ + chapterCount: Scalars['Int']['output']; + /** Current heap memory usage in megabytes */ + memoryUsageMB: Scalars['Float']['output']; + /** Number of loaded modules (v9 curriculum primitive) */ + moduleCount: Scalars['Int']['output']; + /** Number of loaded superblocks */ + superblockCount: Scalars['Int']['output']; +}; + +/** Server health and operational metrics */ +export type HealthCheck = { + /** Curriculum data store statistics */ + dataStore: DataStoreMetrics; + /** Current server health status (always 'healthy' in MVP) */ + status: Scalars['String']['output']; + /** Uptime in seconds since server became operational */ + uptime: Scalars['Int']['output']; +}; + +/** + * Module within a chapter (new v9 curriculum) + * Contains a set of related blocks + */ +export type Module = { + /** Resolved Block objects (convenience field) */ + blockObjects: Array; + /** Array of block identifiers in this module */ + blocks: Array; + /** Parent chapter (reverse reference for bidirectional navigation) */ + chapter: Chapter; + /** Flag indicating if module is coming soon (not yet available) */ + comingSoon: Scalars['Boolean']['output']; + /** Unique identifier for the module (e.g., 'basic-html', 'semantic-html') */ + dashedName: Scalars['String']['output']; + /** Type of module (e.g., 'review', 'practice') - optional */ + moduleType?: Maybe; +}; + +/** + * freeCodeCamp Curriculum GraphQL API Schema + * Sprint 004 - Schema Definition and Code Generation + * + * This schema defines the complete API contract for curriculum metadata queries. + * All types map to internal TypeScript types via @graphql-codegen type mappers. + * + * Metadata/Content Separation: + * - Challenge metadata (id, title) always available + * - Challenge content (description, instructions, tests) returns null in MVP + * - ChallengeContent types included for future v2 database integration + * + * Type Mappers (configured in codegen.ts): + * - Curriculum → CurriculumData + * - Superblock → SuperblockData + * - Block → BlockData + * - Challenge → ChallengeMetadata (NOT full ChallengeData) + * - BlockLayout → BlockLayout enum + * - BlockType → BlockType enum + */ +export type Query = { + /** + * Server health check query + * Returns current operational status and data store metrics + * Useful for monitoring dashboards and load balancers + */ + _health: HealthCheck; + /** Get single block by identifier */ + block?: Maybe; + /** Get all blocks, optionally filtered by superblock */ + blocks: Array; + /** Get all certification-eligible superblocks */ + certifications: Array; + /** Get single challenge by ID */ + challenge?: Maybe; + /** Get all challenges, optionally filtered by block */ + challenges: Array; + /** + * Get all chapters, optionally filtered by superblock (v9 curriculum) + * Returns empty array for legacy flat curriculum superblocks + */ + chapters: Array; + /** Get complete curriculum structure */ + curriculum: Curriculum; + /** + * Get all modules, optionally filtered by chapter or superblock (v9 curriculum) + * Returns empty array for legacy flat curriculum superblocks + */ + modules: Array; + /** Get single superblock by identifier */ + superblock?: Maybe; + /** Get all superblocks */ + superblocks: Array; +}; + +/** + * freeCodeCamp Curriculum GraphQL API Schema + * Sprint 004 - Schema Definition and Code Generation + * + * This schema defines the complete API contract for curriculum metadata queries. + * All types map to internal TypeScript types via @graphql-codegen type mappers. + * + * Metadata/Content Separation: + * - Challenge metadata (id, title) always available + * - Challenge content (description, instructions, tests) returns null in MVP + * - ChallengeContent types included for future v2 database integration + * + * Type Mappers (configured in codegen.ts): + * - Curriculum → CurriculumData + * - Superblock → SuperblockData + * - Block → BlockData + * - Challenge → ChallengeMetadata (NOT full ChallengeData) + * - BlockLayout → BlockLayout enum + * - BlockType → BlockType enum + */ +export type QueryBlockArgs = { + dashedName: Scalars['String']['input']; +}; + +/** + * freeCodeCamp Curriculum GraphQL API Schema + * Sprint 004 - Schema Definition and Code Generation + * + * This schema defines the complete API contract for curriculum metadata queries. + * All types map to internal TypeScript types via @graphql-codegen type mappers. + * + * Metadata/Content Separation: + * - Challenge metadata (id, title) always available + * - Challenge content (description, instructions, tests) returns null in MVP + * - ChallengeContent types included for future v2 database integration + * + * Type Mappers (configured in codegen.ts): + * - Curriculum → CurriculumData + * - Superblock → SuperblockData + * - Block → BlockData + * - Challenge → ChallengeMetadata (NOT full ChallengeData) + * - BlockLayout → BlockLayout enum + * - BlockType → BlockType enum + */ +export type QueryBlocksArgs = { + superblockDashedName?: InputMaybe; +}; + +/** + * freeCodeCamp Curriculum GraphQL API Schema + * Sprint 004 - Schema Definition and Code Generation + * + * This schema defines the complete API contract for curriculum metadata queries. + * All types map to internal TypeScript types via @graphql-codegen type mappers. + * + * Metadata/Content Separation: + * - Challenge metadata (id, title) always available + * - Challenge content (description, instructions, tests) returns null in MVP + * - ChallengeContent types included for future v2 database integration + * + * Type Mappers (configured in codegen.ts): + * - Curriculum → CurriculumData + * - Superblock → SuperblockData + * - Block → BlockData + * - Challenge → ChallengeMetadata (NOT full ChallengeData) + * - BlockLayout → BlockLayout enum + * - BlockType → BlockType enum + */ +export type QueryChallengeArgs = { + id: Scalars['ID']['input']; +}; + +/** + * freeCodeCamp Curriculum GraphQL API Schema + * Sprint 004 - Schema Definition and Code Generation + * + * This schema defines the complete API contract for curriculum metadata queries. + * All types map to internal TypeScript types via @graphql-codegen type mappers. + * + * Metadata/Content Separation: + * - Challenge metadata (id, title) always available + * - Challenge content (description, instructions, tests) returns null in MVP + * - ChallengeContent types included for future v2 database integration + * + * Type Mappers (configured in codegen.ts): + * - Curriculum → CurriculumData + * - Superblock → SuperblockData + * - Block → BlockData + * - Challenge → ChallengeMetadata (NOT full ChallengeData) + * - BlockLayout → BlockLayout enum + * - BlockType → BlockType enum + */ +export type QueryChallengesArgs = { + blockDashedName?: InputMaybe; +}; + +/** + * freeCodeCamp Curriculum GraphQL API Schema + * Sprint 004 - Schema Definition and Code Generation + * + * This schema defines the complete API contract for curriculum metadata queries. + * All types map to internal TypeScript types via @graphql-codegen type mappers. + * + * Metadata/Content Separation: + * - Challenge metadata (id, title) always available + * - Challenge content (description, instructions, tests) returns null in MVP + * - ChallengeContent types included for future v2 database integration + * + * Type Mappers (configured in codegen.ts): + * - Curriculum → CurriculumData + * - Superblock → SuperblockData + * - Block → BlockData + * - Challenge → ChallengeMetadata (NOT full ChallengeData) + * - BlockLayout → BlockLayout enum + * - BlockType → BlockType enum + */ +export type QueryChaptersArgs = { + superblockDashedName?: InputMaybe; +}; + +/** + * freeCodeCamp Curriculum GraphQL API Schema + * Sprint 004 - Schema Definition and Code Generation + * + * This schema defines the complete API contract for curriculum metadata queries. + * All types map to internal TypeScript types via @graphql-codegen type mappers. + * + * Metadata/Content Separation: + * - Challenge metadata (id, title) always available + * - Challenge content (description, instructions, tests) returns null in MVP + * - ChallengeContent types included for future v2 database integration + * + * Type Mappers (configured in codegen.ts): + * - Curriculum → CurriculumData + * - Superblock → SuperblockData + * - Block → BlockData + * - Challenge → ChallengeMetadata (NOT full ChallengeData) + * - BlockLayout → BlockLayout enum + * - BlockType → BlockType enum + */ +export type QueryModulesArgs = { + chapterDashedName?: InputMaybe; + superblockDashedName?: InputMaybe; +}; + +/** + * freeCodeCamp Curriculum GraphQL API Schema + * Sprint 004 - Schema Definition and Code Generation + * + * This schema defines the complete API contract for curriculum metadata queries. + * All types map to internal TypeScript types via @graphql-codegen type mappers. + * + * Metadata/Content Separation: + * - Challenge metadata (id, title) always available + * - Challenge content (description, instructions, tests) returns null in MVP + * - ChallengeContent types included for future v2 database integration + * + * Type Mappers (configured in codegen.ts): + * - Curriculum → CurriculumData + * - Superblock → SuperblockData + * - Block → BlockData + * - Challenge → ChallengeMetadata (NOT full ChallengeData) + * - BlockLayout → BlockLayout enum + * - BlockType → BlockType enum + */ +export type QuerySuperblockArgs = { + dashedName: Scalars['String']['input']; +}; + +/** + * External resource (CDN script or stylesheet) required for challenges + * Used in blocks that depend on external libraries + */ +export type RequiredResource = { + /** + * CDN URL for CSS stylesheet (optional) + * Note: Either src or link must be present + */ + link?: Maybe; + /** CDN URL for JavaScript library (optional) */ + src?: Maybe; +}; + +/** + * Example solution for a challenge + * Contains solution code files + */ +export type Solution = { + /** Solution code files */ + files: Array; +}; + +/** + * Major curriculum area (e.g., Responsive Web Design) + * Supports both legacy (flat) and new v9 (hierarchical) curriculum structures + */ +export type Superblock = { + /** Resolved Block objects - flattened view (convenience field) */ + blockObjects: Array; + /** Flattened array of all block identifiers (from all chapters/modules) */ + blocks: Array; + /** + * Hierarchical chapter structure (new v9 curriculum) + * Empty array for legacy flat curriculum + */ + chapters: Array; + /** Unique identifier (e.g., 'responsive-web-design') */ + dashedName: Scalars['String']['output']; + /** True if this superblock is certification-eligible */ + isCertification: Scalars['Boolean']['output']; + /** Human-readable name (e.g., 'Responsive Web Design') */ + name: Scalars['String']['output']; +}; + +/** + * Validation test for challenge submission + * Contains human-readable description and assertion code + */ +export type Test = { + /** Test assertion code */ + testString: Scalars['String']['output']; + /** Human-readable test description */ + text: Scalars['String']['output']; +}; + +export type SuperblocksQueryVariables = Exact<{ [key: string]: never }>; + +export type SuperblocksQuery = { + superblocks: Array<{ + name: string; + dashedName: string; + isCertification: boolean; + }>; +}; + +export type SidebarNavQueryVariables = Exact<{ [key: string]: never }>; + +export type SidebarNavQuery = { + curriculum: { superblocks: Array; certifications: Array }; + superblocks: Array<{ + name: string; + dashedName: string; + isCertification: boolean; + chapters: Array<{ + dashedName: string; + modules: Array<{ dashedName: string; blocks: Array }>; + }>; + }>; +}; + +export type CurriculumOverviewQueryVariables = Exact<{ [key: string]: never }>; + +export type CurriculumOverviewQuery = { + curriculum: { superblocks: Array; certifications: Array }; + superblocks: Array<{ + name: string; + dashedName: string; + isCertification: boolean; + blocks: Array; + }>; + certifications: Array<{ dashedName: string }>; +}; + +export type SuperblockDetailQueryVariables = Exact<{ + dashedName: Scalars['String']['input']; +}>; + +export type SuperblockDetailQuery = { + superblock?: { + name: string; + dashedName: string; + isCertification: boolean; + blocks: Array; + blockObjects: Array<{ + name: string; + dashedName: string; + helpCategory: string; + blockLayout: BlockLayout; + blockLabel?: BlockLabel | null; + isUpcomingChange: boolean; + }>; + } | null; +}; + +export type ModuleDetailQueryVariables = Exact<{ + superblockDashedName?: InputMaybe; + chapterDashedName?: InputMaybe; +}>; + +export type ModuleDetailQuery = { + modules: Array<{ + dashedName: string; + moduleType?: string | null; + comingSoon: boolean; + blocks: Array; + blockObjects: Array<{ + name: string; + dashedName: string; + helpCategory: string; + blockLayout: BlockLayout; + blockLabel?: BlockLabel | null; + isUpcomingChange: boolean; + }>; + chapter: { + dashedName: string; + superblock: { + name: string; + dashedName: string; + isCertification: boolean; + }; + }; + }>; +}; + +export type BlockDetailQueryVariables = Exact<{ + dashedName: Scalars['String']['input']; +}>; + +export type BlockDetailQuery = { + block?: { + name: string; + dashedName: string; + helpCategory: string; + blockLayout: BlockLayout; + blockLabel?: BlockLabel | null; + isUpcomingChange: boolean; + usesMultifileEditor?: boolean | null; + hasEditableBoundaries?: boolean | null; + challengeOrder: Array<{ id: string; title: string }>; + superblocks: Array<{ name: string; dashedName: string }>; + } | null; +}; + +export type ChallengeDetailQueryVariables = Exact<{ + id: Scalars['ID']['input']; +}>; + +export type ChallengeDetailQuery = { + challenge?: { + id: string; + title: string; + block: { name: string; dashedName: string }; + content?: { + description: string; + instructions: string; + files: Array<{ name: string; ext: string }>; + tests: Array<{ text: string }>; + solutions: Array<{ files: Array<{ name: string; ext: string }> }>; + } | null; + } | null; +}; + +export const SuperblocksDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'Superblocks' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'superblocks' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'name' } }, + { kind: 'Field', name: { kind: 'Name', value: 'dashedName' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'isCertification' }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode; +export const SidebarNavDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'SidebarNav' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'curriculum' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'superblocks' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'certifications' }, + }, + ], + }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'superblocks' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'name' } }, + { kind: 'Field', name: { kind: 'Name', value: 'dashedName' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'isCertification' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'chapters' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'dashedName' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'modules' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'dashedName' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'blocks' }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode; +export const CurriculumOverviewDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'CurriculumOverview' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'curriculum' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'superblocks' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'certifications' }, + }, + ], + }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'superblocks' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'name' } }, + { kind: 'Field', name: { kind: 'Name', value: 'dashedName' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'isCertification' }, + }, + { kind: 'Field', name: { kind: 'Name', value: 'blocks' } }, + ], + }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'certifications' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'dashedName' } }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode< + CurriculumOverviewQuery, + CurriculumOverviewQueryVariables +>; +export const SuperblockDetailDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'SuperblockDetail' }, + variableDefinitions: [ + { + kind: 'VariableDefinition', + variable: { + kind: 'Variable', + name: { kind: 'Name', value: 'dashedName' }, + }, + type: { + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { kind: 'Name', value: 'String' }, + }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'superblock' }, + arguments: [ + { + kind: 'Argument', + name: { kind: 'Name', value: 'dashedName' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'dashedName' }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'name' } }, + { kind: 'Field', name: { kind: 'Name', value: 'dashedName' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'isCertification' }, + }, + { kind: 'Field', name: { kind: 'Name', value: 'blocks' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'blockObjects' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'name' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'dashedName' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'helpCategory' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'blockLayout' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'blockLabel' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'isUpcomingChange' }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode< + SuperblockDetailQuery, + SuperblockDetailQueryVariables +>; +export const ModuleDetailDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'ModuleDetail' }, + variableDefinitions: [ + { + kind: 'VariableDefinition', + variable: { + kind: 'Variable', + name: { kind: 'Name', value: 'superblockDashedName' }, + }, + type: { kind: 'NamedType', name: { kind: 'Name', value: 'String' } }, + }, + { + kind: 'VariableDefinition', + variable: { + kind: 'Variable', + name: { kind: 'Name', value: 'chapterDashedName' }, + }, + type: { kind: 'NamedType', name: { kind: 'Name', value: 'String' } }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'modules' }, + arguments: [ + { + kind: 'Argument', + name: { kind: 'Name', value: 'superblockDashedName' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'superblockDashedName' }, + }, + }, + { + kind: 'Argument', + name: { kind: 'Name', value: 'chapterDashedName' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'chapterDashedName' }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'dashedName' } }, + { kind: 'Field', name: { kind: 'Name', value: 'moduleType' } }, + { kind: 'Field', name: { kind: 'Name', value: 'comingSoon' } }, + { kind: 'Field', name: { kind: 'Name', value: 'blocks' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'blockObjects' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'name' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'dashedName' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'helpCategory' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'blockLayout' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'blockLabel' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'isUpcomingChange' }, + }, + ], + }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'chapter' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'dashedName' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'superblock' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'name' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'dashedName' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'isCertification' }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode; +export const BlockDetailDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'BlockDetail' }, + variableDefinitions: [ + { + kind: 'VariableDefinition', + variable: { + kind: 'Variable', + name: { kind: 'Name', value: 'dashedName' }, + }, + type: { + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { kind: 'Name', value: 'String' }, + }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'block' }, + arguments: [ + { + kind: 'Argument', + name: { kind: 'Name', value: 'dashedName' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'dashedName' }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'name' } }, + { kind: 'Field', name: { kind: 'Name', value: 'dashedName' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'helpCategory' }, + }, + { kind: 'Field', name: { kind: 'Name', value: 'blockLayout' } }, + { kind: 'Field', name: { kind: 'Name', value: 'blockLabel' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'isUpcomingChange' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'usesMultifileEditor' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'hasEditableBoundaries' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'challengeOrder' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'id' } }, + { kind: 'Field', name: { kind: 'Name', value: 'title' } }, + ], + }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'superblocks' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'name' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'dashedName' }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode; +export const ChallengeDetailDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'ChallengeDetail' }, + 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: 'challenge' }, + 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: 'block' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'name' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'dashedName' }, + }, + ], + }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'content' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'description' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'instructions' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'files' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'name' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'ext' }, + }, + ], + }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'tests' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'text' }, + }, + ], + }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'solutions' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'files' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'name' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'ext' }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode< + ChallengeDetailQuery, + ChallengeDetailQueryVariables +>; diff --git a/packages/studio/src/graphql/generated/index.ts b/packages/studio/src/graphql/generated/index.ts new file mode 100644 index 0000000..c682b1e --- /dev/null +++ b/packages/studio/src/graphql/generated/index.ts @@ -0,0 +1,2 @@ +export * from './fragment-masking'; +export * from './gql'; diff --git a/packages/studio/src/graphql/queries.ts b/packages/studio/src/graphql/queries.ts new file mode 100644 index 0000000..509c6f9 --- /dev/null +++ b/packages/studio/src/graphql/queries.ts @@ -0,0 +1,155 @@ +import { gql } from 'urql'; + +export const SUPERBLOCKS_QUERY = gql` + query Superblocks { + superblocks { + name + dashedName + isCertification + } + } +`; + +export const SIDEBAR_NAV_QUERY = gql` + query SidebarNav { + curriculum { + superblocks + certifications + } + superblocks { + name + dashedName + isCertification + chapters { + dashedName + modules { + dashedName + blocks + } + } + } + } +`; + +export const CURRICULUM_OVERVIEW_QUERY = gql` + query CurriculumOverview { + curriculum { + superblocks + certifications + } + superblocks { + name + dashedName + isCertification + blocks + } + certifications { + dashedName + } + } +`; + +export const SUPERBLOCK_DETAIL_QUERY = gql` + query SuperblockDetail($dashedName: String!) { + superblock(dashedName: $dashedName) { + name + dashedName + isCertification + blocks + blockObjects { + name + dashedName + helpCategory + blockLayout + blockLabel + isUpcomingChange + } + } + } +`; + +export const MODULE_DETAIL_QUERY = gql` + query ModuleDetail( + $superblockDashedName: String + $chapterDashedName: String + ) { + modules( + superblockDashedName: $superblockDashedName + chapterDashedName: $chapterDashedName + ) { + dashedName + moduleType + comingSoon + blocks + blockObjects { + name + dashedName + helpCategory + blockLayout + blockLabel + isUpcomingChange + } + chapter { + dashedName + superblock { + name + dashedName + isCertification + } + } + } + } +`; + +export const BLOCK_DETAIL_QUERY = gql` + query BlockDetail($dashedName: String!) { + block(dashedName: $dashedName) { + name + dashedName + helpCategory + blockLayout + blockLabel + isUpcomingChange + usesMultifileEditor + hasEditableBoundaries + challengeOrder { + id + title + } + superblocks { + name + dashedName + } + } + } +`; + +export const CHALLENGE_DETAIL_QUERY = gql` + query ChallengeDetail($id: ID!) { + challenge(id: $id) { + id + title + block { + name + dashedName + } + content { + description + instructions + files { + name + ext + } + tests { + text + } + solutions { + files { + name + ext + } + } + } + } + } +`; diff --git a/packages/studio/src/graphql/types.ts b/packages/studio/src/graphql/types.ts new file mode 100644 index 0000000..41c5409 --- /dev/null +++ b/packages/studio/src/graphql/types.ts @@ -0,0 +1,65 @@ +import type { + BlockDetailQuery, + BlockLabel as GeneratedBlockLabel, + BlockLayout as GeneratedBlockLayout, + ChallengeDetailQuery, + CurriculumOverviewQuery, + ModuleDetailQuery, + SidebarNavQuery, + SuperblockDetailQuery, + SuperblocksQuery, +} from './generated/graphql'; + +type NonNull = NonNullable; + +export type BlockLayout = GeneratedBlockLayout; + +export const BLOCK_LAYOUTS: BlockLayout[] = [ + 'LINK', + 'CHALLENGE_LIST', + 'CHALLENGE_GRID', + 'DIALOGUE_GRID', + 'PROJECT_LIST', + 'LEGACY_CHALLENGE_LIST', + 'LEGACY_CHALLENGE_GRID', + 'LEGACY_LINK', +]; + +export type BlockLabel = GeneratedBlockLabel; + +export const BLOCK_LABELS: BlockLabel[] = [ + 'LECTURE', + 'LAB', + 'WORKSHOP', + 'REVIEW', + 'QUIZ', + 'EXAM', + 'WARM_UP', + 'PRACTICE', + 'LEARN', +]; + +export type SuperblockListItem = SuperblocksQuery['superblocks'][number]; +export type SidebarSuperblockListItem = SidebarNavQuery['superblocks'][number]; +export type SidebarChapterListItem = + SidebarSuperblockListItem['chapters'][number]; +export type SidebarModuleListItem = SidebarChapterListItem['modules'][number]; +export type SidebarNavResult = SidebarNavQuery; + +export type SuperblockDetail = NonNull; +export type ModuleDetail = ModuleDetailQuery['modules'][number]; +export type BlockListItem = SuperblockDetail['blockObjects'][number]; + +export type BlockDetail = NonNull; +export type SuperblockRef = BlockDetail['superblocks'][number]; +export type ChallengeOrderEntry = BlockDetail['challengeOrder'][number]; + +export type ChallengeDetail = NonNull; +export type ChallengeContent = NonNull; + +export type CurriculumOverviewResult = CurriculumOverviewQuery; +export type SuperblockListResult = SuperblocksQuery; +export type SuperblockDetailResult = SuperblockDetailQuery; +export type ModuleDetailResult = ModuleDetailQuery; +export type BlockDetailResult = BlockDetailQuery; +export type ChallengeDetailResult = ChallengeDetailQuery; diff --git a/packages/studio/src/lib/__tests__/drafts.test.ts b/packages/studio/src/lib/__tests__/drafts.test.ts new file mode 100644 index 0000000..fd0ff8c --- /dev/null +++ b/packages/studio/src/lib/__tests__/drafts.test.ts @@ -0,0 +1,243 @@ +import { describe, it, expect, beforeEach } from 'vitest'; +import { + saveDraftRecord, + loadDraftRecord, + discardDraftRecord, + applyDraftPatch, + isDraftOutdated, + listAllDrafts, + parseDraftKey, + getDraftKey, + exportDraftPatch, +} from '../drafts'; +import { hashObject } from '../utils'; + +// Mock localStorage +const store: Record = {}; +const localStorageMock = { + getItem: (key: string) => store[key] ?? null, + setItem: (key: string, value: string) => { + store[key] = value; + }, + removeItem: (key: string) => { + delete store[key]; + }, + clear: () => { + for (const key of Object.keys(store)) delete store[key]; + }, + get length() { + return Object.keys(store).length; + }, + key: (i: number) => Object.keys(store)[i] ?? null, +}; +Object.defineProperty(globalThis, 'localStorage', { + value: localStorageMock, + writable: true, +}); + +const sampleBlock = { + name: 'Basic HTML', + dashedName: 'basic-html', + helpCategory: 'HTML-CSS', + blockLayout: 'CHALLENGE_LIST', + blockLabel: 'LECTURE', + isUpcomingChange: false, + usesMultifileEditor: false, + hasEditableBoundaries: null, + challengeOrder: [ + { id: 'abc123', title: 'Say Hello' }, + { id: 'def456', title: 'Add an Image' }, + { id: 'ghi789', title: 'Link to External Pages' }, + ], + superblocks: [ + { name: 'Responsive Web Design', dashedName: 'responsive-web-design' }, + ], +}; + +describe('Draft Store', () => { + beforeEach(() => { + localStorageMock.clear(); + }); + + describe('getDraftKey / parseDraftKey', () => { + it('generates correct key', () => { + expect(getDraftKey('block', 'basic-html')).toBe('draft:block:basic-html'); + expect(getDraftKey('challenge', 'abc-123')).toBe( + 'draft:challenge:abc-123' + ); + }); + + it('parses valid keys', () => { + expect(parseDraftKey('draft:block:basic-html')).toEqual({ + type: 'block', + id: 'basic-html', + }); + expect(parseDraftKey('draft:challenge:abc-123')).toEqual({ + type: 'challenge', + id: 'abc-123', + }); + }); + + it('returns null for invalid keys', () => { + expect(parseDraftKey('other:key')).toBeNull(); + expect(parseDraftKey('draft:invalid:id')).toBeNull(); + }); + }); + + describe('saveDraftRecord / loadDraftRecord', () => { + it('saves and loads a draft', () => { + const modified = { ...sampleBlock, helpCategory: 'JavaScript' }; + saveDraftRecord('block', 'basic-html', sampleBlock, modified); + + const loaded = loadDraftRecord('block', 'basic-html'); + expect(loaded).not.toBeNull(); + expect(loaded!.patch.length).toBeGreaterThan(0); + expect(loaded!.originalHash).toBe(hashObject(sampleBlock)); + expect(loaded!.updatedAt).toBeTruthy(); + }); + + it('returns empty patch when no changes', () => { + const result = saveDraftRecord( + 'block', + 'basic-html', + sampleBlock, + sampleBlock + ); + expect(result).toEqual([]); + expect(loadDraftRecord('block', 'basic-html')).toBeNull(); + }); + + it('returns null for non-existent draft', () => { + expect(loadDraftRecord('block', 'nonexistent')).toBeNull(); + }); + }); + + describe('applyDraftPatch', () => { + it('applies a simple field change', () => { + const modified = { ...sampleBlock, helpCategory: 'JavaScript' }; + const patch = saveDraftRecord( + 'block', + 'basic-html', + sampleBlock, + modified + ); + + const result = applyDraftPatch(sampleBlock, patch); + expect(result.helpCategory).toBe('JavaScript'); + // Original should be unchanged + expect(sampleBlock.helpCategory).toBe('HTML-CSS'); + }); + + it('applies challenge reorder', () => { + const reordered = { + ...sampleBlock, + challengeOrder: [ + sampleBlock.challengeOrder[2]!, + sampleBlock.challengeOrder[0]!, + sampleBlock.challengeOrder[1]!, + ], + }; + const patch = saveDraftRecord( + 'block', + 'basic-html', + sampleBlock, + reordered + ); + + const result = applyDraftPatch(sampleBlock, patch); + expect(result.challengeOrder[0]!.id).toBe('ghi789'); + expect(result.challengeOrder[1]!.id).toBe('abc123'); + expect(result.challengeOrder[2]!.id).toBe('def456'); + }); + + it('applies challenge title edit', () => { + const modified = { + ...sampleBlock, + challengeOrder: sampleBlock.challengeOrder.map((c, i) => + i === 0 ? { ...c, title: 'New Title' } : c + ), + }; + const patch = saveDraftRecord( + 'block', + 'basic-html', + sampleBlock, + modified + ); + + const result = applyDraftPatch(sampleBlock, patch); + expect(result.challengeOrder[0]!.title).toBe('New Title'); + expect(result.challengeOrder[1]!.title).toBe('Add an Image'); + }); + }); + + describe('discardDraftRecord', () => { + it('removes the draft from storage', () => { + const modified = { ...sampleBlock, helpCategory: 'JavaScript' }; + saveDraftRecord('block', 'basic-html', sampleBlock, modified); + expect(loadDraftRecord('block', 'basic-html')).not.toBeNull(); + + discardDraftRecord('block', 'basic-html'); + expect(loadDraftRecord('block', 'basic-html')).toBeNull(); + }); + }); + + describe('isDraftOutdated', () => { + it('detects outdated draft', () => { + const modified = { ...sampleBlock, helpCategory: 'JavaScript' }; + saveDraftRecord('block', 'basic-html', sampleBlock, modified); + const record = loadDraftRecord('block', 'basic-html')!; + + // Same original -> not outdated + expect(isDraftOutdated(record, sampleBlock)).toBe(false); + + // Different original -> outdated + const newOriginal = { ...sampleBlock, helpCategory: 'Python' }; + expect(isDraftOutdated(record, newOriginal)).toBe(true); + }); + }); + + describe('listAllDrafts', () => { + it('lists all stored drafts', () => { + saveDraftRecord('block', 'basic-html', sampleBlock, { + ...sampleBlock, + helpCategory: 'JS', + }); + saveDraftRecord( + 'challenge', + 'abc123', + { id: 'abc123', title: 'Old' }, + { id: 'abc123', title: 'New' } + ); + + const drafts = listAllDrafts(); + expect(drafts).toHaveLength(2); + expect(drafts.map((d) => d.type).sort()).toEqual(['block', 'challenge']); + }); + + it('returns empty array when no drafts', () => { + expect(listAllDrafts()).toEqual([]); + }); + }); + + describe('exportDraftPatch', () => { + it('exports patch as JSON string', () => { + saveDraftRecord('block', 'basic-html', sampleBlock, { + ...sampleBlock, + helpCategory: 'JavaScript', + }); + + const exported = exportDraftPatch('block', 'basic-html'); + expect(exported).not.toBeNull(); + + const parsed = JSON.parse(exported!); + expect(parsed.type).toBe('block'); + expect(parsed.id).toBe('basic-html'); + expect(parsed.patch).toBeDefined(); + expect(parsed.patch.length).toBeGreaterThan(0); + }); + + it('returns null when no draft exists', () => { + expect(exportDraftPatch('block', 'nonexistent')).toBeNull(); + }); + }); +}); diff --git a/packages/studio/src/lib/drafts.ts b/packages/studio/src/lib/drafts.ts new file mode 100644 index 0000000..f88ef01 --- /dev/null +++ b/packages/studio/src/lib/drafts.ts @@ -0,0 +1,121 @@ +import { compare, applyPatch, type Operation } from 'fast-json-patch'; +import { hashObject } from './utils'; + +export type DraftType = 'block' | 'challenge'; + +export interface DraftRecord { + updatedAt: string; + originalHash: string; + patch: Operation[]; +} + +export interface DraftEntry { + type: DraftType; + id: string; + record: DraftRecord; +} + +export function getDraftKey(type: DraftType, id: string): string { + return `draft:${type}:${id}`; +} + +export function parseDraftKey( + key: string +): { type: DraftType; id: string } | null { + const match = key.match(/^draft:(block|challenge):(.+)$/); + if (!match || !match[1] || !match[2]) return null; + return { type: match[1] as DraftType, id: match[2] }; +} + +export function loadDraftRecord( + type: DraftType, + id: string +): DraftRecord | null { + const raw = localStorage.getItem(getDraftKey(type, id)); + if (!raw) return null; + try { + return JSON.parse(raw) as DraftRecord; + } catch { + return null; + } +} + +export function saveDraftRecord( + type: DraftType, + id: string, + original: unknown, + modified: unknown +): Operation[] { + const patch = compare( + original as Record, + modified as Record + ); + if (patch.length === 0) return []; + const record: DraftRecord = { + updatedAt: new Date().toISOString(), + originalHash: hashObject(original), + patch, + }; + localStorage.setItem(getDraftKey(type, id), JSON.stringify(record)); + return patch; +} + +export function discardDraftRecord(type: DraftType, id: string): void { + localStorage.removeItem(getDraftKey(type, id)); +} + +export function applyDraftPatch(original: T, patch: Operation[]): T { + const clone = structuredClone(original); + applyPatch(clone as Record, patch); + return clone; +} + +export function isDraftOutdated( + record: DraftRecord, + original: unknown +): boolean { + return record.originalHash !== hashObject(original); +} + +export function listAllDrafts(): DraftEntry[] { + const entries: DraftEntry[] = []; + for (let i = 0; i < localStorage.length; i++) { + const key = localStorage.key(i); + if (!key) continue; + const parsed = parseDraftKey(key); + if (!parsed) continue; + const raw = localStorage.getItem(key); + if (!raw) continue; + try { + const record = JSON.parse(raw) as DraftRecord; + entries.push({ ...parsed, record }); + } catch { + // Skip invalid entries + } + } + return entries; +} + +export function exportDraftPatch(type: DraftType, id: string): string | null { + const record = loadDraftRecord(type, id); + if (!record) return null; + return JSON.stringify({ type, id, ...record }, null, 2); +} + +export function importDraftPatch( + json: string, + original: unknown +): { type: DraftType; id: string; patch: Operation[] } { + const data = JSON.parse(json) as { + type: DraftType; + id: string; + patch: Operation[]; + }; + const record: DraftRecord = { + updatedAt: new Date().toISOString(), + originalHash: hashObject(original), + patch: data.patch, + }; + localStorage.setItem(getDraftKey(data.type, data.id), JSON.stringify(record)); + return data; +} diff --git a/packages/studio/src/lib/sidebar-nav.ts b/packages/studio/src/lib/sidebar-nav.ts new file mode 100644 index 0000000..ff389c5 --- /dev/null +++ b/packages/studio/src/lib/sidebar-nav.ts @@ -0,0 +1,271 @@ +import type { + SidebarNavResult, + SidebarSuperblockListItem, +} from '@/graphql/types'; + +type CertificationStructure = 'chaptered' | 'superblocks'; + +export interface SidebarModuleNode { + id: string; + dashedName: string; + name: string; + blockCount: number; + superblockDashedName: string; + chapterDashedName: string; +} + +export interface ModuleRouteKey { + superblockDashedName: string; + chapterDashedName: string; + moduleDashedName: string; +} + +export interface SidebarChapterNode { + id: string; + dashedName: string; + name: string; + modules: SidebarModuleNode[]; +} + +export interface SidebarCertificationNode { + id: string; + dashedName: string; + name: string; + structure: CertificationStructure; + chapters: SidebarChapterNode[]; + superblocks: SidebarSuperblockListItem[]; +} + +export interface SidebarTree { + certifications: SidebarCertificationNode[]; + otherSuperblocks: SidebarSuperblockListItem[]; +} + +export interface FilteredSidebarChapterNode extends SidebarChapterNode { + visibleModules: SidebarModuleNode[]; +} + +export interface FilteredSidebarCertificationNode extends SidebarCertificationNode { + visibleChapters: FilteredSidebarChapterNode[]; + visibleSuperblocks: SidebarSuperblockListItem[]; +} + +export interface FilteredSidebarTree { + certifications: FilteredSidebarCertificationNode[]; + otherSuperblocks: SidebarSuperblockListItem[]; +} + +const ACRONYMS = new Set(['api', 'css', 'html', 'json', 'sql']); + +function formatDashedNameLabel(dashedName: string): string { + const normalized = dashedName.includes('chapter-') + ? (dashedName.split('chapter-').at(-1) ?? dashedName) + : dashedName; + + return normalized + .split('-') + .filter(Boolean) + .map((word) => + ACRONYMS.has(word.toLowerCase()) + ? word.toUpperCase() + : word.charAt(0).toUpperCase() + word.slice(1) + ) + .join(' '); +} + +function matchesSearch(value: string, normalizedSearch: string): boolean { + return value.toLowerCase().includes(normalizedSearch); +} + +export function getModuleHref({ + superblockDashedName, + chapterDashedName, + moduleDashedName, +}: ModuleRouteKey): string { + return `/superblocks/${superblockDashedName}/chapters/${chapterDashedName}/modules/${moduleDashedName}`; +} + +export function buildSidebarTree( + data: SidebarNavResult | undefined, + hiddenSuperblocks: ReadonlySet = new Set() +): SidebarTree { + if (!data) { + return { certifications: [], otherSuperblocks: [] }; + } + + const superblockMap = new Map( + data.superblocks.map((superblock) => [superblock.dashedName, superblock]) + ); + + const orderedSuperblocks = data.curriculum.superblocks + .map((dashedName) => superblockMap.get(dashedName)) + .filter( + (superblock): superblock is SidebarSuperblockListItem => + superblock !== undefined && + !hiddenSuperblocks.has(superblock.dashedName) + ); + + const consumedSuperblocks = new Set(); + const chapteredCertifications: SidebarCertificationNode[] = []; + const superblockCertifications: SidebarCertificationNode[] = []; + + for (const certificationDashedName of data.curriculum.certifications) { + if (hiddenSuperblocks.has(certificationDashedName)) continue; + + const certificationSuperblock = superblockMap.get(certificationDashedName); + if (!certificationSuperblock) continue; + + if (certificationSuperblock.chapters.length > 0) { + const chapters = certificationSuperblock.chapters + .map((chapter) => { + const modules = chapter.modules + .filter((module) => !hiddenSuperblocks.has(module.dashedName)) + .map((module) => ({ + id: `${certificationSuperblock.dashedName}:${chapter.dashedName}:${module.dashedName}`, + dashedName: module.dashedName, + name: formatDashedNameLabel(module.dashedName), + blockCount: module.blocks.length, + superblockDashedName: certificationSuperblock.dashedName, + chapterDashedName: chapter.dashedName, + })); + + if (modules.length === 0) return null; + + return { + id: `${certificationSuperblock.dashedName}:${chapter.dashedName}`, + dashedName: chapter.dashedName, + name: formatDashedNameLabel(chapter.dashedName), + modules, + }; + }) + .filter((chapter): chapter is SidebarChapterNode => chapter !== null); + + chapteredCertifications.push({ + id: certificationSuperblock.dashedName, + dashedName: certificationSuperblock.dashedName, + name: certificationSuperblock.name, + structure: 'chaptered', + chapters, + superblocks: [], + }); + + consumedSuperblocks.add(certificationSuperblock.dashedName); + continue; + } + + superblockCertifications.push({ + id: certificationSuperblock.dashedName, + dashedName: certificationSuperblock.dashedName, + name: certificationSuperblock.name, + structure: 'superblocks', + chapters: [], + superblocks: [certificationSuperblock], + }); + + consumedSuperblocks.add(certificationSuperblock.dashedName); + } + + const otherSuperblocks = orderedSuperblocks.filter( + (superblock) => !consumedSuperblocks.has(superblock.dashedName) + ); + + const certifications = [ + ...chapteredCertifications, + ...superblockCertifications, + ]; + + return { certifications, otherSuperblocks }; +} + +export function filterSidebarTree( + tree: SidebarTree, + rawSearch: string +): FilteredSidebarTree { + const normalizedSearch = rawSearch.trim().toLowerCase(); + + if (!normalizedSearch) { + return { + certifications: tree.certifications.map((certification) => ({ + ...certification, + visibleChapters: certification.chapters.map((chapter) => ({ + ...chapter, + visibleModules: chapter.modules, + })), + visibleSuperblocks: certification.superblocks, + })), + otherSuperblocks: tree.otherSuperblocks, + }; + } + + const certifications: FilteredSidebarCertificationNode[] = []; + + for (const certification of tree.certifications) { + const certificationMatches = + matchesSearch(certification.name, normalizedSearch) || + matchesSearch(certification.dashedName, normalizedSearch); + + if (certification.structure === 'chaptered') { + const visibleChapters: FilteredSidebarChapterNode[] = []; + + for (const chapter of certification.chapters) { + const chapterMatches = + matchesSearch(chapter.name, normalizedSearch) || + matchesSearch(chapter.dashedName, normalizedSearch); + + const matchingModules = chapter.modules.filter( + (module) => + matchesSearch(module.name, normalizedSearch) || + matchesSearch(module.dashedName, normalizedSearch) + ); + + if (certificationMatches || chapterMatches) { + visibleChapters.push({ + ...chapter, + visibleModules: chapter.modules, + }); + continue; + } + + if (matchingModules.length > 0) { + visibleChapters.push({ + ...chapter, + visibleModules: matchingModules, + }); + } + } + + if (!certificationMatches && visibleChapters.length === 0) continue; + + certifications.push({ + ...certification, + visibleChapters, + visibleSuperblocks: [], + }); + continue; + } + + const visibleSuperblocks = certificationMatches + ? certification.superblocks + : certification.superblocks.filter( + (superblock) => + matchesSearch(superblock.name, normalizedSearch) || + matchesSearch(superblock.dashedName, normalizedSearch) + ); + + if (!certificationMatches && visibleSuperblocks.length === 0) continue; + + certifications.push({ + ...certification, + visibleChapters: [], + visibleSuperblocks, + }); + } + + const otherSuperblocks = tree.otherSuperblocks.filter( + (superblock) => + matchesSearch(superblock.name, normalizedSearch) || + matchesSearch(superblock.dashedName, normalizedSearch) + ); + + return { certifications, otherSuperblocks }; +} diff --git a/packages/studio/src/lib/urql.ts b/packages/studio/src/lib/urql.ts new file mode 100644 index 0000000..8169eb3 --- /dev/null +++ b/packages/studio/src/lib/urql.ts @@ -0,0 +1,11 @@ +'use client'; + +import { cacheExchange, createClient, fetchExchange } from 'urql'; + +const GRAPHQL_URL = + process.env['NEXT_PUBLIC_GRAPHQL_URL'] ?? 'http://localhost:4000/graphql'; + +export const client = createClient({ + url: GRAPHQL_URL, + exchanges: [cacheExchange, fetchExchange], +}); diff --git a/packages/studio/src/lib/use-draft.ts b/packages/studio/src/lib/use-draft.ts new file mode 100644 index 0000000..90bb851 --- /dev/null +++ b/packages/studio/src/lib/use-draft.ts @@ -0,0 +1,143 @@ +'use client'; + +import { useState, useEffect, useCallback } from 'react'; +import { compare, applyPatch, type Operation } from 'fast-json-patch'; +import { + type DraftType, + loadDraftRecord, + getDraftKey, + discardDraftRecord, + applyDraftPatch, + isDraftOutdated as checkOutdated, +} from './drafts'; +import { hashObject } from './utils'; + +export interface UseDraftReturn { + edited: T | undefined; + updateEdited: (updater: (prev: T) => T) => void; + hasSavedDraft: boolean; + hasUnsavedChanges: boolean; + isDraftOutdated: boolean; + currentPatch: Operation[]; + save: () => 'saved' | 'no_changes' | 'no_data'; + discard: () => void; + getExportData: () => string | null; + importPatchData: (json: string) => void; +} + +export function useDraft( + type: DraftType, + id: string, + original: T | undefined +): UseDraftReturn { + const [edited, setEdited] = useState(undefined); + const [hasSavedDraft, setHasSavedDraft] = useState(false); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [outdated, setOutdated] = useState(false); + + useEffect(() => { + if (!original) return; + const record = loadDraftRecord(type, id); + if (record) { + setHasSavedDraft(true); + setOutdated(checkOutdated(record, original)); + try { + setEdited(applyDraftPatch(original, record.patch)); + } catch { + setEdited(structuredClone(original)); + } + } else { + setEdited(structuredClone(original)); + } + setHasUnsavedChanges(false); + }, [original, type, id]); + + const updateEdited = useCallback((updater: (prev: T) => T) => { + setEdited((prev) => (prev ? updater(prev) : prev)); + setHasUnsavedChanges(true); + }, []); + + const save = useCallback((): 'saved' | 'no_changes' | 'no_data' => { + if (!original || !edited) return 'no_data'; + const patch = compare( + original as Record, + edited as Record + ); + if (patch.length === 0) return 'no_changes'; + const record = { + updatedAt: new Date().toISOString(), + originalHash: hashObject(original), + patch, + }; + localStorage.setItem(getDraftKey(type, id), JSON.stringify(record)); + setHasSavedDraft(true); + setHasUnsavedChanges(false); + return 'saved'; + }, [original, edited, type, id]); + + const discard = useCallback(() => { + if (!original) return; + discardDraftRecord(type, id); + setEdited(structuredClone(original)); + setHasSavedDraft(false); + setHasUnsavedChanges(false); + setOutdated(false); + }, [original, type, id]); + + const currentPatch: Operation[] = + original && edited + ? compare( + original as Record, + edited as Record + ) + : []; + + const getExportData = useCallback((): string | null => { + if (!original || !edited) return null; + const patch = compare( + original as Record, + edited as Record + ); + if (patch.length === 0) return null; + return JSON.stringify( + { + type, + id, + patch, + updatedAt: new Date().toISOString(), + originalHash: hashObject(original), + }, + null, + 2 + ); + }, [original, edited, type, id]); + + const importPatchData = useCallback( + (json: string) => { + if (!original) return; + try { + const data = JSON.parse(json) as { patch: Operation[] }; + const clone = structuredClone(original); + applyPatch(clone as Record, data.patch); + setEdited(clone); + setHasUnsavedChanges(true); + } catch (e) { + console.error('Failed to import patch:', e); + } + }, + [original] + ); + + return { + edited, + updateEdited, + hasSavedDraft, + hasUnsavedChanges, + isDraftOutdated: outdated, + currentPatch, + save, + discard, + getExportData, + importPatchData, + }; +} diff --git a/packages/studio/src/lib/utils.ts b/packages/studio/src/lib/utils.ts new file mode 100644 index 0000000..d49f4fc --- /dev/null +++ b/packages/studio/src/lib/utils.ts @@ -0,0 +1,40 @@ +import { type ClassValue, clsx } from 'clsx'; +import { twMerge } from 'tailwind-merge'; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} + +/** + * Simple hash of a JSON-serializable value for drift detection. + * Uses a fast string hash (djb2) - not cryptographic. + */ +export function hashObject(obj: unknown): string { + const str = JSON.stringify(obj); + let hash = 5381; + for (let i = 0; i < str.length; i++) { + hash = (hash * 33) ^ str.charCodeAt(i); + } + return (hash >>> 0).toString(36); +} + +/** + * Format a date as a relative or absolute string. + */ +export function formatDate(date: string | Date): string { + const d = typeof date === 'string' ? new Date(date) : date; + const now = new Date(); + const diffMs = now.getTime() - d.getTime(); + const diffMins = Math.floor(diffMs / 60000); + + if (diffMins < 1) return 'just now'; + if (diffMins < 60) return `${diffMins}m ago`; + + const diffHours = Math.floor(diffMins / 60); + if (diffHours < 24) return `${diffHours}h ago`; + + const diffDays = Math.floor(diffHours / 24); + if (diffDays < 7) return `${diffDays}d ago`; + + return d.toLocaleDateString(); +} diff --git a/packages/studio/src/lib/validation.ts b/packages/studio/src/lib/validation.ts new file mode 100644 index 0000000..967b44e --- /dev/null +++ b/packages/studio/src/lib/validation.ts @@ -0,0 +1,47 @@ +import type { ChallengeOrderEntry } from '@/graphql/types'; + +export interface ValidationError { + field: string; + message: string; +} + +export function validateBlock(block: { + helpCategory: string; + challengeOrder: ChallengeOrderEntry[]; +}): ValidationError[] { + const errors: ValidationError[] = []; + + if (!block.helpCategory.trim()) { + errors.push({ + field: 'helpCategory', + message: 'Help category is required', + }); + } + + const ids = block.challengeOrder.map((c) => c.id); + const uniqueIds = new Set(ids); + if (ids.length !== uniqueIds.size) { + errors.push({ + field: 'challengeOrder', + message: 'Duplicate challenge IDs detected', + }); + } + + for (const challenge of block.challengeOrder) { + if (!challenge.title.trim()) { + errors.push({ + field: `challenge:${challenge.id}`, + message: `Title is required for challenge ${challenge.id}`, + }); + } + } + + return errors; +} + +export function validateChallengeTitle(title: string): ValidationError[] { + if (!title.trim()) { + return [{ field: 'title', message: 'Challenge title is required' }]; + } + return []; +} diff --git a/packages/studio/src/types/graphql-typed-document-node-core.d.ts b/packages/studio/src/types/graphql-typed-document-node-core.d.ts new file mode 100644 index 0000000..b0e1250 --- /dev/null +++ b/packages/studio/src/types/graphql-typed-document-node-core.d.ts @@ -0,0 +1,18 @@ +declare module '@graphql-typed-document-node/core' { + import type { DocumentNode } from 'graphql'; + + export interface DocumentTypeDecoration { + readonly __apiType?: (variables: TVariables) => TResult; + } + + export interface TypedDocumentNode< + TResult = unknown, + TVariables = Record, + > + extends DocumentNode, DocumentTypeDecoration {} + + export type ResultOf = + T extends DocumentTypeDecoration> + ? TResult + : never; +} diff --git a/packages/studio/tsconfig.json b/packages/studio/tsconfig.json new file mode 100644 index 0000000..b675885 --- /dev/null +++ b/packages/studio/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "noUncheckedIndexedAccess": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/studio/vitest.config.ts b/packages/studio/vitest.config.ts new file mode 100644 index 0000000..6ac09aa --- /dev/null +++ b/packages/studio/vitest.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + environment: 'node', + include: ['src/**/*.test.ts'], + }, + resolve: { + alias: { + '@/': new URL('./src/', import.meta.url).pathname, + }, + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b156d08..2adbf92 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,20 +1,19 @@ -lockfileVersion: '9.0' +lockfileVersion: "9.0" settings: autoInstallPeers: true excludeLinksFromLockfile: false importers: - .: devDependencies: - '@types/node': + "@types/node": specifier: ^24.9.1 version: 24.10.1 - '@vitest/coverage-v8': + "@vitest/coverage-v8": specifier: ^4.0.4 version: 4.0.14(vitest@4.0.14) - '@vitest/ui': + "@vitest/ui": specifier: ^4.0.4 version: 4.0.14(vitest@4.0.14) giget: @@ -43,7 +42,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.4 - version: 4.0.14(@types/node@24.10.1)(@vitest/ui@4.0.14)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.1) + version: 4.0.14(@types/node@24.10.1)(@vitest/ui@4.0.14)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) packages/server: dependencies: @@ -54,459 +53,804 @@ importers: specifier: ^5.16.0 version: 5.16.0(graphql@16.11.0) devDependencies: - '@graphql-codegen/cli': + "@graphql-codegen/cli": specifier: ^6.0.1 version: 6.0.1(@types/node@24.10.1)(graphql@16.11.0)(typescript@5.9.3) - '@graphql-codegen/typescript': + "@graphql-codegen/typescript": specifier: ^5.0.2 version: 5.0.2(graphql@16.11.0) - '@graphql-codegen/typescript-resolvers': + "@graphql-codegen/typescript-resolvers": specifier: ^5.1.0 version: 5.1.0(graphql@16.11.0) - '@graphql-tools/executor-http': + "@graphql-tools/executor-http": specifier: ^3.0.4 version: 3.0.4(@types/node@24.10.1)(graphql@16.11.0) + packages/studio: + dependencies: + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + fast-json-patch: + specifier: ^3.1.1 + version: 3.1.1 + lucide-react: + specifier: ^0.474.0 + version: 0.474.0(react@19.2.4) + next: + specifier: ^15.3.3 + version: 15.5.12(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: + specifier: ^19.1.0 + version: 19.2.4 + react-dom: + specifier: ^19.1.0 + version: 19.2.4(react@19.2.4) + tailwind-merge: + specifier: ^3.0.2 + version: 3.4.0 + urql: + specifier: ^5.0.1 + version: 5.0.1(@urql/core@6.0.1(graphql@16.11.0))(react@19.2.4) + devDependencies: + "@graphql-codegen/cli": + specifier: ^6.0.1 + version: 6.0.1(@types/node@24.10.1)(graphql@16.11.0)(typescript@5.9.3) + "@graphql-codegen/client-preset": + specifier: ^4.8.2 + version: 4.8.3(graphql@16.11.0) + "@tailwindcss/postcss": + specifier: ^4.1.8 + version: 4.1.18 + "@types/node": + specifier: ^24.9.1 + version: 24.10.1 + "@types/react": + specifier: ^19.1.8 + version: 19.2.14 + "@types/react-dom": + specifier: ^19.1.6 + version: 19.2.3(@types/react@19.2.14) + graphql: + specifier: ^16.11.0 + version: 16.11.0 + postcss: + specifier: ^8.5.6 + version: 8.5.6 + tailwindcss: + specifier: ^4.1.8 + version: 4.1.18 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + packages: + "@0no-co/graphql.web@1.2.0": + resolution: + { + integrity: sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw==, + } + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + graphql: + optional: true - '@ardatan/relay-compiler@12.0.3': - resolution: {integrity: sha512-mBDFOGvAoVlWaWqs3hm1AciGHSQE1rqFc/liZTyYz/Oek9yZdT5H26pH2zAFuEiTiBVPPyMuqf5VjOFPI2DGsQ==} + "@alloc/quick-lru@5.2.0": + resolution: + { + integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==, + } + engines: { node: ">=10" } + + "@ardatan/relay-compiler@12.0.3": + resolution: + { + integrity: sha512-mBDFOGvAoVlWaWqs3hm1AciGHSQE1rqFc/liZTyYz/Oek9yZdT5H26pH2zAFuEiTiBVPPyMuqf5VjOFPI2DGsQ==, + } hasBin: true peerDependencies: - graphql: '*' - - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.28.5': - resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.28.5': - resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.28.5': - resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.27.2': - resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.27.1': - resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.28.3': - resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} - engines: {node: '>=6.9.0'} + graphql: "*" + + "@babel/code-frame@7.27.1": + resolution: + { + integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==, + } + engines: { node: ">=6.9.0" } + + "@babel/compat-data@7.28.5": + resolution: + { + integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==, + } + engines: { node: ">=6.9.0" } + + "@babel/core@7.28.5": + resolution: + { + integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==, + } + engines: { node: ">=6.9.0" } + + "@babel/generator@7.28.5": + resolution: + { + integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-compilation-targets@7.27.2": + resolution: + { + integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-globals@7.28.0": + resolution: + { + integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-module-imports@7.27.1": + resolution: + { + integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-module-transforms@7.28.3": + resolution: + { + integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==, + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-plugin-utils@7.27.1': - resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.28.4': - resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.28.5': - resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} - engines: {node: '>=6.0.0'} + "@babel/core": ^7.0.0 + + "@babel/helper-plugin-utils@7.27.1": + resolution: + { + integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-string-parser@7.27.1": + resolution: + { + integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-validator-identifier@7.28.5": + resolution: + { + integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-validator-option@7.27.1": + resolution: + { + integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==, + } + engines: { node: ">=6.9.0" } + + "@babel/helpers@7.28.4": + resolution: + { + integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==, + } + engines: { node: ">=6.9.0" } + + "@babel/parser@7.28.5": + resolution: + { + integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==, + } + engines: { node: ">=6.0.0" } hasBin: true - '@babel/plugin-syntax-import-assertions@7.27.1': - resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==} - engines: {node: '>=6.9.0'} + "@babel/plugin-syntax-import-assertions@7.27.1": + resolution: + { + integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==, + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/runtime@7.28.4': - resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.27.2': - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.28.5': - resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.28.5': - resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} - engines: {node: '>=6.9.0'} - - '@bcoe/v8-coverage@1.0.2': - resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} - engines: {node: '>=18'} - - '@envelop/core@5.3.2': - resolution: {integrity: sha512-06Mu7fmyKzk09P2i2kHpGfItqLLgCq7uO5/nX4fc/iHMplWPNuAx4iYR+WXUQoFHDnP6EUbceQNQ5iyeMz9f3g==} - engines: {node: '>=18.0.0'} - - '@envelop/instrumentation@1.0.0': - resolution: {integrity: sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==} - engines: {node: '>=18.0.0'} - - '@envelop/types@5.2.1': - resolution: {integrity: sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg==} - engines: {node: '>=18.0.0'} - - '@esbuild/aix-ppc64@0.25.11': - resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} - engines: {node: '>=18'} + "@babel/core": ^7.0.0-0 + + "@babel/runtime@7.28.4": + resolution: + { + integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==, + } + engines: { node: ">=6.9.0" } + + "@babel/template@7.27.2": + resolution: + { + integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==, + } + engines: { node: ">=6.9.0" } + + "@babel/traverse@7.28.5": + resolution: + { + integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==, + } + engines: { node: ">=6.9.0" } + + "@babel/types@7.28.5": + resolution: + { + integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==, + } + engines: { node: ">=6.9.0" } + + "@bcoe/v8-coverage@1.0.2": + resolution: + { + integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==, + } + engines: { node: ">=18" } + + "@emnapi/runtime@1.8.1": + resolution: + { + integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==, + } + + "@envelop/core@5.3.2": + resolution: + { + integrity: sha512-06Mu7fmyKzk09P2i2kHpGfItqLLgCq7uO5/nX4fc/iHMplWPNuAx4iYR+WXUQoFHDnP6EUbceQNQ5iyeMz9f3g==, + } + engines: { node: ">=18.0.0" } + + "@envelop/instrumentation@1.0.0": + resolution: + { + integrity: sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==, + } + engines: { node: ">=18.0.0" } + + "@envelop/types@5.2.1": + resolution: + { + integrity: sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg==, + } + engines: { node: ">=18.0.0" } + + "@esbuild/aix-ppc64@0.25.11": + resolution: + { + integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==, + } + engines: { node: ">=18" } cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.12': - resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} - engines: {node: '>=18'} + "@esbuild/aix-ppc64@0.25.12": + resolution: + { + integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==, + } + engines: { node: ">=18" } cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.11': - resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} - engines: {node: '>=18'} + "@esbuild/android-arm64@0.25.11": + resolution: + { + integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==, + } + engines: { node: ">=18" } cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.12': - resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} - engines: {node: '>=18'} + "@esbuild/android-arm64@0.25.12": + resolution: + { + integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==, + } + engines: { node: ">=18" } cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.11': - resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} - engines: {node: '>=18'} + "@esbuild/android-arm@0.25.11": + resolution: + { + integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==, + } + engines: { node: ">=18" } cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.12': - resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} - engines: {node: '>=18'} + "@esbuild/android-arm@0.25.12": + resolution: + { + integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==, + } + engines: { node: ">=18" } cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.11': - resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} - engines: {node: '>=18'} + "@esbuild/android-x64@0.25.11": + resolution: + { + integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==, + } + engines: { node: ">=18" } cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.12': - resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} - engines: {node: '>=18'} + "@esbuild/android-x64@0.25.12": + resolution: + { + integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==, + } + engines: { node: ">=18" } cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.11': - resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} - engines: {node: '>=18'} + "@esbuild/darwin-arm64@0.25.11": + resolution: + { + integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==, + } + engines: { node: ">=18" } cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.12': - resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} - engines: {node: '>=18'} + "@esbuild/darwin-arm64@0.25.12": + resolution: + { + integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==, + } + engines: { node: ">=18" } cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.11': - resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} - engines: {node: '>=18'} + "@esbuild/darwin-x64@0.25.11": + resolution: + { + integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==, + } + engines: { node: ">=18" } cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.12': - resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} - engines: {node: '>=18'} + "@esbuild/darwin-x64@0.25.12": + resolution: + { + integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==, + } + engines: { node: ">=18" } cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.11': - resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} - engines: {node: '>=18'} + "@esbuild/freebsd-arm64@0.25.11": + resolution: + { + integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==, + } + engines: { node: ">=18" } cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.12': - resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} - engines: {node: '>=18'} + "@esbuild/freebsd-arm64@0.25.12": + resolution: + { + integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==, + } + engines: { node: ">=18" } cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.11': - resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} - engines: {node: '>=18'} + "@esbuild/freebsd-x64@0.25.11": + resolution: + { + integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==, + } + engines: { node: ">=18" } cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.12': - resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} - engines: {node: '>=18'} + "@esbuild/freebsd-x64@0.25.12": + resolution: + { + integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==, + } + engines: { node: ">=18" } cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.11': - resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} - engines: {node: '>=18'} + "@esbuild/linux-arm64@0.25.11": + resolution: + { + integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==, + } + engines: { node: ">=18" } cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.12': - resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} - engines: {node: '>=18'} + "@esbuild/linux-arm64@0.25.12": + resolution: + { + integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==, + } + engines: { node: ">=18" } cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.11': - resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} - engines: {node: '>=18'} + "@esbuild/linux-arm@0.25.11": + resolution: + { + integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==, + } + engines: { node: ">=18" } cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.12': - resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} - engines: {node: '>=18'} + "@esbuild/linux-arm@0.25.12": + resolution: + { + integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==, + } + engines: { node: ">=18" } cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.11': - resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} - engines: {node: '>=18'} + "@esbuild/linux-ia32@0.25.11": + resolution: + { + integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==, + } + engines: { node: ">=18" } cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.12': - resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} - engines: {node: '>=18'} + "@esbuild/linux-ia32@0.25.12": + resolution: + { + integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==, + } + engines: { node: ">=18" } cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.11': - resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} - engines: {node: '>=18'} + "@esbuild/linux-loong64@0.25.11": + resolution: + { + integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==, + } + engines: { node: ">=18" } cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.12': - resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} - engines: {node: '>=18'} + "@esbuild/linux-loong64@0.25.12": + resolution: + { + integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==, + } + engines: { node: ">=18" } cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.11': - resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} - engines: {node: '>=18'} + "@esbuild/linux-mips64el@0.25.11": + resolution: + { + integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==, + } + engines: { node: ">=18" } cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.12': - resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} - engines: {node: '>=18'} + "@esbuild/linux-mips64el@0.25.12": + resolution: + { + integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==, + } + engines: { node: ">=18" } cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.11': - resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} - engines: {node: '>=18'} + "@esbuild/linux-ppc64@0.25.11": + resolution: + { + integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==, + } + engines: { node: ">=18" } cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.12': - resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} - engines: {node: '>=18'} + "@esbuild/linux-ppc64@0.25.12": + resolution: + { + integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==, + } + engines: { node: ">=18" } cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.11': - resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} - engines: {node: '>=18'} + "@esbuild/linux-riscv64@0.25.11": + resolution: + { + integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==, + } + engines: { node: ">=18" } cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.12': - resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} - engines: {node: '>=18'} + "@esbuild/linux-riscv64@0.25.12": + resolution: + { + integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==, + } + engines: { node: ">=18" } cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.11': - resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} - engines: {node: '>=18'} + "@esbuild/linux-s390x@0.25.11": + resolution: + { + integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==, + } + engines: { node: ">=18" } cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.12': - resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} - engines: {node: '>=18'} + "@esbuild/linux-s390x@0.25.12": + resolution: + { + integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==, + } + engines: { node: ">=18" } cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.11': - resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} - engines: {node: '>=18'} + "@esbuild/linux-x64@0.25.11": + resolution: + { + integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==, + } + engines: { node: ">=18" } cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.12': - resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} - engines: {node: '>=18'} + "@esbuild/linux-x64@0.25.12": + resolution: + { + integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==, + } + engines: { node: ">=18" } cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.11': - resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} - engines: {node: '>=18'} + "@esbuild/netbsd-arm64@0.25.11": + resolution: + { + integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==, + } + engines: { node: ">=18" } cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.25.12': - resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} - engines: {node: '>=18'} + "@esbuild/netbsd-arm64@0.25.12": + resolution: + { + integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==, + } + engines: { node: ">=18" } cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.11': - resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} - engines: {node: '>=18'} + "@esbuild/netbsd-x64@0.25.11": + resolution: + { + integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==, + } + engines: { node: ">=18" } cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.12': - resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} - engines: {node: '>=18'} + "@esbuild/netbsd-x64@0.25.12": + resolution: + { + integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==, + } + engines: { node: ">=18" } cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.11': - resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} - engines: {node: '>=18'} + "@esbuild/openbsd-arm64@0.25.11": + resolution: + { + integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==, + } + engines: { node: ">=18" } cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.25.12': - resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} - engines: {node: '>=18'} + "@esbuild/openbsd-arm64@0.25.12": + resolution: + { + integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==, + } + engines: { node: ">=18" } cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.11': - resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} - engines: {node: '>=18'} + "@esbuild/openbsd-x64@0.25.11": + resolution: + { + integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==, + } + engines: { node: ">=18" } cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.12': - resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} - engines: {node: '>=18'} + "@esbuild/openbsd-x64@0.25.12": + resolution: + { + integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==, + } + engines: { node: ">=18" } cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.11': - resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} - engines: {node: '>=18'} + "@esbuild/openharmony-arm64@0.25.11": + resolution: + { + integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==, + } + engines: { node: ">=18" } cpu: [arm64] os: [openharmony] - '@esbuild/openharmony-arm64@0.25.12': - resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} - engines: {node: '>=18'} + "@esbuild/openharmony-arm64@0.25.12": + resolution: + { + integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==, + } + engines: { node: ">=18" } cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.11': - resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} - engines: {node: '>=18'} + "@esbuild/sunos-x64@0.25.11": + resolution: + { + integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==, + } + engines: { node: ">=18" } cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.12': - resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} - engines: {node: '>=18'} + "@esbuild/sunos-x64@0.25.12": + resolution: + { + integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==, + } + engines: { node: ">=18" } cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.11': - resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} - engines: {node: '>=18'} + "@esbuild/win32-arm64@0.25.11": + resolution: + { + integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==, + } + engines: { node: ">=18" } cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.12': - resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} - engines: {node: '>=18'} + "@esbuild/win32-arm64@0.25.12": + resolution: + { + integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==, + } + engines: { node: ">=18" } cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.11': - resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} - engines: {node: '>=18'} + "@esbuild/win32-ia32@0.25.11": + resolution: + { + integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==, + } + engines: { node: ">=18" } cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.12': - resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} - engines: {node: '>=18'} + "@esbuild/win32-ia32@0.25.12": + resolution: + { + integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==, + } + engines: { node: ">=18" } cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.11': - resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} - engines: {node: '>=18'} + "@esbuild/win32-x64@0.25.11": + resolution: + { + integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==, + } + engines: { node: ">=18" } cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.12': - resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} - engines: {node: '>=18'} + "@esbuild/win32-x64@0.25.12": + resolution: + { + integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==, + } + engines: { node: ">=18" } cpu: [x64] os: [win32] - '@fastify/busboy@3.2.0': - resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} + "@fastify/busboy@3.2.0": + resolution: + { + integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==, + } + + "@graphql-codegen/add@5.0.3": + resolution: + { + integrity: sha512-SxXPmramkth8XtBlAHu4H4jYcYXM/o3p01+psU+0NADQowA8jtYkK6MW5rV6T+CxkEaNZItfSmZRPgIuypcqnA==, + } + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/add@6.0.0': - resolution: {integrity: sha512-biFdaURX0KTwEJPQ1wkT6BRgNasqgQ5KbCI1a3zwtLtO7XTo7/vKITPylmiU27K5DSOWYnY/1jfSqUAEBuhZrQ==} - engines: {node: '>=16'} + "@graphql-codegen/add@6.0.0": + resolution: + { + integrity: sha512-biFdaURX0KTwEJPQ1wkT6BRgNasqgQ5KbCI1a3zwtLtO7XTo7/vKITPylmiU27K5DSOWYnY/1jfSqUAEBuhZrQ==, + } + engines: { node: ">=16" } peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/cli@6.0.1': - resolution: {integrity: sha512-6iP91joxb7phdicDrIF8Cv9ah2QpPVXUUu7rbOaQKvqey+QKYmHcxGCi9r5/7p4lUiHZPQvfB7xDHURHQca1SA==} - engines: {node: '>=16'} + "@graphql-codegen/cli@6.0.1": + resolution: + { + integrity: sha512-6iP91joxb7phdicDrIF8Cv9ah2QpPVXUUu7rbOaQKvqey+QKYmHcxGCi9r5/7p4lUiHZPQvfB7xDHURHQca1SA==, + } + engines: { node: ">=16" } hasBin: true peerDependencies: - '@parcel/watcher': ^2.1.0 + "@parcel/watcher": ^2.1.0 + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + "@parcel/watcher": + optional: true + + "@graphql-codegen/client-preset@4.8.3": + resolution: + { + integrity: sha512-QpEsPSO9fnRxA6Z66AmBuGcwHjZ6dYSxYo5ycMlYgSPzAbyG8gn/kWljofjJfWqSY+T/lRn+r8IXTH14ml24vQ==, + } + engines: { node: ">=16" } + peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + graphql-sock: ^1.0.0 peerDependenciesMeta: - '@parcel/watcher': + graphql-sock: optional: true - '@graphql-codegen/client-preset@5.1.1': - resolution: {integrity: sha512-d7a4KdZJBOPt/O55JneBz9WwvpWar/P5yyxfjZvvoRErXPRsWtswLp+CBKKPkRcEIz9MXfTdQ1GL3kQg16DLfg==} - engines: {node: '>=16'} + "@graphql-codegen/client-preset@5.1.1": + resolution: + { + integrity: sha512-d7a4KdZJBOPt/O55JneBz9WwvpWar/P5yyxfjZvvoRErXPRsWtswLp+CBKKPkRcEIz9MXfTdQ1GL3kQg16DLfg==, + } + engines: { node: ">=16" } peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 graphql-sock: ^1.0.0 @@ -514,39 +858,92 @@ packages: graphql-sock: optional: true - '@graphql-codegen/core@5.0.0': - resolution: {integrity: sha512-vLTEW0m8LbE4xgRwbFwCdYxVkJ1dBlVJbQyLb9Q7bHnVFgHAP982Xo8Uv7FuPBmON+2IbTjkCqhFLHVZbqpvjQ==} - engines: {node: '>=16'} + "@graphql-codegen/core@5.0.0": + resolution: + { + integrity: sha512-vLTEW0m8LbE4xgRwbFwCdYxVkJ1dBlVJbQyLb9Q7bHnVFgHAP982Xo8Uv7FuPBmON+2IbTjkCqhFLHVZbqpvjQ==, + } + engines: { node: ">=16" } + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + "@graphql-codegen/gql-tag-operations@4.0.17": + resolution: + { + integrity: sha512-2pnvPdIG6W9OuxkrEZ6hvZd142+O3B13lvhrZ48yyEBh2ujtmKokw0eTwDHtlXUqjVS0I3q7+HB2y12G/m69CA==, + } + engines: { node: ">=16" } + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + "@graphql-codegen/gql-tag-operations@5.0.3": + resolution: + { + integrity: sha512-G6YqeDMMuwMvAtlW+MUaQDoYgQtBuBrfp89IOSnj7YXqSc/TMOma3X5XeXM4/oeNDQyfm2A66j5H8DYf04mJZg==, + } + engines: { node: ">=16" } + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + "@graphql-codegen/plugin-helpers@5.1.1": + resolution: + { + integrity: sha512-28GHODK2HY1NhdyRcPP3sCz0Kqxyfiz7boIZ8qIxFYmpLYnlDgiYok5fhFLVSZihyOpCs4Fa37gVHf/Q4I2FEg==, + } + engines: { node: ">=16" } + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + "@graphql-codegen/plugin-helpers@6.0.0": + resolution: + { + integrity: sha512-Z7P89vViJvQakRyMbq/JF2iPLruRFOwOB6IXsuSvV/BptuuEd7fsGPuEf8bdjjDxUY0pJZnFN8oC7jIQ8p9GKA==, + } + engines: { node: ">=16" } peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/gql-tag-operations@5.0.3': - resolution: {integrity: sha512-G6YqeDMMuwMvAtlW+MUaQDoYgQtBuBrfp89IOSnj7YXqSc/TMOma3X5XeXM4/oeNDQyfm2A66j5H8DYf04mJZg==} - engines: {node: '>=16'} + "@graphql-codegen/schema-ast@4.1.0": + resolution: + { + integrity: sha512-kZVn0z+th9SvqxfKYgztA6PM7mhnSZaj4fiuBWvMTqA+QqQ9BBed6Pz41KuD/jr0gJtnlr2A4++/0VlpVbCTmQ==, + } peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/plugin-helpers@6.0.0': - resolution: {integrity: sha512-Z7P89vViJvQakRyMbq/JF2iPLruRFOwOB6IXsuSvV/BptuuEd7fsGPuEf8bdjjDxUY0pJZnFN8oC7jIQ8p9GKA==} - engines: {node: '>=16'} + "@graphql-codegen/schema-ast@5.0.0": + resolution: + { + integrity: sha512-jn7Q3PKQc0FxXjbpo9trxzlz/GSFQWxL042l0iC8iSbM/Ar+M7uyBwMtXPsev/3Razk+osQyreghIz0d2+6F7Q==, + } + engines: { node: ">=16" } peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/schema-ast@5.0.0': - resolution: {integrity: sha512-jn7Q3PKQc0FxXjbpo9trxzlz/GSFQWxL042l0iC8iSbM/Ar+M7uyBwMtXPsev/3Razk+osQyreghIz0d2+6F7Q==} - engines: {node: '>=16'} + "@graphql-codegen/typed-document-node@5.1.2": + resolution: + { + integrity: sha512-jaxfViDqFRbNQmfKwUY8hDyjnLTw2Z7DhGutxoOiiAI0gE/LfPe0LYaVFKVmVOOD7M3bWxoWfu4slrkbWbUbEw==, + } + engines: { node: ">=16" } peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/typed-document-node@6.0.2': - resolution: {integrity: sha512-nqcD23F87jLPQ1P2jJaepNAa4SY8Xy2soacPyQMwvxWtbRSXlg/LBUjtbEkCaU2SuLoa4L3w8VPuGoQ3EWUzeg==} - engines: {node: '>=16'} + "@graphql-codegen/typed-document-node@6.0.2": + resolution: + { + integrity: sha512-nqcD23F87jLPQ1P2jJaepNAa4SY8Xy2soacPyQMwvxWtbRSXlg/LBUjtbEkCaU2SuLoa4L3w8VPuGoQ3EWUzeg==, + } + engines: { node: ">=16" } peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/typescript-operations@5.0.2': - resolution: {integrity: sha512-i2nSJ5a65H+JgXwWvEuYehVYUImIvrHk3PTs+Fcj+OjZFvDl2qBziIhr6shCjV0KH9IZ6Y+1v4TzkxZr/+XFjA==} - engines: {node: '>=16'} + "@graphql-codegen/typescript-operations@4.6.1": + resolution: + { + integrity: sha512-k92laxhih7s0WZ8j5WMIbgKwhe64C0As6x+PdcvgZFMudDJ7rPJ/hFqJ9DCRxNjXoHmSjnr6VUuQZq4lT1RzCA==, + } + engines: { node: ">=16" } peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 graphql-sock: ^1.0.0 @@ -554,9 +951,12 @@ packages: graphql-sock: optional: true - '@graphql-codegen/typescript-resolvers@5.1.0': - resolution: {integrity: sha512-eK0POqU8fWkIpmhzgidaAz6RUZZCbJ9aTkLHkbx6u2NgUFwZJtAlvyWJxnIrp/jy+aSMf7P4o8R99QdGUXP/7w==} - engines: {node: '>=16'} + "@graphql-codegen/typescript-operations@5.0.2": + resolution: + { + integrity: sha512-i2nSJ5a65H+JgXwWvEuYehVYUImIvrHk3PTs+Fcj+OjZFvDl2qBziIhr6shCjV0KH9IZ6Y+1v4TzkxZr/+XFjA==, + } + engines: { node: ">=16" } peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 graphql-sock: ^1.0.0 @@ -564,561 +964,1344 @@ packages: graphql-sock: optional: true - '@graphql-codegen/typescript@5.0.2': - resolution: {integrity: sha512-OJYXpS9SRf4VFzqu3ZH/RmTftGhAVTCmscH63iPlvTlCT8NBmpSHdZ875AEa38LugdL8XgUcGsI3pprP3e5j/w==} - engines: {node: '>=16'} + "@graphql-codegen/typescript-resolvers@5.1.0": + resolution: + { + integrity: sha512-eK0POqU8fWkIpmhzgidaAz6RUZZCbJ9aTkLHkbx6u2NgUFwZJtAlvyWJxnIrp/jy+aSMf7P4o8R99QdGUXP/7w==, + } + engines: { node: ">=16" } + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + graphql-sock: ^1.0.0 + peerDependenciesMeta: + graphql-sock: + optional: true + + "@graphql-codegen/typescript@4.1.6": + resolution: + { + integrity: sha512-vpw3sfwf9A7S+kIUjyFxuvrywGxd4lmwmyYnnDVjVE4kSQ6Td3DpqaPTy8aNQ6O96vFoi/bxbZS2BW49PwSUUA==, + } + engines: { node: ">=16" } peerDependencies: graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/visitor-plugin-common@6.1.0': - resolution: {integrity: sha512-AvGO1pe+b/kAa7+WBDlNDXOruRZWv/NnhLHgTggiW2XWRv33biuzg4cF1UTdpR2jmESZzJU4kXngLLX8RYJWLA==} - engines: {node: '>=16'} + "@graphql-codegen/typescript@5.0.2": + resolution: + { + integrity: sha512-OJYXpS9SRf4VFzqu3ZH/RmTftGhAVTCmscH63iPlvTlCT8NBmpSHdZ875AEa38LugdL8XgUcGsI3pprP3e5j/w==, + } + engines: { node: ">=16" } peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-hive/signal@1.0.0': - resolution: {integrity: sha512-RiwLMc89lTjvyLEivZ/qxAC5nBHoS2CtsWFSOsN35sxG9zoo5Z+JsFHM8MlvmO9yt+MJNIyC5MLE1rsbOphlag==} - engines: {node: '>=18.0.0'} + "@graphql-codegen/visitor-plugin-common@5.8.0": + resolution: + { + integrity: sha512-lC1E1Kmuzi3WZUlYlqB4fP6+CvbKH9J+haU1iWmgsBx5/sO2ROeXJG4Dmt8gP03bI2BwjiwV5WxCEMlyeuzLnA==, + } + engines: { node: ">=16" } + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-hive/signal@2.0.0': - resolution: {integrity: sha512-Pz8wB3K0iU6ae9S1fWfsmJX24CcGeTo6hE7T44ucmV/ALKRj+bxClmqrYcDT7v3f0d12Rh4FAXBb6gon+WkDpQ==} - engines: {node: '>=20.0.0'} + "@graphql-codegen/visitor-plugin-common@6.1.0": + resolution: + { + integrity: sha512-AvGO1pe+b/kAa7+WBDlNDXOruRZWv/NnhLHgTggiW2XWRv33biuzg4cF1UTdpR2jmESZzJU4kXngLLX8RYJWLA==, + } + engines: { node: ">=16" } + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-tools/apollo-engine-loader@8.0.22': - resolution: {integrity: sha512-ssD2wNxeOTRcUEkuGcp0KfZAGstL9YLTe/y3erTDZtOs2wL1TJESw8NVAp+3oUHPeHKBZQB4Z6RFEbPgMdT2wA==} - engines: {node: '>=16.0.0'} + "@graphql-hive/signal@1.0.0": + resolution: + { + integrity: sha512-RiwLMc89lTjvyLEivZ/qxAC5nBHoS2CtsWFSOsN35sxG9zoo5Z+JsFHM8MlvmO9yt+MJNIyC5MLE1rsbOphlag==, + } + engines: { node: ">=18.0.0" } + + "@graphql-hive/signal@2.0.0": + resolution: + { + integrity: sha512-Pz8wB3K0iU6ae9S1fWfsmJX24CcGeTo6hE7T44ucmV/ALKRj+bxClmqrYcDT7v3f0d12Rh4FAXBb6gon+WkDpQ==, + } + engines: { node: ">=20.0.0" } + + "@graphql-tools/apollo-engine-loader@8.0.22": + resolution: + { + integrity: sha512-ssD2wNxeOTRcUEkuGcp0KfZAGstL9YLTe/y3erTDZtOs2wL1TJESw8NVAp+3oUHPeHKBZQB4Z6RFEbPgMdT2wA==, + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/batch-execute@9.0.19': - resolution: {integrity: sha512-VGamgY4PLzSx48IHPoblRw0oTaBa7S26RpZXt0Y4NN90ytoE0LutlpB2484RbkfcTjv9wa64QD474+YP1kEgGA==} - engines: {node: '>=18.0.0'} + "@graphql-tools/batch-execute@9.0.19": + resolution: + { + integrity: sha512-VGamgY4PLzSx48IHPoblRw0oTaBa7S26RpZXt0Y4NN90ytoE0LutlpB2484RbkfcTjv9wa64QD474+YP1kEgGA==, + } + engines: { node: ">=18.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/code-file-loader@8.1.22': - resolution: {integrity: sha512-FSka29kqFkfFmw36CwoQ+4iyhchxfEzPbXOi37lCEjWLHudGaPkXc3RyB9LdmBxx3g3GHEu43a5n5W8gfcrMdA==} - engines: {node: '>=16.0.0'} + "@graphql-tools/code-file-loader@8.1.22": + resolution: + { + integrity: sha512-FSka29kqFkfFmw36CwoQ+4iyhchxfEzPbXOi37lCEjWLHudGaPkXc3RyB9LdmBxx3g3GHEu43a5n5W8gfcrMdA==, + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/delegate@10.2.23': - resolution: {integrity: sha512-xrPtl7f1LxS+B6o+W7ueuQh67CwRkfl+UKJncaslnqYdkxKmNBB4wnzVcW8ZsRdwbsla/v43PtwAvSlzxCzq2w==} - engines: {node: '>=18.0.0'} + "@graphql-tools/delegate@10.2.23": + resolution: + { + integrity: sha512-xrPtl7f1LxS+B6o+W7ueuQh67CwRkfl+UKJncaslnqYdkxKmNBB4wnzVcW8ZsRdwbsla/v43PtwAvSlzxCzq2w==, + } + engines: { node: ">=18.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/documents@1.0.1': - resolution: {integrity: sha512-aweoMH15wNJ8g7b2r4C4WRuJxZ0ca8HtNO54rkye/3duxTkW4fGBEutCx03jCIr5+a1l+4vFJNP859QnAVBVCA==} - engines: {node: '>=16.0.0'} + "@graphql-tools/documents@1.0.1": + resolution: + { + integrity: sha512-aweoMH15wNJ8g7b2r4C4WRuJxZ0ca8HtNO54rkye/3duxTkW4fGBEutCx03jCIr5+a1l+4vFJNP859QnAVBVCA==, + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor-common@0.0.4': - resolution: {integrity: sha512-SEH/OWR+sHbknqZyROCFHcRrbZeUAyjCsgpVWCRjqjqRbiJiXq6TxNIIOmpXgkrXWW/2Ev4Wms6YSGJXjdCs6Q==} - engines: {node: '>=18.0.0'} + "@graphql-tools/executor-common@0.0.4": + resolution: + { + integrity: sha512-SEH/OWR+sHbknqZyROCFHcRrbZeUAyjCsgpVWCRjqjqRbiJiXq6TxNIIOmpXgkrXWW/2Ev4Wms6YSGJXjdCs6Q==, + } + engines: { node: ">=18.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor-common@0.0.6': - resolution: {integrity: sha512-JAH/R1zf77CSkpYATIJw+eOJwsbWocdDjY+avY7G+P5HCXxwQjAjWVkJI1QJBQYjPQDVxwf1fmTZlIN3VOadow==} - engines: {node: '>=18.0.0'} + "@graphql-tools/executor-common@0.0.6": + resolution: + { + integrity: sha512-JAH/R1zf77CSkpYATIJw+eOJwsbWocdDjY+avY7G+P5HCXxwQjAjWVkJI1QJBQYjPQDVxwf1fmTZlIN3VOadow==, + } + engines: { node: ">=18.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor-common@1.0.2': - resolution: {integrity: sha512-CQGDXczd4x7v40axa/RyHPjgkMqodGbi94eBxeewuMdT1WPYop+efR4sW0BXv6AKT4e7pPABBn9LrAXj8TIlAg==} - engines: {node: '>=20.0.0'} + "@graphql-tools/executor-common@1.0.2": + resolution: + { + integrity: sha512-CQGDXczd4x7v40axa/RyHPjgkMqodGbi94eBxeewuMdT1WPYop+efR4sW0BXv6AKT4e7pPABBn9LrAXj8TIlAg==, + } + engines: { node: ">=20.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor-graphql-ws@2.0.7': - resolution: {integrity: sha512-J27za7sKF6RjhmvSOwOQFeNhNHyP4f4niqPnerJmq73OtLx9Y2PGOhkXOEB0PjhvPJceuttkD2O1yMgEkTGs3Q==} - engines: {node: '>=18.0.0'} + "@graphql-tools/executor-graphql-ws@2.0.7": + resolution: + { + integrity: sha512-J27za7sKF6RjhmvSOwOQFeNhNHyP4f4niqPnerJmq73OtLx9Y2PGOhkXOEB0PjhvPJceuttkD2O1yMgEkTGs3Q==, + } + engines: { node: ">=18.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor-http@1.3.3': - resolution: {integrity: sha512-LIy+l08/Ivl8f8sMiHW2ebyck59JzyzO/yF9SFS4NH6MJZUezA1xThUXCDIKhHiD56h/gPojbkpcFvM2CbNE7A==} - engines: {node: '>=18.0.0'} + "@graphql-tools/executor-http@1.3.3": + resolution: + { + integrity: sha512-LIy+l08/Ivl8f8sMiHW2ebyck59JzyzO/yF9SFS4NH6MJZUezA1xThUXCDIKhHiD56h/gPojbkpcFvM2CbNE7A==, + } + engines: { node: ">=18.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor-http@3.0.4': - resolution: {integrity: sha512-S4d/FiHBxHWVG2iELP2zx23ESt7kpaW4oagFT8K+nezOkFL6TDvzuhPKSVhEq6A6G0qUUcKDHLJhcJ0ppmtCvw==} - engines: {node: '>=20.0.0'} + "@graphql-tools/executor-http@3.0.4": + resolution: + { + integrity: sha512-S4d/FiHBxHWVG2iELP2zx23ESt7kpaW4oagFT8K+nezOkFL6TDvzuhPKSVhEq6A6G0qUUcKDHLJhcJ0ppmtCvw==, + } + engines: { node: ">=20.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor-legacy-ws@1.1.19': - resolution: {integrity: sha512-bEbv/SlEdhWQD0WZLUX1kOenEdVZk1yYtilrAWjRUgfHRZoEkY9s+oiqOxnth3z68wC2MWYx7ykkS5hhDamixg==} - engines: {node: '>=16.0.0'} + "@graphql-tools/executor-legacy-ws@1.1.19": + resolution: + { + integrity: sha512-bEbv/SlEdhWQD0WZLUX1kOenEdVZk1yYtilrAWjRUgfHRZoEkY9s+oiqOxnth3z68wC2MWYx7ykkS5hhDamixg==, + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor@1.4.9': - resolution: {integrity: sha512-SAUlDT70JAvXeqV87gGzvDzUGofn39nvaVcVhNf12Dt+GfWHtNNO/RCn/Ea4VJaSLGzraUd41ObnN3i80EBU7w==} - engines: {node: '>=16.0.0'} + "@graphql-tools/executor@1.4.9": + resolution: + { + integrity: sha512-SAUlDT70JAvXeqV87gGzvDzUGofn39nvaVcVhNf12Dt+GfWHtNNO/RCn/Ea4VJaSLGzraUd41ObnN3i80EBU7w==, + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/git-loader@8.0.26': - resolution: {integrity: sha512-0g+9eng8DaT4ZmZvUmPgjLTgesUa6M8xrDjNBltRldZkB055rOeUgJiKmL6u8PjzI5VxkkVsn0wtAHXhDI2UXQ==} - engines: {node: '>=16.0.0'} + "@graphql-tools/git-loader@8.0.26": + resolution: + { + integrity: sha512-0g+9eng8DaT4ZmZvUmPgjLTgesUa6M8xrDjNBltRldZkB055rOeUgJiKmL6u8PjzI5VxkkVsn0wtAHXhDI2UXQ==, + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/github-loader@8.0.22': - resolution: {integrity: sha512-uQ4JNcNPsyMkTIgzeSbsoT9hogLjYrZooLUYd173l5eUGUi49EAcsGdiBCKaKfEjanv410FE8hjaHr7fjSRkJw==} - engines: {node: '>=16.0.0'} + "@graphql-tools/github-loader@8.0.22": + resolution: + { + integrity: sha512-uQ4JNcNPsyMkTIgzeSbsoT9hogLjYrZooLUYd173l5eUGUi49EAcsGdiBCKaKfEjanv410FE8hjaHr7fjSRkJw==, + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/graphql-file-loader@8.1.2': - resolution: {integrity: sha512-VB6ttpwkqCu0KsA1/Wmev4qsu05Qfw49kgVSKkPjuyDQfVaqtr9ewEQRkX5CqnqHGEeLl6sOlNGEMM5fCVMWGQ==} - engines: {node: '>=16.0.0'} + "@graphql-tools/graphql-file-loader@8.1.2": + resolution: + { + integrity: sha512-VB6ttpwkqCu0KsA1/Wmev4qsu05Qfw49kgVSKkPjuyDQfVaqtr9ewEQRkX5CqnqHGEeLl6sOlNGEMM5fCVMWGQ==, + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/graphql-tag-pluck@8.3.21': - resolution: {integrity: sha512-TJhELNvR1tmghXMi6HVKp/Swxbx1rcSp/zdkuJZT0DCM3vOY11FXY6NW3aoxumcuYDNN3jqXcCPKstYGFPi5GQ==} - engines: {node: '>=16.0.0'} + "@graphql-tools/graphql-tag-pluck@8.3.21": + resolution: + { + integrity: sha512-TJhELNvR1tmghXMi6HVKp/Swxbx1rcSp/zdkuJZT0DCM3vOY11FXY6NW3aoxumcuYDNN3jqXcCPKstYGFPi5GQ==, + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/import@7.1.2': - resolution: {integrity: sha512-+tlNQbLEqAA4LdWoLwM1tckx95lo8WIKd8vhj99b9rLwN/KfLwHWzdS3jnUFK7+99vmHmN1oE5v5zmqJz0MTKw==} - engines: {node: '>=16.0.0'} + "@graphql-tools/import@7.1.2": + resolution: + { + integrity: sha512-+tlNQbLEqAA4LdWoLwM1tckx95lo8WIKd8vhj99b9rLwN/KfLwHWzdS3jnUFK7+99vmHmN1oE5v5zmqJz0MTKw==, + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/json-file-loader@8.0.20': - resolution: {integrity: sha512-5v6W+ZLBBML5SgntuBDLsYoqUvwfNboAwL6BwPHi3z/hH1f8BS9/0+MCW9OGY712g7E4pc3y9KqS67mWF753eA==} - engines: {node: '>=16.0.0'} + "@graphql-tools/json-file-loader@8.0.20": + resolution: + { + integrity: sha512-5v6W+ZLBBML5SgntuBDLsYoqUvwfNboAwL6BwPHi3z/hH1f8BS9/0+MCW9OGY712g7E4pc3y9KqS67mWF753eA==, + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/load@8.1.2': - resolution: {integrity: sha512-WhDPv25/jRND+0uripofMX0IEwo6mrv+tJg6HifRmDu8USCD7nZhufT0PP7lIcuutqjIQFyogqT70BQsy6wOgw==} - engines: {node: '>=16.0.0'} + "@graphql-tools/load@8.1.2": + resolution: + { + integrity: sha512-WhDPv25/jRND+0uripofMX0IEwo6mrv+tJg6HifRmDu8USCD7nZhufT0PP7lIcuutqjIQFyogqT70BQsy6wOgw==, + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/merge@9.1.1': - resolution: {integrity: sha512-BJ5/7Y7GOhTuvzzO5tSBFL4NGr7PVqTJY3KeIDlVTT8YLcTXtBR+hlrC3uyEym7Ragn+zyWdHeJ9ev+nRX1X2w==} - engines: {node: '>=16.0.0'} + "@graphql-tools/merge@9.1.1": + resolution: + { + integrity: sha512-BJ5/7Y7GOhTuvzzO5tSBFL4NGr7PVqTJY3KeIDlVTT8YLcTXtBR+hlrC3uyEym7Ragn+zyWdHeJ9ev+nRX1X2w==, + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/optimize@2.0.0': - resolution: {integrity: sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg==} - engines: {node: '>=16.0.0'} + "@graphql-tools/optimize@2.0.0": + resolution: + { + integrity: sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg==, + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/relay-operation-optimizer@7.0.21': - resolution: {integrity: sha512-vMdU0+XfeBh9RCwPqRsr3A05hPA3MsahFn/7OAwXzMySA5EVnSH5R4poWNs3h1a0yT0tDPLhxORhK7qJdSWj2A==} - engines: {node: '>=16.0.0'} + "@graphql-tools/relay-operation-optimizer@7.0.21": + resolution: + { + integrity: sha512-vMdU0+XfeBh9RCwPqRsr3A05hPA3MsahFn/7OAwXzMySA5EVnSH5R4poWNs3h1a0yT0tDPLhxORhK7qJdSWj2A==, + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/schema@10.0.25': - resolution: {integrity: sha512-/PqE8US8kdQ7lB9M5+jlW8AyVjRGCKU7TSktuW3WNKSKmDO0MK1wakvb5gGdyT49MjAIb4a3LWxIpwo5VygZuw==} - engines: {node: '>=16.0.0'} + "@graphql-tools/schema@10.0.25": + resolution: + { + integrity: sha512-/PqE8US8kdQ7lB9M5+jlW8AyVjRGCKU7TSktuW3WNKSKmDO0MK1wakvb5gGdyT49MjAIb4a3LWxIpwo5VygZuw==, + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/url-loader@8.0.33': - resolution: {integrity: sha512-Fu626qcNHcqAj8uYd7QRarcJn5XZ863kmxsg1sm0fyjyfBJnsvC7ddFt6Hayz5kxVKfsnjxiDfPMXanvsQVBKw==} - engines: {node: '>=16.0.0'} + "@graphql-tools/url-loader@8.0.33": + resolution: + { + integrity: sha512-Fu626qcNHcqAj8uYd7QRarcJn5XZ863kmxsg1sm0fyjyfBJnsvC7ddFt6Hayz5kxVKfsnjxiDfPMXanvsQVBKw==, + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/utils@10.9.1': - resolution: {integrity: sha512-B1wwkXk9UvU7LCBkPs8513WxOQ2H8Fo5p8HR1+Id9WmYE5+bd51vqN+MbrqvWczHCH2gwkREgHJN88tE0n1FCw==} - engines: {node: '>=16.0.0'} + "@graphql-tools/utils@10.9.1": + resolution: + { + integrity: sha512-B1wwkXk9UvU7LCBkPs8513WxOQ2H8Fo5p8HR1+Id9WmYE5+bd51vqN+MbrqvWczHCH2gwkREgHJN88tE0n1FCw==, + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/wrap@10.1.4': - resolution: {integrity: sha512-7pyNKqXProRjlSdqOtrbnFRMQAVamCmEREilOXtZujxY6kYit3tvWWSjUrcIOheltTffoRh7EQSjpy2JDCzasg==} - engines: {node: '>=18.0.0'} + "@graphql-tools/wrap@10.1.4": + resolution: + { + integrity: sha512-7pyNKqXProRjlSdqOtrbnFRMQAVamCmEREilOXtZujxY6kYit3tvWWSjUrcIOheltTffoRh7EQSjpy2JDCzasg==, + } + engines: { node: ">=18.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-typed-document-node/core@3.2.0': - resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + "@graphql-typed-document-node/core@3.2.0": + resolution: + { + integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==, + } peerDependencies: graphql: ^0.8.0 || ^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 - '@graphql-yoga/logger@2.0.1': - resolution: {integrity: sha512-Nv0BoDGLMg9QBKy9cIswQ3/6aKaKjlTh87x3GiBg2Z4RrjyrM48DvOOK0pJh1C1At+b0mUIM67cwZcFTDLN4sA==} - engines: {node: '>=18.0.0'} + "@graphql-yoga/logger@2.0.1": + resolution: + { + integrity: sha512-Nv0BoDGLMg9QBKy9cIswQ3/6aKaKjlTh87x3GiBg2Z4RrjyrM48DvOOK0pJh1C1At+b0mUIM67cwZcFTDLN4sA==, + } + engines: { node: ">=18.0.0" } + + "@graphql-yoga/subscription@5.0.5": + resolution: + { + integrity: sha512-oCMWOqFs6QV96/NZRt/ZhTQvzjkGB4YohBOpKM4jH/lDT4qb7Lex/aGCxpi/JD9njw3zBBtMqxbaC22+tFHVvw==, + } + engines: { node: ">=18.0.0" } + + "@graphql-yoga/typed-event-target@3.0.2": + resolution: + { + integrity: sha512-ZpJxMqB+Qfe3rp6uszCQoag4nSw42icURnBRfFYSOmTgEeOe4rD0vYlbA8spvCu2TlCesNTlEN9BLWtQqLxabA==, + } + engines: { node: ">=18.0.0" } + + "@img/colour@1.0.0": + resolution: + { + integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==, + } + engines: { node: ">=18" } + + "@img/sharp-darwin-arm64@0.34.5": + resolution: + { + integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm64] + os: [darwin] + + "@img/sharp-darwin-x64@0.34.5": + resolution: + { + integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [darwin] + + "@img/sharp-libvips-darwin-arm64@1.2.4": + resolution: + { + integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==, + } + cpu: [arm64] + os: [darwin] + + "@img/sharp-libvips-darwin-x64@1.2.4": + resolution: + { + integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==, + } + cpu: [x64] + os: [darwin] + + "@img/sharp-libvips-linux-arm64@1.2.4": + resolution: + { + integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==, + } + cpu: [arm64] + os: [linux] + + "@img/sharp-libvips-linux-arm@1.2.4": + resolution: + { + integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==, + } + cpu: [arm] + os: [linux] + + "@img/sharp-libvips-linux-ppc64@1.2.4": + resolution: + { + integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==, + } + cpu: [ppc64] + os: [linux] + + "@img/sharp-libvips-linux-riscv64@1.2.4": + resolution: + { + integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==, + } + cpu: [riscv64] + os: [linux] + + "@img/sharp-libvips-linux-s390x@1.2.4": + resolution: + { + integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==, + } + cpu: [s390x] + os: [linux] + + "@img/sharp-libvips-linux-x64@1.2.4": + resolution: + { + integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==, + } + cpu: [x64] + os: [linux] + + "@img/sharp-libvips-linuxmusl-arm64@1.2.4": + resolution: + { + integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==, + } + cpu: [arm64] + os: [linux] + + "@img/sharp-libvips-linuxmusl-x64@1.2.4": + resolution: + { + integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==, + } + cpu: [x64] + os: [linux] + + "@img/sharp-linux-arm64@0.34.5": + resolution: + { + integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm64] + os: [linux] + + "@img/sharp-linux-arm@0.34.5": + resolution: + { + integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm] + os: [linux] + + "@img/sharp-linux-ppc64@0.34.5": + resolution: + { + integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [ppc64] + os: [linux] + + "@img/sharp-linux-riscv64@0.34.5": + resolution: + { + integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [riscv64] + os: [linux] + + "@img/sharp-linux-s390x@0.34.5": + resolution: + { + integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [s390x] + os: [linux] + + "@img/sharp-linux-x64@0.34.5": + resolution: + { + integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [linux] + + "@img/sharp-linuxmusl-arm64@0.34.5": + resolution: + { + integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm64] + os: [linux] + + "@img/sharp-linuxmusl-x64@0.34.5": + resolution: + { + integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [linux] - '@graphql-yoga/subscription@5.0.5': - resolution: {integrity: sha512-oCMWOqFs6QV96/NZRt/ZhTQvzjkGB4YohBOpKM4jH/lDT4qb7Lex/aGCxpi/JD9njw3zBBtMqxbaC22+tFHVvw==} - engines: {node: '>=18.0.0'} + "@img/sharp-wasm32@0.34.5": + resolution: + { + integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [wasm32] + + "@img/sharp-win32-arm64@0.34.5": + resolution: + { + integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm64] + os: [win32] - '@graphql-yoga/typed-event-target@3.0.2': - resolution: {integrity: sha512-ZpJxMqB+Qfe3rp6uszCQoag4nSw42icURnBRfFYSOmTgEeOe4rD0vYlbA8spvCu2TlCesNTlEN9BLWtQqLxabA==} - engines: {node: '>=18.0.0'} + "@img/sharp-win32-ia32@0.34.5": + resolution: + { + integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [ia32] + os: [win32] - '@inquirer/ansi@1.0.1': - resolution: {integrity: sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw==} - engines: {node: '>=18'} + "@img/sharp-win32-x64@0.34.5": + resolution: + { + integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [win32] - '@inquirer/checkbox@4.3.0': - resolution: {integrity: sha512-5+Q3PKH35YsnoPTh75LucALdAxom6xh5D1oeY561x4cqBuH24ZFVyFREPe14xgnrtmGu3EEt1dIi60wRVSnGCw==} - engines: {node: '>=18'} + "@inquirer/ansi@1.0.1": + resolution: + { + integrity: sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw==, + } + engines: { node: ">=18" } + + "@inquirer/checkbox@4.3.0": + resolution: + { + integrity: sha512-5+Q3PKH35YsnoPTh75LucALdAxom6xh5D1oeY561x4cqBuH24ZFVyFREPe14xgnrtmGu3EEt1dIi60wRVSnGCw==, + } + engines: { node: ">=18" } peerDependencies: - '@types/node': '>=18' + "@types/node": ">=18" peerDependenciesMeta: - '@types/node': + "@types/node": optional: true - '@inquirer/confirm@5.1.19': - resolution: {integrity: sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ==} - engines: {node: '>=18'} + "@inquirer/confirm@5.1.19": + resolution: + { + integrity: sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ==, + } + engines: { node: ">=18" } peerDependencies: - '@types/node': '>=18' + "@types/node": ">=18" peerDependenciesMeta: - '@types/node': + "@types/node": optional: true - '@inquirer/core@10.3.0': - resolution: {integrity: sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA==} - engines: {node: '>=18'} + "@inquirer/core@10.3.0": + resolution: + { + integrity: sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA==, + } + engines: { node: ">=18" } peerDependencies: - '@types/node': '>=18' + "@types/node": ">=18" peerDependenciesMeta: - '@types/node': + "@types/node": optional: true - '@inquirer/editor@4.2.21': - resolution: {integrity: sha512-MjtjOGjr0Kh4BciaFShYpZ1s9400idOdvQ5D7u7lE6VztPFoyLcVNE5dXBmEEIQq5zi4B9h2kU+q7AVBxJMAkQ==} - engines: {node: '>=18'} + "@inquirer/editor@4.2.21": + resolution: + { + integrity: sha512-MjtjOGjr0Kh4BciaFShYpZ1s9400idOdvQ5D7u7lE6VztPFoyLcVNE5dXBmEEIQq5zi4B9h2kU+q7AVBxJMAkQ==, + } + engines: { node: ">=18" } peerDependencies: - '@types/node': '>=18' + "@types/node": ">=18" peerDependenciesMeta: - '@types/node': + "@types/node": optional: true - '@inquirer/expand@4.0.21': - resolution: {integrity: sha512-+mScLhIcbPFmuvU3tAGBed78XvYHSvCl6dBiYMlzCLhpr0bzGzd8tfivMMeqND6XZiaZ1tgusbUHJEfc6YzOdA==} - engines: {node: '>=18'} + "@inquirer/expand@4.0.21": + resolution: + { + integrity: sha512-+mScLhIcbPFmuvU3tAGBed78XvYHSvCl6dBiYMlzCLhpr0bzGzd8tfivMMeqND6XZiaZ1tgusbUHJEfc6YzOdA==, + } + engines: { node: ">=18" } peerDependencies: - '@types/node': '>=18' + "@types/node": ">=18" peerDependenciesMeta: - '@types/node': + "@types/node": optional: true - '@inquirer/external-editor@1.0.2': - resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} - engines: {node: '>=18'} + "@inquirer/external-editor@1.0.2": + resolution: + { + integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==, + } + engines: { node: ">=18" } peerDependencies: - '@types/node': '>=18' + "@types/node": ">=18" peerDependenciesMeta: - '@types/node': + "@types/node": optional: true - '@inquirer/figures@1.0.14': - resolution: {integrity: sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ==} - engines: {node: '>=18'} - - '@inquirer/input@4.2.5': - resolution: {integrity: sha512-7GoWev7P6s7t0oJbenH0eQ0ThNdDJbEAEtVt9vsrYZ9FulIokvd823yLyhQlWHJPGce1wzP53ttfdCZmonMHyA==} - engines: {node: '>=18'} + "@inquirer/figures@1.0.14": + resolution: + { + integrity: sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ==, + } + engines: { node: ">=18" } + + "@inquirer/input@4.2.5": + resolution: + { + integrity: sha512-7GoWev7P6s7t0oJbenH0eQ0ThNdDJbEAEtVt9vsrYZ9FulIokvd823yLyhQlWHJPGce1wzP53ttfdCZmonMHyA==, + } + engines: { node: ">=18" } peerDependencies: - '@types/node': '>=18' + "@types/node": ">=18" peerDependenciesMeta: - '@types/node': + "@types/node": optional: true - '@inquirer/number@3.0.21': - resolution: {integrity: sha512-5QWs0KGaNMlhbdhOSCFfKsW+/dcAVC2g4wT/z2MCiZM47uLgatC5N20kpkDQf7dHx+XFct/MJvvNGy6aYJn4Pw==} - engines: {node: '>=18'} + "@inquirer/number@3.0.21": + resolution: + { + integrity: sha512-5QWs0KGaNMlhbdhOSCFfKsW+/dcAVC2g4wT/z2MCiZM47uLgatC5N20kpkDQf7dHx+XFct/MJvvNGy6aYJn4Pw==, + } + engines: { node: ">=18" } peerDependencies: - '@types/node': '>=18' + "@types/node": ">=18" peerDependenciesMeta: - '@types/node': + "@types/node": optional: true - '@inquirer/password@4.0.21': - resolution: {integrity: sha512-xxeW1V5SbNFNig2pLfetsDb0svWlKuhmr7MPJZMYuDnCTkpVBI+X/doudg4pznc1/U+yYmWFFOi4hNvGgUo7EA==} - engines: {node: '>=18'} + "@inquirer/password@4.0.21": + resolution: + { + integrity: sha512-xxeW1V5SbNFNig2pLfetsDb0svWlKuhmr7MPJZMYuDnCTkpVBI+X/doudg4pznc1/U+yYmWFFOi4hNvGgUo7EA==, + } + engines: { node: ">=18" } peerDependencies: - '@types/node': '>=18' + "@types/node": ">=18" peerDependenciesMeta: - '@types/node': + "@types/node": optional: true - '@inquirer/prompts@7.9.0': - resolution: {integrity: sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==} - engines: {node: '>=18'} + "@inquirer/prompts@7.9.0": + resolution: + { + integrity: sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==, + } + engines: { node: ">=18" } peerDependencies: - '@types/node': '>=18' + "@types/node": ">=18" peerDependenciesMeta: - '@types/node': + "@types/node": optional: true - '@inquirer/rawlist@4.1.9': - resolution: {integrity: sha512-AWpxB7MuJrRiSfTKGJ7Y68imYt8P9N3Gaa7ySdkFj1iWjr6WfbGAhdZvw/UnhFXTHITJzxGUI9k8IX7akAEBCg==} - engines: {node: '>=18'} + "@inquirer/rawlist@4.1.9": + resolution: + { + integrity: sha512-AWpxB7MuJrRiSfTKGJ7Y68imYt8P9N3Gaa7ySdkFj1iWjr6WfbGAhdZvw/UnhFXTHITJzxGUI9k8IX7akAEBCg==, + } + engines: { node: ">=18" } peerDependencies: - '@types/node': '>=18' + "@types/node": ">=18" peerDependenciesMeta: - '@types/node': + "@types/node": optional: true - '@inquirer/search@3.2.0': - resolution: {integrity: sha512-a5SzB/qrXafDX1Z4AZW3CsVoiNxcIYCzYP7r9RzrfMpaLpB+yWi5U8BWagZyLmwR0pKbbL5umnGRd0RzGVI8bQ==} - engines: {node: '>=18'} + "@inquirer/search@3.2.0": + resolution: + { + integrity: sha512-a5SzB/qrXafDX1Z4AZW3CsVoiNxcIYCzYP7r9RzrfMpaLpB+yWi5U8BWagZyLmwR0pKbbL5umnGRd0RzGVI8bQ==, + } + engines: { node: ">=18" } peerDependencies: - '@types/node': '>=18' + "@types/node": ">=18" peerDependenciesMeta: - '@types/node': + "@types/node": optional: true - '@inquirer/select@4.4.0': - resolution: {integrity: sha512-kaC3FHsJZvVyIjYBs5Ih8y8Bj4P/QItQWrZW22WJax7zTN+ZPXVGuOM55vzbdCP9zKUiBd9iEJVdesujfF+cAA==} - engines: {node: '>=18'} + "@inquirer/select@4.4.0": + resolution: + { + integrity: sha512-kaC3FHsJZvVyIjYBs5Ih8y8Bj4P/QItQWrZW22WJax7zTN+ZPXVGuOM55vzbdCP9zKUiBd9iEJVdesujfF+cAA==, + } + engines: { node: ">=18" } peerDependencies: - '@types/node': '>=18' + "@types/node": ">=18" peerDependenciesMeta: - '@types/node': + "@types/node": optional: true - '@inquirer/type@3.0.9': - resolution: {integrity: sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w==} - engines: {node: '>=18'} + "@inquirer/type@3.0.9": + resolution: + { + integrity: sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w==, + } + engines: { node: ">=18" } peerDependencies: - '@types/node': '>=18' + "@types/node": ">=18" peerDependenciesMeta: - '@types/node': + "@types/node": optional: true - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + "@jridgewell/gen-mapping@0.3.13": + resolution: + { + integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==, + } + + "@jridgewell/remapping@2.3.5": + resolution: + { + integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==, + } + + "@jridgewell/resolve-uri@3.1.2": + resolution: + { + integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, + } + engines: { node: ">=6.0.0" } + + "@jridgewell/sourcemap-codec@1.5.5": + resolution: + { + integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==, + } + + "@jridgewell/trace-mapping@0.3.31": + resolution: + { + integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==, + } + + "@next/env@15.5.12": + resolution: + { + integrity: sha512-pUvdJN1on574wQHjaBfNGDt9Mz5utDSZFsIIQkMzPgNS8ZvT4H2mwOrOIClwsQOb6EGx5M76/CZr6G8i6pSpLg==, + } + + "@next/swc-darwin-arm64@15.5.12": + resolution: + { + integrity: sha512-RnRjBtH8S8eXCpUNkQ+543DUc7ys8y15VxmFU9HRqlo9BG3CcBUiwNtF8SNoi2xvGCVJq1vl2yYq+3oISBS0Zg==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [darwin] - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + "@next/swc-darwin-x64@15.5.12": + resolution: + { + integrity: sha512-nqa9/7iQlboF1EFtNhWxQA0rQstmYRSBGxSM6g3GxvxHxcoeqVXfGNr9stJOme674m2V7r4E3+jEhhGvSQhJRA==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [darwin] - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} + "@next/swc-linux-arm64-gnu@15.5.12": + resolution: + { + integrity: sha512-dCzAjqhDHwmoB2M4eYfVKqXs99QdQxNQVpftvP1eGVppamXh/OkDAwV737Zr0KPXEqRUMN4uCjh6mjO+XtF3Mw==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + "@next/swc-linux-arm64-musl@15.5.12": + resolution: + { + integrity: sha512-+fpGWvQiITgf7PUtbWY1H7qUSnBZsPPLyyq03QuAKpVoTy/QUx1JptEDTQMVvQhvizCEuNLEeghrQUyXQOekuw==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + "@next/swc-linux-x64-gnu@15.5.12": + resolution: + { + integrity: sha512-jSLvgdRRL/hrFAPqEjJf1fFguC719kmcptjNVDJl26BnJIpjL3KH5h6mzR4mAweociLQaqvt4UyzfbFjgAdDcw==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + "@next/swc-linux-x64-musl@15.5.12": + resolution: + { + integrity: sha512-/uaF0WfmYqQgLfPmN6BvULwxY0dufI2mlN2JbOKqqceZh1G4hjREyi7pg03zjfyS6eqNemHAZPSoP84x17vo6w==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + "@next/swc-win32-arm64-msvc@15.5.12": + resolution: + { + integrity: sha512-xhsL1OvQSfGmlL5RbOmU+FV120urrgFpYLq+6U8C6KIym32gZT6XF/SDE92jKzzlPWskkbjOKCpqk5m4i8PEfg==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [win32] - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + "@next/swc-win32-x64-msvc@15.5.12": + resolution: + { + integrity: sha512-Z1Dh6lhFkxvBDH1FoW6OU/L6prYwPSlwjLiZkExIAh8fbP6iI/M7iGTQAJPYJ9YFlWobCZ1PHbchFhFYb2ADkw==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [win32] - '@oxlint/darwin-arm64@1.30.0': - resolution: {integrity: sha512-vIiTk1FBObXHvaG3WK/SpwCZP06fuHhSrn8mK2hEs2uSFWG63WgvLAHSGhI4U1X29JGf36zhfUzuKirDIVdKBQ==} + "@nodelib/fs.scandir@2.1.5": + resolution: + { + integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, + } + engines: { node: ">= 8" } + + "@nodelib/fs.stat@2.0.5": + resolution: + { + integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, + } + engines: { node: ">= 8" } + + "@nodelib/fs.walk@1.2.8": + resolution: + { + integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, + } + engines: { node: ">= 8" } + + "@oxlint/darwin-arm64@1.30.0": + resolution: + { + integrity: sha512-vIiTk1FBObXHvaG3WK/SpwCZP06fuHhSrn8mK2hEs2uSFWG63WgvLAHSGhI4U1X29JGf36zhfUzuKirDIVdKBQ==, + } cpu: [arm64] os: [darwin] - '@oxlint/darwin-x64@1.30.0': - resolution: {integrity: sha512-DP4ueul8Vza52gJX1/+jyXQjUsgjmPe4Pq5uYOVa8k2V8cKRb2JzBls+DugbeP7yzKNTmlSp3J2mUnHQXuntLA==} + "@oxlint/darwin-x64@1.30.0": + resolution: + { + integrity: sha512-DP4ueul8Vza52gJX1/+jyXQjUsgjmPe4Pq5uYOVa8k2V8cKRb2JzBls+DugbeP7yzKNTmlSp3J2mUnHQXuntLA==, + } cpu: [x64] os: [darwin] - '@oxlint/linux-arm64-gnu@1.30.0': - resolution: {integrity: sha512-1e9NvTvjzG6t1tnUzNU9HZTVwNwhZw2BDQxwIsXV743g54BIkvyZNNXOEGic/Jw4IuIXHzpX3ztVWZaSzvDopg==} + "@oxlint/linux-arm64-gnu@1.30.0": + resolution: + { + integrity: sha512-1e9NvTvjzG6t1tnUzNU9HZTVwNwhZw2BDQxwIsXV743g54BIkvyZNNXOEGic/Jw4IuIXHzpX3ztVWZaSzvDopg==, + } cpu: [arm64] os: [linux] - '@oxlint/linux-arm64-musl@1.30.0': - resolution: {integrity: sha512-szb5RB8Tbk756/z/GAdmUn+H1E2815BbcM7s6JZYQgyCJxR0RCL1yFXgKyz3BjIDqzR98Tw8H3g4TeJbN2etAg==} + "@oxlint/linux-arm64-musl@1.30.0": + resolution: + { + integrity: sha512-szb5RB8Tbk756/z/GAdmUn+H1E2815BbcM7s6JZYQgyCJxR0RCL1yFXgKyz3BjIDqzR98Tw8H3g4TeJbN2etAg==, + } cpu: [arm64] os: [linux] - '@oxlint/linux-x64-gnu@1.30.0': - resolution: {integrity: sha512-yOWGu4a82yA8xLusaznW41IF5ZkvBNz/U++M2/tCYAQUoJKSfJuAS5AhApRMKZLKeX0Vmdagh0YwvC+e98QG0w==} + "@oxlint/linux-x64-gnu@1.30.0": + resolution: + { + integrity: sha512-yOWGu4a82yA8xLusaznW41IF5ZkvBNz/U++M2/tCYAQUoJKSfJuAS5AhApRMKZLKeX0Vmdagh0YwvC+e98QG0w==, + } cpu: [x64] os: [linux] - '@oxlint/linux-x64-musl@1.30.0': - resolution: {integrity: sha512-qL1902VF4EMTZTZdJEIzzUQ+UD0IbH+IW6dhYZXbP9nTXJnItW1fk4cyJq5zfUVu1IoVwKK2FP1jUMqEsBlWTw==} + "@oxlint/linux-x64-musl@1.30.0": + resolution: + { + integrity: sha512-qL1902VF4EMTZTZdJEIzzUQ+UD0IbH+IW6dhYZXbP9nTXJnItW1fk4cyJq5zfUVu1IoVwKK2FP1jUMqEsBlWTw==, + } cpu: [x64] os: [linux] - '@oxlint/win32-arm64@1.30.0': - resolution: {integrity: sha512-QK6C1djHKI7g1l5g6W9vkz9sd+sn1QJe6PbaV2sWFjVVoT0tO6LWygVWaci09ZHYVJ+lnCbbaFEgZ9jQhIs05A==} + "@oxlint/win32-arm64@1.30.0": + resolution: + { + integrity: sha512-QK6C1djHKI7g1l5g6W9vkz9sd+sn1QJe6PbaV2sWFjVVoT0tO6LWygVWaci09ZHYVJ+lnCbbaFEgZ9jQhIs05A==, + } cpu: [arm64] os: [win32] - '@oxlint/win32-x64@1.30.0': - resolution: {integrity: sha512-tbPnJIBUKke9KpceV+DpGyfN3LdhGaEPJHSuD4/mUEwP9Kk6IKSoDNih681RVGhgvaEZg3uHmQr6n9Uh0P3Yrg==} + "@oxlint/win32-x64@1.30.0": + resolution: + { + integrity: sha512-tbPnJIBUKke9KpceV+DpGyfN3LdhGaEPJHSuD4/mUEwP9Kk6IKSoDNih681RVGhgvaEZg3uHmQr6n9Uh0P3Yrg==, + } cpu: [x64] os: [win32] - '@polka/url@1.0.0-next.29': - resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} - - '@repeaterjs/repeater@3.0.6': - resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} - - '@rollup/rollup-android-arm-eabi@4.53.3': - resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} + "@polka/url@1.0.0-next.29": + resolution: + { + integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==, + } + + "@repeaterjs/repeater@3.0.6": + resolution: + { + integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==, + } + + "@rollup/rollup-android-arm-eabi@4.53.3": + resolution: + { + integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==, + } cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.53.3': - resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} + "@rollup/rollup-android-arm64@4.53.3": + resolution: + { + integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==, + } cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.53.3': - resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} + "@rollup/rollup-darwin-arm64@4.53.3": + resolution: + { + integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==, + } cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.53.3': - resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} + "@rollup/rollup-darwin-x64@4.53.3": + resolution: + { + integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==, + } cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.53.3': - resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} + "@rollup/rollup-freebsd-arm64@4.53.3": + resolution: + { + integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==, + } cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.53.3': - resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} + "@rollup/rollup-freebsd-x64@4.53.3": + resolution: + { + integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==, + } cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.53.3': - resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} + "@rollup/rollup-linux-arm-gnueabihf@4.53.3": + resolution: + { + integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==, + } cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.53.3': - resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} + "@rollup/rollup-linux-arm-musleabihf@4.53.3": + resolution: + { + integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==, + } cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.53.3': - resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} + "@rollup/rollup-linux-arm64-gnu@4.53.3": + resolution: + { + integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==, + } cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.53.3': - resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} + "@rollup/rollup-linux-arm64-musl@4.53.3": + resolution: + { + integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==, + } cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.53.3': - resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} + "@rollup/rollup-linux-loong64-gnu@4.53.3": + resolution: + { + integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==, + } cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.53.3': - resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} + "@rollup/rollup-linux-ppc64-gnu@4.53.3": + resolution: + { + integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==, + } cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.53.3': - resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} + "@rollup/rollup-linux-riscv64-gnu@4.53.3": + resolution: + { + integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==, + } cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.53.3': - resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} + "@rollup/rollup-linux-riscv64-musl@4.53.3": + resolution: + { + integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==, + } cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.53.3': - resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} + "@rollup/rollup-linux-s390x-gnu@4.53.3": + resolution: + { + integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==, + } cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.53.3': - resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} + "@rollup/rollup-linux-x64-gnu@4.53.3": + resolution: + { + integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==, + } cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.53.3': - resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} + "@rollup/rollup-linux-x64-musl@4.53.3": + resolution: + { + integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==, + } cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.53.3': - resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} + "@rollup/rollup-openharmony-arm64@4.53.3": + resolution: + { + integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==, + } cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.53.3': - resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} + "@rollup/rollup-win32-arm64-msvc@4.53.3": + resolution: + { + integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==, + } cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.53.3': - resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} + "@rollup/rollup-win32-ia32-msvc@4.53.3": + resolution: + { + integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==, + } cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.53.3': - resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} + "@rollup/rollup-win32-x64-gnu@4.53.3": + resolution: + { + integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==, + } cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.53.3': - resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} + "@rollup/rollup-win32-x64-msvc@4.53.3": + resolution: + { + integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==, + } cpu: [x64] os: [win32] - '@standard-schema/spec@1.0.0': - resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + "@standard-schema/spec@1.0.0": + resolution: + { + integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==, + } + + "@swc/helpers@0.5.15": + resolution: + { + integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==, + } + + "@tailwindcss/node@4.1.18": + resolution: + { + integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==, + } + + "@tailwindcss/oxide-android-arm64@4.1.18": + resolution: + { + integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [android] + + "@tailwindcss/oxide-darwin-arm64@4.1.18": + resolution: + { + integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [darwin] - '@theguild/federation-composition@0.20.2': - resolution: {integrity: sha512-QI4iSdrc4JvCWnMb1QbiHnEpdD33KGdiU66qfWOcM8ENebRGHkGjXDnUrVJ8F9g1dmCRMTNfn2NFGqTcDpeYXw==} - engines: {node: '>=18'} - peerDependencies: - graphql: ^16.0.0 + "@tailwindcss/oxide-darwin-x64@4.1.18": + resolution: + { + integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [darwin] + + "@tailwindcss/oxide-freebsd-x64@4.1.18": + resolution: + { + integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [freebsd] + + "@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18": + resolution: + { + integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==, + } + engines: { node: ">= 10" } + cpu: [arm] + os: [linux] + + "@tailwindcss/oxide-linux-arm64-gnu@4.1.18": + resolution: + { + integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] + + "@tailwindcss/oxide-linux-arm64-musl@4.1.18": + resolution: + { + integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] - '@types/chai@5.2.3': - resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + "@tailwindcss/oxide-linux-x64-gnu@4.1.18": + resolution: + { + integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] - '@types/deep-eql@4.0.2': - resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + "@tailwindcss/oxide-linux-x64-musl@4.1.18": + resolution: + { + integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + "@tailwindcss/oxide-wasm32-wasi@4.1.18": + resolution: + { + integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==, + } + engines: { node: ">=14.0.0" } + cpu: [wasm32] + bundledDependencies: + - "@napi-rs/wasm-runtime" + - "@emnapi/core" + - "@emnapi/runtime" + - "@tybys/wasm-util" + - "@emnapi/wasi-threads" + - tslib + + "@tailwindcss/oxide-win32-arm64-msvc@4.1.18": + resolution: + { + integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [win32] - '@types/node@24.10.1': - resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + "@tailwindcss/oxide-win32-x64-msvc@4.1.18": + resolution: + { + integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [win32] - '@types/ws@8.18.1': - resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + "@tailwindcss/oxide@4.1.18": + resolution: + { + integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==, + } + engines: { node: ">= 10" } + + "@tailwindcss/postcss@4.1.18": + resolution: + { + integrity: sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==, + } + + "@theguild/federation-composition@0.20.2": + resolution: + { + integrity: sha512-QI4iSdrc4JvCWnMb1QbiHnEpdD33KGdiU66qfWOcM8ENebRGHkGjXDnUrVJ8F9g1dmCRMTNfn2NFGqTcDpeYXw==, + } + engines: { node: ">=18" } + peerDependencies: + graphql: ^16.0.0 - '@vitest/coverage-v8@4.0.14': - resolution: {integrity: sha512-EYHLqN/BY6b47qHH7gtMxAg++saoGmsjWmAq9MlXxAz4M0NcHh9iOyKhBZyU4yxZqOd8Xnqp80/5saeitz4Cng==} + "@types/chai@5.2.3": + resolution: + { + integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==, + } + + "@types/deep-eql@4.0.2": + resolution: + { + integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==, + } + + "@types/estree@1.0.8": + resolution: + { + integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==, + } + + "@types/node@24.10.1": + resolution: + { + integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==, + } + + "@types/react-dom@19.2.3": + resolution: + { + integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==, + } peerDependencies: - '@vitest/browser': 4.0.14 + "@types/react": ^19.2.0 + + "@types/react@19.2.14": + resolution: + { + integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==, + } + + "@types/ws@8.18.1": + resolution: + { + integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==, + } + + "@urql/core@6.0.1": + resolution: + { + integrity: sha512-FZDiQk6jxbj5hixf2rEPv0jI+IZz0EqqGW8mJBEug68/zHTtT+f34guZDmyjJZyiWbj0vL165LoMr/TkeDHaug==, + } + + "@vitest/coverage-v8@4.0.14": + resolution: + { + integrity: sha512-EYHLqN/BY6b47qHH7gtMxAg++saoGmsjWmAq9MlXxAz4M0NcHh9iOyKhBZyU4yxZqOd8Xnqp80/5saeitz4Cng==, + } + peerDependencies: + "@vitest/browser": 4.0.14 vitest: 4.0.14 peerDependenciesMeta: - '@vitest/browser': + "@vitest/browser": optional: true - '@vitest/expect@4.0.14': - resolution: {integrity: sha512-RHk63V3zvRiYOWAV0rGEBRO820ce17hz7cI2kDmEdfQsBjT2luEKB5tCOc91u1oSQoUOZkSv3ZyzkdkSLD7lKw==} - - '@vitest/mocker@4.0.14': - resolution: {integrity: sha512-RzS5NujlCzeRPF1MK7MXLiEFpkIXeMdQ+rN3Kk3tDI9j0mtbr7Nmuq67tpkOJQpgyClbOltCXMjLZicJHsH5Cg==} + "@vitest/expect@4.0.14": + resolution: + { + integrity: sha512-RHk63V3zvRiYOWAV0rGEBRO820ce17hz7cI2kDmEdfQsBjT2luEKB5tCOc91u1oSQoUOZkSv3ZyzkdkSLD7lKw==, + } + + "@vitest/mocker@4.0.14": + resolution: + { + integrity: sha512-RzS5NujlCzeRPF1MK7MXLiEFpkIXeMdQ+rN3Kk3tDI9j0mtbr7Nmuq67tpkOJQpgyClbOltCXMjLZicJHsH5Cg==, + } peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0-0 @@ -1128,329 +2311,639 @@ packages: vite: optional: true - '@vitest/pretty-format@4.0.14': - resolution: {integrity: sha512-SOYPgujB6TITcJxgd3wmsLl+wZv+fy3av2PpiPpsWPZ6J1ySUYfScfpIt2Yv56ShJXR2MOA6q2KjKHN4EpdyRQ==} - - '@vitest/runner@4.0.14': - resolution: {integrity: sha512-BsAIk3FAqxICqREbX8SetIteT8PiaUL/tgJjmhxJhCsigmzzH8xeadtp7LRnTpCVzvf0ib9BgAfKJHuhNllKLw==} - - '@vitest/snapshot@4.0.14': - resolution: {integrity: sha512-aQVBfT1PMzDSA16Y3Fp45a0q8nKexx6N5Amw3MX55BeTeZpoC08fGqEZqVmPcqN0ueZsuUQ9rriPMhZ3Mu19Ag==} - - '@vitest/spy@4.0.14': - resolution: {integrity: sha512-JmAZT1UtZooO0tpY3GRyiC/8W7dCs05UOq9rfsUUgEZEdq+DuHLmWhPsrTt0TiW7WYeL/hXpaE07AZ2RCk44hg==} - - '@vitest/ui@4.0.14': - resolution: {integrity: sha512-fvDz8o7SQpFLoSBo6Cudv+fE85/fPCkwTnLAN85M+Jv7k59w2mSIjT9Q5px7XwGrmYqqKBEYxh/09IBGd1E7AQ==} + "@vitest/pretty-format@4.0.14": + resolution: + { + integrity: sha512-SOYPgujB6TITcJxgd3wmsLl+wZv+fy3av2PpiPpsWPZ6J1ySUYfScfpIt2Yv56ShJXR2MOA6q2KjKHN4EpdyRQ==, + } + + "@vitest/runner@4.0.14": + resolution: + { + integrity: sha512-BsAIk3FAqxICqREbX8SetIteT8PiaUL/tgJjmhxJhCsigmzzH8xeadtp7LRnTpCVzvf0ib9BgAfKJHuhNllKLw==, + } + + "@vitest/snapshot@4.0.14": + resolution: + { + integrity: sha512-aQVBfT1PMzDSA16Y3Fp45a0q8nKexx6N5Amw3MX55BeTeZpoC08fGqEZqVmPcqN0ueZsuUQ9rriPMhZ3Mu19Ag==, + } + + "@vitest/spy@4.0.14": + resolution: + { + integrity: sha512-JmAZT1UtZooO0tpY3GRyiC/8W7dCs05UOq9rfsUUgEZEdq+DuHLmWhPsrTt0TiW7WYeL/hXpaE07AZ2RCk44hg==, + } + + "@vitest/ui@4.0.14": + resolution: + { + integrity: sha512-fvDz8o7SQpFLoSBo6Cudv+fE85/fPCkwTnLAN85M+Jv7k59w2mSIjT9Q5px7XwGrmYqqKBEYxh/09IBGd1E7AQ==, + } peerDependencies: vitest: 4.0.14 - '@vitest/utils@4.0.14': - resolution: {integrity: sha512-hLqXZKAWNg8pI+SQXyXxWCTOpA3MvsqcbVeNgSi8x/CSN2wi26dSzn1wrOhmCmFjEvN9p8/kLFRHa6PI8jHazw==} - - '@whatwg-node/disposablestack@0.0.6': - resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==} - engines: {node: '>=18.0.0'} - - '@whatwg-node/events@0.1.2': - resolution: {integrity: sha512-ApcWxkrs1WmEMS2CaLLFUEem/49erT3sxIVjpzU5f6zmVcnijtDSrhoK2zVobOIikZJdH63jdAXOrvjf6eOUNQ==} - engines: {node: '>=18.0.0'} - - '@whatwg-node/fetch@0.10.11': - resolution: {integrity: sha512-eR8SYtf9Nem1Tnl0IWrY33qJ5wCtIWlt3Fs3c6V4aAaTFLtkEQErXu3SSZg/XCHrj9hXSJ8/8t+CdMk5Qec/ZA==} - engines: {node: '>=18.0.0'} - - '@whatwg-node/node-fetch@0.8.1': - resolution: {integrity: sha512-cQmQEo7IsI0EPX9VrwygXVzrVlX43Jb7/DBZSmpnC7xH4xkyOnn/HykHpTaQk7TUs7zh59A5uTGqx3p2Ouzffw==} - engines: {node: '>=18.0.0'} - - '@whatwg-node/promise-helpers@1.3.2': - resolution: {integrity: sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==} - engines: {node: '>=16.0.0'} - - '@whatwg-node/server@0.10.13': - resolution: {integrity: sha512-Otmxo+0mp8az3B48pLI1I4msNOXPIoP7TLm6h5wOEQmynqHt8oP9nR6NJUeJk6iI5OtFpQtkbJFwfGkmplvc3Q==} - engines: {node: '>=18.0.0'} + "@vitest/utils@4.0.14": + resolution: + { + integrity: sha512-hLqXZKAWNg8pI+SQXyXxWCTOpA3MvsqcbVeNgSi8x/CSN2wi26dSzn1wrOhmCmFjEvN9p8/kLFRHa6PI8jHazw==, + } + + "@whatwg-node/disposablestack@0.0.6": + resolution: + { + integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==, + } + engines: { node: ">=18.0.0" } + + "@whatwg-node/events@0.1.2": + resolution: + { + integrity: sha512-ApcWxkrs1WmEMS2CaLLFUEem/49erT3sxIVjpzU5f6zmVcnijtDSrhoK2zVobOIikZJdH63jdAXOrvjf6eOUNQ==, + } + engines: { node: ">=18.0.0" } + + "@whatwg-node/fetch@0.10.11": + resolution: + { + integrity: sha512-eR8SYtf9Nem1Tnl0IWrY33qJ5wCtIWlt3Fs3c6V4aAaTFLtkEQErXu3SSZg/XCHrj9hXSJ8/8t+CdMk5Qec/ZA==, + } + engines: { node: ">=18.0.0" } + + "@whatwg-node/node-fetch@0.8.1": + resolution: + { + integrity: sha512-cQmQEo7IsI0EPX9VrwygXVzrVlX43Jb7/DBZSmpnC7xH4xkyOnn/HykHpTaQk7TUs7zh59A5uTGqx3p2Ouzffw==, + } + engines: { node: ">=18.0.0" } + + "@whatwg-node/promise-helpers@1.3.2": + resolution: + { + integrity: sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==, + } + engines: { node: ">=16.0.0" } + + "@whatwg-node/server@0.10.13": + resolution: + { + integrity: sha512-Otmxo+0mp8az3B48pLI1I4msNOXPIoP7TLm6h5wOEQmynqHt8oP9nR6NJUeJk6iI5OtFpQtkbJFwfGkmplvc3Q==, + } + engines: { node: ">=18.0.0" } ansi-escapes@7.1.1: - resolution: {integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==, + } + engines: { node: ">=18" } ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, + } + engines: { node: ">=8" } ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==, + } + engines: { node: ">=12" } ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, + } + engines: { node: ">=8" } ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==, + } + engines: { node: ">=12" } argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + resolution: + { + integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, + } array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, + } + engines: { node: ">=8" } asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + resolution: + { + integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==, + } assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==, + } + engines: { node: ">=12" } ast-v8-to-istanbul@0.3.8: - resolution: {integrity: sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==} + resolution: + { + integrity: sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==, + } auto-bind@4.0.0: - resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==, + } + engines: { node: ">=8" } balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + resolution: + { + integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, + } baseline-browser-mapping@2.8.20: - resolution: {integrity: sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==} + resolution: + { + integrity: sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==, + } hasBin: true brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + resolution: + { + integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==, + } braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, + } + engines: { node: ">=8" } browserslist@4.27.0: - resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + resolution: + { + integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==, + } + engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } hasBin: true bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + resolution: + { + integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==, + } callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, + } + engines: { node: ">=6" } camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + resolution: + { + integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==, + } caniuse-lite@1.0.30001751: - resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==} + resolution: + { + integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==, + } capital-case@1.0.4: - resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + resolution: + { + integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==, + } chai@6.2.1: - resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==, + } + engines: { node: ">=18" } chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, + } + engines: { node: ">=10" } change-case-all@1.0.15: - resolution: {integrity: sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==} + resolution: + { + integrity: sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==, + } change-case@4.1.2: - resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + resolution: + { + integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==, + } chardet@2.1.0: - resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} + resolution: + { + integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==, + } citty@0.1.6: - resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + resolution: + { + integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==, + } + + class-variance-authority@0.7.1: + resolution: + { + integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==, + } cli-cursor@5.0.0: - resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==, + } + engines: { node: ">=18" } cli-truncate@5.1.1: - resolution: {integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==} - engines: {node: '>=20'} + resolution: + { + integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==, + } + engines: { node: ">=20" } cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} + resolution: + { + integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==, + } + engines: { node: ">= 12" } + + client-only@0.0.1: + resolution: + { + integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==, + } cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, + } + engines: { node: ">=12" } + + clsx@2.1.1: + resolution: + { + integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==, + } + engines: { node: ">=6" } color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + resolution: + { + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, + } + engines: { node: ">=7.0.0" } color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + resolution: + { + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, + } colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + resolution: + { + integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==, + } commander@14.0.2: - resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} - engines: {node: '>=20'} + resolution: + { + integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==, + } + engines: { node: ">=20" } common-tags@1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} - engines: {node: '>=4.0.0'} + resolution: + { + integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==, + } + engines: { node: ">=4.0.0" } confbox@0.2.2: - resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + resolution: + { + integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==, + } consola@3.4.2: - resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} - engines: {node: ^14.18.0 || >=16.10.0} + resolution: + { + integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==, + } + engines: { node: ^14.18.0 || >=16.10.0 } constant-case@3.0.4: - resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + resolution: + { + integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==, + } convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + resolution: + { + integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, + } cosmiconfig@8.3.6: - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==, + } + engines: { node: ">=14" } peerDependencies: - typescript: '>=4.9.5' + typescript: ">=4.9.5" peerDependenciesMeta: typescript: optional: true cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==, + } + engines: { node: ">=14" } peerDependencies: - typescript: '>=4.9.5' + typescript: ">=4.9.5" peerDependenciesMeta: typescript: optional: true cross-fetch@3.2.0: - resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} + resolution: + { + integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==, + } cross-inspect@1.0.1: - resolution: {integrity: sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A==, + } + engines: { node: ">=16.0.0" } + + csstype@3.2.3: + resolution: + { + integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==, + } data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} + resolution: + { + integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==, + } + engines: { node: ">= 12" } dataloader@2.2.3: - resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==} + resolution: + { + integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==, + } debounce@2.2.0: - resolution: {integrity: sha512-Xks6RUDLZFdz8LIdR6q0MTH44k7FikOmnh5xkSjMig6ch45afc8sjTjRQf3P6ax8dMgcQrYO/AR2RGWURrruqw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-Xks6RUDLZFdz8LIdR6q0MTH44k7FikOmnh5xkSjMig6ch45afc8sjTjRQf3P6ax8dMgcQrYO/AR2RGWURrruqw==, + } + engines: { node: ">=18" } debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} + resolution: + { + integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==, + } + engines: { node: ">=6.0" } peerDependencies: - supports-color: '*' + supports-color: "*" peerDependenciesMeta: supports-color: optional: true defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + resolution: + { + integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==, + } + + dependency-graph@0.11.0: + resolution: + { + integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==, + } + engines: { node: ">= 0.6.0" } dependency-graph@1.0.0: - resolution: {integrity: sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==, + } + engines: { node: ">=4" } detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==, + } + engines: { node: ">=8" } + + detect-libc@2.1.2: + resolution: + { + integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==, + } + engines: { node: ">=8" } dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, + } + engines: { node: ">=8" } dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + resolution: + { + integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==, + } dset@3.1.4: - resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==, + } + engines: { node: ">=4" } electron-to-chromium@1.5.241: - resolution: {integrity: sha512-ILMvKX/ZV5WIJzzdtuHg8xquk2y0BOGlFOxBVwTpbiXqWIH0hamG45ddU4R3PQ0gYu+xgo0vdHXHli9sHIGb4w==} + resolution: + { + integrity: sha512-ILMvKX/ZV5WIJzzdtuHg8xquk2y0BOGlFOxBVwTpbiXqWIH0hamG45ddU4R3PQ0gYu+xgo0vdHXHli9sHIGb4w==, + } emoji-regex@10.6.0: - resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + resolution: + { + integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==, + } emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + resolution: + { + integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, + } + + enhanced-resolve@5.19.0: + resolution: + { + integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==, + } + engines: { node: ">=10.13.0" } env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==, + } + engines: { node: ">=6" } environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==, + } + engines: { node: ">=18" } error-ex@1.3.4: - resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + resolution: + { + integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==, + } es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + resolution: + { + integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==, + } esbuild@0.25.11: - resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==, + } + engines: { node: ">=18" } hasBin: true esbuild@0.25.12: - resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==, + } + engines: { node: ">=18" } hasBin: true escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, + } + engines: { node: ">=6" } estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + resolution: + { + integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, + } eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + resolution: + { + integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==, + } expect-type@1.2.2: - resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} - engines: {node: '>=12.0.0'} + resolution: + { + integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==, + } + engines: { node: ">=12.0.0" } exsolve@1.0.7: - resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} + resolution: + { + integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==, + } fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} + resolution: + { + integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==, + } + engines: { node: ">=8.6.0" } + + fast-json-patch@3.1.1: + resolution: + { + integrity: sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==, + } fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + resolution: + { + integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==, + } fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + resolution: + { + integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==, + } fbjs-css-vars@1.0.2: - resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} + resolution: + { + integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==, + } fbjs@3.0.5: - resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} + resolution: + { + integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==, + } fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} + resolution: + { + integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==, + } + engines: { node: ">=12.0.0" } peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -1458,58 +2951,106 @@ packages: optional: true fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} + resolution: + { + integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==, + } + engines: { node: ^12.20 || >= 14.13 } fflate@0.8.2: - resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + resolution: + { + integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==, + } fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, + } + engines: { node: ">=8" } flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + resolution: + { + integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==, + } formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} + resolution: + { + integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==, + } + engines: { node: ">=12.20.0" } fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + resolution: + { + integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, + } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } os: [darwin] gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, + } + engines: { node: ">=6.9.0" } get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} + resolution: + { + integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, + } + engines: { node: 6.* || 8.* || >= 10.* } get-east-asian-width@1.4.0: - resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==, + } + engines: { node: ">=18" } get-tsconfig@4.13.0: - resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} + resolution: + { + integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==, + } giget@2.0.0: - resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} + resolution: + { + integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==, + } hasBin: true glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, + } + engines: { node: ">= 6" } globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==, + } + engines: { node: ">=10" } + + graceful-fs@4.2.11: + resolution: + { + integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, + } graphql-config@5.1.5: - resolution: {integrity: sha512-mG2LL1HccpU8qg5ajLROgdsBzx/o2M6kgI3uAmoaXiSH9PCUbtIyLomLqUtCFaAeG2YCFsl0M5cfQ9rKmDoMVA==} - engines: {node: '>= 16.0.0'} + resolution: + { + integrity: sha512-mG2LL1HccpU8qg5ajLROgdsBzx/o2M6kgI3uAmoaXiSH9PCUbtIyLomLqUtCFaAeG2YCFsl0M5cfQ9rKmDoMVA==, + } + engines: { node: ">= 16.0.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 @@ -1518,22 +3059,28 @@ packages: optional: true graphql-tag@2.12.6: - resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==, + } + engines: { node: ">=10" } 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 graphql-ws@6.0.6: - resolution: {integrity: sha512-zgfER9s+ftkGKUZgc0xbx8T7/HMO4AV5/YuYiFc+AtgcO5T0v8AxYYNQ+ltzuzDZgNkYJaFspm5MMYLjQzrkmw==} - engines: {node: '>=20'} + resolution: + { + integrity: sha512-zgfER9s+ftkGKUZgc0xbx8T7/HMO4AV5/YuYiFc+AtgcO5T0v8AxYYNQ+ltzuzDZgNkYJaFspm5MMYLjQzrkmw==, + } + engines: { node: ">=20" } peerDependencies: - '@fastify/websocket': ^10 || ^11 + "@fastify/websocket": ^10 || ^11 crossws: ~0.3 graphql: ^15.10.1 || ^16 uWebSockets.js: ^20 ws: ^8 peerDependenciesMeta: - '@fastify/websocket': + "@fastify/websocket": optional: true crossws: optional: true @@ -1543,269 +3090,611 @@ packages: optional: true graphql-yoga@5.16.0: - resolution: {integrity: sha512-/R2dJea7WgvNlXRU4F8iFwWd95Qn1mN+R+yC8XBs1wKjUzr0Pvv8cGYtt6UUcVHw5CiDEtu7iQY5oOe3sDAWCQ==} - engines: {node: '>=18.0.0'} + resolution: + { + integrity: sha512-/R2dJea7WgvNlXRU4F8iFwWd95Qn1mN+R+yC8XBs1wKjUzr0Pvv8cGYtt6UUcVHw5CiDEtu7iQY5oOe3sDAWCQ==, + } + engines: { node: ">=18.0.0" } peerDependencies: graphql: ^15.2.0 || ^16.0.0 graphql@16.11.0: - resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} - engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + resolution: + { + integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==, + } + engines: { node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0 } has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, + } + engines: { node: ">=8" } header-case@2.0.4: - resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + resolution: + { + integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==, + } html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + resolution: + { + integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==, + } husky@9.1.7: - resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==, + } + engines: { node: ">=18" } hasBin: true iconv-lite@0.7.0: - resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==, + } + engines: { node: ">=0.10.0" } ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} + resolution: + { + integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, + } + engines: { node: ">= 4" } immutable@3.7.6: - resolution: {integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==} - engines: {node: '>=0.8.0'} + resolution: + { + integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==, + } + engines: { node: ">=0.8.0" } import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==, + } + engines: { node: ">=6" } import-from@4.0.0: - resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} - engines: {node: '>=12.2'} + resolution: + { + integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==, + } + engines: { node: ">=12.2" } invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + resolution: + { + integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==, + } is-absolute@1.0.0: - resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==, + } + engines: { node: ">=0.10.0" } is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + resolution: + { + integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, + } is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, + } + engines: { node: ">=0.10.0" } is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, + } + engines: { node: ">=8" } is-fullwidth-code-point@5.1.0: - resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==, + } + engines: { node: ">=18" } is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, + } + engines: { node: ">=0.10.0" } is-lower-case@2.0.2: - resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==} + resolution: + { + integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==, + } is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + resolution: + { + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, + } + engines: { node: ">=0.12.0" } is-relative@1.0.0: - resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==, + } + engines: { node: ">=0.10.0" } is-unc-path@1.0.0: - resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==, + } + engines: { node: ">=0.10.0" } is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==, + } + engines: { node: ">=10" } is-upper-case@2.0.2: - resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==} + resolution: + { + integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==, + } is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, + } + engines: { node: ">=0.10.0" } isomorphic-ws@5.0.0: - resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + resolution: + { + integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==, + } peerDependencies: - ws: '*' + ws: "*" istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==, + } + engines: { node: ">=8" } istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==, + } + engines: { node: ">=10" } istanbul-lib-source-maps@5.0.6: - resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==, + } + engines: { node: ">=10" } istanbul-reports@3.2.0: - resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==, + } + engines: { node: ">=8" } jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + resolution: + { + integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==, + } hasBin: true js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + resolution: + { + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, + } js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + resolution: + { + integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==, + } js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + resolution: + { + integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, + } hasBin: true jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==, + } + engines: { node: ">=6" } hasBin: true json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + resolution: + { + integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, + } json-to-pretty-yaml@1.2.2: - resolution: {integrity: sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==} - engines: {node: '>= 0.2.0'} + resolution: + { + integrity: sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==, + } + engines: { node: ">= 0.2.0" } json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, + } + engines: { node: ">=6" } hasBin: true + lightningcss-android-arm64@1.30.2: + resolution: + { + integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.30.2: + resolution: + { + integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.30.2: + resolution: + { + integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.30.2: + resolution: + { + integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.30.2: + resolution: + { + integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.30.2: + resolution: + { + integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.30.2: + resolution: + { + integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.30.2: + resolution: + { + integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.30.2: + resolution: + { + integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.30.2: + resolution: + { + integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.30.2: + resolution: + { + integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [win32] + + lightningcss@1.30.2: + resolution: + { + integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==, + } + engines: { node: ">= 12.0.0" } + lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + resolution: + { + integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, + } lint-staged@16.2.7: - resolution: {integrity: sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==} - engines: {node: '>=20.17'} + resolution: + { + integrity: sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==, + } + engines: { node: ">=20.17" } hasBin: true listr2@9.0.5: - resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} - engines: {node: '>=20.0.0'} + resolution: + { + integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==, + } + engines: { node: ">=20.0.0" } lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + resolution: + { + integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==, + } lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + resolution: + { + integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, + } log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==, + } + engines: { node: ">=10" } log-update@6.1.0: - resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==, + } + engines: { node: ">=18" } loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + resolution: + { + integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, + } hasBin: true lower-case-first@2.0.2: - resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} + resolution: + { + integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==, + } lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + resolution: + { + integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==, + } lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + resolution: + { + integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==, + } lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + resolution: + { + integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, + } + + lucide-react@0.474.0: + resolution: + { + integrity: sha512-CmghgHkh0OJNmxGKWc0qfPJCYHASPMVSyGY8fj3xgk4v84ItqDg64JNKFZn5hC6E0vHi6gxnbCgwhyVB09wQtA==, + } + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + resolution: + { + integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==, + } magicast@0.5.1: - resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==} + resolution: + { + integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==, + } make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==, + } + engines: { node: ">=10" } map-cache@0.2.2: - resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==, + } + engines: { node: ">=0.10.0" } merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, + } + engines: { node: ">= 8" } meros@1.3.2: - resolution: {integrity: sha512-Q3mobPbvEx7XbwhnC1J1r60+5H6EZyNccdzSz0eGexJRwouUtTZxPVRGdqKtxlpD84ScK4+tIGldkqDtCKdI0A==} - engines: {node: '>=13'} + resolution: + { + integrity: sha512-Q3mobPbvEx7XbwhnC1J1r60+5H6EZyNccdzSz0eGexJRwouUtTZxPVRGdqKtxlpD84ScK4+tIGldkqDtCKdI0A==, + } + engines: { node: ">=13" } peerDependencies: - '@types/node': '>=13' + "@types/node": ">=13" peerDependenciesMeta: - '@types/node': + "@types/node": optional: true micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + resolution: + { + integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==, + } + engines: { node: ">=8.6" } mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==, + } + engines: { node: ">=18" } minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} + resolution: + { + integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==, + } + engines: { node: ">=16 || 14 >=14.17" } mrmime@2.0.1: - resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==, + } + engines: { node: ">=10" } ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + resolution: + { + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, + } mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} + resolution: + { + integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==, + } + engines: { node: ^18.17.0 || >=20.5.0 } nano-spawn@2.0.0: - resolution: {integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==} - engines: {node: '>=20.17'} + resolution: + { + integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==, + } + engines: { node: ">=20.17" } nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + resolution: + { + integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==, + } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } hasBin: true + next@15.5.12: + resolution: + { + integrity: sha512-Fi/wQ4Etlrn60rz78bebG1i1SR20QxvV8tVp6iJspjLUSHcZoeUXCt+vmWoEcza85ElZzExK/jJ/F6SvtGktjA==, + } + engines: { node: ^18.18.0 || ^19.8.0 || >= 20.0.0 } + hasBin: true + peerDependencies: + "@opentelemetry/api": ^1.1.0 + "@playwright/test": ^1.51.1 + babel-plugin-react-compiler: "*" + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + "@opentelemetry/api": + optional: true + "@playwright/test": + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + resolution: + { + integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==, + } node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} + resolution: + { + integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==, + } + engines: { node: ">=10.5.0" } deprecated: Use your platform's native DOMException instead node-fetch-native@1.6.7: - resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + resolution: + { + integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==, + } node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} + resolution: + { + integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==, + } + engines: { node: 4.x || >=6.0.0 } peerDependencies: encoding: ^0.1.0 peerDependenciesMeta: @@ -1813,402 +3702,784 @@ packages: optional: true node-fetch@3.3.2: - resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + resolution: + { + integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==, + } node-releases@2.0.26: - resolution: {integrity: sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==} + resolution: + { + integrity: sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==, + } normalize-path@2.1.1: - resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==, + } + engines: { node: ">=0.10.0" } nullthrows@1.1.1: - resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + resolution: + { + integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==, + } nypm@0.6.2: - resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==} - engines: {node: ^14.16.0 || >=16.10.0} + resolution: + { + integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==, + } + engines: { node: ^14.16.0 || >=16.10.0 } hasBin: true object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, + } + engines: { node: ">=0.10.0" } obug@2.1.1: - resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + resolution: + { + integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==, + } onetime@7.0.0: - resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==, + } + engines: { node: ">=18" } oxlint@1.30.0: - resolution: {integrity: sha512-6Mcpj7Gn26QNRUpue9kRZKQg623mH10kLPl597sNCOfXeUZHTglrc2O54eskHMRA+tR7c0u73nW4GPwSFePLkA==} - engines: {node: ^20.19.0 || >=22.12.0} + resolution: + { + integrity: sha512-6Mcpj7Gn26QNRUpue9kRZKQg623mH10kLPl597sNCOfXeUZHTglrc2O54eskHMRA+tR7c0u73nW4GPwSFePLkA==, + } + engines: { node: ^20.19.0 || >=22.12.0 } hasBin: true peerDependencies: - oxlint-tsgolint: '>=0.8.1' + oxlint-tsgolint: ">=0.8.1" peerDependenciesMeta: oxlint-tsgolint: optional: true p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, + } + engines: { node: ">=10" } param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + resolution: + { + integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==, + } parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, + } + engines: { node: ">=6" } parse-filepath@1.0.2: - resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} - engines: {node: '>=0.8'} + resolution: + { + integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==, + } + engines: { node: ">=0.8" } parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, + } + engines: { node: ">=8" } pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + resolution: + { + integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==, + } path-case@3.0.4: - resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + resolution: + { + integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==, + } path-root-regex@0.1.2: - resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==, + } + engines: { node: ">=0.10.0" } path-root@0.1.1: - resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==, + } + engines: { node: ">=0.10.0" } path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, + } + engines: { node: ">=8" } pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + resolution: + { + integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==, + } picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + resolution: + { + integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, + } picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + resolution: + { + integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, + } + engines: { node: ">=8.6" } picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==, + } + engines: { node: ">=12" } pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} + resolution: + { + integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==, + } + engines: { node: ">=0.10" } hasBin: true pkg-types@2.3.0: - resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + resolution: + { + integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==, + } + + postcss@8.4.31: + resolution: + { + integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==, + } + engines: { node: ^10 || ^12 || >=14 } postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} - engines: {node: ^10 || ^12 || >=14} + resolution: + { + integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==, + } + engines: { node: ^10 || ^12 || >=14 } prettier@3.7.1: - resolution: {integrity: sha512-RWKXE4qB3u5Z6yz7omJkjWwmTfLdcbv44jUVHC5NpfXwFGzvpQM798FGv/6WNK879tc+Cn0AAyherCl1KjbyZQ==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-RWKXE4qB3u5Z6yz7omJkjWwmTfLdcbv44jUVHC5NpfXwFGzvpQM798FGv/6WNK879tc+Cn0AAyherCl1KjbyZQ==, + } + engines: { node: ">=14" } hasBin: true promise@7.3.1: - resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + resolution: + { + integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==, + } queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + resolution: + { + integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, + } + + react-dom@19.2.4: + resolution: + { + integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==, + } + peerDependencies: + react: ^19.2.4 + + react@19.2.4: + resolution: + { + integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==, + } + engines: { node: ">=0.10.0" } relay-runtime@12.0.0: - resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} + resolution: + { + integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==, + } remedial@1.0.8: - resolution: {integrity: sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==} + resolution: + { + integrity: sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==, + } remove-trailing-separator@1.1.0: - resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + resolution: + { + integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==, + } remove-trailing-spaces@1.0.9: - resolution: {integrity: sha512-xzG7w5IRijvIkHIjDk65URsJJ7k4J95wmcArY5PRcmjldIOl7oTvG8+X2Ag690R7SfwiOcHrWZKVc1Pp5WIOzA==} + resolution: + { + integrity: sha512-xzG7w5IRijvIkHIjDk65URsJJ7k4J95wmcArY5PRcmjldIOl7oTvG8+X2Ag690R7SfwiOcHrWZKVc1Pp5WIOzA==, + } require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, + } + engines: { node: ">=0.10.0" } resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, + } + engines: { node: ">=4" } resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, + } + engines: { node: ">=8" } resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolution: + { + integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==, + } restore-cursor@5.1.0: - resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==, + } + engines: { node: ">=18" } reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + resolution: + { + integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==, + } + engines: { iojs: ">=1.0.0", node: ">=0.10.0" } rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + resolution: + { + integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==, + } rollup@4.53.3: - resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} + resolution: + { + integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==, + } + engines: { node: ">=18.0.0", npm: ">=8.0.0" } hasBin: true run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + resolution: + { + integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, + } safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + resolution: + { + integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, + } + + scheduler@0.27.0: + resolution: + { + integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==, + } semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + resolution: + { + integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, + } hasBin: true semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==, + } + engines: { node: ">=10" } hasBin: true sentence-case@3.0.4: - resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + resolution: + { + integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==, + } setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + resolution: + { + integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==, + } + + sharp@0.34.5: + resolution: + { + integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } shell-quote@1.8.3: - resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==, + } + engines: { node: ">= 0.4" } siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + resolution: + { + integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==, + } signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, + } + engines: { node: ">=14" } signedsource@1.0.0: - resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} + resolution: + { + integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==, + } sirv@3.0.2: - resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==, + } + engines: { node: ">=18" } slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, + } + engines: { node: ">=8" } slice-ansi@7.1.2: - resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==, + } + engines: { node: ">=18" } snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + resolution: + { + integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==, + } source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, + } + engines: { node: ">=0.10.0" } sponge-case@1.0.1: - resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==} + resolution: + { + integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==, + } stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + resolution: + { + integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==, + } std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + resolution: + { + integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==, + } string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} + resolution: + { + integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==, + } + engines: { node: ">=0.6.19" } string-env-interpolation@1.0.1: - resolution: {integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==} + resolution: + { + integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==, + } string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, + } + engines: { node: ">=8" } string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==, + } + engines: { node: ">=18" } string-width@8.1.0: - resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==} - engines: {node: '>=20'} + resolution: + { + integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==, + } + engines: { node: ">=20" } strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, + } + engines: { node: ">=8" } strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==, + } + engines: { node: ">=12" } + + styled-jsx@5.1.6: + resolution: + { + integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==, + } + engines: { node: ">= 12.0.0" } + peerDependencies: + "@babel/core": "*" + babel-plugin-macros: "*" + react: ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + peerDependenciesMeta: + "@babel/core": + optional: true + babel-plugin-macros: + optional: true supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, + } + engines: { node: ">=8" } swap-case@2.0.2: - resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} + resolution: + { + integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==, + } sync-fetch@0.6.0-2: - resolution: {integrity: sha512-c7AfkZ9udatCuAy9RSfiGPpeOKKUAUK5e1cXadLOGUjasdxqYqAK0jTNkM/FSEyJ3a5Ra27j/tw/PS0qLmaF/A==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-c7AfkZ9udatCuAy9RSfiGPpeOKKUAUK5e1cXadLOGUjasdxqYqAK0jTNkM/FSEyJ3a5Ra27j/tw/PS0qLmaF/A==, + } + engines: { node: ">=18" } + + tailwind-merge@3.4.0: + resolution: + { + integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==, + } + + tailwindcss@4.1.18: + resolution: + { + integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==, + } + + tapable@2.3.0: + resolution: + { + integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==, + } + engines: { node: ">=6" } timeout-signal@2.0.0: - resolution: {integrity: sha512-YBGpG4bWsHoPvofT6y/5iqulfXIiIErl5B0LdtHT1mGXDFTAhhRrbUpTvBgYbovr+3cKblya2WAOcpoy90XguA==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-YBGpG4bWsHoPvofT6y/5iqulfXIiIErl5B0LdtHT1mGXDFTAhhRrbUpTvBgYbovr+3cKblya2WAOcpoy90XguA==, + } + engines: { node: ">=16" } tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + resolution: + { + integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==, + } tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + resolution: + { + integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==, + } tinyexec@1.0.1: - resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + resolution: + { + integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==, + } tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} + resolution: + { + integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==, + } + engines: { node: ">=12.0.0" } tinyrainbow@3.0.3: - resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==, + } + engines: { node: ">=14.0.0" } title-case@3.0.3: - resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} + resolution: + { + integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==, + } to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + resolution: + { + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, + } + engines: { node: ">=8.0" } totalist@3.0.1: - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==, + } + engines: { node: ">=6" } tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + resolution: + { + integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, + } ts-log@2.2.7: - resolution: {integrity: sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg==} + resolution: + { + integrity: sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg==, + } tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + resolution: + { + integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==, + } tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + resolution: + { + integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, + } tsx@4.20.6: - resolution: {integrity: sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==} - engines: {node: '>=18.0.0'} + resolution: + { + integrity: sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==, + } + engines: { node: ">=18.0.0" } hasBin: true turbo-darwin-64@2.6.1: - resolution: {integrity: sha512-Dm0HwhyZF4J0uLqkhUyCVJvKM9Rw7M03v3J9A7drHDQW0qAbIGBrUijQ8g4Q9Cciw/BXRRd8Uzkc3oue+qn+ZQ==} + resolution: + { + integrity: sha512-Dm0HwhyZF4J0uLqkhUyCVJvKM9Rw7M03v3J9A7drHDQW0qAbIGBrUijQ8g4Q9Cciw/BXRRd8Uzkc3oue+qn+ZQ==, + } cpu: [x64] os: [darwin] turbo-darwin-arm64@2.6.1: - resolution: {integrity: sha512-U0PIPTPyxdLsrC3jN7jaJUwgzX5sVUBsKLO7+6AL+OASaa1NbT1pPdiZoTkblBAALLP76FM0LlnsVQOnmjYhyw==} + resolution: + { + integrity: sha512-U0PIPTPyxdLsrC3jN7jaJUwgzX5sVUBsKLO7+6AL+OASaa1NbT1pPdiZoTkblBAALLP76FM0LlnsVQOnmjYhyw==, + } cpu: [arm64] os: [darwin] turbo-linux-64@2.6.1: - resolution: {integrity: sha512-eM1uLWgzv89bxlK29qwQEr9xYWBhmO/EGiH22UGfq+uXr+QW1OvNKKMogSN65Ry8lElMH4LZh0aX2DEc7eC0Mw==} + resolution: + { + integrity: sha512-eM1uLWgzv89bxlK29qwQEr9xYWBhmO/EGiH22UGfq+uXr+QW1OvNKKMogSN65Ry8lElMH4LZh0aX2DEc7eC0Mw==, + } cpu: [x64] os: [linux] turbo-linux-arm64@2.6.1: - resolution: {integrity: sha512-MFFh7AxAQAycXKuZDrbeutfWM5Ep0CEZ9u7zs4Hn2FvOViTCzIfEhmuJou3/a5+q5VX1zTxQrKGy+4Lf5cdpsA==} + resolution: + { + integrity: sha512-MFFh7AxAQAycXKuZDrbeutfWM5Ep0CEZ9u7zs4Hn2FvOViTCzIfEhmuJou3/a5+q5VX1zTxQrKGy+4Lf5cdpsA==, + } cpu: [arm64] os: [linux] turbo-windows-64@2.6.1: - resolution: {integrity: sha512-buq7/VAN7KOjMYi4tSZT5m+jpqyhbRU2EUTTvp6V0Ii8dAkY2tAAjQN1q5q2ByflYWKecbQNTqxmVploE0LVwQ==} + resolution: + { + integrity: sha512-buq7/VAN7KOjMYi4tSZT5m+jpqyhbRU2EUTTvp6V0Ii8dAkY2tAAjQN1q5q2ByflYWKecbQNTqxmVploE0LVwQ==, + } cpu: [x64] os: [win32] turbo-windows-arm64@2.6.1: - resolution: {integrity: sha512-7w+AD5vJp3R+FB0YOj1YJcNcOOvBior7bcHTodqp90S3x3bLgpr7tE6xOea1e8JkP7GK6ciKVUpQvV7psiwU5Q==} + resolution: + { + integrity: sha512-7w+AD5vJp3R+FB0YOj1YJcNcOOvBior7bcHTodqp90S3x3bLgpr7tE6xOea1e8JkP7GK6ciKVUpQvV7psiwU5Q==, + } cpu: [arm64] os: [win32] turbo@2.6.1: - resolution: {integrity: sha512-qBwXXuDT3rA53kbNafGbT5r++BrhRgx3sAo0cHoDAeG9g1ItTmUMgltz3Hy7Hazy1ODqNpR+C7QwqL6DYB52yA==} + resolution: + { + integrity: sha512-qBwXXuDT3rA53kbNafGbT5r++BrhRgx3sAo0cHoDAeG9g1ItTmUMgltz3Hy7Hazy1ODqNpR+C7QwqL6DYB52yA==, + } hasBin: true typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} + resolution: + { + integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==, + } + engines: { node: ">=14.17" } hasBin: true ua-parser-js@1.0.41: - resolution: {integrity: sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug==} + resolution: + { + integrity: sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug==, + } hasBin: true unc-path-regex@0.1.2: - resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==, + } + engines: { node: ">=0.10.0" } undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + resolution: + { + integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==, + } unixify@1.0.0: - resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==, + } + engines: { node: ">=0.10.0" } update-browserslist-db@1.1.4: - resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} + resolution: + { + integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==, + } hasBin: true peerDependencies: - browserslist: '>= 4.21.0' + browserslist: ">= 4.21.0" upper-case-first@2.0.2: - resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + resolution: + { + integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==, + } upper-case@2.0.2: - resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + resolution: + { + integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==, + } urlpattern-polyfill@10.1.0: - resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} + resolution: + { + integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==, + } + + urql@5.0.1: + resolution: + { + integrity: sha512-r58gYlWvCTC19QvkTaARaCLV9/bp870byH/qbLaw3S7f8i/bC6x2Szub8RVXptiMxWmqq5dyVBjUL9G+xPEuqg==, + } + peerDependencies: + "@urql/core": ^6.0.0 + react: ">= 16.8.0" vite@7.2.4: - resolution: {integrity: sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==} - engines: {node: ^20.19.0 || >=22.12.0} + resolution: + { + integrity: sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==, + } + engines: { node: ^20.19.0 || >=22.12.0 } hasBin: true peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' + "@types/node": ^20.19.0 || >=22.12.0 + jiti: ">=1.21.0" less: ^4.0.0 lightningcss: ^1.21.0 sass: ^1.70.0 sass-embedded: ^1.70.0 - stylus: '>=0.54.8' + stylus: ">=0.54.8" sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 peerDependenciesMeta: - '@types/node': + "@types/node": optional: true jiti: optional: true @@ -2232,33 +4503,36 @@ packages: optional: true vitest@4.0.14: - resolution: {integrity: sha512-d9B2J9Cm9dN9+6nxMnnNJKJCtcyKfnHj15N6YNJfaFHRLua/d3sRKU9RuKmO9mB0XdFtUizlxfz/VPbd3OxGhw==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + resolution: + { + integrity: sha512-d9B2J9Cm9dN9+6nxMnnNJKJCtcyKfnHj15N6YNJfaFHRLua/d3sRKU9RuKmO9mB0XdFtUizlxfz/VPbd3OxGhw==, + } + engines: { node: ^20.0.0 || ^22.0.0 || >=24.0.0 } hasBin: true peerDependencies: - '@edge-runtime/vm': '*' - '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.14 - '@vitest/browser-preview': 4.0.14 - '@vitest/browser-webdriverio': 4.0.14 - '@vitest/ui': 4.0.14 - happy-dom: '*' - jsdom: '*' + "@edge-runtime/vm": "*" + "@opentelemetry/api": ^1.9.0 + "@types/node": ^20.0.0 || ^22.0.0 || >=24.0.0 + "@vitest/browser-playwright": 4.0.14 + "@vitest/browser-preview": 4.0.14 + "@vitest/browser-webdriverio": 4.0.14 + "@vitest/ui": 4.0.14 + happy-dom: "*" + jsdom: "*" peerDependenciesMeta: - '@edge-runtime/vm': + "@edge-runtime/vm": optional: true - '@opentelemetry/api': + "@opentelemetry/api": optional: true - '@types/node': + "@types/node": optional: true - '@vitest/browser-playwright': + "@vitest/browser-playwright": optional: true - '@vitest/browser-preview': + "@vitest/browser-preview": optional: true - '@vitest/browser-webdriverio': + "@vitest/browser-webdriverio": optional: true - '@vitest/ui': + "@vitest/ui": optional: true happy-dom: optional: true @@ -2266,42 +4540,75 @@ packages: optional: true web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==, + } + engines: { node: ">= 8" } webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + resolution: + { + integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==, + } whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==, + } + engines: { node: ">=18" } whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + resolution: + { + integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==, + } why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==, + } + engines: { node: ">=8" } hasBin: true + wonka@6.3.5: + resolution: + { + integrity: sha512-SSil+ecw6B4/Dm7Pf2sAshKQ5hWFvfyGlfPbEd6A14dOH6VDjrmbY86u6nZvy9omGwwIPFR8V41+of1EezgoUw==, + } + wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==, + } + engines: { node: ">=8" } wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, + } + engines: { node: ">=10" } wrap-ansi@9.0.2: - resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==, + } + engines: { node: ">=18" } ws@8.18.3: - resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} - engines: {node: '>=10.0.0'} + resolution: + { + integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==, + } + engines: { node: ">=10.0.0" } peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' + utf-8-validate: ">=5.0.2" peerDependenciesMeta: bufferutil: optional: true @@ -2309,40 +4616,66 @@ packages: optional: true y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, + } + engines: { node: ">=10" } yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + resolution: + { + integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, + } yaml@2.8.1: - resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} - engines: {node: '>= 14.6'} + resolution: + { + integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==, + } + engines: { node: ">= 14.6" } hasBin: true yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, + } + engines: { node: ">=12" } yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, + } + engines: { node: ">=12" } yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, + } + engines: { node: ">=10" } yoctocolors-cjs@2.1.3: - resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==, + } + engines: { node: ">=18" } snapshots: + "@0no-co/graphql.web@1.2.0(graphql@16.11.0)": + optionalDependencies: + graphql: 16.11.0 + + "@alloc/quick-lru@5.2.0": {} - '@ardatan/relay-compiler@12.0.3(graphql@16.11.0)': + "@ardatan/relay-compiler@12.0.3(graphql@16.11.0)": dependencies: - '@babel/generator': 7.28.5 - '@babel/parser': 7.28.5 - '@babel/runtime': 7.28.4 + "@babel/generator": 7.28.5 + "@babel/parser": 7.28.5 + "@babel/runtime": 7.28.4 chalk: 4.1.2 fb-watchman: 2.0.2 graphql: 16.11.0 @@ -2354,26 +4687,26 @@ snapshots: transitivePeerDependencies: - encoding - '@babel/code-frame@7.27.1': + "@babel/code-frame@7.27.1": dependencies: - '@babel/helper-validator-identifier': 7.28.5 + "@babel/helper-validator-identifier": 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.5': {} + "@babel/compat-data@7.28.5": {} - '@babel/core@7.28.5': + "@babel/core@7.28.5": dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) - '@babel/helpers': 7.28.4 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - '@jridgewell/remapping': 2.3.5 + "@babel/code-frame": 7.27.1 + "@babel/generator": 7.28.5 + "@babel/helper-compilation-targets": 7.27.2 + "@babel/helper-module-transforms": 7.28.3(@babel/core@7.28.5) + "@babel/helpers": 7.28.4 + "@babel/parser": 7.28.5 + "@babel/template": 7.27.2 + "@babel/traverse": 7.28.5 + "@babel/types": 7.28.5 + "@jridgewell/remapping": 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 gensync: 1.0.0-beta.2 @@ -2382,289 +4715,300 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.28.5': + "@babel/generator@7.28.5": dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 + "@babel/parser": 7.28.5 + "@babel/types": 7.28.5 + "@jridgewell/gen-mapping": 0.3.13 + "@jridgewell/trace-mapping": 0.3.31 jsesc: 3.1.0 - '@babel/helper-compilation-targets@7.27.2': + "@babel/helper-compilation-targets@7.27.2": dependencies: - '@babel/compat-data': 7.28.5 - '@babel/helper-validator-option': 7.27.1 + "@babel/compat-data": 7.28.5 + "@babel/helper-validator-option": 7.27.1 browserslist: 4.27.0 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-globals@7.28.0': {} + "@babel/helper-globals@7.28.0": {} - '@babel/helper-module-imports@7.27.1': + "@babel/helper-module-imports@7.27.1": dependencies: - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + "@babel/traverse": 7.28.5 + "@babel/types": 7.28.5 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': + "@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)": dependencies: - '@babel/core': 7.28.5 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.5 + "@babel/core": 7.28.5 + "@babel/helper-module-imports": 7.27.1 + "@babel/helper-validator-identifier": 7.28.5 + "@babel/traverse": 7.28.5 transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.27.1': {} + "@babel/helper-plugin-utils@7.27.1": {} - '@babel/helper-string-parser@7.27.1': {} + "@babel/helper-string-parser@7.27.1": {} - '@babel/helper-validator-identifier@7.28.5': {} + "@babel/helper-validator-identifier@7.28.5": {} - '@babel/helper-validator-option@7.27.1': {} + "@babel/helper-validator-option@7.27.1": {} - '@babel/helpers@7.28.4': + "@babel/helpers@7.28.4": dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 + "@babel/template": 7.27.2 + "@babel/types": 7.28.5 - '@babel/parser@7.28.5': + "@babel/parser@7.28.5": dependencies: - '@babel/types': 7.28.5 + "@babel/types": 7.28.5 - '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.5)': + "@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.5)": dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 + "@babel/core": 7.28.5 + "@babel/helper-plugin-utils": 7.27.1 - '@babel/runtime@7.28.4': {} + "@babel/runtime@7.28.4": {} - '@babel/template@7.27.2': + "@babel/template@7.27.2": dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + "@babel/code-frame": 7.27.1 + "@babel/parser": 7.28.5 + "@babel/types": 7.28.5 - '@babel/traverse@7.28.5': + "@babel/traverse@7.28.5": dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 + "@babel/code-frame": 7.27.1 + "@babel/generator": 7.28.5 + "@babel/helper-globals": 7.28.0 + "@babel/parser": 7.28.5 + "@babel/template": 7.27.2 + "@babel/types": 7.28.5 debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.28.5': + "@babel/types@7.28.5": dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 + "@babel/helper-string-parser": 7.27.1 + "@babel/helper-validator-identifier": 7.28.5 - '@bcoe/v8-coverage@1.0.2': {} + "@bcoe/v8-coverage@1.0.2": {} + + "@emnapi/runtime@1.8.1": + dependencies: + tslib: 2.8.1 + optional: true - '@envelop/core@5.3.2': + "@envelop/core@5.3.2": dependencies: - '@envelop/instrumentation': 1.0.0 - '@envelop/types': 5.2.1 - '@whatwg-node/promise-helpers': 1.3.2 + "@envelop/instrumentation": 1.0.0 + "@envelop/types": 5.2.1 + "@whatwg-node/promise-helpers": 1.3.2 tslib: 2.8.1 - '@envelop/instrumentation@1.0.0': + "@envelop/instrumentation@1.0.0": dependencies: - '@whatwg-node/promise-helpers': 1.3.2 + "@whatwg-node/promise-helpers": 1.3.2 tslib: 2.8.1 - '@envelop/types@5.2.1': + "@envelop/types@5.2.1": dependencies: - '@whatwg-node/promise-helpers': 1.3.2 + "@whatwg-node/promise-helpers": 1.3.2 tslib: 2.8.1 - '@esbuild/aix-ppc64@0.25.11': + "@esbuild/aix-ppc64@0.25.11": optional: true - '@esbuild/aix-ppc64@0.25.12': + "@esbuild/aix-ppc64@0.25.12": optional: true - '@esbuild/android-arm64@0.25.11': + "@esbuild/android-arm64@0.25.11": optional: true - '@esbuild/android-arm64@0.25.12': + "@esbuild/android-arm64@0.25.12": optional: true - '@esbuild/android-arm@0.25.11': + "@esbuild/android-arm@0.25.11": optional: true - '@esbuild/android-arm@0.25.12': + "@esbuild/android-arm@0.25.12": optional: true - '@esbuild/android-x64@0.25.11': + "@esbuild/android-x64@0.25.11": optional: true - '@esbuild/android-x64@0.25.12': + "@esbuild/android-x64@0.25.12": optional: true - '@esbuild/darwin-arm64@0.25.11': + "@esbuild/darwin-arm64@0.25.11": optional: true - '@esbuild/darwin-arm64@0.25.12': + "@esbuild/darwin-arm64@0.25.12": optional: true - '@esbuild/darwin-x64@0.25.11': + "@esbuild/darwin-x64@0.25.11": optional: true - '@esbuild/darwin-x64@0.25.12': + "@esbuild/darwin-x64@0.25.12": optional: true - '@esbuild/freebsd-arm64@0.25.11': + "@esbuild/freebsd-arm64@0.25.11": optional: true - '@esbuild/freebsd-arm64@0.25.12': + "@esbuild/freebsd-arm64@0.25.12": optional: true - '@esbuild/freebsd-x64@0.25.11': + "@esbuild/freebsd-x64@0.25.11": optional: true - '@esbuild/freebsd-x64@0.25.12': + "@esbuild/freebsd-x64@0.25.12": optional: true - '@esbuild/linux-arm64@0.25.11': + "@esbuild/linux-arm64@0.25.11": optional: true - '@esbuild/linux-arm64@0.25.12': + "@esbuild/linux-arm64@0.25.12": optional: true - '@esbuild/linux-arm@0.25.11': + "@esbuild/linux-arm@0.25.11": optional: true - '@esbuild/linux-arm@0.25.12': + "@esbuild/linux-arm@0.25.12": optional: true - '@esbuild/linux-ia32@0.25.11': + "@esbuild/linux-ia32@0.25.11": optional: true - '@esbuild/linux-ia32@0.25.12': + "@esbuild/linux-ia32@0.25.12": optional: true - '@esbuild/linux-loong64@0.25.11': + "@esbuild/linux-loong64@0.25.11": optional: true - '@esbuild/linux-loong64@0.25.12': + "@esbuild/linux-loong64@0.25.12": optional: true - '@esbuild/linux-mips64el@0.25.11': + "@esbuild/linux-mips64el@0.25.11": optional: true - '@esbuild/linux-mips64el@0.25.12': + "@esbuild/linux-mips64el@0.25.12": optional: true - '@esbuild/linux-ppc64@0.25.11': + "@esbuild/linux-ppc64@0.25.11": optional: true - '@esbuild/linux-ppc64@0.25.12': + "@esbuild/linux-ppc64@0.25.12": optional: true - '@esbuild/linux-riscv64@0.25.11': + "@esbuild/linux-riscv64@0.25.11": optional: true - '@esbuild/linux-riscv64@0.25.12': + "@esbuild/linux-riscv64@0.25.12": optional: true - '@esbuild/linux-s390x@0.25.11': + "@esbuild/linux-s390x@0.25.11": optional: true - '@esbuild/linux-s390x@0.25.12': + "@esbuild/linux-s390x@0.25.12": optional: true - '@esbuild/linux-x64@0.25.11': + "@esbuild/linux-x64@0.25.11": optional: true - '@esbuild/linux-x64@0.25.12': + "@esbuild/linux-x64@0.25.12": optional: true - '@esbuild/netbsd-arm64@0.25.11': + "@esbuild/netbsd-arm64@0.25.11": optional: true - '@esbuild/netbsd-arm64@0.25.12': + "@esbuild/netbsd-arm64@0.25.12": optional: true - '@esbuild/netbsd-x64@0.25.11': + "@esbuild/netbsd-x64@0.25.11": optional: true - '@esbuild/netbsd-x64@0.25.12': + "@esbuild/netbsd-x64@0.25.12": optional: true - '@esbuild/openbsd-arm64@0.25.11': + "@esbuild/openbsd-arm64@0.25.11": optional: true - '@esbuild/openbsd-arm64@0.25.12': + "@esbuild/openbsd-arm64@0.25.12": optional: true - '@esbuild/openbsd-x64@0.25.11': + "@esbuild/openbsd-x64@0.25.11": optional: true - '@esbuild/openbsd-x64@0.25.12': + "@esbuild/openbsd-x64@0.25.12": optional: true - '@esbuild/openharmony-arm64@0.25.11': + "@esbuild/openharmony-arm64@0.25.11": optional: true - '@esbuild/openharmony-arm64@0.25.12': + "@esbuild/openharmony-arm64@0.25.12": optional: true - '@esbuild/sunos-x64@0.25.11': + "@esbuild/sunos-x64@0.25.11": optional: true - '@esbuild/sunos-x64@0.25.12': + "@esbuild/sunos-x64@0.25.12": optional: true - '@esbuild/win32-arm64@0.25.11': + "@esbuild/win32-arm64@0.25.11": optional: true - '@esbuild/win32-arm64@0.25.12': + "@esbuild/win32-arm64@0.25.12": optional: true - '@esbuild/win32-ia32@0.25.11': + "@esbuild/win32-ia32@0.25.11": optional: true - '@esbuild/win32-ia32@0.25.12': + "@esbuild/win32-ia32@0.25.12": optional: true - '@esbuild/win32-x64@0.25.11': + "@esbuild/win32-x64@0.25.11": optional: true - '@esbuild/win32-x64@0.25.12': + "@esbuild/win32-x64@0.25.12": optional: true - '@fastify/busboy@3.2.0': {} + "@fastify/busboy@3.2.0": {} - '@graphql-codegen/add@6.0.0(graphql@16.11.0)': + "@graphql-codegen/add@5.0.3(graphql@16.11.0)": dependencies: - '@graphql-codegen/plugin-helpers': 6.0.0(graphql@16.11.0) + "@graphql-codegen/plugin-helpers": 5.1.1(graphql@16.11.0) graphql: 16.11.0 tslib: 2.6.3 - '@graphql-codegen/cli@6.0.1(@types/node@24.10.1)(graphql@16.11.0)(typescript@5.9.3)': - dependencies: - '@babel/generator': 7.28.5 - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 - '@graphql-codegen/client-preset': 5.1.1(graphql@16.11.0) - '@graphql-codegen/core': 5.0.0(graphql@16.11.0) - '@graphql-codegen/plugin-helpers': 6.0.0(graphql@16.11.0) - '@graphql-tools/apollo-engine-loader': 8.0.22(graphql@16.11.0) - '@graphql-tools/code-file-loader': 8.1.22(graphql@16.11.0) - '@graphql-tools/git-loader': 8.0.26(graphql@16.11.0) - '@graphql-tools/github-loader': 8.0.22(@types/node@24.10.1)(graphql@16.11.0) - '@graphql-tools/graphql-file-loader': 8.1.2(graphql@16.11.0) - '@graphql-tools/json-file-loader': 8.0.20(graphql@16.11.0) - '@graphql-tools/load': 8.1.2(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.33(@types/node@24.10.1)(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@inquirer/prompts': 7.9.0(@types/node@24.10.1) - '@whatwg-node/fetch': 0.10.11 + "@graphql-codegen/add@6.0.0(graphql@16.11.0)": + dependencies: + "@graphql-codegen/plugin-helpers": 6.0.0(graphql@16.11.0) + graphql: 16.11.0 + tslib: 2.6.3 + + "@graphql-codegen/cli@6.0.1(@types/node@24.10.1)(graphql@16.11.0)(typescript@5.9.3)": + dependencies: + "@babel/generator": 7.28.5 + "@babel/template": 7.27.2 + "@babel/types": 7.28.5 + "@graphql-codegen/client-preset": 5.1.1(graphql@16.11.0) + "@graphql-codegen/core": 5.0.0(graphql@16.11.0) + "@graphql-codegen/plugin-helpers": 6.0.0(graphql@16.11.0) + "@graphql-tools/apollo-engine-loader": 8.0.22(graphql@16.11.0) + "@graphql-tools/code-file-loader": 8.1.22(graphql@16.11.0) + "@graphql-tools/git-loader": 8.0.26(graphql@16.11.0) + "@graphql-tools/github-loader": 8.0.22(@types/node@24.10.1)(graphql@16.11.0) + "@graphql-tools/graphql-file-loader": 8.1.2(graphql@16.11.0) + "@graphql-tools/json-file-loader": 8.0.20(graphql@16.11.0) + "@graphql-tools/load": 8.1.2(graphql@16.11.0) + "@graphql-tools/url-loader": 8.0.33(@types/node@24.10.1)(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + "@inquirer/prompts": 7.9.0(@types/node@24.10.1) + "@whatwg-node/fetch": 0.10.11 chalk: 4.1.2 cosmiconfig: 9.0.0(typescript@5.9.3) debounce: 2.2.0 @@ -2684,8 +5028,8 @@ snapshots: yaml: 2.8.1 yargs: 17.7.2 transitivePeerDependencies: - - '@fastify/websocket' - - '@types/node' + - "@fastify/websocket" + - "@types/node" - bufferutil - cosmiconfig-toml-loader - crossws @@ -2696,47 +5040,87 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-codegen/client-preset@5.1.1(graphql@16.11.0)': - dependencies: - '@babel/helper-plugin-utils': 7.27.1 - '@babel/template': 7.27.2 - '@graphql-codegen/add': 6.0.0(graphql@16.11.0) - '@graphql-codegen/gql-tag-operations': 5.0.3(graphql@16.11.0) - '@graphql-codegen/plugin-helpers': 6.0.0(graphql@16.11.0) - '@graphql-codegen/typed-document-node': 6.0.2(graphql@16.11.0) - '@graphql-codegen/typescript': 5.0.2(graphql@16.11.0) - '@graphql-codegen/typescript-operations': 5.0.2(graphql@16.11.0) - '@graphql-codegen/visitor-plugin-common': 6.1.0(graphql@16.11.0) - '@graphql-tools/documents': 1.0.1(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) + "@graphql-codegen/client-preset@4.8.3(graphql@16.11.0)": + dependencies: + "@babel/helper-plugin-utils": 7.27.1 + "@babel/template": 7.27.2 + "@graphql-codegen/add": 5.0.3(graphql@16.11.0) + "@graphql-codegen/gql-tag-operations": 4.0.17(graphql@16.11.0) + "@graphql-codegen/plugin-helpers": 5.1.1(graphql@16.11.0) + "@graphql-codegen/typed-document-node": 5.1.2(graphql@16.11.0) + "@graphql-codegen/typescript": 4.1.6(graphql@16.11.0) + "@graphql-codegen/typescript-operations": 4.6.1(graphql@16.11.0) + "@graphql-codegen/visitor-plugin-common": 5.8.0(graphql@16.11.0) + "@graphql-tools/documents": 1.0.1(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + "@graphql-typed-document-node/core": 3.2.0(graphql@16.11.0) + graphql: 16.11.0 + tslib: 2.6.3 + transitivePeerDependencies: + - encoding + + "@graphql-codegen/client-preset@5.1.1(graphql@16.11.0)": + dependencies: + "@babel/helper-plugin-utils": 7.27.1 + "@babel/template": 7.27.2 + "@graphql-codegen/add": 6.0.0(graphql@16.11.0) + "@graphql-codegen/gql-tag-operations": 5.0.3(graphql@16.11.0) + "@graphql-codegen/plugin-helpers": 6.0.0(graphql@16.11.0) + "@graphql-codegen/typed-document-node": 6.0.2(graphql@16.11.0) + "@graphql-codegen/typescript": 5.0.2(graphql@16.11.0) + "@graphql-codegen/typescript-operations": 5.0.2(graphql@16.11.0) + "@graphql-codegen/visitor-plugin-common": 6.1.0(graphql@16.11.0) + "@graphql-tools/documents": 1.0.1(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + "@graphql-typed-document-node/core": 3.2.0(graphql@16.11.0) graphql: 16.11.0 tslib: 2.6.3 transitivePeerDependencies: - encoding - '@graphql-codegen/core@5.0.0(graphql@16.11.0)': + "@graphql-codegen/core@5.0.0(graphql@16.11.0)": + dependencies: + "@graphql-codegen/plugin-helpers": 6.0.0(graphql@16.11.0) + "@graphql-tools/schema": 10.0.25(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + graphql: 16.11.0 + tslib: 2.6.3 + + "@graphql-codegen/gql-tag-operations@4.0.17(graphql@16.11.0)": dependencies: - '@graphql-codegen/plugin-helpers': 6.0.0(graphql@16.11.0) - '@graphql-tools/schema': 10.0.25(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + "@graphql-codegen/plugin-helpers": 5.1.1(graphql@16.11.0) + "@graphql-codegen/visitor-plugin-common": 5.8.0(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + auto-bind: 4.0.0 graphql: 16.11.0 tslib: 2.6.3 + transitivePeerDependencies: + - encoding - '@graphql-codegen/gql-tag-operations@5.0.3(graphql@16.11.0)': + "@graphql-codegen/gql-tag-operations@5.0.3(graphql@16.11.0)": dependencies: - '@graphql-codegen/plugin-helpers': 6.0.0(graphql@16.11.0) - '@graphql-codegen/visitor-plugin-common': 6.1.0(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + "@graphql-codegen/plugin-helpers": 6.0.0(graphql@16.11.0) + "@graphql-codegen/visitor-plugin-common": 6.1.0(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) auto-bind: 4.0.0 graphql: 16.11.0 tslib: 2.6.3 transitivePeerDependencies: - encoding - '@graphql-codegen/plugin-helpers@6.0.0(graphql@16.11.0)': + "@graphql-codegen/plugin-helpers@5.1.1(graphql@16.11.0)": + dependencies: + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + change-case-all: 1.0.15 + common-tags: 1.8.2 + graphql: 16.11.0 + import-from: 4.0.0 + lodash: 4.17.21 + tslib: 2.6.3 + + "@graphql-codegen/plugin-helpers@6.0.0(graphql@16.11.0)": dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) change-case-all: 1.0.15 common-tags: 1.8.2 graphql: 16.11.0 @@ -2744,17 +5128,35 @@ snapshots: lodash: 4.17.21 tslib: 2.6.3 - '@graphql-codegen/schema-ast@5.0.0(graphql@16.11.0)': + "@graphql-codegen/schema-ast@4.1.0(graphql@16.11.0)": dependencies: - '@graphql-codegen/plugin-helpers': 6.0.0(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + "@graphql-codegen/plugin-helpers": 5.1.1(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) graphql: 16.11.0 tslib: 2.6.3 - '@graphql-codegen/typed-document-node@6.0.2(graphql@16.11.0)': + "@graphql-codegen/schema-ast@5.0.0(graphql@16.11.0)": dependencies: - '@graphql-codegen/plugin-helpers': 6.0.0(graphql@16.11.0) - '@graphql-codegen/visitor-plugin-common': 6.1.0(graphql@16.11.0) + "@graphql-codegen/plugin-helpers": 6.0.0(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + graphql: 16.11.0 + tslib: 2.6.3 + + "@graphql-codegen/typed-document-node@5.1.2(graphql@16.11.0)": + dependencies: + "@graphql-codegen/plugin-helpers": 5.1.1(graphql@16.11.0) + "@graphql-codegen/visitor-plugin-common": 5.8.0(graphql@16.11.0) + auto-bind: 4.0.0 + change-case-all: 1.0.15 + graphql: 16.11.0 + tslib: 2.6.3 + transitivePeerDependencies: + - encoding + + "@graphql-codegen/typed-document-node@6.0.2(graphql@16.11.0)": + dependencies: + "@graphql-codegen/plugin-helpers": 6.0.0(graphql@16.11.0) + "@graphql-codegen/visitor-plugin-common": 6.1.0(graphql@16.11.0) auto-bind: 4.0.0 change-case-all: 1.0.15 graphql: 16.11.0 @@ -2762,46 +5164,84 @@ snapshots: transitivePeerDependencies: - encoding - '@graphql-codegen/typescript-operations@5.0.2(graphql@16.11.0)': + "@graphql-codegen/typescript-operations@4.6.1(graphql@16.11.0)": + dependencies: + "@graphql-codegen/plugin-helpers": 5.1.1(graphql@16.11.0) + "@graphql-codegen/typescript": 4.1.6(graphql@16.11.0) + "@graphql-codegen/visitor-plugin-common": 5.8.0(graphql@16.11.0) + auto-bind: 4.0.0 + graphql: 16.11.0 + tslib: 2.6.3 + transitivePeerDependencies: + - encoding + + "@graphql-codegen/typescript-operations@5.0.2(graphql@16.11.0)": + dependencies: + "@graphql-codegen/plugin-helpers": 6.0.0(graphql@16.11.0) + "@graphql-codegen/typescript": 5.0.2(graphql@16.11.0) + "@graphql-codegen/visitor-plugin-common": 6.1.0(graphql@16.11.0) + auto-bind: 4.0.0 + graphql: 16.11.0 + tslib: 2.6.3 + transitivePeerDependencies: + - encoding + + "@graphql-codegen/typescript-resolvers@5.1.0(graphql@16.11.0)": dependencies: - '@graphql-codegen/plugin-helpers': 6.0.0(graphql@16.11.0) - '@graphql-codegen/typescript': 5.0.2(graphql@16.11.0) - '@graphql-codegen/visitor-plugin-common': 6.1.0(graphql@16.11.0) + "@graphql-codegen/plugin-helpers": 6.0.0(graphql@16.11.0) + "@graphql-codegen/typescript": 5.0.2(graphql@16.11.0) + "@graphql-codegen/visitor-plugin-common": 6.1.0(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) auto-bind: 4.0.0 graphql: 16.11.0 tslib: 2.6.3 transitivePeerDependencies: - encoding - '@graphql-codegen/typescript-resolvers@5.1.0(graphql@16.11.0)': + "@graphql-codegen/typescript@4.1.6(graphql@16.11.0)": dependencies: - '@graphql-codegen/plugin-helpers': 6.0.0(graphql@16.11.0) - '@graphql-codegen/typescript': 5.0.2(graphql@16.11.0) - '@graphql-codegen/visitor-plugin-common': 6.1.0(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + "@graphql-codegen/plugin-helpers": 5.1.1(graphql@16.11.0) + "@graphql-codegen/schema-ast": 4.1.0(graphql@16.11.0) + "@graphql-codegen/visitor-plugin-common": 5.8.0(graphql@16.11.0) auto-bind: 4.0.0 graphql: 16.11.0 tslib: 2.6.3 transitivePeerDependencies: - encoding - '@graphql-codegen/typescript@5.0.2(graphql@16.11.0)': + "@graphql-codegen/typescript@5.0.2(graphql@16.11.0)": dependencies: - '@graphql-codegen/plugin-helpers': 6.0.0(graphql@16.11.0) - '@graphql-codegen/schema-ast': 5.0.0(graphql@16.11.0) - '@graphql-codegen/visitor-plugin-common': 6.1.0(graphql@16.11.0) + "@graphql-codegen/plugin-helpers": 6.0.0(graphql@16.11.0) + "@graphql-codegen/schema-ast": 5.0.0(graphql@16.11.0) + "@graphql-codegen/visitor-plugin-common": 6.1.0(graphql@16.11.0) auto-bind: 4.0.0 graphql: 16.11.0 tslib: 2.6.3 transitivePeerDependencies: - encoding - '@graphql-codegen/visitor-plugin-common@6.1.0(graphql@16.11.0)': + "@graphql-codegen/visitor-plugin-common@5.8.0(graphql@16.11.0)": dependencies: - '@graphql-codegen/plugin-helpers': 6.0.0(graphql@16.11.0) - '@graphql-tools/optimize': 2.0.0(graphql@16.11.0) - '@graphql-tools/relay-operation-optimizer': 7.0.21(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + "@graphql-codegen/plugin-helpers": 5.1.1(graphql@16.11.0) + "@graphql-tools/optimize": 2.0.0(graphql@16.11.0) + "@graphql-tools/relay-operation-optimizer": 7.0.21(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + auto-bind: 4.0.0 + change-case-all: 1.0.15 + dependency-graph: 0.11.0 + graphql: 16.11.0 + graphql-tag: 2.12.6(graphql@16.11.0) + parse-filepath: 1.0.2 + tslib: 2.6.3 + transitivePeerDependencies: + - encoding + + "@graphql-codegen/visitor-plugin-common@6.1.0(graphql@16.11.0)": + dependencies: + "@graphql-codegen/plugin-helpers": 6.0.0(graphql@16.11.0) + "@graphql-tools/optimize": 2.0.0(graphql@16.11.0) + "@graphql-tools/relay-operation-optimizer": 7.0.21(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) auto-bind: 4.0.0 change-case-all: 1.0.15 dependency-graph: 1.0.0 @@ -2812,30 +5252,30 @@ snapshots: transitivePeerDependencies: - encoding - '@graphql-hive/signal@1.0.0': {} + "@graphql-hive/signal@1.0.0": {} - '@graphql-hive/signal@2.0.0': {} + "@graphql-hive/signal@2.0.0": {} - '@graphql-tools/apollo-engine-loader@8.0.22(graphql@16.11.0)': + "@graphql-tools/apollo-engine-loader@8.0.22(graphql@16.11.0)": dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@whatwg-node/fetch': 0.10.11 + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + "@whatwg-node/fetch": 0.10.11 graphql: 16.11.0 sync-fetch: 0.6.0-2 tslib: 2.8.1 - '@graphql-tools/batch-execute@9.0.19(graphql@16.11.0)': + "@graphql-tools/batch-execute@9.0.19(graphql@16.11.0)": dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@whatwg-node/promise-helpers': 1.3.2 + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + "@whatwg-node/promise-helpers": 1.3.2 dataloader: 2.2.3 graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/code-file-loader@8.1.22(graphql@16.11.0)': + "@graphql-tools/code-file-loader@8.1.22(graphql@16.11.0)": dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + "@graphql-tools/graphql-tag-pluck": 8.3.21(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) globby: 11.1.0 graphql: 16.11.0 tslib: 2.8.1 @@ -2843,94 +5283,94 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/delegate@10.2.23(graphql@16.11.0)': + "@graphql-tools/delegate@10.2.23(graphql@16.11.0)": dependencies: - '@graphql-tools/batch-execute': 9.0.19(graphql@16.11.0) - '@graphql-tools/executor': 1.4.9(graphql@16.11.0) - '@graphql-tools/schema': 10.0.25(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/promise-helpers': 1.3.2 + "@graphql-tools/batch-execute": 9.0.19(graphql@16.11.0) + "@graphql-tools/executor": 1.4.9(graphql@16.11.0) + "@graphql-tools/schema": 10.0.25(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + "@repeaterjs/repeater": 3.0.6 + "@whatwg-node/promise-helpers": 1.3.2 dataloader: 2.2.3 dset: 3.1.4 graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/documents@1.0.1(graphql@16.11.0)': + "@graphql-tools/documents@1.0.1(graphql@16.11.0)": dependencies: graphql: 16.11.0 lodash.sortby: 4.7.0 tslib: 2.8.1 - '@graphql-tools/executor-common@0.0.4(graphql@16.11.0)': + "@graphql-tools/executor-common@0.0.4(graphql@16.11.0)": dependencies: - '@envelop/core': 5.3.2 - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + "@envelop/core": 5.3.2 + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) graphql: 16.11.0 - '@graphql-tools/executor-common@0.0.6(graphql@16.11.0)': + "@graphql-tools/executor-common@0.0.6(graphql@16.11.0)": dependencies: - '@envelop/core': 5.3.2 - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + "@envelop/core": 5.3.2 + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) graphql: 16.11.0 - '@graphql-tools/executor-common@1.0.2(graphql@16.11.0)': + "@graphql-tools/executor-common@1.0.2(graphql@16.11.0)": dependencies: - '@envelop/core': 5.3.2 - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + "@envelop/core": 5.3.2 + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) graphql: 16.11.0 - '@graphql-tools/executor-graphql-ws@2.0.7(graphql@16.11.0)': + "@graphql-tools/executor-graphql-ws@2.0.7(graphql@16.11.0)": dependencies: - '@graphql-tools/executor-common': 0.0.6(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@whatwg-node/disposablestack': 0.0.6 + "@graphql-tools/executor-common": 0.0.6(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + "@whatwg-node/disposablestack": 0.0.6 graphql: 16.11.0 graphql-ws: 6.0.6(graphql@16.11.0)(ws@8.18.3) isomorphic-ws: 5.0.0(ws@8.18.3) tslib: 2.8.1 ws: 8.18.3 transitivePeerDependencies: - - '@fastify/websocket' + - "@fastify/websocket" - bufferutil - crossws - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-http@1.3.3(@types/node@24.10.1)(graphql@16.11.0)': + "@graphql-tools/executor-http@1.3.3(@types/node@24.10.1)(graphql@16.11.0)": dependencies: - '@graphql-hive/signal': 1.0.0 - '@graphql-tools/executor-common': 0.0.4(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/fetch': 0.10.11 - '@whatwg-node/promise-helpers': 1.3.2 + "@graphql-hive/signal": 1.0.0 + "@graphql-tools/executor-common": 0.0.4(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + "@repeaterjs/repeater": 3.0.6 + "@whatwg-node/disposablestack": 0.0.6 + "@whatwg-node/fetch": 0.10.11 + "@whatwg-node/promise-helpers": 1.3.2 graphql: 16.11.0 meros: 1.3.2(@types/node@24.10.1) tslib: 2.8.1 transitivePeerDependencies: - - '@types/node' + - "@types/node" - '@graphql-tools/executor-http@3.0.4(@types/node@24.10.1)(graphql@16.11.0)': + "@graphql-tools/executor-http@3.0.4(@types/node@24.10.1)(graphql@16.11.0)": dependencies: - '@graphql-hive/signal': 2.0.0 - '@graphql-tools/executor-common': 1.0.2(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/fetch': 0.10.11 - '@whatwg-node/promise-helpers': 1.3.2 + "@graphql-hive/signal": 2.0.0 + "@graphql-tools/executor-common": 1.0.2(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + "@repeaterjs/repeater": 3.0.6 + "@whatwg-node/disposablestack": 0.0.6 + "@whatwg-node/fetch": 0.10.11 + "@whatwg-node/promise-helpers": 1.3.2 graphql: 16.11.0 meros: 1.3.2(@types/node@24.10.1) tslib: 2.8.1 transitivePeerDependencies: - - '@types/node' + - "@types/node" - '@graphql-tools/executor-legacy-ws@1.1.19(graphql@16.11.0)': + "@graphql-tools/executor-legacy-ws@1.1.19(graphql@16.11.0)": dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@types/ws': 8.18.1 + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + "@types/ws": 8.18.1 graphql: 16.11.0 isomorphic-ws: 5.0.0(ws@8.18.3) tslib: 2.8.1 @@ -2939,20 +5379,20 @@ snapshots: - bufferutil - utf-8-validate - '@graphql-tools/executor@1.4.9(graphql@16.11.0)': + "@graphql-tools/executor@1.4.9(graphql@16.11.0)": dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) - '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/promise-helpers': 1.3.2 + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + "@graphql-typed-document-node/core": 3.2.0(graphql@16.11.0) + "@repeaterjs/repeater": 3.0.6 + "@whatwg-node/disposablestack": 0.0.6 + "@whatwg-node/promise-helpers": 1.3.2 graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/git-loader@8.0.26(graphql@16.11.0)': + "@graphql-tools/git-loader@8.0.26(graphql@16.11.0)": dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + "@graphql-tools/graphql-tag-pluck": 8.3.21(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) graphql: 16.11.0 is-glob: 4.0.3 micromatch: 4.0.8 @@ -2961,24 +5401,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/github-loader@8.0.22(@types/node@24.10.1)(graphql@16.11.0)': + "@graphql-tools/github-loader@8.0.22(@types/node@24.10.1)(graphql@16.11.0)": dependencies: - '@graphql-tools/executor-http': 1.3.3(@types/node@24.10.1)(graphql@16.11.0) - '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@whatwg-node/fetch': 0.10.11 - '@whatwg-node/promise-helpers': 1.3.2 + "@graphql-tools/executor-http": 1.3.3(@types/node@24.10.1)(graphql@16.11.0) + "@graphql-tools/graphql-tag-pluck": 8.3.21(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + "@whatwg-node/fetch": 0.10.11 + "@whatwg-node/promise-helpers": 1.3.2 graphql: 16.11.0 sync-fetch: 0.6.0-2 tslib: 2.8.1 transitivePeerDependencies: - - '@types/node' + - "@types/node" - supports-color - '@graphql-tools/graphql-file-loader@8.1.2(graphql@16.11.0)': + "@graphql-tools/graphql-file-loader@8.1.2(graphql@16.11.0)": dependencies: - '@graphql-tools/import': 7.1.2(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + "@graphql-tools/import": 7.1.2(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) globby: 11.1.0 graphql: 16.11.0 tslib: 2.8.1 @@ -2986,386 +5426,582 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/graphql-tag-pluck@8.3.21(graphql@16.11.0)': + "@graphql-tools/graphql-tag-pluck@8.3.21(graphql@16.11.0)": dependencies: - '@babel/core': 7.28.5 - '@babel/parser': 7.28.5 - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.5) - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + "@babel/core": 7.28.5 + "@babel/parser": 7.28.5 + "@babel/plugin-syntax-import-assertions": 7.27.1(@babel/core@7.28.5) + "@babel/traverse": 7.28.5 + "@babel/types": 7.28.5 + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) graphql: 16.11.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@graphql-tools/import@7.1.2(graphql@16.11.0)': + "@graphql-tools/import@7.1.2(graphql@16.11.0)": dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@theguild/federation-composition': 0.20.2(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + "@theguild/federation-composition": 0.20.2(graphql@16.11.0) graphql: 16.11.0 resolve-from: 5.0.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@graphql-tools/json-file-loader@8.0.20(graphql@16.11.0)': + "@graphql-tools/json-file-loader@8.0.20(graphql@16.11.0)": dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) globby: 11.1.0 graphql: 16.11.0 tslib: 2.8.1 unixify: 1.0.0 - '@graphql-tools/load@8.1.2(graphql@16.11.0)': + "@graphql-tools/load@8.1.2(graphql@16.11.0)": dependencies: - '@graphql-tools/schema': 10.0.25(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + "@graphql-tools/schema": 10.0.25(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) graphql: 16.11.0 p-limit: 3.1.0 tslib: 2.8.1 - '@graphql-tools/merge@9.1.1(graphql@16.11.0)': + "@graphql-tools/merge@9.1.1(graphql@16.11.0)": dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/optimize@2.0.0(graphql@16.11.0)': + "@graphql-tools/optimize@2.0.0(graphql@16.11.0)": dependencies: graphql: 16.11.0 tslib: 2.6.3 - '@graphql-tools/relay-operation-optimizer@7.0.21(graphql@16.11.0)': + "@graphql-tools/relay-operation-optimizer@7.0.21(graphql@16.11.0)": dependencies: - '@ardatan/relay-compiler': 12.0.3(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + "@ardatan/relay-compiler": 12.0.3(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) graphql: 16.11.0 tslib: 2.6.3 transitivePeerDependencies: - encoding - '@graphql-tools/schema@10.0.25(graphql@16.11.0)': + "@graphql-tools/schema@10.0.25(graphql@16.11.0)": dependencies: - '@graphql-tools/merge': 9.1.1(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + "@graphql-tools/merge": 9.1.1(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.33(@types/node@24.10.1)(graphql@16.11.0)': + "@graphql-tools/url-loader@8.0.33(@types/node@24.10.1)(graphql@16.11.0)": dependencies: - '@graphql-tools/executor-graphql-ws': 2.0.7(graphql@16.11.0) - '@graphql-tools/executor-http': 1.3.3(@types/node@24.10.1)(graphql@16.11.0) - '@graphql-tools/executor-legacy-ws': 1.1.19(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@graphql-tools/wrap': 10.1.4(graphql@16.11.0) - '@types/ws': 8.18.1 - '@whatwg-node/fetch': 0.10.11 - '@whatwg-node/promise-helpers': 1.3.2 + "@graphql-tools/executor-graphql-ws": 2.0.7(graphql@16.11.0) + "@graphql-tools/executor-http": 1.3.3(@types/node@24.10.1)(graphql@16.11.0) + "@graphql-tools/executor-legacy-ws": 1.1.19(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + "@graphql-tools/wrap": 10.1.4(graphql@16.11.0) + "@types/ws": 8.18.1 + "@whatwg-node/fetch": 0.10.11 + "@whatwg-node/promise-helpers": 1.3.2 graphql: 16.11.0 isomorphic-ws: 5.0.0(ws@8.18.3) sync-fetch: 0.6.0-2 tslib: 2.8.1 ws: 8.18.3 transitivePeerDependencies: - - '@fastify/websocket' - - '@types/node' + - "@fastify/websocket" + - "@types/node" - bufferutil - crossws - uWebSockets.js - utf-8-validate - '@graphql-tools/utils@10.9.1(graphql@16.11.0)': + "@graphql-tools/utils@10.9.1(graphql@16.11.0)": dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) - '@whatwg-node/promise-helpers': 1.3.2 + "@graphql-typed-document-node/core": 3.2.0(graphql@16.11.0) + "@whatwg-node/promise-helpers": 1.3.2 cross-inspect: 1.0.1 dset: 3.1.4 graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/wrap@10.1.4(graphql@16.11.0)': + "@graphql-tools/wrap@10.1.4(graphql@16.11.0)": dependencies: - '@graphql-tools/delegate': 10.2.23(graphql@16.11.0) - '@graphql-tools/schema': 10.0.25(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@whatwg-node/promise-helpers': 1.3.2 + "@graphql-tools/delegate": 10.2.23(graphql@16.11.0) + "@graphql-tools/schema": 10.0.25(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + "@whatwg-node/promise-helpers": 1.3.2 graphql: 16.11.0 tslib: 2.8.1 - '@graphql-typed-document-node/core@3.2.0(graphql@16.11.0)': + "@graphql-typed-document-node/core@3.2.0(graphql@16.11.0)": dependencies: graphql: 16.11.0 - '@graphql-yoga/logger@2.0.1': + "@graphql-yoga/logger@2.0.1": dependencies: tslib: 2.8.1 - '@graphql-yoga/subscription@5.0.5': + "@graphql-yoga/subscription@5.0.5": dependencies: - '@graphql-yoga/typed-event-target': 3.0.2 - '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/events': 0.1.2 + "@graphql-yoga/typed-event-target": 3.0.2 + "@repeaterjs/repeater": 3.0.6 + "@whatwg-node/events": 0.1.2 tslib: 2.8.1 - '@graphql-yoga/typed-event-target@3.0.2': + "@graphql-yoga/typed-event-target@3.0.2": dependencies: - '@repeaterjs/repeater': 3.0.6 + "@repeaterjs/repeater": 3.0.6 tslib: 2.8.1 - '@inquirer/ansi@1.0.1': {} + "@img/colour@1.0.0": + optional: true + + "@img/sharp-darwin-arm64@0.34.5": + optionalDependencies: + "@img/sharp-libvips-darwin-arm64": 1.2.4 + optional: true + + "@img/sharp-darwin-x64@0.34.5": + optionalDependencies: + "@img/sharp-libvips-darwin-x64": 1.2.4 + optional: true + + "@img/sharp-libvips-darwin-arm64@1.2.4": + optional: true + + "@img/sharp-libvips-darwin-x64@1.2.4": + optional: true + + "@img/sharp-libvips-linux-arm64@1.2.4": + optional: true + + "@img/sharp-libvips-linux-arm@1.2.4": + optional: true + + "@img/sharp-libvips-linux-ppc64@1.2.4": + optional: true + + "@img/sharp-libvips-linux-riscv64@1.2.4": + optional: true + + "@img/sharp-libvips-linux-s390x@1.2.4": + optional: true + + "@img/sharp-libvips-linux-x64@1.2.4": + optional: true + + "@img/sharp-libvips-linuxmusl-arm64@1.2.4": + optional: true + + "@img/sharp-libvips-linuxmusl-x64@1.2.4": + optional: true - '@inquirer/checkbox@4.3.0(@types/node@24.10.1)': + "@img/sharp-linux-arm64@0.34.5": + optionalDependencies: + "@img/sharp-libvips-linux-arm64": 1.2.4 + optional: true + + "@img/sharp-linux-arm@0.34.5": + optionalDependencies: + "@img/sharp-libvips-linux-arm": 1.2.4 + optional: true + + "@img/sharp-linux-ppc64@0.34.5": + optionalDependencies: + "@img/sharp-libvips-linux-ppc64": 1.2.4 + optional: true + + "@img/sharp-linux-riscv64@0.34.5": + optionalDependencies: + "@img/sharp-libvips-linux-riscv64": 1.2.4 + optional: true + + "@img/sharp-linux-s390x@0.34.5": + optionalDependencies: + "@img/sharp-libvips-linux-s390x": 1.2.4 + optional: true + + "@img/sharp-linux-x64@0.34.5": + optionalDependencies: + "@img/sharp-libvips-linux-x64": 1.2.4 + optional: true + + "@img/sharp-linuxmusl-arm64@0.34.5": + optionalDependencies: + "@img/sharp-libvips-linuxmusl-arm64": 1.2.4 + optional: true + + "@img/sharp-linuxmusl-x64@0.34.5": + optionalDependencies: + "@img/sharp-libvips-linuxmusl-x64": 1.2.4 + optional: true + + "@img/sharp-wasm32@0.34.5": dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@24.10.1) - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@24.10.1) + "@emnapi/runtime": 1.8.1 + optional: true + + "@img/sharp-win32-arm64@0.34.5": + optional: true + + "@img/sharp-win32-ia32@0.34.5": + optional: true + + "@img/sharp-win32-x64@0.34.5": + optional: true + + "@inquirer/ansi@1.0.1": {} + + "@inquirer/checkbox@4.3.0(@types/node@24.10.1)": + dependencies: + "@inquirer/ansi": 1.0.1 + "@inquirer/core": 10.3.0(@types/node@24.10.1) + "@inquirer/figures": 1.0.14 + "@inquirer/type": 3.0.9(@types/node@24.10.1) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.10.1 + "@types/node": 24.10.1 - '@inquirer/confirm@5.1.19(@types/node@24.10.1)': + "@inquirer/confirm@5.1.19(@types/node@24.10.1)": dependencies: - '@inquirer/core': 10.3.0(@types/node@24.10.1) - '@inquirer/type': 3.0.9(@types/node@24.10.1) + "@inquirer/core": 10.3.0(@types/node@24.10.1) + "@inquirer/type": 3.0.9(@types/node@24.10.1) optionalDependencies: - '@types/node': 24.10.1 + "@types/node": 24.10.1 - '@inquirer/core@10.3.0(@types/node@24.10.1)': + "@inquirer/core@10.3.0(@types/node@24.10.1)": dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@24.10.1) + "@inquirer/ansi": 1.0.1 + "@inquirer/figures": 1.0.14 + "@inquirer/type": 3.0.9(@types/node@24.10.1) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.10.1 + "@types/node": 24.10.1 - '@inquirer/editor@4.2.21(@types/node@24.10.1)': + "@inquirer/editor@4.2.21(@types/node@24.10.1)": dependencies: - '@inquirer/core': 10.3.0(@types/node@24.10.1) - '@inquirer/external-editor': 1.0.2(@types/node@24.10.1) - '@inquirer/type': 3.0.9(@types/node@24.10.1) + "@inquirer/core": 10.3.0(@types/node@24.10.1) + "@inquirer/external-editor": 1.0.2(@types/node@24.10.1) + "@inquirer/type": 3.0.9(@types/node@24.10.1) optionalDependencies: - '@types/node': 24.10.1 + "@types/node": 24.10.1 - '@inquirer/expand@4.0.21(@types/node@24.10.1)': + "@inquirer/expand@4.0.21(@types/node@24.10.1)": dependencies: - '@inquirer/core': 10.3.0(@types/node@24.10.1) - '@inquirer/type': 3.0.9(@types/node@24.10.1) + "@inquirer/core": 10.3.0(@types/node@24.10.1) + "@inquirer/type": 3.0.9(@types/node@24.10.1) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.10.1 + "@types/node": 24.10.1 - '@inquirer/external-editor@1.0.2(@types/node@24.10.1)': + "@inquirer/external-editor@1.0.2(@types/node@24.10.1)": dependencies: chardet: 2.1.0 iconv-lite: 0.7.0 optionalDependencies: - '@types/node': 24.10.1 + "@types/node": 24.10.1 - '@inquirer/figures@1.0.14': {} + "@inquirer/figures@1.0.14": {} - '@inquirer/input@4.2.5(@types/node@24.10.1)': + "@inquirer/input@4.2.5(@types/node@24.10.1)": dependencies: - '@inquirer/core': 10.3.0(@types/node@24.10.1) - '@inquirer/type': 3.0.9(@types/node@24.10.1) + "@inquirer/core": 10.3.0(@types/node@24.10.1) + "@inquirer/type": 3.0.9(@types/node@24.10.1) optionalDependencies: - '@types/node': 24.10.1 + "@types/node": 24.10.1 - '@inquirer/number@3.0.21(@types/node@24.10.1)': + "@inquirer/number@3.0.21(@types/node@24.10.1)": dependencies: - '@inquirer/core': 10.3.0(@types/node@24.10.1) - '@inquirer/type': 3.0.9(@types/node@24.10.1) + "@inquirer/core": 10.3.0(@types/node@24.10.1) + "@inquirer/type": 3.0.9(@types/node@24.10.1) optionalDependencies: - '@types/node': 24.10.1 + "@types/node": 24.10.1 - '@inquirer/password@4.0.21(@types/node@24.10.1)': + "@inquirer/password@4.0.21(@types/node@24.10.1)": dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@24.10.1) - '@inquirer/type': 3.0.9(@types/node@24.10.1) + "@inquirer/ansi": 1.0.1 + "@inquirer/core": 10.3.0(@types/node@24.10.1) + "@inquirer/type": 3.0.9(@types/node@24.10.1) optionalDependencies: - '@types/node': 24.10.1 - - '@inquirer/prompts@7.9.0(@types/node@24.10.1)': - dependencies: - '@inquirer/checkbox': 4.3.0(@types/node@24.10.1) - '@inquirer/confirm': 5.1.19(@types/node@24.10.1) - '@inquirer/editor': 4.2.21(@types/node@24.10.1) - '@inquirer/expand': 4.0.21(@types/node@24.10.1) - '@inquirer/input': 4.2.5(@types/node@24.10.1) - '@inquirer/number': 3.0.21(@types/node@24.10.1) - '@inquirer/password': 4.0.21(@types/node@24.10.1) - '@inquirer/rawlist': 4.1.9(@types/node@24.10.1) - '@inquirer/search': 3.2.0(@types/node@24.10.1) - '@inquirer/select': 4.4.0(@types/node@24.10.1) + "@types/node": 24.10.1 + + "@inquirer/prompts@7.9.0(@types/node@24.10.1)": + dependencies: + "@inquirer/checkbox": 4.3.0(@types/node@24.10.1) + "@inquirer/confirm": 5.1.19(@types/node@24.10.1) + "@inquirer/editor": 4.2.21(@types/node@24.10.1) + "@inquirer/expand": 4.0.21(@types/node@24.10.1) + "@inquirer/input": 4.2.5(@types/node@24.10.1) + "@inquirer/number": 3.0.21(@types/node@24.10.1) + "@inquirer/password": 4.0.21(@types/node@24.10.1) + "@inquirer/rawlist": 4.1.9(@types/node@24.10.1) + "@inquirer/search": 3.2.0(@types/node@24.10.1) + "@inquirer/select": 4.4.0(@types/node@24.10.1) optionalDependencies: - '@types/node': 24.10.1 + "@types/node": 24.10.1 - '@inquirer/rawlist@4.1.9(@types/node@24.10.1)': + "@inquirer/rawlist@4.1.9(@types/node@24.10.1)": dependencies: - '@inquirer/core': 10.3.0(@types/node@24.10.1) - '@inquirer/type': 3.0.9(@types/node@24.10.1) + "@inquirer/core": 10.3.0(@types/node@24.10.1) + "@inquirer/type": 3.0.9(@types/node@24.10.1) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.10.1 + "@types/node": 24.10.1 - '@inquirer/search@3.2.0(@types/node@24.10.1)': + "@inquirer/search@3.2.0(@types/node@24.10.1)": dependencies: - '@inquirer/core': 10.3.0(@types/node@24.10.1) - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@24.10.1) + "@inquirer/core": 10.3.0(@types/node@24.10.1) + "@inquirer/figures": 1.0.14 + "@inquirer/type": 3.0.9(@types/node@24.10.1) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.10.1 + "@types/node": 24.10.1 - '@inquirer/select@4.4.0(@types/node@24.10.1)': + "@inquirer/select@4.4.0(@types/node@24.10.1)": dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@24.10.1) - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@24.10.1) + "@inquirer/ansi": 1.0.1 + "@inquirer/core": 10.3.0(@types/node@24.10.1) + "@inquirer/figures": 1.0.14 + "@inquirer/type": 3.0.9(@types/node@24.10.1) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.10.1 + "@types/node": 24.10.1 - '@inquirer/type@3.0.9(@types/node@24.10.1)': + "@inquirer/type@3.0.9(@types/node@24.10.1)": optionalDependencies: - '@types/node': 24.10.1 + "@types/node": 24.10.1 - '@jridgewell/gen-mapping@0.3.13': + "@jridgewell/gen-mapping@0.3.13": dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 + "@jridgewell/sourcemap-codec": 1.5.5 + "@jridgewell/trace-mapping": 0.3.31 - '@jridgewell/remapping@2.3.5': + "@jridgewell/remapping@2.3.5": dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 + "@jridgewell/gen-mapping": 0.3.13 + "@jridgewell/trace-mapping": 0.3.31 - '@jridgewell/resolve-uri@3.1.2': {} + "@jridgewell/resolve-uri@3.1.2": {} - '@jridgewell/sourcemap-codec@1.5.5': {} + "@jridgewell/sourcemap-codec@1.5.5": {} - '@jridgewell/trace-mapping@0.3.31': + "@jridgewell/trace-mapping@0.3.31": dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 + "@jridgewell/resolve-uri": 3.1.2 + "@jridgewell/sourcemap-codec": 1.5.5 + + "@next/env@15.5.12": {} + + "@next/swc-darwin-arm64@15.5.12": + optional: true + + "@next/swc-darwin-x64@15.5.12": + optional: true + + "@next/swc-linux-arm64-gnu@15.5.12": + optional: true + + "@next/swc-linux-arm64-musl@15.5.12": + optional: true + + "@next/swc-linux-x64-gnu@15.5.12": + optional: true + + "@next/swc-linux-x64-musl@15.5.12": + optional: true + + "@next/swc-win32-arm64-msvc@15.5.12": + optional: true + + "@next/swc-win32-x64-msvc@15.5.12": + optional: true - '@nodelib/fs.scandir@2.1.5': + "@nodelib/fs.scandir@2.1.5": dependencies: - '@nodelib/fs.stat': 2.0.5 + "@nodelib/fs.stat": 2.0.5 run-parallel: 1.2.0 - '@nodelib/fs.stat@2.0.5': {} + "@nodelib/fs.stat@2.0.5": {} - '@nodelib/fs.walk@1.2.8': + "@nodelib/fs.walk@1.2.8": dependencies: - '@nodelib/fs.scandir': 2.1.5 + "@nodelib/fs.scandir": 2.1.5 fastq: 1.19.1 - '@oxlint/darwin-arm64@1.30.0': + "@oxlint/darwin-arm64@1.30.0": optional: true - '@oxlint/darwin-x64@1.30.0': + "@oxlint/darwin-x64@1.30.0": optional: true - '@oxlint/linux-arm64-gnu@1.30.0': + "@oxlint/linux-arm64-gnu@1.30.0": optional: true - '@oxlint/linux-arm64-musl@1.30.0': + "@oxlint/linux-arm64-musl@1.30.0": optional: true - '@oxlint/linux-x64-gnu@1.30.0': + "@oxlint/linux-x64-gnu@1.30.0": optional: true - '@oxlint/linux-x64-musl@1.30.0': + "@oxlint/linux-x64-musl@1.30.0": optional: true - '@oxlint/win32-arm64@1.30.0': + "@oxlint/win32-arm64@1.30.0": optional: true - '@oxlint/win32-x64@1.30.0': + "@oxlint/win32-x64@1.30.0": optional: true - '@polka/url@1.0.0-next.29': {} + "@polka/url@1.0.0-next.29": {} - '@repeaterjs/repeater@3.0.6': {} + "@repeaterjs/repeater@3.0.6": {} - '@rollup/rollup-android-arm-eabi@4.53.3': + "@rollup/rollup-android-arm-eabi@4.53.3": optional: true - '@rollup/rollup-android-arm64@4.53.3': + "@rollup/rollup-android-arm64@4.53.3": optional: true - '@rollup/rollup-darwin-arm64@4.53.3': + "@rollup/rollup-darwin-arm64@4.53.3": optional: true - '@rollup/rollup-darwin-x64@4.53.3': + "@rollup/rollup-darwin-x64@4.53.3": optional: true - '@rollup/rollup-freebsd-arm64@4.53.3': + "@rollup/rollup-freebsd-arm64@4.53.3": optional: true - '@rollup/rollup-freebsd-x64@4.53.3': + "@rollup/rollup-freebsd-x64@4.53.3": optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + "@rollup/rollup-linux-arm-gnueabihf@4.53.3": optional: true - '@rollup/rollup-linux-arm-musleabihf@4.53.3': + "@rollup/rollup-linux-arm-musleabihf@4.53.3": optional: true - '@rollup/rollup-linux-arm64-gnu@4.53.3': + "@rollup/rollup-linux-arm64-gnu@4.53.3": optional: true - '@rollup/rollup-linux-arm64-musl@4.53.3': + "@rollup/rollup-linux-arm64-musl@4.53.3": optional: true - '@rollup/rollup-linux-loong64-gnu@4.53.3': + "@rollup/rollup-linux-loong64-gnu@4.53.3": optional: true - '@rollup/rollup-linux-ppc64-gnu@4.53.3': + "@rollup/rollup-linux-ppc64-gnu@4.53.3": optional: true - '@rollup/rollup-linux-riscv64-gnu@4.53.3': + "@rollup/rollup-linux-riscv64-gnu@4.53.3": optional: true - '@rollup/rollup-linux-riscv64-musl@4.53.3': + "@rollup/rollup-linux-riscv64-musl@4.53.3": optional: true - '@rollup/rollup-linux-s390x-gnu@4.53.3': + "@rollup/rollup-linux-s390x-gnu@4.53.3": optional: true - '@rollup/rollup-linux-x64-gnu@4.53.3': + "@rollup/rollup-linux-x64-gnu@4.53.3": optional: true - '@rollup/rollup-linux-x64-musl@4.53.3': + "@rollup/rollup-linux-x64-musl@4.53.3": optional: true - '@rollup/rollup-openharmony-arm64@4.53.3': + "@rollup/rollup-openharmony-arm64@4.53.3": optional: true - '@rollup/rollup-win32-arm64-msvc@4.53.3': + "@rollup/rollup-win32-arm64-msvc@4.53.3": optional: true - '@rollup/rollup-win32-ia32-msvc@4.53.3': + "@rollup/rollup-win32-ia32-msvc@4.53.3": optional: true - '@rollup/rollup-win32-x64-gnu@4.53.3': + "@rollup/rollup-win32-x64-gnu@4.53.3": optional: true - '@rollup/rollup-win32-x64-msvc@4.53.3': + "@rollup/rollup-win32-x64-msvc@4.53.3": optional: true - '@standard-schema/spec@1.0.0': {} + "@standard-schema/spec@1.0.0": {} + + "@swc/helpers@0.5.15": + dependencies: + tslib: 2.8.1 - '@theguild/federation-composition@0.20.2(graphql@16.11.0)': + "@tailwindcss/node@4.1.18": + dependencies: + "@jridgewell/remapping": 2.3.5 + enhanced-resolve: 5.19.0 + jiti: 2.6.1 + lightningcss: 1.30.2 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.1.18 + + "@tailwindcss/oxide-android-arm64@4.1.18": + optional: true + + "@tailwindcss/oxide-darwin-arm64@4.1.18": + optional: true + + "@tailwindcss/oxide-darwin-x64@4.1.18": + optional: true + + "@tailwindcss/oxide-freebsd-x64@4.1.18": + optional: true + + "@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18": + optional: true + + "@tailwindcss/oxide-linux-arm64-gnu@4.1.18": + optional: true + + "@tailwindcss/oxide-linux-arm64-musl@4.1.18": + optional: true + + "@tailwindcss/oxide-linux-x64-gnu@4.1.18": + optional: true + + "@tailwindcss/oxide-linux-x64-musl@4.1.18": + optional: true + + "@tailwindcss/oxide-wasm32-wasi@4.1.18": + optional: true + + "@tailwindcss/oxide-win32-arm64-msvc@4.1.18": + optional: true + + "@tailwindcss/oxide-win32-x64-msvc@4.1.18": + optional: true + + "@tailwindcss/oxide@4.1.18": + optionalDependencies: + "@tailwindcss/oxide-android-arm64": 4.1.18 + "@tailwindcss/oxide-darwin-arm64": 4.1.18 + "@tailwindcss/oxide-darwin-x64": 4.1.18 + "@tailwindcss/oxide-freebsd-x64": 4.1.18 + "@tailwindcss/oxide-linux-arm-gnueabihf": 4.1.18 + "@tailwindcss/oxide-linux-arm64-gnu": 4.1.18 + "@tailwindcss/oxide-linux-arm64-musl": 4.1.18 + "@tailwindcss/oxide-linux-x64-gnu": 4.1.18 + "@tailwindcss/oxide-linux-x64-musl": 4.1.18 + "@tailwindcss/oxide-wasm32-wasi": 4.1.18 + "@tailwindcss/oxide-win32-arm64-msvc": 4.1.18 + "@tailwindcss/oxide-win32-x64-msvc": 4.1.18 + + "@tailwindcss/postcss@4.1.18": + dependencies: + "@alloc/quick-lru": 5.2.0 + "@tailwindcss/node": 4.1.18 + "@tailwindcss/oxide": 4.1.18 + postcss: 8.5.6 + tailwindcss: 4.1.18 + + "@theguild/federation-composition@0.20.2(graphql@16.11.0)": dependencies: constant-case: 3.0.4 debug: 4.4.3 @@ -3375,27 +6011,42 @@ snapshots: transitivePeerDependencies: - supports-color - '@types/chai@5.2.3': + "@types/chai@5.2.3": dependencies: - '@types/deep-eql': 4.0.2 + "@types/deep-eql": 4.0.2 assertion-error: 2.0.1 - '@types/deep-eql@4.0.2': {} + "@types/deep-eql@4.0.2": {} - '@types/estree@1.0.8': {} + "@types/estree@1.0.8": {} - '@types/node@24.10.1': + "@types/node@24.10.1": dependencies: undici-types: 7.16.0 - '@types/ws@8.18.1': + "@types/react-dom@19.2.3(@types/react@19.2.14)": + dependencies: + "@types/react": 19.2.14 + + "@types/react@19.2.14": dependencies: - '@types/node': 24.10.1 + csstype: 3.2.3 - '@vitest/coverage-v8@4.0.14(vitest@4.0.14)': + "@types/ws@8.18.1": dependencies: - '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.0.14 + "@types/node": 24.10.1 + + "@urql/core@6.0.1(graphql@16.11.0)": + dependencies: + "@0no-co/graphql.web": 1.2.0(graphql@16.11.0) + wonka: 6.3.5 + transitivePeerDependencies: + - graphql + + "@vitest/coverage-v8@4.0.14(vitest@4.0.14)": + dependencies: + "@bcoe/v8-coverage": 1.0.2 + "@vitest/utils": 4.0.14 ast-v8-to-istanbul: 0.3.8 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 @@ -3405,91 +6056,91 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.14(@types/node@24.10.1)(@vitest/ui@4.0.14)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.1) + vitest: 4.0.14(@types/node@24.10.1)(@vitest/ui@4.0.14)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@vitest/expect@4.0.14': + "@vitest/expect@4.0.14": dependencies: - '@standard-schema/spec': 1.0.0 - '@types/chai': 5.2.3 - '@vitest/spy': 4.0.14 - '@vitest/utils': 4.0.14 + "@standard-schema/spec": 1.0.0 + "@types/chai": 5.2.3 + "@vitest/spy": 4.0.14 + "@vitest/utils": 4.0.14 chai: 6.2.1 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.14(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.1))': + "@vitest/mocker@4.0.14(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))": dependencies: - '@vitest/spy': 4.0.14 + "@vitest/spy": 4.0.14 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) - '@vitest/pretty-format@4.0.14': + "@vitest/pretty-format@4.0.14": dependencies: tinyrainbow: 3.0.3 - '@vitest/runner@4.0.14': + "@vitest/runner@4.0.14": dependencies: - '@vitest/utils': 4.0.14 + "@vitest/utils": 4.0.14 pathe: 2.0.3 - '@vitest/snapshot@4.0.14': + "@vitest/snapshot@4.0.14": dependencies: - '@vitest/pretty-format': 4.0.14 + "@vitest/pretty-format": 4.0.14 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.0.14': {} + "@vitest/spy@4.0.14": {} - '@vitest/ui@4.0.14(vitest@4.0.14)': + "@vitest/ui@4.0.14(vitest@4.0.14)": dependencies: - '@vitest/utils': 4.0.14 + "@vitest/utils": 4.0.14 fflate: 0.8.2 flatted: 3.3.3 pathe: 2.0.3 sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.14(@types/node@24.10.1)(@vitest/ui@4.0.14)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.1) + vitest: 4.0.14(@types/node@24.10.1)(@vitest/ui@4.0.14)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) - '@vitest/utils@4.0.14': + "@vitest/utils@4.0.14": dependencies: - '@vitest/pretty-format': 4.0.14 + "@vitest/pretty-format": 4.0.14 tinyrainbow: 3.0.3 - '@whatwg-node/disposablestack@0.0.6': + "@whatwg-node/disposablestack@0.0.6": dependencies: - '@whatwg-node/promise-helpers': 1.3.2 + "@whatwg-node/promise-helpers": 1.3.2 tslib: 2.8.1 - '@whatwg-node/events@0.1.2': + "@whatwg-node/events@0.1.2": dependencies: tslib: 2.8.1 - '@whatwg-node/fetch@0.10.11': + "@whatwg-node/fetch@0.10.11": dependencies: - '@whatwg-node/node-fetch': 0.8.1 + "@whatwg-node/node-fetch": 0.8.1 urlpattern-polyfill: 10.1.0 - '@whatwg-node/node-fetch@0.8.1': + "@whatwg-node/node-fetch@0.8.1": dependencies: - '@fastify/busboy': 3.2.0 - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/promise-helpers': 1.3.2 + "@fastify/busboy": 3.2.0 + "@whatwg-node/disposablestack": 0.0.6 + "@whatwg-node/promise-helpers": 1.3.2 tslib: 2.8.1 - '@whatwg-node/promise-helpers@1.3.2': + "@whatwg-node/promise-helpers@1.3.2": dependencies: tslib: 2.8.1 - '@whatwg-node/server@0.10.13': + "@whatwg-node/server@0.10.13": dependencies: - '@envelop/instrumentation': 1.0.0 - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/fetch': 0.10.11 - '@whatwg-node/promise-helpers': 1.3.2 + "@envelop/instrumentation": 1.0.0 + "@whatwg-node/disposablestack": 0.0.6 + "@whatwg-node/fetch": 0.10.11 + "@whatwg-node/promise-helpers": 1.3.2 tslib: 2.8.1 ansi-escapes@7.1.1: @@ -3516,7 +6167,7 @@ snapshots: ast-v8-to-istanbul@0.3.8: dependencies: - '@jridgewell/trace-mapping': 0.3.31 + "@jridgewell/trace-mapping": 0.3.31 estree-walker: 3.0.3 js-tokens: 9.0.1 @@ -3602,6 +6253,10 @@ snapshots: dependencies: consola: 3.4.2 + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -3613,12 +6268,16 @@ snapshots: cli-width@4.1.0: {} + client-only@0.0.1: {} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + clsx@2.1.1: {} + color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -3671,6 +6330,8 @@ snapshots: dependencies: tslib: 2.8.1 + csstype@3.2.3: {} + data-uri-to-buffer@4.0.1: {} dataloader@2.2.3: {} @@ -3683,10 +6344,14 @@ snapshots: defu@6.1.4: {} + dependency-graph@0.11.0: {} + dependency-graph@1.0.0: {} detect-indent@6.1.0: {} + detect-libc@2.1.2: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -3704,6 +6369,11 @@ snapshots: emoji-regex@8.0.0: {} + enhanced-resolve@5.19.0: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.0 + env-paths@2.2.1: {} environment@1.1.0: {} @@ -3716,67 +6386,67 @@ snapshots: esbuild@0.25.11: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.11 - '@esbuild/android-arm': 0.25.11 - '@esbuild/android-arm64': 0.25.11 - '@esbuild/android-x64': 0.25.11 - '@esbuild/darwin-arm64': 0.25.11 - '@esbuild/darwin-x64': 0.25.11 - '@esbuild/freebsd-arm64': 0.25.11 - '@esbuild/freebsd-x64': 0.25.11 - '@esbuild/linux-arm': 0.25.11 - '@esbuild/linux-arm64': 0.25.11 - '@esbuild/linux-ia32': 0.25.11 - '@esbuild/linux-loong64': 0.25.11 - '@esbuild/linux-mips64el': 0.25.11 - '@esbuild/linux-ppc64': 0.25.11 - '@esbuild/linux-riscv64': 0.25.11 - '@esbuild/linux-s390x': 0.25.11 - '@esbuild/linux-x64': 0.25.11 - '@esbuild/netbsd-arm64': 0.25.11 - '@esbuild/netbsd-x64': 0.25.11 - '@esbuild/openbsd-arm64': 0.25.11 - '@esbuild/openbsd-x64': 0.25.11 - '@esbuild/openharmony-arm64': 0.25.11 - '@esbuild/sunos-x64': 0.25.11 - '@esbuild/win32-arm64': 0.25.11 - '@esbuild/win32-ia32': 0.25.11 - '@esbuild/win32-x64': 0.25.11 + "@esbuild/aix-ppc64": 0.25.11 + "@esbuild/android-arm": 0.25.11 + "@esbuild/android-arm64": 0.25.11 + "@esbuild/android-x64": 0.25.11 + "@esbuild/darwin-arm64": 0.25.11 + "@esbuild/darwin-x64": 0.25.11 + "@esbuild/freebsd-arm64": 0.25.11 + "@esbuild/freebsd-x64": 0.25.11 + "@esbuild/linux-arm": 0.25.11 + "@esbuild/linux-arm64": 0.25.11 + "@esbuild/linux-ia32": 0.25.11 + "@esbuild/linux-loong64": 0.25.11 + "@esbuild/linux-mips64el": 0.25.11 + "@esbuild/linux-ppc64": 0.25.11 + "@esbuild/linux-riscv64": 0.25.11 + "@esbuild/linux-s390x": 0.25.11 + "@esbuild/linux-x64": 0.25.11 + "@esbuild/netbsd-arm64": 0.25.11 + "@esbuild/netbsd-x64": 0.25.11 + "@esbuild/openbsd-arm64": 0.25.11 + "@esbuild/openbsd-x64": 0.25.11 + "@esbuild/openharmony-arm64": 0.25.11 + "@esbuild/sunos-x64": 0.25.11 + "@esbuild/win32-arm64": 0.25.11 + "@esbuild/win32-ia32": 0.25.11 + "@esbuild/win32-x64": 0.25.11 esbuild@0.25.12: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.12 - '@esbuild/android-arm': 0.25.12 - '@esbuild/android-arm64': 0.25.12 - '@esbuild/android-x64': 0.25.12 - '@esbuild/darwin-arm64': 0.25.12 - '@esbuild/darwin-x64': 0.25.12 - '@esbuild/freebsd-arm64': 0.25.12 - '@esbuild/freebsd-x64': 0.25.12 - '@esbuild/linux-arm': 0.25.12 - '@esbuild/linux-arm64': 0.25.12 - '@esbuild/linux-ia32': 0.25.12 - '@esbuild/linux-loong64': 0.25.12 - '@esbuild/linux-mips64el': 0.25.12 - '@esbuild/linux-ppc64': 0.25.12 - '@esbuild/linux-riscv64': 0.25.12 - '@esbuild/linux-s390x': 0.25.12 - '@esbuild/linux-x64': 0.25.12 - '@esbuild/netbsd-arm64': 0.25.12 - '@esbuild/netbsd-x64': 0.25.12 - '@esbuild/openbsd-arm64': 0.25.12 - '@esbuild/openbsd-x64': 0.25.12 - '@esbuild/openharmony-arm64': 0.25.12 - '@esbuild/sunos-x64': 0.25.12 - '@esbuild/win32-arm64': 0.25.12 - '@esbuild/win32-ia32': 0.25.12 - '@esbuild/win32-x64': 0.25.12 + "@esbuild/aix-ppc64": 0.25.12 + "@esbuild/android-arm": 0.25.12 + "@esbuild/android-arm64": 0.25.12 + "@esbuild/android-x64": 0.25.12 + "@esbuild/darwin-arm64": 0.25.12 + "@esbuild/darwin-x64": 0.25.12 + "@esbuild/freebsd-arm64": 0.25.12 + "@esbuild/freebsd-x64": 0.25.12 + "@esbuild/linux-arm": 0.25.12 + "@esbuild/linux-arm64": 0.25.12 + "@esbuild/linux-ia32": 0.25.12 + "@esbuild/linux-loong64": 0.25.12 + "@esbuild/linux-mips64el": 0.25.12 + "@esbuild/linux-ppc64": 0.25.12 + "@esbuild/linux-riscv64": 0.25.12 + "@esbuild/linux-s390x": 0.25.12 + "@esbuild/linux-x64": 0.25.12 + "@esbuild/netbsd-arm64": 0.25.12 + "@esbuild/netbsd-x64": 0.25.12 + "@esbuild/openbsd-arm64": 0.25.12 + "@esbuild/openbsd-x64": 0.25.12 + "@esbuild/openharmony-arm64": 0.25.12 + "@esbuild/sunos-x64": 0.25.12 + "@esbuild/win32-arm64": 0.25.12 + "@esbuild/win32-ia32": 0.25.12 + "@esbuild/win32-x64": 0.25.12 escalade@3.2.0: {} estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.8 + "@types/estree": 1.0.8 eventemitter3@5.0.1: {} @@ -3786,12 +6456,14 @@ snapshots: fast-glob@3.3.3: dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 + "@nodelib/fs.stat": 2.0.5 + "@nodelib/fs.walk": 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 + fast-json-patch@3.1.1: {} + fastq@1.19.1: dependencies: reusify: 1.1.0 @@ -3870,14 +6542,16 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 + graceful-fs@4.2.11: {} + graphql-config@5.1.5(@types/node@24.10.1)(graphql@16.11.0)(typescript@5.9.3): dependencies: - '@graphql-tools/graphql-file-loader': 8.1.2(graphql@16.11.0) - '@graphql-tools/json-file-loader': 8.0.20(graphql@16.11.0) - '@graphql-tools/load': 8.1.2(graphql@16.11.0) - '@graphql-tools/merge': 9.1.1(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.33(@types/node@24.10.1)(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + "@graphql-tools/graphql-file-loader": 8.1.2(graphql@16.11.0) + "@graphql-tools/json-file-loader": 8.0.20(graphql@16.11.0) + "@graphql-tools/load": 8.1.2(graphql@16.11.0) + "@graphql-tools/merge": 9.1.1(graphql@16.11.0) + "@graphql-tools/url-loader": 8.0.33(@types/node@24.10.1)(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) cosmiconfig: 8.3.6(typescript@5.9.3) graphql: 16.11.0 jiti: 2.6.1 @@ -3885,8 +6559,8 @@ snapshots: string-env-interpolation: 1.0.1 tslib: 2.8.1 transitivePeerDependencies: - - '@fastify/websocket' - - '@types/node' + - "@fastify/websocket" + - "@types/node" - bufferutil - crossws - supports-color @@ -3907,16 +6581,16 @@ snapshots: graphql-yoga@5.16.0(graphql@16.11.0): dependencies: - '@envelop/core': 5.3.2 - '@envelop/instrumentation': 1.0.0 - '@graphql-tools/executor': 1.4.9(graphql@16.11.0) - '@graphql-tools/schema': 10.0.25(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@graphql-yoga/logger': 2.0.1 - '@graphql-yoga/subscription': 5.0.5 - '@whatwg-node/fetch': 0.10.11 - '@whatwg-node/promise-helpers': 1.3.2 - '@whatwg-node/server': 0.10.13 + "@envelop/core": 5.3.2 + "@envelop/instrumentation": 1.0.0 + "@graphql-tools/executor": 1.4.9(graphql@16.11.0) + "@graphql-tools/schema": 10.0.25(graphql@16.11.0) + "@graphql-tools/utils": 10.9.1(graphql@16.11.0) + "@graphql-yoga/logger": 2.0.1 + "@graphql-yoga/subscription": 5.0.5 + "@whatwg-node/fetch": 0.10.11 + "@whatwg-node/promise-helpers": 1.3.2 + "@whatwg-node/server": 0.10.13 dset: 3.1.4 graphql: 16.11.0 lru-cache: 10.4.3 @@ -4009,7 +6683,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: - '@jridgewell/trace-mapping': 0.3.31 + "@jridgewell/trace-mapping": 0.3.31 debug: 4.4.3 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: @@ -4041,6 +6715,55 @@ snapshots: json5@2.2.3: {} + lightningcss-android-arm64@1.30.2: + optional: true + + lightningcss-darwin-arm64@1.30.2: + optional: true + + lightningcss-darwin-x64@1.30.2: + optional: true + + lightningcss-freebsd-x64@1.30.2: + optional: true + + lightningcss-linux-arm-gnueabihf@1.30.2: + optional: true + + lightningcss-linux-arm64-gnu@1.30.2: + optional: true + + lightningcss-linux-arm64-musl@1.30.2: + optional: true + + lightningcss-linux-x64-gnu@1.30.2: + optional: true + + lightningcss-linux-x64-musl@1.30.2: + optional: true + + lightningcss-win32-arm64-msvc@1.30.2: + optional: true + + lightningcss-win32-x64-msvc@1.30.2: + optional: true + + lightningcss@1.30.2: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.30.2 + lightningcss-darwin-arm64: 1.30.2 + lightningcss-darwin-x64: 1.30.2 + lightningcss-freebsd-x64: 1.30.2 + lightningcss-linux-arm-gnueabihf: 1.30.2 + lightningcss-linux-arm64-gnu: 1.30.2 + lightningcss-linux-arm64-musl: 1.30.2 + lightningcss-linux-x64-gnu: 1.30.2 + lightningcss-linux-x64-musl: 1.30.2 + lightningcss-win32-arm64-msvc: 1.30.2 + lightningcss-win32-x64-msvc: 1.30.2 + lines-and-columns@1.2.4: {} lint-staged@16.2.7: @@ -4097,14 +6820,18 @@ snapshots: dependencies: yallist: 3.1.1 + lucide-react@0.474.0(react@19.2.4): + dependencies: + react: 19.2.4 + magic-string@0.30.21: dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 + "@jridgewell/sourcemap-codec": 1.5.5 magicast@0.5.1: dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + "@babel/parser": 7.28.5 + "@babel/types": 7.28.5 source-map-js: 1.2.1 make-dir@4.0.0: @@ -4117,7 +6844,7 @@ snapshots: meros@1.3.2(@types/node@24.10.1): optionalDependencies: - '@types/node': 24.10.1 + "@types/node": 24.10.1 micromatch@4.0.8: dependencies: @@ -4140,6 +6867,29 @@ snapshots: nanoid@3.3.11: {} + next@15.5.12(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + dependencies: + "@next/env": 15.5.12 + "@swc/helpers": 0.5.15 + caniuse-lite: 1.0.30001751 + postcss: 8.4.31 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + styled-jsx: 5.1.6(react@19.2.4) + optionalDependencies: + "@next/swc-darwin-arm64": 15.5.12 + "@next/swc-darwin-x64": 15.5.12 + "@next/swc-linux-arm64-gnu": 15.5.12 + "@next/swc-linux-arm64-musl": 15.5.12 + "@next/swc-linux-x64-gnu": 15.5.12 + "@next/swc-linux-x64-musl": 15.5.12 + "@next/swc-win32-arm64-msvc": 15.5.12 + "@next/swc-win32-x64-msvc": 15.5.12 + sharp: 0.34.5 + transitivePeerDependencies: + - "@babel/core" + - babel-plugin-macros + no-case@3.0.4: dependencies: lower-case: 2.0.2 @@ -4187,14 +6937,14 @@ snapshots: oxlint@1.30.0: optionalDependencies: - '@oxlint/darwin-arm64': 1.30.0 - '@oxlint/darwin-x64': 1.30.0 - '@oxlint/linux-arm64-gnu': 1.30.0 - '@oxlint/linux-arm64-musl': 1.30.0 - '@oxlint/linux-x64-gnu': 1.30.0 - '@oxlint/linux-x64-musl': 1.30.0 - '@oxlint/win32-arm64': 1.30.0 - '@oxlint/win32-x64': 1.30.0 + "@oxlint/darwin-arm64": 1.30.0 + "@oxlint/darwin-x64": 1.30.0 + "@oxlint/linux-arm64-gnu": 1.30.0 + "@oxlint/linux-arm64-musl": 1.30.0 + "@oxlint/linux-x64-gnu": 1.30.0 + "@oxlint/linux-x64-musl": 1.30.0 + "@oxlint/win32-arm64": 1.30.0 + "@oxlint/win32-x64": 1.30.0 p-limit@3.1.0: dependencies: @@ -4217,7 +6967,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.27.1 + "@babel/code-frame": 7.27.1 error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -4256,6 +7006,12 @@ snapshots: exsolve: 1.0.7 pathe: 2.0.3 + postcss@8.4.31: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postcss@8.5.6: dependencies: nanoid: 3.3.11 @@ -4270,9 +7026,16 @@ snapshots: queue-microtask@1.2.3: {} + react-dom@19.2.4(react@19.2.4): + dependencies: + react: 19.2.4 + scheduler: 0.27.0 + + react@19.2.4: {} + relay-runtime@12.0.0: dependencies: - '@babel/runtime': 7.28.4 + "@babel/runtime": 7.28.4 fbjs: 3.0.5 invariant: 2.2.4 transitivePeerDependencies: @@ -4303,30 +7066,30 @@ snapshots: rollup@4.53.3: dependencies: - '@types/estree': 1.0.8 + "@types/estree": 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.53.3 - '@rollup/rollup-android-arm64': 4.53.3 - '@rollup/rollup-darwin-arm64': 4.53.3 - '@rollup/rollup-darwin-x64': 4.53.3 - '@rollup/rollup-freebsd-arm64': 4.53.3 - '@rollup/rollup-freebsd-x64': 4.53.3 - '@rollup/rollup-linux-arm-gnueabihf': 4.53.3 - '@rollup/rollup-linux-arm-musleabihf': 4.53.3 - '@rollup/rollup-linux-arm64-gnu': 4.53.3 - '@rollup/rollup-linux-arm64-musl': 4.53.3 - '@rollup/rollup-linux-loong64-gnu': 4.53.3 - '@rollup/rollup-linux-ppc64-gnu': 4.53.3 - '@rollup/rollup-linux-riscv64-gnu': 4.53.3 - '@rollup/rollup-linux-riscv64-musl': 4.53.3 - '@rollup/rollup-linux-s390x-gnu': 4.53.3 - '@rollup/rollup-linux-x64-gnu': 4.53.3 - '@rollup/rollup-linux-x64-musl': 4.53.3 - '@rollup/rollup-openharmony-arm64': 4.53.3 - '@rollup/rollup-win32-arm64-msvc': 4.53.3 - '@rollup/rollup-win32-ia32-msvc': 4.53.3 - '@rollup/rollup-win32-x64-gnu': 4.53.3 - '@rollup/rollup-win32-x64-msvc': 4.53.3 + "@rollup/rollup-android-arm-eabi": 4.53.3 + "@rollup/rollup-android-arm64": 4.53.3 + "@rollup/rollup-darwin-arm64": 4.53.3 + "@rollup/rollup-darwin-x64": 4.53.3 + "@rollup/rollup-freebsd-arm64": 4.53.3 + "@rollup/rollup-freebsd-x64": 4.53.3 + "@rollup/rollup-linux-arm-gnueabihf": 4.53.3 + "@rollup/rollup-linux-arm-musleabihf": 4.53.3 + "@rollup/rollup-linux-arm64-gnu": 4.53.3 + "@rollup/rollup-linux-arm64-musl": 4.53.3 + "@rollup/rollup-linux-loong64-gnu": 4.53.3 + "@rollup/rollup-linux-ppc64-gnu": 4.53.3 + "@rollup/rollup-linux-riscv64-gnu": 4.53.3 + "@rollup/rollup-linux-riscv64-musl": 4.53.3 + "@rollup/rollup-linux-s390x-gnu": 4.53.3 + "@rollup/rollup-linux-x64-gnu": 4.53.3 + "@rollup/rollup-linux-x64-musl": 4.53.3 + "@rollup/rollup-openharmony-arm64": 4.53.3 + "@rollup/rollup-win32-arm64-msvc": 4.53.3 + "@rollup/rollup-win32-ia32-msvc": 4.53.3 + "@rollup/rollup-win32-x64-gnu": 4.53.3 + "@rollup/rollup-win32-x64-msvc": 4.53.3 fsevents: 2.3.3 run-parallel@1.2.0: @@ -4335,6 +7098,8 @@ snapshots: safer-buffer@2.1.2: {} + scheduler@0.27.0: {} + semver@6.3.1: {} semver@7.7.3: {} @@ -4347,6 +7112,38 @@ snapshots: setimmediate@1.0.5: {} + sharp@0.34.5: + dependencies: + "@img/colour": 1.0.0 + detect-libc: 2.1.2 + semver: 7.7.3 + optionalDependencies: + "@img/sharp-darwin-arm64": 0.34.5 + "@img/sharp-darwin-x64": 0.34.5 + "@img/sharp-libvips-darwin-arm64": 1.2.4 + "@img/sharp-libvips-darwin-x64": 1.2.4 + "@img/sharp-libvips-linux-arm": 1.2.4 + "@img/sharp-libvips-linux-arm64": 1.2.4 + "@img/sharp-libvips-linux-ppc64": 1.2.4 + "@img/sharp-libvips-linux-riscv64": 1.2.4 + "@img/sharp-libvips-linux-s390x": 1.2.4 + "@img/sharp-libvips-linux-x64": 1.2.4 + "@img/sharp-libvips-linuxmusl-arm64": 1.2.4 + "@img/sharp-libvips-linuxmusl-x64": 1.2.4 + "@img/sharp-linux-arm": 0.34.5 + "@img/sharp-linux-arm64": 0.34.5 + "@img/sharp-linux-ppc64": 0.34.5 + "@img/sharp-linux-riscv64": 0.34.5 + "@img/sharp-linux-s390x": 0.34.5 + "@img/sharp-linux-x64": 0.34.5 + "@img/sharp-linuxmusl-arm64": 0.34.5 + "@img/sharp-linuxmusl-x64": 0.34.5 + "@img/sharp-wasm32": 0.34.5 + "@img/sharp-win32-arm64": 0.34.5 + "@img/sharp-win32-ia32": 0.34.5 + "@img/sharp-win32-x64": 0.34.5 + optional: true + shell-quote@1.8.3: {} siginfo@2.0.0: {} @@ -4357,7 +7154,7 @@ snapshots: sirv@3.0.2: dependencies: - '@polka/url': 1.0.0-next.29 + "@polka/url": 1.0.0-next.29 mrmime: 2.0.1 totalist: 3.0.1 @@ -4412,6 +7209,11 @@ snapshots: dependencies: ansi-regex: 6.2.2 + styled-jsx@5.1.6(react@19.2.4): + dependencies: + client-only: 0.0.1 + react: 19.2.4 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -4426,6 +7228,12 @@ snapshots: timeout-signal: 2.0.0 whatwg-mimetype: 4.0.0 + tailwind-merge@3.4.0: {} + + tailwindcss@4.1.18: {} + + tapable@2.3.0: {} + timeout-signal@2.0.0: {} tinybench@2.9.0: {} @@ -4521,7 +7329,13 @@ snapshots: urlpattern-polyfill@10.1.0: {} - vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.1): + urql@5.0.1(@urql/core@6.0.1(graphql@16.11.0))(react@19.2.4): + dependencies: + "@urql/core": 6.0.1(graphql@16.11.0) + react: 19.2.4 + wonka: 6.3.5 + + vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) @@ -4530,21 +7344,22 @@ snapshots: rollup: 4.53.3 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.10.1 + "@types/node": 24.10.1 fsevents: 2.3.3 jiti: 2.6.1 + lightningcss: 1.30.2 tsx: 4.20.6 yaml: 2.8.1 - vitest@4.0.14(@types/node@24.10.1)(@vitest/ui@4.0.14)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.1): + vitest@4.0.14(@types/node@24.10.1)(@vitest/ui@4.0.14)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1): dependencies: - '@vitest/expect': 4.0.14 - '@vitest/mocker': 4.0.14(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.1)) - '@vitest/pretty-format': 4.0.14 - '@vitest/runner': 4.0.14 - '@vitest/snapshot': 4.0.14 - '@vitest/spy': 4.0.14 - '@vitest/utils': 4.0.14 + "@vitest/expect": 4.0.14 + "@vitest/mocker": 4.0.14(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)) + "@vitest/pretty-format": 4.0.14 + "@vitest/runner": 4.0.14 + "@vitest/snapshot": 4.0.14 + "@vitest/spy": 4.0.14 + "@vitest/utils": 4.0.14 es-module-lexer: 1.7.0 expect-type: 1.2.2 magic-string: 0.30.21 @@ -4556,11 +7371,11 @@ snapshots: tinyexec: 0.3.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 24.10.1 - '@vitest/ui': 4.0.14(vitest@4.0.14) + "@types/node": 24.10.1 + "@vitest/ui": 4.0.14(vitest@4.0.14) transitivePeerDependencies: - jiti - less @@ -4590,6 +7405,8 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 + wonka@6.3.5: {} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 diff --git a/turbo.json b/turbo.json index 3064c6c..799dc0a 100644 --- a/turbo.json +++ b/turbo.json @@ -4,14 +4,18 @@ "tasks": { "build": { "dependsOn": ["^build"], - "outputs": ["dist/**"] + "outputs": ["dist/**", ".next/**"] + }, + "dev": { + "cache": false, + "persistent": true }, "type-check": { "dependsOn": ["^build"], "outputs": [] }, "lint": { - "outputs": [], + "outputs": [], "dependsOn": [] }, "format": { @@ -25,7 +29,7 @@ "persistent": true }, "codegen": { - "outputs": ["src/schema/types.generated.ts"] + "outputs": ["src/schema/types.generated.ts", "src/graphql/generated/**"] }, "codegen:watch": { "cache": false,