From 32ab1b34cc1d390456dac19ba5ba7db94c3514a9 Mon Sep 17 00:00:00 2001
From: sembauke
Date: Sat, 14 Feb 2026 10:35:40 +0100
Subject: [PATCH 1/3] feat(turbo): enhance build outputs and add dev task
configuration
- Updated build task to include outputs from the .next directory.
- Introduced a new dev task with caching disabled and persistent mode enabled.
- Modified codegen task to include additional generated files from the GraphQL schema.
---
packages/studio/.prettierrc | 7 +
packages/studio/README.md | 159 +
packages/studio/codegen.ts | 21 +
packages/studio/next-env.d.ts | 6 +
packages/studio/next.config.ts | 7 +
packages/studio/package.json | 42 +
packages/studio/postcss.config.mjs | 8 +
.../src/app/blocks/[dashedName]/page.tsx | 338 +
.../studio/src/app/challenges/[id]/page.tsx | 155 +
packages/studio/src/app/drafts/page.tsx | 97 +
packages/studio/src/app/globals.css | 29 +
packages/studio/src/app/layout.tsx | 28 +
packages/studio/src/app/page.tsx | 108 +
.../src/app/superblocks/[dashedName]/page.tsx | 158 +
.../studio/src/components/breadcrumbs.tsx | 33 +
.../studio/src/components/challenge-table.tsx | 121 +
.../studio/src/components/diff-viewer.tsx | 78 +
.../studio/src/components/draft-indicator.tsx | 23 +
packages/studio/src/components/providers.tsx | 8 +
packages/studio/src/components/sidebar.tsx | 89 +
packages/studio/src/components/ui/badge.tsx | 34 +
packages/studio/src/components/ui/button.tsx | 45 +
packages/studio/src/components/ui/card.tsx | 32 +
packages/studio/src/components/ui/input.tsx | 31 +
packages/studio/src/components/ui/select.tsx | 44 +
packages/studio/src/graphql/queries.ts | 87 +
packages/studio/src/graphql/types.ts | 124 +
.../studio/src/lib/__tests__/drafts.test.ts | 243 +
packages/studio/src/lib/drafts.ts | 121 +
packages/studio/src/lib/urql.ts | 11 +
packages/studio/src/lib/use-draft.ts | 142 +
packages/studio/src/lib/utils.ts | 40 +
packages/studio/src/lib/validation.ts | 47 +
packages/studio/tsconfig.json | 28 +
packages/studio/vitest.config.ts | 13 +
pnpm-lock.yaml | 6231 ++++++++++++-----
turbo.json | 10 +-
37 files changed, 7088 insertions(+), 1710 deletions(-)
create mode 100644 packages/studio/.prettierrc
create mode 100644 packages/studio/README.md
create mode 100644 packages/studio/codegen.ts
create mode 100644 packages/studio/next-env.d.ts
create mode 100644 packages/studio/next.config.ts
create mode 100644 packages/studio/package.json
create mode 100644 packages/studio/postcss.config.mjs
create mode 100644 packages/studio/src/app/blocks/[dashedName]/page.tsx
create mode 100644 packages/studio/src/app/challenges/[id]/page.tsx
create mode 100644 packages/studio/src/app/drafts/page.tsx
create mode 100644 packages/studio/src/app/globals.css
create mode 100644 packages/studio/src/app/layout.tsx
create mode 100644 packages/studio/src/app/page.tsx
create mode 100644 packages/studio/src/app/superblocks/[dashedName]/page.tsx
create mode 100644 packages/studio/src/components/breadcrumbs.tsx
create mode 100644 packages/studio/src/components/challenge-table.tsx
create mode 100644 packages/studio/src/components/diff-viewer.tsx
create mode 100644 packages/studio/src/components/draft-indicator.tsx
create mode 100644 packages/studio/src/components/providers.tsx
create mode 100644 packages/studio/src/components/sidebar.tsx
create mode 100644 packages/studio/src/components/ui/badge.tsx
create mode 100644 packages/studio/src/components/ui/button.tsx
create mode 100644 packages/studio/src/components/ui/card.tsx
create mode 100644 packages/studio/src/components/ui/input.tsx
create mode 100644 packages/studio/src/components/ui/select.tsx
create mode 100644 packages/studio/src/graphql/queries.ts
create mode 100644 packages/studio/src/graphql/types.ts
create mode 100644 packages/studio/src/lib/__tests__/drafts.test.ts
create mode 100644 packages/studio/src/lib/drafts.ts
create mode 100644 packages/studio/src/lib/urql.ts
create mode 100644 packages/studio/src/lib/use-draft.ts
create mode 100644 packages/studio/src/lib/utils.ts
create mode 100644 packages/studio/src/lib/validation.ts
create mode 100644 packages/studio/tsconfig.json
create mode 100644 packages/studio/vitest.config.ts
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..d8c650a
--- /dev/null
+++ b/packages/studio/codegen.ts
@@ -0,0 +1,21 @@
+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,
+ 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..9cccf17
--- /dev/null
+++ b/packages/studio/src/app/blocks/[dashedName]/page.tsx
@@ -0,0 +1,338 @@
+'use client';
+
+import { useState, useRef, use } 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 { 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 { data, fetching, error: queryError } = result;
+
+ if (fetching) {
+ return (
+
+ );
+ }
+
+ if (queryError) {
+ return (
+
+
Error: {queryError.message}
+
+ );
+ }
+
+ if (!data?.block || !draft.edited) {
+ return (
+
+ );
+ }
+
+ const block = draft.edited;
+ const parentSuperblock = block.superblocks[0];
+
+ function getFieldError(field: string): string | undefined {
+ return errors.find((e) => e.field === field)?.message;
+ }
+
+ function handleSave() {
+ const validationErrors = validateBlock(block);
+ setErrors(validationErrors);
+ if (validationErrors.length > 0) return;
+ draft.save();
+ }
+
+ function handleExport() {
+ 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 = '';
+ }
+
+ const titleErrors = new Map();
+ for (const err of errors) {
+ if (err.field.startsWith('challenge:')) {
+ titleErrors.set(err.field.replace('challenge:', ''), err.message);
+ }
+ }
+
+ 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')}
+ />
+
+
+
+
+
+ {/* 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)}
+ />
+
+ )}
+
+ );
+}
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..45ae780
--- /dev/null
+++ b/packages/studio/src/app/challenges/[id]/page.tsx
@@ -0,0 +1,155 @@
+'use client';
+
+import { use } 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 { 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 { fetching, error: queryError } = result;
+
+ if (fetching) {
+ return (
+
+ );
+ }
+
+ if (queryError) {
+ return (
+
+
Error: {queryError.message}
+
+ );
+ }
+
+ if (!original || !draft.edited) {
+ return (
+
+ );
+ }
+
+ const challenge = draft.edited;
+ const titleErrors = validateChallengeTitle(challenge.title);
+
+ function handleSave() {
+ if (titleErrors.length > 0) return;
+ draft.save();
+ }
+
+ return (
+
+
+
+
+
{challenge.title}
+
+
+
+
+
+ Challenge Metadata
+
+
+
+
+
+ {challenge.id}
+
+
+
+
+ draft.updateEdited((prev) => ({
+ ...prev,
+ title: e.target.value,
+ }))
+ }
+ error={titleErrors[0]?.message}
+ />
+
+
+
+
+
+ {challenge.block.name}
+
+
+
+
+
+
+
+
+ Content
+
+
+
+
+ Content not available in MVP
+
+
+ Challenge content (description, instructions, tests) will be
+ available in a future version.
+
+
+
+
+
+
+
+
+
+
+ );
+}
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]/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 (
+
+ );
+ }
+
+ 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}
+
+
+
+
+ setLayoutFilter(e.target.value)}
+ options={[
+ { value: '', label: 'All layouts' },
+ ...BLOCK_LAYOUTS.map((v) => ({ value: v, label: v })),
+ ]}
+ />
+ setLabelFilter(e.target.value)}
+ options={[
+ { value: '', label: 'All labels' },
+ ...BLOCK_LABELS.map((v) => ({ value: v, label: v })),
+ ]}
+ />
+ setUpcomingFilter(e.target.value)}
+ options={[
+ { value: '', label: 'All' },
+ { value: 'true', label: 'Yes' },
+ { value: 'false', label: 'No' },
+ ]}
+ />
+
+
+
+ {blocks.map((block) => (
+
+
+ {block.name}
+
+ {block.dashedName}
+
+
+
+ {block.blockLayout}
+ {block.blockLabel && (
+ {block.blockLabel}
+ )}
+ {block.isUpcomingChange && (
+ Upcoming
+ )}
+
+
+ ))}
+ {blocks.length === 0 && (
+
+ No blocks match the current filters
+
+ )}
+
+
+ );
+}
diff --git a/packages/studio/src/components/breadcrumbs.tsx b/packages/studio/src/components/breadcrumbs.tsx
new file mode 100644
index 0000000..ce97a71
--- /dev/null
+++ b/packages/studio/src/components/breadcrumbs.tsx
@@ -0,0 +1,33 @@
+import Link from 'next/link';
+import { ChevronRight } from 'lucide-react';
+
+export interface BreadcrumbItem {
+ label: string;
+ href?: string;
+}
+
+interface BreadcrumbsProps {
+ items: BreadcrumbItem[];
+}
+
+export function Breadcrumbs({ items }: BreadcrumbsProps) {
+ return (
+
+ );
+}
diff --git a/packages/studio/src/components/challenge-table.tsx b/packages/studio/src/components/challenge-table.tsx
new file mode 100644
index 0000000..a00a998
--- /dev/null
+++ b/packages/studio/src/components/challenge-table.tsx
@@ -0,0 +1,121 @@
+'use client';
+
+import Link from 'next/link';
+import type { ChallengeOrderEntry } from '@/graphql/types';
+import { Button } from '@/components/ui/button';
+import { ArrowUp, ArrowDown, ExternalLink } from 'lucide-react';
+
+interface ChallengeTableProps {
+ challenges: ChallengeOrderEntry[];
+ onChange: (challenges: ChallengeOrderEntry[]) => void;
+ titleErrors: Map;
+}
+
+export function ChallengeTable({
+ challenges,
+ onChange,
+ titleErrors,
+}: ChallengeTableProps) {
+ function moveUp(index: number) {
+ if (index === 0) return;
+ const next = [...challenges];
+ const item = next[index]!;
+ next[index] = next[index - 1]!;
+ next[index - 1] = item;
+ onChange(next);
+ }
+
+ function moveDown(index: number) {
+ if (index >= challenges.length - 1) return;
+ const next = [...challenges];
+ const item = next[index]!;
+ next[index] = next[index + 1]!;
+ next[index + 1] = item;
+ onChange(next);
+ }
+
+ function updateTitle(index: number, title: string) {
+ const next = challenges.map((c, i) => (i === index ? { ...c, title } : c));
+ onChange(next);
+ }
+
+ return (
+
+
+
+
+ | # |
+ ID |
+ Title |
+ Actions |
+
+
+
+ {challenges.map((challenge, index) => {
+ const error = titleErrors.get(challenge.id);
+ return (
+
+ | {index + 1} |
+
+
+ {challenge.id}
+
+ |
+
+ 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/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..5059e8a
--- /dev/null
+++ b/packages/studio/src/components/sidebar.tsx
@@ -0,0 +1,89 @@
+'use client';
+
+import { useState } from 'react';
+import Link from 'next/link';
+import { usePathname } from 'next/navigation';
+import { useQuery } from 'urql';
+import { SUPERBLOCKS_QUERY } from '@/graphql/queries';
+import type { SuperblockListResult } from '@/graphql/types';
+import { Badge } from '@/components/ui/badge';
+import { cn } from '@/lib/utils';
+import { BookOpen, FileText, Search } from 'lucide-react';
+
+export function Sidebar() {
+ const [search, setSearch] = useState('');
+ const [result] = useQuery({
+ query: SUPERBLOCKS_QUERY,
+ });
+ const pathname = usePathname();
+
+ const superblocks = result.data?.superblocks ?? [];
+ const filtered = superblocks.filter((sb) =>
+ sb.name.toLowerCase().includes(search.toLowerCase())
+ );
+
+ 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..991df99
--- /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 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: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) => (
+
+ )
+);
+Button.displayName = 'Button';
diff --git a/packages/studio/src/components/ui/card.tsx b/packages/studio/src/components/ui/card.tsx
new file mode 100644
index 0000000..0ff9bce
--- /dev/null
+++ b/packages/studio/src/components/ui/card.tsx
@@ -0,0 +1,32 @@
+import { cn } from '@/lib/utils';
+
+export function Card({
+ className,
+ ...props
+}: React.HTMLAttributes) {
+ return (
+
+ );
+}
+
+export function CardHeader({
+ className,
+ ...props
+}: React.HTMLAttributes) {
+ return (
+
+ );
+}
+
+export function CardContent({
+ className,
+ ...props
+}: React.HTMLAttributes) {
+ return ;
+}
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 && (
+
+ )}
+
+ {placeholder && (
+
+ )}
+ {options.map((opt) => (
+
+ ))}
+
+ {error &&
{error}
}
+
+ )
+);
+Select.displayName = 'Select';
diff --git a/packages/studio/src/graphql/queries.ts b/packages/studio/src/graphql/queries.ts
new file mode 100644
index 0000000..09cd79a
--- /dev/null
+++ b/packages/studio/src/graphql/queries.ts
@@ -0,0 +1,87 @@
+import { gql } from 'urql';
+
+export const SUPERBLOCKS_QUERY = gql`
+ query Superblocks {
+ superblocks {
+ name
+ dashedName
+ isCertification
+ }
+ }
+`;
+
+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 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
+ }
+ }
+ }
+`;
diff --git a/packages/studio/src/graphql/types.ts b/packages/studio/src/graphql/types.ts
new file mode 100644
index 0000000..87ac75a
--- /dev/null
+++ b/packages/studio/src/graphql/types.ts
@@ -0,0 +1,124 @@
+export type BlockLayout =
+ | 'LINK'
+ | 'CHALLENGE_LIST'
+ | 'CHALLENGE_GRID'
+ | 'DIALOGUE_GRID'
+ | 'PROJECT_LIST'
+ | 'LEGACY_CHALLENGE_LIST'
+ | 'LEGACY_CHALLENGE_GRID'
+ | 'LEGACY_LINK';
+
+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 =
+ | 'LECTURE'
+ | 'LAB'
+ | 'WORKSHOP'
+ | 'REVIEW'
+ | 'QUIZ'
+ | 'EXAM'
+ | 'WARM_UP'
+ | 'PRACTICE'
+ | 'LEARN';
+
+export const BLOCK_LABELS: BlockLabel[] = [
+ 'LECTURE',
+ 'LAB',
+ 'WORKSHOP',
+ 'REVIEW',
+ 'QUIZ',
+ 'EXAM',
+ 'WARM_UP',
+ 'PRACTICE',
+ 'LEARN',
+];
+
+export interface SuperblockListItem {
+ name: string;
+ dashedName: string;
+ isCertification: boolean;
+}
+
+export interface SuperblockDetail {
+ name: string;
+ dashedName: string;
+ isCertification: boolean;
+ blocks: string[];
+ blockObjects: BlockListItem[];
+}
+
+export interface BlockListItem {
+ name: string;
+ dashedName: string;
+ helpCategory: string;
+ blockLayout: BlockLayout;
+ blockLabel: BlockLabel | null;
+ isUpcomingChange: boolean;
+}
+
+export interface BlockDetail {
+ name: string;
+ dashedName: string;
+ helpCategory: string;
+ blockLayout: BlockLayout;
+ blockLabel: BlockLabel | null;
+ isUpcomingChange: boolean;
+ usesMultifileEditor: boolean | null;
+ hasEditableBoundaries: boolean | null;
+ challengeOrder: ChallengeOrderEntry[];
+ superblocks: SuperblockRef[];
+}
+
+export interface SuperblockRef {
+ name: string;
+ dashedName: string;
+}
+
+export interface ChallengeOrderEntry {
+ id: string;
+ title: string;
+}
+
+export interface ChallengeDetail {
+ id: string;
+ title: string;
+ block: {
+ name: string;
+ dashedName: string;
+ };
+ content: { description: string } | null;
+}
+
+export interface CurriculumOverviewResult {
+ curriculum: {
+ superblocks: string[];
+ certifications: string[];
+ };
+ superblocks: Array;
+ certifications: Array<{ dashedName: string }>;
+}
+
+export interface SuperblockListResult {
+ superblocks: SuperblockListItem[];
+}
+
+export interface SuperblockDetailResult {
+ superblock: SuperblockDetail | null;
+}
+
+export interface BlockDetailResult {
+ block: BlockDetail | null;
+}
+
+export interface ChallengeDetailResult {
+ challenge: ChallengeDetail | null;
+}
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/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..4607827
--- /dev/null
+++ b/packages/studio/src/lib/use-draft.ts
@@ -0,0 +1,142 @@
+'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: () => void;
+ 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(() => {
+ if (!original || !edited) return;
+ const patch = compare(
+ original as Record,
+ edited as Record
+ );
+ if (patch.length === 0) return;
+ const record = {
+ updatedAt: new Date().toISOString(),
+ originalHash: hashObject(original),
+ patch,
+ };
+ localStorage.setItem(getDraftKey(type, id), JSON.stringify(record));
+ setHasSavedDraft(true);
+ setHasUnsavedChanges(false);
+ }, [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/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,
From bbfbb35a102af13d308af0e7997429a6369d2313 Mon Sep 17 00:00:00 2001
From: sembauke
Date: Sat, 14 Feb 2026 12:33:43 +0100
Subject: [PATCH 2/3] feat(ui): add flash message and confirm modal components;
enhance sidebar navigation and module detail pages
---
.../src/app/blocks/[dashedName]/page.tsx | 93 ++++++-
.../studio/src/app/challenges/[id]/page.tsx | 78 +++++-
.../src/app/modules/[dashedName]/page.tsx | 153 +++++++++++
packages/studio/src/components/sidebar.tsx | 247 +++++++++++++++--
packages/studio/src/components/ui/button.tsx | 2 +-
.../src/components/ui/confirm-modal.tsx | 71 +++++
.../src/components/ui/flash-message.tsx | 39 +++
packages/studio/src/graphql/queries.ts | 54 ++++
packages/studio/src/graphql/types.ts | 38 +++
packages/studio/src/lib/sidebar-nav.ts | 257 ++++++++++++++++++
packages/studio/src/lib/use-draft.ts | 9 +-
11 files changed, 997 insertions(+), 44 deletions(-)
create mode 100644 packages/studio/src/app/modules/[dashedName]/page.tsx
create mode 100644 packages/studio/src/components/ui/confirm-modal.tsx
create mode 100644 packages/studio/src/components/ui/flash-message.tsx
create mode 100644 packages/studio/src/lib/sidebar-nav.ts
diff --git a/packages/studio/src/app/blocks/[dashedName]/page.tsx b/packages/studio/src/app/blocks/[dashedName]/page.tsx
index 9cccf17..1d582cb 100644
--- a/packages/studio/src/app/blocks/[dashedName]/page.tsx
+++ b/packages/studio/src/app/blocks/[dashedName]/page.tsx
@@ -1,6 +1,6 @@
'use client';
-import { useState, useRef, use } from 'react';
+import { useState, useRef, use, useEffect } from 'react';
import Link from 'next/link';
import { useQuery } from 'urql';
import { BLOCK_DETAIL_QUERY } from '@/graphql/queries';
@@ -13,6 +13,11 @@ 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';
@@ -36,9 +41,24 @@ export default function BlockDetailPage({
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 (
@@ -70,14 +90,47 @@ export default function BlockDetailPage({
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;
- draft.save();
+
+ 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' });
@@ -100,12 +153,20 @@ export default function BlockDetailPage({
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 (
@@ -280,13 +341,7 @@ export default function BlockDetailPage({
Save Draft
-
-
+
Export Patch
@@ -333,6 +392,20 @@ export default function BlockDetailPage({
/>
)}
+
+ setIsDiscardModalOpen(false)}
+ onConfirm={handleDiscardConfirm}
+ />
+
+
);
}
diff --git a/packages/studio/src/app/challenges/[id]/page.tsx b/packages/studio/src/app/challenges/[id]/page.tsx
index 45ae780..f52d183 100644
--- a/packages/studio/src/app/challenges/[id]/page.tsx
+++ b/packages/studio/src/app/challenges/[id]/page.tsx
@@ -1,6 +1,6 @@
'use client';
-import { use } from 'react';
+import { use, useEffect, useRef, useState } from 'react';
import Link from 'next/link';
import { useQuery } from 'urql';
import { CHALLENGE_DETAIL_QUERY } from '@/graphql/queries';
@@ -10,6 +10,11 @@ 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';
@@ -27,9 +32,24 @@ export default function ChallengeDetailPage({
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 (
@@ -57,9 +77,47 @@ export default function ChallengeDetailPage({
const challenge = draft.edited;
const titleErrors = validateChallengeTitle(challenge.title);
+ 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;
- draft.save();
+
+ 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 (
@@ -145,11 +203,25 @@ export default function ChallengeDetailPage({
Save Draft
-
+ setIsDiscardModalOpen(true)}>
Discard Changes
+
+ setIsDiscardModalOpen(false)}
+ onConfirm={handleDiscardConfirm}
+ />
+
+
);
}
diff --git a/packages/studio/src/app/modules/[dashedName]/page.tsx b/packages/studio/src/app/modules/[dashedName]/page.tsx
new file mode 100644
index 0000000..1ee4227
--- /dev/null
+++ b/packages/studio/src/app/modules/[dashedName]/page.tsx
@@ -0,0 +1,153 @@
+'use client';
+
+import { use } from 'react';
+import Link from 'next/link';
+import { useSearchParams } from 'next/navigation';
+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(' ');
+}
+
+export default function ModuleDetailPage({
+ params,
+}: {
+ params: Promise<{ dashedName: string }>;
+}) {
+ const { dashedName } = use(params);
+ const searchParams = useSearchParams();
+ const selectedSuperblock = searchParams.get('superblock');
+ const selectedChapter = searchParams.get('chapter');
+
+ const [result] = useQuery({
+ query: MODULE_DETAIL_QUERY,
+ variables: {
+ superblockDashedName: selectedSuperblock || undefined,
+ chapterDashedName: selectedChapter || undefined,
+ },
+ });
+
+ const matches = (result.data?.modules ?? []).filter(
+ (module) => module.dashedName === dashedName
+ );
+ const moduleMatch = matches[0] ?? null;
+ const totalMatches = matches.length;
+ const fetching = result.fetching;
+ const error = result.error;
+
+ if (fetching) {
+ return (
+
+ );
+ }
+
+ if (error) {
+ return (
+
+
Error: {error.message}
+
+ );
+ }
+
+ if (!moduleMatch) {
+ return (
+
+ );
+ }
+
+ 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/sidebar.tsx b/packages/studio/src/components/sidebar.tsx
index 5059e8a..4d24992 100644
--- a/packages/studio/src/components/sidebar.tsx
+++ b/packages/studio/src/components/sidebar.tsx
@@ -1,25 +1,96 @@
'use client';
-import { useState } from 'react';
+import { useMemo, useState } from 'react';
import Link from 'next/link';
import { usePathname } from 'next/navigation';
import { useQuery } from 'urql';
-import { SUPERBLOCKS_QUERY } from '@/graphql/queries';
-import type { SuperblockListResult } from '@/graphql/types';
+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 { BookOpen, FileText, Search } from 'lucide-react';
+import {
+ buildSidebarTree,
+ filterSidebarTree,
+ 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 [result] = useQuery({
- query: SUPERBLOCKS_QUERY,
+ const [expandedCertifications, setExpandedCertifications] = useState<
+ Record
+ >({});
+ const [expandedChapters, setExpandedChapters] = useState<
+ Record
+ >({});
+ const [result] = useQuery({
+ query: SIDEBAR_NAV_QUERY,
});
const pathname = usePathname();
- const superblocks = result.data?.superblocks ?? [];
- const filtered = superblocks.filter((sb) =>
- sb.name.toLowerCase().includes(search.toLowerCase())
+ 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 = (dashedName: string) =>
+ pathname === `/modules/${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 (
@@ -38,7 +109,7 @@ export function Sidebar() {
type="text"
value={search}
onChange={(e) => setSearch(e.target.value)}
- placeholder="Search superblocks..."
+ placeholder="Search certifications and superblocks..."
className="w-full rounded-md border border-border bg-background py-2 pl-9 pr-3 text-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/20"
/>
@@ -53,23 +124,147 @@ export function Sidebar() {
Failed to load superblocks
)}
- {filtered.map((sb) => (
-
- {sb.name}
- {sb.isCertification && (
-
- Cert
-
+
+ {filteredTree.certifications.length > 0 && (
+ <>
+
+ Certifications
+
+ {filteredTree.certifications.map((certification) => {
+ const hasActiveDescendant =
+ certification.structure === 'chaptered'
+ ? isSuperblockActive(certification.dashedName) ||
+ certification.visibleChapters.some((chapter) =>
+ chapter.visibleModules.some((module) =>
+ isModuleActive(module.dashedName)
+ )
+ )
+ : certification.visibleSuperblocks.some((superblock) =>
+ isSuperblockActive(superblock.dashedName)
+ );
+
+ const isExpanded =
+ normalizedSearch.length > 0
+ ? true
+ : (expandedCertifications[certification.id] ??
+ hasActiveDescendant);
+
+ return (
+
+
+ setExpandedCertifications((prev) => ({
+ ...prev,
+ [certification.id]: !(
+ prev[certification.id] ?? hasActiveDescendant
+ ),
+ }))
+ }
+ className={cn(
+ 'flex w-full items-center gap-2 rounded-md px-3 py-2 text-sm transition-colors hover:bg-accent',
+ hasActiveDescendant && 'bg-accent'
+ )}
+ >
+
+
+
+ {certification.name}
+
+
+ {certification.structure === 'chaptered'
+ ? 'Chapter based'
+ : 'Superblock based'}
+
+
+
+
+ {isExpanded && certification.structure === 'chaptered' && (
+
+ {certification.visibleChapters.map((chapter) => {
+ const hasActiveModule = chapter.visibleModules.some(
+ (module) => isModuleActive(module.dashedName)
+ );
+ const chapterExpanded =
+ normalizedSearch.length > 0
+ ? true
+ : (expandedChapters[chapter.id] ?? hasActiveModule);
+
+ return (
+
+
+ setExpandedChapters((prev) => ({
+ ...prev,
+ [chapter.id]: !(
+ prev[chapter.id] ?? hasActiveModule
+ ),
+ }))
+ }
+ className={cn(
+ 'flex w-full items-center gap-2 rounded-md px-3 py-2 text-sm transition-colors hover:bg-accent',
+ hasActiveModule && 'bg-accent'
+ )}
+ >
+
+
+ {chapter.name}
+
+
+
+ {chapterExpanded && (
+
+ {chapter.visibleModules.map((module) =>
+ renderModuleItem(module)
+ )}
+
+ )}
+
+ );
+ })}
+
+ )}
+
+ {isExpanded && certification.structure === 'superblocks' && (
+
+ {certification.visibleSuperblocks.map((superblock) =>
+ renderSuperblockLink(superblock)
+ )}
+
+ )}
+
+ );
+ })}
+ >
+ )}
+
+ {filteredTree.otherSuperblocks.length > 0 && (
+ <>
+
+ Superblocks
+
+ {filteredTree.otherSuperblocks.map((superblock) =>
+ renderSuperblockLink(superblock)
)}
-
- ))}
+ >
+ )}
+
+ {hasNoMatches && (
+
+ No matches found
+
+ )}
diff --git a/packages/studio/src/components/ui/button.tsx b/packages/studio/src/components/ui/button.tsx
index 991df99..af5a6c6 100644
--- a/packages/studio/src/components/ui/button.tsx
+++ b/packages/studio/src/components/ui/button.tsx
@@ -3,7 +3,7 @@ import { cva, type VariantProps } from 'class-variance-authority';
import { cn } from '@/lib/utils';
const buttonVariants = cva(
- 'inline-flex 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:pointer-events-none disabled:opacity-50',
+ '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: {
diff --git a/packages/studio/src/components/ui/confirm-modal.tsx b/packages/studio/src/components/ui/confirm-modal.tsx
new file mode 100644
index 0000000..f7a268c
--- /dev/null
+++ b/packages/studio/src/components/ui/confirm-modal.tsx
@@ -0,0 +1,71 @@
+import { useEffect } from 'react';
+import { Button } from '@/components/ui/button';
+
+interface ConfirmModalProps {
+ open: boolean;
+ title: string;
+ description: string;
+ confirmLabel?: string;
+ cancelLabel?: string;
+ onConfirm: () => void;
+ onCancel: () => void;
+}
+
+export function ConfirmModal({
+ open,
+ title,
+ description,
+ confirmLabel = 'Confirm',
+ cancelLabel = 'Cancel',
+ onConfirm,
+ onCancel,
+}: ConfirmModalProps) {
+ useEffect(() => {
+ if (!open) return;
+
+ const handleKeyDown = (event: KeyboardEvent) => {
+ if (event.key === 'Escape') {
+ onCancel();
+ }
+ };
+
+ const previousOverflow = document.body.style.overflow;
+ document.body.style.overflow = 'hidden';
+ document.addEventListener('keydown', handleKeyDown);
+
+ return () => {
+ document.body.style.overflow = previousOverflow;
+ document.removeEventListener('keydown', handleKeyDown);
+ };
+ }, [open, onCancel]);
+
+ if (!open) return null;
+
+ return (
+
+
event.stopPropagation()}
+ role="dialog"
+ aria-modal="true"
+ aria-labelledby="confirm-modal-title"
+ >
+
+ {title}
+
+
{description}
+
+
+ {cancelLabel}
+
+
+ {confirmLabel}
+
+
+
+
+ );
+}
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/graphql/queries.ts b/packages/studio/src/graphql/queries.ts
index 09cd79a..b54ff6c 100644
--- a/packages/studio/src/graphql/queries.ts
+++ b/packages/studio/src/graphql/queries.ts
@@ -10,6 +10,27 @@ export const SUPERBLOCKS_QUERY = gql`
}
`;
+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 {
@@ -47,6 +68,39 @@ export const SUPERBLOCK_DETAIL_QUERY = gql`
}
`;
+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) {
diff --git a/packages/studio/src/graphql/types.ts b/packages/studio/src/graphql/types.ts
index 87ac75a..21c548e 100644
--- a/packages/studio/src/graphql/types.ts
+++ b/packages/studio/src/graphql/types.ts
@@ -48,6 +48,28 @@ export interface SuperblockListItem {
isCertification: boolean;
}
+export interface SidebarChapterListItem {
+ dashedName: string;
+ modules: SidebarModuleListItem[];
+}
+
+export interface SidebarModuleListItem {
+ dashedName: string;
+ blocks: string[];
+}
+
+export interface SidebarSuperblockListItem extends SuperblockListItem {
+ chapters: SidebarChapterListItem[];
+}
+
+export interface SidebarNavResult {
+ curriculum: {
+ superblocks: string[];
+ certifications: string[];
+ };
+ superblocks: SidebarSuperblockListItem[];
+}
+
export interface SuperblockDetail {
name: string;
dashedName: string;
@@ -56,6 +78,18 @@ export interface SuperblockDetail {
blockObjects: BlockListItem[];
}
+export interface ModuleDetail {
+ dashedName: string;
+ moduleType: string | null;
+ comingSoon: boolean;
+ blocks: string[];
+ blockObjects: BlockListItem[];
+ chapter: {
+ dashedName: string;
+ superblock: SuperblockListItem;
+ };
+}
+
export interface BlockListItem {
name: string;
dashedName: string;
@@ -115,6 +149,10 @@ export interface SuperblockDetailResult {
superblock: SuperblockDetail | null;
}
+export interface ModuleDetailResult {
+ modules: ModuleDetail[];
+}
+
export interface BlockDetailResult {
block: BlockDetail | null;
}
diff --git a/packages/studio/src/lib/sidebar-nav.ts b/packages/studio/src/lib/sidebar-nav.ts
new file mode 100644
index 0000000..d9534bd
--- /dev/null
+++ b/packages/studio/src/lib/sidebar-nav.ts
@@ -0,0 +1,257 @@
+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 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 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/use-draft.ts b/packages/studio/src/lib/use-draft.ts
index 4607827..90bb851 100644
--- a/packages/studio/src/lib/use-draft.ts
+++ b/packages/studio/src/lib/use-draft.ts
@@ -19,7 +19,7 @@ export interface UseDraftReturn {
hasUnsavedChanges: boolean;
isDraftOutdated: boolean;
currentPatch: Operation[];
- save: () => void;
+ save: () => 'saved' | 'no_changes' | 'no_data';
discard: () => void;
getExportData: () => string | null;
importPatchData: (json: string) => void;
@@ -57,13 +57,13 @@ export function useDraft(
setHasUnsavedChanges(true);
}, []);
- const save = useCallback(() => {
- if (!original || !edited) return;
+ 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;
+ if (patch.length === 0) return 'no_changes';
const record = {
updatedAt: new Date().toISOString(),
originalHash: hashObject(original),
@@ -72,6 +72,7 @@ export function useDraft(
localStorage.setItem(getDraftKey(type, id), JSON.stringify(record));
setHasSavedDraft(true);
setHasUnsavedChanges(false);
+ return 'saved';
}, [original, edited, type, id]);
const discard = useCallback(() => {
From 338bc39faa60679fe9d1927141d9b18a2f9c4fc1 Mon Sep 17 00:00:00 2001
From: sembauke
Date: Sat, 14 Feb 2026 13:09:58 +0100
Subject: [PATCH 3/3] feat(graphql): enhance challenge detail query and types
- Added new fields to the CHALLENGE_DETAIL_QUERY including instructions, files, tests, and solutions.
- Refactored types in types.ts to utilize generated GraphQL types for better type safety and maintainability.
- Introduced new ModuleRouteKey interface and getModuleHref function for constructing module URLs.
- Created a new index.ts file to export fragment masking and gql utilities.
- Added typings for graphql-typed-document-node-core to improve type definitions for GraphQL documents.
---
packages/server/src/schema/types.generated.ts | 60 +-
packages/studio/codegen.ts | 1 +
.../studio/src/app/challenges/[id]/page.tsx | 83 +-
.../modules/[moduleDashedName]/page.tsx | 24 +
.../module-detail-page.tsx} | 35 +-
packages/studio/src/components/sidebar.tsx | 22 +-
.../src/graphql/generated/fragment-masking.ts | 111 ++
packages/studio/src/graphql/generated/gql.ts | 104 ++
.../studio/src/graphql/generated/graphql.ts | 1282 +++++++++++++++++
.../studio/src/graphql/generated/index.ts | 2 +
packages/studio/src/graphql/queries.ts | 14 +
packages/studio/src/graphql/types.ts | 177 +--
packages/studio/src/lib/sidebar-nav.ts | 14 +
.../graphql-typed-document-node-core.d.ts | 18 +
14 files changed, 1746 insertions(+), 201 deletions(-)
create mode 100644 packages/studio/src/app/superblocks/[dashedName]/chapters/[chapterDashedName]/modules/[moduleDashedName]/page.tsx
rename packages/studio/src/{app/modules/[dashedName]/page.tsx => components/module-detail-page.tsx} (84%)
create mode 100644 packages/studio/src/graphql/generated/fragment-masking.ts
create mode 100644 packages/studio/src/graphql/generated/gql.ts
create mode 100644 packages/studio/src/graphql/generated/graphql.ts
create mode 100644 packages/studio/src/graphql/generated/index.ts
create mode 100644 packages/studio/src/types/graphql-typed-document-node-core.d.ts
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/codegen.ts b/packages/studio/codegen.ts
index d8c650a..349da70 100644
--- a/packages/studio/codegen.ts
+++ b/packages/studio/codegen.ts
@@ -9,6 +9,7 @@ const config: CodegenConfig = {
config: {
useTypeImports: true,
enumsAsTypes: true,
+ skipTypename: true,
scalars: {
ID: 'string',
},
diff --git a/packages/studio/src/app/challenges/[id]/page.tsx b/packages/studio/src/app/challenges/[id]/page.tsx
index f52d183..ec5641c 100644
--- a/packages/studio/src/app/challenges/[id]/page.tsx
+++ b/packages/studio/src/app/challenges/[id]/page.tsx
@@ -76,6 +76,7 @@ export default function ChallengeDetailPage({
const challenge = draft.edited;
const titleErrors = validateChallengeTitle(challenge.title);
+ const challengeContent = challenge.content;
function clearFlashMessage() {
if (flashTimeoutRef.current) {
@@ -186,15 +187,79 @@ export default function ChallengeDetailPage({
Content
-
-
- Content not available in MVP
-
-
- Challenge content (description, instructions, tests) will be
- available in a future version.
-
-
+ {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.
+
+
+ )}
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/modules/[dashedName]/page.tsx b/packages/studio/src/components/module-detail-page.tsx
similarity index 84%
rename from packages/studio/src/app/modules/[dashedName]/page.tsx
rename to packages/studio/src/components/module-detail-page.tsx
index 1ee4227..8109975 100644
--- a/packages/studio/src/app/modules/[dashedName]/page.tsx
+++ b/packages/studio/src/components/module-detail-page.tsx
@@ -1,8 +1,6 @@
'use client';
-import { use } from 'react';
import Link from 'next/link';
-import { useSearchParams } from 'next/navigation';
import { useQuery } from 'urql';
import { MODULE_DETAIL_QUERY } from '@/graphql/queries';
import type { ModuleDetailResult } from '@/graphql/types';
@@ -23,33 +21,32 @@ function formatDashedNameLabel(dashedName: string): string {
.join(' ');
}
-export default function ModuleDetailPage({
- params,
-}: {
- params: Promise<{ dashedName: string }>;
-}) {
- const { dashedName } = use(params);
- const searchParams = useSearchParams();
- const selectedSuperblock = searchParams.get('superblock');
- const selectedChapter = searchParams.get('chapter');
+interface ModuleDetailPageProps {
+ superblockDashedName: string;
+ chapterDashedName: string;
+ moduleDashedName: string;
+}
+export function ModuleDetailPage({
+ superblockDashedName,
+ chapterDashedName,
+ moduleDashedName,
+}: ModuleDetailPageProps) {
const [result] = useQuery({
query: MODULE_DETAIL_QUERY,
variables: {
- superblockDashedName: selectedSuperblock || undefined,
- chapterDashedName: selectedChapter || undefined,
+ superblockDashedName,
+ chapterDashedName,
},
});
const matches = (result.data?.modules ?? []).filter(
- (module) => module.dashedName === dashedName
+ (module) => module.dashedName === moduleDashedName
);
const moduleMatch = matches[0] ?? null;
const totalMatches = matches.length;
- const fetching = result.fetching;
- const error = result.error;
- if (fetching) {
+ if (result.fetching) {
return (
Loading module...
@@ -57,10 +54,10 @@ export default function ModuleDetailPage({
);
}
- if (error) {
+ if (result.error) {
return (
-
Error: {error.message}
+
Error: {result.error.message}
);
}
diff --git a/packages/studio/src/components/sidebar.tsx b/packages/studio/src/components/sidebar.tsx
index 4d24992..d203203 100644
--- a/packages/studio/src/components/sidebar.tsx
+++ b/packages/studio/src/components/sidebar.tsx
@@ -14,6 +14,7 @@ import { cn } from '@/lib/utils';
import {
buildSidebarTree,
filterSidebarTree,
+ getModuleHref,
type SidebarModuleNode,
} from '@/lib/sidebar-nav';
import { BookOpen, ChevronRight, FileText, Search } from 'lucide-react';
@@ -51,8 +52,13 @@ export function Sidebar() {
const isSuperblockActive = (dashedName: string) =>
pathname === `/superblocks/${dashedName}`;
- const isModuleActive = (dashedName: string) =>
- pathname === `/modules/${dashedName}`;
+ const isModuleActive = (module: SidebarModuleNode) =>
+ pathname ===
+ getModuleHref({
+ superblockDashedName: module.superblockDashedName,
+ chapterDashedName: module.chapterDashedName,
+ moduleDashedName: module.dashedName,
+ });
const renderSuperblockLink = (
superblock: SidebarSuperblockListItem,
@@ -79,10 +85,14 @@ export function Sidebar() {
const renderModuleItem = (module: SidebarModuleNode, className?: string) => (
@@ -136,7 +146,7 @@ export function Sidebar() {
? isSuperblockActive(certification.dashedName) ||
certification.visibleChapters.some((chapter) =>
chapter.visibleModules.some((module) =>
- isModuleActive(module.dashedName)
+ isModuleActive(module)
)
)
: certification.visibleSuperblocks.some((superblock) =>
@@ -188,7 +198,7 @@ export function Sidebar() {
{certification.visibleChapters.map((chapter) => {
const hasActiveModule = chapter.visibleModules.some(
- (module) => isModuleActive(module.dashedName)
+ (module) => isModuleActive(module)
);
const chapterExpanded =
normalizedSearch.length > 0
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
index b54ff6c..509c6f9 100644
--- a/packages/studio/src/graphql/queries.ts
+++ b/packages/studio/src/graphql/queries.ts
@@ -135,6 +135,20 @@ export const CHALLENGE_DETAIL_QUERY = gql`
}
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
index 21c548e..41c5409 100644
--- a/packages/studio/src/graphql/types.ts
+++ b/packages/studio/src/graphql/types.ts
@@ -1,12 +1,18 @@
-export type BlockLayout =
- | 'LINK'
- | 'CHALLENGE_LIST'
- | 'CHALLENGE_GRID'
- | 'DIALOGUE_GRID'
- | 'PROJECT_LIST'
- | 'LEGACY_CHALLENGE_LIST'
- | 'LEGACY_CHALLENGE_GRID'
- | 'LEGACY_LINK';
+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',
@@ -19,16 +25,7 @@ export const BLOCK_LAYOUTS: BlockLayout[] = [
'LEGACY_LINK',
];
-export type BlockLabel =
- | 'LECTURE'
- | 'LAB'
- | 'WORKSHOP'
- | 'REVIEW'
- | 'QUIZ'
- | 'EXAM'
- | 'WARM_UP'
- | 'PRACTICE'
- | 'LEARN';
+export type BlockLabel = GeneratedBlockLabel;
export const BLOCK_LABELS: BlockLabel[] = [
'LECTURE',
@@ -42,121 +39,27 @@ export const BLOCK_LABELS: BlockLabel[] = [
'LEARN',
];
-export interface SuperblockListItem {
- name: string;
- dashedName: string;
- isCertification: boolean;
-}
-
-export interface SidebarChapterListItem {
- dashedName: string;
- modules: SidebarModuleListItem[];
-}
-
-export interface SidebarModuleListItem {
- dashedName: string;
- blocks: string[];
-}
-
-export interface SidebarSuperblockListItem extends SuperblockListItem {
- chapters: SidebarChapterListItem[];
-}
-
-export interface SidebarNavResult {
- curriculum: {
- superblocks: string[];
- certifications: string[];
- };
- superblocks: SidebarSuperblockListItem[];
-}
-
-export interface SuperblockDetail {
- name: string;
- dashedName: string;
- isCertification: boolean;
- blocks: string[];
- blockObjects: BlockListItem[];
-}
-
-export interface ModuleDetail {
- dashedName: string;
- moduleType: string | null;
- comingSoon: boolean;
- blocks: string[];
- blockObjects: BlockListItem[];
- chapter: {
- dashedName: string;
- superblock: SuperblockListItem;
- };
-}
-
-export interface BlockListItem {
- name: string;
- dashedName: string;
- helpCategory: string;
- blockLayout: BlockLayout;
- blockLabel: BlockLabel | null;
- isUpcomingChange: boolean;
-}
-
-export interface BlockDetail {
- name: string;
- dashedName: string;
- helpCategory: string;
- blockLayout: BlockLayout;
- blockLabel: BlockLabel | null;
- isUpcomingChange: boolean;
- usesMultifileEditor: boolean | null;
- hasEditableBoundaries: boolean | null;
- challengeOrder: ChallengeOrderEntry[];
- superblocks: SuperblockRef[];
-}
-
-export interface SuperblockRef {
- name: string;
- dashedName: string;
-}
-
-export interface ChallengeOrderEntry {
- id: string;
- title: string;
-}
-
-export interface ChallengeDetail {
- id: string;
- title: string;
- block: {
- name: string;
- dashedName: string;
- };
- content: { description: string } | null;
-}
-
-export interface CurriculumOverviewResult {
- curriculum: {
- superblocks: string[];
- certifications: string[];
- };
- superblocks: Array;
- certifications: Array<{ dashedName: string }>;
-}
-
-export interface SuperblockListResult {
- superblocks: SuperblockListItem[];
-}
-
-export interface SuperblockDetailResult {
- superblock: SuperblockDetail | null;
-}
-
-export interface ModuleDetailResult {
- modules: ModuleDetail[];
-}
-
-export interface BlockDetailResult {
- block: BlockDetail | null;
-}
-
-export interface ChallengeDetailResult {
- challenge: ChallengeDetail | null;
-}
+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/sidebar-nav.ts b/packages/studio/src/lib/sidebar-nav.ts
index d9534bd..ff389c5 100644
--- a/packages/studio/src/lib/sidebar-nav.ts
+++ b/packages/studio/src/lib/sidebar-nav.ts
@@ -14,6 +14,12 @@ export interface SidebarModuleNode {
chapterDashedName: string;
}
+export interface ModuleRouteKey {
+ superblockDashedName: string;
+ chapterDashedName: string;
+ moduleDashedName: string;
+}
+
export interface SidebarChapterNode {
id: string;
dashedName: string;
@@ -71,6 +77,14 @@ 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()
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;
+}