diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6ae0714..22a804c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,3 +31,48 @@ jobs: - run: pnpm build - name: Check the published file list run: pnpm pack --dry-run + - name: Check that the demo is not published + run: | + if pnpm pack --dry-run 2>&1 | grep -q 'demo/'; then + echo 'demo/ is in the package' && exit 1 + fi + + e2e: + name: e2e on the demo (${{ matrix.mode }}) + runs-on: ubuntu-latest + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: + # prod: `react-router build` + `react-router-serve`, what an app ships. + # dev: `vite dev`, which uses another module graph (HMR, dependency optimizer). + mode: [prod, dev] + env: + CI: 'true' + E2E_MODE: ${{ matrix.mode }} + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + - uses: actions/setup-node@v4 + with: + node-version: '24' + cache: pnpm + - run: pnpm install --frozen-lockfile + # The demo imports the adapter from dist/, so build the adapter first. + - run: pnpm build + - name: Install Chromium + run: pnpm --filter payload-react-router-demo exec playwright install --with-deps chromium + - name: Build the demo + if: matrix.mode == 'prod' + run: pnpm --filter payload-react-router-demo build + - name: Run the bench + run: pnpm test:e2e + - name: Upload the report + if: ${{ !cancelled() }} + uses: actions/upload-artifact@v4 + with: + name: e2e-${{ matrix.mode }} + path: | + demo/playwright-report + demo/test-results + retention-days: 14 diff --git a/.gitignore b/.gitignore index e80845d..ed3c15d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,7 @@ dist/ *.tsbuildinfo *.log .DS_Store +demo/build/ +demo/.react-router/ +demo/*.db +demo/*.db-* diff --git a/README.md b/README.md index 5842efe..62f9ed8 100644 --- a/README.md +++ b/README.md @@ -18,11 +18,17 @@ view and layout adapters, server functions); `@payloadcms/ui` is used unmodified | Vite | `8.x` | | Node.js | `>= 24.15` (Payload 4) | -The adapter is exercised by a demo app: SQLite, Lexical, drafts + autosave, uploads, two -locales, a global, and a website that reads content through the Local API. A 26-test Playwright -bench runs on that app against both the production build and `vite dev`, with the adapter -installed from the packed tarball. The demo app is in a private repository for now; the -scenarios and results are in [`docs/COMPAT.md`](./docs/COMPAT.md). +A complete demo app lives in [`demo/`](./demo): SQLite, Lexical, drafts and autosave, page +blocks with live preview, uploads, two locales, a global, and a website that reads content +through the Local API. A 35-test Playwright bench runs on it in CI against both the production +build and `vite dev`. Scenarios and results are in [`docs/COMPAT.md`](./docs/COMPAT.md). + +```bash +pnpm install +pnpm demo:dev # http://localhost:3000/admin +pnpm demo:build && pnpm test:e2e # bench on the production build +E2E_MODE=dev pnpm test:e2e # bench on vite dev +``` ## Adding Payload to a React Router app @@ -261,4 +267,4 @@ A plain "SSR + loaders" React Router app cannot host the admin without changing - The Payload CLI does not detect React Router: use `importMapFile` and `PAYLOAD_CONFIG_PATH`. - Each admin page is rendered to completion on the server before streaming starts (needed to turn in-view redirects into real redirects; TanStack does the same). -- Live preview and cloud storage adapters are not covered by the bench yet. +- Cloud storage adapters (S3, R2, Azure, GCS) and Postgres are not covered by the bench yet. diff --git a/demo/.gitignore b/demo/.gitignore new file mode 100644 index 0000000..71fa350 --- /dev/null +++ b/demo/.gitignore @@ -0,0 +1,4 @@ +/media/* +!/media/.gitkeep +/test-results/ +/playwright-report/ diff --git a/demo/app/components/LivePreview.tsx b/demo/app/components/LivePreview.tsx new file mode 100644 index 0000000..fe3c204 --- /dev/null +++ b/demo/app/components/LivePreview.tsx @@ -0,0 +1,36 @@ +'use client' + +import { useLivePreview } from '@payloadcms/live-preview-react' +import { RichText } from '@payloadcms/richtext-lexical/react' + +import type { Page, Post } from '../../payload-types' + +import { RenderBlocks } from './RenderBlocks' + +type LiveProps = { initialData: T; serverURL: string } + +/** + * Renders a page. In the admin's live preview iframe, the hook replaces the + * loader data with the unsaved form state that the admin posts at each change. + */ +export function LivePage({ initialData, serverURL }: LiveProps) { + const { data: page } = useLivePreview({ depth: 1, initialData, serverURL }) + return ( +
+ {page.title} + +
+ ) +} + +export function LivePost({ initialData, serverURL }: LiveProps) { + const { data: post } = useLivePreview({ depth: 1, initialData, serverURL }) + return ( +
+ {post.title} +

{post.title}

+ {post.publishedAt ? : null} + {post.content ? : null} +
+ ) +} diff --git a/demo/app/components/RenderBlocks.tsx b/demo/app/components/RenderBlocks.tsx new file mode 100644 index 0000000..629e220 --- /dev/null +++ b/demo/app/components/RenderBlocks.tsx @@ -0,0 +1,51 @@ +import { RichText } from '@payloadcms/richtext-lexical/react' + +import { isSafeLink } from '../../collections/links' +import type { Media, Page } from '../../payload-types' + +type LayoutBlock = NonNullable[number] + +const mediaOf = (value: unknown): Media | null => + value && typeof value === 'object' && 'url' in value ? (value as Media) : null + +function Image({ media }: { media: Media | null }) { + if (!media?.url) { + return null + } + return {media.alt} +} + +function Block({ block }: { block: LayoutBlock }) { + switch (block.blockType) { + case 'hero': + return ( +
+

{block.heading}

+ {block.subheading ?

{block.subheading}

: null} + +
+ ) + case 'content': + return
{block.body ? : null}
+ case 'mediaText': + return ( +
+ +
{block.body ? : null}
+
+ ) + case 'callToAction': + return ( +
+

{block.heading}

+ {block.text ?

{block.text}

: null} + {/* The field validates the link. This check also covers rows written before the validation. */} + {isSafeLink(block.buttonLink) ? {block.buttonLabel} : null} +
+ ) + } +} + +export function RenderBlocks({ blocks }: { blocks: Page['layout'] }) { + return <>{blocks?.map((block, index) => )} +} diff --git a/demo/app/lib/payload.server.ts b/demo/app/lib/payload.server.ts new file mode 100644 index 0000000..c387ef5 --- /dev/null +++ b/demo/app/lib/payload.server.ts @@ -0,0 +1,24 @@ +import config from '@payload-config' +import { getPayload } from 'payload' + +/** + * The Local API: the website reads content in the same process as the admin, + * with no HTTP hop and no API token. + */ +export const getPayloadClient = () => getPayload({ config }) + +/** + * Reads the request's Payload session. A signed-in user sees drafts, which is + * what the live preview iframe in the admin loads. Anonymous visitors get + * published documents only, through collection access control. + */ +export async function getReader(request: Request) { + const payload = await getPayloadClient() + const { user } = await payload.auth({ headers: request.headers }) + return { + draft: Boolean(user), + payload, + serverURL: new URL(request.url).origin, + user, + } +} diff --git a/demo/app/root.tsx b/demo/app/root.tsx new file mode 100644 index 0000000..54792f8 --- /dev/null +++ b/demo/app/root.tsx @@ -0,0 +1,33 @@ +import { isRouteErrorResponse, Outlet } from 'react-router' +import { payloadMiddleware } from 'payload-react-router/server' + +import type { Route } from './+types/root' + +// Opens the request scope Payload's server adapter reads headers from and +// writes cookies to. Must be on the root route so every request goes through it. +export const middleware: Route.MiddlewareFunction[] = [payloadMiddleware] + +// The site and the admin each render their own from their layout route. +export function ServerComponent() { + return +} + +export function ErrorBoundary({ error }: Route.ErrorBoundaryProps) { + const title = isRouteErrorResponse(error) + ? `${error.status} ${error.statusText}` + : error instanceof Error + ? error.message + : 'Unknown error' + + return ( + + + + {title} + + +

{title}

+ + + ) +} diff --git a/demo/app/routes.ts b/demo/app/routes.ts new file mode 100644 index 0000000..eded64d --- /dev/null +++ b/demo/app/routes.ts @@ -0,0 +1,16 @@ +import { index, layout, route, type RouteConfig } from '@react-router/dev/routes' + +export default [ + // The website: its own , content read through Payload's Local API. + layout('routes/site/layout.tsx', [ + index('routes/site/home.tsx'), + route('posts/:slug', 'routes/site/post.tsx'), + route(':slug', 'routes/site/page.tsx'), + ]), + // The admin panel: Payload's , providers and views. + layout('routes/payload/layout.tsx', { id: 'payload' }, [ + route('admin/*', 'routes/payload/admin.tsx'), + ]), + // REST + GraphQL API (resource route). + route('api/*', 'routes/payload/api.ts'), +] satisfies RouteConfig diff --git a/demo/app/routes/payload/admin.tsx b/demo/app/routes/payload/admin.tsx new file mode 100644 index 0000000..c366e63 --- /dev/null +++ b/demo/app/routes/payload/admin.tsx @@ -0,0 +1,16 @@ +// /admin and /admin/* — every admin view. Equivalent of +// `app/(payload)/admin/[[...segments]]/page.tsx` in a Next.js app. +import config from '@payload-config' +import { AdminPage, loadAdminPage } from 'payload-react-router/server' + +import type { Route } from './+types/admin' + +import { importMap } from './importMap.js' + +export function loader({ params, request }: Route.LoaderArgs) { + return loadAdminPage({ config, importMap, request, splat: params['*'] }) +} + +export function ServerComponent({ loaderData }: Route.ComponentProps) { + return +} diff --git a/demo/app/routes/payload/api.ts b/demo/app/routes/payload/api.ts new file mode 100644 index 0000000..c4577e4 --- /dev/null +++ b/demo/app/routes/payload/api.ts @@ -0,0 +1,5 @@ +// /api/* — Payload REST and GraphQL. Equivalent of `app/(payload)/api/[...slug]/route.ts`. +import config from '@payload-config' +import { createAPIRoute } from 'payload-react-router/server' + +export const { action, loader, middleware } = createAPIRoute({ config }) diff --git a/demo/app/routes/payload/custom.css b/demo/app/routes/payload/custom.css new file mode 100644 index 0000000..51bdca2 --- /dev/null +++ b/demo/app/routes/payload/custom.css @@ -0,0 +1,3 @@ +/* Admin style overrides. Payload's own styles live in @layer payload-default. */ +@layer payload { +} diff --git a/demo/app/routes/payload/importMap.d.ts b/demo/app/routes/payload/importMap.d.ts new file mode 100644 index 0000000..24099f5 --- /dev/null +++ b/demo/app/routes/payload/importMap.d.ts @@ -0,0 +1,4 @@ +import type { ImportMap } from 'payload' + +/** Generated by `pnpm generate:importmap`; see importMap.js. */ +export declare const importMap: ImportMap diff --git a/demo/app/routes/payload/importMap.js b/demo/app/routes/payload/importMap.js new file mode 100644 index 0000000..e103006 --- /dev/null +++ b/demo/app/routes/payload/importMap.js @@ -0,0 +1,76 @@ +import { LLMInstructionsMenuItem as LLMInstructionsMenuItem_3817bf644402e67bfe6577f60ef982de } from '@payloadcms/ui' +import { RscEntryLexicalCell as RscEntryLexicalCell_44fe37237e0ebf4470c9990d8cb7b07e } from '@payloadcms/richtext-lexical/rsc' +import { RscEntryLexicalField as RscEntryLexicalField_44fe37237e0ebf4470c9990d8cb7b07e } from '@payloadcms/richtext-lexical/rsc' +import { LexicalDiffComponent as LexicalDiffComponent_44fe37237e0ebf4470c9990d8cb7b07e } from '@payloadcms/richtext-lexical/rsc' +import { InlineToolbarFeatureClient as InlineToolbarFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { HorizontalRuleFeatureClient as HorizontalRuleFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { UploadFeatureClient as UploadFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { BlockquoteFeatureClient as BlockquoteFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { RelationshipFeatureClient as RelationshipFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { LinkFeatureClient as LinkFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { ChecklistFeatureClient as ChecklistFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { OrderedListFeatureClient as OrderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { UnorderedListFeatureClient as UnorderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { IndentFeatureClient as IndentFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { AlignFeatureClient as AlignFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { HeadingFeatureClient as HeadingFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { ParagraphFeatureClient as ParagraphFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { InlineCodeFeatureClient as InlineCodeFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { SuperscriptFeatureClient as SuperscriptFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { SubscriptFeatureClient as SubscriptFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { StrikethroughFeatureClient as StrikethroughFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { UnderlineFeatureClient as UnderlineFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { BoldFeatureClient as BoldFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { ItalicFeatureClient as ItalicFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { LLMInstructionsDescription as LLMInstructionsDescription_3817bf644402e67bfe6577f60ef982de } from '@payloadcms/ui' +import { FixedToolbarFeatureClient as FixedToolbarFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { LLMInstructionsCell as LLMInstructionsCell_ab83ff7e88da8d3530831f296ec4756a } from '@payloadcms/ui/rsc' +import { WelcomeWidget as WelcomeWidget_ab83ff7e88da8d3530831f296ec4756a } from '@payloadcms/ui/rsc' +import { CollectionCards as CollectionCards_ab83ff7e88da8d3530831f296ec4756a } from '@payloadcms/ui/rsc' +import { CollectionQueryWidget as CollectionQueryWidget_ab83ff7e88da8d3530831f296ec4756a } from '@payloadcms/ui/rsc' +import { QueryPresetsWhereField as QueryPresetsWhereField_3817bf644402e67bfe6577f60ef982de } from '@payloadcms/ui' +import { CollectionQuerySortField as CollectionQuerySortField_3817bf644402e67bfe6577f60ef982de } from '@payloadcms/ui' +import { RecentlyViewedWidget as RecentlyViewedWidget_ab83ff7e88da8d3530831f296ec4756a } from '@payloadcms/ui/rsc' +import { RecentlyViewedCollectionsField as RecentlyViewedCollectionsField_3817bf644402e67bfe6577f60ef982de } from '@payloadcms/ui' +import { UploadDropzoneWidget as UploadDropzoneWidget_ab83ff7e88da8d3530831f296ec4756a } from '@payloadcms/ui/rsc' +import { UploadDropzoneCollectionsField as UploadDropzoneCollectionsField_3817bf644402e67bfe6577f60ef982de } from '@payloadcms/ui' + +/** @type import('payload').ImportMap */ +export const importMap = { + "@payloadcms/ui#LLMInstructionsMenuItem": LLMInstructionsMenuItem_3817bf644402e67bfe6577f60ef982de, + "@payloadcms/richtext-lexical/rsc#RscEntryLexicalCell": RscEntryLexicalCell_44fe37237e0ebf4470c9990d8cb7b07e, + "@payloadcms/richtext-lexical/rsc#RscEntryLexicalField": RscEntryLexicalField_44fe37237e0ebf4470c9990d8cb7b07e, + "@payloadcms/richtext-lexical/rsc#LexicalDiffComponent": LexicalDiffComponent_44fe37237e0ebf4470c9990d8cb7b07e, + "@payloadcms/richtext-lexical/client#InlineToolbarFeatureClient": InlineToolbarFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#HorizontalRuleFeatureClient": HorizontalRuleFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#UploadFeatureClient": UploadFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#BlockquoteFeatureClient": BlockquoteFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#RelationshipFeatureClient": RelationshipFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#LinkFeatureClient": LinkFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#ChecklistFeatureClient": ChecklistFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#OrderedListFeatureClient": OrderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#UnorderedListFeatureClient": UnorderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#IndentFeatureClient": IndentFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#AlignFeatureClient": AlignFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#HeadingFeatureClient": HeadingFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#ParagraphFeatureClient": ParagraphFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#InlineCodeFeatureClient": InlineCodeFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#SuperscriptFeatureClient": SuperscriptFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#SubscriptFeatureClient": SubscriptFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#StrikethroughFeatureClient": StrikethroughFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#UnderlineFeatureClient": UnderlineFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#BoldFeatureClient": BoldFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#ItalicFeatureClient": ItalicFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/ui#LLMInstructionsDescription": LLMInstructionsDescription_3817bf644402e67bfe6577f60ef982de, + "@payloadcms/richtext-lexical/client#FixedToolbarFeatureClient": FixedToolbarFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/ui/rsc#LLMInstructionsCell": LLMInstructionsCell_ab83ff7e88da8d3530831f296ec4756a, + "@payloadcms/ui/rsc#WelcomeWidget": WelcomeWidget_ab83ff7e88da8d3530831f296ec4756a, + "@payloadcms/ui/rsc#CollectionCards": CollectionCards_ab83ff7e88da8d3530831f296ec4756a, + "@payloadcms/ui/rsc#CollectionQueryWidget": CollectionQueryWidget_ab83ff7e88da8d3530831f296ec4756a, + "@payloadcms/ui#QueryPresetsWhereField": QueryPresetsWhereField_3817bf644402e67bfe6577f60ef982de, + "@payloadcms/ui#CollectionQuerySortField": CollectionQuerySortField_3817bf644402e67bfe6577f60ef982de, + "@payloadcms/ui/rsc#RecentlyViewedWidget": RecentlyViewedWidget_ab83ff7e88da8d3530831f296ec4756a, + "@payloadcms/ui#RecentlyViewedCollectionsField": RecentlyViewedCollectionsField_3817bf644402e67bfe6577f60ef982de, + "@payloadcms/ui/rsc#UploadDropzoneWidget": UploadDropzoneWidget_ab83ff7e88da8d3530831f296ec4756a, + "@payloadcms/ui#UploadDropzoneCollectionsField": UploadDropzoneCollectionsField_3817bf644402e67bfe6577f60ef982de +} diff --git a/demo/app/routes/payload/layout.tsx b/demo/app/routes/payload/layout.tsx new file mode 100644 index 0000000..babf0a9 --- /dev/null +++ b/demo/app/routes/payload/layout.tsx @@ -0,0 +1,17 @@ +// The admin document. Equivalent of `app/(payload)/layout.tsx` in a Next.js app. +import config from '@payload-config' +import '@payloadcms/ui/css/app.css' +import { PayloadAdminLayout } from 'payload-react-router/server' +import { Outlet } from 'react-router' + +import './custom.css' +import { importMap } from './importMap.js' +import { serverFunction } from './server-functions' + +export function ServerComponent() { + return ( + + + + ) +} diff --git a/demo/app/routes/payload/server-functions.ts b/demo/app/routes/payload/server-functions.ts new file mode 100644 index 0000000..d073db3 --- /dev/null +++ b/demo/app/routes/payload/server-functions.ts @@ -0,0 +1,17 @@ +'use server' + +import type { ServerFunctionClientArgs } from 'payload' + +import config from '@payload-config' +import { handleServerFunctions } from 'payload-react-router/server' + +import { importMap } from './importMap.js' + +/** + * Payload's single server-function entry point (form state, document and list + * rendering, locale copy…). The second argument is the revalidation opt-out + * sent by the client wrapper; React Router reads it, Payload does not. + */ +export async function serverFunction(args: ServerFunctionClientArgs, _revalidation?: FormData) { + return handleServerFunctions({ ...args, config, importMap }) +} diff --git a/demo/app/routes/site/home.tsx b/demo/app/routes/site/home.tsx new file mode 100644 index 0000000..edcc9a8 --- /dev/null +++ b/demo/app/routes/site/home.tsx @@ -0,0 +1,44 @@ +import { Link } from 'react-router' + +import type { Route } from './+types/home' + +import { getPayloadClient } from '../../lib/payload.server' + +export async function loader() { + const payload = await getPayloadClient() + // No `user` and `overrideAccess: false`: the collection's access control + // decides what an anonymous visitor sees (published posts only). + const posts = await payload.find({ + collection: 'posts', + depth: 0, + overrideAccess: false, + // The default limit is 10. The index lists every published post. + pagination: false, + select: { excerpt: true, publishedAt: true, slug: true, title: true }, + sort: '-publishedAt', + }) + return { posts: posts.docs } +} + +export function ServerComponent({ loaderData }: Route.ComponentProps) { + return ( + <> + Posts +

Posts

+ {loaderData.posts.length === 0 ? ( +

+ No published posts yet. Write one in the admin. +

+ ) : ( +
    + {loaderData.posts.map((post) => ( +
  • + {post.title} + {post.excerpt ?

    {post.excerpt}

    : null} +
  • + ))} +
+ )} + + ) +} diff --git a/demo/app/routes/site/layout.tsx b/demo/app/routes/site/layout.tsx new file mode 100644 index 0000000..43a97b2 --- /dev/null +++ b/demo/app/routes/site/layout.tsx @@ -0,0 +1,49 @@ +import { Link, Outlet } from 'react-router' + +import { getPayloadClient } from '../../lib/payload.server' +import './site.css' + +export async function loader() { + const payload = await getPayloadClient() + const [settings, pages] = await Promise.all([ + payload.findGlobal({ slug: 'site-settings' }), + payload.find({ + collection: 'pages', + depth: 0, + overrideAccess: false, + // The default limit is 10. The nav lists every published page. + pagination: false, + select: { slug: true, title: true }, + sort: 'title', + }), + ]) + return { pages: pages.docs, siteName: settings.siteName, tagline: settings.tagline ?? null } +} + +export function ServerComponent({ loaderData }: { loaderData: Awaited> }) { + return ( + + + + + + +
+ {loaderData.siteName} + {loaderData.tagline ? {loaderData.tagline} : null} + + Admin +
+
+ +
+ + + ) +} diff --git a/demo/app/routes/site/page.tsx b/demo/app/routes/site/page.tsx new file mode 100644 index 0000000..161be5c --- /dev/null +++ b/demo/app/routes/site/page.tsx @@ -0,0 +1,29 @@ +import { data } from 'react-router' + +import type { Route } from './+types/page' + +import { LivePage } from '../../components/LivePreview' +import { getReader } from '../../lib/payload.server' + +export async function loader({ params, request }: Route.LoaderArgs) { + const { draft, payload, serverURL, user } = await getReader(request) + const { docs } = await payload.find({ + collection: 'pages', + depth: 1, + draft, + limit: 1, + overrideAccess: false, + user, + where: { slug: { equals: params.slug } }, + }) + const page = docs[0] + if (!page) { + // eslint-disable-next-line @typescript-eslint/only-throw-error -- React Router control flow + throw data('Page not found', { status: 404 }) + } + return { page, serverURL } +} + +export function ServerComponent({ loaderData: { page, serverURL } }: Route.ComponentProps) { + return +} diff --git a/demo/app/routes/site/post.tsx b/demo/app/routes/site/post.tsx new file mode 100644 index 0000000..2928f96 --- /dev/null +++ b/demo/app/routes/site/post.tsx @@ -0,0 +1,29 @@ +import { data } from 'react-router' + +import type { Route } from './+types/post' + +import { LivePost } from '../../components/LivePreview' +import { getReader } from '../../lib/payload.server' + +export async function loader({ params, request }: Route.LoaderArgs) { + const { draft, payload, serverURL, user } = await getReader(request) + const { docs } = await payload.find({ + collection: 'posts', + depth: 1, + draft, + limit: 1, + overrideAccess: false, + user, + where: { slug: { equals: params.slug } }, + }) + const post = docs[0] + if (!post) { + // eslint-disable-next-line @typescript-eslint/only-throw-error -- React Router control flow + throw data('Post not found', { status: 404 }) + } + return { post, serverURL } +} + +export function ServerComponent({ loaderData: { post, serverURL } }: Route.ComponentProps) { + return +} diff --git a/demo/app/routes/site/site.css b/demo/app/routes/site/site.css new file mode 100644 index 0000000..6eb7cb1 --- /dev/null +++ b/demo/app/routes/site/site.css @@ -0,0 +1,14 @@ +body { font-family: system-ui, sans-serif; margin: 0; color: #1a1a1a; } +.site-header { display: flex; gap: 1rem; align-items: baseline; padding: 1rem 2rem; border-bottom: 1px solid #e5e5e5; } +.site-header > a:last-child { margin-left: auto; } +.site-main { max-width: 42rem; margin: 2rem auto; padding: 0 1rem; line-height: 1.6; } +.post-list { list-style: none; padding: 0; } +.post-list li { margin-bottom: 1.5rem; } +.site-nav { display: flex; gap: 1rem; } +.page img { max-width: 100%; height: auto; } +.block-hero { padding: 2rem 0; } +.block-hero h1 { font-size: 2.5rem; margin: 0 0 0.5rem; } +.block-media-text { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; align-items: center; margin: 2rem 0; } +.block-media-text--right img { order: 2; } +.block-cta { margin: 2rem 0; padding: 1.5rem; border-radius: 8px; background: #f3f4f6; } +.block-cta a { display: inline-block; padding: 0.5rem 1rem; border-radius: 6px; background: #1a1a1a; color: #fff; text-decoration: none; } diff --git a/demo/collections/Media.ts b/demo/collections/Media.ts new file mode 100644 index 0000000..f213f3c --- /dev/null +++ b/demo/collections/Media.ts @@ -0,0 +1,13 @@ +import type { CollectionConfig } from 'payload' + +import path from 'node:path' + +export const Media: CollectionConfig = { + slug: 'media', + access: { read: () => true }, + fields: [{ name: 'alt', type: 'text', required: true }], + upload: { + // Anchored on the app directory; see payload.config.ts. + staticDir: path.resolve(process.cwd(), 'media'), + }, +} diff --git a/demo/collections/Pages.ts b/demo/collections/Pages.ts new file mode 100644 index 0000000..3536ffb --- /dev/null +++ b/demo/collections/Pages.ts @@ -0,0 +1,36 @@ +import type { CollectionConfig } from 'payload' + +import { pageBlocks } from './blocks.ts' +import { livePreviewAt } from './livePreview.ts' + +// Pages render at /:slug, so a slug must not take the path of another route. +const reservedSlugs = new Set(['admin', 'api', 'posts']) + +const validateSlug = (value: unknown) => { + if (typeof value !== 'string' || !/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(value)) { + return 'Use lowercase letters, digits and single hyphens.' + } + return reservedSlugs.has(value) ? `"${value}" is the path of another route.` : true +} + +export const Pages: CollectionConfig = { + slug: 'pages', + access: { + // Anonymous visitors only see published pages, like posts. + read: ({ req }) => (req.user ? true : { _status: { equals: 'published' } }), + }, + admin: { + defaultColumns: ['title', 'slug', '_status'], + livePreview: livePreviewAt('/'), + useAsTitle: 'title', + }, + fields: [ + { name: 'title', type: 'text', localized: true, required: true }, + { name: 'slug', type: 'text', index: true, required: true, unique: true, validate: validateSlug }, + { name: 'layout', type: 'blocks', blocks: pageBlocks, localized: true }, + ], + versions: { + drafts: { autosave: { interval: 800 } }, + maxPerDoc: 20, + }, +} diff --git a/demo/collections/Posts.ts b/demo/collections/Posts.ts new file mode 100644 index 0000000..e5a67fe --- /dev/null +++ b/demo/collections/Posts.ts @@ -0,0 +1,31 @@ +import type { CollectionConfig } from 'payload' + +import { livePreviewAt } from './livePreview.ts' + +export const Posts: CollectionConfig = { + slug: 'posts', + access: { + // Anonymous visitors only ever see published posts — the same invariant the + // other backends in this repo enforce on both list and single-post queries. + read: ({ req }) => (req.user ? true : { _status: { equals: 'published' } }), + }, + admin: { + defaultColumns: ['title', 'slug', 'publishedAt', '_status'], + livePreview: livePreviewAt('/posts/'), + useAsTitle: 'title', + }, + fields: [ + { name: 'title', type: 'text', localized: true, required: true }, + { name: 'slug', type: 'text', index: true, required: true, unique: true }, + { name: 'excerpt', type: 'textarea', localized: true }, + { name: 'publishedAt', type: 'date' }, + { name: 'cover', type: 'upload', relationTo: 'media' }, + { name: 'tags', type: 'text', hasMany: true }, + { name: 'author', type: 'relationship', relationTo: 'users' }, + { name: 'content', type: 'richText', localized: true }, + ], + versions: { + drafts: { autosave: { interval: 800 } }, + maxPerDoc: 20, + }, +} diff --git a/demo/collections/SiteSettings.ts b/demo/collections/SiteSettings.ts new file mode 100644 index 0000000..79d206e --- /dev/null +++ b/demo/collections/SiteSettings.ts @@ -0,0 +1,10 @@ +import type { GlobalConfig } from 'payload' + +export const SiteSettings: GlobalConfig = { + slug: 'site-settings', + access: { read: () => true }, + fields: [ + { name: 'siteName', type: 'text', defaultValue: 'Payload × React Router', required: true }, + { name: 'tagline', type: 'text', localized: true }, + ], +} diff --git a/demo/collections/Users.ts b/demo/collections/Users.ts new file mode 100644 index 0000000..01d1463 --- /dev/null +++ b/demo/collections/Users.ts @@ -0,0 +1,17 @@ +import type { CollectionConfig } from 'payload' + +export const Users: CollectionConfig = { + slug: 'users', + admin: { useAsTitle: 'email' }, + auth: true, + fields: [ + { name: 'name', type: 'text' }, + { + name: 'role', + type: 'select', + defaultValue: 'editor', + options: ['admin', 'editor'], + saveToJWT: true, + }, + ], +} diff --git a/demo/collections/blocks.ts b/demo/collections/blocks.ts new file mode 100644 index 0000000..b2bcb69 --- /dev/null +++ b/demo/collections/blocks.ts @@ -0,0 +1,55 @@ +import type { Block } from 'payload' + +import { isSafeLink } from './links.ts' + +export const HeroBlock: Block = { + slug: 'hero', + interfaceName: 'HeroBlock', + fields: [ + { name: 'heading', type: 'text', required: true }, + { name: 'subheading', type: 'textarea' }, + { name: 'image', type: 'upload', relationTo: 'media' }, + ], +} + +export const ContentBlock: Block = { + slug: 'content', + interfaceName: 'ContentBlock', + fields: [{ name: 'body', type: 'richText', required: true }], +} + +export const MediaTextBlock: Block = { + slug: 'mediaText', + interfaceName: 'MediaTextBlock', + fields: [ + { name: 'media', type: 'upload', relationTo: 'media', required: true }, + { name: 'body', type: 'richText' }, + { + name: 'mediaPosition', + type: 'select', + defaultValue: 'left', + options: [ + { label: 'Left', value: 'left' }, + { label: 'Right', value: 'right' }, + ], + }, + ], +} + +export const CallToActionBlock: Block = { + slug: 'callToAction', + interfaceName: 'CallToActionBlock', + fields: [ + { name: 'heading', type: 'text', required: true }, + { name: 'text', type: 'textarea' }, + { name: 'buttonLabel', type: 'text', required: true }, + { + name: 'buttonLink', + type: 'text', + required: true, + validate: (value: unknown) => isSafeLink(value) || 'Use a path that starts with / or an http(s) URL.', + }, + ], +} + +export const pageBlocks = [HeroBlock, ContentBlock, MediaTextBlock, CallToActionBlock] diff --git a/demo/collections/links.ts b/demo/collections/links.ts new file mode 100644 index 0000000..786f53d --- /dev/null +++ b/demo/collections/links.ts @@ -0,0 +1,24 @@ +const base = 'https://site.invalid' + +/** + * Accepts a site path (`/pricing`) or an http(s) URL. Rejects other schemes, + * such as `javascript:`, and any value that a browser resolves to another + * origin, such as `//host`, `/\host` or `//host`. + * + * Browsers read `\` as `/` and remove tabs and newlines from URLs, so the + * check refuses these characters before it resolves the value. + */ +export const isSafeLink = (value: unknown): value is string => { + if (typeof value !== 'string' || /[\s\\\u0000-\u001f\u007f]/.test(value)) { + return false + } + try { + const url = new URL(value, base) + if (value.startsWith('/')) { + return url.origin === base + } + return /^https?:\/\//i.test(value) && (url.protocol === 'http:' || url.protocol === 'https:') + } catch { + return false + } +} diff --git a/demo/collections/livePreview.ts b/demo/collections/livePreview.ts new file mode 100644 index 0000000..1ce34a3 --- /dev/null +++ b/demo/collections/livePreview.ts @@ -0,0 +1,18 @@ +import type { CollectionConfig } from 'payload' + +type LivePreviewConfig = NonNullable['livePreview']> + +/** + * Returns the live preview config for a collection whose documents render at + * `prefix + slug` on the website. The iframe and the admin share one origin, + * so the URL takes its origin from the admin request. + */ +export const livePreviewAt = (prefix: string): LivePreviewConfig => ({ + url: ({ data, req }) => { + if (typeof data?.slug !== 'string' || !data.slug) { + return null + } + const origin = req.url ? new URL(req.url).origin : '' + return `${origin}${prefix}${encodeURIComponent(data.slug)}` + }, +}) diff --git a/demo/media/.gitkeep b/demo/media/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/demo/migrations/20261009_093551_initial.json b/demo/migrations/20261009_093551_initial.json new file mode 100644 index 0000000..12670a1 --- /dev/null +++ b/demo/migrations/20261009_093551_initial.json @@ -0,0 +1,4910 @@ +{ + "version": "6", + "dialect": "sqlite", + "tables": { + "users_sessions": { + "name": "users_sessions", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "users_sessions_order_idx": { + "name": "users_sessions_order_idx", + "columns": [ + "_order" + ], + "isUnique": false + }, + "users_sessions_parent_id_idx": { + "name": "users_sessions_parent_id_idx", + "columns": [ + "_parent_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "users_sessions_parent_id_fk": { + "name": "users_sessions_parent_id_fk", + "tableFrom": "users_sessions", + "tableTo": "users", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "users": { + "name": "users", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "'editor'" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reset_password_token": { + "name": "reset_password_token", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "reset_password_expiration": { + "name": "reset_password_expiration", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "salt": { + "name": "salt", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "hash": { + "name": "hash", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "reset_password_requested_at": { + "name": "reset_password_requested_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "login_attempts": { + "name": "login_attempts", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 0 + }, + "lock_until": { + "name": "lock_until", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "users_updated_at_idx": { + "name": "users_updated_at_idx", + "columns": [ + "updated_at" + ], + "isUnique": false + }, + "users_created_at_idx": { + "name": "users_created_at_idx", + "columns": [ + "created_at" + ], + "isUnique": false + }, + "users_email_idx": { + "name": "users_email_idx", + "columns": [ + "email" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "users_rels": { + "name": "users_rels", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "users_id": { + "name": "users_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "users_rels_order_idx": { + "name": "users_rels_order_idx", + "columns": [ + "order" + ], + "isUnique": false + }, + "users_rels_parent_idx": { + "name": "users_rels_parent_idx", + "columns": [ + "parent_id" + ], + "isUnique": false + }, + "users_rels_path_idx": { + "name": "users_rels_path_idx", + "columns": [ + "path" + ], + "isUnique": false + }, + "users_rels_users_id_idx": { + "name": "users_rels_users_id_idx", + "columns": [ + "users_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "users_rels_parent_fk": { + "name": "users_rels_parent_fk", + "tableFrom": "users_rels", + "tableTo": "users", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "users_rels_users_fk": { + "name": "users_rels_users_fk", + "tableFrom": "users_rels", + "tableTo": "users", + "columnsFrom": [ + "users_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "_users_v_version_sessions": { + "name": "_users_v_version_sessions", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "_uuid": { + "name": "_uuid", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "_users_v_version_sessions_order_idx": { + "name": "_users_v_version_sessions_order_idx", + "columns": [ + "_order" + ], + "isUnique": false + }, + "_users_v_version_sessions_parent_id_idx": { + "name": "_users_v_version_sessions_parent_id_idx", + "columns": [ + "_parent_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "_users_v_version_sessions_parent_id_fk": { + "name": "_users_v_version_sessions_parent_id_fk", + "tableFrom": "_users_v_version_sessions", + "tableTo": "_users_v", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "_users_v": { + "name": "_users_v", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_name": { + "name": "version_name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_role": { + "name": "version_role", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "'editor'" + }, + "version_updated_at": { + "name": "version_updated_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_created_at": { + "name": "version_created_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_email": { + "name": "version_email", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "version_reset_password_token": { + "name": "version_reset_password_token", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_reset_password_expiration": { + "name": "version_reset_password_expiration", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_salt": { + "name": "version_salt", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_hash": { + "name": "version_hash", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_reset_password_requested_at": { + "name": "version_reset_password_requested_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_login_attempts": { + "name": "version_login_attempts", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 0 + }, + "version_lock_until": { + "name": "version_lock_until", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + } + }, + "indexes": { + "_users_v_parent_idx": { + "name": "_users_v_parent_idx", + "columns": [ + "parent_id" + ], + "isUnique": false + }, + "_users_v_version_version_updated_at_idx": { + "name": "_users_v_version_version_updated_at_idx", + "columns": [ + "version_updated_at" + ], + "isUnique": false + }, + "_users_v_version_version_created_at_idx": { + "name": "_users_v_version_version_created_at_idx", + "columns": [ + "version_created_at" + ], + "isUnique": false + }, + "_users_v_version_version_email_idx": { + "name": "_users_v_version_version_email_idx", + "columns": [ + "version_email" + ], + "isUnique": false + }, + "_users_v_created_at_idx": { + "name": "_users_v_created_at_idx", + "columns": [ + "created_at" + ], + "isUnique": false + }, + "_users_v_updated_at_idx": { + "name": "_users_v_updated_at_idx", + "columns": [ + "updated_at" + ], + "isUnique": false + } + }, + "foreignKeys": { + "_users_v_parent_id_users_id_fk": { + "name": "_users_v_parent_id_users_id_fk", + "tableFrom": "_users_v", + "tableTo": "users", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "_users_v_rels": { + "name": "_users_v_rels", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "users_id": { + "name": "users_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "_users_v_rels_order_idx": { + "name": "_users_v_rels_order_idx", + "columns": [ + "order" + ], + "isUnique": false + }, + "_users_v_rels_parent_idx": { + "name": "_users_v_rels_parent_idx", + "columns": [ + "parent_id" + ], + "isUnique": false + }, + "_users_v_rels_path_idx": { + "name": "_users_v_rels_path_idx", + "columns": [ + "path" + ], + "isUnique": false + }, + "_users_v_rels_users_id_idx": { + "name": "_users_v_rels_users_id_idx", + "columns": [ + "users_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "_users_v_rels_parent_fk": { + "name": "_users_v_rels_parent_fk", + "tableFrom": "_users_v_rels", + "tableTo": "_users_v", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "_users_v_rels_users_fk": { + "name": "_users_v_rels_users_fk", + "tableFrom": "_users_v_rels", + "tableTo": "users", + "columnsFrom": [ + "users_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "posts": { + "name": "posts", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "published_at": { + "name": "published_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "cover_id": { + "name": "cover_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "author_id": { + "name": "author_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + } + }, + "indexes": { + "posts_slug_idx": { + "name": "posts_slug_idx", + "columns": [ + "slug" + ], + "isUnique": true + }, + "posts_cover_idx": { + "name": "posts_cover_idx", + "columns": [ + "cover_id" + ], + "isUnique": false + }, + "posts_author_idx": { + "name": "posts_author_idx", + "columns": [ + "author_id" + ], + "isUnique": false + }, + "posts_updated_at_idx": { + "name": "posts_updated_at_idx", + "columns": [ + "updated_at" + ], + "isUnique": false + }, + "posts_created_at_idx": { + "name": "posts_created_at_idx", + "columns": [ + "created_at" + ], + "isUnique": false + } + }, + "foreignKeys": { + "posts_cover_id_media_id_fk": { + "name": "posts_cover_id_media_id_fk", + "tableFrom": "posts", + "tableTo": "media", + "columnsFrom": [ + "cover_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "posts_author_id_users_id_fk": { + "name": "posts_author_id_users_id_fk", + "tableFrom": "posts", + "tableTo": "users", + "columnsFrom": [ + "author_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "posts_locales": { + "name": "posts_locales", + "columns": { + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "excerpt": { + "name": "excerpt", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "_status": { + "name": "_status", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "'draft'" + }, + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "_locale": { + "name": "_locale", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "posts__status_idx": { + "name": "posts__status_idx", + "columns": [ + "_status", + "_locale" + ], + "isUnique": false + }, + "posts_locales_locale_parent_id_unique": { + "name": "posts_locales_locale_parent_id_unique", + "columns": [ + "_locale", + "_parent_id" + ], + "isUnique": true + } + }, + "foreignKeys": { + "posts_locales_parent_id_fk": { + "name": "posts_locales_parent_id_fk", + "tableFrom": "posts_locales", + "tableTo": "posts", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "posts_texts": { + "name": "posts_texts", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "text": { + "name": "text", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "posts_texts_order_parent": { + "name": "posts_texts_order_parent", + "columns": [ + "order", + "parent_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "posts_texts_parent_fk": { + "name": "posts_texts_parent_fk", + "tableFrom": "posts_texts", + "tableTo": "posts", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "posts_rels": { + "name": "posts_rels", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "users_id": { + "name": "users_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "posts_rels_order_idx": { + "name": "posts_rels_order_idx", + "columns": [ + "order" + ], + "isUnique": false + }, + "posts_rels_parent_idx": { + "name": "posts_rels_parent_idx", + "columns": [ + "parent_id" + ], + "isUnique": false + }, + "posts_rels_path_idx": { + "name": "posts_rels_path_idx", + "columns": [ + "path" + ], + "isUnique": false + }, + "posts_rels_users_id_idx": { + "name": "posts_rels_users_id_idx", + "columns": [ + "users_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "posts_rels_parent_fk": { + "name": "posts_rels_parent_fk", + "tableFrom": "posts_rels", + "tableTo": "posts", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "posts_rels_users_fk": { + "name": "posts_rels_users_fk", + "tableFrom": "posts_rels", + "tableTo": "users", + "columnsFrom": [ + "users_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "_posts_v": { + "name": "_posts_v", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_slug": { + "name": "version_slug", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_published_at": { + "name": "version_published_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_cover_id": { + "name": "version_cover_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_author_id": { + "name": "version_author_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_updated_at": { + "name": "version_updated_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_created_at": { + "name": "version_created_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + }, + "published_locale": { + "name": "published_locale", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "latest": { + "name": "latest", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "autosave": { + "name": "autosave", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "_posts_v_parent_idx": { + "name": "_posts_v_parent_idx", + "columns": [ + "parent_id" + ], + "isUnique": false + }, + "_posts_v_version_version_slug_idx": { + "name": "_posts_v_version_version_slug_idx", + "columns": [ + "version_slug" + ], + "isUnique": false + }, + "_posts_v_version_version_cover_idx": { + "name": "_posts_v_version_version_cover_idx", + "columns": [ + "version_cover_id" + ], + "isUnique": false + }, + "_posts_v_version_version_author_idx": { + "name": "_posts_v_version_version_author_idx", + "columns": [ + "version_author_id" + ], + "isUnique": false + }, + "_posts_v_version_version_updated_at_idx": { + "name": "_posts_v_version_version_updated_at_idx", + "columns": [ + "version_updated_at" + ], + "isUnique": false + }, + "_posts_v_version_version_created_at_idx": { + "name": "_posts_v_version_version_created_at_idx", + "columns": [ + "version_created_at" + ], + "isUnique": false + }, + "_posts_v_created_at_idx": { + "name": "_posts_v_created_at_idx", + "columns": [ + "created_at" + ], + "isUnique": false + }, + "_posts_v_updated_at_idx": { + "name": "_posts_v_updated_at_idx", + "columns": [ + "updated_at" + ], + "isUnique": false + }, + "_posts_v_published_locale_idx": { + "name": "_posts_v_published_locale_idx", + "columns": [ + "published_locale" + ], + "isUnique": false + }, + "_posts_v_latest_idx": { + "name": "_posts_v_latest_idx", + "columns": [ + "latest" + ], + "isUnique": false + }, + "_posts_v_autosave_idx": { + "name": "_posts_v_autosave_idx", + "columns": [ + "autosave" + ], + "isUnique": false + } + }, + "foreignKeys": { + "_posts_v_parent_id_posts_id_fk": { + "name": "_posts_v_parent_id_posts_id_fk", + "tableFrom": "_posts_v", + "tableTo": "posts", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "_posts_v_version_cover_id_media_id_fk": { + "name": "_posts_v_version_cover_id_media_id_fk", + "tableFrom": "_posts_v", + "tableTo": "media", + "columnsFrom": [ + "version_cover_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "_posts_v_version_author_id_users_id_fk": { + "name": "_posts_v_version_author_id_users_id_fk", + "tableFrom": "_posts_v", + "tableTo": "users", + "columnsFrom": [ + "version_author_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "_posts_v_locales": { + "name": "_posts_v_locales", + "columns": { + "version_title": { + "name": "version_title", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_excerpt": { + "name": "version_excerpt", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_content": { + "name": "version_content", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version__status": { + "name": "version__status", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "'draft'" + }, + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "_locale": { + "name": "_locale", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "_posts_v_version_version__status_idx": { + "name": "_posts_v_version_version__status_idx", + "columns": [ + "version__status", + "_locale" + ], + "isUnique": false + }, + "_posts_v_locales_locale_parent_id_unique": { + "name": "_posts_v_locales_locale_parent_id_unique", + "columns": [ + "_locale", + "_parent_id" + ], + "isUnique": true + } + }, + "foreignKeys": { + "_posts_v_locales_parent_id_fk": { + "name": "_posts_v_locales_parent_id_fk", + "tableFrom": "_posts_v_locales", + "tableTo": "_posts_v", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "_posts_v_texts": { + "name": "_posts_v_texts", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "text": { + "name": "text", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "_posts_v_texts_order_parent": { + "name": "_posts_v_texts_order_parent", + "columns": [ + "order", + "parent_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "_posts_v_texts_parent_fk": { + "name": "_posts_v_texts_parent_fk", + "tableFrom": "_posts_v_texts", + "tableTo": "_posts_v", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "_posts_v_rels": { + "name": "_posts_v_rels", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "users_id": { + "name": "users_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "_posts_v_rels_order_idx": { + "name": "_posts_v_rels_order_idx", + "columns": [ + "order" + ], + "isUnique": false + }, + "_posts_v_rels_parent_idx": { + "name": "_posts_v_rels_parent_idx", + "columns": [ + "parent_id" + ], + "isUnique": false + }, + "_posts_v_rels_path_idx": { + "name": "_posts_v_rels_path_idx", + "columns": [ + "path" + ], + "isUnique": false + }, + "_posts_v_rels_users_id_idx": { + "name": "_posts_v_rels_users_id_idx", + "columns": [ + "users_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "_posts_v_rels_parent_fk": { + "name": "_posts_v_rels_parent_fk", + "tableFrom": "_posts_v_rels", + "tableTo": "_posts_v", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "_posts_v_rels_users_fk": { + "name": "_posts_v_rels_users_fk", + "tableFrom": "_posts_v_rels", + "tableTo": "users", + "columnsFrom": [ + "users_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "pages_blocks_hero": { + "name": "pages_blocks_hero", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_locale": { + "name": "_locale", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "heading": { + "name": "heading", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "subheading": { + "name": "subheading", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "image_id": { + "name": "image_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "block_name": { + "name": "block_name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "pages_blocks_hero_order_idx": { + "name": "pages_blocks_hero_order_idx", + "columns": [ + "_order" + ], + "isUnique": false + }, + "pages_blocks_hero_parent_id_idx": { + "name": "pages_blocks_hero_parent_id_idx", + "columns": [ + "_parent_id" + ], + "isUnique": false + }, + "pages_blocks_hero_path_idx": { + "name": "pages_blocks_hero_path_idx", + "columns": [ + "_path" + ], + "isUnique": false + }, + "pages_blocks_hero_locale_idx": { + "name": "pages_blocks_hero_locale_idx", + "columns": [ + "_locale" + ], + "isUnique": false + }, + "pages_blocks_hero_image_idx": { + "name": "pages_blocks_hero_image_idx", + "columns": [ + "image_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "pages_blocks_hero_image_id_media_id_fk": { + "name": "pages_blocks_hero_image_id_media_id_fk", + "tableFrom": "pages_blocks_hero", + "tableTo": "media", + "columnsFrom": [ + "image_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "pages_blocks_hero_parent_id_fk": { + "name": "pages_blocks_hero_parent_id_fk", + "tableFrom": "pages_blocks_hero", + "tableTo": "pages", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "pages_blocks_content": { + "name": "pages_blocks_content", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_locale": { + "name": "_locale", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "body": { + "name": "body", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "block_name": { + "name": "block_name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "pages_blocks_content_order_idx": { + "name": "pages_blocks_content_order_idx", + "columns": [ + "_order" + ], + "isUnique": false + }, + "pages_blocks_content_parent_id_idx": { + "name": "pages_blocks_content_parent_id_idx", + "columns": [ + "_parent_id" + ], + "isUnique": false + }, + "pages_blocks_content_path_idx": { + "name": "pages_blocks_content_path_idx", + "columns": [ + "_path" + ], + "isUnique": false + }, + "pages_blocks_content_locale_idx": { + "name": "pages_blocks_content_locale_idx", + "columns": [ + "_locale" + ], + "isUnique": false + } + }, + "foreignKeys": { + "pages_blocks_content_parent_id_fk": { + "name": "pages_blocks_content_parent_id_fk", + "tableFrom": "pages_blocks_content", + "tableTo": "pages", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "pages_blocks_media_text": { + "name": "pages_blocks_media_text", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_locale": { + "name": "_locale", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "media_id": { + "name": "media_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "body": { + "name": "body", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "media_position": { + "name": "media_position", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "'left'" + }, + "block_name": { + "name": "block_name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "pages_blocks_media_text_order_idx": { + "name": "pages_blocks_media_text_order_idx", + "columns": [ + "_order" + ], + "isUnique": false + }, + "pages_blocks_media_text_parent_id_idx": { + "name": "pages_blocks_media_text_parent_id_idx", + "columns": [ + "_parent_id" + ], + "isUnique": false + }, + "pages_blocks_media_text_path_idx": { + "name": "pages_blocks_media_text_path_idx", + "columns": [ + "_path" + ], + "isUnique": false + }, + "pages_blocks_media_text_locale_idx": { + "name": "pages_blocks_media_text_locale_idx", + "columns": [ + "_locale" + ], + "isUnique": false + }, + "pages_blocks_media_text_media_idx": { + "name": "pages_blocks_media_text_media_idx", + "columns": [ + "media_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "pages_blocks_media_text_media_id_media_id_fk": { + "name": "pages_blocks_media_text_media_id_media_id_fk", + "tableFrom": "pages_blocks_media_text", + "tableTo": "media", + "columnsFrom": [ + "media_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "pages_blocks_media_text_parent_id_fk": { + "name": "pages_blocks_media_text_parent_id_fk", + "tableFrom": "pages_blocks_media_text", + "tableTo": "pages", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "pages_blocks_call_to_action": { + "name": "pages_blocks_call_to_action", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_locale": { + "name": "_locale", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "heading": { + "name": "heading", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "text": { + "name": "text", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "button_label": { + "name": "button_label", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "button_link": { + "name": "button_link", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "block_name": { + "name": "block_name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "pages_blocks_call_to_action_order_idx": { + "name": "pages_blocks_call_to_action_order_idx", + "columns": [ + "_order" + ], + "isUnique": false + }, + "pages_blocks_call_to_action_parent_id_idx": { + "name": "pages_blocks_call_to_action_parent_id_idx", + "columns": [ + "_parent_id" + ], + "isUnique": false + }, + "pages_blocks_call_to_action_path_idx": { + "name": "pages_blocks_call_to_action_path_idx", + "columns": [ + "_path" + ], + "isUnique": false + }, + "pages_blocks_call_to_action_locale_idx": { + "name": "pages_blocks_call_to_action_locale_idx", + "columns": [ + "_locale" + ], + "isUnique": false + } + }, + "foreignKeys": { + "pages_blocks_call_to_action_parent_id_fk": { + "name": "pages_blocks_call_to_action_parent_id_fk", + "tableFrom": "pages_blocks_call_to_action", + "tableTo": "pages", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "pages": { + "name": "pages", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + } + }, + "indexes": { + "pages_slug_idx": { + "name": "pages_slug_idx", + "columns": [ + "slug" + ], + "isUnique": true + }, + "pages_updated_at_idx": { + "name": "pages_updated_at_idx", + "columns": [ + "updated_at" + ], + "isUnique": false + }, + "pages_created_at_idx": { + "name": "pages_created_at_idx", + "columns": [ + "created_at" + ], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "pages_locales": { + "name": "pages_locales", + "columns": { + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "_status": { + "name": "_status", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "'draft'" + }, + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "_locale": { + "name": "_locale", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "pages__status_idx": { + "name": "pages__status_idx", + "columns": [ + "_status", + "_locale" + ], + "isUnique": false + }, + "pages_locales_locale_parent_id_unique": { + "name": "pages_locales_locale_parent_id_unique", + "columns": [ + "_locale", + "_parent_id" + ], + "isUnique": true + } + }, + "foreignKeys": { + "pages_locales_parent_id_fk": { + "name": "pages_locales_parent_id_fk", + "tableFrom": "pages_locales", + "tableTo": "pages", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "pages_rels": { + "name": "pages_rels", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "users_id": { + "name": "users_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "pages_rels_order_idx": { + "name": "pages_rels_order_idx", + "columns": [ + "order" + ], + "isUnique": false + }, + "pages_rels_parent_idx": { + "name": "pages_rels_parent_idx", + "columns": [ + "parent_id" + ], + "isUnique": false + }, + "pages_rels_path_idx": { + "name": "pages_rels_path_idx", + "columns": [ + "path" + ], + "isUnique": false + }, + "pages_rels_users_id_idx": { + "name": "pages_rels_users_id_idx", + "columns": [ + "users_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "pages_rels_parent_fk": { + "name": "pages_rels_parent_fk", + "tableFrom": "pages_rels", + "tableTo": "pages", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "pages_rels_users_fk": { + "name": "pages_rels_users_fk", + "tableFrom": "pages_rels", + "tableTo": "users", + "columnsFrom": [ + "users_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "_pages_v_blocks_hero": { + "name": "_pages_v_blocks_hero", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_locale": { + "name": "_locale", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "heading": { + "name": "heading", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "subheading": { + "name": "subheading", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "image_id": { + "name": "image_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "_uuid": { + "name": "_uuid", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "block_name": { + "name": "block_name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "_pages_v_blocks_hero_order_idx": { + "name": "_pages_v_blocks_hero_order_idx", + "columns": [ + "_order" + ], + "isUnique": false + }, + "_pages_v_blocks_hero_parent_id_idx": { + "name": "_pages_v_blocks_hero_parent_id_idx", + "columns": [ + "_parent_id" + ], + "isUnique": false + }, + "_pages_v_blocks_hero_path_idx": { + "name": "_pages_v_blocks_hero_path_idx", + "columns": [ + "_path" + ], + "isUnique": false + }, + "_pages_v_blocks_hero_locale_idx": { + "name": "_pages_v_blocks_hero_locale_idx", + "columns": [ + "_locale" + ], + "isUnique": false + }, + "_pages_v_blocks_hero_image_idx": { + "name": "_pages_v_blocks_hero_image_idx", + "columns": [ + "image_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "_pages_v_blocks_hero_image_id_media_id_fk": { + "name": "_pages_v_blocks_hero_image_id_media_id_fk", + "tableFrom": "_pages_v_blocks_hero", + "tableTo": "media", + "columnsFrom": [ + "image_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "_pages_v_blocks_hero_parent_id_fk": { + "name": "_pages_v_blocks_hero_parent_id_fk", + "tableFrom": "_pages_v_blocks_hero", + "tableTo": "_pages_v", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "_pages_v_blocks_content": { + "name": "_pages_v_blocks_content", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_locale": { + "name": "_locale", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "body": { + "name": "body", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "_uuid": { + "name": "_uuid", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "block_name": { + "name": "block_name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "_pages_v_blocks_content_order_idx": { + "name": "_pages_v_blocks_content_order_idx", + "columns": [ + "_order" + ], + "isUnique": false + }, + "_pages_v_blocks_content_parent_id_idx": { + "name": "_pages_v_blocks_content_parent_id_idx", + "columns": [ + "_parent_id" + ], + "isUnique": false + }, + "_pages_v_blocks_content_path_idx": { + "name": "_pages_v_blocks_content_path_idx", + "columns": [ + "_path" + ], + "isUnique": false + }, + "_pages_v_blocks_content_locale_idx": { + "name": "_pages_v_blocks_content_locale_idx", + "columns": [ + "_locale" + ], + "isUnique": false + } + }, + "foreignKeys": { + "_pages_v_blocks_content_parent_id_fk": { + "name": "_pages_v_blocks_content_parent_id_fk", + "tableFrom": "_pages_v_blocks_content", + "tableTo": "_pages_v", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "_pages_v_blocks_media_text": { + "name": "_pages_v_blocks_media_text", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_locale": { + "name": "_locale", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "media_id": { + "name": "media_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "body": { + "name": "body", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "media_position": { + "name": "media_position", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "'left'" + }, + "_uuid": { + "name": "_uuid", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "block_name": { + "name": "block_name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "_pages_v_blocks_media_text_order_idx": { + "name": "_pages_v_blocks_media_text_order_idx", + "columns": [ + "_order" + ], + "isUnique": false + }, + "_pages_v_blocks_media_text_parent_id_idx": { + "name": "_pages_v_blocks_media_text_parent_id_idx", + "columns": [ + "_parent_id" + ], + "isUnique": false + }, + "_pages_v_blocks_media_text_path_idx": { + "name": "_pages_v_blocks_media_text_path_idx", + "columns": [ + "_path" + ], + "isUnique": false + }, + "_pages_v_blocks_media_text_locale_idx": { + "name": "_pages_v_blocks_media_text_locale_idx", + "columns": [ + "_locale" + ], + "isUnique": false + }, + "_pages_v_blocks_media_text_media_idx": { + "name": "_pages_v_blocks_media_text_media_idx", + "columns": [ + "media_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "_pages_v_blocks_media_text_media_id_media_id_fk": { + "name": "_pages_v_blocks_media_text_media_id_media_id_fk", + "tableFrom": "_pages_v_blocks_media_text", + "tableTo": "media", + "columnsFrom": [ + "media_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "_pages_v_blocks_media_text_parent_id_fk": { + "name": "_pages_v_blocks_media_text_parent_id_fk", + "tableFrom": "_pages_v_blocks_media_text", + "tableTo": "_pages_v", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "_pages_v_blocks_call_to_action": { + "name": "_pages_v_blocks_call_to_action", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_path": { + "name": "_path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_locale": { + "name": "_locale", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "heading": { + "name": "heading", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "text": { + "name": "text", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "button_label": { + "name": "button_label", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "button_link": { + "name": "button_link", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "_uuid": { + "name": "_uuid", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "block_name": { + "name": "block_name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "_pages_v_blocks_call_to_action_order_idx": { + "name": "_pages_v_blocks_call_to_action_order_idx", + "columns": [ + "_order" + ], + "isUnique": false + }, + "_pages_v_blocks_call_to_action_parent_id_idx": { + "name": "_pages_v_blocks_call_to_action_parent_id_idx", + "columns": [ + "_parent_id" + ], + "isUnique": false + }, + "_pages_v_blocks_call_to_action_path_idx": { + "name": "_pages_v_blocks_call_to_action_path_idx", + "columns": [ + "_path" + ], + "isUnique": false + }, + "_pages_v_blocks_call_to_action_locale_idx": { + "name": "_pages_v_blocks_call_to_action_locale_idx", + "columns": [ + "_locale" + ], + "isUnique": false + } + }, + "foreignKeys": { + "_pages_v_blocks_call_to_action_parent_id_fk": { + "name": "_pages_v_blocks_call_to_action_parent_id_fk", + "tableFrom": "_pages_v_blocks_call_to_action", + "tableTo": "_pages_v", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "_pages_v": { + "name": "_pages_v", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_slug": { + "name": "version_slug", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_updated_at": { + "name": "version_updated_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_created_at": { + "name": "version_created_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + }, + "published_locale": { + "name": "published_locale", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "latest": { + "name": "latest", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "autosave": { + "name": "autosave", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "_pages_v_parent_idx": { + "name": "_pages_v_parent_idx", + "columns": [ + "parent_id" + ], + "isUnique": false + }, + "_pages_v_version_version_slug_idx": { + "name": "_pages_v_version_version_slug_idx", + "columns": [ + "version_slug" + ], + "isUnique": false + }, + "_pages_v_version_version_updated_at_idx": { + "name": "_pages_v_version_version_updated_at_idx", + "columns": [ + "version_updated_at" + ], + "isUnique": false + }, + "_pages_v_version_version_created_at_idx": { + "name": "_pages_v_version_version_created_at_idx", + "columns": [ + "version_created_at" + ], + "isUnique": false + }, + "_pages_v_created_at_idx": { + "name": "_pages_v_created_at_idx", + "columns": [ + "created_at" + ], + "isUnique": false + }, + "_pages_v_updated_at_idx": { + "name": "_pages_v_updated_at_idx", + "columns": [ + "updated_at" + ], + "isUnique": false + }, + "_pages_v_published_locale_idx": { + "name": "_pages_v_published_locale_idx", + "columns": [ + "published_locale" + ], + "isUnique": false + }, + "_pages_v_latest_idx": { + "name": "_pages_v_latest_idx", + "columns": [ + "latest" + ], + "isUnique": false + }, + "_pages_v_autosave_idx": { + "name": "_pages_v_autosave_idx", + "columns": [ + "autosave" + ], + "isUnique": false + } + }, + "foreignKeys": { + "_pages_v_parent_id_pages_id_fk": { + "name": "_pages_v_parent_id_pages_id_fk", + "tableFrom": "_pages_v", + "tableTo": "pages", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "_pages_v_locales": { + "name": "_pages_v_locales", + "columns": { + "version_title": { + "name": "version_title", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version__status": { + "name": "version__status", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "'draft'" + }, + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "_locale": { + "name": "_locale", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "_pages_v_version_version__status_idx": { + "name": "_pages_v_version_version__status_idx", + "columns": [ + "version__status", + "_locale" + ], + "isUnique": false + }, + "_pages_v_locales_locale_parent_id_unique": { + "name": "_pages_v_locales_locale_parent_id_unique", + "columns": [ + "_locale", + "_parent_id" + ], + "isUnique": true + } + }, + "foreignKeys": { + "_pages_v_locales_parent_id_fk": { + "name": "_pages_v_locales_parent_id_fk", + "tableFrom": "_pages_v_locales", + "tableTo": "_pages_v", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "_pages_v_rels": { + "name": "_pages_v_rels", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "users_id": { + "name": "users_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "_pages_v_rels_order_idx": { + "name": "_pages_v_rels_order_idx", + "columns": [ + "order" + ], + "isUnique": false + }, + "_pages_v_rels_parent_idx": { + "name": "_pages_v_rels_parent_idx", + "columns": [ + "parent_id" + ], + "isUnique": false + }, + "_pages_v_rels_path_idx": { + "name": "_pages_v_rels_path_idx", + "columns": [ + "path" + ], + "isUnique": false + }, + "_pages_v_rels_users_id_idx": { + "name": "_pages_v_rels_users_id_idx", + "columns": [ + "users_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "_pages_v_rels_parent_fk": { + "name": "_pages_v_rels_parent_fk", + "tableFrom": "_pages_v_rels", + "tableTo": "_pages_v", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "_pages_v_rels_users_fk": { + "name": "_pages_v_rels_users_fk", + "tableFrom": "_pages_v_rels", + "tableTo": "users", + "columnsFrom": [ + "users_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "media": { + "name": "media", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "alt": { + "name": "alt", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "thumbnail_u_r_l": { + "name": "thumbnail_u_r_l", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "filename": { + "name": "filename", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "mime_type": { + "name": "mime_type", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "filesize": { + "name": "filesize", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "width": { + "name": "width", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "height": { + "name": "height", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "original_filename": { + "name": "original_filename", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "original_url": { + "name": "original_url", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "original_mime_type": { + "name": "original_mime_type", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "original_filesize": { + "name": "original_filesize", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "original_width": { + "name": "original_width", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "original_height": { + "name": "original_height", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "original_prefix": { + "name": "original_prefix", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "original__objectkey": { + "name": "original__objectkey", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "focal_x": { + "name": "focal_x", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "focal_y": { + "name": "focal_y", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "media_updated_at_idx": { + "name": "media_updated_at_idx", + "columns": [ + "updated_at" + ], + "isUnique": false + }, + "media_created_at_idx": { + "name": "media_created_at_idx", + "columns": [ + "created_at" + ], + "isUnique": false + }, + "media_filename_idx": { + "name": "media_filename_idx", + "columns": [ + "filename" + ], + "isUnique": true + }, + "media_original_original_filename_idx": { + "name": "media_original_original_filename_idx", + "columns": [ + "original_filename" + ], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "media_rels": { + "name": "media_rels", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "users_id": { + "name": "users_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "media_rels_order_idx": { + "name": "media_rels_order_idx", + "columns": [ + "order" + ], + "isUnique": false + }, + "media_rels_parent_idx": { + "name": "media_rels_parent_idx", + "columns": [ + "parent_id" + ], + "isUnique": false + }, + "media_rels_path_idx": { + "name": "media_rels_path_idx", + "columns": [ + "path" + ], + "isUnique": false + }, + "media_rels_users_id_idx": { + "name": "media_rels_users_id_idx", + "columns": [ + "users_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "media_rels_parent_fk": { + "name": "media_rels_parent_fk", + "tableFrom": "media_rels", + "tableTo": "media", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "media_rels_users_fk": { + "name": "media_rels_users_fk", + "tableFrom": "media_rels", + "tableTo": "users", + "columnsFrom": [ + "users_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "_media_v": { + "name": "_media_v", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_alt": { + "name": "version_alt", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "version_updated_at": { + "name": "version_updated_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_created_at": { + "name": "version_created_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_url": { + "name": "version_url", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_thumbnail_u_r_l": { + "name": "version_thumbnail_u_r_l", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_filename": { + "name": "version_filename", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_mime_type": { + "name": "version_mime_type", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_filesize": { + "name": "version_filesize", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_width": { + "name": "version_width", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_height": { + "name": "version_height", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_original_filename": { + "name": "version_original_filename", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_original_url": { + "name": "version_original_url", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_original_mime_type": { + "name": "version_original_mime_type", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_original_filesize": { + "name": "version_original_filesize", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_original_width": { + "name": "version_original_width", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_original_height": { + "name": "version_original_height", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_original_prefix": { + "name": "version_original_prefix", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_original__objectkey": { + "name": "version_original__objectkey", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_focal_x": { + "name": "version_focal_x", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_focal_y": { + "name": "version_focal_y", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + } + }, + "indexes": { + "_media_v_parent_idx": { + "name": "_media_v_parent_idx", + "columns": [ + "parent_id" + ], + "isUnique": false + }, + "_media_v_version_version_updated_at_idx": { + "name": "_media_v_version_version_updated_at_idx", + "columns": [ + "version_updated_at" + ], + "isUnique": false + }, + "_media_v_version_version_created_at_idx": { + "name": "_media_v_version_version_created_at_idx", + "columns": [ + "version_created_at" + ], + "isUnique": false + }, + "_media_v_version_version_filename_idx": { + "name": "_media_v_version_version_filename_idx", + "columns": [ + "version_filename" + ], + "isUnique": false + }, + "_media_v_version_original_version_original_filename_idx": { + "name": "_media_v_version_original_version_original_filename_idx", + "columns": [ + "version_original_filename" + ], + "isUnique": false + }, + "_media_v_created_at_idx": { + "name": "_media_v_created_at_idx", + "columns": [ + "created_at" + ], + "isUnique": false + }, + "_media_v_updated_at_idx": { + "name": "_media_v_updated_at_idx", + "columns": [ + "updated_at" + ], + "isUnique": false + } + }, + "foreignKeys": { + "_media_v_parent_id_media_id_fk": { + "name": "_media_v_parent_id_media_id_fk", + "tableFrom": "_media_v", + "tableTo": "media", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "_media_v_rels": { + "name": "_media_v_rels", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "users_id": { + "name": "users_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "_media_v_rels_order_idx": { + "name": "_media_v_rels_order_idx", + "columns": [ + "order" + ], + "isUnique": false + }, + "_media_v_rels_parent_idx": { + "name": "_media_v_rels_parent_idx", + "columns": [ + "parent_id" + ], + "isUnique": false + }, + "_media_v_rels_path_idx": { + "name": "_media_v_rels_path_idx", + "columns": [ + "path" + ], + "isUnique": false + }, + "_media_v_rels_users_id_idx": { + "name": "_media_v_rels_users_id_idx", + "columns": [ + "users_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "_media_v_rels_parent_fk": { + "name": "_media_v_rels_parent_fk", + "tableFrom": "_media_v_rels", + "tableTo": "_media_v", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "_media_v_rels_users_fk": { + "name": "_media_v_rels_users_fk", + "tableFrom": "_media_v_rels", + "tableTo": "users", + "columnsFrom": [ + "users_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "payload_kv": { + "name": "payload_kv", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "data": { + "name": "data", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "payload_kv_key_idx": { + "name": "payload_kv_key_idx", + "columns": [ + "key" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "payload_locked_documents": { + "name": "payload_locked_documents", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "global_slug": { + "name": "global_slug", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + } + }, + "indexes": { + "payload_locked_documents_global_slug_idx": { + "name": "payload_locked_documents_global_slug_idx", + "columns": [ + "global_slug" + ], + "isUnique": false + }, + "payload_locked_documents_updated_at_idx": { + "name": "payload_locked_documents_updated_at_idx", + "columns": [ + "updated_at" + ], + "isUnique": false + }, + "payload_locked_documents_created_at_idx": { + "name": "payload_locked_documents_created_at_idx", + "columns": [ + "created_at" + ], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "payload_locked_documents_rels": { + "name": "payload_locked_documents_rels", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "users_id": { + "name": "users_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "posts_id": { + "name": "posts_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "pages_id": { + "name": "pages_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "media_id": { + "name": "media_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "payload_locked_documents_rels_order_idx": { + "name": "payload_locked_documents_rels_order_idx", + "columns": [ + "order" + ], + "isUnique": false + }, + "payload_locked_documents_rels_parent_idx": { + "name": "payload_locked_documents_rels_parent_idx", + "columns": [ + "parent_id" + ], + "isUnique": false + }, + "payload_locked_documents_rels_path_idx": { + "name": "payload_locked_documents_rels_path_idx", + "columns": [ + "path" + ], + "isUnique": false + }, + "payload_locked_documents_rels_users_id_idx": { + "name": "payload_locked_documents_rels_users_id_idx", + "columns": [ + "users_id" + ], + "isUnique": false + }, + "payload_locked_documents_rels_posts_id_idx": { + "name": "payload_locked_documents_rels_posts_id_idx", + "columns": [ + "posts_id" + ], + "isUnique": false + }, + "payload_locked_documents_rels_pages_id_idx": { + "name": "payload_locked_documents_rels_pages_id_idx", + "columns": [ + "pages_id" + ], + "isUnique": false + }, + "payload_locked_documents_rels_media_id_idx": { + "name": "payload_locked_documents_rels_media_id_idx", + "columns": [ + "media_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "payload_locked_documents_rels_parent_fk": { + "name": "payload_locked_documents_rels_parent_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "payload_locked_documents", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_users_fk": { + "name": "payload_locked_documents_rels_users_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "users", + "columnsFrom": [ + "users_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_posts_fk": { + "name": "payload_locked_documents_rels_posts_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "posts", + "columnsFrom": [ + "posts_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_pages_fk": { + "name": "payload_locked_documents_rels_pages_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "pages", + "columnsFrom": [ + "pages_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_media_fk": { + "name": "payload_locked_documents_rels_media_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "media", + "columnsFrom": [ + "media_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "payload_preferences": { + "name": "payload_preferences", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + } + }, + "indexes": { + "payload_preferences_key_idx": { + "name": "payload_preferences_key_idx", + "columns": [ + "key" + ], + "isUnique": false + }, + "payload_preferences_updated_at_idx": { + "name": "payload_preferences_updated_at_idx", + "columns": [ + "updated_at" + ], + "isUnique": false + }, + "payload_preferences_created_at_idx": { + "name": "payload_preferences_created_at_idx", + "columns": [ + "created_at" + ], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "payload_preferences_rels": { + "name": "payload_preferences_rels", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "users_id": { + "name": "users_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "payload_preferences_rels_order_idx": { + "name": "payload_preferences_rels_order_idx", + "columns": [ + "order" + ], + "isUnique": false + }, + "payload_preferences_rels_parent_idx": { + "name": "payload_preferences_rels_parent_idx", + "columns": [ + "parent_id" + ], + "isUnique": false + }, + "payload_preferences_rels_path_idx": { + "name": "payload_preferences_rels_path_idx", + "columns": [ + "path" + ], + "isUnique": false + }, + "payload_preferences_rels_users_id_idx": { + "name": "payload_preferences_rels_users_id_idx", + "columns": [ + "users_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "payload_preferences_rels_parent_fk": { + "name": "payload_preferences_rels_parent_fk", + "tableFrom": "payload_preferences_rels", + "tableTo": "payload_preferences", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_preferences_rels_users_fk": { + "name": "payload_preferences_rels_users_fk", + "tableFrom": "payload_preferences_rels", + "tableTo": "users", + "columnsFrom": [ + "users_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "payload_migrations": { + "name": "payload_migrations", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "batch": { + "name": "batch", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + } + }, + "indexes": { + "payload_migrations_updated_at_idx": { + "name": "payload_migrations_updated_at_idx", + "columns": [ + "updated_at" + ], + "isUnique": false + }, + "payload_migrations_created_at_idx": { + "name": "payload_migrations_created_at_idx", + "columns": [ + "created_at" + ], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "payload_llm_instructions": { + "name": "payload_llm_instructions", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "entity_slug": { + "name": "entity_slug", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "entity_type": { + "name": "entity_type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "additional_instructions": { + "name": "additional_instructions", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + } + }, + "indexes": { + "payload_llm_instructions_entity_slug_idx": { + "name": "payload_llm_instructions_entity_slug_idx", + "columns": [ + "entity_slug" + ], + "isUnique": false + }, + "payload_llm_instructions_updated_at_idx": { + "name": "payload_llm_instructions_updated_at_idx", + "columns": [ + "updated_at" + ], + "isUnique": false + }, + "payload_llm_instructions_created_at_idx": { + "name": "payload_llm_instructions_created_at_idx", + "columns": [ + "created_at" + ], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "payload_llm_instructions_rels": { + "name": "payload_llm_instructions_rels", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "parent_id": { + "name": "parent_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "users_id": { + "name": "users_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "payload_llm_instructions_rels_order_idx": { + "name": "payload_llm_instructions_rels_order_idx", + "columns": [ + "order" + ], + "isUnique": false + }, + "payload_llm_instructions_rels_parent_idx": { + "name": "payload_llm_instructions_rels_parent_idx", + "columns": [ + "parent_id" + ], + "isUnique": false + }, + "payload_llm_instructions_rels_path_idx": { + "name": "payload_llm_instructions_rels_path_idx", + "columns": [ + "path" + ], + "isUnique": false + }, + "payload_llm_instructions_rels_users_id_idx": { + "name": "payload_llm_instructions_rels_users_id_idx", + "columns": [ + "users_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "payload_llm_instructions_rels_parent_fk": { + "name": "payload_llm_instructions_rels_parent_fk", + "tableFrom": "payload_llm_instructions_rels", + "tableTo": "payload_llm_instructions", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_llm_instructions_rels_users_fk": { + "name": "payload_llm_instructions_rels_users_fk", + "tableFrom": "payload_llm_instructions_rels", + "tableTo": "users", + "columnsFrom": [ + "users_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "site_settings": { + "name": "site_settings", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "site_name": { + "name": "site_name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'Payload × React Router'" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "site_settings_locales": { + "name": "site_settings_locales", + "columns": { + "tagline": { + "name": "tagline", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "_locale": { + "name": "_locale", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "site_settings_locales_locale_parent_id_unique": { + "name": "site_settings_locales_locale_parent_id_unique", + "columns": [ + "_locale", + "_parent_id" + ], + "isUnique": true + } + }, + "foreignKeys": { + "site_settings_locales_parent_id_fk": { + "name": "site_settings_locales_parent_id_fk", + "tableFrom": "site_settings_locales", + "tableTo": "site_settings", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "site_settings_rels": { + "name": "site_settings_rels", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "users_id": { + "name": "users_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "site_settings_rels_order_idx": { + "name": "site_settings_rels_order_idx", + "columns": [ + "order" + ], + "isUnique": false + }, + "site_settings_rels_parent_idx": { + "name": "site_settings_rels_parent_idx", + "columns": [ + "parent_id" + ], + "isUnique": false + }, + "site_settings_rels_path_idx": { + "name": "site_settings_rels_path_idx", + "columns": [ + "path" + ], + "isUnique": false + }, + "site_settings_rels_users_id_idx": { + "name": "site_settings_rels_users_id_idx", + "columns": [ + "users_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "site_settings_rels_parent_fk": { + "name": "site_settings_rels_parent_fk", + "tableFrom": "site_settings_rels", + "tableTo": "site_settings", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "site_settings_rels_users_fk": { + "name": "site_settings_rels_users_fk", + "tableFrom": "site_settings_rels", + "tableTo": "users", + "columnsFrom": [ + "users_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "_site_settings_v": { + "name": "_site_settings_v", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "version_site_name": { + "name": "version_site_name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'Payload × React Router'" + }, + "version_updated_at": { + "name": "version_updated_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version_created_at": { + "name": "version_created_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))" + } + }, + "indexes": { + "_site_settings_v_created_at_idx": { + "name": "_site_settings_v_created_at_idx", + "columns": [ + "created_at" + ], + "isUnique": false + }, + "_site_settings_v_updated_at_idx": { + "name": "_site_settings_v_updated_at_idx", + "columns": [ + "updated_at" + ], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "_site_settings_v_locales": { + "name": "_site_settings_v_locales", + "columns": { + "version_tagline": { + "name": "version_tagline", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "_locale": { + "name": "_locale", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "_site_settings_v_locales_locale_parent_id_unique": { + "name": "_site_settings_v_locales_locale_parent_id_unique", + "columns": [ + "_locale", + "_parent_id" + ], + "isUnique": true + } + }, + "foreignKeys": { + "_site_settings_v_locales_parent_id_fk": { + "name": "_site_settings_v_locales_parent_id_fk", + "tableFrom": "_site_settings_v_locales", + "tableTo": "_site_settings_v", + "columnsFrom": [ + "_parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "_site_settings_v_rels": { + "name": "_site_settings_v_rels", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "users_id": { + "name": "users_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "_site_settings_v_rels_order_idx": { + "name": "_site_settings_v_rels_order_idx", + "columns": [ + "order" + ], + "isUnique": false + }, + "_site_settings_v_rels_parent_idx": { + "name": "_site_settings_v_rels_parent_idx", + "columns": [ + "parent_id" + ], + "isUnique": false + }, + "_site_settings_v_rels_path_idx": { + "name": "_site_settings_v_rels_path_idx", + "columns": [ + "path" + ], + "isUnique": false + }, + "_site_settings_v_rels_users_id_idx": { + "name": "_site_settings_v_rels_users_id_idx", + "columns": [ + "users_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "_site_settings_v_rels_parent_fk": { + "name": "_site_settings_v_rels_parent_fk", + "tableFrom": "_site_settings_v_rels", + "tableTo": "_site_settings_v", + "columnsFrom": [ + "parent_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "_site_settings_v_rels_users_fk": { + "name": "_site_settings_v_rels_users_fk", + "tableFrom": "_site_settings_v_rels", + "tableTo": "users", + "columnsFrom": [ + "users_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + }, + "id": "8b29331c-4e1d-482e-9317-9bbccd3e3ff2", + "prevId": "00000000-0000-0000-0000-000000000000" +} \ No newline at end of file diff --git a/demo/migrations/20261009_093551_initial.ts b/demo/migrations/20261009_093551_initial.ts new file mode 100644 index 0000000..786995d --- /dev/null +++ b/demo/migrations/20261009_093551_initial.ts @@ -0,0 +1,774 @@ +import { MigrateUpArgs, MigrateDownArgs, sql } from '@payloadcms/db-sqlite' + +/** + * Turns foreign keys off for the DROP TABLE statements of `down`, then makes sure that they are off. + * + * WARNING: with foreign keys on, SQLite refuses to drop a table that other tables reference. + * `down` then stops after it dropped only some tables. SQLite also ignores this pragma inside a + * transaction, so `down` stops before it drops anything if the pragma has no effect. + */ +async function turnForeignKeysOff(db: MigrateDownArgs['db']): Promise { + await db.run(sql`PRAGMA foreign_keys=OFF;`) + const state = await db.run(sql`PRAGMA foreign_keys;`) + if (Number(Object.values(state.rows[0] ?? {})[0]) !== 0) { + throw new Error( + 'initial: foreign keys are still on. Run this rollback without `transactionOptions` on the SQLite adapter.', + ) + } +} + +export async function up({ db, payload, req }: MigrateUpArgs): Promise { + await db.run(sql`CREATE TABLE \`users_sessions\` ( + \`_order\` integer NOT NULL, + \`_parent_id\` integer NOT NULL, + \`id\` text PRIMARY KEY NOT NULL, + \`created_at\` text, + \`expires_at\` text NOT NULL, + FOREIGN KEY (\`_parent_id\`) REFERENCES \`users\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`users_sessions_order_idx\` ON \`users_sessions\` (\`_order\`);`) + await db.run(sql`CREATE INDEX \`users_sessions_parent_id_idx\` ON \`users_sessions\` (\`_parent_id\`);`) + await db.run(sql`CREATE TABLE \`users\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`name\` text, + \`role\` text DEFAULT 'editor', + \`updated_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL, + \`created_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL, + \`email\` text NOT NULL, + \`reset_password_token\` text, + \`reset_password_expiration\` text, + \`salt\` text, + \`hash\` text, + \`reset_password_requested_at\` text, + \`login_attempts\` numeric DEFAULT 0, + \`lock_until\` text + ); + `) + await db.run(sql`CREATE INDEX \`users_updated_at_idx\` ON \`users\` (\`updated_at\`);`) + await db.run(sql`CREATE INDEX \`users_created_at_idx\` ON \`users\` (\`created_at\`);`) + await db.run(sql`CREATE UNIQUE INDEX \`users_email_idx\` ON \`users\` (\`email\`);`) + await db.run(sql`CREATE TABLE \`users_rels\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`order\` integer, + \`parent_id\` integer NOT NULL, + \`path\` text NOT NULL, + \`users_id\` integer, + FOREIGN KEY (\`parent_id\`) REFERENCES \`users\`(\`id\`) ON UPDATE no action ON DELETE cascade, + FOREIGN KEY (\`users_id\`) REFERENCES \`users\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`users_rels_order_idx\` ON \`users_rels\` (\`order\`);`) + await db.run(sql`CREATE INDEX \`users_rels_parent_idx\` ON \`users_rels\` (\`parent_id\`);`) + await db.run(sql`CREATE INDEX \`users_rels_path_idx\` ON \`users_rels\` (\`path\`);`) + await db.run(sql`CREATE INDEX \`users_rels_users_id_idx\` ON \`users_rels\` (\`users_id\`);`) + await db.run(sql`CREATE TABLE \`_users_v_version_sessions\` ( + \`_order\` integer NOT NULL, + \`_parent_id\` integer NOT NULL, + \`id\` integer PRIMARY KEY NOT NULL, + \`_uuid\` text NOT NULL, + \`created_at\` text, + \`expires_at\` text NOT NULL, + FOREIGN KEY (\`_parent_id\`) REFERENCES \`_users_v\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`_users_v_version_sessions_order_idx\` ON \`_users_v_version_sessions\` (\`_order\`);`) + await db.run(sql`CREATE INDEX \`_users_v_version_sessions_parent_id_idx\` ON \`_users_v_version_sessions\` (\`_parent_id\`);`) + await db.run(sql`CREATE TABLE \`_users_v\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`parent_id\` integer, + \`version_name\` text, + \`version_role\` text DEFAULT 'editor', + \`version_updated_at\` text, + \`version_created_at\` text, + \`version_email\` text NOT NULL, + \`version_reset_password_token\` text, + \`version_reset_password_expiration\` text, + \`version_salt\` text, + \`version_hash\` text, + \`version_reset_password_requested_at\` text, + \`version_login_attempts\` numeric DEFAULT 0, + \`version_lock_until\` text, + \`created_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL, + \`updated_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL, + FOREIGN KEY (\`parent_id\`) REFERENCES \`users\`(\`id\`) ON UPDATE no action ON DELETE set null + ); + `) + await db.run(sql`CREATE INDEX \`_users_v_parent_idx\` ON \`_users_v\` (\`parent_id\`);`) + await db.run(sql`CREATE INDEX \`_users_v_version_version_updated_at_idx\` ON \`_users_v\` (\`version_updated_at\`);`) + await db.run(sql`CREATE INDEX \`_users_v_version_version_created_at_idx\` ON \`_users_v\` (\`version_created_at\`);`) + await db.run(sql`CREATE INDEX \`_users_v_version_version_email_idx\` ON \`_users_v\` (\`version_email\`);`) + await db.run(sql`CREATE INDEX \`_users_v_created_at_idx\` ON \`_users_v\` (\`created_at\`);`) + await db.run(sql`CREATE INDEX \`_users_v_updated_at_idx\` ON \`_users_v\` (\`updated_at\`);`) + await db.run(sql`CREATE TABLE \`_users_v_rels\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`order\` integer, + \`parent_id\` integer NOT NULL, + \`path\` text NOT NULL, + \`users_id\` integer, + FOREIGN KEY (\`parent_id\`) REFERENCES \`_users_v\`(\`id\`) ON UPDATE no action ON DELETE cascade, + FOREIGN KEY (\`users_id\`) REFERENCES \`users\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`_users_v_rels_order_idx\` ON \`_users_v_rels\` (\`order\`);`) + await db.run(sql`CREATE INDEX \`_users_v_rels_parent_idx\` ON \`_users_v_rels\` (\`parent_id\`);`) + await db.run(sql`CREATE INDEX \`_users_v_rels_path_idx\` ON \`_users_v_rels\` (\`path\`);`) + await db.run(sql`CREATE INDEX \`_users_v_rels_users_id_idx\` ON \`_users_v_rels\` (\`users_id\`);`) + await db.run(sql`CREATE TABLE \`posts\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`slug\` text, + \`published_at\` text, + \`cover_id\` integer, + \`author_id\` integer, + \`updated_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL, + \`created_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL, + FOREIGN KEY (\`cover_id\`) REFERENCES \`media\`(\`id\`) ON UPDATE no action ON DELETE set null, + FOREIGN KEY (\`author_id\`) REFERENCES \`users\`(\`id\`) ON UPDATE no action ON DELETE set null + ); + `) + await db.run(sql`CREATE UNIQUE INDEX \`posts_slug_idx\` ON \`posts\` (\`slug\`);`) + await db.run(sql`CREATE INDEX \`posts_cover_idx\` ON \`posts\` (\`cover_id\`);`) + await db.run(sql`CREATE INDEX \`posts_author_idx\` ON \`posts\` (\`author_id\`);`) + await db.run(sql`CREATE INDEX \`posts_updated_at_idx\` ON \`posts\` (\`updated_at\`);`) + await db.run(sql`CREATE INDEX \`posts_created_at_idx\` ON \`posts\` (\`created_at\`);`) + await db.run(sql`CREATE TABLE \`posts_locales\` ( + \`title\` text, + \`excerpt\` text, + \`content\` text, + \`_status\` text DEFAULT 'draft', + \`id\` integer PRIMARY KEY NOT NULL, + \`_locale\` text NOT NULL, + \`_parent_id\` integer NOT NULL, + FOREIGN KEY (\`_parent_id\`) REFERENCES \`posts\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`posts__status_idx\` ON \`posts_locales\` (\`_status\`,\`_locale\`);`) + await db.run(sql`CREATE UNIQUE INDEX \`posts_locales_locale_parent_id_unique\` ON \`posts_locales\` (\`_locale\`,\`_parent_id\`);`) + await db.run(sql`CREATE TABLE \`posts_texts\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`order\` integer NOT NULL, + \`parent_id\` integer NOT NULL, + \`path\` text NOT NULL, + \`text\` text, + FOREIGN KEY (\`parent_id\`) REFERENCES \`posts\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`posts_texts_order_parent\` ON \`posts_texts\` (\`order\`,\`parent_id\`);`) + await db.run(sql`CREATE TABLE \`posts_rels\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`order\` integer, + \`parent_id\` integer NOT NULL, + \`path\` text NOT NULL, + \`users_id\` integer, + FOREIGN KEY (\`parent_id\`) REFERENCES \`posts\`(\`id\`) ON UPDATE no action ON DELETE cascade, + FOREIGN KEY (\`users_id\`) REFERENCES \`users\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`posts_rels_order_idx\` ON \`posts_rels\` (\`order\`);`) + await db.run(sql`CREATE INDEX \`posts_rels_parent_idx\` ON \`posts_rels\` (\`parent_id\`);`) + await db.run(sql`CREATE INDEX \`posts_rels_path_idx\` ON \`posts_rels\` (\`path\`);`) + await db.run(sql`CREATE INDEX \`posts_rels_users_id_idx\` ON \`posts_rels\` (\`users_id\`);`) + await db.run(sql`CREATE TABLE \`_posts_v\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`parent_id\` integer, + \`version_slug\` text, + \`version_published_at\` text, + \`version_cover_id\` integer, + \`version_author_id\` integer, + \`version_updated_at\` text, + \`version_created_at\` text, + \`created_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL, + \`updated_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL, + \`published_locale\` text, + \`latest\` integer, + \`autosave\` integer, + FOREIGN KEY (\`parent_id\`) REFERENCES \`posts\`(\`id\`) ON UPDATE no action ON DELETE set null, + FOREIGN KEY (\`version_cover_id\`) REFERENCES \`media\`(\`id\`) ON UPDATE no action ON DELETE set null, + FOREIGN KEY (\`version_author_id\`) REFERENCES \`users\`(\`id\`) ON UPDATE no action ON DELETE set null + ); + `) + await db.run(sql`CREATE INDEX \`_posts_v_parent_idx\` ON \`_posts_v\` (\`parent_id\`);`) + await db.run(sql`CREATE INDEX \`_posts_v_version_version_slug_idx\` ON \`_posts_v\` (\`version_slug\`);`) + await db.run(sql`CREATE INDEX \`_posts_v_version_version_cover_idx\` ON \`_posts_v\` (\`version_cover_id\`);`) + await db.run(sql`CREATE INDEX \`_posts_v_version_version_author_idx\` ON \`_posts_v\` (\`version_author_id\`);`) + await db.run(sql`CREATE INDEX \`_posts_v_version_version_updated_at_idx\` ON \`_posts_v\` (\`version_updated_at\`);`) + await db.run(sql`CREATE INDEX \`_posts_v_version_version_created_at_idx\` ON \`_posts_v\` (\`version_created_at\`);`) + await db.run(sql`CREATE INDEX \`_posts_v_created_at_idx\` ON \`_posts_v\` (\`created_at\`);`) + await db.run(sql`CREATE INDEX \`_posts_v_updated_at_idx\` ON \`_posts_v\` (\`updated_at\`);`) + await db.run(sql`CREATE INDEX \`_posts_v_published_locale_idx\` ON \`_posts_v\` (\`published_locale\`);`) + await db.run(sql`CREATE INDEX \`_posts_v_latest_idx\` ON \`_posts_v\` (\`latest\`);`) + await db.run(sql`CREATE INDEX \`_posts_v_autosave_idx\` ON \`_posts_v\` (\`autosave\`);`) + await db.run(sql`CREATE TABLE \`_posts_v_locales\` ( + \`version_title\` text, + \`version_excerpt\` text, + \`version_content\` text, + \`version__status\` text DEFAULT 'draft', + \`id\` integer PRIMARY KEY NOT NULL, + \`_locale\` text NOT NULL, + \`_parent_id\` integer NOT NULL, + FOREIGN KEY (\`_parent_id\`) REFERENCES \`_posts_v\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`_posts_v_version_version__status_idx\` ON \`_posts_v_locales\` (\`version__status\`,\`_locale\`);`) + await db.run(sql`CREATE UNIQUE INDEX \`_posts_v_locales_locale_parent_id_unique\` ON \`_posts_v_locales\` (\`_locale\`,\`_parent_id\`);`) + await db.run(sql`CREATE TABLE \`_posts_v_texts\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`order\` integer NOT NULL, + \`parent_id\` integer NOT NULL, + \`path\` text NOT NULL, + \`text\` text, + FOREIGN KEY (\`parent_id\`) REFERENCES \`_posts_v\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`_posts_v_texts_order_parent\` ON \`_posts_v_texts\` (\`order\`,\`parent_id\`);`) + await db.run(sql`CREATE TABLE \`_posts_v_rels\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`order\` integer, + \`parent_id\` integer NOT NULL, + \`path\` text NOT NULL, + \`users_id\` integer, + FOREIGN KEY (\`parent_id\`) REFERENCES \`_posts_v\`(\`id\`) ON UPDATE no action ON DELETE cascade, + FOREIGN KEY (\`users_id\`) REFERENCES \`users\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`_posts_v_rels_order_idx\` ON \`_posts_v_rels\` (\`order\`);`) + await db.run(sql`CREATE INDEX \`_posts_v_rels_parent_idx\` ON \`_posts_v_rels\` (\`parent_id\`);`) + await db.run(sql`CREATE INDEX \`_posts_v_rels_path_idx\` ON \`_posts_v_rels\` (\`path\`);`) + await db.run(sql`CREATE INDEX \`_posts_v_rels_users_id_idx\` ON \`_posts_v_rels\` (\`users_id\`);`) + await db.run(sql`CREATE TABLE \`pages_blocks_hero\` ( + \`_order\` integer NOT NULL, + \`_parent_id\` integer NOT NULL, + \`_path\` text NOT NULL, + \`_locale\` text NOT NULL, + \`id\` text PRIMARY KEY NOT NULL, + \`heading\` text, + \`subheading\` text, + \`image_id\` integer, + \`block_name\` text, + FOREIGN KEY (\`image_id\`) REFERENCES \`media\`(\`id\`) ON UPDATE no action ON DELETE set null, + FOREIGN KEY (\`_parent_id\`) REFERENCES \`pages\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`pages_blocks_hero_order_idx\` ON \`pages_blocks_hero\` (\`_order\`);`) + await db.run(sql`CREATE INDEX \`pages_blocks_hero_parent_id_idx\` ON \`pages_blocks_hero\` (\`_parent_id\`);`) + await db.run(sql`CREATE INDEX \`pages_blocks_hero_path_idx\` ON \`pages_blocks_hero\` (\`_path\`);`) + await db.run(sql`CREATE INDEX \`pages_blocks_hero_locale_idx\` ON \`pages_blocks_hero\` (\`_locale\`);`) + await db.run(sql`CREATE INDEX \`pages_blocks_hero_image_idx\` ON \`pages_blocks_hero\` (\`image_id\`);`) + await db.run(sql`CREATE TABLE \`pages_blocks_content\` ( + \`_order\` integer NOT NULL, + \`_parent_id\` integer NOT NULL, + \`_path\` text NOT NULL, + \`_locale\` text NOT NULL, + \`id\` text PRIMARY KEY NOT NULL, + \`body\` text, + \`block_name\` text, + FOREIGN KEY (\`_parent_id\`) REFERENCES \`pages\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`pages_blocks_content_order_idx\` ON \`pages_blocks_content\` (\`_order\`);`) + await db.run(sql`CREATE INDEX \`pages_blocks_content_parent_id_idx\` ON \`pages_blocks_content\` (\`_parent_id\`);`) + await db.run(sql`CREATE INDEX \`pages_blocks_content_path_idx\` ON \`pages_blocks_content\` (\`_path\`);`) + await db.run(sql`CREATE INDEX \`pages_blocks_content_locale_idx\` ON \`pages_blocks_content\` (\`_locale\`);`) + await db.run(sql`CREATE TABLE \`pages_blocks_media_text\` ( + \`_order\` integer NOT NULL, + \`_parent_id\` integer NOT NULL, + \`_path\` text NOT NULL, + \`_locale\` text NOT NULL, + \`id\` text PRIMARY KEY NOT NULL, + \`media_id\` integer, + \`body\` text, + \`media_position\` text DEFAULT 'left', + \`block_name\` text, + FOREIGN KEY (\`media_id\`) REFERENCES \`media\`(\`id\`) ON UPDATE no action ON DELETE set null, + FOREIGN KEY (\`_parent_id\`) REFERENCES \`pages\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`pages_blocks_media_text_order_idx\` ON \`pages_blocks_media_text\` (\`_order\`);`) + await db.run(sql`CREATE INDEX \`pages_blocks_media_text_parent_id_idx\` ON \`pages_blocks_media_text\` (\`_parent_id\`);`) + await db.run(sql`CREATE INDEX \`pages_blocks_media_text_path_idx\` ON \`pages_blocks_media_text\` (\`_path\`);`) + await db.run(sql`CREATE INDEX \`pages_blocks_media_text_locale_idx\` ON \`pages_blocks_media_text\` (\`_locale\`);`) + await db.run(sql`CREATE INDEX \`pages_blocks_media_text_media_idx\` ON \`pages_blocks_media_text\` (\`media_id\`);`) + await db.run(sql`CREATE TABLE \`pages_blocks_call_to_action\` ( + \`_order\` integer NOT NULL, + \`_parent_id\` integer NOT NULL, + \`_path\` text NOT NULL, + \`_locale\` text NOT NULL, + \`id\` text PRIMARY KEY NOT NULL, + \`heading\` text, + \`text\` text, + \`button_label\` text, + \`button_link\` text, + \`block_name\` text, + FOREIGN KEY (\`_parent_id\`) REFERENCES \`pages\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`pages_blocks_call_to_action_order_idx\` ON \`pages_blocks_call_to_action\` (\`_order\`);`) + await db.run(sql`CREATE INDEX \`pages_blocks_call_to_action_parent_id_idx\` ON \`pages_blocks_call_to_action\` (\`_parent_id\`);`) + await db.run(sql`CREATE INDEX \`pages_blocks_call_to_action_path_idx\` ON \`pages_blocks_call_to_action\` (\`_path\`);`) + await db.run(sql`CREATE INDEX \`pages_blocks_call_to_action_locale_idx\` ON \`pages_blocks_call_to_action\` (\`_locale\`);`) + await db.run(sql`CREATE TABLE \`pages\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`slug\` text, + \`updated_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL, + \`created_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL + ); + `) + await db.run(sql`CREATE UNIQUE INDEX \`pages_slug_idx\` ON \`pages\` (\`slug\`);`) + await db.run(sql`CREATE INDEX \`pages_updated_at_idx\` ON \`pages\` (\`updated_at\`);`) + await db.run(sql`CREATE INDEX \`pages_created_at_idx\` ON \`pages\` (\`created_at\`);`) + await db.run(sql`CREATE TABLE \`pages_locales\` ( + \`title\` text, + \`_status\` text DEFAULT 'draft', + \`id\` integer PRIMARY KEY NOT NULL, + \`_locale\` text NOT NULL, + \`_parent_id\` integer NOT NULL, + FOREIGN KEY (\`_parent_id\`) REFERENCES \`pages\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`pages__status_idx\` ON \`pages_locales\` (\`_status\`,\`_locale\`);`) + await db.run(sql`CREATE UNIQUE INDEX \`pages_locales_locale_parent_id_unique\` ON \`pages_locales\` (\`_locale\`,\`_parent_id\`);`) + await db.run(sql`CREATE TABLE \`pages_rels\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`order\` integer, + \`parent_id\` integer NOT NULL, + \`path\` text NOT NULL, + \`users_id\` integer, + FOREIGN KEY (\`parent_id\`) REFERENCES \`pages\`(\`id\`) ON UPDATE no action ON DELETE cascade, + FOREIGN KEY (\`users_id\`) REFERENCES \`users\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`pages_rels_order_idx\` ON \`pages_rels\` (\`order\`);`) + await db.run(sql`CREATE INDEX \`pages_rels_parent_idx\` ON \`pages_rels\` (\`parent_id\`);`) + await db.run(sql`CREATE INDEX \`pages_rels_path_idx\` ON \`pages_rels\` (\`path\`);`) + await db.run(sql`CREATE INDEX \`pages_rels_users_id_idx\` ON \`pages_rels\` (\`users_id\`);`) + await db.run(sql`CREATE TABLE \`_pages_v_blocks_hero\` ( + \`_order\` integer NOT NULL, + \`_parent_id\` integer NOT NULL, + \`_path\` text NOT NULL, + \`_locale\` text NOT NULL, + \`id\` integer PRIMARY KEY NOT NULL, + \`heading\` text, + \`subheading\` text, + \`image_id\` integer, + \`_uuid\` text, + \`block_name\` text, + FOREIGN KEY (\`image_id\`) REFERENCES \`media\`(\`id\`) ON UPDATE no action ON DELETE set null, + FOREIGN KEY (\`_parent_id\`) REFERENCES \`_pages_v\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`_pages_v_blocks_hero_order_idx\` ON \`_pages_v_blocks_hero\` (\`_order\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_blocks_hero_parent_id_idx\` ON \`_pages_v_blocks_hero\` (\`_parent_id\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_blocks_hero_path_idx\` ON \`_pages_v_blocks_hero\` (\`_path\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_blocks_hero_locale_idx\` ON \`_pages_v_blocks_hero\` (\`_locale\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_blocks_hero_image_idx\` ON \`_pages_v_blocks_hero\` (\`image_id\`);`) + await db.run(sql`CREATE TABLE \`_pages_v_blocks_content\` ( + \`_order\` integer NOT NULL, + \`_parent_id\` integer NOT NULL, + \`_path\` text NOT NULL, + \`_locale\` text NOT NULL, + \`id\` integer PRIMARY KEY NOT NULL, + \`body\` text, + \`_uuid\` text, + \`block_name\` text, + FOREIGN KEY (\`_parent_id\`) REFERENCES \`_pages_v\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`_pages_v_blocks_content_order_idx\` ON \`_pages_v_blocks_content\` (\`_order\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_blocks_content_parent_id_idx\` ON \`_pages_v_blocks_content\` (\`_parent_id\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_blocks_content_path_idx\` ON \`_pages_v_blocks_content\` (\`_path\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_blocks_content_locale_idx\` ON \`_pages_v_blocks_content\` (\`_locale\`);`) + await db.run(sql`CREATE TABLE \`_pages_v_blocks_media_text\` ( + \`_order\` integer NOT NULL, + \`_parent_id\` integer NOT NULL, + \`_path\` text NOT NULL, + \`_locale\` text NOT NULL, + \`id\` integer PRIMARY KEY NOT NULL, + \`media_id\` integer, + \`body\` text, + \`media_position\` text DEFAULT 'left', + \`_uuid\` text, + \`block_name\` text, + FOREIGN KEY (\`media_id\`) REFERENCES \`media\`(\`id\`) ON UPDATE no action ON DELETE set null, + FOREIGN KEY (\`_parent_id\`) REFERENCES \`_pages_v\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`_pages_v_blocks_media_text_order_idx\` ON \`_pages_v_blocks_media_text\` (\`_order\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_blocks_media_text_parent_id_idx\` ON \`_pages_v_blocks_media_text\` (\`_parent_id\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_blocks_media_text_path_idx\` ON \`_pages_v_blocks_media_text\` (\`_path\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_blocks_media_text_locale_idx\` ON \`_pages_v_blocks_media_text\` (\`_locale\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_blocks_media_text_media_idx\` ON \`_pages_v_blocks_media_text\` (\`media_id\`);`) + await db.run(sql`CREATE TABLE \`_pages_v_blocks_call_to_action\` ( + \`_order\` integer NOT NULL, + \`_parent_id\` integer NOT NULL, + \`_path\` text NOT NULL, + \`_locale\` text NOT NULL, + \`id\` integer PRIMARY KEY NOT NULL, + \`heading\` text, + \`text\` text, + \`button_label\` text, + \`button_link\` text, + \`_uuid\` text, + \`block_name\` text, + FOREIGN KEY (\`_parent_id\`) REFERENCES \`_pages_v\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`_pages_v_blocks_call_to_action_order_idx\` ON \`_pages_v_blocks_call_to_action\` (\`_order\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_blocks_call_to_action_parent_id_idx\` ON \`_pages_v_blocks_call_to_action\` (\`_parent_id\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_blocks_call_to_action_path_idx\` ON \`_pages_v_blocks_call_to_action\` (\`_path\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_blocks_call_to_action_locale_idx\` ON \`_pages_v_blocks_call_to_action\` (\`_locale\`);`) + await db.run(sql`CREATE TABLE \`_pages_v\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`parent_id\` integer, + \`version_slug\` text, + \`version_updated_at\` text, + \`version_created_at\` text, + \`created_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL, + \`updated_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL, + \`published_locale\` text, + \`latest\` integer, + \`autosave\` integer, + FOREIGN KEY (\`parent_id\`) REFERENCES \`pages\`(\`id\`) ON UPDATE no action ON DELETE set null + ); + `) + await db.run(sql`CREATE INDEX \`_pages_v_parent_idx\` ON \`_pages_v\` (\`parent_id\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_version_version_slug_idx\` ON \`_pages_v\` (\`version_slug\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_version_version_updated_at_idx\` ON \`_pages_v\` (\`version_updated_at\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_version_version_created_at_idx\` ON \`_pages_v\` (\`version_created_at\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_created_at_idx\` ON \`_pages_v\` (\`created_at\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_updated_at_idx\` ON \`_pages_v\` (\`updated_at\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_published_locale_idx\` ON \`_pages_v\` (\`published_locale\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_latest_idx\` ON \`_pages_v\` (\`latest\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_autosave_idx\` ON \`_pages_v\` (\`autosave\`);`) + await db.run(sql`CREATE TABLE \`_pages_v_locales\` ( + \`version_title\` text, + \`version__status\` text DEFAULT 'draft', + \`id\` integer PRIMARY KEY NOT NULL, + \`_locale\` text NOT NULL, + \`_parent_id\` integer NOT NULL, + FOREIGN KEY (\`_parent_id\`) REFERENCES \`_pages_v\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`_pages_v_version_version__status_idx\` ON \`_pages_v_locales\` (\`version__status\`,\`_locale\`);`) + await db.run(sql`CREATE UNIQUE INDEX \`_pages_v_locales_locale_parent_id_unique\` ON \`_pages_v_locales\` (\`_locale\`,\`_parent_id\`);`) + await db.run(sql`CREATE TABLE \`_pages_v_rels\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`order\` integer, + \`parent_id\` integer NOT NULL, + \`path\` text NOT NULL, + \`users_id\` integer, + FOREIGN KEY (\`parent_id\`) REFERENCES \`_pages_v\`(\`id\`) ON UPDATE no action ON DELETE cascade, + FOREIGN KEY (\`users_id\`) REFERENCES \`users\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`_pages_v_rels_order_idx\` ON \`_pages_v_rels\` (\`order\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_rels_parent_idx\` ON \`_pages_v_rels\` (\`parent_id\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_rels_path_idx\` ON \`_pages_v_rels\` (\`path\`);`) + await db.run(sql`CREATE INDEX \`_pages_v_rels_users_id_idx\` ON \`_pages_v_rels\` (\`users_id\`);`) + await db.run(sql`CREATE TABLE \`media\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`alt\` text NOT NULL, + \`updated_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL, + \`created_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL, + \`url\` text, + \`thumbnail_u_r_l\` text, + \`filename\` text, + \`mime_type\` text, + \`filesize\` numeric, + \`width\` numeric, + \`height\` numeric, + \`original_filename\` text, + \`original_url\` text, + \`original_mime_type\` text, + \`original_filesize\` numeric, + \`original_width\` numeric, + \`original_height\` numeric, + \`original_prefix\` text, + \`original__objectkey\` text, + \`focal_x\` numeric, + \`focal_y\` numeric + ); + `) + await db.run(sql`CREATE INDEX \`media_updated_at_idx\` ON \`media\` (\`updated_at\`);`) + await db.run(sql`CREATE INDEX \`media_created_at_idx\` ON \`media\` (\`created_at\`);`) + await db.run(sql`CREATE UNIQUE INDEX \`media_filename_idx\` ON \`media\` (\`filename\`);`) + await db.run(sql`CREATE INDEX \`media_original_original_filename_idx\` ON \`media\` (\`original_filename\`);`) + await db.run(sql`CREATE TABLE \`media_rels\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`order\` integer, + \`parent_id\` integer NOT NULL, + \`path\` text NOT NULL, + \`users_id\` integer, + FOREIGN KEY (\`parent_id\`) REFERENCES \`media\`(\`id\`) ON UPDATE no action ON DELETE cascade, + FOREIGN KEY (\`users_id\`) REFERENCES \`users\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`media_rels_order_idx\` ON \`media_rels\` (\`order\`);`) + await db.run(sql`CREATE INDEX \`media_rels_parent_idx\` ON \`media_rels\` (\`parent_id\`);`) + await db.run(sql`CREATE INDEX \`media_rels_path_idx\` ON \`media_rels\` (\`path\`);`) + await db.run(sql`CREATE INDEX \`media_rels_users_id_idx\` ON \`media_rels\` (\`users_id\`);`) + await db.run(sql`CREATE TABLE \`_media_v\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`parent_id\` integer, + \`version_alt\` text NOT NULL, + \`version_updated_at\` text, + \`version_created_at\` text, + \`version_url\` text, + \`version_thumbnail_u_r_l\` text, + \`version_filename\` text, + \`version_mime_type\` text, + \`version_filesize\` numeric, + \`version_width\` numeric, + \`version_height\` numeric, + \`version_original_filename\` text, + \`version_original_url\` text, + \`version_original_mime_type\` text, + \`version_original_filesize\` numeric, + \`version_original_width\` numeric, + \`version_original_height\` numeric, + \`version_original_prefix\` text, + \`version_original__objectkey\` text, + \`version_focal_x\` numeric, + \`version_focal_y\` numeric, + \`created_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL, + \`updated_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL, + FOREIGN KEY (\`parent_id\`) REFERENCES \`media\`(\`id\`) ON UPDATE no action ON DELETE set null + ); + `) + await db.run(sql`CREATE INDEX \`_media_v_parent_idx\` ON \`_media_v\` (\`parent_id\`);`) + await db.run(sql`CREATE INDEX \`_media_v_version_version_updated_at_idx\` ON \`_media_v\` (\`version_updated_at\`);`) + await db.run(sql`CREATE INDEX \`_media_v_version_version_created_at_idx\` ON \`_media_v\` (\`version_created_at\`);`) + await db.run(sql`CREATE INDEX \`_media_v_version_version_filename_idx\` ON \`_media_v\` (\`version_filename\`);`) + await db.run(sql`CREATE INDEX \`_media_v_version_original_version_original_filename_idx\` ON \`_media_v\` (\`version_original_filename\`);`) + await db.run(sql`CREATE INDEX \`_media_v_created_at_idx\` ON \`_media_v\` (\`created_at\`);`) + await db.run(sql`CREATE INDEX \`_media_v_updated_at_idx\` ON \`_media_v\` (\`updated_at\`);`) + await db.run(sql`CREATE TABLE \`_media_v_rels\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`order\` integer, + \`parent_id\` integer NOT NULL, + \`path\` text NOT NULL, + \`users_id\` integer, + FOREIGN KEY (\`parent_id\`) REFERENCES \`_media_v\`(\`id\`) ON UPDATE no action ON DELETE cascade, + FOREIGN KEY (\`users_id\`) REFERENCES \`users\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`_media_v_rels_order_idx\` ON \`_media_v_rels\` (\`order\`);`) + await db.run(sql`CREATE INDEX \`_media_v_rels_parent_idx\` ON \`_media_v_rels\` (\`parent_id\`);`) + await db.run(sql`CREATE INDEX \`_media_v_rels_path_idx\` ON \`_media_v_rels\` (\`path\`);`) + await db.run(sql`CREATE INDEX \`_media_v_rels_users_id_idx\` ON \`_media_v_rels\` (\`users_id\`);`) + await db.run(sql`CREATE TABLE \`payload_kv\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`key\` text NOT NULL, + \`data\` text NOT NULL + ); + `) + await db.run(sql`CREATE UNIQUE INDEX \`payload_kv_key_idx\` ON \`payload_kv\` (\`key\`);`) + await db.run(sql`CREATE TABLE \`payload_locked_documents\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`global_slug\` text, + \`updated_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL, + \`created_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL + ); + `) + await db.run(sql`CREATE INDEX \`payload_locked_documents_global_slug_idx\` ON \`payload_locked_documents\` (\`global_slug\`);`) + await db.run(sql`CREATE INDEX \`payload_locked_documents_updated_at_idx\` ON \`payload_locked_documents\` (\`updated_at\`);`) + await db.run(sql`CREATE INDEX \`payload_locked_documents_created_at_idx\` ON \`payload_locked_documents\` (\`created_at\`);`) + await db.run(sql`CREATE TABLE \`payload_locked_documents_rels\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`order\` integer, + \`parent_id\` integer NOT NULL, + \`path\` text NOT NULL, + \`users_id\` integer, + \`posts_id\` integer, + \`pages_id\` integer, + \`media_id\` integer, + FOREIGN KEY (\`parent_id\`) REFERENCES \`payload_locked_documents\`(\`id\`) ON UPDATE no action ON DELETE cascade, + FOREIGN KEY (\`users_id\`) REFERENCES \`users\`(\`id\`) ON UPDATE no action ON DELETE cascade, + FOREIGN KEY (\`posts_id\`) REFERENCES \`posts\`(\`id\`) ON UPDATE no action ON DELETE cascade, + FOREIGN KEY (\`pages_id\`) REFERENCES \`pages\`(\`id\`) ON UPDATE no action ON DELETE cascade, + FOREIGN KEY (\`media_id\`) REFERENCES \`media\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`payload_locked_documents_rels_order_idx\` ON \`payload_locked_documents_rels\` (\`order\`);`) + await db.run(sql`CREATE INDEX \`payload_locked_documents_rels_parent_idx\` ON \`payload_locked_documents_rels\` (\`parent_id\`);`) + await db.run(sql`CREATE INDEX \`payload_locked_documents_rels_path_idx\` ON \`payload_locked_documents_rels\` (\`path\`);`) + await db.run(sql`CREATE INDEX \`payload_locked_documents_rels_users_id_idx\` ON \`payload_locked_documents_rels\` (\`users_id\`);`) + await db.run(sql`CREATE INDEX \`payload_locked_documents_rels_posts_id_idx\` ON \`payload_locked_documents_rels\` (\`posts_id\`);`) + await db.run(sql`CREATE INDEX \`payload_locked_documents_rels_pages_id_idx\` ON \`payload_locked_documents_rels\` (\`pages_id\`);`) + await db.run(sql`CREATE INDEX \`payload_locked_documents_rels_media_id_idx\` ON \`payload_locked_documents_rels\` (\`media_id\`);`) + await db.run(sql`CREATE TABLE \`payload_preferences\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`key\` text, + \`value\` text, + \`updated_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL, + \`created_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL + ); + `) + await db.run(sql`CREATE INDEX \`payload_preferences_key_idx\` ON \`payload_preferences\` (\`key\`);`) + await db.run(sql`CREATE INDEX \`payload_preferences_updated_at_idx\` ON \`payload_preferences\` (\`updated_at\`);`) + await db.run(sql`CREATE INDEX \`payload_preferences_created_at_idx\` ON \`payload_preferences\` (\`created_at\`);`) + await db.run(sql`CREATE TABLE \`payload_preferences_rels\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`order\` integer, + \`parent_id\` integer NOT NULL, + \`path\` text NOT NULL, + \`users_id\` integer, + FOREIGN KEY (\`parent_id\`) REFERENCES \`payload_preferences\`(\`id\`) ON UPDATE no action ON DELETE cascade, + FOREIGN KEY (\`users_id\`) REFERENCES \`users\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`payload_preferences_rels_order_idx\` ON \`payload_preferences_rels\` (\`order\`);`) + await db.run(sql`CREATE INDEX \`payload_preferences_rels_parent_idx\` ON \`payload_preferences_rels\` (\`parent_id\`);`) + await db.run(sql`CREATE INDEX \`payload_preferences_rels_path_idx\` ON \`payload_preferences_rels\` (\`path\`);`) + await db.run(sql`CREATE INDEX \`payload_preferences_rels_users_id_idx\` ON \`payload_preferences_rels\` (\`users_id\`);`) + await db.run(sql`CREATE TABLE \`payload_migrations\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`name\` text, + \`batch\` numeric, + \`updated_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL, + \`created_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL + ); + `) + await db.run(sql`CREATE INDEX \`payload_migrations_updated_at_idx\` ON \`payload_migrations\` (\`updated_at\`);`) + await db.run(sql`CREATE INDEX \`payload_migrations_created_at_idx\` ON \`payload_migrations\` (\`created_at\`);`) + await db.run(sql`CREATE TABLE \`payload_llm_instructions\` ( + \`id\` text PRIMARY KEY NOT NULL, + \`entity_slug\` text NOT NULL, + \`entity_type\` text NOT NULL, + \`additional_instructions\` text, + \`updated_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL, + \`created_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL + ); + `) + await db.run(sql`CREATE INDEX \`payload_llm_instructions_entity_slug_idx\` ON \`payload_llm_instructions\` (\`entity_slug\`);`) + await db.run(sql`CREATE INDEX \`payload_llm_instructions_updated_at_idx\` ON \`payload_llm_instructions\` (\`updated_at\`);`) + await db.run(sql`CREATE INDEX \`payload_llm_instructions_created_at_idx\` ON \`payload_llm_instructions\` (\`created_at\`);`) + await db.run(sql`CREATE TABLE \`payload_llm_instructions_rels\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`order\` integer, + \`parent_id\` text NOT NULL, + \`path\` text NOT NULL, + \`users_id\` integer, + FOREIGN KEY (\`parent_id\`) REFERENCES \`payload_llm_instructions\`(\`id\`) ON UPDATE no action ON DELETE cascade, + FOREIGN KEY (\`users_id\`) REFERENCES \`users\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`payload_llm_instructions_rels_order_idx\` ON \`payload_llm_instructions_rels\` (\`order\`);`) + await db.run(sql`CREATE INDEX \`payload_llm_instructions_rels_parent_idx\` ON \`payload_llm_instructions_rels\` (\`parent_id\`);`) + await db.run(sql`CREATE INDEX \`payload_llm_instructions_rels_path_idx\` ON \`payload_llm_instructions_rels\` (\`path\`);`) + await db.run(sql`CREATE INDEX \`payload_llm_instructions_rels_users_id_idx\` ON \`payload_llm_instructions_rels\` (\`users_id\`);`) + await db.run(sql`CREATE TABLE \`site_settings\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`site_name\` text DEFAULT 'Payload × React Router' NOT NULL, + \`updated_at\` text, + \`created_at\` text + ); + `) + await db.run(sql`CREATE TABLE \`site_settings_locales\` ( + \`tagline\` text, + \`id\` integer PRIMARY KEY NOT NULL, + \`_locale\` text NOT NULL, + \`_parent_id\` integer NOT NULL, + FOREIGN KEY (\`_parent_id\`) REFERENCES \`site_settings\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE UNIQUE INDEX \`site_settings_locales_locale_parent_id_unique\` ON \`site_settings_locales\` (\`_locale\`,\`_parent_id\`);`) + await db.run(sql`CREATE TABLE \`site_settings_rels\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`order\` integer, + \`parent_id\` integer NOT NULL, + \`path\` text NOT NULL, + \`users_id\` integer, + FOREIGN KEY (\`parent_id\`) REFERENCES \`site_settings\`(\`id\`) ON UPDATE no action ON DELETE cascade, + FOREIGN KEY (\`users_id\`) REFERENCES \`users\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`site_settings_rels_order_idx\` ON \`site_settings_rels\` (\`order\`);`) + await db.run(sql`CREATE INDEX \`site_settings_rels_parent_idx\` ON \`site_settings_rels\` (\`parent_id\`);`) + await db.run(sql`CREATE INDEX \`site_settings_rels_path_idx\` ON \`site_settings_rels\` (\`path\`);`) + await db.run(sql`CREATE INDEX \`site_settings_rels_users_id_idx\` ON \`site_settings_rels\` (\`users_id\`);`) + await db.run(sql`CREATE TABLE \`_site_settings_v\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`version_site_name\` text DEFAULT 'Payload × React Router' NOT NULL, + \`version_updated_at\` text, + \`version_created_at\` text, + \`created_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL, + \`updated_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL + ); + `) + await db.run(sql`CREATE INDEX \`_site_settings_v_created_at_idx\` ON \`_site_settings_v\` (\`created_at\`);`) + await db.run(sql`CREATE INDEX \`_site_settings_v_updated_at_idx\` ON \`_site_settings_v\` (\`updated_at\`);`) + await db.run(sql`CREATE TABLE \`_site_settings_v_locales\` ( + \`version_tagline\` text, + \`id\` integer PRIMARY KEY NOT NULL, + \`_locale\` text NOT NULL, + \`_parent_id\` integer NOT NULL, + FOREIGN KEY (\`_parent_id\`) REFERENCES \`_site_settings_v\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE UNIQUE INDEX \`_site_settings_v_locales_locale_parent_id_unique\` ON \`_site_settings_v_locales\` (\`_locale\`,\`_parent_id\`);`) + await db.run(sql`CREATE TABLE \`_site_settings_v_rels\` ( + \`id\` integer PRIMARY KEY NOT NULL, + \`order\` integer, + \`parent_id\` integer NOT NULL, + \`path\` text NOT NULL, + \`users_id\` integer, + FOREIGN KEY (\`parent_id\`) REFERENCES \`_site_settings_v\`(\`id\`) ON UPDATE no action ON DELETE cascade, + FOREIGN KEY (\`users_id\`) REFERENCES \`users\`(\`id\`) ON UPDATE no action ON DELETE cascade + ); + `) + await db.run(sql`CREATE INDEX \`_site_settings_v_rels_order_idx\` ON \`_site_settings_v_rels\` (\`order\`);`) + await db.run(sql`CREATE INDEX \`_site_settings_v_rels_parent_idx\` ON \`_site_settings_v_rels\` (\`parent_id\`);`) + await db.run(sql`CREATE INDEX \`_site_settings_v_rels_path_idx\` ON \`_site_settings_v_rels\` (\`path\`);`) + await db.run(sql`CREATE INDEX \`_site_settings_v_rels_users_id_idx\` ON \`_site_settings_v_rels\` (\`users_id\`);`) +} + +export async function down({ db, payload, req }: MigrateDownArgs): Promise { + await turnForeignKeysOff(db) + await db.run(sql`DROP TABLE \`users_sessions\`;`) + await db.run(sql`DROP TABLE \`users\`;`) + await db.run(sql`DROP TABLE \`users_rels\`;`) + await db.run(sql`DROP TABLE \`_users_v_version_sessions\`;`) + await db.run(sql`DROP TABLE \`_users_v\`;`) + await db.run(sql`DROP TABLE \`_users_v_rels\`;`) + await db.run(sql`DROP TABLE \`posts\`;`) + await db.run(sql`DROP TABLE \`posts_locales\`;`) + await db.run(sql`DROP TABLE \`posts_texts\`;`) + await db.run(sql`DROP TABLE \`posts_rels\`;`) + await db.run(sql`DROP TABLE \`_posts_v\`;`) + await db.run(sql`DROP TABLE \`_posts_v_locales\`;`) + await db.run(sql`DROP TABLE \`_posts_v_texts\`;`) + await db.run(sql`DROP TABLE \`_posts_v_rels\`;`) + await db.run(sql`DROP TABLE \`pages_blocks_hero\`;`) + await db.run(sql`DROP TABLE \`pages_blocks_content\`;`) + await db.run(sql`DROP TABLE \`pages_blocks_media_text\`;`) + await db.run(sql`DROP TABLE \`pages_blocks_call_to_action\`;`) + await db.run(sql`DROP TABLE \`pages\`;`) + await db.run(sql`DROP TABLE \`pages_locales\`;`) + await db.run(sql`DROP TABLE \`pages_rels\`;`) + await db.run(sql`DROP TABLE \`_pages_v_blocks_hero\`;`) + await db.run(sql`DROP TABLE \`_pages_v_blocks_content\`;`) + await db.run(sql`DROP TABLE \`_pages_v_blocks_media_text\`;`) + await db.run(sql`DROP TABLE \`_pages_v_blocks_call_to_action\`;`) + await db.run(sql`DROP TABLE \`_pages_v\`;`) + await db.run(sql`DROP TABLE \`_pages_v_locales\`;`) + await db.run(sql`DROP TABLE \`_pages_v_rels\`;`) + await db.run(sql`DROP TABLE \`media\`;`) + await db.run(sql`DROP TABLE \`media_rels\`;`) + await db.run(sql`DROP TABLE \`_media_v\`;`) + await db.run(sql`DROP TABLE \`_media_v_rels\`;`) + await db.run(sql`DROP TABLE \`payload_kv\`;`) + await db.run(sql`DROP TABLE \`payload_locked_documents\`;`) + await db.run(sql`DROP TABLE \`payload_locked_documents_rels\`;`) + await db.run(sql`DROP TABLE \`payload_preferences\`;`) + await db.run(sql`DROP TABLE \`payload_preferences_rels\`;`) + await db.run(sql`DROP TABLE \`payload_migrations\`;`) + await db.run(sql`DROP TABLE \`payload_llm_instructions\`;`) + await db.run(sql`DROP TABLE \`payload_llm_instructions_rels\`;`) + await db.run(sql`DROP TABLE \`site_settings\`;`) + await db.run(sql`DROP TABLE \`site_settings_locales\`;`) + await db.run(sql`DROP TABLE \`site_settings_rels\`;`) + await db.run(sql`DROP TABLE \`_site_settings_v\`;`) + await db.run(sql`DROP TABLE \`_site_settings_v_locales\`;`) + await db.run(sql`DROP TABLE \`_site_settings_v_rels\`;`) + await db.run(sql`PRAGMA foreign_keys=ON;`) +} diff --git a/demo/migrations/index.ts b/demo/migrations/index.ts new file mode 100644 index 0000000..942a090 --- /dev/null +++ b/demo/migrations/index.ts @@ -0,0 +1,9 @@ +import * as migration_20261009_093551_initial from './20261009_093551_initial'; + +export const migrations = [ + { + up: migration_20261009_093551_initial.up, + down: migration_20261009_093551_initial.down, + name: '20261009_093551_initial' + }, +]; diff --git a/demo/package.json b/demo/package.json new file mode 100644 index 0000000..1fbe160 --- /dev/null +++ b/demo/package.json @@ -0,0 +1,44 @@ +{ + "name": "payload-react-router-demo", + "private": true, + "type": "module", + "scripts": { + "dev": "react-router dev --port 3000 --strictPort", + "build": "react-router build", + "start": "PORT=3000 react-router-serve ./build/server/index.js", + "typecheck": "react-router typegen && tsc", + "generate:importmap": "PAYLOAD_CONFIG_PATH=./payload.config.ts payload generate:importmap", + "migrate:create": "PAYLOAD_CONFIG_PATH=./payload.config.ts payload migrate:create", + "generate:types": "PAYLOAD_CONFIG_PATH=./payload.config.ts payload generate:types", + "test:e2e": "playwright test" + }, + "dependencies": { + "@payloadcms/db-sqlite": "4.0.0-canary.39", + "@payloadcms/graphql": "4.0.0-canary.39", + "@payloadcms/live-preview-react": "4.0.0-canary.39", + "@payloadcms/richtext-lexical": "4.0.0-canary.39", + "@payloadcms/translations": "4.0.0-canary.39", + "@payloadcms/ui": "4.0.0-canary.39", + "@react-router/serve": "8.4.0", + "graphql": "^16.8.1", + "payload": "4.0.0-canary.39", + "payload-react-router": "workspace:*", + "react": "19.3.0", + "react-dom": "19.3.0", + "react-router": "8.4.0", + "react-server-dom-webpack": "19.3.0" + }, + "devDependencies": { + "@playwright/test": "^1.56.0", + "@react-router/dev": "8.4.0", + "@types/node": "^24.10.1", + "@types/react": "19.2.14", + "@types/react-dom": "19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "@vitejs/plugin-rsc": "0.5.35", + "esbuild": "^0.28.2", + "sass-embedded": "^1.93.0", + "typescript": "^5.9.3", + "vite": "^8.0.3" + } +} diff --git a/demo/payload-types.ts b/demo/payload-types.ts new file mode 100644 index 0000000..7f1e2bf --- /dev/null +++ b/demo/payload-types.ts @@ -0,0 +1,889 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * This file was automatically generated by Payload. + * DO NOT MODIFY IT BY HAND. Instead, modify your source Payload config, + * and re-run `payload generate:types` to regenerate this file. + */ + +/** + * Supported timezones in IANA format. + * + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "supportedTimezones". + */ +export type SupportedTimezones = + | 'Pacific/Midway' + | 'Pacific/Niue' + | 'Pacific/Honolulu' + | 'Pacific/Rarotonga' + | 'America/Anchorage' + | 'Pacific/Gambier' + | 'America/Los_Angeles' + | 'America/Tijuana' + | 'America/Denver' + | 'America/Phoenix' + | 'America/Chicago' + | 'America/Guatemala' + | 'America/New_York' + | 'America/Bogota' + | 'America/Caracas' + | 'America/Santiago' + | 'America/Buenos_Aires' + | 'America/Sao_Paulo' + | 'Atlantic/South_Georgia' + | 'Atlantic/Azores' + | 'Atlantic/Cape_Verde' + | 'Europe/London' + | 'Europe/Berlin' + | 'Africa/Lagos' + | 'Europe/Athens' + | 'Africa/Cairo' + | 'Europe/Moscow' + | 'Asia/Riyadh' + | 'Asia/Dubai' + | 'Asia/Baku' + | 'Asia/Karachi' + | 'Asia/Tashkent' + | 'Asia/Calcutta' + | 'Asia/Dhaka' + | 'Asia/Almaty' + | 'Asia/Jakarta' + | 'Asia/Bangkok' + | 'Asia/Shanghai' + | 'Asia/Singapore' + | 'Asia/Tokyo' + | 'Asia/Seoul' + | 'Australia/Brisbane' + | 'Australia/Sydney' + | 'Pacific/Guam' + | 'Pacific/Noumea' + | 'Pacific/Auckland' + | 'Pacific/Fiji'; +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "LexicalNodes_F3A82FFF". + */ +export type LexicalNodes_F3A82FFF = + | SerializedTextNode + | SerializedTabNode + | SerializedLineBreakNode + | SerializedParagraphNode + | SerializedHorizontalRuleNode + | SerializedUploadNode<'media'> + | SerializedQuoteNode + | SerializedRelationshipNode< + | 'users' + | 'posts' + | 'pages' + | 'payload-kv' + | 'payload-locked-documents' + | 'payload-preferences' + | 'payload-migrations' + > + | SerializedAutoLinkNode + | SerializedLinkNode + | SerializedListNode + | SerializedListItemNode + | SerializedHeadingNode; +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "LexicalNodes_3DE324E4". + */ +export type LexicalNodes_3DE324E4 = + | SerializedTextNode + | SerializedTabNode + | SerializedLineBreakNode + | SerializedParagraphNode + | SerializedListNode + | SerializedListItemNode + | SerializedHeadingNode; + +export interface Config { + auth: { + users: UserAuthOperations; + }; + blocks: {}; + collections: { + users: User; + posts: Post; + pages: Page; + media: Media; + 'payload-kv': PayloadKv; + 'payload-locked-documents': PayloadLockedDocument; + 'payload-preferences': PayloadPreference; + 'payload-migrations': PayloadMigration; + 'payload-llm-instructions': PayloadLlmInstruction; + }; + collectionsJoins: {}; + collectionsSelect: { + users: UsersSelect | UsersSelect; + posts: PostsSelect | PostsSelect; + pages: PagesSelect | PagesSelect; + media: MediaSelect | MediaSelect; + 'payload-kv': PayloadKvSelect | PayloadKvSelect; + 'payload-locked-documents': PayloadLockedDocumentsSelect | PayloadLockedDocumentsSelect; + 'payload-preferences': PayloadPreferencesSelect | PayloadPreferencesSelect; + 'payload-migrations': PayloadMigrationsSelect | PayloadMigrationsSelect; + 'payload-llm-instructions': PayloadLlmInstructionsSelect | PayloadLlmInstructionsSelect; + }; + db: { + defaultIDType: number; + }; + fallbackLocale: ('false' | 'none' | 'null') | false | null | ('en' | 'fr') | ('en' | 'fr')[]; + globals: { + 'site-settings': SiteSetting; + }; + globalsSelect: { + 'site-settings': SiteSettingsSelect | SiteSettingsSelect; + }; + locale: 'en' | 'fr'; + widgets: { + welcome: WelcomeWidget; + collections: CollectionsWidget; + 'collection-query': CollectionQueryWidget; + activity: ActivityWidget; + 'upload-dropzone': UploadDropzoneWidget; + }; + user: User; + jobs: { + tasks: unknown; + workflows: unknown; + }; +} +export interface UserAuthOperations { + forgotPassword: { + email: string; + password: string; + }; + login: { + email: string; + password: string; + }; + registerFirstUser: { + email: string; + password: string; + }; + unlock: { + email: string; + password: string; + }; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "users". + */ +export interface User { + id: number; + name?: string | null; + role?: ('admin' | 'editor') | null; + createdBy?: { + relationTo: 'users'; + value: number | User; + } | null; + updatedBy?: { + relationTo: 'users'; + value: number | User; + } | null; + updatedAt: string; + createdAt: string; + email: string; + resetPasswordToken?: string | null; + resetPasswordExpiration?: string | null; + salt?: string | null; + hash?: string | null; + resetPasswordRequestedAt?: string | null; + loginAttempts?: number | null; + lockUntil?: string | null; + sessions?: + | { + id: string; + createdAt?: string | null; + expiresAt: string; + }[] + | null; + password?: string | null; + collection: 'users'; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "posts". + */ +export interface Post { + id: number; + title: string; + slug: string; + excerpt?: string | null; + publishedAt?: string | null; + cover?: (number | null) | Media; + tags?: string[] | null; + author?: (number | null) | User; + content?: LexicalRichText | null; + createdBy?: { + relationTo: 'users'; + value: number | User; + } | null; + updatedBy?: { + relationTo: 'users'; + value: number | User; + } | null; + updatedAt: string; + createdAt: string; + _status?: ('draft' | 'published') | null; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "media". + */ +export interface Media { + id: number; + alt: string; + createdBy?: { + relationTo: 'users'; + value: number | User; + } | null; + updatedBy?: { + relationTo: 'users'; + value: number | User; + } | null; + updatedAt: string; + createdAt: string; + url?: string | null; + thumbnailURL?: string | null; + filename?: string | null; + mimeType?: string | null; + filesize?: number | null; + width?: number | null; + height?: number | null; + original?: { + filename?: string | null; + url?: string | null; + mimeType?: string | null; + filesize?: number | null; + width?: number | null; + height?: number | null; + prefix?: string | null; + _objectKey?: string | null; + }; + focalX?: number | null; + focalY?: number | null; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "pages". + */ +export interface Page { + id: number; + title: string; + slug: string; + layout?: (HeroBlock | ContentBlock | MediaTextBlock | CallToActionBlock)[] | null; + createdBy?: { + relationTo: 'users'; + value: number | User; + } | null; + updatedBy?: { + relationTo: 'users'; + value: number | User; + } | null; + updatedAt: string; + createdAt: string; + _status?: ('draft' | 'published') | null; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "HeroBlock". + */ +export interface HeroBlock { + heading: string; + subheading?: string | null; + image?: (number | null) | Media; + id?: string | null; + blockName?: string | null; + blockType: 'hero'; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "ContentBlock". + */ +export interface ContentBlock { + body: LexicalRichText; + id?: string | null; + blockName?: string | null; + blockType: 'content'; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "MediaTextBlock". + */ +export interface MediaTextBlock { + media: number | Media; + body?: LexicalRichText | null; + mediaPosition?: ('left' | 'right') | null; + id?: string | null; + blockName?: string | null; + blockType: 'mediaText'; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "CallToActionBlock". + */ +export interface CallToActionBlock { + heading: string; + text?: string | null; + buttonLabel: string; + buttonLink: string; + id?: string | null; + blockName?: string | null; + blockType: 'callToAction'; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-kv". + */ +export interface PayloadKv { + id: number; + key: string; + data: + | { + [k: string]: unknown; + } + | unknown[] + | string + | number + | boolean + | null; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-locked-documents". + */ +export interface PayloadLockedDocument { + id: number; + document?: + | ({ + relationTo: 'users'; + value: number | User; + } | null) + | ({ + relationTo: 'posts'; + value: number | Post; + } | null) + | ({ + relationTo: 'pages'; + value: number | Page; + } | null) + | ({ + relationTo: 'media'; + value: number | Media; + } | null); + globalSlug?: string | null; + user: { + relationTo: 'users'; + value: number | User; + }; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-preferences". + */ +export interface PayloadPreference { + id: number; + user: { + relationTo: 'users'; + value: number | User; + }; + key?: string | null; + value?: + | { + [k: string]: unknown; + } + | unknown[] + | string + | number + | boolean + | null; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-migrations". + */ +export interface PayloadMigration { + id: number; + name?: string | null; + batch?: number | null; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-llm-instructions". + */ +export interface PayloadLlmInstruction { + id: string; + entitySlug: string; + title?: string | null; + entityType: 'collection' | 'global'; + additionalInstructions?: LexicalRichText | null; + systemInstructions?: LexicalRichText | null; + createdBy?: { + relationTo: 'users'; + value: number | User; + } | null; + updatedBy?: { + relationTo: 'users'; + value: number | User; + } | null; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "users_select". + */ +export interface UsersSelect { + name?: T; + role?: T; + createdBy?: T; + updatedBy?: T; + updatedAt?: T; + createdAt?: T; + email?: T; + resetPasswordToken?: T; + resetPasswordExpiration?: T; + salt?: T; + hash?: T; + resetPasswordRequestedAt?: T; + loginAttempts?: T; + lockUntil?: T; + sessions?: + | T + | { + id?: T; + createdAt?: T; + expiresAt?: T; + }; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "posts_select". + */ +export interface PostsSelect { + title?: T; + slug?: T; + excerpt?: T; + publishedAt?: T; + cover?: T; + tags?: T; + author?: T; + content?: T; + createdBy?: T; + updatedBy?: T; + updatedAt?: T; + createdAt?: T; + _status?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "pages_select". + */ +export interface PagesSelect { + title?: T; + slug?: T; + layout?: + | T + | { + hero?: T | HeroBlockSelect; + content?: T | ContentBlockSelect; + mediaText?: T | MediaTextBlockSelect; + callToAction?: T | CallToActionBlockSelect; + }; + createdBy?: T; + updatedBy?: T; + updatedAt?: T; + createdAt?: T; + _status?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "HeroBlock_select". + */ +export interface HeroBlockSelect { + heading?: T; + subheading?: T; + image?: T; + id?: T; + blockName?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "ContentBlock_select". + */ +export interface ContentBlockSelect { + body?: T; + id?: T; + blockName?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "MediaTextBlock_select". + */ +export interface MediaTextBlockSelect { + media?: T; + body?: T; + mediaPosition?: T; + id?: T; + blockName?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "CallToActionBlock_select". + */ +export interface CallToActionBlockSelect { + heading?: T; + text?: T; + buttonLabel?: T; + buttonLink?: T; + id?: T; + blockName?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "media_select". + */ +export interface MediaSelect { + alt?: T; + createdBy?: T; + updatedBy?: T; + updatedAt?: T; + createdAt?: T; + url?: T; + thumbnailURL?: T; + filename?: T; + mimeType?: T; + filesize?: T; + width?: T; + height?: T; + original?: + | T + | { + filename?: T; + url?: T; + mimeType?: T; + filesize?: T; + width?: T; + height?: T; + prefix?: T; + _objectKey?: T; + }; + focalX?: T; + focalY?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-kv_select". + */ +export interface PayloadKvSelect { + key?: T; + data?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-locked-documents_select". + */ +export interface PayloadLockedDocumentsSelect { + document?: T; + globalSlug?: T; + user?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-preferences_select". + */ +export interface PayloadPreferencesSelect { + user?: T; + key?: T; + value?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-migrations_select". + */ +export interface PayloadMigrationsSelect { + name?: T; + batch?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-llm-instructions_select". + */ +export interface PayloadLlmInstructionsSelect { + id?: T; + entitySlug?: T; + title?: T; + entityType?: T; + additionalInstructions?: T; + systemInstructions?: T; + createdBy?: T; + updatedBy?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "site-settings". + */ +export interface SiteSetting { + id: number; + siteName: string; + tagline?: string | null; + createdBy?: { + relationTo: 'users'; + value: number | User; + } | null; + updatedBy?: { + relationTo: 'users'; + value: number | User; + } | null; + updatedAt?: string | null; + createdAt?: string | null; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "site-settings_select". + */ +export interface SiteSettingsSelect { + siteName?: T; + tagline?: T; + createdBy?: T; + updatedBy?: T; + updatedAt?: T; + createdAt?: T; + globalType?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "welcome_widget". + */ +export interface WelcomeWidget { + data?: { + [k: string]: unknown; + }; + width: 'full'; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "collections_widget". + */ +export interface CollectionsWidget { + data?: { + [k: string]: unknown; + }; + width: 'full'; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "collection-query_widget". + */ +export interface CollectionQueryWidget { + data?: { + title?: string | null; + relatedCollection: 'users' | 'posts' | 'pages' | 'media'; + where?: + | { + [k: string]: unknown; + } + | unknown[] + | string + | number + | boolean + | null; + sortField?: string | null; + sortDirection?: ('asc' | 'desc') | null; + limit?: number | null; + }; + width: 'x-small' | 'small' | 'medium' | 'large' | 'x-large' | 'full'; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "activity_widget". + */ +export interface ActivityWidget { + data?: { + excludedCollections?: ('users' | 'posts' | 'pages' | 'media')[] | null; + }; + width: 'small' | 'medium' | 'large' | 'x-large' | 'full'; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "upload-dropzone_widget". + */ +export interface UploadDropzoneWidget { + data?: { + excludedCollections?: 'media'[] | null; + }; + width: 'x-small' | 'small' | 'medium' | 'large' | 'x-large' | 'full'; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "auth". + */ +export interface Auth { + [k: string]: unknown; +} + +/** @internal Core Lexical types — see @payloadcms/richtext-lexical. */ +export type LexicalElementFormat = 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; +export type LexicalElementDirection = ('ltr' | 'rtl') | null; + +export interface SerializedLexicalElementBase { + children: TChildren[]; + direction: LexicalElementDirection; + format: LexicalElementFormat; + indent: number; + textFormat?: number; + textStyle?: string; + /** @deprecated Ignored when loading. Typed as required only to match Lexical's types: rich text sent through the API, CLI or MCP may not contain it. */ + version: number; +} + +export type LexicalTextMode = 'normal' | 'token' | 'segmented'; + +export interface SerializedTextNode { + type: 'text'; + detail: number; + format: number; + mode: LexicalTextMode; + style: string; + text: string; + /** @deprecated Ignored when loading. Typed as required only to match Lexical's types: rich text sent through the API, CLI or MCP may not contain it. */ + version: number; +} + +export interface SerializedTabNode { + type: 'tab'; + detail: number; + format: number; + mode: LexicalTextMode; + style: string; + text: string; + /** @deprecated Ignored when loading. Typed as required only to match Lexical's types: rich text sent through the API, CLI or MCP may not contain it. */ + version: number; +} + +export interface SerializedLineBreakNode { + type: 'linebreak'; + /** @deprecated Ignored when loading. Typed as required only to match Lexical's types: rich text sent through the API, CLI or MCP may not contain it. */ + version: number; +} + +export interface SerializedParagraphNode extends SerializedLexicalElementBase { + type: 'paragraph'; + textFormat: number; + textStyle: string; +} + +export interface SerializedHorizontalRuleNode { + type: 'horizontalrule'; + /** @deprecated Ignored when loading. Typed as required only to match Lexical's types: rich text sent through the API, CLI or MCP may not contain it. */ + version: number; +} + +export type SerializedUploadNode = { + type: 'upload'; + format: LexicalElementFormat; + id: string; + /** @deprecated Ignored when loading. Typed as required only to match Lexical's types: rich text sent through the API, CLI or MCP may not contain it. */ + version: number; + fields: TFields; +} & { + [TSlug in TSlugs]: { + relationTo: TSlug; + value: Config['collections'][TSlug]['id'] | Config['collections'][TSlug]; + }; +}[TSlugs]; + +export interface SerializedQuoteNode extends SerializedLexicalElementBase { + type: 'quote'; +} + +export type SerializedRelationshipNode = { + type: 'relationship'; + format: LexicalElementFormat; + /** @deprecated Ignored when loading. Typed as required only to match Lexical's types: rich text sent through the API, CLI or MCP may not contain it. */ + version: number; +} & { + [TSlug in TSlugs]: { + relationTo: TSlug; + value: Config['collections'][TSlug]['id'] | Config['collections'][TSlug]; + }; +}[TSlugs]; + +export interface LexicalLinkFields { + [k: string]: unknown; + doc?: { + relationTo: string; + value: Config['db']['defaultIDType'] | { [k: string]: unknown; id: Config['db']['defaultIDType'] }; + } | null; + linkType: 'custom' | 'internal'; + newTab: boolean; + url?: string; +} +export interface SerializedLinkNode extends SerializedLexicalElementBase { + type: 'link'; + fields: TFields; + id?: string; +} +export interface SerializedAutoLinkNode extends SerializedLexicalElementBase { + type: 'autolink'; + fields: TFields; +} + +export interface SerializedListNode extends SerializedLexicalElementBase { + type: 'list'; + checked?: boolean; + listType: 'number' | 'bullet' | 'check'; + start: number; + tag: 'ul' | 'ol'; +} + +export interface SerializedListItemNode extends SerializedLexicalElementBase { + type: 'listitem'; + checked?: boolean; + value: number; +} + +export interface SerializedHeadingNode< + TChildren, + TTag extends 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6', +> extends SerializedLexicalElementBase { + type: 'heading'; + tag: TTag; +} + +/** Shape of a Lexical `richText` field. */ +export interface LexicalRichText { + root: { + children: TNode[]; + direction: LexicalElementDirection; + format: LexicalElementFormat; + indent: number; + type: 'root'; + /** @deprecated Ignored when loading. Typed as required only to match Lexical's types: rich text sent through the API, CLI or MCP may not contain it. */ + version: number; + }; +} + + +declare module 'payload' { + export interface GeneratedTypes extends Config {} +} \ No newline at end of file diff --git a/demo/payload.config.ts b/demo/payload.config.ts new file mode 100644 index 0000000..4677bcc --- /dev/null +++ b/demo/payload.config.ts @@ -0,0 +1,51 @@ +import { sqliteAdapter } from '@payloadcms/db-sqlite' +import { lexicalEditor } from '@payloadcms/richtext-lexical' +import { en } from '@payloadcms/translations/languages/en' +import { fr } from '@payloadcms/translations/languages/fr' +import path from 'node:path' +import { buildConfig } from 'payload' + +import { Media } from './collections/Media.ts' +import { Pages } from './collections/Pages.ts' +import { Posts } from './collections/Posts.ts' +import { SiteSettings } from './collections/SiteSettings.ts' +import { Users } from './collections/Users.ts' +import { migrations } from './migrations/index.ts' + +const dirname = import.meta.dirname +// Runtime paths are anchored on the app directory, not on this module: in the +// production build this file is bundled into build/server/, where +// `import.meta.dirname` would put the database next to the bundle. +const appDir = process.cwd() + +export default buildConfig({ + admin: { + importMap: { + baseDir: dirname, + // The Payload CLI only knows the Next.js and TanStack Start folder + // conventions, so the import map location is explicit. + importMapFile: path.resolve(dirname, 'app/routes/payload/importMap.js'), + }, + user: Users.slug, + }, + collections: [Users, Posts, Pages, Media], + db: sqliteAdapter({ + client: { url: process.env.DATABASE_URI || `file:${path.resolve(appDir, 'payload.db')}` }, + // Dev pushes the schema automatically; production applies migrations on boot. + prodMigrations: migrations, + }), + editor: lexicalEditor(), + globals: [SiteSettings], + // Admin UI languages (switchable per user from the account page). + i18n: { supportedLanguages: { en, fr } }, + localization: { + defaultLocale: 'en', + fallback: true, + locales: [ + { code: 'en', label: 'English' }, + { code: 'fr', label: 'Français' }, + ], + }, + secret: process.env.PAYLOAD_SECRET || 'dev-only-secret-change-me', + typescript: { outputFile: path.resolve(dirname, 'payload-types.ts') }, +}) diff --git a/demo/playwright.config.ts b/demo/playwright.config.ts new file mode 100644 index 0000000..e84f81b --- /dev/null +++ b/demo/playwright.config.ts @@ -0,0 +1,54 @@ +import { defineConfig, devices } from '@playwright/test' + +/** + * End-to-end bench for the React Router adapter. + * + * By default it runs against the production build (`pnpm build` first), on a + * throwaway SQLite database created by the production migrations on boot. + * `E2E_MODE=dev` runs the same suite against `vite dev` instead. + */ +const mode = process.env.E2E_MODE === 'dev' ? 'dev' : 'prod' +const port = Number(process.env.E2E_PORT ?? 3100) +const database = `file:./e2e-${mode}.db` + +export default defineConfig({ + forbidOnly: Boolean(process.env.CI), + fullyParallel: false, + outputDir: 'test-results', + projects: [ + { + name: 'chromium', + use: { + ...devices['Desktop Chrome'], + // Use the preinstalled browser when the matching Playwright build is absent. + launchOptions: process.env.CHROMIUM_PATH ? { executablePath: process.env.CHROMIUM_PATH } : {}, + }, + }, + ], + reporter: process.env.CI ? [['list'], ['html', { open: 'never' }], ['json', { outputFile: 'test-results/results.json' }]] : 'list', + retries: process.env.CI ? 1 : 0, + testDir: 'tests/e2e', + timeout: 90_000, + expect: { timeout: 20_000 }, + use: { + baseURL: `http://localhost:${port}`, + trace: 'retain-on-failure', + }, + webServer: { + command: + mode === 'dev' + ? `rm -f e2e-dev.db* && pnpm exec react-router dev --port ${port} --strictPort` + : `rm -f e2e-prod.db* && pnpm exec react-router-serve ./build/server/index.js`, + env: { + DATABASE_URI: database, + NODE_ENV: mode === 'dev' ? 'development' : 'production', + PAYLOAD_SECRET: 'e2e-secret', + PORT: String(port), + }, + reuseExistingServer: false, + timeout: 180_000, + url: `http://localhost:${port}/api/users/me`, + }, + // One shared database: specs build on each other and must not interleave. + workers: 1, +}) diff --git a/demo/react-router.config.ts b/demo/react-router.config.ts new file mode 100644 index 0000000..92ad46c --- /dev/null +++ b/demo/react-router.config.ts @@ -0,0 +1,5 @@ +import type { Config } from '@react-router/dev/config' + +export default { + ssr: true, +} satisfies Config diff --git a/demo/tests/e2e/01-first-user.spec.ts b/demo/tests/e2e/01-first-user.spec.ts new file mode 100644 index 0000000..553d020 --- /dev/null +++ b/demo/tests/e2e/01-first-user.spec.ts @@ -0,0 +1,21 @@ +import { expect, test } from '@playwright/test' + +import { admin, gotoAdmin } from './helpers' + +test('an empty database sends /admin to create-first-user, which signs in', async ({ page }) => { + const init = await page.request.get('/api/users/init') + test.skip(((await init.json()) as { initialized: boolean }).initialized, 'database already has a user') + + await gotoAdmin(page, '/admin') + await expect(page).toHaveURL(/\/admin\/create-first-user$/) + + await page.fill('#field-email', admin.email) + await page.fill('#field-password', admin.password) + await page.fill('#field-confirm-password', admin.password) + // A click during the form-state request that the fills start is lost. + await page.waitForLoadState('networkidle') + await page.click('.form-submit button') + + await expect(page).toHaveURL(/\/admin$/) + await expect(page.locator('.dashboard')).toBeVisible() +}) diff --git a/demo/tests/e2e/02-auth.spec.ts b/demo/tests/e2e/02-auth.spec.ts new file mode 100644 index 0000000..003b82a --- /dev/null +++ b/demo/tests/e2e/02-auth.spec.ts @@ -0,0 +1,39 @@ +import { expect, test } from '@playwright/test' + +import { admin, ensureAdmin, gotoAdmin } from './helpers' + +test.beforeAll(async ({ request }) => { + await ensureAdmin(request) +}) + +test('unauthenticated admin routes redirect to login with a return path', async ({ page }) => { + const response = await page.request.get('/admin/collections/posts', { maxRedirects: 0 }) + expect(response.status()).toBe(302) + expect(response.headers().location).toBe('/admin/login?redirect=%2Fadmin%2Fcollections%2Fposts') +}) + +test('login rejects a wrong password', async ({ page }) => { + await gotoAdmin(page, '/admin/login') + await page.fill('#field-email', admin.email) + await page.fill('#field-password', 'wrong-password') + await page.click('.form-submit button') + await expect(page.locator('.payload-toast-container')).toContainText(/incorrect/i) + await expect(page).toHaveURL(/\/admin\/login/) +}) + +test('login, account page and logout', async ({ page, context }) => { + await gotoAdmin(page, '/admin/login?redirect=%2Fadmin%2Faccount') + await page.fill('#field-email', admin.email) + await page.fill('#field-password', admin.password) + await page.click('.form-submit button') + + await expect(page).toHaveURL(/\/admin\/account$/) + await expect(page.locator('#field-email')).toHaveValue(admin.email) + expect((await context.cookies()).some((cookie) => cookie.name === 'payload-token')).toBe(true) + + await gotoAdmin(page, '/admin/logout') + await expect(page).toHaveURL(/\/admin\/login/) + await expect + .poll(async () => (await context.cookies()).some((cookie) => cookie.name === 'payload-token')) + .toBe(false) +}) diff --git a/demo/tests/e2e/03-collections.spec.ts b/demo/tests/e2e/03-collections.spec.ts new file mode 100644 index 0000000..42a6779 --- /dev/null +++ b/demo/tests/e2e/03-collections.spec.ts @@ -0,0 +1,80 @@ +import { expect, test } from '@playwright/test' + +import { closeToasts, createPost, gotoAdmin, login, saveDoc, uniqueSlug } from './helpers' + +test.beforeEach(async ({ page }) => { + await login(page) +}) + +test('create a page, edit it, then delete it from the document controls', async ({ page }) => { + const slug = uniqueSlug('ui-page') + await gotoAdmin(page, '/admin/collections/pages/create') + await page.fill('#field-title', 'Page from the admin') + await page.fill('#field-slug', slug) + await saveDoc(page) + await expect(page).toHaveURL(/\/admin\/collections\/pages\/\d+$/) + const id = page.url().split('/').pop() + + await page.fill('#field-title', 'Page from the admin (edited)') + await saveDoc(page) + const api = await (await page.request.get(`/api/pages/${id}`)).json() + expect(api.title).toBe('Page from the admin (edited)') + + await page.locator('.doc-controls__popup').click() + await page.locator('.popup__content #action-delete').click() + await page.locator('.delete-document [data-dialog-action="confirm"]').click() + await expect(page.locator('.payload-toast-container')).toContainText('successfully deleted') + await expect(page).toHaveURL(/\/admin\/collections\/pages(\?|$)/) + await closeToasts(page) + expect((await page.request.get(`/api/pages/${id}`)).status()).toBe(404) +}) + +test('list view: search, sort and pagination', async ({ page }) => { + const prefix = uniqueSlug('list') + for (let i = 0; i < 12; i++) { + await createPost(page.request, { slug: `${prefix}-${i}`, title: `${prefix} item ${String(i).padStart(2, '0')}` }) + } + + await gotoAdmin(page, '/admin/collections/posts?limit=5') + await expect(page.locator('.paginator')).toBeVisible() + await expect(page.locator('tbody tr')).toHaveCount(5) + + // Pagination: next page keeps the list mounted and updates the URL. + await page.getByRole('button', { name: 'Next table page' }).click() + await expect(page).toHaveURL(/page=2/) + await expect(page.locator('tbody tr')).toHaveCount(5) + + // Search narrows to the twelve posts created above. + await page.fill('#search-filter-input', prefix) + await expect(page).toHaveURL(new RegExp(`search=${prefix}`)) + await expect(page.getByText(/\d+-\d+ of 12/)).toBeVisible() + + // Sort by title, descending: the last item comes first. + await gotoAdmin(page, `/admin/collections/posts?limit=5&search=${prefix}&sort=-title`) + await expect(page.locator('tbody tr').first()).toContainText(`${prefix} item 11`) + await gotoAdmin(page, `/admin/collections/posts?limit=5&search=${prefix}&sort=title`) + await expect(page.locator('tbody tr').first()).toContainText(`${prefix} item 00`) +}) + +test('client-side navigation between admin views does not reload the document', async ({ page }) => { + await gotoAdmin(page, '/admin') + await page.evaluate(() => ((window as unknown as { __marker: number }).__marker = 42)) + + await page.locator('a[href="/admin/collections/pages"]').first().click() + // The list view appends the user's saved preferences (limit, sort) to the URL. + await expect(page).toHaveURL(/\/admin\/collections\/pages(\?|$)/) + await expect(page.locator('.collection-list')).toBeVisible() + + await page.locator('a[href="/admin/collections/posts"]').first().click() + // The list view appends the user's saved preferences (limit, sort) to the URL. + await expect(page).toHaveURL(/\/admin\/collections\/posts(\?|$)/) + await expect(page.locator('.collection-list')).toBeVisible() + + expect(await page.evaluate(() => (window as unknown as { __marker?: number }).__marker)).toBe(42) +}) + +test('an unknown admin route renders Payload not-found with a 404 status', async ({ page }) => { + const response = await page.goto('/admin/collections/does-not-exist') + expect(response?.status()).toBe(404) + await expect(page.locator('.not-found')).toBeVisible() +}) diff --git a/demo/tests/e2e/04-versions.spec.ts b/demo/tests/e2e/04-versions.spec.ts new file mode 100644 index 0000000..432905a --- /dev/null +++ b/demo/tests/e2e/04-versions.spec.ts @@ -0,0 +1,40 @@ +import { expect, test } from '@playwright/test' + +import { gotoAdmin, login, saveDoc, uniqueSlug } from './helpers' + +test.beforeEach(async ({ page }) => { + await login(page) +}) + +test('autosave creates a draft and redirects to it, then publish', async ({ page }) => { + const slug = uniqueSlug('autosave') + await gotoAdmin(page, '/admin/collections/posts/create') + await page.fill('#field-title', 'Autosaved post') + await page.fill('#field-slug', slug) + + // DocumentView redirects from /create to the new id after the first autosave: + // the redirect raised inside the server render must reach the browser. + await expect(page).toHaveURL(/\/admin\/collections\/posts\/\d+$/, { timeout: 30_000 }) + const id = page.url().split('/').pop() + + await expect + .poll(async () => (await (await page.request.get(`/api/posts/${id}?draft=true`)).json())._status) + .toBe('draft') + + await saveDoc(page, '#action-save') + const published = await (await page.request.get(`/api/posts/${id}`)).json() + expect(published._status).toBe('published') +}) + +test('versions view lists saved versions', async ({ page }) => { + const slug = uniqueSlug('versions') + const created = await page.request.post('/api/posts', { + data: { _status: 'published', slug, title: 'Version one' }, + }) + const { doc } = await created.json() + await page.request.patch(`/api/posts/${doc.id}`, { data: { _status: 'published', title: 'Version two' } }) + + await gotoAdmin(page, `/admin/collections/posts/${doc.id}/versions`) + await expect(page.locator('.versions')).toBeVisible() + await expect(page.locator('tbody tr')).toHaveCount(2) +}) diff --git a/demo/tests/e2e/05-uploads.spec.ts b/demo/tests/e2e/05-uploads.spec.ts new file mode 100644 index 0000000..061c9a5 --- /dev/null +++ b/demo/tests/e2e/05-uploads.spec.ts @@ -0,0 +1,25 @@ +import path from 'node:path' + +import { expect, test } from '@playwright/test' + +import { gotoAdmin, login, saveDoc } from './helpers' + +test.beforeEach(async ({ page }) => { + await login(page) +}) + +test('upload an image to local storage and serve it back', async ({ page }) => { + await gotoAdmin(page, '/admin/collections/media/create') + await page.setInputFiles('input[type="file"]', path.resolve(import.meta.dirname, '../fixtures/image.png')) + await page.fill('#field-alt', 'A generated test image') + await saveDoc(page) + await expect(page).toHaveURL(/\/admin\/collections\/media\/\d+$/) + + const id = page.url().split('/').pop() + const doc = await (await page.request.get(`/api/media/${id}`)).json() + expect(doc.mimeType).toBe('image/png') + + const file = await page.request.get(doc.url) + expect(file.status()).toBe(200) + expect(file.headers()['content-type']).toContain('image/png') +}) diff --git a/demo/tests/e2e/06-richtext.spec.ts b/demo/tests/e2e/06-richtext.spec.ts new file mode 100644 index 0000000..a089524 --- /dev/null +++ b/demo/tests/e2e/06-richtext.spec.ts @@ -0,0 +1,24 @@ +import { expect, test } from '@playwright/test' + +import { gotoAdmin, login, richText, saveDoc, uniqueSlug } from './helpers' + +test.beforeEach(async ({ page }) => { + await login(page) +}) + +test('Lexical content typed in the admin is rendered on the website', async ({ page }) => { + const slug = uniqueSlug('lexical') + const created = await page.request.post('/api/posts', { + data: { _status: 'published', slug, title: 'Rich text post' }, + }) + const { doc } = await created.json() + + await gotoAdmin(page, `/admin/collections/posts/${doc.id}?locale=en`) + const editor = richText(page, 'Content') + await editor.click() + await page.keyboard.type('Written in Lexical under React Router.') + await saveDoc(page, '#action-save') + + await page.goto(`/posts/${slug}`) + await expect(page.locator('article')).toContainText('Written in Lexical under React Router.') +}) diff --git a/demo/tests/e2e/07-localization.spec.ts b/demo/tests/e2e/07-localization.spec.ts new file mode 100644 index 0000000..64308d5 --- /dev/null +++ b/demo/tests/e2e/07-localization.spec.ts @@ -0,0 +1,44 @@ +import { expect, test } from '@playwright/test' + +import { gotoAdmin, login, saveDoc, uniqueSlug } from './helpers' + +test.beforeEach(async ({ page }) => { + await login(page) +}) + +test('edit a localized field in a second locale', async ({ page }) => { + const slug = uniqueSlug('i18n') + const { doc } = await ( + await page.request.post('/api/pages', { data: { _status: 'published', slug, title: 'English title' } }) + ).json() + + await gotoAdmin(page, `/admin/collections/pages/${doc.id}`) + await page.locator('.localizer .popup__trigger-wrap > button').click() + await page + .locator('.popup__content .popup-button-list__button') + .filter({ has: page.locator('[data-locale="fr"]') }) + .click() + await expect(page).toHaveURL(/locale=fr/) + + await page.fill('#field-title', 'Titre français') + await saveDoc(page) + + const fr = await (await page.request.get(`/api/pages/${doc.id}?locale=fr`)).json() + const en = await (await page.request.get(`/api/pages/${doc.id}?locale=en`)).json() + expect(fr.title).toBe('Titre français') + expect(en.title).toBe('English title') +}) + +test('switching the admin language sets the cookie through a server function', async ({ page, context }) => { + await gotoAdmin(page, '/admin/account') + await page.getByRole('combobox', { name: 'Language' }).click() + await page.locator('.rs__option', { hasText: 'Français' }).click() + + await expect + .poll(async () => (await context.cookies()).find((cookie) => cookie.name === 'payload-lng')?.value) + .toBe('fr') + await expect(page.locator('html')).toHaveAttribute('lang', 'fr') + + // Restore English for the following specs. + await context.addCookies([{ name: 'payload-lng', url: page.url(), value: 'en' }]) +}) diff --git a/demo/tests/e2e/08-globals-relations.spec.ts b/demo/tests/e2e/08-globals-relations.spec.ts new file mode 100644 index 0000000..a192661 --- /dev/null +++ b/demo/tests/e2e/08-globals-relations.spec.ts @@ -0,0 +1,31 @@ +import { expect, test } from '@playwright/test' + +import { admin, gotoAdmin, login, saveDoc, uniqueSlug } from './helpers' + +test.beforeEach(async ({ page }) => { + await login(page) +}) + +test('edit a global and see it on the website', async ({ page }) => { + const siteName = `Site ${uniqueSlug('name')}` + await gotoAdmin(page, '/admin/globals/site-settings') + await page.fill('#field-siteName', siteName) + await saveDoc(page) + + await page.goto('/') + await expect(page.locator('.site-header')).toContainText(siteName) +}) + +test('set a relationship from the admin', async ({ page }) => { + const { doc } = await ( + await page.request.post('/api/posts', { data: { slug: uniqueSlug('rel'), title: 'Related post' } }) + ).json() + + await gotoAdmin(page, `/admin/collections/posts/${doc.id}?locale=en`) + await page.getByRole('combobox', { name: 'Author' }).click() + await page.locator('.rs__option', { hasText: admin.email }).click() + await saveDoc(page, '#action-save') + + const saved = await (await page.request.get(`/api/posts/${doc.id}?depth=1`)).json() + expect(saved.author.email).toBe(admin.email) +}) diff --git a/demo/tests/e2e/10-frontend.spec.ts b/demo/tests/e2e/10-frontend.spec.ts new file mode 100644 index 0000000..7a7a071 --- /dev/null +++ b/demo/tests/e2e/10-frontend.spec.ts @@ -0,0 +1,27 @@ +import { expect, test } from '@playwright/test' + +import { createPost, ensureAdmin, uniqueSlug } from './helpers' + +// The website reads Payload through the Local API inside React Router loaders. +test.describe('website (Local API in loaders)', () => { + test('published posts are listed and readable; drafts are not', async ({ browser, request }) => { + await ensureAdmin(request) + await request.post('/api/users/login', { data: { email: 'dev@payloadcms.com', password: 'test-password-123' } }) + const published = await createPost(request, { _status: 'published', slug: uniqueSlug('site-pub'), title: 'Visible on the site' }) + const draft = await createPost(request, { slug: uniqueSlug('site-draft'), title: 'Hidden draft' }, { draft: true }) + + // A fresh, anonymous browser context. + const visitor = await browser.newPage() + await visitor.goto('/') + await expect(visitor.getByRole('link', { name: 'Visible on the site' }).first()).toBeVisible() + await expect(visitor.getByText('Hidden draft')).toHaveCount(0) + + await visitor.getByRole('link', { name: 'Visible on the site' }).first().click() + await expect(visitor).toHaveURL(`/posts/${published.slug}`) + await expect(visitor.locator('h1')).toHaveText('Visible on the site') + + const hidden = await visitor.goto(`/posts/${draft.slug}`) + expect(hidden?.status()).toBe(404) + await visitor.close() + }) +}) diff --git a/demo/tests/e2e/11-api.spec.ts b/demo/tests/e2e/11-api.spec.ts new file mode 100644 index 0000000..92f383b --- /dev/null +++ b/demo/tests/e2e/11-api.spec.ts @@ -0,0 +1,107 @@ +import { expect, test } from '@playwright/test' + +import { admin, createPost, ensureAdmin, uniqueSlug } from './helpers' + +// The responses below are Payload's own REST contract — the same handler +// (`handleEndpoints`) answers under Next.js, so these shapes are what a Next +// app returns for the same requests. +test.describe('REST and GraphQL API', () => { + test.beforeAll(async ({ request }) => { + await ensureAdmin(request) + }) + + test('collection find returns a paginated result', async ({ request }) => { + const response = await request.get('/api/pages?limit=5') + expect(response.status()).toBe(200) + expect(response.headers()['content-type']).toContain('application/json') + const body = await response.json() + expect(body).toMatchObject({ docs: expect.any(Array), limit: 5, page: 1 }) + for (const key of ['hasNextPage', 'hasPrevPage', 'totalDocs', 'totalPages']) { + expect(body).toHaveProperty(key) + } + }) + + test('login sets an HttpOnly auth cookie and /me returns the user', async ({ request }) => { + const login = await request.post('/api/users/login', { data: admin }) + expect(login.status()).toBe(200) + const setCookie = login.headersArray().find((h) => h.name.toLowerCase() === 'set-cookie')?.value ?? '' + expect(setCookie).toMatch(/payload-token=/) + expect(setCookie).toMatch(/HttpOnly/i) + expect(await login.json()).toMatchObject({ token: expect.any(String), user: { email: admin.email } }) + + const me = await request.get('/api/users/me') + expect(await me.json()).toMatchObject({ user: { email: admin.email } }) + + const logout = await request.post('/api/users/logout') + expect(logout.status()).toBe(200) + expect((await (await request.get('/api/users/me')).json()).user).toBeNull() + }) + + test('access control: anonymous reads see published posts only', async ({ playwright, request }) => { + await request.post('/api/users/login', { data: admin }) + const published = await createPost(request, { _status: 'published', slug: uniqueSlug('pub'), title: 'Published' }) + const draft = await createPost(request, { slug: uniqueSlug('draft'), title: 'Draft only' }, { draft: true }) + + const anonymous = await playwright.request.newContext({ baseURL: test.info().project.use.baseURL }) + const list = await (await anonymous.get('/api/posts?limit=100')).json() + const ids = (list.docs as { id: number }[]).map((doc) => doc.id) + expect(ids).toContain(published.id) + expect(ids).not.toContain(draft.id) + expect((await anonymous.get(`/api/posts/${draft.id}`)).status()).toBe(404) + await anonymous.dispose() + }) + + test('create, update and delete over REST', async ({ request }) => { + await request.post('/api/users/login', { data: admin }) + const created = await request.post('/api/pages', { data: { slug: uniqueSlug('page'), title: 'REST page' } }) + expect(created.status()).toBe(201) + const { doc } = await created.json() + + const updated = await request.patch(`/api/pages/${doc.id}`, { data: { title: 'REST page (edited)' } }) + expect(updated.status()).toBe(200) + expect((await updated.json()).doc.title).toBe('REST page (edited)') + + const removed = await request.delete(`/api/pages/${doc.id}`) + expect(removed.status()).toBe(200) + expect((await request.get(`/api/pages/${doc.id}`)).status()).toBe(404) + }) + + test('validation errors come back as 400 with field details', async ({ request }) => { + await request.post('/api/users/login', { data: admin }) + const response = await request.post('/api/pages', { data: { title: 'missing slug' } }) + expect(response.status()).toBe(400) + expect(JSON.stringify(await response.json())).toContain('slug') + }) + + test('unknown API routes answer 404 JSON', async ({ request }) => { + const response = await request.get('/api/does-not-exist') + expect(response.status()).toBe(404) + }) + + test('globals and localized reads', async ({ request }) => { + const settings = await request.get('/api/globals/site-settings') + expect(settings.status()).toBe(200) + expect(await settings.json()).toHaveProperty('siteName') + + const fr = await request.get('/api/globals/site-settings?locale=fr') + expect(fr.status()).toBe(200) + }) + + test('GraphQL endpoint answers queries', async ({ request }) => { + const response = await request.post('/api/graphql', { + data: { query: '{ Pages(limit: 1) { totalDocs } }' }, + }) + expect(response.status()).toBe(200) + expect(await response.json()).toMatchObject({ data: { Pages: { totalDocs: expect.any(Number) } } }) + }) + + test('CORS preflight (OPTIONS) is answered by Payload, not React Router', async ({ request }) => { + const response = await request.fetch('/api/posts', { + headers: { 'Access-Control-Request-Method': 'GET', Origin: 'http://localhost' }, + method: 'OPTIONS', + }) + // Under `vite dev`, Vite's own CORS middleware answers preflights (204) + // before the request reaches React Router; in production Payload does (200). + expect(response.status()).toBe(process.env.E2E_MODE === 'dev' ? 204 : 200) + }) +}) diff --git a/demo/tests/e2e/12-styles.spec.ts b/demo/tests/e2e/12-styles.spec.ts new file mode 100644 index 0000000..79c768d --- /dev/null +++ b/demo/tests/e2e/12-styles.spec.ts @@ -0,0 +1,42 @@ +import { expect, type Page, test } from '@playwright/test' + +import { gotoAdmin, login } from './helpers' + +// Payload's server components import their own CSS. The production build only +// links that CSS if the RSC plugin wraps each component, so check the rules. +const hasRule = (page: Page, selector: string) => + page.evaluate( + (prefix) => + [...document.styleSheets].some((sheet) => { + // Payload puts its rules in `@layer` blocks, so look inside grouping rules too. + const matches = (rules: CSSRuleList): boolean => + [...rules].some( + (rule) => + (rule as CSSStyleRule).selectorText?.startsWith(prefix) || + ('cssRules' in rule && matches((rule as CSSGroupingRule).cssRules)), + ) + try { + return matches(sheet.cssRules) + } catch { + return false + } + }), + selector, + ) + +test('the login page loads the minimal template styles', async ({ page }) => { + await gotoAdmin(page, '/admin/login') + // The admin view mounts after the hydration signal. Its stylesheet comes with it. + await expect(page.locator('.template-minimal__wrap')).toBeVisible() + expect(await hasRule(page, '.template-minimal')).toBe(true) + const wrap = await page.locator('.template-minimal__wrap').boundingBox() + expect(wrap?.width).toBeLessThan(600) +}) + +test('admin views load the default template and nav styles', async ({ page }) => { + await login(page) + await gotoAdmin(page, '/admin') + await expect(page.locator('.dashboard')).toBeVisible() + expect(await hasRule(page, '.template-default')).toBe(true) + expect(await hasRule(page, '.nav')).toBe(true) +}) diff --git a/demo/tests/e2e/13-blocks-live-preview.spec.ts b/demo/tests/e2e/13-blocks-live-preview.spec.ts new file mode 100644 index 0000000..3a4fbd2 --- /dev/null +++ b/demo/tests/e2e/13-blocks-live-preview.spec.ts @@ -0,0 +1,132 @@ +import { expect, type Page, test } from '@playwright/test' + +import { createPost, gotoAdmin, login, saveDoc, uniqueSlug } from './helpers' + +test.beforeEach(async ({ page }) => { + await login(page) +}) + +const createPage = async (page: Page, data: Record, { draft = false } = {}) => { + const response = await page.request.post(`/api/pages${draft ? '?draft=true' : ''}`, { data }) + expect(response.ok(), await response.text()).toBeTruthy() + return ((await response.json()) as { doc: { id: number } }).doc +} + +const openLivePreview = async (page: Page) => { + await page.click('#live-preview-toggler') + return page.frameLocator('iframe.iframe-loader__iframe') +} + +test('build a page from blocks in the admin and publish it', async ({ page, request }) => { + const slug = uniqueSlug('blocks') + await gotoAdmin(page, '/admin/collections/pages/create') + await page.fill('#field-title', 'Built from blocks') + await page.fill('#field-slug', slug) + // The first autosave redirects /create to the new id. + await expect(page).toHaveURL(/\/admin\/collections\/pages\/\d+$/, { timeout: 30_000 }) + + await page.click('.blocks-field__drawer-toggler') + const drawer = page.getByRole('dialog') + await drawer.getByRole('button', { name: 'Call To Action' }).click() + await drawer.getByRole('button', { name: 'Insert' }).click() + await page.fill('#field-layout__0__heading', 'Join the beta') + await page.fill('#field-layout__0__buttonLabel', 'Sign up') + await page.fill('#field-layout__0__buttonLink', '/signup') + await saveDoc(page, '#action-save') + + // An anonymous visitor reads the published page. + const html = await (await request.get(`/${slug}`)).text() + expect(html).toContain('Join the beta') + await page.goto(`/${slug}`) + await expect(page.locator('.block-cta a')).toHaveAttribute('href', '/signup') +}) + +test('live preview shows unsaved block edits while typing', async ({ page }) => { + const slug = uniqueSlug('live') + const doc = await createPage(page, { + _status: 'published', + layout: [{ blockType: 'hero', heading: 'Saved heading' }], + slug, + title: 'Live page', + }) + + await gotoAdmin(page, `/admin/collections/pages/${doc.id}`) + const preview = await openLivePreview(page) + await expect(preview.locator('.block-hero h1')).toHaveText('Saved heading') + + await page.fill('#field-layout__0__heading', 'Typed, not saved') + await expect(preview.locator('.block-hero h1')).toHaveText('Typed, not saved') + + const published = await (await page.request.get(`/api/pages/${doc.id}`)).json() + expect(published.layout[0].heading).toBe('Saved heading') +}) + +test('live preview follows post edits', async ({ page }) => { + const post = await createPost(page.request, { _status: 'published', slug: uniqueSlug('live-post'), title: 'Before' }) + + await gotoAdmin(page, `/admin/collections/posts/${post.id}?locale=en`) + const preview = await openLivePreview(page) + await expect(preview.locator('article h1')).toHaveText('Before') + + await page.fill('#field-title', 'After') + await expect(preview.locator('article h1')).toHaveText('After') +}) + +test('drafts reach signed-in readers only', async ({ page, request }) => { + const slug = uniqueSlug('draft-page') + await createPage(page, { layout: [{ blockType: 'hero', heading: 'Draft only' }], slug, title: 'Draft' }, { draft: true }) + + expect((await request.get(`/${slug}`)).status()).toBe(404) + expect((await request.get(`/api/pages?where[slug][equals]=${slug}`)).ok()).toBeTruthy() + expect((await (await request.get(`/api/pages?where[slug][equals]=${slug}`)).json()).totalDocs).toBe(0) + + await page.goto(`/${slug}`) + await expect(page.locator('.block-hero h1')).toHaveText('Draft only') +}) + +test('a call to action only accepts a site path or an http(s) URL', async ({ page }) => { + const cta = (buttonLink: string) => ({ + _status: 'published', + layout: [{ blockType: 'callToAction', buttonLabel: 'Go', buttonLink, heading: 'Link check' }], + slug: uniqueSlug('cta'), + title: 'Link check', + }) + const unsafeLinks = [ + 'javascript:alert(1)', + ' JaVaScRiPt:alert(1)', + 'data:text/html,x', + '//evil.example', + '/\\evil.example', + '/\t/evil.example', + '/\n/evil.example', + 'https:evil.example', + ] + for (const unsafe of unsafeLinks) { + const response = await page.request.post('/api/pages', { data: cta(unsafe) }) + expect(response.status(), unsafe).toBe(400) + } + for (const safe of ['/pricing', '/docs/intro?tab=1#top', 'https://payloadcms.com', 'HTTP://example.com/a']) { + const response = await page.request.post('/api/pages', { data: cta(safe) }) + expect(response.ok(), safe).toBeTruthy() + } +}) + +test('a page slug cannot take the path of another route', async ({ page }) => { + for (const slug of ['admin', 'api', 'posts', 'two/segments', 'Upper Case']) { + const response = await page.request.post('/api/pages', { data: { _status: 'published', slug, title: 'Slug check' } }) + expect(response.status(), slug).toBe(400) + } +}) + +test('the site nav lists every published page, past the default limit of 10', async ({ page, request }) => { + const prefix = uniqueSlug('nav') + const slugs = Array.from({ length: 11 }, (_, index) => `${prefix}-${index}`) + for (const slug of slugs) { + await createPage(page, { _status: 'published', slug, title: `Nav ${slug}` }) + } + + const html = await (await request.get('/')).text() + for (const slug of slugs) { + expect(html, slug).toContain(`href="/${slug}"`) + } +}) diff --git a/demo/tests/e2e/helpers.ts b/demo/tests/e2e/helpers.ts new file mode 100644 index 0000000..3ac9897 --- /dev/null +++ b/demo/tests/e2e/helpers.ts @@ -0,0 +1,64 @@ +import { expect, type APIRequestContext, type Page } from '@playwright/test' + +export const admin = { email: 'dev@payloadcms.com', password: 'test-password-123' } + +/** Navigates and waits until the admin has hydrated, so clicks are not lost. */ +export async function gotoAdmin(page: Page, path: string) { + await page.goto(path) + await waitForHydration(page) +} + +export async function waitForHydration(page: Page) { + await page.waitForFunction(() => window.__PAYLOAD_ADMIN_HYDRATED__ === true, null, { timeout: 60_000 }) +} + +/** Creates the first user if the database is empty. Idempotent. */ +export async function ensureAdmin(request: APIRequestContext) { + const init = await request.get('/api/users/init') + const { initialized } = (await init.json()) as { initialized: boolean } + if (!initialized) { + const response = await request.post('/api/users/first-register', { + data: { ...admin, confirmPassword: admin.password, role: 'admin' }, + }) + expect(response.ok()).toBeTruthy() + } +} + +/** Logs in through the REST API; the browser context receives the auth cookie. */ +export async function login(page: Page) { + await ensureAdmin(page.request) + const response = await page.request.post('/api/users/login', { data: admin }) + expect(response.ok()).toBeTruthy() +} + +/** Creates a post through the REST API and returns it. */ +export async function createPost( + request: APIRequestContext, + data: Record, + { draft = false } = {}, +) { + const response = await request.post(`/api/posts${draft ? '?draft=true' : ''}`, { data }) + expect(response.ok(), await response.text()).toBeTruthy() + return ((await response.json()) as { doc: { id: number; slug: string; title: string } }).doc +} + +export const uniqueSlug = (prefix: string) => `${prefix}-${Date.now().toString(36)}` + +/** Clicks a document save/publish button and waits for Payload's success toast. */ +export async function saveDoc(page: Page, selector = '#action-save') { + await page.click(selector) + await expect(page.locator('.payload-toast-container')).toContainText('successfully') + await closeToasts(page) +} + +export async function closeToasts(page: Page) { + const close = page.locator('.payload-toast-container button.payload-toast-close-button') + while ((await close.count()) > 0) { + const count = await close.count() + await close.first().dispatchEvent('click') + await expect.poll(() => close.count()).toBeLessThan(count) + } +} + +/** The Lexical editor of a rich text field. */ +export const richText = (page: Page, label: string) => page.getByRole('textbox', { name: label }) diff --git a/demo/tests/fixtures/image.png b/demo/tests/fixtures/image.png new file mode 100644 index 0000000..9b807d4 Binary files /dev/null and b/demo/tests/fixtures/image.png differ diff --git a/demo/tsconfig.json b/demo/tsconfig.json new file mode 100644 index 0000000..0260e1a --- /dev/null +++ b/demo/tsconfig.json @@ -0,0 +1,56 @@ +{ + "include": [ + "**/*", + ".react-router/types/**/*" + ], + "exclude": [ + "node_modules", + "build", + "test-results", + "playwright-report" + ], + "compilerOptions": { + "lib": [ + "DOM", + "DOM.Iterable", + "ES2023" + ], + "types": [ + "node", + "vite/client", + "@vitejs/plugin-rsc/types" + ], + "target": "ES2023", + "module": "ESNext", + "moduleResolution": "bundler", + "jsx": "react-jsx", + "rootDirs": [ + ".", + "./.react-router/types" + ], + "paths": { + "@payload-config": [ + "./payload.config.ts" + ], + "react": [ + "./node_modules/@types/react" + ], + "react/*": [ + "./node_modules/@types/react/*" + ], + "react-dom": [ + "./node_modules/@types/react-dom" + ], + "react-dom/*": [ + "./node_modules/@types/react-dom/*" + ] + }, + "esModuleInterop": true, + "verbatimModuleSyntax": false, + "noEmit": true, + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true + } +} diff --git a/demo/vite.config.ts b/demo/vite.config.ts new file mode 100644 index 0000000..5b73034 --- /dev/null +++ b/demo/vite.config.ts @@ -0,0 +1,9 @@ +import { unstable_reactRouterRSC as reactRouterRSC } from '@react-router/dev/vite' +import rsc from '@vitejs/plugin-rsc' +import { payload } from 'payload-react-router/vite' +import { defineConfig } from 'vite' + +export default defineConfig({ + plugins: [payload({ payloadConfigPath: './payload.config.ts' }), reactRouterRSC(), rsc()], + server: { port: 3000 }, +}) diff --git a/docs/COMPAT.md b/docs/COMPAT.md index a772ef4..fa48547 100644 --- a/docs/COMPAT.md +++ b/docs/COMPAT.md @@ -1,13 +1,13 @@ # Compatibility report — `payload-react-router` Payload `4.0.0-canary.39` · React Router `8.4.0` (RSC Framework Mode) · `@vitejs/plugin-rsc` `0.5.35` -· React `19.3.0` · Node `24.21` · SQLite. Measured on 2026-10-08. +· React `19.3.0` · Node `24` · SQLite. Measured on 2026-10-08, updated on 2026-10-09 (adapter `0.1.1`). ## What was run, and what was not | Bench | Where | Status | | --- | --- | --- | -| **Adapter bench**: 26 Playwright tests on the demo app | demo app repository (private), CI job `payload-e2e` | ✅ run, both modes | +| **Adapter bench**: 35 Playwright tests on [`demo/`](../demo) | this repo, CI job `e2e` | ✅ run, both modes | | Adapter unit tests: 15 `node:test` cases, `test/` | this repo, CI job `checks` | ✅ run | | **Payload's own e2e suites** (`test/*/e2e.spec.ts`, as the TanStack adapter runs them) | Payload monorepo only | ❌ **not run** | @@ -22,8 +22,8 @@ measured**. The tables below compare scenarios, not suite pass rates. | Mode | Command | Result | Duration | | --- | --- | --- | --- | -| production | `react-router build` + `react-router-serve` | **26 / 26** | 32 s | -| development | `vite dev` | **26 / 26** | 1 min 42 s (cold optimizer) | +| production | `react-router build` + `react-router-serve` | **35 / 35** | 19 s | +| development | `vite dev` | **35 / 35** | 35 s | Each run starts on an empty SQLite database. In production the schema comes from the committed migrations (`prodMigrations`); in development it is pushed. @@ -47,7 +47,16 @@ committed migrations (`prodMigrations`); in development it is pushed. | 15 | globals | edit a global; the website shows it | ✅ | ✅ | | 16 | relations | set a relationship from the admin | ✅ | ✅ | | 17 | headless / Local API | website loaders list published posts; drafts are hidden and 404 | ✅ | ✅ | -| 18–26 | REST / GraphQL | paginated find; login `Set-Cookie` (HttpOnly) + `/me` + logout; access control for anonymous reads; create/update/delete; 400 validation; 404 unknown route; globals + `?locale`; GraphQL query; CORS preflight | ✅ | ✅ | +| 18 | admin styles (adapter `0.1.1`) | login and first-user templates, nav: their CSS is loaded in production; fails on `0.1.0` | ✅ | ✅ | +| 19 | admin styles | dashboard: default template and nav CSS loaded | ✅ | ✅ | +| 20 | blocks | build a page from blocks in the admin, publish, anonymous visitor reads it | ✅ | ✅ | +| 21 | live preview | page: unsaved block edits show in the preview iframe while typing | ✅ | ✅ | +| 22 | live preview | post: unsaved title shows in the preview iframe while typing | ✅ | ✅ | +| 23 | drafts | a draft page is 404 for an anonymous reader and visible when signed in | ✅ | ✅ | +| 24 | validation | call-to-action links: site path or http(s) only (`javascript:`, `//host`, `/\host` refused) | ✅ | ✅ | +| 25 | validation | page slugs: kebab-case, not `admin`, `api` or `posts` | ✅ | ✅ | +| 26 | website | nav lists every published page, past Payload's default limit of 10 | ✅ | ✅ | +| 27–35 | REST / GraphQL | paginated find; login `Set-Cookie` (HttpOnly) + `/me` + logout; access control for anonymous reads; create/update/delete; 400 validation; 404 unknown route; globals + `?locale`; GraphQL query; CORS preflight | ✅ | ✅ | The REST/GraphQL assertions check Payload's own response contract (`handleEndpoints` and the GraphQL handler are the same code Next.js and TanStack call). There is no Next app in this @@ -63,7 +72,6 @@ middleware answers `OPTIONS` (204) before React Router sees it; in production Pa | Area (brief §3) | Why | | --- | --- | | S3 uploads | needs an S3 endpoint; untested | -| Live preview | not configured in the demo | | Postgres | only SQLite was run | | Permissions beyond admin / anonymous | the demo has a `role` field but no role-based rules | | Payload's own e2e suites (auth, fields, collections, versions, uploads) | see above | diff --git a/package.json b/package.json index 9d5038b..54a6584 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,10 @@ "build": "rm -rf dist && tsc -p tsconfig.build.json", "typecheck": "tsc --noEmit", "test": "node --test 'test/*.test.ts'", - "prepack": "pnpm build" + "prepack": "pnpm build", + "demo:build": "pnpm build && pnpm --filter payload-react-router-demo build", + "demo:dev": "pnpm build && pnpm --filter payload-react-router-demo dev", + "test:e2e": "pnpm --filter payload-react-router-demo test:e2e" }, "dependencies": { "esbuild": "^0.27.0 || ^0.28.0", @@ -75,6 +78,7 @@ "react": "19.3.0", "react-dom": "19.3.0", "react-router": "8.4.0", + "react-server-dom-webpack": "19.3.0", "typescript": "^5.9.3", "vite": "^8.0.3" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 981cd17..d80d74b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,7 +35,7 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-rsc': specifier: 0.5.35 - version: 0.5.35(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(vite@8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(tsx@4.23.15)) + version: 0.5.35(react-dom@19.3.0(react@19.3.0))(react-server-dom-webpack@19.3.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(webpack@5.111.1(esbuild@0.28.2)))(react@19.3.0)(vite@8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(sass-embedded@1.105.1)(sass@1.105.1)(terser@5.51.2)(tsx@4.23.15)) graphql: specifier: ^16.8.1 version: 16.14.2 @@ -51,12 +51,94 @@ importers: react-router: specifier: 8.4.0 version: 8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + react-server-dom-webpack: + specifier: 19.3.0 + version: 19.3.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(webpack@5.111.1(esbuild@0.28.2)) + typescript: + specifier: ^5.9.3 + version: 5.9.3 + vite: + specifier: ^8.0.3 + version: 8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(sass-embedded@1.105.1)(sass@1.105.1)(terser@5.51.2)(tsx@4.23.15) + + demo: + dependencies: + '@payloadcms/db-sqlite': + specifier: 4.0.0-canary.39 + version: 4.0.0-canary.39(payload@4.0.0-canary.39(graphql@16.14.2)(typescript@5.9.3)) + '@payloadcms/graphql': + specifier: 4.0.0-canary.39 + version: 4.0.0-canary.39(graphql@16.14.2)(payload@4.0.0-canary.39(graphql@16.14.2)(typescript@5.9.3))(typescript@5.9.3) + '@payloadcms/live-preview-react': + specifier: 4.0.0-canary.39 + version: 4.0.0-canary.39(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@payloadcms/richtext-lexical': + specifier: 4.0.0-canary.39 + version: 4.0.0-canary.39(@faceless-ui/modal@3.0.2(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(@faceless-ui/scroll-info@2.0.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(@types/react@19.2.14)(monaco-editor@0.57.0)(payload@4.0.0-canary.39(graphql@16.14.2)(typescript@5.9.3))(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(typescript@5.9.3)(yjs@13.6.33) + '@payloadcms/translations': + specifier: 4.0.0-canary.39 + version: 4.0.0-canary.39 + '@payloadcms/ui': + specifier: 4.0.0-canary.39 + version: 4.0.0-canary.39(@types/react@19.2.14)(monaco-editor@0.57.0)(payload@4.0.0-canary.39(graphql@16.14.2)(typescript@5.9.3))(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(typescript@5.9.3) + '@react-router/serve': + specifier: 8.4.0 + version: 8.4.0(react-router@8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(typescript@5.9.3) + graphql: + specifier: ^16.8.1 + version: 16.14.2 + payload: + specifier: 4.0.0-canary.39 + version: 4.0.0-canary.39(graphql@16.14.2)(typescript@5.9.3) + payload-react-router: + specifier: workspace:* + version: link:.. + react: + specifier: 19.3.0 + version: 19.3.0 + react-dom: + specifier: 19.3.0 + version: 19.3.0(react@19.3.0) + react-router: + specifier: 8.4.0 + version: 8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + react-server-dom-webpack: + specifier: 19.3.0 + version: 19.3.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(webpack@5.111.1(esbuild@0.28.2)) + devDependencies: + '@playwright/test': + specifier: ^1.56.0 + version: 1.64.0 + '@react-router/dev': + specifier: 8.4.0 + version: 8.4.0(@react-router/serve@8.4.0(react-router@8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(typescript@5.9.3))(@vitejs/plugin-rsc@0.5.35(react-dom@19.3.0(react@19.3.0))(react-server-dom-webpack@19.3.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(webpack@5.111.1(esbuild@0.28.2)))(react@19.3.0)(vite@8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(sass-embedded@1.105.1)(sass@1.105.1)(terser@5.51.2)(tsx@4.23.15)))(babel-plugin-macros@3.1.0)(react-router@8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(react-server-dom-webpack@19.3.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(webpack@5.111.1(esbuild@0.28.2)))(typescript@5.9.3)(vite@8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(sass-embedded@1.105.1)(sass@1.105.1)(terser@5.51.2)(tsx@4.23.15)) + '@types/node': + specifier: ^24.10.1 + version: 24.19.1 + '@types/react': + specifier: 19.2.14 + version: 19.2.14 + '@types/react-dom': + specifier: 19.2.3 + version: 19.2.3(@types/react@19.2.14) + '@vitejs/plugin-react': + specifier: ^6.0.1 + version: 6.1.2(vite@8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(sass-embedded@1.105.1)(sass@1.105.1)(terser@5.51.2)(tsx@4.23.15)) + '@vitejs/plugin-rsc': + specifier: 0.5.35 + version: 0.5.35(react-dom@19.3.0(react@19.3.0))(react-server-dom-webpack@19.3.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(webpack@5.111.1(esbuild@0.28.2)))(react@19.3.0)(vite@8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(sass-embedded@1.105.1)(sass@1.105.1)(terser@5.51.2)(tsx@4.23.15)) + esbuild: + specifier: ^0.28.2 + version: 0.28.2 + sass-embedded: + specifier: ^1.93.0 + version: 1.105.1 typescript: specifier: ^5.9.3 version: 5.9.3 vite: specifier: ^8.0.3 - version: 8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(tsx@4.23.15) + version: 8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(sass-embedded@1.105.1)(sass@1.105.1)(terser@5.51.2)(tsx@4.23.15) packages: @@ -68,10 +150,22 @@ packages: resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.29.7': + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.29.8': resolution: {integrity: sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} + engines: {node: '>=6.9.0'} + '@babel/helper-globals@7.29.7': resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} engines: {node: '>=6.9.0'} @@ -80,6 +174,12 @@ packages: resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-string-parser@7.29.7': resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} @@ -88,6 +188,14 @@ packages: resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.29.10': + resolution: {integrity: sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg==} + engines: {node: '>=6.9.0'} + '@babel/parser@7.29.9': resolution: {integrity: sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==} engines: {node: '>=6.0.0'} @@ -112,6 +220,9 @@ packages: '@borewit/text-codec@0.2.2': resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} + '@bufbuild/protobuf@2.16.0': + resolution: {integrity: sha512-FWa0sPlqYGJgpTs6OxBRcL/AW4JT0OIO+W1ajerluoTVh8CV0B7XM1qsNCRgnkSCkRCgOICKHRQlY17jrsm0+Q==} + '@date-fns/tz@1.2.0': resolution: {integrity: sha512-LBrd7MiJZ9McsOgxqWX7AaxrDjcFVjWH/tIKJd7pnR7McaslGYOP1QmmiBXdJH/H/yLCT+rcQ7FaPBUxRGUtrg==} @@ -143,6 +254,9 @@ packages: peerDependencies: react: '>=16.8.0' + '@drizzle-team/brocli@0.10.2': + resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} + '@emotion/babel-plugin@11.13.5': resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} @@ -184,160 +298,456 @@ packages: '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + '@esbuild-kit/core-utils@3.3.2': + resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} + deprecated: 'Merged into tsx: https://tsx.hirok.io' + + '@esbuild-kit/esm-loader@2.6.5': + resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} + deprecated: 'Merged into tsx: https://tsx.hirok.io' + + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.28.2': resolution: {integrity: sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.18.20': + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@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-arm64@0.28.2': resolution: {integrity: sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm@0.18.20': + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.28.2': resolution: {integrity: sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-x64@0.18.20': + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.28.2': resolution: {integrity: sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.18.20': + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.28.2': resolution: {integrity: sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.18.20': + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.28.2': resolution: {integrity: sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.18.20': + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.28.2': resolution: {integrity: sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.18.20': + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.28.2': resolution: {integrity: sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.18.20': + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.28.2': resolution: {integrity: sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.18.20': + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.28.2': resolution: {integrity: sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.18.20': + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@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-ia32@0.28.2': resolution: {integrity: sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.18.20': + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.28.2': resolution: {integrity: sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.18.20': + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.28.2': resolution: {integrity: sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.18.20': + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.28.2': resolution: {integrity: sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.18.20': + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.28.2': resolution: {integrity: sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.18.20': + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.28.2': resolution: {integrity: sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.18.20': + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.28.2': resolution: {integrity: sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-arm64@0.28.2': resolution: {integrity: sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-x64@0.18.20': + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.28.2': resolution: {integrity: sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.28.2': resolution: {integrity: sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-x64@0.18.20': + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.28.2': resolution: {integrity: sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/openharmony-arm64@0.28.2': resolution: {integrity: sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] + '@esbuild/sunos-x64@0.18.20': + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.28.2': resolution: {integrity: sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.18.20': + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.28.2': resolution: {integrity: sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.28.2': - resolution: {integrity: sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==} - engines: {node: '>=18'} + '@esbuild/win32-ia32@0.18.20': + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.28.2': - resolution: {integrity: sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==} + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} engines: {node: '>=18'} - cpu: [x64] + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.28.2': + resolution: {integrity: sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.18.20': + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.28.2': + resolution: {integrity: sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==} + engines: {node: '>=18'} + cpu: [x64] os: [win32] '@faceless-ui/modal@3.0.2': @@ -385,10 +795,16 @@ packages: '@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/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} + '@jridgewell/sourcemap-codec@1.6.0': resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==} @@ -398,6 +814,257 @@ packages: '@jsdevtools/ono@7.1.3': resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + '@lexical/a11y@0.52.0': + resolution: {integrity: sha512-FxcKnksrgeoPDxQgwHqTz81Tbv7vZnP2i09m7uU+zusNRt4g1dgbwSEq4Uee9yfLJ9qxM5P9YOGQTe0A6lAuAg==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/clipboard@0.52.0': + resolution: {integrity: sha512-SwUpKUEzTfl3dZlCXkYZN4CAU6AENzzuO3AtWCgbdtxG1HBnyUtMd6MP1XFUtYh0fhMGXw+QObzp+3+h0g3WTw==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/code-core@0.52.0': + resolution: {integrity: sha512-4ofNvUXEal2tm6DLGHtjJUc7C1qQP2RHUO4v/RHSSdWEHLKM1kITgIUUvWkf6FHnQNrTvrL2U5vxACv2bo0HVQ==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/devtools-core@0.52.0': + resolution: {integrity: sha512-WWnyAMiktdb7hIynOcOVyk2N19Q52kacLHJBnnGrJqR9tlhnAmH3DILfZ9BrCmetvKF1bbnJI6YE2wwxMi2bbQ==} + peerDependencies: + react: '>=18.x' + react-dom: '>=18.x' + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/dragon@0.52.0': + resolution: {integrity: sha512-XiNrujvAoywb41GRaRYFhPc/T7jxkFMf/bR9uE8S2t4fMERUFF1xM7Mos6NQ+skdDrF3KfxnLFzLCZ+4Oc9VyA==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/extension@0.52.0': + resolution: {integrity: sha512-do7uvUxg6mJK0702XlD0Z8UMCtr1Yij4/WpJ7+GY5CL2jKVercMeeYBBEE7cWc/OXQJgzVx3ClNXC7XAHI6Fvw==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/hashtag@0.52.0': + resolution: {integrity: sha512-y0d7fLhIItJHGdw+bulvzXBNrb0wkppvDkR9jqAp8w0s53zlRLn4egucLkSEWqd0kSAN3jjmSoxcWeC4sF6I0A==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/headless@0.52.0': + resolution: {integrity: sha512-/AvKTFBHUzGWqRuWEMGOOizlGTBrnGuu0O3g+IKj+var657uazbheDknhSq3lQGxDosOeesTM52II0kV65mEEQ==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/history@0.52.0': + resolution: {integrity: sha512-UJWmTcru+4KWkk8YtBSQ4dNLYuOJVCyCMFGsaCp/jVJEobwdY//jCTj9idOfE4b3H39kAixe9yQG/FNNOj4ujg==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/html@0.52.0': + resolution: {integrity: sha512-lRyntwgHnISsUKZHh3T+g9qU1CwTOH5hlnc1UzWE7/RXrvtnSmJTTcJu+sfFdRCiBAlkiIhKuJBCCYu99LeI7Q==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/internal@0.52.0': + resolution: {integrity: sha512-Y7jKqeh4Irf/FwNmAqHIk3b05HpMsHv2RyWPQ8+M7FAdEbT9N2mksjc8ZUZ3tHqDMi7FNiLkjZN/DwbdekUb1g==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/link@0.52.0': + resolution: {integrity: sha512-9hl/SxbkK5P0q1Rn4rTnaLHetTnf4zb+zgJjQwHAkqmeS561gLq34RcoO2i1zhibe8b6xk8gyhIe2cOpPeAC7w==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/list@0.52.0': + resolution: {integrity: sha512-B3+CdxWsdj6jBKtXiY7v4OSkyXBwotWyiD+75Baw0lvmjvniV33mvuMDgnPEQgEpFcGpBRmiu8M8kQdclQzXmQ==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/mark@0.52.0': + resolution: {integrity: sha512-nBPNmqKDFZm4REih0nsFbYcecSokXLnDNoZ+CeNOO53OYMljUnnj3gBhoaLdzwlpypqi6yGkGPJUEAtJE7fTyg==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/markdown@0.52.0': + resolution: {integrity: sha512-ntNi3SdjfcWoH7wi/D6rlO2Hw8MjDRkxuObAAQwJKLzJPvohNPKuzDoqM47uXNSs0XCS/HupI4mWShyrEZkDtA==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/overflow@0.52.0': + resolution: {integrity: sha512-GFtXJze8Ypsy271ZxhNrGI0wlbG5fbJcW9dgj1XiWhXVYtPajRaBYyu20kVG7LBkQwngS5B97wO/hKfHtVGDqQ==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/plain-text@0.52.0': + resolution: {integrity: sha512-jklUI77tbzDhKEOHhoUCUS3SqMvzZjJ7NNeqsMfvKT8sLWbtKvrPJBJWnfcGu5ADxp7xrOYE9j66uSHkROG2gg==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/react@0.52.0': + resolution: {integrity: sha512-CbwYw0Dtm13QE5yFjlfXcOiiSkESAyreTzuQxanvwdFeQrRrM4llbOawjvXGuisdz8mPT8RcCKnVBQdoNs9DnA==} + peerDependencies: + react: '>=18.x' + react-dom: '>=18.x' + typescript: '>=5.2' + yjs: '>=13.5.37' + peerDependenciesMeta: + typescript: + optional: true + yjs: + optional: true + + '@lexical/rich-text@0.52.0': + resolution: {integrity: sha512-P3Y4SM6JSCBG6uFwLpPVEZiShhfC/GCJA//lQU1ZljxPDnCb4ueVCfWSBBdw0nSejYg8KvDQsijc4Fczyjqqtw==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/selection@0.52.0': + resolution: {integrity: sha512-O1hgwqUvoF/R2DxXIOJJvCqXxNM7kOWq1TBxqnbjT4TXNlDokEdpkO5EpetAWYWZj5UE2BUphfGUZAPQjvcUKQ==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/table@0.52.0': + resolution: {integrity: sha512-zuVGmY37jUqGMT/7pFMPiLOKUD755SJR+yHZ3Jz7P4pdBI/sXHvbM8O7QDXMpDRFZwLQi1iBvgOj0Yv9FrTxQw==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/text@0.52.0': + resolution: {integrity: sha512-TuXd6a4MO18rQwU0Bl8VHNzWGD4o5pHnf3NKXwTRynImpeMJ8BGumVC6r27cGbh0kgBkvmX8Sb4EEbBQC9BYnQ==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/utils@0.52.0': + resolution: {integrity: sha512-3Azoh0EQckRcMd6CGOAuKue/UHDvkorrheXZFu9KpxhCBNQy+ic55jl0WQZFTOv2iO3NWReAMSuOAK0pWR2JPg==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/yjs@0.52.0': + resolution: {integrity: sha512-6Qd9/AkMDxDNalsXDs1X7ddLTw2OsqUy42RRvpIWlv0ya1MO4CNedl4NvgwMtYzxtLzOkq0prtspCPvkirYkmA==} + peerDependencies: + typescript: '>=5.2' + yjs: '>=13.5.37' + peerDependenciesMeta: + typescript: + optional: true + + '@libsql/client@0.14.0': + resolution: {integrity: sha512-/9HEKfn6fwXB5aTEEoMeFh4CtG0ZzbncBb1e++OCdVpgKZ/xyMsIVYXm0w7Pv4RUel803vE6LwniB3PqD72R0Q==} + + '@libsql/core@0.14.0': + resolution: {integrity: sha512-nhbuXf7GP3PSZgdCY2Ecj8vz187ptHlZQ0VRc751oB2C1W8jQUXKKklvt7t1LJiUTQBVJuadF628eUk+3cRi4Q==} + + '@libsql/darwin-arm64@0.4.7': + resolution: {integrity: sha512-yOL742IfWUlUevnI5PdnIT4fryY3LYTdLm56bnY0wXBw7dhFcnjuA7jrH3oSVz2mjZTHujxoITgAE7V6Z+eAbg==} + cpu: [arm64] + os: [darwin] + + '@libsql/darwin-x64@0.4.7': + resolution: {integrity: sha512-ezc7V75+eoyyH07BO9tIyJdqXXcRfZMbKcLCeF8+qWK5nP8wWuMcfOVywecsXGRbT99zc5eNra4NEx6z5PkSsA==} + cpu: [x64] + os: [darwin] + + '@libsql/hrana-client@0.7.0': + resolution: {integrity: sha512-OF8fFQSkbL7vJY9rfuegK1R7sPgQ6kFMkDamiEccNUvieQ+3urzfDFI616oPl8V7T9zRmnTkSjMOImYCAVRVuw==} + + '@libsql/isomorphic-fetch@0.3.1': + resolution: {integrity: sha512-6kK3SUK5Uu56zPq/Las620n5aS9xJq+jMBcNSOmjhNf/MUvdyji4vrMTqD7ptY7/4/CAVEAYDeotUz60LNQHtw==} + engines: {node: '>=18.0.0'} + + '@libsql/isomorphic-ws@0.1.5': + resolution: {integrity: sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==} + + '@libsql/linux-arm64-gnu@0.4.7': + resolution: {integrity: sha512-WlX2VYB5diM4kFfNaYcyhw5y+UJAI3xcMkEUJZPtRDEIu85SsSFrQ+gvoKfcVh76B//ztSeEX2wl9yrjF7BBCA==} + cpu: [arm64] + os: [linux] + + '@libsql/linux-arm64-musl@0.4.7': + resolution: {integrity: sha512-6kK9xAArVRlTCpWeqnNMCoXW1pe7WITI378n4NpvU5EJ0Ok3aNTIC2nRPRjhro90QcnmLL1jPcrVwO4WD1U0xw==} + cpu: [arm64] + os: [linux] + + '@libsql/linux-x64-gnu@0.4.7': + resolution: {integrity: sha512-CMnNRCmlWQqqzlTw6NeaZXzLWI8bydaXDke63JTUCvu8R+fj/ENsLrVBtPDlxQ0wGsYdXGlrUCH8Qi9gJep0yQ==} + cpu: [x64] + os: [linux] + + '@libsql/linux-x64-musl@0.4.7': + resolution: {integrity: sha512-nI6tpS1t6WzGAt1Kx1n1HsvtBbZ+jHn0m7ogNNT6pQHZQj7AFFTIMeDQw/i/Nt5H38np1GVRNsFe99eSIMs9XA==} + cpu: [x64] + os: [linux] + + '@libsql/win32-x64-msvc@0.4.7': + resolution: {integrity: sha512-7pJzOWzPm6oJUxml+PCDRzYQ4A1hTMHAciTAHfFK4fkbDZX33nWPVG7Y3vqdKtslcwAzwmrNDc6sXy2nwWnbiw==} + cpu: [x64] + os: [win32] + '@monaco-editor/loader@1.7.0': resolution: {integrity: sha512-gIwR1HrJrrx+vfyOhYmCZ0/JcWqG5kbfG7+d3f/C1LXk2EvzAbHSg3MQ5lO2sMlo9izoAZ04shohfKLVT6crVA==} @@ -408,127 +1075,304 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@neon-rs/load@0.0.4': + resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} + '@next/env@16.4.0': resolution: {integrity: sha512-pyLlT5oafGlX8X7xjgGNXz5dNIDSxREm+qD6i9VLSZiZFopA/XWl8NM/KPmLx/8EG/++c49iid3gNWSQW1+2dQ==} '@oxc-project/types@0.153.0': resolution: {integrity: sha512-jSNrRIyvPVLL5E1z/tS5zLAprosGz/FuI1PWwEOz59j3E4TTTzSpqKb/RDGqJhhW0QHYISGXxq582wGx6T11Tw==} - '@payloadcms/graphql@4.0.0-canary.39': - resolution: {integrity: sha512-p6nOeauC0bOCAKrFKuKfE/8DmOgic0TCYrnk8vGXzolIKj/O6346UlTAn2b3vnEPnueWCC96plEKamnmfPHHdQ==} - hasBin: true - peerDependencies: - graphql: ^16.8.1 - payload: 4.0.0-canary.39 - - '@payloadcms/translations@4.0.0-canary.39': - resolution: {integrity: sha512-EsOgjLlO9/ggqf0gPjtb0rdviT0TZF1NhWyA+FNiRmzxc7Icnb+OU4bWUtCUxnSOZvIt7yon6u1HpfAfwtvRKQ==} - - '@payloadcms/ui@4.0.0-canary.39': - resolution: {integrity: sha512-MIh9GQdwvzk/xjaXFtC9QSuDpExREBfUqNc1L3vcKPWD1ezQL2r7JefiD9cLVF8ODQUMOWUGz7kHQ7qERsG3Vw==} - engines: {node: '>=24.15.0'} - peerDependencies: - payload: 4.0.0-canary.39 - react: ^19.0.1 || ^19.1.2 || ^19.2.1 - react-dom: ^19.0.1 || ^19.1.2 || ^19.2.1 - - '@pinojs/redact@0.4.0': - resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} - - '@remix-run/route-pattern@0.22.1': - resolution: {integrity: sha512-czdGJWh09Lapvcqt7Vb09KlrU2PhRJ8xQaI+AItTuD9aDJ5MAgxnS38lnys6Ll+6RJEqPiaUqTwIQhVLwFvv+w==} - - '@rolldown/binding-android-arm-eabi@1.2.13': - resolution: {integrity: sha512-Vu/NICrgdRvUOeaJZIyB2FP63s6fO/4ud5l8dXmxDx9yDyn+mN0y+gsvsVviSli+T361Aqo0h46EuMoobrwawA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [android] - - '@rolldown/binding-android-arm64@1.2.13': - resolution: {integrity: sha512-6LEoIrGy5vvCd2boNnv2soPSUZj/PRvhp8R/t9KlX+mIZxThIE/ZqxrGXxmuNX0FuvQFvLdZr7S4HrYpYBVhEQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@parcel/watcher-android-arm64@2.6.0': + resolution: {integrity: sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==} + engines: {node: '>= 10.0.0'} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.2.13': - resolution: {integrity: sha512-CaJSRzlQ6Q+zkDMVA9OkVxBjVoPRCDEE3v0FSJ9kIQBgRjFApA3Si4ijhbNVUji7ZJt+PfO0e46qy4nPInHUPA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@parcel/watcher-darwin-arm64@2.6.0': + resolution: {integrity: sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==} + engines: {node: '>= 10.0.0'} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.2.13': - resolution: {integrity: sha512-e4r340I5hxSzJkD3YJBxgzq/rJ3wwxwdLLb2FPt1Zpyem20nrQPT11DDEEkazwxaHumH8wpglsp/Ozgj/wT6mw==} - engines: {node: ^20.19.0 || >=22.12.0} + '@parcel/watcher-darwin-x64@2.6.0': + resolution: {integrity: sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.2.13': - resolution: {integrity: sha512-hoBWDZ4/K/mJKVMbsgUd1jfpA2DiOrJ54mpegObU9TBHBBrtX4FLIXJJQRDPZ/2Dn91GvPob+Z2hwKJzf4E5SQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@parcel/watcher-freebsd-x64@2.6.0': + resolution: {integrity: sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.2.13': - resolution: {integrity: sha512-oF9fZu3vTWnTiVAkDFxU9PJLt1nh20K9RRpuHsR7ZnE2L7XookBbDBVLojCVSLGbvtSlxeUNnjAj6DbNsKyzbg==} - engines: {node: ^20.19.0 || >=22.12.0} + '@parcel/watcher-linux-arm-glibc@2.6.0': + resolution: {integrity: sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==} + engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - - '@rolldown/binding-linux-arm64-gnu@1.2.13': - resolution: {integrity: sha512-DTpb/+jMiqWMPgphn4ksW1zW+XLJ6dJJ9FMvnIk9I291LhCctMPhMYJrP5t9p6C9qa3KXadDdUEZHBaPh3kNxQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.2.13': - resolution: {integrity: sha512-xU+Kvv9N2A3SY35zFh1FWWNjxbadE/BKeqnkXe7vScU4GZsw757BlVmDLITZEq8DPpk6m7uoDYkK7P+x/uU5Ow==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] + '@parcel/watcher-linux-arm-musl@2.6.0': + resolution: {integrity: sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==} + engines: {node: '>= 10.0.0'} + cpu: [arm] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.2.13': - resolution: {integrity: sha512-XMk/hnhh25oQ756Lclb1Q11h4ll0xC0Esa5w4Vzp+mAE2S3AGJgeM0SonrIgY8fHhjarb6hcoTuwoFG0VVP2ig==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] + '@parcel/watcher-linux-arm64-glibc@2.6.0': + resolution: {integrity: sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.2.13': - resolution: {integrity: sha512-U1BoTHYmlywE2n3HUWjzZ+8EQsKr+OwpxYuDWaubx42tUL8QSL7nOqRz/NVHanibbFP3M1Rxuprz/wNcbMKjqw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] + '@parcel/watcher-linux-arm64-musl@2.6.0': + resolution: {integrity: sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] os: [linux] - libc: [glibc] + libc: [musl] - '@rolldown/binding-linux-x64-gnu@1.2.13': - resolution: {integrity: sha512-J4cm80Pc6wEwV5AZ42o62sIQgDk+Y7R2s646jIwuvO+4V46QB58N4vVuMPWCBaNgursXLpmUWJV//WQAkPvHBQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@parcel/watcher-linux-x64-glibc@2.6.0': + resolution: {integrity: sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.2.13': - resolution: {integrity: sha512-W0euZS40U4V6JkmEnVCIX9mcsL6cbXQ4X8c2w+MMOIjFg68TXUW+u3RT+2e1t1pv9mg/EP3pDtK3POXdQ7Rxyw==} - engines: {node: ^20.19.0 || >=22.12.0} + '@parcel/watcher-linux-x64-musl@2.6.0': + resolution: {integrity: sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.2.13': - resolution: {integrity: sha512-do/AF/4n9MRshia3a5aXoy8xM2c6mgfT6D7H/dY6my5z+hfCIR4ab7mk4IRj++nsEQpKy39kd0DQnDq+r692tw==} - engines: {node: ^20.19.0 || >=22.12.0} + '@parcel/watcher-win32-arm64@2.6.0': + resolution: {integrity: sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==} + engines: {node: '>= 10.0.0'} cpu: [arm64] - os: [openharmony] + os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.2.13': - resolution: {integrity: sha512-6FtUf2cJZobutJdxnGYX8z0vtbgqU0b2v8vfBhkXb9wp2MppMFtkunE+IaOntyi01rkIQoPW2GHABtfzsC0BRQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] + '@parcel/watcher-win32-x64@2.6.0': + resolution: {integrity: sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.2.13': + '@parcel/watcher@2.6.0': + resolution: {integrity: sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==} + engines: {node: '>= 10.0.0'} + + '@payloadcms/db-sqlite@4.0.0-canary.39': + resolution: {integrity: sha512-W5B8vunsJvyxX3sFSzARQW8NDm81Of3T9oklTCMjjYyVsxJfWpXSUgZc8qs59eAYmbMkx1uoNds79da9V9JkzA==} + peerDependencies: + payload: 4.0.0-canary.39 + + '@payloadcms/drizzle@4.0.0-canary.39': + resolution: {integrity: sha512-WmdyzSzfJpEFt5/cR+VLiXDQs8bVBeHclwYYQQ9boM4dwg7NCvpLH7Pe0r+X5u6lsCi0T2zRVlfH+c/qMOGJfw==} + peerDependencies: + payload: 4.0.0-canary.39 + + '@payloadcms/graphql@4.0.0-canary.39': + resolution: {integrity: sha512-p6nOeauC0bOCAKrFKuKfE/8DmOgic0TCYrnk8vGXzolIKj/O6346UlTAn2b3vnEPnueWCC96plEKamnmfPHHdQ==} + hasBin: true + peerDependencies: + graphql: ^16.8.1 + payload: 4.0.0-canary.39 + + '@payloadcms/live-preview-react@4.0.0-canary.39': + resolution: {integrity: sha512-CiJ7vGcslNLBu5QunROls7vMbjGcgNuVrWOHoaHHWQAxtK43YBFHIsFwAG7RSfD1SFWar5toVQD3RBOBTxnuCQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.1 || ^19.1.2 || ^19.2.1 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.1 || ^19.1.2 || ^19.2.1 + + '@payloadcms/live-preview@4.0.0-canary.39': + resolution: {integrity: sha512-NQVd3QjvOp4F/m0v4+C5sq6IQGFccnLntGoDrTFB3k/gHXXydSB5PbMzHGGftFUtD32fL3KTvq8spdpHo9jppg==} + + '@payloadcms/richtext-lexical@4.0.0-canary.39': + resolution: {integrity: sha512-HxJKOKKuNE8XpjX7rZVsJa9q5Yj2cJ0Ce4eEu6wmausabZS46Mb8zaKuZVjRyymIywM6ZSz5bBalilhBNve5EQ==} + engines: {node: '>=24.15.0'} + peerDependencies: + '@faceless-ui/modal': 3.0.2 + '@faceless-ui/scroll-info': 2.0.0 + payload: 4.0.0-canary.39 + react: ^19.0.1 || ^19.1.2 || ^19.2.1 + react-dom: ^19.0.1 || ^19.1.2 || ^19.2.1 + + '@payloadcms/translations@4.0.0-canary.39': + resolution: {integrity: sha512-EsOgjLlO9/ggqf0gPjtb0rdviT0TZF1NhWyA+FNiRmzxc7Icnb+OU4bWUtCUxnSOZvIt7yon6u1HpfAfwtvRKQ==} + + '@payloadcms/ui@4.0.0-canary.39': + resolution: {integrity: sha512-MIh9GQdwvzk/xjaXFtC9QSuDpExREBfUqNc1L3vcKPWD1ezQL2r7JefiD9cLVF8ODQUMOWUGz7kHQ7qERsG3Vw==} + engines: {node: '>=24.15.0'} + peerDependencies: + payload: 4.0.0-canary.39 + react: ^19.0.1 || ^19.1.2 || ^19.2.1 + react-dom: ^19.0.1 || ^19.1.2 || ^19.2.1 + + '@pinojs/redact@0.4.0': + resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} + + '@playwright/test@1.64.0': + resolution: {integrity: sha512-oTN9FNYuN6bqQMwiho6jJKLCG2/QOYCixGXuCjRmzOq23eODeukuY2XiAVoVpAECbuezMt1MHQjAiQxK8F+Y+g==} + engines: {node: '>=20'} + hasBin: true + + '@preact/signals-core@1.14.4': + resolution: {integrity: sha512-HNB6HYeYKhQbJ1aKl+YRjrS4+QWHLKX6qKoUsfS/m0vqzsVaEBiZiaKbG/e+NKk2ch5ALQr/ihWaMHxiCuuWHA==} + + '@react-router/dev@8.4.0': + resolution: {integrity: sha512-GKznpn6h8c52xGXwtsypD5ZwNiWFSeqoKPdyGq7SfG+T9rFjGO8F0i/R/yECfZqHXaNz1NVmpODuBamBy9FfMg==} + engines: {node: '>=22.22.0'} + hasBin: true + peerDependencies: + '@react-router/serve': ^8.4.0 + '@vitejs/plugin-rsc': ~0.5.26 + react-router: ^8.4.0 + react-server-dom-webpack: ^19.2.7 + typescript: ^5.1.0 || ^6.0.0 || ^7.0.0 + vite: ^7.0.0 || ^8.0.0 + wrangler: ^4.0.0 + peerDependenciesMeta: + '@react-router/serve': + optional: true + '@vitejs/plugin-rsc': + optional: true + react-server-dom-webpack: + optional: true + typescript: + optional: true + wrangler: + optional: true + + '@react-router/express@8.4.0': + resolution: {integrity: sha512-JPujWEE0LZuwuuBoZwXwYDZSrqft63GU1c0XZ1JOGQPqmR8/nrzvBU/UgPCFHAuPsfRk79ebxljmlri+4sGR+w==} + engines: {node: '>=22.22.0'} + peerDependencies: + express: ^4.22.2 || ^5 + react-router: 8.4.0 + typescript: ^5.1.0 || ^6.0.0 || ^7.0.0 + peerDependenciesMeta: + typescript: + optional: true + + '@react-router/node@8.4.0': + resolution: {integrity: sha512-1teZHtk7XDm1pteQ2Plgtvtjjup5C5sIwFlOMYVIyoOH7X3bId3Qb//kUdbydX6NRIxcGK28UnfZlz4SrD/mkg==} + engines: {node: '>=22.22.0'} + peerDependencies: + react-router: 8.4.0 + typescript: ^5.1.0 || ^6.0.0 || ^7.0.0 + peerDependenciesMeta: + typescript: + optional: true + + '@react-router/serve@8.4.0': + resolution: {integrity: sha512-R2i5hed/7wwPxARQxSNM99rFnjy6bCigu8vUVyghaB6Si1VdUAjz7u7zhyBQ/T+8fdPHXIZ9SMV4rPmguD0nEw==} + engines: {node: '>=22.22.0'} + hasBin: true + peerDependencies: + react-router: 8.4.0 + + '@remix-run/node-fetch-server@0.14.2': + resolution: {integrity: sha512-1cpM/f5i1ka/9CUMBwZXZp7Bn92x8VQjzg+F4eEe88DlVdNHkAKrf/vvbZoYgdkfy2bWHtGC6LQGLmojEqOF4Q==} + + '@remix-run/route-pattern@0.22.1': + resolution: {integrity: sha512-czdGJWh09Lapvcqt7Vb09KlrU2PhRJ8xQaI+AItTuD9aDJ5MAgxnS38lnys6Ll+6RJEqPiaUqTwIQhVLwFvv+w==} + + '@rolldown/binding-android-arm-eabi@1.2.13': + resolution: {integrity: sha512-Vu/NICrgdRvUOeaJZIyB2FP63s6fO/4ud5l8dXmxDx9yDyn+mN0y+gsvsVviSli+T361Aqo0h46EuMoobrwawA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@rolldown/binding-android-arm64@1.2.13': + resolution: {integrity: sha512-6LEoIrGy5vvCd2boNnv2soPSUZj/PRvhp8R/t9KlX+mIZxThIE/ZqxrGXxmuNX0FuvQFvLdZr7S4HrYpYBVhEQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.2.13': + resolution: {integrity: sha512-CaJSRzlQ6Q+zkDMVA9OkVxBjVoPRCDEE3v0FSJ9kIQBgRjFApA3Si4ijhbNVUji7ZJt+PfO0e46qy4nPInHUPA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.2.13': + resolution: {integrity: sha512-e4r340I5hxSzJkD3YJBxgzq/rJ3wwxwdLLb2FPt1Zpyem20nrQPT11DDEEkazwxaHumH8wpglsp/Ozgj/wT6mw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.2.13': + resolution: {integrity: sha512-hoBWDZ4/K/mJKVMbsgUd1jfpA2DiOrJ54mpegObU9TBHBBrtX4FLIXJJQRDPZ/2Dn91GvPob+Z2hwKJzf4E5SQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.2.13': + resolution: {integrity: sha512-oF9fZu3vTWnTiVAkDFxU9PJLt1nh20K9RRpuHsR7ZnE2L7XookBbDBVLojCVSLGbvtSlxeUNnjAj6DbNsKyzbg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.2.13': + resolution: {integrity: sha512-DTpb/+jMiqWMPgphn4ksW1zW+XLJ6dJJ9FMvnIk9I291LhCctMPhMYJrP5t9p6C9qa3KXadDdUEZHBaPh3kNxQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.2.13': + resolution: {integrity: sha512-xU+Kvv9N2A3SY35zFh1FWWNjxbadE/BKeqnkXe7vScU4GZsw757BlVmDLITZEq8DPpk6m7uoDYkK7P+x/uU5Ow==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.2.13': + resolution: {integrity: sha512-XMk/hnhh25oQ756Lclb1Q11h4ll0xC0Esa5w4Vzp+mAE2S3AGJgeM0SonrIgY8fHhjarb6hcoTuwoFG0VVP2ig==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.2.13': + resolution: {integrity: sha512-U1BoTHYmlywE2n3HUWjzZ+8EQsKr+OwpxYuDWaubx42tUL8QSL7nOqRz/NVHanibbFP3M1Rxuprz/wNcbMKjqw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.2.13': + resolution: {integrity: sha512-J4cm80Pc6wEwV5AZ42o62sIQgDk+Y7R2s646jIwuvO+4V46QB58N4vVuMPWCBaNgursXLpmUWJV//WQAkPvHBQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.2.13': + resolution: {integrity: sha512-W0euZS40U4V6JkmEnVCIX9mcsL6cbXQ4X8c2w+MMOIjFg68TXUW+u3RT+2e1t1pv9mg/EP3pDtK3POXdQ7Rxyw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.2.13': + resolution: {integrity: sha512-do/AF/4n9MRshia3a5aXoy8xM2c6mgfT6D7H/dY6my5z+hfCIR4ab7mk4IRj++nsEQpKy39kd0DQnDq+r692tw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-win32-arm64-msvc@1.2.13': + resolution: {integrity: sha512-6FtUf2cJZobutJdxnGYX8z0vtbgqU0b2v8vfBhkXb9wp2MppMFtkunE+IaOntyi01rkIQoPW2GHABtfzsC0BRQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.2.13': resolution: {integrity: sha512-UKhFaZTeTcbKrb3iU82m17jVcPEAoqDkCN5MBqgPyZSwp/cQmib21crTS0DdH7T1B7wZRWEI89YQAOJMet5yhg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] @@ -553,15 +1397,30 @@ packages: '@types/busboy@1.5.4': resolution: {integrity: sha512-kG7WrUuAKK0NoyxfQHsVE6j1m01s6kMma64E+OZenQABMQyTJop1DumUWcLwAQ2JzpefU7PDYoRDKl8uZosFjw==} + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} + + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/hast@3.0.5': + resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} '@types/lodash@4.17.25': resolution: {integrity: sha512-+K1NIO8I+F9/wNulfVvu23QYd0Pe9/OCqRrim4NoYIf1VoEDL90Ve4ClzpyqBLc7NpGGWRvYNCKZ1BE/Jpf8dQ==} + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/node@24.19.1': resolution: {integrity: sha512-aS3/DG0oM05K0RIXXP+hKjinGG5IgSSVGzswZxW3O0sS3pH4/fycXundUC9XsszgKCk4gHXylTEK6hyFxVxnoQ==} @@ -584,6 +1443,34 @@ packages: '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/whatwg-mimetype@3.0.2': + resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==} + + '@types/ws@8.18.2': + resolution: {integrity: sha512-67MQl+fpWKVTT1NYdnmo3U4sc/xPo/zQBncVnI74qmQa0z/b+1g6iYqNmGCPbxO+zz2aklb08a0oHfegiVd0/w==} + + '@vitejs/plugin-react@6.1.2': + resolution: {integrity: sha512-fhJNGUdscQa4HkI0xFxwonWyhnVReCPDbXI7FH7jmzpnVCrFQI7PRrhWecO263610vOrs9tr2Y4xcf8uAdFxbw==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0 + babel-plugin-react-compiler: ^1.0.0 + oxc-transform-react: ^0.152.0 + vite: ^8.0.0 + peerDependenciesMeta: + '@rolldown/plugin-babel': + optional: true + babel-plugin-react-compiler: + optional: true + oxc-transform-react: + optional: true + '@vitejs/plugin-rsc@0.5.35': resolution: {integrity: sha512-OZtJ57o5luSeNb2lqi3xeHHF41W8jCgm4nGb/1qmKjLb5gk/szIHS0Wxfo82WWQkKIqBBu6M697ohKWXrP0qqg==} peerDependencies: @@ -595,6 +1482,91 @@ packages: react-server-dom-webpack: optional: true + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} + + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} + + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + + acorn-loose@8.5.2: + resolution: {integrity: sha512-PPvV6g8UGMGgjrMu+n/f9E/tCSkNQ2Y97eFvuVdJfG11+xdIeDcLyNdC8SHcrHbRqkfwLASdplyR6B6sKM1U4A==} + engines: {node: '>=0.4.0'} + + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.19.0: + resolution: {integrity: sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -602,27 +1574,93 @@ packages: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} + babel-dead-code-elimination@1.0.12: + resolution: {integrity: sha512-GERT7L2TiYcYDtYk1IpD+ASAYXjKbLTDPhBtYj7X1NuRMDTMtAx9kyBenub1Ev41lo91OHCKdmP+egTDmfQ7Ig==} + babel-plugin-macros@3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} + baseline-browser-mapping@2.11.28: + resolution: {integrity: sha512-br0LOmjJqr6Rt4AEkadbcNf67Zpo7EPwKsWbjnRrJIa1QYFHQBqM4C7F2WTbV8ahTEcg1Eo+Y0aWjjORInYFyA==} + engines: {node: '>=6.0.0'} + hasBin: true + + basic-auth@2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} + + body-parser@2.3.0: + resolution: {integrity: sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==} + engines: {node: '>=18'} + body-scroll-lock@4.0.0-beta.0: resolution: {integrity: sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==} + browserslist@4.29.3: + resolution: {integrity: sha512-1R4kiYKXGViqEN0CnoDrXc1StD9niAwu+j2dukWzrD4bJgsD4lDmEp0CRbc6E/vYJIfTHwPmwyaKtVSudICdPA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bson-objectid@2.0.4: resolution: {integrity: sha512-vgnKAUzcDoa+AeyYwXCoHyF2q6u/8H46dxu5JN+4/TZeq/Dlinn0K6GvxsCLb3LHUJl0m/TLiEK31kUwtgocMQ==} + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-image-size@0.6.4: + resolution: {integrity: sha512-nEh+kZOPY1w+gcCMobZ6ETUp9WfibndnosbpwB1iJk/8Gt5ZF2bhS6+B6bPYz424KtwsR6Rflc3tCz1/ghX2dQ==} + engines: {node: '>=4.0'} + busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + caniuse-lite@1.0.30001815: + resolution: {integrity: sha512-uDybUEyfgbyJJ93J1vikTylBX31AkdVYeVPeffMQpf8XN7hSfr0oZOn4VFOIMNvtU5+rHvC5Udg2TgtJKHm23Q==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + charenc@0.0.2: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + ci-info@4.4.0: resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} engines: {node: '>=8'} @@ -634,19 +1672,59 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + colorjs.io@0.7.1: + resolution: {integrity: sha512-LY7OHnJZxHwT5UlzNa9bbhHHDbzB6yE5+3MIPwJEQKRvSCt/T4G7epsj+9j2BExUIIfXFIJGsIXUKdfrK9Q5tA==} + commander@15.0.0: resolution: {integrity: sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==} engines: {node: '>=22.12.0'} + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.8.2: + resolution: {integrity: sha512-o8vI5RE5A6EVVOd9o41jKp41aJom+QTEO/Bx8MYNjexMo/Bv2WOjUfZr+aL0WnYSgymUy6zeguqLTsIhV0gMvQ==} + engines: {node: '>= 0.8.0'} + + confbox@0.3.1: + resolution: {integrity: sha512-cKUSoKa8YxFZZSmraVi7onONx3amu77ngK3kGpsYHDH7drPwCRkQE1RYMPlLRrMtnciRj274XNRxcHxnKmDSnA==} + console-table-printer@2.15.0: resolution: {integrity: sha512-SrhBq4hYVjLCkBVOWaTzceJalvn5K1Zq5aQA6wXC/cYjI3frKWNPEMK3sZsJfNNQApvCQmgBcc13ZKmFj8qExw==} + content-disposition@1.1.0: + resolution: {integrity: sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==} + engines: {node: '>=18'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + content-type@2.1.0: + resolution: {integrity: sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==} + engines: {node: '>=18'} + convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie-es@3.1.1: resolution: {integrity: sha512-UaXxwISYJPTr9hwQxMFYZ7kNhSXboMXP+Z3TRX6f1/NyaGPfuNUZOWP1pUEb75B2HjfklIYLVRfWiFZJyC6Npg==} + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} @@ -661,6 +1739,10 @@ packages: 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'} + dataloader@2.2.3: resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==} @@ -670,8 +1752,16 @@ packages: dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -679,18 +1769,44 @@ packages: supports-color: optional: true + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + + dedent@1.7.2: + resolution: {integrity: sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-libc@2.0.2: + resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + engines: {node: '>=8'} + detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} @@ -705,12 +1821,134 @@ packages: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} + drizzle-kit@0.31.7: + resolution: {integrity: sha512-hOzRGSdyKIU4FcTSFYGKdXEjFsncVwHZ43gY3WU5Bz9j5Iadp6Rh6hxLSQ1IWXpKLBKt/d5y1cpSPcV+FcoQ1A==} + hasBin: true + + drizzle-orm@0.45.2: + resolution: {integrity: sha512-kY0BSaTNYWnoDMVoyY8uxmyHjpJW1geOmBMdSSicKo9CIIWkSxMIj2rkeSR51b8KAPB7m+qysjuHme5nKP+E5Q==} + peerDependencies: + '@aws-sdk/client-rds-data': '>=3' + '@cloudflare/workers-types': '>=4' + '@electric-sql/pglite': '>=0.2.0' + '@libsql/client': '>=0.10.0' + '@libsql/client-wasm': '>=0.10.0' + '@neondatabase/serverless': '>=0.10.0' + '@op-engineering/op-sqlite': '>=2' + '@opentelemetry/api': ^1.4.1 + '@planetscale/database': '>=1.13' + '@prisma/client': '*' + '@tidbcloud/serverless': '*' + '@types/better-sqlite3': '*' + '@types/pg': '*' + '@types/sql.js': '*' + '@upstash/redis': '>=1.34.7' + '@vercel/postgres': '>=0.8.0' + '@xata.io/client': '*' + better-sqlite3: '>=7' + bun-types: '*' + expo-sqlite: '>=14.0.0' + gel: '>=2' + knex: '*' + kysely: '*' + mysql2: '>=2' + pg: '>=8' + postgres: '>=3' + prisma: '*' + sql.js: '>=1' + sqlite3: '>=5' + peerDependenciesMeta: + '@aws-sdk/client-rds-data': + optional: true + '@cloudflare/workers-types': + optional: true + '@electric-sql/pglite': + optional: true + '@libsql/client': + optional: true + '@libsql/client-wasm': + optional: true + '@neondatabase/serverless': + optional: true + '@op-engineering/op-sqlite': + optional: true + '@opentelemetry/api': + optional: true + '@planetscale/database': + optional: true + '@prisma/client': + optional: true + '@tidbcloud/serverless': + optional: true + '@types/better-sqlite3': + optional: true + '@types/pg': + optional: true + '@types/sql.js': + optional: true + '@upstash/redis': + optional: true + '@vercel/postgres': + optional: true + '@xata.io/client': + optional: true + better-sqlite3: + optional: true + bun-types: + optional: true + expo-sqlite: + optional: true + gel: + optional: true + knex: + optional: true + kysely: + optional: true + mysql2: + optional: true + pg: + optional: true + postgres: + optional: true + prisma: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.5.452: + resolution: {integrity: sha512-cVvk1YBSj6571VmV6hdJTqj94Y79xSu8cj6Y9t6ae4Y4431z8/7EJFvu3rVp90xhfuv9BpPKUmaLfTo4+FOGBg==} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + enhanced-resolve@5.26.0: + resolution: {integrity: sha512-9vhedylFonb2YGogzUKX6+Ja72gOJbN1QHAqdrvqLwhdl/QWbKopzoUC9EbQNVsAns/bx/4uyqalrQAoy1IByw==} + engines: {node: '>=10.13.0'} + + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} @@ -718,24 +1956,81 @@ packages: es-module-lexer@2.3.2: resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==} + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} + engines: {node: '>= 0.4'} + + esbuild-register@3.6.0: + resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} + peerDependencies: + esbuild: '>=0.12 <1' + + esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.28.2: resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==} engines: {node: '>=18'} hasBin: true + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + + estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + exit-hook@5.1.0: + resolution: {integrity: sha512-INjr2xyxHo7bhAqf5ong++GZPPnpcuBcaXUKt03yf7Fie9yWD7FapL4teOU0+awQazGs5ucBh7xWs/AD+6nhog==} + engines: {node: '>=20'} + + express@5.2.1: + resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} + engines: {node: '>= 18'} + + exsolve@1.1.3: + resolution: {integrity: sha512-kuzL9zherLQoqDeQaS55AiiIg1kb4KYXaSusTtgZTPlvKP2gGCI82LNmBNh5RjDVUXIcmgx+/Mx7vPwRzBbhJA==} + fast-copy@4.1.2: resolution: {integrity: sha512-DUHggaYcouhy5I1LacDJ+JDSqGlumVJP2EAi5Nwt1pWPeLpSvIjkrY+x4fsoI1/+GlTyq+DM9zdgWCFSfqNODA==} + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fast-uri@3.1.8: + resolution: {integrity: sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==} + fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -745,16 +2040,36 @@ packages: picomatch: optional: true + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + file-type@22.0.1: resolution: {integrity: sha512-ww5Mhre0EE+jmBvOXTmXAbEMuZE7uX4a3+oRCQFNj8w++g3ev913N6tXQz0XTXbueQ5TWQfm6BdaViEHHn8bhA==} engines: {node: '>=22'} + finalhandler@2.1.1: + resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} + engines: {node: '>= 18.0.0'} + find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} focus-trap@7.5.4: resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -763,9 +2078,28 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + get-tsconfig@4.14.0: resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graphql-http@1.22.4: resolution: {integrity: sha512-OC3ucK988teMf+Ak/O+ZJ0N2ukcgrEurypp8ePyJFWq83VzwRAmHxxr+XxrMpxO/FIwI4a7m/Fzv3tWGJv0wPA==} engines: {node: '>=12'} @@ -782,6 +2116,18 @@ packages: resolution: {integrity: sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + happy-dom@20.14.6: + resolution: {integrity: sha512-5DDsf4QmEIlRL6NkCv/fxSjYHHkZceL/IaYQdJc2h3G7DRTEai++VTjbfL0LB9geW2VrA3+vrjF3Efx+OTtX0Q==} + engines: {node: '>=20.0.0'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + hasown@2.0.4: resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} @@ -792,6 +2138,14 @@ packages: hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} + engines: {node: '>= 0.8'} + + iconv-lite@0.7.3: + resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -800,14 +2154,30 @@ packages: engines: {node: '>=18'} hasBin: true + immutable@5.1.9: + resolution: {integrity: sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==} + import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + ipaddr.js@2.3.0: resolution: {integrity: sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==} engines: {node: '>= 10'} + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -818,6 +2188,9 @@ packages: resolution: {integrity: sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==} engines: {node: '>= 0.4'} + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -826,6 +2199,23 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + + isbot@5.2.2: + resolution: {integrity: sha512-iQcBXcd+Rv/pkubRyGh2utW2j1oPG5hZY6TUhVPpqK4G+o3IbxpJNx04hgksjc/N7GK5pEorUxDeg31cFgEk/w==} + engines: {node: '>=18'} + + isomorphic.js@0.2.5: + resolution: {integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + jose@6.2.12: resolution: {integrity: sha512-9NiFmJEex0sy2Dk58j2UGBSHgUs2ypF9eZSu4L6vjOX3Dp96Sw1F3uL+H+D1sx02jZZdzUT0HgvCy59CuvXcWw==} @@ -833,6 +2223,9 @@ packages: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} + js-base64@3.9.4: + resolution: {integrity: sha512-PtOMXpEGuP0RRiRXsjzHzl44dMHxSu2CPvAhinupR1tBa88me+1DPqsobl7eupn5UukjLkln1ZnAOAOXOrYG0Q==} + js-tokens@10.0.0: resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} @@ -856,6 +2249,40 @@ packages: engines: {node: '>=16.0.0'} hasBin: true + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsox@1.2.125: + resolution: {integrity: sha512-HIf1uwublnXZsy7p3yHTrhzMzrLO6xKnqXytT9pEil5QxaXi8eyer7Is4luF5hYSV4kD3v03Y32FWoAeVYTghQ==} + hasBin: true + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + lexical@0.52.0: + resolution: {integrity: sha512-mePejqwCDaW0GR89IoofJTTlk/EiwwlGhbs1D8qOx/Iw6ieG5D3nh7PSPLv0Csia0UC58HpuV91DilJjqeAWSw==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + lib0@0.2.119: + resolution: {integrity: sha512-vh+TiejVy8Xm+hCdnRfn9BthGNvNUZdEXltNjVZL3TzRIKP3s1lnQh8pWd/Q0wCgY0FPAGVVjFF4ZiHUV3LFgA==} + engines: {node: '>=16'} + hasBin: true + + libsql@0.4.7: + resolution: {integrity: sha512-T9eIRCs6b0J1SHKYIvD8+KCJMcWZ900iZyxdnSCdqxN12Z1ijzT+jY5nrk72Jw4B0HGzms2NgpryArlJqvc3Lw==} + cpu: [x64, arm64, wasm32] + os: [darwin, linux, win32] + lightningcss-android-arm64@1.33.0: resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} engines: {node: '>= 12.0.0'} @@ -936,10 +2363,16 @@ packages: lodash@4.18.1: resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + magic-string@1.4.3: resolution: {integrity: sha512-z12OxmaPGE0F4xlpGdjuAUckipLpQlTAuAmyGhNoD7ODpYUzvDfvtxUbjM/jwznyP178oju/KDdyi220wNJ0RQ==} @@ -948,18 +2381,193 @@ packages: engines: {node: '>= 18'} hasBin: true + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + md5@2.3.0: resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + mdast-util-from-markdown@2.0.3: + resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} + + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-markdown@2.2.0: + resolution: {integrity: sha512-2Jn/ADrHFFyyniBMi0bncTbJqU78K3/TEYvzvwrWWzD9MYPUa/Gm4r3nOeKFQg/PDM5BsbDYdc8ackW4NTY6NA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + media-typer@1.1.1: + resolution: {integrity: sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==} + engines: {node: '>= 0.8'} + memoize-one@6.0.0: resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + micromark-core-commonmark@2.0.4: + resolution: {integrity: sha512-wxEeE8v8XVvOrxn1TZj74qYhAtTQsSqufHVS3uNVyT1MupXxhyaHk8/9xDNPh9BmL77QNDgWTkZ3RsYHB2ry7w==} + + micromark-extension-mdx-jsx@3.0.2: + resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-mdx-expression@2.0.3: + resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} + + micromark-factory-space@2.1.0: + resolution: {integrity: sha512-fS8hnLIjnjvdQIj39Geug8wWsR0HrYZ43KShKxNfwT7t2LOHo/LbWZEzEaSOjwtjdCsjoE6syHhonEzW0zv0+Q==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-edit-map@1.0.0: + resolution: {integrity: sha512-Pa2ljlsEL6sVwFaYeyrOLSYbQt73JvGbPOYFq+9AElXiSnfI5Q4465RRZ1sHv7lDjDOnGRDDaqPXqClqWK/q1Q==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-events-to-acorn@2.0.3: + resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.3: + resolution: {integrity: sha512-oxB2Ik03hI0gv+VNn9tnh1t1YEe9MDPptViAEgfdf3YQHsn0pzGTgCdlSCJXcwhqm8phaEuM7zeEu3QQzVBrPg==} + + micromark@4.0.3: + resolution: {integrity: sha512-oGYfQzHSG5dOMovQcJ3fyTmZlWAWpi0XA0sJwJs+i6OT88o1+Jtw/8z0CmdowSLxGhhFK89rQ/oXph/wN02PNw==} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minimizer-webpack-plugin@5.13.0: + resolution: {integrity: sha512-OO1NF2zHj6sf4CNv2AsUWYcS8WEwkVKQDXxxKzlOxx1Xl+WlqYtVC+oNlGNwGkLAOnpj277BSHypWwRtd9w4JQ==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@minify-html/node': '*' + '@napi-rs/image': '*' + '@swc/core': '*' + '@swc/css': '*' + '@swc/html': '*' + clean-css: '*' + cssnano: '*' + csso: '*' + esbuild: '*' + html-minifier-terser: '*' + imagemin: '*' + lightningcss: '*' + postcss: '*' + sharp: '*' + svgo: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@minify-html/node': + optional: true + '@napi-rs/image': + optional: true + '@swc/core': + optional: true + '@swc/css': + optional: true + '@swc/html': + optional: true + clean-css: + optional: true + cssnano: + optional: true + csso: + optional: true + esbuild: + optional: true + html-minifier-terser: + optional: true + imagemin: + optional: true + lightningcss: + optional: true + postcss: + optional: true + sharp: + optional: true + svgo: + optional: true + uglify-js: + optional: true + monaco-editor@0.57.0: resolution: {integrity: sha512-5BkI9KGoqrNvBGUe15/QlZq3OooZ8WLg1AxTpaqHRCP3HNpzPPZKE2EDz8M7c+VRmCeUw1Brp4cx/PWm3kI/5A==} + morgan@1.12.1: + resolution: {integrity: sha512-tljKC0ex20AjO58Ob/eZ53JloycbVswbVNCHx6V6VLGzqt/w8dIynVGL0G8qVjNKwiA7sYSogCrN6QtJ82IV+g==} + engines: {node: '>= 0.8.0'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -968,10 +2576,41 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + + negotiator@1.1.0: + resolution: {integrity: sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==} + engines: {node: '>=18'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + deprecated: Use your platform's native DOMException instead + + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + node-releases@2.0.58: + resolution: {integrity: sha512-BdiKAgbfRlvfMq/XzO/AF9NPmaA8a+YpLAyAFTVFBj3gARrAIfWvNq7Q7NE4se3KgFu0KkrvQMxTS0XVnsGzHg==} + engines: {node: '>=18'} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + object-to-formdata@4.5.1: resolution: {integrity: sha512-QiM9D0NiU5jV6J6tjE1g7b4Z2tcUnKs1OPUi4iMb2zH+7jwlcUrASghgkFk9GtzqNNq8rTQJtT8AzjBAvLoNMw==} @@ -983,27 +2622,52 @@ packages: resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} engines: {node: '>=14.0.0'} + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + on-headers@1.1.0: + resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} + engines: {node: '>= 0.8'} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + p-map@7.0.8: + resolution: {integrity: sha512-MitaVsCuCFIvOLLPIU7NnfrZvS9H9h7kwMUkDo+T2pEISaJD48IV9S8iIdXB7PsvvdxyYcsSTTrr90XKsbulNw==} + engines: {node: '>=18'} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + path-to-regexp@8.4.2: + resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + payload@4.0.0-canary.39: resolution: {integrity: sha512-i1ShASySENdpzhlQSugLJwIzTxb7hTBBPB8aSKE9NrL0Vgr57EDCzuQu5m+RSZW4UMtm7u5yqbjTPVn5vAgwiQ==} engines: {node: '>=24.15.0'} @@ -1032,6 +2696,19 @@ packages: resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==} hasBin: true + pkg-types@2.3.3: + resolution: {integrity: sha512-j/lCFdcppV0JxWpCEITdbDltBxPP6cHT+yNJ6Go2OgoSA9518X847X9z0p6LtA4Nc16+eQzCZjRrWanTGvHJ5w==} + + playwright-core@1.64.0: + resolution: {integrity: sha512-T9r+MZkTECl2+oUcZ26YgZzTrYidTsIhYYkJix+6iDOymOb1FB2RLLSOxRGnZGv5DStt+aduIVbt+E8WygXYpg==} + engines: {node: '>=20'} + hasBin: true + + playwright@1.64.0: + resolution: {integrity: sha512-kVzTnYFYEyQ9RGzBjNCd2+yEqWmVbxl3AHPynv3qQ6JTjv4a+kwRcnqQwIpuP3NnrnIrE/Q6wWAIAvMfIE2/Yg==} + engines: {node: '>=20'} + hasBin: true + pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -1048,9 +2725,20 @@ packages: process-warning@5.1.0: resolution: {integrity: sha512-jQSaVHsPgtyw60e1rQ/A+/ArPEj/S8pS/vFnyGa/gYFXrKk/6RuDkoqVDQ5NI5MmS01698ltlAk0NoDBNLujRw==} + promise-limit@2.7.0: + resolution: {integrity: sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + proxy-addr@2.0.8: + resolution: {integrity: sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==} + engines: {node: '>= 0.10'} + pump@3.0.4: resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} @@ -1058,6 +2746,10 @@ packages: resolution: {integrity: sha512-eZ7l+0ZVy3He9c85pEM9KEBR9DFA4jrmWvIjm9wpcHvScwc/vgZDl2TNOF0pm0JsWKw24XBUZOY0Wxn7/nvJnw==} engines: {node: '>=18'} + qs@6.16.0: + resolution: {integrity: sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==} + engines: {node: '>=0.6'} + quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} @@ -1065,6 +2757,10 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} + raw-body@3.0.2: + resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} + engines: {node: '>= 0.10'} + react-datepicker@9.1.0: resolution: {integrity: sha512-lOp+m5bc+ttgtB5MHEjwiVu4nlp4CvJLS/PG1OiOe5pmg9kV73pEqO8H0Geqvg2E8gjqTaL9eRhSe+ZpeKP3nA==} peerDependencies: @@ -1080,6 +2776,11 @@ packages: peerDependencies: react: ^19.3.0 + react-error-boundary@6.1.1: + resolution: {integrity: sha512-BrYwPOdXi5mqkk5lw+Uvt0ThHx32rCt3BkukS4X23A2AIWDPSGX6iaWTc0y9TU/mHDA/6qOSGel+B2ERkOvD1w==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-image-crop@10.1.8: resolution: {integrity: sha512-4rb8XtXNx7ZaOZarKKnckgz4xLMvds/YrU6mpJfGhGAsy2Mg4mIw1x+DCCGngVGq2soTBVVOxx2s/C6mTX9+pA==} peerDependencies: @@ -1088,6 +2789,10 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-refresh@0.18.0: + resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} + engines: {node: '>=0.10.0'} + react-router@8.4.0: resolution: {integrity: sha512-JtydAkBvU9UTEe5qNC+POhu+ZBNM7rlKY2IegwXc7Idj7xfRG16x5RZrw3mju+XlqBxfvb2ky9P3jUp9WyWC1g==} engines: {node: '>=22.22.0'} @@ -1104,6 +2809,14 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-server-dom-webpack@19.3.0: + resolution: {integrity: sha512-ymt9RkvWtW4OpIhWf1wj4u5CxnBaVbDCkz/bw3/QFmOE7+/wg8C30uiJ/QqkEdWn/UqT5c7/rOUW/eWYMwceCg==} + engines: {node: '>=0.10.0'} + peerDependencies: + react: ^19.3.0 + react-dom: ^19.3.0 + webpack: ^5.59.0 + react-transition-group@4.4.5: resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: @@ -1114,6 +2827,10 @@ packages: resolution: {integrity: sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==} engines: {node: '>=0.10.0'} + readdirp@5.1.1: + resolution: {integrity: sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==} + engines: {node: '>= 20.19.0'} + real-require@0.2.0: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} @@ -1121,6 +2838,10 @@ packages: real-require@1.0.0: resolution: {integrity: sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==} + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -1138,16 +2859,154 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-stable-stringify@2.5.0: resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} engines: {node: '>=10'} + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sanitize-filename@1.6.4: resolution: {integrity: sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==} - sax@1.6.1: - resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==} - engines: {node: '>=11.0.0'} + sass-embedded-all-unknown@1.105.1: + resolution: {integrity: sha512-kN0G03K9KoUbSf72t7ZvxAudcB4Wbf0M0XFaPc1gaF94jEPUb0xLCQUIPIDPH2Kx8vpYZ/GzzgF7USsB6rUYfw==} + cpu: ['!arm', '!arm64', '!riscv64', '!x64'] + + sass-embedded-android-arm64@1.105.1: + resolution: {integrity: sha512-lWnIFmW3gL4ZDfZgjeUfxazmA0zlwSS/ADe2q9XmP0W2UfM9kuvrXdWvp6KjZOCv0CrTYVQMrIUj8Of1L2M24Q==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [android] + + sass-embedded-android-arm@1.105.1: + resolution: {integrity: sha512-WYltUXkUP9jDaUq4uUiLgZXyYO5c72sa/TvpO4E2MMRdS+WJWgrPUDyvO+DpMR9gKWIm0QQ5cCEYnPDgovjVJw==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [android] + + sass-embedded-android-riscv64@1.105.1: + resolution: {integrity: sha512-lWity0qhyQyPgkHUfZz+4IeD0r6mcAqG9KzOwVSjUrcSR9xAfWFKYAtHTA05R28ymyXf2Sf2+XfNV7YkxLgkUQ==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [android] + + sass-embedded-android-x64@1.105.1: + resolution: {integrity: sha512-FRGZuIZ9eS3qutYPFqz8u12Ti9ccyWKWb7F7rKRI1BkIEmLZV1rC862dUGnTV2d9Tk9qbSAXL71t8alUR+fzIA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [android] + + sass-embedded-darwin-arm64@1.105.1: + resolution: {integrity: sha512-75qVpHj0qwJKWOo+ZA5NPVFnOGfRrUiBdnLR0dPqsvzp3acvb5gBevptqTtJjVWubpYRIjcRdDDjmeWoXnfacQ==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [darwin] + + sass-embedded-darwin-x64@1.105.1: + resolution: {integrity: sha512-5TV8xyZrOO89ky752favkTuyz9O2hOB2aMoiUpMTk0rFr+UVANcXdIrEvJ9WKoqTHaszim7un3jADumunpW7zQ==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [darwin] + + sass-embedded-linux-arm64@1.105.1: + resolution: {integrity: sha512-arALlVQkXjxN1RPaQR41vbDYXrTIdXwPtEzBWRkOg7FdIN/dSohY8ik96M6M3MSc+niV/UIC7BO47PcspzJGpw==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + libc: glibc + + sass-embedded-linux-arm@1.105.1: + resolution: {integrity: sha512-Ng9GWIF6heTrwc9r/FFY9oUSoaylV2zcS296Qo2re3tJfLMWR37O2JUMyzPT+vtkRs8k3JOE6jTFVlXYnz4EAA==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + libc: glibc + + sass-embedded-linux-musl-arm64@1.105.1: + resolution: {integrity: sha512-KizYVR3d70U67iLgKdF+HCKBdQYUxYiv0YWCS3zl6GwNGIbGXlkOtnjxus41CKTA4oOK0KsSus9P5zwhOBjiYA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + libc: musl + + sass-embedded-linux-musl-arm@1.105.1: + resolution: {integrity: sha512-7u932XawHxGZvuYV4pOqcCvQi05yMONDmNDxVNh8Q7KmpytQP7mnyxBOYWStiw/p665AVL6BYGe7WY/vzCcWGw==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + libc: musl + + sass-embedded-linux-musl-riscv64@1.105.1: + resolution: {integrity: sha512-gs84BgRBVNMX5fHRU3wxc3HuJjl0dUmZFpcVIaDDEVhnp5oXFLQp+gEu0xBBAurTzCHVpPU6GlGK6B1gRKmbhg==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + libc: musl + + sass-embedded-linux-musl-x64@1.105.1: + resolution: {integrity: sha512-jFSRc1BSoCo0bw6GXmBWQMzdj0FBl2FTKSRqQSye3vmlI9O466DwBK4OQL9HRp6MGdY9IQFFMZLPZo5LJWIPsQ==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + libc: musl + + sass-embedded-linux-riscv64@1.105.1: + resolution: {integrity: sha512-tkZs6OvA+omJgSf8EaPQavq6M7bJNLm88eKt3yzYnBy0dVGMao4+lyRb/EnsgIq2R/B2lhxUHhSVNWAcY5bgXw==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + libc: glibc + + sass-embedded-linux-x64@1.105.1: + resolution: {integrity: sha512-YF4OyymSlm26OcdPovIZL1blzjTxf5yN/rzgTmoGqAjEk57+yIuYo+7jBCgSQZFov8Rn4uHhZT+u0cpzxNFMRg==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + libc: glibc + + sass-embedded-unknown-all@1.105.1: + resolution: {integrity: sha512-bd2zDf+MdoPdRDH1awSQ+IL67vHvCbiKsWJ95XchPg3I67zQlXjTSf9KqRiE6twjNT1fRV82JUKoc0Hf6CUmfQ==} + os: ['!android', '!darwin', '!linux', '!win32'] + + sass-embedded-win32-arm64@1.105.1: + resolution: {integrity: sha512-Zpp/RWYL8ZzpLzBrs+/UVMEHOHx7sw4nlq2R52dKQ0qv/0V8oKemAy41PZyLir3c+S2C+YViYyfnFfQLRTAzuA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [win32] + + sass-embedded-win32-x64@1.105.1: + resolution: {integrity: sha512-DM8EkMDzEsxnYoy11nyA5I4jr8lOV1TVQ/drNYvFQA9undiMzZD+7SkRA0OnCrgD1uCT+uRArCHSpNiiYVks+g==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [win32] + + sass-embedded@1.105.1: + resolution: {integrity: sha512-9tKxXG4rq+oGTZUlQehWZwHxBTL80EiB8IWk9AEqz8uOqg910t88JIYbN92eMCxokQ5vrYSQxg15bh0o/3hh3w==} + engines: {node: '>=20.19.0'} + hasBin: true + + sass@1.105.1: + resolution: {integrity: sha512-1CnAWPyrrnVQzXGB/DUep1vYCKCm1CIBr+YxjjiW6wk9qtzemnGP4qicH56T2F9S4Hjtv/Ne3jDz8JqfdDU4oA==} + engines: {node: '>=20.19.0'} + hasBin: true + + sax@1.6.1: + resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==} + engines: {node: '>=11.0.0'} scheduler@0.25.0: resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} @@ -1155,12 +3014,55 @@ packages: scheduler@0.28.0: resolution: {integrity: sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==} + schema-utils@4.5.0: + resolution: {integrity: sha512-zJlMCZ0cAR5p/Y4oVpRoqioDMJcGxaXRrQ/4rP4WyR84vc5z/DolXdbvXeDpTwbtocDFr2rhPqHPErDCUtz2kA==} + engines: {node: '>= 10.13.0'} + secure-json-parse@4.1.0: resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==} + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + + send@1.2.1: + resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} + engines: {node: '>= 18'} + + serve-static@2.2.1: + resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} + engines: {node: '>= 18'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} + engines: {node: '>= 0.4'} + simple-wcswidth@1.1.2: resolution: {integrity: sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw==} + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + sonic-boom@4.2.1: resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} @@ -1174,10 +3076,17 @@ packages: resolution: {integrity: sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==} engines: {node: '>=0.10.0'} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -1190,10 +3099,17 @@ packages: state-local@1.0.7: resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-json-comments@5.0.3: resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} engines: {node: '>=14.16'} @@ -1208,13 +3124,34 @@ packages: stylis@4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + sync-child-process@1.0.2: + resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==} + engines: {node: '>=16.0.0'} + + sync-message-port@1.2.0: + resolution: {integrity: sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==} + engines: {node: '>=16.0.0'} + tabbable@6.5.0: resolution: {integrity: sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==} + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} + + terser@5.51.2: + resolution: {integrity: sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q==} + engines: {node: '>=10'} + hasBin: true + thread-stream@4.2.0: resolution: {integrity: sha512-e2zZ96wSChazBsbENf/Pcm/4swHt2cEKQ92rhUjkL9GCKiTDJIaTBenjE/m9DXi0QBmTMDkFDdOomUy20A1tDQ==} engines: {node: '>=20'} @@ -1223,6 +3160,19 @@ packages: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} + to-no-case@1.0.2: + resolution: {integrity: sha512-Z3g735FxuZY8rodxV4gH7LxClE4H0hTIyHNIHdk+vpQxjLm0cwnKXq/OFVZ76SOQmto7txVcwSCwkU5kqp+FKg==} + + to-snake-case@1.0.0: + resolution: {integrity: sha512-joRpzBAk1Bhi2eGEYBjukEWHOe/IvclOkiJl3DtA91jV6NwQ3MwXA4FHYeqk8BNp/D8bmi9tcNbRu/SozP0jbQ==} + + to-space-case@1.0.0: + resolution: {integrity: sha512-rLdvwXZ39VOn1IxGL3V6ZstoTbwLRckQmn/U8ZDLuWwIXNpuZDhQ3AiRUlhTbOXFVE9C+dR51wM0CBDhk31VcA==} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + token-types@6.1.2: resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} engines: {node: '>=14.16'} @@ -1249,6 +3199,10 @@ packages: turbo-stream@3.2.1: resolution: {integrity: sha512-BaX0eWz3IrypOVDFqPv3VGD6uZZW8y3oFAOJqZQ+oopmOyQ8/xNm7IMwAJFvxax2DBa8zSk+/AeqA6D6b1PXGg==} + type-is@2.1.0: + resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==} + engines: {node: '>= 18'} + typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} @@ -1265,6 +3219,31 @@ packages: resolution: {integrity: sha512-RYONW2MeafgYlkVOKYKkA/Ag7BmXqgIWCa8t1m0JcxrQg9pI9lEqRhAOruOBCbAohOa/gkCF+iPi9hrgvTzu6Q==} engines: {node: '>=20.18.1'} + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + update-browserslist-db@1.3.4: + resolution: {integrity: sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + use-context-selector@2.0.0: resolution: {integrity: sha512-owfuSmUNd3eNp3J9CdDl0kMgfidV+MkDvHPpvthN5ThqM+ibMccNE0k+Iq7TWC6JPFvGZqanqiGCuQx6DyV24g==} peerDependencies: @@ -1287,6 +3266,24 @@ packages: resolution: {integrity: sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==} hasBin: true + valibot@1.5.0: + resolution: {integrity: sha512-nil6AkP2TChWL43Z5uJ6GTxX01CUA+g8LWUM+N/rB9NBbkUMaUsi9PUNzlUPgoKASgmx9f7eGOYpJ04/fSa6FQ==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + + varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + vite@8.3.4: resolution: {integrity: sha512-IftLE8phJhdNRIGNEV4JCCvfNScoZQVfcXaN8TQropWGJtOHcu+iAB9pHcuGvmEb/kddw0LBe/jS8ztdC6xdiQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1338,6 +3335,32 @@ packages: vite: optional: true + watchpack@2.5.2: + resolution: {integrity: sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==} + engines: {node: '>=10.13.0'} + + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + + webpack-sources@3.6.0: + resolution: {integrity: sha512-EIMmPVvNI0CYXyRPp34F2Qk7W37/BZVZIofS6LAUnrNjCVahS+hO4mxwFJDjQjODTGZDtVzLYoN2+1dYkhk9qA==} + engines: {node: '>=10.13.0'} + + webpack@5.111.1: + resolution: {integrity: sha512-cNypaz0RP+S4cvQVi1M/3bRUkvNP0xZpL0TjFx+c6jg64VbxD+2weWDgY9UnjRI6dhZgtaj8DU76GGFcJ79xPQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -1353,13 +3376,23 @@ packages: utf-8-validate: optional: true + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yaml@1.10.3: resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} engines: {node: '>= 6'} + yjs@13.6.33: + resolution: {integrity: sha512-q/UYvr1gOk4XII+Cu1CW2dINjYqJJFifTzogEaIARznrvX7uOlHsdTEXcnOBMuIsrCGEEKdNxi74kyMLZlKVfw==} + engines: {node: '>=16.0.0', npm: '>=8.0.0'} + zod@4.6.5: resolution: {integrity: sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==} + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + snapshots: '@apidevtools/json-schema-ref-parser@11.9.3': @@ -1374,6 +3407,28 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 + '@babel/compat-data@7.29.7': {} + + '@babel/core@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.8 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helpers': 7.29.10 + '@babel/parser': 7.29.9 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.10 + '@babel/types': 7.29.8 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/generator@7.29.8': dependencies: '@babel/parser': 7.29.9 @@ -1382,6 +3437,14 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 + '@babel/helper-compilation-targets@7.29.7': + dependencies: + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + browserslist: 4.29.3 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-globals@7.29.7': {} '@babel/helper-module-imports@7.29.7': @@ -1391,10 +3454,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.10 + transitivePeerDependencies: + - supports-color + '@babel/helper-string-parser@7.29.7': {} '@babel/helper-validator-identifier@7.29.7': {} + '@babel/helper-validator-option@7.29.7': {} + + '@babel/helpers@7.29.10': + dependencies: + '@babel/template': 7.29.7 + '@babel/types': 7.29.8 + '@babel/parser@7.29.9': dependencies: '@babel/types': 7.29.8 @@ -1426,6 +3505,8 @@ snapshots: '@borewit/text-codec@0.2.2': {} + '@bufbuild/protobuf@2.16.0': {} + '@date-fns/tz@1.2.0': {} '@dnd-kit/accessibility@3.1.1(react@19.3.0)': @@ -1460,6 +3541,8 @@ snapshots: react: 19.3.0 tslib: 2.8.1 + '@drizzle-team/brocli@0.10.2': {} + '@emotion/babel-plugin@11.13.5': dependencies: '@babel/helper-module-imports': 7.29.7 @@ -1524,173 +3607,832 @@ snapshots: '@emotion/weak-memoize@0.4.0': {} + '@esbuild-kit/core-utils@3.3.2': + dependencies: + esbuild: 0.18.20 + source-map-support: 0.5.21 + + '@esbuild-kit/esm-loader@2.6.5': + dependencies: + '@esbuild-kit/core-utils': 3.3.2 + get-tsconfig: 4.14.0 + + '@esbuild/aix-ppc64@0.25.12': + optional: true + '@esbuild/aix-ppc64@0.28.2': optional: true + '@esbuild/android-arm64@0.18.20': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + '@esbuild/android-arm64@0.28.2': optional: true + '@esbuild/android-arm@0.18.20': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + '@esbuild/android-arm@0.28.2': optional: true + '@esbuild/android-x64@0.18.20': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + '@esbuild/android-x64@0.28.2': optional: true - '@esbuild/darwin-arm64@0.28.2': + '@esbuild/darwin-arm64@0.18.20': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.28.2': + optional: true + + '@esbuild/darwin-x64@0.18.20': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.28.2': + optional: true + + '@esbuild/freebsd-arm64@0.18.20': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.28.2': + optional: true + + '@esbuild/freebsd-x64@0.18.20': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + + '@esbuild/freebsd-x64@0.28.2': + optional: true + + '@esbuild/linux-arm64@0.18.20': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + + '@esbuild/linux-arm64@0.28.2': + optional: true + + '@esbuild/linux-arm@0.18.20': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + + '@esbuild/linux-arm@0.28.2': + optional: true + + '@esbuild/linux-ia32@0.18.20': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.28.2': + optional: true + + '@esbuild/linux-loong64@0.18.20': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.28.2': + optional: true + + '@esbuild/linux-mips64el@0.18.20': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.28.2': + optional: true + + '@esbuild/linux-ppc64@0.18.20': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.28.2': + optional: true + + '@esbuild/linux-riscv64@0.18.20': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.28.2': + optional: true + + '@esbuild/linux-s390x@0.18.20': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.28.2': + optional: true + + '@esbuild/linux-x64@0.18.20': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/linux-x64@0.28.2': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.28.2': + optional: true + + '@esbuild/netbsd-x64@0.18.20': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.28.2': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.28.2': + optional: true + + '@esbuild/openbsd-x64@0.18.20': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.28.2': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.28.2': + optional: true + + '@esbuild/sunos-x64@0.18.20': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.28.2': + optional: true + + '@esbuild/win32-arm64@0.18.20': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.28.2': + optional: true + + '@esbuild/win32-ia32@0.18.20': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.28.2': + optional: true + + '@esbuild/win32-x64@0.18.20': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + + '@esbuild/win32-x64@0.28.2': + optional: true + + '@faceless-ui/modal@3.0.2(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': + dependencies: + body-scroll-lock: 4.0.0-beta.0 + focus-trap: 7.5.4 + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) + react-transition-group: 4.4.5(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + + '@faceless-ui/scroll-info@2.0.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': + dependencies: + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) + + '@faceless-ui/window-info@3.0.1(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': + dependencies: + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) + + '@floating-ui/core@1.8.0': + dependencies: + '@floating-ui/utils': 0.2.12 + + '@floating-ui/dom@1.7.6': + dependencies: + '@floating-ui/core': 1.8.0 + '@floating-ui/utils': 0.2.12 + + '@floating-ui/dom@1.8.0': + dependencies: + '@floating-ui/core': 1.8.0 + '@floating-ui/utils': 0.2.12 + + '@floating-ui/react-dom@2.1.9(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': + dependencies: + '@floating-ui/dom': 1.8.0 + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) + + '@floating-ui/react@0.27.20(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': + dependencies: + '@floating-ui/react-dom': 2.1.9(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@floating-ui/utils': 0.2.12 + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) + tabbable: 6.5.0 + + '@floating-ui/utils@0.2.12': {} + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.6.0 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/sourcemap-codec@1.6.0': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.6.0 + + '@jsdevtools/ono@7.1.3': {} + + '@lexical/a11y@0.52.0(typescript@5.9.3)': + dependencies: + '@lexical/extension': 0.52.0(typescript@5.9.3) + '@lexical/utils': 0.52.0(typescript@5.9.3) + lexical: 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@lexical/clipboard@0.52.0(typescript@5.9.3)': + dependencies: + '@lexical/extension': 0.52.0(typescript@5.9.3) + '@lexical/html': 0.52.0(typescript@5.9.3) + '@lexical/internal': 0.52.0(typescript@5.9.3) + '@lexical/list': 0.52.0(typescript@5.9.3) + '@lexical/selection': 0.52.0(typescript@5.9.3) + '@lexical/utils': 0.52.0(typescript@5.9.3) + '@types/trusted-types': 2.0.7 + lexical: 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@lexical/code-core@0.52.0(typescript@5.9.3)': + dependencies: + '@lexical/extension': 0.52.0(typescript@5.9.3) + '@lexical/html': 0.52.0(typescript@5.9.3) + '@lexical/internal': 0.52.0(typescript@5.9.3) + '@lexical/utils': 0.52.0(typescript@5.9.3) + lexical: 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@lexical/devtools-core@0.52.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(typescript@5.9.3)': + dependencies: + '@lexical/html': 0.52.0(typescript@5.9.3) + '@lexical/link': 0.52.0(typescript@5.9.3) + '@lexical/mark': 0.52.0(typescript@5.9.3) + '@lexical/table': 0.52.0(typescript@5.9.3) + '@lexical/utils': 0.52.0(typescript@5.9.3) + lexical: 0.52.0(typescript@5.9.3) + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) + optionalDependencies: + typescript: 5.9.3 + + '@lexical/dragon@0.52.0(typescript@5.9.3)': + dependencies: + '@lexical/extension': 0.52.0(typescript@5.9.3) + lexical: 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@lexical/extension@0.52.0(typescript@5.9.3)': + dependencies: + '@lexical/internal': 0.52.0(typescript@5.9.3) + '@lexical/utils': 0.52.0(typescript@5.9.3) + '@preact/signals-core': 1.14.4 + lexical: 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@lexical/hashtag@0.52.0(typescript@5.9.3)': + dependencies: + '@lexical/text': 0.52.0(typescript@5.9.3) + '@lexical/utils': 0.52.0(typescript@5.9.3) + lexical: 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@lexical/headless@0.52.0(typescript@5.9.3)': + dependencies: + '@lexical/internal': 0.52.0(typescript@5.9.3) + happy-dom: 20.14.6 + lexical: 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@lexical/history@0.52.0(typescript@5.9.3)': + dependencies: + '@lexical/extension': 0.52.0(typescript@5.9.3) + '@lexical/utils': 0.52.0(typescript@5.9.3) + lexical: 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@lexical/html@0.52.0(typescript@5.9.3)': + dependencies: + '@lexical/extension': 0.52.0(typescript@5.9.3) + '@lexical/internal': 0.52.0(typescript@5.9.3) + '@lexical/selection': 0.52.0(typescript@5.9.3) + '@lexical/utils': 0.52.0(typescript@5.9.3) + lexical: 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@lexical/internal@0.52.0(typescript@5.9.3)': + optionalDependencies: + typescript: 5.9.3 + + '@lexical/link@0.52.0(typescript@5.9.3)': + dependencies: + '@lexical/a11y': 0.52.0(typescript@5.9.3) + '@lexical/extension': 0.52.0(typescript@5.9.3) + '@lexical/html': 0.52.0(typescript@5.9.3) + '@lexical/internal': 0.52.0(typescript@5.9.3) + '@lexical/utils': 0.52.0(typescript@5.9.3) + lexical: 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@lexical/list@0.52.0(typescript@5.9.3)': + dependencies: + '@lexical/extension': 0.52.0(typescript@5.9.3) + '@lexical/html': 0.52.0(typescript@5.9.3) + '@lexical/internal': 0.52.0(typescript@5.9.3) + '@lexical/utils': 0.52.0(typescript@5.9.3) + lexical: 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@lexical/mark@0.52.0(typescript@5.9.3)': + dependencies: + '@lexical/utils': 0.52.0(typescript@5.9.3) + lexical: 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@lexical/markdown@0.52.0(typescript@5.9.3)': + dependencies: + '@lexical/code-core': 0.52.0(typescript@5.9.3) + '@lexical/internal': 0.52.0(typescript@5.9.3) + '@lexical/link': 0.52.0(typescript@5.9.3) + '@lexical/list': 0.52.0(typescript@5.9.3) + '@lexical/rich-text': 0.52.0(typescript@5.9.3) + '@lexical/selection': 0.52.0(typescript@5.9.3) + '@lexical/text': 0.52.0(typescript@5.9.3) + '@lexical/utils': 0.52.0(typescript@5.9.3) + lexical: 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@lexical/overflow@0.52.0(typescript@5.9.3)': + dependencies: + lexical: 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@lexical/plain-text@0.52.0(typescript@5.9.3)': + dependencies: + '@lexical/clipboard': 0.52.0(typescript@5.9.3) + '@lexical/dragon': 0.52.0(typescript@5.9.3) + '@lexical/extension': 0.52.0(typescript@5.9.3) + '@lexical/selection': 0.52.0(typescript@5.9.3) + '@lexical/utils': 0.52.0(typescript@5.9.3) + lexical: 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@lexical/react@0.52.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(typescript@5.9.3)(yjs@13.6.33)': + dependencies: + '@floating-ui/react': 0.27.20(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@lexical/a11y': 0.52.0(typescript@5.9.3) + '@lexical/devtools-core': 0.52.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(typescript@5.9.3) + '@lexical/dragon': 0.52.0(typescript@5.9.3) + '@lexical/extension': 0.52.0(typescript@5.9.3) + '@lexical/hashtag': 0.52.0(typescript@5.9.3) + '@lexical/history': 0.52.0(typescript@5.9.3) + '@lexical/internal': 0.52.0(typescript@5.9.3) + '@lexical/link': 0.52.0(typescript@5.9.3) + '@lexical/list': 0.52.0(typescript@5.9.3) + '@lexical/mark': 0.52.0(typescript@5.9.3) + '@lexical/markdown': 0.52.0(typescript@5.9.3) + '@lexical/overflow': 0.52.0(typescript@5.9.3) + '@lexical/plain-text': 0.52.0(typescript@5.9.3) + '@lexical/rich-text': 0.52.0(typescript@5.9.3) + '@lexical/table': 0.52.0(typescript@5.9.3) + '@lexical/text': 0.52.0(typescript@5.9.3) + '@lexical/utils': 0.52.0(typescript@5.9.3) + '@lexical/yjs': 0.52.0(typescript@5.9.3)(yjs@13.6.33) + lexical: 0.52.0(typescript@5.9.3) + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) + optionalDependencies: + typescript: 5.9.3 + yjs: 13.6.33 + + '@lexical/rich-text@0.52.0(typescript@5.9.3)': + dependencies: + '@lexical/a11y': 0.52.0(typescript@5.9.3) + '@lexical/clipboard': 0.52.0(typescript@5.9.3) + '@lexical/dragon': 0.52.0(typescript@5.9.3) + '@lexical/extension': 0.52.0(typescript@5.9.3) + '@lexical/html': 0.52.0(typescript@5.9.3) + '@lexical/selection': 0.52.0(typescript@5.9.3) + '@lexical/utils': 0.52.0(typescript@5.9.3) + lexical: 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@lexical/selection@0.52.0(typescript@5.9.3)': + dependencies: + '@lexical/internal': 0.52.0(typescript@5.9.3) + lexical: 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@lexical/table@0.52.0(typescript@5.9.3)': + dependencies: + '@lexical/clipboard': 0.52.0(typescript@5.9.3) + '@lexical/extension': 0.52.0(typescript@5.9.3) + '@lexical/html': 0.52.0(typescript@5.9.3) + '@lexical/internal': 0.52.0(typescript@5.9.3) + '@lexical/utils': 0.52.0(typescript@5.9.3) + lexical: 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@lexical/text@0.52.0(typescript@5.9.3)': + dependencies: + '@lexical/internal': 0.52.0(typescript@5.9.3) + lexical: 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@lexical/utils@0.52.0(typescript@5.9.3)': + dependencies: + '@lexical/internal': 0.52.0(typescript@5.9.3) + '@lexical/selection': 0.52.0(typescript@5.9.3) + lexical: 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@lexical/yjs@0.52.0(typescript@5.9.3)(yjs@13.6.33)': + dependencies: + '@lexical/internal': 0.52.0(typescript@5.9.3) + '@lexical/selection': 0.52.0(typescript@5.9.3) + lexical: 0.52.0(typescript@5.9.3) + yjs: 13.6.33 + optionalDependencies: + typescript: 5.9.3 + + '@libsql/client@0.14.0': + dependencies: + '@libsql/core': 0.14.0 + '@libsql/hrana-client': 0.7.0 + js-base64: 3.9.4 + libsql: 0.4.7 + promise-limit: 2.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@libsql/core@0.14.0': + dependencies: + js-base64: 3.9.4 + + '@libsql/darwin-arm64@0.4.7': + optional: true + + '@libsql/darwin-x64@0.4.7': + optional: true + + '@libsql/hrana-client@0.7.0': + dependencies: + '@libsql/isomorphic-fetch': 0.3.1 + '@libsql/isomorphic-ws': 0.1.5 + js-base64: 3.9.4 + node-fetch: 3.3.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@libsql/isomorphic-fetch@0.3.1': {} + + '@libsql/isomorphic-ws@0.1.5': + dependencies: + '@types/ws': 8.18.2 + ws: 8.22.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@libsql/linux-arm64-gnu@0.4.7': optional: true - '@esbuild/darwin-x64@0.28.2': + '@libsql/linux-arm64-musl@0.4.7': optional: true - '@esbuild/freebsd-arm64@0.28.2': + '@libsql/linux-x64-gnu@0.4.7': optional: true - '@esbuild/freebsd-x64@0.28.2': + '@libsql/linux-x64-musl@0.4.7': optional: true - '@esbuild/linux-arm64@0.28.2': + '@libsql/win32-x64-msvc@0.4.7': optional: true - '@esbuild/linux-arm@0.28.2': - optional: true + '@monaco-editor/loader@1.7.0': + dependencies: + state-local: 1.0.7 - '@esbuild/linux-ia32@0.28.2': - optional: true + '@monaco-editor/react@4.7.0(monaco-editor@0.57.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': + dependencies: + '@monaco-editor/loader': 1.7.0 + monaco-editor: 0.57.0 + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) - '@esbuild/linux-loong64@0.28.2': - optional: true + '@neon-rs/load@0.0.4': {} - '@esbuild/linux-mips64el@0.28.2': - optional: true + '@next/env@16.4.0': {} - '@esbuild/linux-ppc64@0.28.2': - optional: true + '@oxc-project/types@0.153.0': {} - '@esbuild/linux-riscv64@0.28.2': + '@parcel/watcher-android-arm64@2.6.0': optional: true - '@esbuild/linux-s390x@0.28.2': + '@parcel/watcher-darwin-arm64@2.6.0': optional: true - '@esbuild/linux-x64@0.28.2': + '@parcel/watcher-darwin-x64@2.6.0': optional: true - '@esbuild/netbsd-arm64@0.28.2': + '@parcel/watcher-freebsd-x64@2.6.0': optional: true - '@esbuild/netbsd-x64@0.28.2': + '@parcel/watcher-linux-arm-glibc@2.6.0': optional: true - '@esbuild/openbsd-arm64@0.28.2': + '@parcel/watcher-linux-arm-musl@2.6.0': optional: true - '@esbuild/openbsd-x64@0.28.2': + '@parcel/watcher-linux-arm64-glibc@2.6.0': optional: true - '@esbuild/openharmony-arm64@0.28.2': + '@parcel/watcher-linux-arm64-musl@2.6.0': optional: true - '@esbuild/sunos-x64@0.28.2': + '@parcel/watcher-linux-x64-glibc@2.6.0': optional: true - '@esbuild/win32-arm64@0.28.2': + '@parcel/watcher-linux-x64-musl@2.6.0': optional: true - '@esbuild/win32-ia32@0.28.2': + '@parcel/watcher-win32-arm64@2.6.0': optional: true - '@esbuild/win32-x64@0.28.2': + '@parcel/watcher-win32-x64@2.6.0': optional: true - '@faceless-ui/modal@3.0.2(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': - dependencies: - body-scroll-lock: 4.0.0-beta.0 - focus-trap: 7.5.4 - react: 19.3.0 - react-dom: 19.3.0(react@19.3.0) - react-transition-group: 4.4.5(react-dom@19.3.0(react@19.3.0))(react@19.3.0) - - '@faceless-ui/scroll-info@2.0.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': - dependencies: - react: 19.3.0 - react-dom: 19.3.0(react@19.3.0) - - '@faceless-ui/window-info@3.0.1(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': - dependencies: - react: 19.3.0 - react-dom: 19.3.0(react@19.3.0) - - '@floating-ui/core@1.8.0': + '@parcel/watcher@2.6.0': dependencies: - '@floating-ui/utils': 0.2.12 + detect-libc: 2.1.2 + is-glob: 4.0.3 + node-addon-api: 7.1.1 + picomatch: 4.0.7 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.6.0 + '@parcel/watcher-darwin-arm64': 2.6.0 + '@parcel/watcher-darwin-x64': 2.6.0 + '@parcel/watcher-freebsd-x64': 2.6.0 + '@parcel/watcher-linux-arm-glibc': 2.6.0 + '@parcel/watcher-linux-arm-musl': 2.6.0 + '@parcel/watcher-linux-arm64-glibc': 2.6.0 + '@parcel/watcher-linux-arm64-musl': 2.6.0 + '@parcel/watcher-linux-x64-glibc': 2.6.0 + '@parcel/watcher-linux-x64-musl': 2.6.0 + '@parcel/watcher-win32-arm64': 2.6.0 + '@parcel/watcher-win32-x64': 2.6.0 + optional: true - '@floating-ui/dom@1.7.6': + '@payloadcms/db-sqlite@4.0.0-canary.39(payload@4.0.0-canary.39(graphql@16.14.2)(typescript@5.9.3))': dependencies: - '@floating-ui/core': 1.8.0 - '@floating-ui/utils': 0.2.12 + '@libsql/client': 0.14.0 + '@payloadcms/drizzle': 4.0.0-canary.39(@libsql/client@0.14.0)(payload@4.0.0-canary.39(graphql@16.14.2)(typescript@5.9.3)) + console-table-printer: 2.15.0 + drizzle-kit: 0.31.7 + drizzle-orm: 0.45.2(@libsql/client@0.14.0) + payload: 4.0.0-canary.39(graphql@16.14.2)(typescript@5.9.3) + prompts: 2.4.2 + to-snake-case: 1.0.0 + uuid: 14.0.0 + transitivePeerDependencies: + - '@aws-sdk/client-rds-data' + - '@cloudflare/workers-types' + - '@electric-sql/pglite' + - '@libsql/client-wasm' + - '@neondatabase/serverless' + - '@op-engineering/op-sqlite' + - '@opentelemetry/api' + - '@planetscale/database' + - '@prisma/client' + - '@tidbcloud/serverless' + - '@types/better-sqlite3' + - '@types/pg' + - '@types/sql.js' + - '@upstash/redis' + - '@vercel/postgres' + - '@xata.io/client' + - better-sqlite3 + - bufferutil + - bun-types + - expo-sqlite + - gel + - knex + - kysely + - mysql2 + - pg + - postgres + - prisma + - sql.js + - sqlite3 + - supports-color + - utf-8-validate - '@floating-ui/dom@1.8.0': + '@payloadcms/drizzle@4.0.0-canary.39(@libsql/client@0.14.0)(payload@4.0.0-canary.39(graphql@16.14.2)(typescript@5.9.3))': dependencies: - '@floating-ui/core': 1.8.0 - '@floating-ui/utils': 0.2.12 + console-table-printer: 2.15.0 + dequal: 2.0.3 + drizzle-orm: 0.45.2(@libsql/client@0.14.0) + payload: 4.0.0-canary.39(graphql@16.14.2)(typescript@5.9.3) + prompts: 2.4.2 + to-snake-case: 1.0.0 + uuid: 14.0.0 + transitivePeerDependencies: + - '@aws-sdk/client-rds-data' + - '@cloudflare/workers-types' + - '@electric-sql/pglite' + - '@libsql/client' + - '@libsql/client-wasm' + - '@neondatabase/serverless' + - '@op-engineering/op-sqlite' + - '@opentelemetry/api' + - '@planetscale/database' + - '@prisma/client' + - '@tidbcloud/serverless' + - '@types/better-sqlite3' + - '@types/pg' + - '@types/sql.js' + - '@upstash/redis' + - '@vercel/postgres' + - '@xata.io/client' + - better-sqlite3 + - bun-types + - expo-sqlite + - gel + - knex + - kysely + - mysql2 + - pg + - postgres + - prisma + - sql.js + - sqlite3 - '@floating-ui/react-dom@2.1.9(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': + '@payloadcms/graphql@4.0.0-canary.39(graphql@16.14.2)(payload@4.0.0-canary.39(graphql@16.14.2)(typescript@5.9.3))(typescript@5.9.3)': dependencies: - '@floating-ui/dom': 1.8.0 - react: 19.3.0 - react-dom: 19.3.0(react@19.3.0) + graphql: 16.14.2 + graphql-scalars: 1.22.2(graphql@16.14.2) + payload: 4.0.0-canary.39(graphql@16.14.2)(typescript@5.9.3) + pluralize: 8.0.0 + ts-essentials: 10.0.3(typescript@5.9.3) + tsx: 4.23.15 + transitivePeerDependencies: + - typescript - '@floating-ui/react@0.27.20(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': + '@payloadcms/live-preview-react@4.0.0-canary.39(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': dependencies: - '@floating-ui/react-dom': 2.1.9(react-dom@19.3.0(react@19.3.0))(react@19.3.0) - '@floating-ui/utils': 0.2.12 + '@payloadcms/live-preview': 4.0.0-canary.39 react: 19.3.0 react-dom: 19.3.0(react@19.3.0) - tabbable: 6.5.0 - - '@floating-ui/utils@0.2.12': {} - - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.6.0 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/sourcemap-codec@1.6.0': {} - - '@jridgewell/trace-mapping@0.3.31': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.6.0 - - '@jsdevtools/ono@7.1.3': {} - '@monaco-editor/loader@1.7.0': - dependencies: - state-local: 1.0.7 + '@payloadcms/live-preview@4.0.0-canary.39': {} - '@monaco-editor/react@4.7.0(monaco-editor@0.57.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': + '@payloadcms/richtext-lexical@4.0.0-canary.39(@faceless-ui/modal@3.0.2(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(@faceless-ui/scroll-info@2.0.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(@types/react@19.2.14)(monaco-editor@0.57.0)(payload@4.0.0-canary.39(graphql@16.14.2)(typescript@5.9.3))(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(typescript@5.9.3)(yjs@13.6.33)': dependencies: - '@monaco-editor/loader': 1.7.0 - monaco-editor: 0.57.0 + '@faceless-ui/modal': 3.0.2(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@faceless-ui/scroll-info': 2.0.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@lexical/clipboard': 0.52.0(typescript@5.9.3) + '@lexical/headless': 0.52.0(typescript@5.9.3) + '@lexical/html': 0.52.0(typescript@5.9.3) + '@lexical/link': 0.52.0(typescript@5.9.3) + '@lexical/list': 0.52.0(typescript@5.9.3) + '@lexical/mark': 0.52.0(typescript@5.9.3) + '@lexical/markdown': 0.52.0(typescript@5.9.3) + '@lexical/react': 0.52.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(typescript@5.9.3)(yjs@13.6.33) + '@lexical/rich-text': 0.52.0(typescript@5.9.3) + '@lexical/selection': 0.52.0(typescript@5.9.3) + '@lexical/table': 0.52.0(typescript@5.9.3) + '@lexical/utils': 0.52.0(typescript@5.9.3) + '@payloadcms/translations': 4.0.0-canary.39 + '@payloadcms/ui': 4.0.0-canary.39(@types/react@19.2.14)(monaco-editor@0.57.0)(payload@4.0.0-canary.39(graphql@16.14.2)(typescript@5.9.3))(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(typescript@5.9.3) + acorn: 8.16.0 + bson-objectid: 2.0.4 + csstype: 3.2.3 + dequal: 2.0.3 + escape-html: 1.0.3 + jsox: 1.2.125 + lexical: 0.52.0(typescript@5.9.3) + mdast-util-from-markdown: 2.0.3 + mdast-util-mdx-jsx: 3.2.0 + micromark-extension-mdx-jsx: 3.0.2 + payload: 4.0.0-canary.39(graphql@16.14.2)(typescript@5.9.3) + qs-esm: 8.0.1 react: 19.3.0 react-dom: 19.3.0(react@19.3.0) - - '@next/env@16.4.0': {} - - '@oxc-project/types@0.153.0': {} - - '@payloadcms/graphql@4.0.0-canary.39(graphql@16.14.2)(payload@4.0.0-canary.39(graphql@16.14.2)(typescript@5.9.3))(typescript@5.9.3)': - dependencies: - graphql: 16.14.2 - graphql-scalars: 1.22.2(graphql@16.14.2) - payload: 4.0.0-canary.39(graphql@16.14.2)(typescript@5.9.3) - pluralize: 8.0.0 + react-error-boundary: 6.1.1(react@19.3.0) ts-essentials: 10.0.3(typescript@5.9.3) - tsx: 4.23.15 + uuid: 14.0.0 transitivePeerDependencies: + - '@types/react' + - bufferutil + - date-fns-tz + - monaco-editor + - supports-color - typescript + - utf-8-validate + - yjs '@payloadcms/translations@4.0.0-canary.39': dependencies: @@ -1737,6 +4479,79 @@ snapshots: '@pinojs/redact@0.4.0': {} + '@playwright/test@1.64.0': + dependencies: + playwright: 1.64.0 + + '@preact/signals-core@1.14.4': {} + + '@react-router/dev@8.4.0(@react-router/serve@8.4.0(react-router@8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(typescript@5.9.3))(@vitejs/plugin-rsc@0.5.35(react-dom@19.3.0(react@19.3.0))(react-server-dom-webpack@19.3.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(webpack@5.111.1(esbuild@0.28.2)))(react@19.3.0)(vite@8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(sass-embedded@1.105.1)(sass@1.105.1)(terser@5.51.2)(tsx@4.23.15)))(babel-plugin-macros@3.1.0)(react-router@8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(react-server-dom-webpack@19.3.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(webpack@5.111.1(esbuild@0.28.2)))(typescript@5.9.3)(vite@8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(sass-embedded@1.105.1)(sass@1.105.1)(terser@5.51.2)(tsx@4.23.15))': + dependencies: + '@babel/core': 7.29.7 + '@babel/generator': 7.29.8 + '@babel/parser': 7.29.9 + '@babel/traverse': 7.29.10 + '@babel/types': 7.29.8 + '@react-router/node': 8.4.0(react-router@8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(typescript@5.9.3) + '@remix-run/node-fetch-server': 0.14.2 + babel-dead-code-elimination: 1.0.12 + chokidar: 5.0.0 + dedent: 1.7.2(babel-plugin-macros@3.1.0) + es-module-lexer: 2.3.2 + exit-hook: 5.1.0 + isbot: 5.2.2 + jsesc: 3.1.0 + lodash: 4.18.1 + p-map: 7.0.8 + pathe: 2.0.3 + picocolors: 1.1.1 + pkg-types: 2.3.3 + react-refresh: 0.18.0 + react-router: 8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + semver: 7.8.5 + tinyglobby: 0.2.17 + valibot: 1.5.0(typescript@5.9.3) + vite: 8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(sass-embedded@1.105.1)(sass@1.105.1)(terser@5.51.2)(tsx@4.23.15) + optionalDependencies: + '@react-router/serve': 8.4.0(react-router@8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(typescript@5.9.3) + '@vitejs/plugin-rsc': 0.5.35(react-dom@19.3.0(react@19.3.0))(react-server-dom-webpack@19.3.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(webpack@5.111.1(esbuild@0.28.2)))(react@19.3.0)(vite@8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(sass-embedded@1.105.1)(sass@1.105.1)(terser@5.51.2)(tsx@4.23.15)) + react-server-dom-webpack: 19.3.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(webpack@5.111.1(esbuild@0.28.2)) + typescript: 5.9.3 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + '@react-router/express@8.4.0(express@5.2.1)(react-router@8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(typescript@5.9.3)': + dependencies: + '@react-router/node': 8.4.0(react-router@8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(typescript@5.9.3) + express: 5.2.1 + react-router: 8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + optionalDependencies: + typescript: 5.9.3 + + '@react-router/node@8.4.0(react-router@8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(typescript@5.9.3)': + dependencies: + '@remix-run/node-fetch-server': 0.14.2 + react-router: 8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + optionalDependencies: + typescript: 5.9.3 + + '@react-router/serve@8.4.0(react-router@8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(typescript@5.9.3)': + dependencies: + '@react-router/express': 8.4.0(express@5.2.1)(react-router@8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(typescript@5.9.3) + '@react-router/node': 8.4.0(react-router@8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(typescript@5.9.3) + '@remix-run/node-fetch-server': 0.14.2 + compression: 1.8.2 + express: 5.2.1 + morgan: 1.12.1 + react-router: 8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + source-map-support: 0.5.21 + transitivePeerDependencies: + - supports-color + - typescript + + '@remix-run/node-fetch-server@0.14.2': {} + '@remix-run/route-pattern@0.22.1': {} '@rolldown/binding-android-arm-eabi@1.2.13': @@ -1805,12 +4620,30 @@ snapshots: dependencies: '@types/node': 24.19.1 + '@types/debug@4.1.13': + dependencies: + '@types/ms': 2.1.0 + + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.9 + '@types/estree@1.0.9': {} + '@types/hast@3.0.5': + dependencies: + '@types/unist': 3.0.3 + '@types/json-schema@7.0.15': {} '@types/lodash@4.17.25': {} + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/ms@2.1.0': {} + '@types/node@24.19.1': dependencies: undici-types: 7.24.6 @@ -1829,10 +4662,24 @@ snapshots: dependencies: csstype: 3.2.3 - '@types/trusted-types@2.0.7': - optional: true + '@types/trusted-types@2.0.7': {} + + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + + '@types/whatwg-mimetype@3.0.2': {} - '@vitejs/plugin-rsc@0.5.35(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(vite@8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(tsx@4.23.15))': + '@types/ws@8.18.2': + dependencies: + '@types/node': 24.19.1 + + '@vitejs/plugin-react@6.1.2(vite@8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(sass-embedded@1.105.1)(sass@1.105.1)(terser@5.51.2)(tsx@4.23.15))': + dependencies: + '@rolldown/pluginutils': 1.0.1 + vite: 8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(sass-embedded@1.105.1)(sass@1.105.1)(terser@5.51.2)(tsx@4.23.15) + + '@vitejs/plugin-rsc@0.5.35(react-dom@19.3.0(react@19.3.0))(react-server-dom-webpack@19.3.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(webpack@5.111.1(esbuild@0.28.2)))(react@19.3.0)(vite@8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(sass-embedded@1.105.1)(sass@1.105.1)(terser@5.51.2)(tsx@4.23.15))': dependencies: '@rolldown/pluginutils': 1.0.1 es-module-lexer: 2.3.2 @@ -1844,47 +4691,266 @@ snapshots: srvx: 0.12.8 strip-literal: 4.0.0 turbo-stream: 3.2.1 - vite: 8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(tsx@4.23.15) - vitefu: 1.1.3(vite@8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(tsx@4.23.15)) + vite: 8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(sass-embedded@1.105.1)(sass@1.105.1)(terser@5.51.2)(tsx@4.23.15) + vitefu: 1.1.3(vite@8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(sass-embedded@1.105.1)(sass@1.105.1)(terser@5.51.2)(tsx@4.23.15)) + optionalDependencies: + react-server-dom-webpack: 19.3.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(webpack@5.111.1(esbuild@0.28.2)) + + '@webassemblyjs/ast@1.14.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + + '@webassemblyjs/helper-api-error@1.13.2': {} + + '@webassemblyjs/helper-buffer@1.14.1': {} + + '@webassemblyjs/helper-numbers@1.13.2': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + + '@webassemblyjs/helper-wasm-section@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/wasm-gen': 1.14.1 + + '@webassemblyjs/ieee754@1.13.2': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.13.2': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.13.2': {} + + '@webassemblyjs/wasm-edit@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-wasm-section': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-opt': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wast-printer': 1.14.1 + + '@webassemblyjs/wasm-gen@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wasm-opt@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + + '@webassemblyjs/wasm-parser@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wast-printer@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@xtuc/long': 4.2.2 + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + + accepts@2.0.0: + dependencies: + mime-types: 3.0.2 + negotiator: 1.1.0 + + acorn-loose@8.5.2: + dependencies: + acorn: 8.19.0 + + acorn@8.16.0: {} + + acorn@8.19.0: {} + + ajv-formats@3.0.1(ajv@8.20.0): + optionalDependencies: + ajv: 8.20.0 + + ajv-keywords@5.1.0(ajv@8.20.0): + dependencies: + ajv: 8.20.0 + fast-deep-equal: 3.1.3 + + ajv@8.20.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.8 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 argparse@2.0.1: {} atomic-sleep@1.0.0: {} + babel-dead-code-elimination@1.0.12: + dependencies: + '@babel/core': 7.29.7 + '@babel/parser': 7.29.9 + '@babel/traverse': 7.29.10 + '@babel/types': 7.29.8 + transitivePeerDependencies: + - supports-color + babel-plugin-macros@3.1.0: dependencies: '@babel/runtime': 7.29.10 cosmiconfig: 7.1.0 resolve: 1.22.13 + baseline-browser-mapping@2.11.28: {} + + basic-auth@2.0.1: + dependencies: + safe-buffer: 5.1.2 + + body-parser@2.3.0: + dependencies: + bytes: 3.1.2 + content-type: 2.1.0 + debug: 4.4.3 + http-errors: 2.0.1 + iconv-lite: 0.7.3 + on-finished: 2.4.1 + qs: 6.16.0 + raw-body: 3.0.2 + type-is: 2.1.0 + transitivePeerDependencies: + - supports-color + body-scroll-lock@4.0.0-beta.0: {} + browserslist@4.29.3: + dependencies: + baseline-browser-mapping: 2.11.28 + caniuse-lite: 1.0.30001815 + electron-to-chromium: 1.5.452 + node-releases: 2.0.58 + update-browserslist-db: 1.3.4(browserslist@4.29.3) + bson-objectid@2.0.4: {} + buffer-from@1.1.2: {} + + buffer-image-size@0.6.4: + dependencies: + '@types/node': 24.19.1 + busboy@1.6.0: dependencies: streamsearch: 1.1.0 + bytes@3.1.2: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + callsites@3.1.0: {} + caniuse-lite@1.0.30001815: {} + + ccount@2.0.1: {} + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} + charenc@0.0.2: {} + chokidar@5.0.0: + dependencies: + readdirp: 5.1.1 + + chrome-trace-event@1.0.4: {} + ci-info@4.4.0: {} clsx@2.1.1: {} colorette@2.0.20: {} + colorjs.io@0.7.1: {} + commander@15.0.0: {} + commander@2.20.3: {} + + compressible@2.0.18: + dependencies: + mime-db: 1.54.0 + + compression@1.8.2: + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + debug: 2.6.9 + destroy: 1.2.0 + negotiator: 0.6.4 + on-headers: 1.1.0 + safe-buffer: 5.2.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + confbox@0.3.1: {} + console-table-printer@2.15.0: dependencies: simple-wcswidth: 1.1.2 + content-disposition@1.1.0: {} + + content-type@1.0.5: {} + + content-type@2.1.0: {} + convert-source-map@1.9.0: {} + convert-source-map@2.0.0: {} + cookie-es@3.1.1: {} + cookie-signature@1.2.2: {} + + cookie@0.7.2: {} + cosmiconfig@7.1.0: dependencies: '@types/parse-json': 4.0.2 @@ -1899,22 +4965,46 @@ snapshots: csstype@3.2.3: {} + data-uri-to-buffer@4.0.1: {} + dataloader@2.2.3: {} date-fns@4.4.0: {} dateformat@4.6.3: {} + debug@2.6.9: + dependencies: + ms: 2.0.0 + debug@4.4.3: dependencies: ms: 2.1.3 + decode-named-character-reference@1.3.0: + dependencies: + character-entities: 2.0.2 + + dedent@1.7.2(babel-plugin-macros@3.1.0): + optionalDependencies: + babel-plugin-macros: 3.1.0 + deepmerge@4.3.1: {} + depd@2.0.0: {} + dequal@2.0.3: {} + destroy@1.2.0: {} + + detect-libc@2.0.2: {} + detect-libc@2.1.2: {} + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + dom-helpers@5.2.1: dependencies: '@babel/runtime': 7.29.10 @@ -1930,18 +5020,117 @@ snapshots: dotenv@16.4.5: {} + drizzle-kit@0.31.7: + dependencies: + '@drizzle-team/brocli': 0.10.2 + '@esbuild-kit/esm-loader': 2.6.5 + esbuild: 0.25.12 + esbuild-register: 3.6.0(esbuild@0.25.12) + transitivePeerDependencies: + - supports-color + + drizzle-orm@0.45.2(@libsql/client@0.14.0): + optionalDependencies: + '@libsql/client': 0.14.0 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + ee-first@1.1.1: {} + + electron-to-chromium@1.5.452: {} + + encodeurl@2.0.0: {} + end-of-stream@1.4.5: dependencies: once: 1.4.0 + enhanced-resolve@5.26.0: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 + + entities@7.0.1: {} + error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 + es-define-property@1.0.1: {} + es-errors@1.3.0: {} es-module-lexer@2.3.2: {} + es-object-atoms@1.1.2: + dependencies: + es-errors: 1.3.0 + + esbuild-register@3.6.0(esbuild@0.25.12): + dependencies: + debug: 4.4.3 + esbuild: 0.25.12 + transitivePeerDependencies: + - supports-color + + esbuild@0.18.20: + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + + 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@0.28.2: optionalDependencies: '@esbuild/aix-ppc64': 0.28.2 @@ -1971,20 +5160,81 @@ snapshots: '@esbuild/win32-ia32': 0.28.2 '@esbuild/win32-x64': 0.28.2 + escalade@3.2.0: {} + + escape-html@1.0.3: {} + escape-string-regexp@4.0.0: {} + estree-util-is-identifier-name@3.0.0: {} + + estree-util-visit@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.9 + etag@1.8.1: {} + + events@3.3.0: {} + + exit-hook@5.1.0: {} + + express@5.2.1: + dependencies: + accepts: 2.0.0 + body-parser: 2.3.0 + content-disposition: 1.1.0 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.2.2 + debug: 4.4.3 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.1 + fresh: 2.0.0 + http-errors: 2.0.1 + merge-descriptors: 2.0.0 + mime-types: 3.0.2 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.8 + qs: 6.16.0 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.1 + serve-static: 2.2.1 + statuses: 2.0.2 + type-is: 2.1.0 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + exsolve@1.1.3: {} + fast-copy@4.1.2: {} + fast-deep-equal@3.1.3: {} + fast-safe-stringify@2.1.1: {} + fast-uri@3.1.8: {} + fdir@6.5.0(picomatch@4.0.7): optionalDependencies: picomatch: 4.0.7 + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + file-type@22.0.1: dependencies: '@tokenizer/inflate': 0.4.1 @@ -1994,21 +5244,64 @@ snapshots: transitivePeerDependencies: - supports-color + finalhandler@2.1.1: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + find-root@1.1.0: {} focus-trap@7.5.4: dependencies: tabbable: 6.5.0 + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + + forwarded@0.2.0: {} + + fresh@2.0.0: {} + fsevents@2.3.3: optional: true function-bind@1.1.2: {} + gensync@1.0.0-beta.2: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.2 + get-tsconfig@4.14.0: dependencies: resolve-pkg-maps: 1.0.0 + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + graphql-http@1.22.4(graphql@16.14.2): dependencies: graphql: 16.14.2 @@ -2020,6 +5313,23 @@ snapshots: graphql@16.14.2: {} + happy-dom@20.14.6: + dependencies: + '@types/node': 24.19.1 + '@types/whatwg-mimetype': 3.0.2 + '@types/ws': 8.18.2 + buffer-image-size: 0.6.4 + entities: 7.0.1 + whatwg-mimetype: 3.0.0 + ws: 8.22.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + has-flag@4.0.0: {} + + has-symbols@1.1.0: {} + hasown@2.0.4: dependencies: function-bind: 1.1.2 @@ -2030,17 +5340,42 @@ snapshots: dependencies: react-is: 16.13.1 + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + + iconv-lite@0.7.3: + dependencies: + safer-buffer: 2.1.2 + ieee754@1.2.1: {} image-dimensions@2.5.1: {} + immutable@5.1.9: {} + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 + inherits@2.0.4: {} + + ipaddr.js@1.9.1: {} + ipaddr.js@2.3.0: {} + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + is-arrayish@0.2.1: {} is-buffer@1.1.6: {} @@ -2049,16 +5384,34 @@ snapshots: dependencies: hasown: 2.0.4 + is-decimal@2.0.1: {} + is-extglob@2.1.1: {} is-glob@4.0.3: dependencies: is-extglob: 2.1.1 + is-hexadecimal@2.0.1: {} + + is-promise@4.0.0: {} + + isbot@5.2.2: {} + + isomorphic.js@0.2.5: {} + + jest-worker@27.5.1: + dependencies: + '@types/node': 24.19.1 + merge-stream: 2.0.0 + supports-color: 8.1.1 + jose@6.2.12: {} joycon@3.1.1: {} + js-base64@3.9.4: {} + js-tokens@10.0.0: {} js-tokens@4.0.0: {} @@ -2083,6 +5436,37 @@ snapshots: prettier: 3.9.9 tinyglobby: 0.2.17 + json-schema-traverse@1.0.0: {} + + json5@2.2.3: {} + + jsox@1.2.125: {} + + kleur@3.0.3: {} + + lexical@0.52.0(typescript@5.9.3): + dependencies: + '@lexical/internal': 0.52.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + lib0@0.2.119: + dependencies: + isomorphic.js: 0.2.5 + + libsql@0.4.7: + dependencies: + '@neon-rs/load': 0.0.4 + detect-libc: 2.0.2 + optionalDependencies: + '@libsql/darwin-arm64': 0.4.7 + '@libsql/darwin-x64': 0.4.7 + '@libsql/linux-arm64-gnu': 0.4.7 + '@libsql/linux-arm64-musl': 0.4.7 + '@libsql/linux-x64-gnu': 0.4.7 + '@libsql/linux-x64-musl': 0.4.7 + '@libsql/win32-x64-msvc': 0.4.7 + lightningcss-android-arm64@1.33.0: optional: true @@ -2095,92 +5479,406 @@ snapshots: lightningcss-freebsd-x64@1.33.0: optional: true - lightningcss-linux-arm-gnueabihf@1.33.0: - optional: true + lightningcss-linux-arm-gnueabihf@1.33.0: + optional: true + + lightningcss-linux-arm64-gnu@1.33.0: + optional: true + + lightningcss-linux-arm64-musl@1.33.0: + optional: true + + lightningcss-linux-x64-gnu@1.33.0: + optional: true + + lightningcss-linux-x64-musl@1.33.0: + optional: true + + lightningcss-win32-arm64-msvc@1.33.0: + optional: true + + lightningcss-win32-x64-msvc@1.33.0: + optional: true + + lightningcss@1.33.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.33.0 + lightningcss-darwin-arm64: 1.33.0 + lightningcss-darwin-x64: 1.33.0 + lightningcss-freebsd-x64: 1.33.0 + lightningcss-linux-arm-gnueabihf: 1.33.0 + lightningcss-linux-arm64-gnu: 1.33.0 + lightningcss-linux-arm64-musl: 1.33.0 + lightningcss-linux-x64-gnu: 1.33.0 + lightningcss-linux-x64-musl: 1.33.0 + lightningcss-win32-arm64-msvc: 1.33.0 + lightningcss-win32-x64-msvc: 1.33.0 + + lines-and-columns@1.2.4: {} + + lodash@4.18.1: {} + + longest-streak@3.1.0: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@1.4.3: + dependencies: + '@jridgewell/sourcemap-codec': 1.6.0 + + marked@14.0.0: {} + + math-intrinsics@1.1.0: {} + + md5@2.3.0: + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + + mdast-util-from-markdown@2.0.3: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.3 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.2.0 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 + + mdast-util-to-markdown@2.2.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-character: 2.1.1 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + unist-util-visit: 5.1.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + + media-typer@1.1.1: {} + + memoize-one@6.0.0: {} + + merge-descriptors@2.0.0: {} + + merge-stream@2.0.0: {} + + micromark-core-commonmark@2.0.4: + dependencies: + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.1.0 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-edit-map: 1.0.0 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-extension-mdx-jsx@3.0.2: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.1.0 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + vfile-message: 4.0.3 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-factory-mdx-expression@2.0.3: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-factory-space: 2.1.0 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-factory-space@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.3 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 - lightningcss-linux-arm64-gnu@1.33.0: - optional: true + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 - lightningcss-linux-arm64-musl@1.33.0: - optional: true + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.3 - lightningcss-linux-x64-gnu@1.33.0: - optional: true + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 - lightningcss-linux-x64-musl@1.33.0: - optional: true + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.3.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 - lightningcss-win32-arm64-msvc@1.33.0: - optional: true + micromark-util-edit-map@1.0.0: + dependencies: + micromark-util-types: 2.0.3 - lightningcss-win32-x64-msvc@1.33.0: - optional: true + micromark-util-encode@2.0.1: {} - lightningcss@1.33.0: + micromark-util-events-to-acorn@2.0.3: dependencies: - detect-libc: 2.1.2 - optionalDependencies: - lightningcss-android-arm64: 1.33.0 - lightningcss-darwin-arm64: 1.33.0 - lightningcss-darwin-x64: 1.33.0 - lightningcss-freebsd-x64: 1.33.0 - lightningcss-linux-arm-gnueabihf: 1.33.0 - lightningcss-linux-arm64-gnu: 1.33.0 - lightningcss-linux-arm64-musl: 1.33.0 - lightningcss-linux-x64-gnu: 1.33.0 - lightningcss-linux-x64-musl: 1.33.0 - lightningcss-win32-arm64-msvc: 1.33.0 - lightningcss-win32-x64-msvc: 1.33.0 + '@types/estree': 1.0.9 + '@types/unist': 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + vfile-message: 4.0.3 - lines-and-columns@1.2.4: {} + micromark-util-html-tag-name@2.0.1: {} - lodash@4.18.1: {} + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 - loose-envify@1.4.0: + micromark-util-resolve-all@2.0.1: dependencies: - js-tokens: 4.0.0 + micromark-util-types: 2.0.3 - magic-string@1.4.3: + micromark-util-sanitize-uri@2.0.1: dependencies: - '@jridgewell/sourcemap-codec': 1.6.0 + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 - marked@14.0.0: {} + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 - md5@2.3.0: + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.3: {} + + micromark@4.0.3: dependencies: - charenc: 0.0.2 - crypt: 0.0.2 - is-buffer: 1.1.6 + '@types/debug': 4.1.13 + debug: 4.4.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.4 + micromark-factory-space: 2.1.0 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-edit-map: 1.0.0 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + transitivePeerDependencies: + - supports-color - memoize-one@6.0.0: {} + mime-db@1.54.0: {} + + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 minimist@1.2.8: {} + minimizer-webpack-plugin@5.13.0(esbuild@0.28.2)(webpack@5.111.1(esbuild@0.28.2)): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.5.0 + terser: 5.51.2 + webpack: 5.111.1(esbuild@0.28.2) + optionalDependencies: + esbuild: 0.28.2 + monaco-editor@0.57.0: dependencies: dompurify: 3.4.15 marked: 14.0.0 + morgan@1.12.1: + dependencies: + basic-auth: 2.0.1 + debug: 2.6.9 + depd: 2.0.0 + on-finished: 2.4.1 + on-headers: 1.1.0 + transitivePeerDependencies: + - supports-color + + ms@2.0.0: {} + ms@2.1.3: {} nanoid@3.3.20: {} + negotiator@0.6.4: {} + + negotiator@1.1.0: + dependencies: + content-type: 2.1.0 + + neo-async@2.6.2: {} + + node-addon-api@7.1.1: + optional: true + + node-domexception@1.0.0: {} + + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + + node-releases@2.0.58: {} + object-assign@4.1.1: {} + object-inspect@1.13.4: {} + object-to-formdata@4.5.1: {} obug@3.0.0: {} on-exit-leak-free@2.1.2: {} + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + on-headers@1.1.0: {} + once@1.4.0: dependencies: wrappy: 1.0.2 + p-map@7.0.8: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.3.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.29.7 @@ -2188,12 +5886,18 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parseurl@1.3.3: {} + path-parse@1.0.7: {} path-to-regexp@6.3.0: {} + path-to-regexp@8.4.2: {} + path-type@4.0.0: {} + pathe@2.0.3: {} + payload@4.0.0-canary.39(graphql@16.14.2)(typescript@5.9.3): dependencies: '@next/env': 16.4.0 @@ -2277,6 +5981,18 @@ snapshots: sonic-boom: 4.2.1 thread-stream: 4.2.0 + pkg-types@2.3.3: + dependencies: + confbox: 0.3.1 + exsolve: 1.1.3 + pathe: 2.0.3 + + playwright-core@1.64.0: {} + + playwright@1.64.0: + dependencies: + playwright-core: 1.64.0 + pluralize@8.0.0: {} postcss@8.5.29: @@ -2289,12 +6005,24 @@ snapshots: process-warning@5.1.0: {} + promise-limit@2.7.0: {} + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 + proxy-addr@2.0.8: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + pump@3.0.4: dependencies: end-of-stream: 1.4.5 @@ -2302,10 +6030,22 @@ snapshots: qs-esm@8.0.1: {} + qs@6.16.0: + dependencies: + es-define-property: 1.0.1 + side-channel: 1.1.1 + quick-format-unescaped@4.0.4: {} range-parser@1.2.1: {} + raw-body@3.0.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.7.3 + unpipe: 1.0.0 + react-datepicker@9.1.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0): dependencies: '@floating-ui/react': 0.27.20(react-dom@19.3.0(react@19.3.0))(react@19.3.0) @@ -2319,12 +6059,18 @@ snapshots: react: 19.3.0 scheduler: 0.28.0 + react-error-boundary@6.1.1(react@19.3.0): + dependencies: + react: 19.3.0 + react-image-crop@10.1.8(react@19.3.0): dependencies: react: 19.3.0 react-is@16.13.1: {} + react-refresh@0.18.0: {} + react-router@8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0): dependencies: '@remix-run/route-pattern': 0.22.1 @@ -2338,7 +6084,7 @@ snapshots: '@babel/runtime': 7.29.10 '@emotion/cache': 11.14.0 '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.3.0) - '@floating-ui/dom': 1.7.6 + '@floating-ui/dom': 1.8.0 '@types/react-transition-group': 4.4.12(@types/react@19.2.14) memoize-one: 6.0.0 prop-types: 15.8.1 @@ -2350,6 +6096,15 @@ snapshots: - '@types/react' - supports-color + react-server-dom-webpack@19.3.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(webpack@5.111.1(esbuild@0.28.2)): + dependencies: + acorn-loose: 8.5.2 + neo-async: 2.6.2 + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) + webpack: 5.111.1(esbuild@0.28.2) + webpack-sources: 3.6.0 + react-transition-group@4.4.5(react-dom@19.3.0(react@19.3.0))(react@19.3.0): dependencies: '@babel/runtime': 7.29.10 @@ -2361,10 +6116,14 @@ snapshots: react@19.3.0: {} + readdirp@5.1.1: {} + real-require@0.2.0: {} real-require@1.0.0: {} + require-from-string@2.0.2: {} + resolve-from@4.0.0: {} resolve-pkg-maps@1.0.0: {} @@ -2397,22 +6156,206 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.2.13 '@rolldown/binding-win32-x64-msvc': 1.2.13 + router@2.2.0: + dependencies: + debug: 4.4.3 + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.4.2 + transitivePeerDependencies: + - supports-color + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + safe-stable-stringify@2.5.0: {} + safer-buffer@2.1.2: {} + sanitize-filename@1.6.4: dependencies: truncate-utf8-bytes: 1.0.2 + sass-embedded-all-unknown@1.105.1: + dependencies: + sass: 1.105.1 + optional: true + + sass-embedded-android-arm64@1.105.1: + optional: true + + sass-embedded-android-arm@1.105.1: + optional: true + + sass-embedded-android-riscv64@1.105.1: + optional: true + + sass-embedded-android-x64@1.105.1: + optional: true + + sass-embedded-darwin-arm64@1.105.1: + optional: true + + sass-embedded-darwin-x64@1.105.1: + optional: true + + sass-embedded-linux-arm64@1.105.1: + optional: true + + sass-embedded-linux-arm@1.105.1: + optional: true + + sass-embedded-linux-musl-arm64@1.105.1: + optional: true + + sass-embedded-linux-musl-arm@1.105.1: + optional: true + + sass-embedded-linux-musl-riscv64@1.105.1: + optional: true + + sass-embedded-linux-musl-x64@1.105.1: + optional: true + + sass-embedded-linux-riscv64@1.105.1: + optional: true + + sass-embedded-linux-x64@1.105.1: + optional: true + + sass-embedded-unknown-all@1.105.1: + dependencies: + sass: 1.105.1 + optional: true + + sass-embedded-win32-arm64@1.105.1: + optional: true + + sass-embedded-win32-x64@1.105.1: + optional: true + + sass-embedded@1.105.1: + dependencies: + '@bufbuild/protobuf': 2.16.0 + colorjs.io: 0.7.1 + immutable: 5.1.9 + rxjs: 7.8.2 + supports-color: 8.1.1 + sync-child-process: 1.0.2 + varint: 6.0.0 + optionalDependencies: + sass-embedded-all-unknown: 1.105.1 + sass-embedded-android-arm: 1.105.1 + sass-embedded-android-arm64: 1.105.1 + sass-embedded-android-riscv64: 1.105.1 + sass-embedded-android-x64: 1.105.1 + sass-embedded-darwin-arm64: 1.105.1 + sass-embedded-darwin-x64: 1.105.1 + sass-embedded-linux-arm: 1.105.1 + sass-embedded-linux-arm64: 1.105.1 + sass-embedded-linux-musl-arm: 1.105.1 + sass-embedded-linux-musl-arm64: 1.105.1 + sass-embedded-linux-musl-riscv64: 1.105.1 + sass-embedded-linux-musl-x64: 1.105.1 + sass-embedded-linux-riscv64: 1.105.1 + sass-embedded-linux-x64: 1.105.1 + sass-embedded-unknown-all: 1.105.1 + sass-embedded-win32-arm64: 1.105.1 + sass-embedded-win32-x64: 1.105.1 + + sass@1.105.1: + dependencies: + chokidar: 5.0.0 + immutable: 5.1.9 + source-map-js: 1.2.2 + optionalDependencies: + '@parcel/watcher': 2.6.0 + optional: true + sax@1.6.1: {} scheduler@0.25.0: {} scheduler@0.28.0: {} + schema-utils@4.5.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.20.0 + ajv-formats: 3.0.1(ajv@8.20.0) + ajv-keywords: 5.1.0(ajv@8.20.0) + secure-json-parse@4.1.0: {} + semver@6.3.1: {} + + semver@7.8.5: {} + + send@1.2.1: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.1 + mime-types: 3.0.2 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + serve-static@2.2.1: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.1 + transitivePeerDependencies: + - supports-color + + setprototypeof@1.2.0: {} + + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + simple-wcswidth@1.1.2: {} + sisteransi@1.0.5: {} + sonic-boom@4.2.1: dependencies: atomic-sleep: 1.0.0 @@ -2424,16 +6367,30 @@ snapshots: source-map-js@1.2.2: {} + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + source-map@0.5.7: {} + source-map@0.6.1: {} + split2@4.2.0: {} srvx@0.12.8: {} state-local@1.0.7: {} + statuses@2.0.2: {} + streamsearch@1.1.0: {} + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-json-comments@5.0.3: {} strip-literal@4.0.0: @@ -2446,10 +6403,29 @@ snapshots: stylis@4.2.0: {} + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + supports-preserve-symlinks-flag@1.0.0: {} + sync-child-process@1.0.2: + dependencies: + sync-message-port: 1.2.0 + + sync-message-port@1.2.0: {} + tabbable@6.5.0: {} + tapable@2.3.3: {} + + terser@5.51.2: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.19.0 + commander: 2.20.3 + source-map-support: 0.5.21 + thread-stream@4.2.0: dependencies: real-require: 1.0.0 @@ -2459,6 +6435,18 @@ snapshots: fdir: 6.5.0(picomatch@4.0.7) picomatch: 4.0.7 + to-no-case@1.0.2: {} + + to-snake-case@1.0.0: + dependencies: + to-space-case: 1.0.0 + + to-space-case@1.0.0: + dependencies: + to-no-case: 1.0.2 + + toidentifier@1.0.1: {} + token-types@6.1.2: dependencies: '@borewit/text-codec': 0.2.2 @@ -2483,6 +6471,12 @@ snapshots: turbo-stream@3.2.1: {} + type-is@2.1.0: + dependencies: + content-type: 2.1.0 + media-typer: 1.1.1 + mime-types: 3.0.2 + typescript@5.9.3: {} uint8array-extras@1.6.0: {} @@ -2491,6 +6485,37 @@ snapshots: undici@7.29.1: {} + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position-from-estree@2.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + unpipe@1.0.0: {} + + update-browserslist-db@1.3.4(browserslist@4.29.3): + dependencies: + browserslist: 4.29.3 + escalade: 3.2.0 + picocolors: 1.1.1 + use-context-selector@2.0.0(react@19.3.0)(scheduler@0.25.0): dependencies: react: 19.3.0 @@ -2506,7 +6531,20 @@ snapshots: uuid@14.0.0: {} - vite@8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(tsx@4.23.15): + valibot@1.5.0(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + + varint@6.0.0: {} + + vary@1.1.2: {} + + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vite@8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(sass-embedded@1.105.1)(sass@1.105.1)(terser@5.51.2)(tsx@4.23.15): dependencies: lightningcss: 1.33.0 picomatch: 4.0.7 @@ -2517,16 +6555,74 @@ snapshots: '@types/node': 24.19.1 esbuild: 0.28.2 fsevents: 2.3.3 + sass: 1.105.1 + sass-embedded: 1.105.1 + terser: 5.51.2 tsx: 4.23.15 - vitefu@1.1.3(vite@8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(tsx@4.23.15)): + vitefu@1.1.3(vite@8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(sass-embedded@1.105.1)(sass@1.105.1)(terser@5.51.2)(tsx@4.23.15)): optionalDependencies: - vite: 8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(tsx@4.23.15) + vite: 8.3.4(@types/node@24.19.1)(esbuild@0.28.2)(sass-embedded@1.105.1)(sass@1.105.1)(terser@5.51.2)(tsx@4.23.15) + + watchpack@2.5.2: + dependencies: + graceful-fs: 4.2.11 + + web-streams-polyfill@3.3.3: {} + + webpack-sources@3.6.0: {} + + webpack@5.111.1(esbuild@0.28.2): + dependencies: + '@types/estree': 1.0.9 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + browserslist: 4.29.3 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.26.0 + es-module-lexer: 2.3.2 + events: 3.3.0 + graceful-fs: 4.2.11 + mime-db: 1.54.0 + minimizer-webpack-plugin: 5.13.0(esbuild@0.28.2)(webpack@5.111.1(esbuild@0.28.2)) + schema-utils: 4.5.0 + tapable: 2.3.3 + watchpack: 2.5.2 + webpack-sources: 3.6.0 + transitivePeerDependencies: + - '@minify-html/node' + - '@napi-rs/image' + - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso + - esbuild + - html-minifier-terser + - imagemin + - lightningcss + - postcss + - sharp + - svgo + - uglify-js + + whatwg-mimetype@3.0.0: {} wrappy@1.0.2: {} ws@8.22.0: {} + yallist@3.1.1: {} + yaml@1.10.3: {} + yjs@13.6.33: + dependencies: + lib0: 0.2.119 + zod@4.6.5: {} + + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index d0b7dbe..0b268fe 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,8 @@ +packages: + - demo + onlyBuiltDependencies: + - '@parcel/watcher' + - better-sqlite3 - esbuild - sharp