diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 23eb208c7..52920e6a8 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -34,12 +34,12 @@ body: Add any other context about the problem here, such as screenshots, error logs, etc. - type: input attributes: - label: "@faustwp/core Version" + label: '@faustwp/core Version' validations: required: true - type: input attributes: - label: "@faustwp/cli Version" + label: '@faustwp/cli Version' validations: required: true - type: input @@ -55,7 +55,7 @@ body: - type: textarea attributes: label: Additional environment details - description: Additional Faust.js packages and their versions (@faustwp/blocks, @faustwp/experimental-app-router, etc), PHP version, Hosting Platform, etc. + description: Additional Faust.js packages and their versions (@faustwp/blocks, @faustwp/core, etc), PHP version, Hosting Platform, etc. - type: checkboxes attributes: label: Please confirm that you have searched existing issues in the repo. diff --git a/.github/workflows/experimental-app-router.yml b/.github/workflows/experimental-app-router.yml deleted file mode 100644 index e94876808..000000000 --- a/.github/workflows/experimental-app-router.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: Experimental App Router Build & Test - -on: - pull_request: - -jobs: - experimental_app_router_build_test: - name: "Build and Test Experimental App Router on Node.js ${{ matrix.node }} ${{ matrix.os }}" - strategy: - matrix: - os: ['ubuntu-22.04'] - node: ['18', '20', '22'] - permissions: - checks: write - pull-requests: write - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v4 - - name: Setup Node.js ${{ matrix.node }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node }} - - - name: Install - run: npm ci - - - name: Build (Monorepo) - run: npm run build - - - name: Build - run: npm run build - working-directory: packages/experimental-app-router - - - name: Tests - run: npm run test - working-directory: packages/experimental-app-router diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 8dc6c5571..b3a2f2255 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -202,7 +202,6 @@ Once deployed, the updated packages and plugin will be visible here: - https://www.npmjs.com/package/@faustwp/core - https://www.npmjs.com/package/@faustwp/cli -- https://www.npmjs.com/package/@faustwp/experimental-app-router - https://www.npmjs.com/package/@faustwp/block-editor-utils - https://www.npmjs.com/package/@faustwp/blocks - https://plugins.trac.wordpress.org/browser/faustwp/tags diff --git a/examples/next/app-router/.env.local.sample b/examples/next/app-router/.env.local.sample deleted file mode 100644 index d972b96b4..000000000 --- a/examples/next/app-router/.env.local.sample +++ /dev/null @@ -1,8 +0,0 @@ -# Your WordPress site URL -NEXT_PUBLIC_WORDPRESS_URL=https://faustexample.wpengine.com - -# Your Faust site URL -NEXT_PUBLIC_URL=http://localhost:3000 - -# Plugin secret found in WordPress Settings->Faust -# FAUST_SECRET_KEY=YOUR_PLUGIN_SECRET diff --git a/examples/next/app-router/app/[slug]/hasPreviewProps.ts b/examples/next/app-router/app/[slug]/hasPreviewProps.ts deleted file mode 100644 index 10dbad9e4..000000000 --- a/examples/next/app-router/app/[slug]/hasPreviewProps.ts +++ /dev/null @@ -1,6 +0,0 @@ -export async function hasPreviewProps(props: any) { - const { searchParams } = await props; - const { preview, p } = await searchParams; - - return preview === 'true' && !!p; -} diff --git a/examples/next/app-router/app/[slug]/page.tsx b/examples/next/app-router/app/[slug]/page.tsx deleted file mode 100644 index 8b51163e6..000000000 --- a/examples/next/app-router/app/[slug]/page.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { getAuthClient, getClient } from '@faustwp/experimental-app-router'; -import { gql } from '@apollo/client'; -import { hasPreviewProps } from './hasPreviewProps'; -import { PleaseLogin } from '@/components/please-login'; - -export default async function Page(props) { - const { searchParams, params } = await props; - const { slug } = await params; - const { p } = await searchParams; - const isPreview = await hasPreviewProps(props); - const id = isPreview ? p : slug; - - let client = isPreview ? await getAuthClient() : await getClient(); - - if (!client) { - return ; - } - - const { data } = await client.query({ - query: gql` - query GetContentNode( - $id: ID! - $idType: ContentNodeIdTypeEnum! - $asPreview: Boolean! - ) { - contentNode(id: $id, idType: $idType, asPreview: $asPreview) { - ... on NodeWithTitle { - title - } - ... on NodeWithContentEditor { - content - } - date - } - } - `, - variables: { - id, - idType: isPreview ? 'DATABASE_ID' : 'URI', - asPreview: isPreview, - }, - }); - - return ( -
-

{data?.contentNode?.title}

-
-
- ); -} diff --git a/examples/next/app-router/app/api/faust/[route]/route.ts b/examples/next/app-router/app/api/faust/[route]/route.ts deleted file mode 100644 index 5f5a643ec..000000000 --- a/examples/next/app-router/app/api/faust/[route]/route.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { faustRouteHandler } from '@faustwp/experimental-app-router'; -import '@/faust.config.js'; - -const { GET, POST } = faustRouteHandler; - -export { GET, POST }; diff --git a/examples/next/app-router/app/layout.tsx b/examples/next/app-router/app/layout.tsx deleted file mode 100644 index a61a5f7ec..000000000 --- a/examples/next/app-router/app/layout.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { gql } from '@apollo/client'; -import { getClient } from '@faustwp/experimental-app-router'; -import Link from 'next/link'; -import '@/faust.config.js'; -import { FaustProvider } from '@faustwp/experimental-app-router/ssr'; -export default async function RootLayout({ children }) { - const client = await getClient(); - - const { data } = await client.query({ - query: gql` - query GetLayout { - generalSettings { - title - description - } - primaryMenuItems: menuItems(where: { location: PRIMARY }) { - nodes { - id - label - uri - } - } - footerMenuItems: menuItems(where: { location: FOOTER }) { - nodes { - id - label - uri - } - } - } - `, - }); - - return ( - - - -
-
-

- {data.generalSettings.title} -

- -
{data.generalSettings.description}
-
- -
    - {data.primaryMenuItems.nodes.map((node) => ( -
  • - {node.label} -
  • - ))} -
-
- {children} -
- - - ); -} diff --git a/examples/next/app-router/app/login/action.ts b/examples/next/app-router/app/login/action.ts deleted file mode 100644 index 0ef38972d..000000000 --- a/examples/next/app-router/app/login/action.ts +++ /dev/null @@ -1,14 +0,0 @@ -'use server'; - -import { onLogin } from '@faustwp/experimental-app-router'; -import { redirect } from 'next/navigation'; - -export async function loginAction(prevData: any, formData: FormData) { - const res = await onLogin(formData); - - if (res.error) { - return res; - } - - redirect('/my-account'); -} diff --git a/examples/next/app-router/app/login/page.tsx b/examples/next/app-router/app/login/page.tsx deleted file mode 100644 index 2da2c4979..000000000 --- a/examples/next/app-router/app/login/page.tsx +++ /dev/null @@ -1,34 +0,0 @@ -'use client'; - -import { loginAction } from './action'; -import { useActionState } from 'react'; - -export default function Page() { - const [state, formAction, isPending] = useActionState(loginAction, {}); - - return ( - <> -

Login

- -
-
- - -
- -
- - -
- - - - {state.error && ( -

- )} -
- - ); -} diff --git a/examples/next/app-router/app/making-client-queries/page.tsx b/examples/next/app-router/app/making-client-queries/page.tsx deleted file mode 100644 index 25668bd95..000000000 --- a/examples/next/app-router/app/making-client-queries/page.tsx +++ /dev/null @@ -1,21 +0,0 @@ -'use client'; - -import { gql, useQuery } from '@apollo/client'; - -/** - * You can make client side queries as well with Apollo's `useQuery` hook within - * a client component ('use client' directive). Just make sure the - * is wrapping the app (in app/layout.js) - */ - -export default function Page() { - const { data } = useQuery(gql` - query MyQuery { - generalSettings { - title - } - } - `); - - return <>{data?.generalSettings?.title}; -} diff --git a/examples/next/app-router/app/my-account/page.tsx b/examples/next/app-router/app/my-account/page.tsx deleted file mode 100644 index c3da671c1..000000000 --- a/examples/next/app-router/app/my-account/page.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { PleaseLogin } from '@/components/please-login'; -import { gql } from '@apollo/client'; -import { getAuthClient, onLogout } from '@faustwp/experimental-app-router'; - -export default async function Page() { - const client = await getAuthClient(); - - if (!client) { - return ; - } - - const { data } = await client.query({ - query: gql` - query GetViewer { - viewer { - name - posts { - nodes { - id - title - } - } - } - } - `, - }); - - return ( - <> -

Welcome {data.viewer.name}

- -

My Posts

-
    - {data.viewer.posts.nodes.map((post) => ( -
  • {post.title}
  • - ))} -
- -
- -
- - ); -} diff --git a/examples/next/app-router/app/page.tsx b/examples/next/app-router/app/page.tsx deleted file mode 100644 index eda542448..000000000 --- a/examples/next/app-router/app/page.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { getClient } from '@faustwp/experimental-app-router'; -import { gql } from '@apollo/client'; -import Link from 'next/link'; - -export default async function Home() { - let client = await getClient(); - - const { data } = await client.query({ - query: gql` - query GetPosts { - posts { - nodes { - id - title - uri - slug - } - } - } - `, - }); - - return ( -
-

Posts

-
    - {data.posts.nodes.map((post) => ( -
  • - {post.title} -
  • - ))} -
-
- ); -} diff --git a/examples/next/app-router/components/please-login.tsx b/examples/next/app-router/components/please-login.tsx deleted file mode 100644 index 24dcc2ed9..000000000 --- a/examples/next/app-router/components/please-login.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import Link from 'next/link'; - -export function PleaseLogin() { - return ( - <> - You must be authenticated! Please log in{' '} - first. - - ); -} diff --git a/examples/next/app-router/faust.config.js b/examples/next/app-router/faust.config.js deleted file mode 100644 index 1a52ceb19..000000000 --- a/examples/next/app-router/faust.config.js +++ /dev/null @@ -1,7 +0,0 @@ -import { setConfig } from '@faustwp/core/dist/mjs/config/index.js'; -import possibleTypes from './possibleTypes.json'; - -/** @type {import('@faustwp/core').FaustConfig} */ -export default setConfig({ - possibleTypes, -}); diff --git a/examples/next/app-router/next-env.d.ts b/examples/next/app-router/next-env.d.ts deleted file mode 100644 index 40c3d6809..000000000 --- a/examples/next/app-router/next-env.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. diff --git a/examples/next/app-router/next.config.js b/examples/next/app-router/next.config.js deleted file mode 100644 index 550780bfe..000000000 --- a/examples/next/app-router/next.config.js +++ /dev/null @@ -1,11 +0,0 @@ -import { withFaust } from '@faustwp/core'; -import { createSecureHeaders } from 'next-secure-headers'; - -/** @type {import('next').NextConfig} */ -export default withFaust({ - async headers() { - return [{ source: '/:path*', headers: createSecureHeaders({ - xssProtection: false - }) }]; - }, -}); diff --git a/examples/next/app-router/package-lock.json b/examples/next/app-router/package-lock.json deleted file mode 100644 index 5d71ce69f..000000000 --- a/examples/next/app-router/package-lock.json +++ /dev/null @@ -1,3437 +0,0 @@ -{ - "name": "@faustwp/app-router-example", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "@faustwp/app-router-example", - "dependencies": { - "@apollo/client": "^3.8.0", - "@apollo/experimental-nextjs-app-support": "^0.8.0", - "@faustwp/cli": "^3.1.0", - "@faustwp/core": "^3.1.0", - "@faustwp/experimental-app-router": "^0.4.0", - "graphql": "^16.7.1", - "next": "^15.1.2", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@types/node": "^20.6.3", - "@types/react": "npm:types-react@rc", - "@types/react-dom": "npm:types-react-dom@rc", - "next-secure-headers": "^2.2.0", - "typescript": "^5.2.2" - }, - "engines": { - "node": ">=18", - "npm": ">=8" - } - }, - "node_modules/@apollo/client": { - "version": "3.11.10", - "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.11.10.tgz", - "integrity": "sha512-IfGc+X4il0rDqVQBBWdxIKM+ciDCiDzBq9+Bg9z4tJMi87uF6po4v+ddiac1wP0ARgVPsFwEIGxK7jhN4pW8jg==", - "dependencies": { - "@graphql-typed-document-node/core": "^3.1.1", - "@wry/caches": "^1.0.0", - "@wry/equality": "^0.5.6", - "@wry/trie": "^0.5.0", - "graphql-tag": "^2.12.6", - "hoist-non-react-statics": "^3.3.2", - "optimism": "^0.18.0", - "prop-types": "^15.7.2", - "rehackt": "^0.1.0", - "response-iterator": "^0.2.6", - "symbol-observable": "^4.0.0", - "ts-invariant": "^0.10.3", - "tslib": "^2.3.0", - "zen-observable-ts": "^1.2.5" - }, - "peerDependencies": { - "graphql": "^15.0.0 || ^16.0.0", - "graphql-ws": "^5.5.5", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0", - "subscriptions-transport-ws": "^0.9.0 || ^0.11.0" - }, - "peerDependenciesMeta": { - "graphql-ws": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "subscriptions-transport-ws": { - "optional": true - } - } - }, - "node_modules/@apollo/experimental-nextjs-app-support": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@apollo/experimental-nextjs-app-support/-/experimental-nextjs-app-support-0.8.0.tgz", - "integrity": "sha512-uyNIkOkew0T6ukC8ycbWBeTu8gtDSD5i+NVGEHU0DIEQaToFHObYcvIxaQ/8hvWzgvnpNU/KMsApfGXA9Xkpyw==", - "dependencies": { - "server-only": "^0.0.1", - "superjson": "^1.12.2 || ^2.0.0", - "ts-invariant": "^0.10.3" - }, - "peerDependencies": { - "@apollo/client": "^3.9.0", - "next": "^13.4.1 || ^14.0.0", - "react": "^18" - } - }, - "node_modules/@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", - "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@faustwp/cli": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@faustwp/cli/-/cli-3.1.1.tgz", - "integrity": "sha512-tZgnnCgsvfhuUGB9/gZG21kiO3B0uziBqEDPAf+aADqF8Ry6SKUDamrPFvksv6nKU4vTT+gPYpWgDwK1SBpVyA==", - "dependencies": { - "archiver": "^6.0.1", - "chalk": "^4.1.2", - "dotenv-flow": "^3.2.0", - "form-data": "^4.0.0", - "fs-extra": "^11.1.1", - "glob": "^11.0.0", - "isomorphic-fetch": "^3.0.0", - "lodash": "^4.17.21", - "webpack-cli": "5.1.4" - }, - "bin": { - "faust": "dist/index.js" - }, - "engines": { - "node": ">=18", - "npm": ">=8" - } - }, - "node_modules/@faustwp/core": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@faustwp/core/-/core-3.1.0.tgz", - "integrity": "sha512-d8X4FNC/mlSsGcgib6vXHiX22K1sVtb6+4DcrzFh1t3xqEYiFNLKRdBkPMvWl+Q4PjUOxYwvUAcsUx1+6S8iJg==", - "dependencies": { - "@wordpress/hooks": "^3.14.0", - "chalk": "^4.1.2", - "classnames": "^2.3.2", - "cookie": "^0.5.0", - "deepmerge": "^4.2.2", - "fast-xml-parser": "^4.4.1", - "isomorphic-fetch": "^3.0.0", - "js-cookie": "^3.0.5", - "js-sha256": "^0.9.0", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=18", - "npm": ">=8" - }, - "peerDependencies": { - "@apollo/client": ">=3.6.6", - "next": ">=12.1.6", - "react": ">=17.0.2", - "react-dom": ">=17.0.2" - } - }, - "node_modules/@faustwp/experimental-app-router": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@faustwp/experimental-app-router/-/experimental-app-router-0.4.0.tgz", - "integrity": "sha512-pLc2mjUa/c/kf/RmVilbOP5BgC/L8TTSu5z7RabrNqlEysZXVnP5i0xBLmVNGf26NEV6VAlLwxbsprSJU+94iA==", - "engines": { - "node": ">=18", - "npm": ">=8" - }, - "peerDependencies": { - "@apollo/client": ">=3.8.0", - "@apollo/experimental-nextjs-app-support": ">=0.5.0", - "@faustwp/cli": ">=1.1.3", - "@faustwp/core": ">=1.1.2", - "next": ">=14.0.0", - "react": ">=18.0.0", - "react-dom": ">=18.0.0" - } - }, - "node_modules/@graphql-typed-document-node/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", - "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", - "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", - "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", - "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", - "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", - "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", - "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", - "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", - "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", - "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", - "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", - "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.5" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", - "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", - "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.4" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", - "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", - "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", - "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", - "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", - "cpu": [ - "wasm32" - ], - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.2.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", - "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", - "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "peer": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "peer": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@next/env": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.2.tgz", - "integrity": "sha512-Hm3jIGsoUl6RLB1vzY+dZeqb+/kWPZ+h34yiWxW0dV87l8Im/eMOwpOA+a0L78U0HM04syEjXuRlCozqpwuojQ==" - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.2.tgz", - "integrity": "sha512-b9TN7q+j5/7+rGLhFAVZiKJGIASuo8tWvInGfAd8wsULjB1uNGRCj1z1WZwwPWzVQbIKWFYqc+9L7W09qwt52w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.2.tgz", - "integrity": "sha512-caR62jNDUCU+qobStO6YJ05p9E+LR0EoXh1EEmyU69cYydsAy7drMcOlUlRtQihM6K6QfvNwJuLhsHcCzNpqtA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.2.tgz", - "integrity": "sha512-fHHXBusURjBmN6VBUtu6/5s7cCeEkuGAb/ZZiGHBLVBXMBy4D5QpM8P33Or8JD1nlOjm/ZT9sEE5HouQ0F+hUA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.2.tgz", - "integrity": "sha512-9CF1Pnivij7+M3G74lxr+e9h6o2YNIe7QtExWq1KUK4hsOLTBv6FJikEwCaC3NeYTflzrm69E5UfwEAbV2U9/g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.2.tgz", - "integrity": "sha512-tINV7WmcTUf4oM/eN3Yuu/f8jQ5C6AkueZPKeALs/qfdfX57eNv4Ij7rt0SA6iZ8+fMobVfcFVv664Op0caCCg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.2.tgz", - "integrity": "sha512-jf2IseC4WRsGkzeUw/cK3wci9pxR53GlLAt30+y+B+2qAQxMw6WAC3QrANIKxkcoPU3JFh/10uFfmoMDF9JXKg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.2.tgz", - "integrity": "sha512-wvg7MlfnaociP7k8lxLX4s2iBJm4BrNiNFhVUY+Yur5yhAJHfkS8qPPeDEUH8rQiY0PX3u/P7Q/wcg6Mv6GSAA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.2.tgz", - "integrity": "sha512-D3cNA8NoT3aWISWmo7HF5Eyko/0OdOO+VagkoJuiTk7pyX3P/b+n8XA/MYvyR+xSVcbKn68B1rY9fgqjNISqzQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==" - }, - "node_modules/@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "peer": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "peer": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "peer": true - }, - "node_modules/@types/node": { - "version": "20.17.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.8.tgz", - "integrity": "sha512-ahz2g6/oqbKalW9sPv6L2iRbhLnojxjYWspAqhjvqSWBgGebEJT5GvRmk0QXPj3sbC6rU0GTQjPLQkmR8CObvA==", - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/@types/react": { - "name": "types-react", - "version": "19.0.0-rc.1", - "resolved": "https://registry.npmjs.org/types-react/-/types-react-19.0.0-rc.1.tgz", - "integrity": "sha512-RshndUfqTW6K3STLPis8BtAYCGOkMbtvYsi90gmVNDZBXUyUc5juf2PE9LfS/JmOlUIRO8cWTS/1MTnmhjDqyQ==", - "devOptional": true, - "dependencies": { - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "name": "types-react-dom", - "version": "19.0.0-rc.1", - "resolved": "https://registry.npmjs.org/types-react-dom/-/types-react-dom-19.0.0-rc.1.tgz", - "integrity": "sha512-VSLZJl8VXCD0fAWp7DUTFUDCcZ8DVXOQmjhJMD03odgeFmu14ZQJHCXeETm3BEAhJqfgJaFkLnGkQv88sRx0fQ==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "peer": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "peer": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "peer": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "peer": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "peer": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "peer": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "peer": true, - "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" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "peer": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "peer": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "peer": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "peer": true, - "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" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "peer": true, - "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" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "peer": true, - "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" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", - "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", - "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", - "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@wordpress/hooks": { - "version": "3.58.0", - "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.58.0.tgz", - "integrity": "sha512-9LB0ZHnZRQlORttux9t/xbAskF+dk2ujqzPGsVzc92mSKpQP3K2a5Wy74fUnInguB1vLUNHT6nrNdkVom5qX1Q==", - "dependencies": { - "@babel/runtime": "^7.16.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@wry/caches": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@wry/caches/-/caches-1.0.1.tgz", - "integrity": "sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@wry/context": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.7.4.tgz", - "integrity": "sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@wry/equality": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.5.7.tgz", - "integrity": "sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@wry/trie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.5.0.tgz", - "integrity": "sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "peer": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "peer": true - }, - "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peer": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/archiver": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-6.0.2.tgz", - "integrity": "sha512-UQ/2nW7NMl1G+1UnrLypQw1VdT9XZg/ECcKPq7l+STzStrSivFIXIp34D8M5zeNGW5NoOupdYCHv6VySCPNNlw==", - "dependencies": { - "archiver-utils": "^4.0.1", - "async": "^3.2.4", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.1.2", - "tar-stream": "^3.0.0", - "zip-stream": "^5.0.1" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/archiver-utils": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-4.0.1.tgz", - "integrity": "sha512-Q4Q99idbvzmgCTEAAhi32BkOyq8iVI5EwdO0PmBDSGIzzjYNdcFn7Q7k3OzbLy4kLUPXfJtG6fO2RjftXbobBg==", - "dependencies": { - "glob": "^8.0.0", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash": "^4.17.15", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/archiver-utils/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/archiver-utils/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/b4a": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", - "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/bare-events": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", - "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", - "optional": true - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/browserslist": { - "version": "4.24.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "peer": true, - "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "peer": true - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001684", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", - "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "peer": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/classnames": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "optional": true, - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "optional": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "peer": true - }, - "node_modules/compress-commons": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-5.0.3.tgz", - "integrity": "sha512-/UIcLWvwAQyVibgpQDPtfNM3SvqN7G9elAPAV7GM0L53EbNWwWiCsWtK8Fwed/APEbptPHXs5PuW+y8Bq8lFTA==", - "dependencies": { - "crc-32": "^1.2.0", - "crc32-stream": "^5.0.0", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/copy-anything": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", - "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", - "dependencies": { - "is-what": "^4.1.8" - }, - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/crc32-stream": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-5.0.1.tgz", - "integrity": "sha512-lO1dFui+CEUh/ztYIpgpKItKW9Bb4NWakCRJrnqAbFIYD+OZAwb2VfD5T5eXMw2FNcsDHkQcNl/Wh3iVXYwU6g==", - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "devOptional": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "engines": { - "node": ">=10" - } - }, - "node_modules/dotenv-flow": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/dotenv-flow/-/dotenv-flow-3.3.0.tgz", - "integrity": "sha512-GLSvRqDZ1TGhloS6ZCZ5chdqqv/3XMqZxAnX9rliJiHn6uyJLguKeu+3M2kcagBkoVCnLWYfbR4rfFe1xSU39A==", - "dependencies": { - "dotenv": "^8.6.0" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.65", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.65.tgz", - "integrity": "sha512-PWVzBjghx7/wop6n22vS2MLU8tKGd4Q91aCEGhG/TYmW6PP5OcSXcdnxTe1NNt0T66N8D6jxh4kC8UsdzOGaIw==", - "peer": true - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/envinfo": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", - "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", - "peer": true - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "peer": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "peer": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "peer": true - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "peer": true - }, - "node_modules/fast-xml-parser": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.0.tgz", - "integrity": "sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - ], - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", - "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "peer": true - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/graphql": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.9.0.tgz", - "integrity": "sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==", - "engines": { - "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" - } - }, - "node_modules/graphql-tag": { - "version": "2.12.6", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", - "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "optional": true - }, - "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-what": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", - "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isomorphic-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", - "dependencies": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" - } - }, - "node_modules/jackspeak": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz", - "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "peer": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-cookie": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", - "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", - "engines": { - "node": ">=14" - } - }, - "node_modules/js-sha256": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", - "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "peer": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "peer": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "peer": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz", - "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "peer": true - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "peer": true - }, - "node_modules/next": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/next/-/next-15.1.2.tgz", - "integrity": "sha512-nLJDV7peNy+0oHlmY2JZjzMfJ8Aj0/dd3jCwSZS8ZiO5nkQfcZRqDrRN3U5rJtqVTQneIOGZzb6LCNrk7trMCQ==", - "dependencies": { - "@next/env": "15.1.2", - "@swc/counter": "0.1.3", - "@swc/helpers": "0.5.15", - "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001579", - "postcss": "8.4.31", - "styled-jsx": "5.1.6" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "15.1.2", - "@next/swc-darwin-x64": "15.1.2", - "@next/swc-linux-arm64-gnu": "15.1.2", - "@next/swc-linux-arm64-musl": "15.1.2", - "@next/swc-linux-x64-gnu": "15.1.2", - "@next/swc-linux-x64-musl": "15.1.2", - "@next/swc-win32-arm64-msvc": "15.1.2", - "@next/swc-win32-x64-msvc": "15.1.2", - "sharp": "^0.33.5" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.41.2", - "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "@playwright/test": { - "optional": true - }, - "babel-plugin-react-compiler": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/next-secure-headers": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/next-secure-headers/-/next-secure-headers-2.2.0.tgz", - "integrity": "sha512-C7OfZ9JdSJyYMz2ZBMI/WwNbt0qNjlFWX9afUp8nEUzbz6ez3JbeopdyxSZJZJAzVLIAfyk6n73rFpd4e22jRg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "peer": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optimism": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.18.1.tgz", - "integrity": "sha512-mLXNwWPa9dgFyDqkNi54sjDyNJ9/fTI6WGBLgnXku1vdKY/jovHfZT5r+aiVeFFLOz+foPNOm5YJ4mqgld2GBQ==", - "dependencies": { - "@wry/caches": "^1.0.0", - "@wry/context": "^0.7.0", - "@wry/trie": "^0.5.0", - "tslib": "^2.3.0" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdir-glob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", - "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", - "dependencies": { - "minimatch": "^5.1.0" - } - }, - "node_modules/readdir-glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dependencies": { - "resolve": "^1.20.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, - "node_modules/rehackt": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/rehackt/-/rehackt-0.1.0.tgz", - "integrity": "sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw==", - "peerDependencies": { - "@types/react": "*", - "react": "*" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - } - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/response-iterator": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/response-iterator/-/response-iterator-0.2.6.tgz", - "integrity": "sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "peer": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/server-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz", - "integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sharp": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", - "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.3", - "semver": "^7.6.3" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.33.5", - "@img/sharp-darwin-x64": "0.33.5", - "@img/sharp-libvips-darwin-arm64": "1.0.4", - "@img/sharp-libvips-darwin-x64": "1.0.4", - "@img/sharp-libvips-linux-arm": "1.0.5", - "@img/sharp-libvips-linux-arm64": "1.0.4", - "@img/sharp-libvips-linux-s390x": "1.0.4", - "@img/sharp-libvips-linux-x64": "1.0.4", - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", - "@img/sharp-libvips-linuxmusl-x64": "1.0.4", - "@img/sharp-linux-arm": "0.33.5", - "@img/sharp-linux-arm64": "0.33.5", - "@img/sharp-linux-s390x": "0.33.5", - "@img/sharp-linux-x64": "0.33.5", - "@img/sharp-linuxmusl-arm64": "0.33.5", - "@img/sharp-linuxmusl-x64": "0.33.5", - "@img/sharp-wasm32": "0.33.5", - "@img/sharp-win32-ia32": "0.33.5", - "@img/sharp-win32-x64": "0.33.5" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "optional": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/streamx": { - "version": "2.20.2", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.2.tgz", - "integrity": "sha512-aDGDLU+j9tJcUdPGOaHmVF1u/hhI+CsGkT02V3OKlHDV7IukOI+nTWAGkiZEKCO35rWN1wIr4tS7YFr1f4qSvA==", - "dependencies": { - "fast-fifo": "^1.3.2", - "queue-tick": "^1.0.1", - "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" - }, - "node_modules/styled-jsx": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", - "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", - "dependencies": { - "client-only": "0.0.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/superjson": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.1.tgz", - "integrity": "sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==", - "dependencies": { - "copy-anything": "^3.0.2" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, - "node_modules/terser": { - "version": "5.36.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", - "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", - "peer": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/text-decoder": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.1.tgz", - "integrity": "sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==" - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/ts-invariant": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.10.3.tgz", - "integrity": "sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==", - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" - }, - "node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "peer": true, - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "peer": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "peer": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/webpack": { - "version": "5.96.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", - "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", - "peer": true, - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", - "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^2.1.1", - "@webpack-cli/info": "^2.0.2", - "@webpack-cli/serve": "^2.0.5", - "colorette": "^2.0.14", - "commander": "^10.0.1", - "cross-spawn": "^7.0.3", - "envinfo": "^7.7.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^3.1.1", - "rechoir": "^0.8.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "engines": { - "node": ">=14" - } - }, - "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "peer": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", - "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/zen-observable": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", - "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" - }, - "node_modules/zen-observable-ts": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz", - "integrity": "sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==", - "dependencies": { - "zen-observable": "0.8.15" - } - }, - "node_modules/zip-stream": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-5.0.2.tgz", - "integrity": "sha512-LfOdrUvPB8ZoXtvOBz6DlNClfvi//b5d56mSWyJi7XbH/HfhOHfUhOqxhT/rUiR7yiktlunqRo+jY6y/cWC/5g==", - "dependencies": { - "archiver-utils": "^4.0.1", - "compress-commons": "^5.0.1", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 12.0.0" - } - } - } -} diff --git a/examples/next/app-router/package.json b/examples/next/app-router/package.json deleted file mode 100644 index b47f674d8..000000000 --- a/examples/next/app-router/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "@faustwp/app-router-example", - "private": true, - "type": "module", - "scripts": { - "dev": "faust dev", - "build": "faust build", - "generate": "faust generatePossibleTypes", - "stylesheet": "faust generateGlobalStylesheet", - "start": "faust start" - }, - "dependencies": { - "@apollo/client": "^3.8.0", - "@apollo/experimental-nextjs-app-support": "^0.8.0", - "@faustwp/cli": "^3.1.0", - "@faustwp/core": "^3.1.0", - "@faustwp/experimental-app-router": "^0.4.0", - "graphql": "^16.7.1", - "next": "^15.1.2", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "engines": { - "node": ">=18", - "npm": ">=8" - }, - "devDependencies": { - "@types/node": "^20.6.3", - "@types/react": "npm:types-react@rc", - "@types/react-dom": "npm:types-react-dom@rc", - "next-secure-headers": "^2.2.0", - "typescript": "^5.2.2" - }, - "overrides": { - "@types/react": "npm:types-react@rc", - "@types/react-dom": "npm:types-react-dom@rc" - } -} diff --git a/examples/next/app-router/possibleTypes.json b/examples/next/app-router/possibleTypes.json deleted file mode 100644 index 813085d3e..000000000 --- a/examples/next/app-router/possibleTypes.json +++ /dev/null @@ -1 +0,0 @@ -{"CategoryConnection":["RootQueryToCategoryConnection","CategoryToAncestorsCategoryConnection","CategoryToCategoryConnection","PostToCategoryConnection"],"Connection":["RootQueryToCategoryConnection","TermNodeToEnqueuedScriptConnection","TermNodeToEnqueuedStylesheetConnection","CategoryToAncestorsCategoryConnection","CategoryToCategoryConnection","CategoryToContentNodeConnection","ContentTypeToTaxonomyConnection","TaxonomyToContentTypeConnection","ContentTypeToContentNodeConnection","UserToCommentConnection","CommentToCommentConnection","UserToEnqueuedScriptConnection","UserToEnqueuedStylesheetConnection","UserToMediaItemConnection","HierarchicalContentNodeToContentNodeAncestorsConnection","HierarchicalContentNodeToContentNodeChildrenConnection","ContentNodeToEnqueuedScriptConnection","ContentNodeToEnqueuedStylesheetConnection","MediaItemToCommentConnection","UserToPageConnection","PageToCommentConnection","PageToRevisionConnection","UserToPostConnection","PostToCategoryConnection","PostToCommentConnection","PostToPostFormatConnection","PostFormatToContentNodeConnection","PostFormatToPostConnection","PostToRevisionConnection","PostToTagConnection","TagToContentNodeConnection","TagToPostConnection","PostToTermNodeConnection","UserToProjectConnection","UserToRevisionsConnection","UserToUserRoleConnection","UserToTestimonialConnection","CategoryToPostConnection","RootQueryToCommentConnection","RootQueryToContentNodeConnection","RootQueryToContentTypeConnection","RootQueryToMediaItemConnection","MenuToMenuItemConnection","MenuItemToMenuItemConnection","RootQueryToMenuItemConnection","RootQueryToMenuConnection","RootQueryToPageConnection","RootQueryToPluginConnection","RootQueryToPostFormatConnection","RootQueryToPostConnection","RootQueryToProjectConnection","RootQueryToEnqueuedScriptConnection","RootQueryToEnqueuedStylesheetConnection","RootQueryToRevisionsConnection","RootQueryToTagConnection","RootQueryToTaxonomyConnection","RootQueryToTermNodeConnection","RootQueryToTestimonialConnection","RootQueryToThemeConnection","RootQueryToUserRoleConnection","RootQueryToUserConnection"],"Edge":["TermNodeToEnqueuedScriptConnectionEdge","TermNodeToEnqueuedStylesheetConnectionEdge","CategoryToAncestorsCategoryConnectionEdge","CategoryToCategoryConnectionEdge","ContentNodeToContentTypeConnectionEdge","TaxonomyToContentTypeConnectionEdge","ContentTypeToTaxonomyConnectionEdge","ContentTypeToContentNodeConnectionEdge","ContentNodeToEditLockConnectionEdge","CommentToCommenterConnectionEdge","CommentToContentNodeConnectionEdge","CommentToParentCommentConnectionEdge","CommentToCommentConnectionEdge","UserToCommentConnectionEdge","UserToEnqueuedScriptConnectionEdge","UserToEnqueuedStylesheetConnectionEdge","NodeWithAuthorToUserConnectionEdge","HierarchicalContentNodeToContentNodeAncestorsConnectionEdge","HierarchicalContentNodeToContentNodeChildrenConnectionEdge","ContentNodeToEnqueuedScriptConnectionEdge","ContentNodeToEnqueuedStylesheetConnectionEdge","ContentNodeToEditLastConnectionEdge","HierarchicalContentNodeToParentContentNodeConnectionEdge","MediaItemToCommentConnectionEdge","UserToMediaItemConnectionEdge","NodeWithFeaturedImageToMediaItemConnectionEdge","NodeWithRevisionsToContentNodeConnectionEdge","PageToCommentConnectionEdge","PageToPreviewConnectionEdge","PageToRevisionConnectionEdge","UserToPageConnectionEdge","PostToCategoryConnectionEdge","PostToCommentConnectionEdge","PostFormatToContentNodeConnectionEdge","PostFormatToPostConnectionEdge","PostFormatToTaxonomyConnectionEdge","PostToPostFormatConnectionEdge","PostToPreviewConnectionEdge","PostToRevisionConnectionEdge","TagToContentNodeConnectionEdge","TagToPostConnectionEdge","TagToTaxonomyConnectionEdge","PostToTagConnectionEdge","PostToTermNodeConnectionEdge","UserToPostConnectionEdge","ProjectToPreviewConnectionEdge","UserToProjectConnectionEdge","UserToRevisionsConnectionEdge","UserToUserRoleConnectionEdge","TestimonialToPreviewConnectionEdge","UserToTestimonialConnectionEdge","CategoryToContentNodeConnectionEdge","CategoryToParentCategoryConnectionEdge","CategoryToPostConnectionEdge","CategoryToTaxonomyConnectionEdge","RootQueryToCategoryConnectionEdge","RootQueryToCommentConnectionEdge","RootQueryToContentNodeConnectionEdge","RootQueryToContentTypeConnectionEdge","RootQueryToMediaItemConnectionEdge","MenuItemToMenuItemConnectionEdge","MenuItemToMenuItemLinkableConnectionEdge","MenuItemToMenuConnectionEdge","MenuToMenuItemConnectionEdge","RootQueryToMenuItemConnectionEdge","RootQueryToMenuConnectionEdge","RootQueryToPageConnectionEdge","RootQueryToPluginConnectionEdge","RootQueryToPostFormatConnectionEdge","RootQueryToPostConnectionEdge","RootQueryToProjectConnectionEdge","RootQueryToEnqueuedScriptConnectionEdge","RootQueryToEnqueuedStylesheetConnectionEdge","RootQueryToRevisionsConnectionEdge","RootQueryToTagConnectionEdge","RootQueryToTaxonomyConnectionEdge","RootQueryToTermNodeConnectionEdge","RootQueryToTestimonialConnectionEdge","RootQueryToThemeConnectionEdge","RootQueryToUserRoleConnectionEdge","RootQueryToUserConnectionEdge"],"Node":["Category","EnqueuedScript","EnqueuedStylesheet","ContentType","Taxonomy","User","Comment","MediaItem","Page","Post","PostFormat","Tag","Project","UserRole","Testimonial","Menu","MenuItem","Plugin","Theme","CommentAuthor"],"PageInfo":["TermNodeToEnqueuedScriptConnectionPageInfo","TermNodeToEnqueuedStylesheetConnectionPageInfo","CategoryToAncestorsCategoryConnectionPageInfo","CategoryToCategoryConnectionPageInfo","TaxonomyToContentTypeConnectionPageInfo","ContentTypeToTaxonomyConnectionPageInfo","ContentTypeToContentNodeConnectionPageInfo","CommentToCommentConnectionPageInfo","UserToCommentConnectionPageInfo","UserToEnqueuedScriptConnectionPageInfo","UserToEnqueuedStylesheetConnectionPageInfo","HierarchicalContentNodeToContentNodeAncestorsConnectionPageInfo","HierarchicalContentNodeToContentNodeChildrenConnectionPageInfo","ContentNodeToEnqueuedScriptConnectionPageInfo","ContentNodeToEnqueuedStylesheetConnectionPageInfo","MediaItemToCommentConnectionPageInfo","UserToMediaItemConnectionPageInfo","PageToCommentConnectionPageInfo","PageToRevisionConnectionPageInfo","UserToPageConnectionPageInfo","PostToCategoryConnectionPageInfo","PostToCommentConnectionPageInfo","PostFormatToContentNodeConnectionPageInfo","PostFormatToPostConnectionPageInfo","PostToPostFormatConnectionPageInfo","PostToRevisionConnectionPageInfo","TagToContentNodeConnectionPageInfo","TagToPostConnectionPageInfo","PostToTagConnectionPageInfo","PostToTermNodeConnectionPageInfo","UserToPostConnectionPageInfo","UserToProjectConnectionPageInfo","UserToRevisionsConnectionPageInfo","UserToUserRoleConnectionPageInfo","UserToTestimonialConnectionPageInfo","CategoryToContentNodeConnectionPageInfo","CategoryToPostConnectionPageInfo","RootQueryToCategoryConnectionPageInfo","RootQueryToCommentConnectionPageInfo","RootQueryToContentNodeConnectionPageInfo","RootQueryToContentTypeConnectionPageInfo","RootQueryToMediaItemConnectionPageInfo","MenuItemToMenuItemConnectionPageInfo","MenuToMenuItemConnectionPageInfo","RootQueryToMenuItemConnectionPageInfo","RootQueryToMenuConnectionPageInfo","RootQueryToPageConnectionPageInfo","RootQueryToPluginConnectionPageInfo","RootQueryToPostFormatConnectionPageInfo","RootQueryToPostConnectionPageInfo","RootQueryToProjectConnectionPageInfo","RootQueryToEnqueuedScriptConnectionPageInfo","RootQueryToEnqueuedStylesheetConnectionPageInfo","RootQueryToRevisionsConnectionPageInfo","RootQueryToTagConnectionPageInfo","RootQueryToTaxonomyConnectionPageInfo","RootQueryToTermNodeConnectionPageInfo","RootQueryToTestimonialConnectionPageInfo","RootQueryToThemeConnectionPageInfo","RootQueryToUserRoleConnectionPageInfo","RootQueryToUserConnectionPageInfo"],"CategoryConnectionEdge":["CategoryToAncestorsCategoryConnectionEdge","CategoryToCategoryConnectionEdge","PostToCategoryConnectionEdge","CategoryToParentCategoryConnectionEdge","RootQueryToCategoryConnectionEdge"],"TermNode":["Category","PostFormat","Tag"],"UniformResourceIdentifiable":["Category","ContentType","User","MediaItem","Page","Post","PostFormat","Tag","Project","Testimonial"],"EnqueuedScriptConnection":["TermNodeToEnqueuedScriptConnection","UserToEnqueuedScriptConnection","ContentNodeToEnqueuedScriptConnection","RootQueryToEnqueuedScriptConnection"],"EnqueuedScriptConnectionEdge":["TermNodeToEnqueuedScriptConnectionEdge","UserToEnqueuedScriptConnectionEdge","ContentNodeToEnqueuedScriptConnectionEdge","RootQueryToEnqueuedScriptConnectionEdge"],"EnqueuedAsset":["EnqueuedScript","EnqueuedStylesheet"],"EnqueuedScriptConnectionPageInfo":["TermNodeToEnqueuedScriptConnectionPageInfo","UserToEnqueuedScriptConnectionPageInfo","ContentNodeToEnqueuedScriptConnectionPageInfo","RootQueryToEnqueuedScriptConnectionPageInfo"],"WPPageInfo":["TermNodeToEnqueuedScriptConnectionPageInfo","TermNodeToEnqueuedStylesheetConnectionPageInfo","CategoryToAncestorsCategoryConnectionPageInfo","CategoryToCategoryConnectionPageInfo","TaxonomyToContentTypeConnectionPageInfo","ContentTypeToTaxonomyConnectionPageInfo","ContentTypeToContentNodeConnectionPageInfo","CommentToCommentConnectionPageInfo","UserToCommentConnectionPageInfo","UserToEnqueuedScriptConnectionPageInfo","UserToEnqueuedStylesheetConnectionPageInfo","HierarchicalContentNodeToContentNodeAncestorsConnectionPageInfo","HierarchicalContentNodeToContentNodeChildrenConnectionPageInfo","ContentNodeToEnqueuedScriptConnectionPageInfo","ContentNodeToEnqueuedStylesheetConnectionPageInfo","MediaItemToCommentConnectionPageInfo","UserToMediaItemConnectionPageInfo","PageToCommentConnectionPageInfo","PageToRevisionConnectionPageInfo","UserToPageConnectionPageInfo","PostToCategoryConnectionPageInfo","PostToCommentConnectionPageInfo","PostFormatToContentNodeConnectionPageInfo","PostFormatToPostConnectionPageInfo","PostToPostFormatConnectionPageInfo","PostToRevisionConnectionPageInfo","TagToContentNodeConnectionPageInfo","TagToPostConnectionPageInfo","PostToTagConnectionPageInfo","PostToTermNodeConnectionPageInfo","UserToPostConnectionPageInfo","UserToProjectConnectionPageInfo","UserToRevisionsConnectionPageInfo","UserToUserRoleConnectionPageInfo","UserToTestimonialConnectionPageInfo","CategoryToContentNodeConnectionPageInfo","CategoryToPostConnectionPageInfo","RootQueryToCategoryConnectionPageInfo","RootQueryToCommentConnectionPageInfo","RootQueryToContentNodeConnectionPageInfo","RootQueryToContentTypeConnectionPageInfo","RootQueryToMediaItemConnectionPageInfo","MenuItemToMenuItemConnectionPageInfo","MenuToMenuItemConnectionPageInfo","RootQueryToMenuItemConnectionPageInfo","RootQueryToMenuConnectionPageInfo","RootQueryToPageConnectionPageInfo","RootQueryToPluginConnectionPageInfo","RootQueryToPostFormatConnectionPageInfo","RootQueryToPostConnectionPageInfo","RootQueryToProjectConnectionPageInfo","RootQueryToEnqueuedScriptConnectionPageInfo","RootQueryToEnqueuedStylesheetConnectionPageInfo","RootQueryToRevisionsConnectionPageInfo","RootQueryToTagConnectionPageInfo","RootQueryToTaxonomyConnectionPageInfo","RootQueryToTermNodeConnectionPageInfo","RootQueryToTestimonialConnectionPageInfo","RootQueryToThemeConnectionPageInfo","RootQueryToUserRoleConnectionPageInfo","RootQueryToUserConnectionPageInfo"],"EnqueuedStylesheetConnection":["TermNodeToEnqueuedStylesheetConnection","UserToEnqueuedStylesheetConnection","ContentNodeToEnqueuedStylesheetConnection","RootQueryToEnqueuedStylesheetConnection"],"EnqueuedStylesheetConnectionEdge":["TermNodeToEnqueuedStylesheetConnectionEdge","UserToEnqueuedStylesheetConnectionEdge","ContentNodeToEnqueuedStylesheetConnectionEdge","RootQueryToEnqueuedStylesheetConnectionEdge"],"EnqueuedStylesheetConnectionPageInfo":["TermNodeToEnqueuedStylesheetConnectionPageInfo","UserToEnqueuedStylesheetConnectionPageInfo","ContentNodeToEnqueuedStylesheetConnectionPageInfo","RootQueryToEnqueuedStylesheetConnectionPageInfo"],"DatabaseIdentifier":["Category","User","Comment","MediaItem","Page","Post","PostFormat","Tag","Project","Testimonial","Menu","MenuItem","CommentAuthor"],"HierarchicalTermNode":["Category"],"HierarchicalNode":["Category","MediaItem","Page"],"MenuItemLinkable":["Category","Page","Post","Tag"],"CategoryConnectionPageInfo":["CategoryToAncestorsCategoryConnectionPageInfo","CategoryToCategoryConnectionPageInfo","PostToCategoryConnectionPageInfo","RootQueryToCategoryConnectionPageInfo"],"ContentNodeConnection":["CategoryToContentNodeConnection","ContentTypeToContentNodeConnection","HierarchicalContentNodeToContentNodeAncestorsConnection","HierarchicalContentNodeToContentNodeChildrenConnection","PostFormatToContentNodeConnection","TagToContentNodeConnection","UserToRevisionsConnection","RootQueryToContentNodeConnection","RootQueryToRevisionsConnection"],"ContentNodeConnectionEdge":["ContentTypeToContentNodeConnectionEdge","CommentToContentNodeConnectionEdge","HierarchicalContentNodeToContentNodeAncestorsConnectionEdge","HierarchicalContentNodeToContentNodeChildrenConnectionEdge","HierarchicalContentNodeToParentContentNodeConnectionEdge","NodeWithRevisionsToContentNodeConnectionEdge","PostFormatToContentNodeConnectionEdge","TagToContentNodeConnectionEdge","UserToRevisionsConnectionEdge","CategoryToContentNodeConnectionEdge","RootQueryToContentNodeConnectionEdge","RootQueryToRevisionsConnectionEdge"],"ContentNode":["MediaItem","Page","Post","Project","Testimonial"],"OneToOneConnection":["ContentNodeToContentTypeConnectionEdge","ContentNodeToEditLockConnectionEdge","CommentToCommenterConnectionEdge","CommentToContentNodeConnectionEdge","CommentToParentCommentConnectionEdge","NodeWithAuthorToUserConnectionEdge","ContentNodeToEditLastConnectionEdge","HierarchicalContentNodeToParentContentNodeConnectionEdge","NodeWithFeaturedImageToMediaItemConnectionEdge","NodeWithRevisionsToContentNodeConnectionEdge","PageToPreviewConnectionEdge","PostFormatToTaxonomyConnectionEdge","PostToPreviewConnectionEdge","TagToTaxonomyConnectionEdge","ProjectToPreviewConnectionEdge","TestimonialToPreviewConnectionEdge","CategoryToParentCategoryConnectionEdge","CategoryToTaxonomyConnectionEdge","MenuItemToMenuItemLinkableConnectionEdge","MenuItemToMenuConnectionEdge"],"ContentTypeConnectionEdge":["ContentNodeToContentTypeConnectionEdge","TaxonomyToContentTypeConnectionEdge","RootQueryToContentTypeConnectionEdge"],"TaxonomyConnection":["ContentTypeToTaxonomyConnection","RootQueryToTaxonomyConnection"],"TaxonomyConnectionEdge":["ContentTypeToTaxonomyConnectionEdge","PostFormatToTaxonomyConnectionEdge","TagToTaxonomyConnectionEdge","CategoryToTaxonomyConnectionEdge","RootQueryToTaxonomyConnectionEdge"],"ContentTypeConnection":["TaxonomyToContentTypeConnection","RootQueryToContentTypeConnection"],"ContentTypeConnectionPageInfo":["TaxonomyToContentTypeConnectionPageInfo","RootQueryToContentTypeConnectionPageInfo"],"TaxonomyConnectionPageInfo":["ContentTypeToTaxonomyConnectionPageInfo","RootQueryToTaxonomyConnectionPageInfo"],"ContentNodeConnectionPageInfo":["ContentTypeToContentNodeConnectionPageInfo","HierarchicalContentNodeToContentNodeAncestorsConnectionPageInfo","HierarchicalContentNodeToContentNodeChildrenConnectionPageInfo","PostFormatToContentNodeConnectionPageInfo","TagToContentNodeConnectionPageInfo","UserToRevisionsConnectionPageInfo","CategoryToContentNodeConnectionPageInfo","RootQueryToContentNodeConnectionPageInfo","RootQueryToRevisionsConnectionPageInfo"],"UserConnectionEdge":["ContentNodeToEditLockConnectionEdge","NodeWithAuthorToUserConnectionEdge","ContentNodeToEditLastConnectionEdge","RootQueryToUserConnectionEdge"],"Commenter":["User","CommentAuthor"],"CommentConnection":["UserToCommentConnection","CommentToCommentConnection","MediaItemToCommentConnection","PageToCommentConnection","PostToCommentConnection","RootQueryToCommentConnection"],"CommentConnectionEdge":["CommentToParentCommentConnectionEdge","CommentToCommentConnectionEdge","UserToCommentConnectionEdge","MediaItemToCommentConnectionEdge","PageToCommentConnectionEdge","PostToCommentConnectionEdge","RootQueryToCommentConnectionEdge"],"CommenterConnectionEdge":["CommentToCommenterConnectionEdge"],"CommentConnectionPageInfo":["CommentToCommentConnectionPageInfo","UserToCommentConnectionPageInfo","MediaItemToCommentConnectionPageInfo","PageToCommentConnectionPageInfo","PostToCommentConnectionPageInfo","RootQueryToCommentConnectionPageInfo"],"MediaItemConnection":["UserToMediaItemConnection","RootQueryToMediaItemConnection"],"MediaItemConnectionEdge":["UserToMediaItemConnectionEdge","NodeWithFeaturedImageToMediaItemConnectionEdge","RootQueryToMediaItemConnectionEdge"],"NodeWithTemplate":["MediaItem","Page","Post","Project","Testimonial"],"ContentTemplate":["DefaultTemplate","Template_Blank","Template_BlogAlternative"],"NodeWithTitle":["MediaItem","Page","Post","Project","Testimonial"],"NodeWithAuthor":["MediaItem","Page","Post","Project","Testimonial"],"NodeWithComments":["MediaItem","Page","Post"],"HierarchicalContentNode":["MediaItem","Page"],"MediaItemConnectionPageInfo":["UserToMediaItemConnectionPageInfo","RootQueryToMediaItemConnectionPageInfo"],"PageConnection":["UserToPageConnection","PageToRevisionConnection","RootQueryToPageConnection"],"PageConnectionEdge":["PageToPreviewConnectionEdge","PageToRevisionConnectionEdge","UserToPageConnectionEdge","RootQueryToPageConnectionEdge"],"Previewable":["Page","Post","Project","Testimonial"],"NodeWithContentEditor":["Page","Post"],"NodeWithFeaturedImage":["Page","Post","Project"],"NodeWithRevisions":["Page","Post"],"NodeWithPageAttributes":["Page"],"NodeWithEditorBlocks":["Page","Post"],"EditorBlock":["CoreLegacyWidget","CoreWidgetGroup","CoreArchives","CoreAvatar","CoreBlock","CoreCalendar","CoreCategories","CoreCommentAuthorName","CoreCommentContent","CoreCommentDate","CoreCommentEditLink","CoreCommentReplyLink","CoreCommentTemplate","CoreComments","CoreCommentsPagination","CoreCommentsPaginationNext","CoreCommentsPaginationNumbers","CoreCommentsPaginationPrevious","CoreCommentsTitle","CoreCover","CoreFile","CoreGallery","CoreHeading","CoreHomeLink","CoreImage","CoreLatestComments","CoreLatestPosts","CoreLoginout","CoreNavigation","CoreNavigationLink","CoreNavigationSubmenu","CorePageList","CorePattern","CorePostAuthor","CorePostAuthorBiography","CorePostAuthorName","CorePostCommentsForm","CorePostContent","CorePostDate","CorePostExcerpt","CorePostFeaturedImage","CorePostNavigationLink","CorePostTemplate","CorePostTerms","CorePostTitle","CoreQuery","CoreQueryNoResults","CoreQueryPagination","CoreQueryPaginationNext","CoreQueryPaginationNumbers","CoreQueryPaginationPrevious","CoreQueryTitle","CoreReadMore","CoreRss","CoreSearch","CoreShortcode","CoreSiteLogo","CoreSiteTagline","CoreSiteTitle","CoreSocialLink","CoreTagCloud","CoreTemplatePart","CoreTermDescription","CoreAudio","CoreButton","CoreButtons","CoreCode","CoreColumn","CoreColumns","CoreEmbed","CoreFreeform","CoreGroup","CoreHtml","CoreList","CoreListItem","CoreMediaText","CoreMissing","CoreMore","CoreNextpage","CorePageListItem","CoreParagraph","CorePreformatted","CorePullquote","CoreQuote","CoreSeparator","CoreSocialLinks","CoreSpacer","CoreTable","CoreTextColumns","CoreVerse","CoreVideo","CorePostComments"],"NodeWithPageEditorBlocks":["Page"],"PageEditorBlock":["CoreLegacyWidget","CoreWidgetGroup","CoreArchives","CoreAvatar","CoreBlock","CoreCalendar","CoreCategories","CoreCommentAuthorName","CoreCommentContent","CoreCommentDate","CoreCommentEditLink","CoreCommentReplyLink","CoreCommentTemplate","CoreComments","CoreCommentsPagination","CoreCommentsPaginationNext","CoreCommentsPaginationNumbers","CoreCommentsPaginationPrevious","CoreCommentsTitle","CoreCover","CoreFile","CoreGallery","CoreHeading","CoreHomeLink","CoreImage","CoreLatestComments","CoreLatestPosts","CoreLoginout","CoreNavigation","CoreNavigationLink","CoreNavigationSubmenu","CorePageList","CorePattern","CorePostAuthor","CorePostAuthorBiography","CorePostAuthorName","CorePostCommentsForm","CorePostContent","CorePostDate","CorePostExcerpt","CorePostFeaturedImage","CorePostNavigationLink","CorePostTemplate","CorePostTerms","CorePostTitle","CoreQuery","CoreQueryNoResults","CoreQueryPagination","CoreQueryPaginationNext","CoreQueryPaginationNumbers","CoreQueryPaginationPrevious","CoreQueryTitle","CoreReadMore","CoreRss","CoreSearch","CoreShortcode","CoreSiteLogo","CoreSiteTagline","CoreSiteTitle","CoreSocialLink","CoreTagCloud","CoreTemplatePart","CoreTermDescription","CoreAudio","CoreButton","CoreButtons","CoreCode","CoreColumn","CoreColumns","CoreEmbed","CoreFreeform","CoreGroup","CoreHtml","CoreList","CoreListItem","CoreMediaText","CoreMissing","CoreMore","CoreNextpage","CorePageListItem","CoreParagraph","CorePreformatted","CorePullquote","CoreQuote","CoreSeparator","CoreSocialLinks","CoreSpacer","CoreTable","CoreTextColumns","CoreVerse","CoreVideo","CorePostComments"],"PageConnectionPageInfo":["PageToRevisionConnectionPageInfo","UserToPageConnectionPageInfo","RootQueryToPageConnectionPageInfo"],"PostConnection":["UserToPostConnection","PostFormatToPostConnection","PostToRevisionConnection","TagToPostConnection","CategoryToPostConnection","RootQueryToPostConnection"],"PostConnectionEdge":["PostFormatToPostConnectionEdge","PostToPreviewConnectionEdge","PostToRevisionConnectionEdge","TagToPostConnectionEdge","UserToPostConnectionEdge","CategoryToPostConnectionEdge","RootQueryToPostConnectionEdge"],"NodeWithExcerpt":["Post"],"NodeWithTrackbacks":["Post"],"NodeWithPostEditorBlocks":["Post"],"PostEditorBlock":["CoreLegacyWidget","CoreWidgetGroup","CoreArchives","CoreAvatar","CoreBlock","CoreCalendar","CoreCategories","CoreCommentAuthorName","CoreCommentContent","CoreCommentDate","CoreCommentEditLink","CoreCommentReplyLink","CoreCommentTemplate","CoreComments","CoreCommentsPagination","CoreCommentsPaginationNext","CoreCommentsPaginationNumbers","CoreCommentsPaginationPrevious","CoreCommentsTitle","CoreCover","CoreFile","CoreGallery","CoreHeading","CoreHomeLink","CoreImage","CoreLatestComments","CoreLatestPosts","CoreLoginout","CoreNavigation","CoreNavigationLink","CoreNavigationSubmenu","CorePageList","CorePattern","CorePostAuthor","CorePostAuthorBiography","CorePostAuthorName","CorePostCommentsForm","CorePostContent","CorePostDate","CorePostExcerpt","CorePostFeaturedImage","CorePostNavigationLink","CorePostTemplate","CorePostTerms","CorePostTitle","CoreQuery","CoreQueryNoResults","CoreQueryPagination","CoreQueryPaginationNext","CoreQueryPaginationNumbers","CoreQueryPaginationPrevious","CoreQueryTitle","CoreReadMore","CoreRss","CoreSearch","CoreShortcode","CoreSiteLogo","CoreSiteTagline","CoreSiteTitle","CoreSocialLink","CoreTagCloud","CoreTemplatePart","CoreTermDescription","CoreAudio","CoreButton","CoreButtons","CoreCode","CoreColumn","CoreColumns","CoreEmbed","CoreFreeform","CoreGroup","CoreHtml","CoreList","CoreListItem","CoreMediaText","CoreMissing","CoreMore","CoreNextpage","CorePageListItem","CoreParagraph","CorePreformatted","CorePullquote","CoreQuote","CoreSeparator","CoreSocialLinks","CoreSpacer","CoreTable","CoreTextColumns","CoreVerse","CoreVideo","CorePostComments"],"PostFormatConnection":["PostToPostFormatConnection","RootQueryToPostFormatConnection"],"PostFormatConnectionEdge":["PostToPostFormatConnectionEdge","RootQueryToPostFormatConnectionEdge"],"PostConnectionPageInfo":["PostFormatToPostConnectionPageInfo","PostToRevisionConnectionPageInfo","TagToPostConnectionPageInfo","UserToPostConnectionPageInfo","CategoryToPostConnectionPageInfo","RootQueryToPostConnectionPageInfo"],"PostFormatConnectionPageInfo":["PostToPostFormatConnectionPageInfo","RootQueryToPostFormatConnectionPageInfo"],"TagConnection":["PostToTagConnection","RootQueryToTagConnection"],"TagConnectionEdge":["PostToTagConnectionEdge","RootQueryToTagConnectionEdge"],"TagConnectionPageInfo":["PostToTagConnectionPageInfo","RootQueryToTagConnectionPageInfo"],"TermNodeConnection":["PostToTermNodeConnection","RootQueryToTermNodeConnection"],"TermNodeConnectionEdge":["PostToTermNodeConnectionEdge","RootQueryToTermNodeConnectionEdge"],"TermNodeConnectionPageInfo":["PostToTermNodeConnectionPageInfo","RootQueryToTermNodeConnectionPageInfo"],"ProjectConnection":["UserToProjectConnection","RootQueryToProjectConnection"],"ProjectConnectionEdge":["ProjectToPreviewConnectionEdge","UserToProjectConnectionEdge","RootQueryToProjectConnectionEdge"],"ProjectConnectionPageInfo":["UserToProjectConnectionPageInfo","RootQueryToProjectConnectionPageInfo"],"UserRoleConnection":["UserToUserRoleConnection","RootQueryToUserRoleConnection"],"UserRoleConnectionEdge":["UserToUserRoleConnectionEdge","RootQueryToUserRoleConnectionEdge"],"UserRoleConnectionPageInfo":["UserToUserRoleConnectionPageInfo","RootQueryToUserRoleConnectionPageInfo"],"TestimonialConnection":["UserToTestimonialConnection","RootQueryToTestimonialConnection"],"TestimonialConnectionEdge":["TestimonialToPreviewConnectionEdge","UserToTestimonialConnectionEdge","RootQueryToTestimonialConnectionEdge"],"TestimonialConnectionPageInfo":["UserToTestimonialConnectionPageInfo","RootQueryToTestimonialConnectionPageInfo"],"MenuItemConnection":["MenuToMenuItemConnection","MenuItemToMenuItemConnection","RootQueryToMenuItemConnection"],"MenuItemConnectionEdge":["MenuItemToMenuItemConnectionEdge","MenuToMenuItemConnectionEdge","RootQueryToMenuItemConnectionEdge"],"MenuItemConnectionPageInfo":["MenuItemToMenuItemConnectionPageInfo","MenuToMenuItemConnectionPageInfo","RootQueryToMenuItemConnectionPageInfo"],"MenuItemLinkableConnectionEdge":["MenuItemToMenuItemLinkableConnectionEdge"],"MenuItemObjectUnion":["Post","Page","Category","Tag"],"MenuConnectionEdge":["MenuItemToMenuConnectionEdge","RootQueryToMenuConnectionEdge"],"MenuConnection":["RootQueryToMenuConnection"],"MenuConnectionPageInfo":["RootQueryToMenuConnectionPageInfo"],"PluginConnection":["RootQueryToPluginConnection"],"PluginConnectionEdge":["RootQueryToPluginConnectionEdge"],"PluginConnectionPageInfo":["RootQueryToPluginConnectionPageInfo"],"ThemeConnection":["RootQueryToThemeConnection"],"ThemeConnectionEdge":["RootQueryToThemeConnectionEdge"],"ThemeConnectionPageInfo":["RootQueryToThemeConnectionPageInfo"],"UserConnection":["RootQueryToUserConnection"],"UserConnectionPageInfo":["RootQueryToUserConnectionPageInfo"],"BlockWithSupportsAnchor":["CoreCover","CoreCoverAttributes","CoreFile","CoreFileAttributes","CoreGallery","CoreGalleryAttributes","CoreHeading","CoreHeadingAttributes","CoreImage","CoreImageAttributes","CoreAudio","CoreAudioAttributes","CoreButton","CoreButtonAttributes","CoreButtons","CoreButtonsAttributes","CoreCode","CoreCodeAttributes","CoreColumn","CoreColumnAttributes","CoreColumns","CoreColumnsAttributes","CoreGroup","CoreGroupAttributes","CoreList","CoreListAttributes","CoreMediaText","CoreMediaTextAttributes","CoreParagraph","CoreParagraphAttributes","CorePreformatted","CorePreformattedAttributes","CorePullquote","CorePullquoteAttributes","CoreQuote","CoreQuoteAttributes","CoreSeparator","CoreSeparatorAttributes","CoreSocialLinks","CoreSocialLinksAttributes","CoreSpacer","CoreSpacerAttributes","CoreTable","CoreTableAttributes","CoreVerse","CoreVerseAttributes","CoreVideo","CoreVideoAttributes"]} \ No newline at end of file diff --git a/examples/next/app-router/tsconfig.json b/examples/next/app-router/tsconfig.json deleted file mode 100644 index a50f6248d..000000000 --- a/examples/next/app-router/tsconfig.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "compilerOptions": { - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "types": [ - "react-dom/experimental" - ], - "allowJs": true, - "skipLibCheck": true, - "strict": false, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "incremental": true, - "esModuleInterop": true, - "module": "ESNext", - "moduleResolution": "Bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "paths": { - "@/*": [ - "./*" - ] - }, - "plugins": [ - { - "name": "next" - } - ], - "target": "ES2017" - }, - "include": [ - "next-env.d.ts", - ".next/types/**/*.ts", - "**/*.ts", - "**/*.tsx" - ], - "exclude": [ - "node_modules" - ] -} diff --git a/package-lock.json b/package-lock.json index 0c445d60d..54efa6ffe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,7 +34,6 @@ "packages/blocks", "packages/block-editor-utils", "packages/faustwp-cli", - "packages/experimental-app-router", "packages/faustwp-core", "examples/next/faustwp-getting-started", "plugins/faustwp" @@ -567,33 +566,6 @@ } } }, - "node_modules/@apollo/client-react-streaming": { - "version": "0.11.5", - "resolved": "https://registry.npmjs.org/@apollo/client-react-streaming/-/client-react-streaming-0.11.5.tgz", - "integrity": "sha512-HK794oSbEdKa0e13E6rRTJY29da9FZnHAb/YZa7r+0/9EMbbEWe8Ll6BsBh1xN2RAR6BHJhZbo0c8yRMLnrGVQ==", - "dev": true, - "dependencies": { - "ts-invariant": "^0.10.3" - }, - "peerDependencies": { - "@apollo/client": "^3.10.4", - "react": "^18 || >=19.0.0-rc <19.0.0" - } - }, - "node_modules/@apollo/experimental-nextjs-app-support": { - "version": "0.11.5", - "resolved": "https://registry.npmjs.org/@apollo/experimental-nextjs-app-support/-/experimental-nextjs-app-support-0.11.5.tgz", - "integrity": "sha512-ifPDAQ/o+yko5UMhcH02yzR5WRkI0xocPMNMfKGjEDy7yNdrnd5o//m3B2oaiUMPOSOnqvlBO94CleeiFB5SoQ==", - "dev": true, - "dependencies": { - "@apollo/client-react-streaming": "0.11.5" - }, - "peerDependencies": { - "@apollo/client": "^3.10.4", - "next": "^13.4.1 || ^14.0.0 || ^15.0.0-rc.0", - "react": "^18 || >=19.0.0-rc <19.0.0" - } - }, "node_modules/@ariakit/core": { "version": "0.3.11", "resolved": "https://registry.npmjs.org/@ariakit/core/-/core-0.3.11.tgz", @@ -1610,10 +1582,6 @@ "resolved": "packages/faustwp-core", "link": true }, - "node_modules/@faustwp/experimental-app-router": { - "resolved": "packages/experimental-app-router", - "link": true - }, "node_modules/@faustwp/getting-started-example": { "resolved": "examples/next/faustwp-getting-started", "link": true @@ -16624,12 +16592,6 @@ "node": ">=6" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true - }, "node_modules/package-manager-detector": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.2.tgz", @@ -19276,6 +19238,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "dev": true, + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -19298,12 +19261,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true - }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -21630,7 +21587,7 @@ }, "packages/blocks": { "name": "@faustwp/blocks", - "version": "5.0.0", + "version": "6.0.0", "license": "MIT", "devDependencies": { "@testing-library/jest-dom": "^5.16.5", @@ -21762,6 +21719,7 @@ "packages/experimental-app-router": { "name": "@faustwp/experimental-app-router", "version": "0.5.0", + "extraneous": true, "license": "MIT", "devDependencies": { "@apollo/client": "^3.8.0", @@ -21790,223 +21748,6 @@ "react-dom": ">=18.0.0" } }, - "packages/experimental-app-router/node_modules/@types/node": { - "version": "20.16.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.14.tgz", - "integrity": "sha512-vtgGzjxLF7QT88qRHtXMzCWpAAmwonE7fwgVjFtXosUva2oSpnIEc3gNO9P7uIfOxKnii2f79/xtOnfreYtDaA==", - "dev": true, - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "packages/experimental-app-router/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "packages/experimental-app-router/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "packages/experimental-app-router/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "packages/experimental-app-router/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "packages/experimental-app-router/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "packages/experimental-app-router/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "packages/experimental-app-router/node_modules/concurrently": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", - "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "date-fns": "^2.30.0", - "lodash": "^4.17.21", - "rxjs": "^7.8.1", - "shell-quote": "^1.8.1", - "spawn-command": "0.0.2", - "supports-color": "^8.1.1", - "tree-kill": "^1.2.2", - "yargs": "^17.7.2" - }, - "bin": { - "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" - }, - "engines": { - "node": "^14.13.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" - } - }, - "packages/experimental-app-router/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "packages/experimental-app-router/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "packages/experimental-app-router/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "packages/experimental-app-router/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true - }, - "packages/experimental-app-router/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "packages/experimental-app-router/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "packages/experimental-app-router/node_modules/rimraf": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", - "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", - "dev": true, - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "packages/experimental-app-router/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "packages/faustwp-cli": { "name": "@faustwp/cli", "version": "3.1.1", @@ -23865,7 +23606,7 @@ }, "plugins/faustwp": { "name": "@faustwp/wordpress-plugin", - "version": "1.5.0" + "version": "1.6.0" } } } diff --git a/package.json b/package.json index 57a0cdc46..a61a14906 100644 --- a/package.json +++ b/package.json @@ -10,21 +10,19 @@ "packages/blocks", "packages/block-editor-utils", "packages/faustwp-cli", - "packages/experimental-app-router", "packages/faustwp-core", "examples/next/faustwp-getting-started", "plugins/faustwp" ] }, "scripts": { - "build": "npm run build --workspace=@faustwp/cli --workspace=@faustwp/core --workspace=@faustwp/blocks --workspace=@faustwp/block-editor-utils --workspace=@faustwp/experimental-app-router", + "build": "npm run build --workspace=@faustwp/cli --workspace=@faustwp/core --workspace=@faustwp/blocks --workspace=@faustwp/block-editor-utils", "build:faust-cli": "npm run build --workspace=@faustwp/cli", "build:faust-core": "npm run build --workspace=@faustwp/core", "build:faust-blocks": "npm run build --workspace=@faustwp/blocks", - "build:experimental-app-router": "npm run build --workspace=@faustwp/experimental-app-router", - "clean": "npm run clean --workspace=@faustwp/cli --workspace=@faustwp/core --workspace=@faustwp/experimental-app-router --workspace=@faustwp/block-editor-utils", + "clean": "npm run clean --workspace=@faustwp/cli --workspace=@faustwp/core --workspace=@faustwp/block-editor-utils", "clean:examples": "rimraf examples/**/node_modules", - "format": "npm run format --workspace=@faustwp/cli --workspace=@faustwp/core --workspace=@faustwp/experimental-app-router --workspace=@faustwp/block-editor-utils", + "format": "npm run format --workspace=@faustwp/cli --workspace=@faustwp/core --workspace=@faustwp/block-editor-utils", "build:faust-block-editor-utils": "npm run build --workspace=@faustwp/block-editor-utils", "dev": "npm run build && npm run dev:next:getting-started", "dev:next:getting-started": "rimraf examples/next/faustwp-getting-started/.next && npm run dev ---workspace=examples/next/faustwp-getting-started", @@ -35,8 +33,8 @@ "version": "changeset version && node scripts/versionPlugin.js", "version:nightly": "changeset version --snapshot && node scripts/versionPlugin.js", "version:status": "changeset status", - "release": "npm run build && npm run build:experimental-app-router && changeset publish", - "release:nightly": "npm run build && npm run build:experimental-app-router && changeset publish --tag canary", + "release": "npm run build && changeset publish", + "release:nightly": "npm run build && changeset publish --tag canary", "lint": "eslint ./packages --ext js,jsx,ts,tsx --max-warnings=0", "lint:fix": "eslint ./packages --ext js,jsx,ts,tsx --max-warnings=0 --fix" }, diff --git a/packages/experimental-app-router/.eslintignore b/packages/experimental-app-router/.eslintignore deleted file mode 100644 index 45768ab52..000000000 --- a/packages/experimental-app-router/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -dist -node_modules -/*.js -/*.ts -/*.d.ts diff --git a/packages/experimental-app-router/.gitignore b/packages/experimental-app-router/.gitignore deleted file mode 100644 index 0e75fe557..000000000 --- a/packages/experimental-app-router/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -dist -coverage diff --git a/packages/experimental-app-router/.npmignore b/packages/experimental-app-router/.npmignore deleted file mode 100644 index 2c643b6a0..000000000 --- a/packages/experimental-app-router/.npmignore +++ /dev/null @@ -1,8 +0,0 @@ -src/**/* -tests/**/* -.gitignore -.eslintignore -jest.config.js -jest.setup.ts -tsconfig.json -coverage diff --git a/packages/experimental-app-router/CHANGELOG.md b/packages/experimental-app-router/CHANGELOG.md deleted file mode 100644 index 963d4783b..000000000 --- a/packages/experimental-app-router/CHANGELOG.md +++ /dev/null @@ -1,207 +0,0 @@ -# @faustwp/experimental-app-router - -## 0.6.0 - -### Minor Changes - -- 5457479: --- - - ## '@faustwp/experimental-app-router': minor - - Update @faustwp/experimental-app-router to account for next 15 changes to cookies and update NextResponse import - - Notable changes: - - - Adding await to all cookies requests as per Next documentation: https://nextjs.org/docs/app/api-reference/functions/cookies - - ``` - import { cookies } from 'next/headers' - - export default async function Page() { - const cookieStore = await cookies() - const theme = cookieStore.get('theme') - return '...' - } - ``` - - - Files changed: - - - packages/experimental-app-router/src/server-actions/logoutAction.ts - - packages/experimental-app-router/src/server-actions/utils/setRefreshToken.ts - - packages/experimental-app-router/src/server/auth/fetchTokens.ts - - packages/experimental-app-router/src/server/routeHandler/tokenHandler.ts - - - Updated Next App Router example to use latest next version and React 19 RC. - - Updated Example Login form using React 19s useActionState - - Updated Awaiting of params for Next 15 - - Files Changed: - - examples/next/app-router/app/login/page.tsx - - examples/next/app-router/package.json - - examples/next/app-router/[slug]hasPreviewProps.ts (made async) - - examples/next/app-router/[slug]page.tsx - -## 0.5.0 - -### Minor Changes - -- e22b87d: **@faustwp/cli**: Migrates `glob-promise` dependency to Promise support. - - **@faustwp/experimental-app-router**: Update peer dependency of `@apollo/experimental-nextjs-app-support >=0.11.5`. - -## 0.4.0 - -### Minor Changes - -- 53bb9a6d: Updated dependencies, peerDependencies and devDependencies to better support local development and debugging. - -## 0.3.1 - -### Patch Changes - -- aee31a5: Fixed issue where Faust's route handler failed to retrieve a token when trailingSlash is set to true in next.config.js. - -## 0.3.0 - -### Minor Changes - -- 4cba024: Changed the `sameSite` property on the refresh token cookie from `strict` to `lax` for requests originating from WordPress. - -## 0.2.2 - -### Patch Changes - -- 626207b: Added: New util for fetching data on the client side. In a client component (`use client`), you can now use Apollo's `useQuery` to fetch data once your application is wrapped with the `` component. This new component is available via: - - ```tsx - import { FaustProvider } from '@faustwp/experimental-app-router/ssr'; - ``` - -## 0.2.1 - -### Patch Changes - -- 6276c80: Fix broken build from 0.2.0 - -## 0.2.0 - -### Minor Changes - -- 6e43598: **BREAKING**: Updated the following peer dependencies to new required minimums: - - - `@apollo/experimental-nextjs-app-support`: `0.4.1` -> `0.5.0` - - `next`: `12.1.6` -> `14.0.0` - - `react`: `17.0.2` -> `18.0.0` - - `react-dom`: `17.0.2` -> `18.0.0` - -- 6e43598: **BREAKING**: This package now requires **Node 18+** - -## 0.1.0 - -### Minor Changes - -- 77c5d4f: **BREAKING**: Removed `cjs` support. The experimental app router package now is ESM only. - -### Patch Changes - -- 77c5d4f: Fixed an issue where the Apollo Client was being shipped to the browser client bundle resulting in large bundle sizes (150kb+). For more context: https://github.com/apollographql/apollo-client-nextjs/issues/95 - -## 0.0.4 - -### Patch Changes - -- b2ad517: Added the `onLogin` server action to login a user: - - ```tsx - import { onLogin } from '@faustwp/experimental-app-router'; - -
-
- - -
- -
- - -
- - -
; - ``` - -- Updated dependencies [b201ba2] - - @faustwp/cli@1.1.3 - -## 0.0.3 - -### Patch Changes - -- a1b6fc0: Introduced a new API handler for App router projects called `faustRouteHandler`. It can be used by creating a file `/app/api/faust/[route]/route.js` with the following contents: - - ```js - // /app/api/faust/[route]/route.js - import { faustRouteHandler } from '@faustwp/experimental-app-router'; - - const { GET, POST } = faustRouteHandler; - - export { GET, POST }; - ``` - -- a1b6fc0: Created `getAuthClient` for making authenticated server side requests in the Next.js App Router. It can be used like: - - ```js - import { getAuthClient } from '@faustwp/experimental-app-router'; - - // app/my-account/posts/page.js - export default async function Page() { - const client = await getAuthClient(); - - if (!client) { - return <>You must be authenticated to view this page!; - } - - const { data } = await client.query({ - query: gql` - query GetMyPosts { - viewer { - posts { - nodes { - id - title - } - } - } - } - `, - }); - - return( - <> -

My posts

-
    - {data.viewer.posts.nodes.map((post) => ( -
  • {post.title}
  • - ))} -
- - ) - ``` - - **Note:** Our login/logout utils are still in the works. - -- Updated dependencies [a419252] -- Updated dependencies [cf887d3] -- Updated dependencies [795d956] - - @faustwp/core@1.1.2 - -## 0.0.2 - -### Patch Changes - -- 3267c87: Added the `getClient` export that can be used to fetch data from your WordPress site -- Updated dependencies [176bc82] -- Updated dependencies [3f5cee8] -- Updated dependencies [176bc82] -- Updated dependencies [3810bbb] - - @faustwp/core@1.1.1 - - @faustwp/cli@1.1.1 diff --git a/packages/experimental-app-router/README.md b/packages/experimental-app-router/README.md index e047faea9..670d04dce 100644 --- a/packages/experimental-app-router/README.md +++ b/packages/experimental-app-router/README.md @@ -4,32 +4,16 @@ -

-

- - - - - - -

- > [!CAUTION] > This package has been **deprecated** due to lack of Apollo support for React Server Components and Next's App Router. The team is working on [tooling to replace Faust](https://github.com/wpengine/hwptoolkit) and this will include App Router support. You may continue to use this package though it will not receive any further bug fixes or security patches. If you need bug fixes or security updates we'd recommend copying the source code of this package directly into your project for use or use a tool such as [`patch-package`](https://www.npmjs.com/package/patch-package). -This is an **experimental** collection of utilities to support Next.js' App Router feature in Faust. To get started, please visit the docs here: - -## Documentation +An archive of this plugin and various resources is available on the [`archive-experimental-app-router`](https://github.com/wpengine/faustjs/tree/archive-experimental-app-router/packages/experimental-app-router) branch. -- [Tutorial](./docs/getting-started.md) -- Reference - - [`faustRouteHandler`](./docs/faustroutehandler.md) - - [`getAuthClient`](./docs/getauthclient.md) - - [`getClient`](./docs/getclient.md) - - [`onLogin` Server Action](./docs/onlogin-server-action.md) - - [`onLogout` Server Action](./docs/onlogout-server-action.md) +- [Code](https://github.com/wpengine/faustjs/tree/archive-experimental-app-router/packages/experimental-app-router/src) +- [Documentation](https://github.com/wpengine/faustjs/tree/archive-experimental-app-router/packages/experimental-app-router/docs) +- [Examples](https://github.com/wpengine/faustjs/tree/archive-experimental-app-router/examples/next/app-router) diff --git a/packages/experimental-app-router/docs/faustroutehandler.md b/packages/experimental-app-router/docs/faustroutehandler.md deleted file mode 100644 index c5e0afbac..000000000 --- a/packages/experimental-app-router/docs/faustroutehandler.md +++ /dev/null @@ -1,31 +0,0 @@ -# `faustRouteHandler` - -`faustRouteHandler` is an API handler for App router projects. It's main purpose is to manage Faust.js API logic, such as authentication and internal route handling. - -## Usage - -Create a file `/app/api/faust/[route]/route.js` with the following contents: - -```js - import { faustRouteHandler } from '@faustwp/experimental-app-router'; - - const { GET, POST } = faustRouteHandler; - - export { GET, POST }; -``` - -## Technical Reference - -The `faustRouteHandler` is an object with the following properties: - -`GET` - -Handles GET requests over the `/app/api/faust/*` endpoint. - -`POST` - -Handle POST requests over the `/app/api/faust/*` endpoint. - -## Additional Context - -- [Next.js Route handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers) diff --git a/packages/experimental-app-router/docs/getauthclient.md b/packages/experimental-app-router/docs/getauthclient.md deleted file mode 100644 index 0de30b53c..000000000 --- a/packages/experimental-app-router/docs/getauthclient.md +++ /dev/null @@ -1,56 +0,0 @@ -# `getAuthClient` - -`getAuthClient` is a function that returns the `ApolloClient` making it available for use. It is used for making authenticated server side requests in the Next.js App Router to the WordPress backend and is part of the `@faustwp/experimental-app-router` package. - -## Usage - -Here is an example layout that imports `getAuthClient` and uses `query` to query WPGraphQL: - -```js -import { getAuthClient } from "@faustwp/experimental-app-router"; - -// app/my-account/posts/page.js -export default async function Page() { - const client = await getAuthClient(); - - if (!client) { - return <>You must be authenticated to view this page!; - } - - const { data } = await client.query({ - query: gql` - query GetMyPosts { - viewer { - posts { - nodes { - id - title - } - } - } - } - `, - }); - - return ( - <> -

My posts

-
    - {data.viewer.posts.nodes.map((post) => ( -
  • {post.title}
  • - ))} -
- - ); -} -``` - -## Technical Reference - -`getAuthClient(): ApolloClient | null` - -The `getAuthClient` function returns the `ApolloClient`, making it available for use. - -You can use the `ApolloClient` to perform authenticated queries for data using the `query` function. - -The function will return `null` when it fails to retrieve the access token for making authenticated requests. If this happens, you want to check that your user becomes authenticated using the `onLogin` server action. diff --git a/packages/experimental-app-router/docs/getclient.md b/packages/experimental-app-router/docs/getclient.md deleted file mode 100644 index 68cd30e63..000000000 --- a/packages/experimental-app-router/docs/getclient.md +++ /dev/null @@ -1,85 +0,0 @@ -# `getClient` - -`getClient` is a function that returns the `ApolloClient` making it available for use. It is part of the `@faustwp/experimental-app-router` package. - -## Usage - -Here is an example layout that imports `getClient` and uses `query` to query WPGraphQL: - -```js -import { gql } from '@apollo/client'; -import { getClient } from '@faustwp/experimental-app-router'; -import Link from 'next/link'; -import '../faust.config.js'; - -export const metadata = { - title: 'Create Next App', - description: 'Generated by create next app', -}; - -export default async function RootLayout({ children }) { - const client = await getClient(); - - const { data } = await client.query({ - query: gql` - query GetLayout { - generalSettings { - title - description - } - primaryMenuItems: menuItems(where: { location: PRIMARY }) { - nodes { - id - label - uri - } - } - footerMenuItems: menuItems(where: { location: FOOTER }) { - nodes { - id - label - uri - } - } - } - `, - }); - - return ( - - -
-
-

- {data.generalSettings.title} -

- -
{data.generalSettings.description}
-
- -
    - {data.primaryMenuItems.nodes.map((node) => ( -
  • - {node.label} -
  • - ))} -
-
- {children} - - - ); -} -``` - -## Technical Reference - -`getClient(): ApolloClient | null` - -The `getClient` function returns the `ApolloClient` making it available for use. - -You can use the `ApolloClient` to perform queries for data using the `query` function. - -## Additional Context - -- [Next.js Server Actions](https://nextjs.org/docs/app/api-reference/functions/server-actions) diff --git a/packages/experimental-app-router/docs/getting-started.md b/packages/experimental-app-router/docs/getting-started.md deleted file mode 100644 index 6624833d0..000000000 --- a/packages/experimental-app-router/docs/getting-started.md +++ /dev/null @@ -1,167 +0,0 @@ -# Getting Started with the Experimental App Router - -This tutorial will introduce you to Faust’s experimental app router example project. It contains a site demonstrating the use of utilities like [getClient](./getclient.md), [getAuthClient](./getauthclient.md), [faustRouteHandler](./faustroutehandler.md), [loginAction](./onlogin-server-action.md), and [logoutAction](./onlogout-server-action.md). You can use this project as a base for future projects and as a good reference site for app routing. It assumes you are comfortable with the command line, have a foundational knowledge of Faust and Next.js routing, and understand the basics of JavaScript, WordPress and Bash. - -- [Experimental App Router example project](https://github.com/wpengine/faustjs/tree/canary/examples/next/app-router) - -- [NPM package](https://www.npmjs.com/package/@faustwp/experimental-app-router) - -## How to Get the Example Working Locally - -### Install and Build - -Get started by downloading the example project by running: - -```shell -npx create-next-app \ - -e https://github.com/wpengine/faustjs/tree/main \ - --example-path examples/next/app-router \ - --use-npm -``` - -### .env.local File Set Up - -Copy the example’s `.env.local.sample` file, ensuring you rename the file `.env.local`. - -You’ll see an example `NEXT_PUBLIC_WORDPRESS_URL` in this file. Set this to your WordPress site’s URL. - -You’ll also see a NEXT\_PUBLIC\_URL set to http://localhost:3000. You can keep that as is for now. - -Set your FAUST\_SECRET\_KEY. For more information on where to find this secret key, refer back to this example. - -![](https://lh5.googleusercontent.com/WpRUpTGFotY68c0iyNKv6s41eaahfN8keoYXk_JlaHAUTzopbWhMDQAXiIEi0AjP1H0lXiIWV5AY0hgS8F8WlO3VknWWcD-Ii08OjJROe3LaPTtoYEyp0wzSCt_jnpACTPoSwtgH-PLhwtuF46OjREE) - -### Run the Project - -Run the example project by entering `npm run dev` -Navigate to `http://localhost:3000/.` - -You should now see a simple site page using your site’s name and a few published posts: - -![The front page of the app displaying a list of published posts.](images/image-1024x771.png) - -## The Example Project File Structure - -This is the new standard file structure for App Router Next.js apps. For more information, check out the [App Router](https://nextjs.org/docs/app) docs from Next.js. - -```shell -❯ tree -L 2 -. -│ν app -│ └── [postSlug] -│ └── page.tsx -│ └── api/faust/[route] -│ └── route.ts -│ └── my-account -│ └── page.tsx -│ └── making-client-queries -│ └── page.tsx -│ └── login -│ └── page.tsx -│ ├── layout.tsx -│ └── page.tsx -│❯ node_modules -│.env.local.sample -│faust.config.js -│next-end.d.ts -│next.config.ts -│package.json -│possibleTypes.json -│tsconfig.json -``` - -## Fetching Data - -[getClient](./getclient.md) is a function that returns an ApolloClient, specifically for use in React Server Components (RSC). When making authenticated requests in the Next.js App Router from an RSC, the [getAuthClient](./getauthclient.md) is used instead. Both are part of the `@faustwp/experimental-app-router` package. - -In the example project under the folder `my-account`, you’ll find an example of getAuthClient in action: - -```js -// in examples/next/app-router/app/my-account/page.tsx -import { gql } from '@apollo/client'; -import { getAuthClient } from '@faustwp/experimental-app-router'; - -export default async function Page() { - const client = await getAuthClient(); - - if (!client) { - return <>You must be authenticated; - } - - const { data } = await client.query({ - query: gql` - query GetViewer { - viewer { - name - posts { - nodes { - id - title - } - } - } - } - `, - }); - - return ( - <> -

Welcome {data.viewer.name}

- -
    - {data.viewer.posts.nodes.map((post) => ( -
  • {post.title}
  • - ))} -
- - ); -} -``` - -### Fetching Data on the Client - -Additionally, you can make client side requests using Apollo's `useQuery` hook like usual (You will need to do this in a client component using the `use client` directive): - -```js -'use client'; - -import { gql, useQuery } from '@apollo/client'; - -export default function Page() { - const { data } = useQuery(gql` - query MyQuery { - generalSettings { - title - } - } - `); - - return <>{data?.generalSettings?.title}; -} -``` - -For client side queries to work, make sure you are wrapping your root `layout` with the `` component imported via: - -```js -import { FaustProvider } from '@faustwp/experimental-app-router/ssr'; -``` - -## Authentication - -Authentication in the experimental-app-router is powered by two utilities, [onLogin](./onlogin-server-action.md) and [onLogout](./onlogout-server-action.md). These are built on [Next.js server actions](http://nextjs.org/docs/app/api-reference/functions/server-actions\) and perform an action to log a user in and out using cookie caching and cookie removal, respectively. - -In the example project, navigate to `http://localhost:3000/login` and log into your app using your `wp-admin` credentials from the `NEXT_PUBLIC_WORDPRESS_URL` you set in your .env.local file. - -![The login page displays a username field and a password field with a login button below them.](images/image-1-1024x771.png) - -Upon successfully logging in, you’ll be directed to `http://localhost:3000/my-account`. This functionality comes from the helper function, [onLogin](./onlogin-server-action.md). - -![the endpoint my-account shows the posts available to the admin user upon login.](images/image-2-1024x810.png) - -The `/my-account` page grabs the authenticated user's name and posts and displays them. - -This page also has a "Logout" button, clicking it calls the [onLogout](./onlogout-server-action.md) server action, the user is logged out, and the page is refreshed with no authenticated user. - -Note that when viewing the `/my-account` without an authenticated user, the first conditional statement in the associated `my-account/page.tsx` will be triggered, and the message, `You must be authenticated` will show on the screen. - -![](images/image-3.png) diff --git a/packages/experimental-app-router/docs/images/image-1-1024x771.png b/packages/experimental-app-router/docs/images/image-1-1024x771.png deleted file mode 100644 index eb93d5f7a..000000000 Binary files a/packages/experimental-app-router/docs/images/image-1-1024x771.png and /dev/null differ diff --git a/packages/experimental-app-router/docs/images/image-1.png b/packages/experimental-app-router/docs/images/image-1.png deleted file mode 100644 index df5a53be8..000000000 Binary files a/packages/experimental-app-router/docs/images/image-1.png and /dev/null differ diff --git a/packages/experimental-app-router/docs/images/image-1024x771.png b/packages/experimental-app-router/docs/images/image-1024x771.png deleted file mode 100644 index 75bbc6152..000000000 Binary files a/packages/experimental-app-router/docs/images/image-1024x771.png and /dev/null differ diff --git a/packages/experimental-app-router/docs/images/image-2-1024x810.png b/packages/experimental-app-router/docs/images/image-2-1024x810.png deleted file mode 100644 index de3a81c43..000000000 Binary files a/packages/experimental-app-router/docs/images/image-2-1024x810.png and /dev/null differ diff --git a/packages/experimental-app-router/docs/images/image-2.png b/packages/experimental-app-router/docs/images/image-2.png deleted file mode 100644 index 3b7a52b61..000000000 Binary files a/packages/experimental-app-router/docs/images/image-2.png and /dev/null differ diff --git a/packages/experimental-app-router/docs/images/image-3.png b/packages/experimental-app-router/docs/images/image-3.png deleted file mode 100644 index 0866a5870..000000000 Binary files a/packages/experimental-app-router/docs/images/image-3.png and /dev/null differ diff --git a/packages/experimental-app-router/docs/images/image.png b/packages/experimental-app-router/docs/images/image.png deleted file mode 100644 index 7da728b89..000000000 Binary files a/packages/experimental-app-router/docs/images/image.png and /dev/null differ diff --git a/packages/experimental-app-router/docs/onlogin-server-action.md b/packages/experimental-app-router/docs/onlogin-server-action.md deleted file mode 100644 index 012742018..000000000 --- a/packages/experimental-app-router/docs/onlogin-server-action.md +++ /dev/null @@ -1,38 +0,0 @@ -# `onLogin` Server Action - -The `onLogin` is function that performs a server action to login a user. It is part of the `@faustwp/experimental-app-router` package. - -## Usage - -Here is an example action to login the user by providing credentials to login to the WordPress backend: - -```js -'use client' -import { onLogin } from '@faustwp/experimental-app-router'; - -
-
- - -
- -
- - -
- - -
; -``` - -## Technical Reference - -`onLogin(formData: FormData)` - -The `onLogin` server action accepts an instance of HTML [FormData](https://developer.mozilla.org/en-US/docs/Web/API/FormData) class that is automatically provided when you use a `
` action field. - -If the form submission is successful, the server will populate the session with a cookie that is used to maintain the authentication status on. Users will logout by submitting an onLogout action or when their authentication token expires. - -## Additional Context - -- [Next.js Server Actions](https://nextjs.org/docs/app/api-reference/functions/server-actions) diff --git a/packages/experimental-app-router/docs/onlogout-server-action.md b/packages/experimental-app-router/docs/onlogout-server-action.md deleted file mode 100644 index ef477dcf1..000000000 --- a/packages/experimental-app-router/docs/onlogout-server-action.md +++ /dev/null @@ -1,26 +0,0 @@ -# `onLogout` Server Action - -The `onLogout` function performs a server action to log out a authenticated user. It is part of the `@faustwp/experimental-app-router` package. - -## Usage - -Here is an example action to log out an existing user that had previously been authenticated: - -```js -'use client' -import { onLogout } from '@faustwp/experimental-app-router'; - - - -
; -``` - -## Technical Reference - -`onLogout()` This function does not accept any arguments. - -If the form submission is successful, the server will remove the session cookie that is used to maintain the authentication status. - -## Additional Context - -- [Next.js Server Actions](https://nextjs.org/docs/app/api-reference/functions/server-actions) diff --git a/packages/experimental-app-router/jest.config.js b/packages/experimental-app-router/jest.config.js deleted file mode 100644 index a6a716a12..000000000 --- a/packages/experimental-app-router/jest.config.js +++ /dev/null @@ -1,32 +0,0 @@ -export default { - roots: ['/tests'], - - // Adds Jest support for TypeScript using ts-jest. - testEnvironment: 'jest-environment-jsdom', - transform: { - '^.+\\.[tj]sx?$': [ - 'ts-jest', - { - tsconfig: 'tsconfig.json', - isolatedModules: true, - useESM: true, - }, - ], - }, - // Run code before each file in the suite is tested. - setupFilesAfterEnv: ['./jest.setup.ts'], - - testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$', - - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], - - // ESM Support - // @link https://kulshekhar.github.io/ts-jest/docs/guides/esm-support/ - extensionsToTreatAsEsm: ['.ts'], - moduleNameMapper: { - '^(\\.{1,2}/.*)\\.js$': '$1', - }, - collectCoverage: true, - coverageReporters: ['json', 'html'], - passWithNoTests: true, -}; diff --git a/packages/experimental-app-router/jest.setup.ts b/packages/experimental-app-router/jest.setup.ts deleted file mode 100644 index f30f08879..000000000 --- a/packages/experimental-app-router/jest.setup.ts +++ /dev/null @@ -1 +0,0 @@ -import '@testing-library/jest-dom'; // For custom matchers. See https://github.com/testing-library/jest-dom#custom-matchers. diff --git a/packages/experimental-app-router/package.json b/packages/experimental-app-router/package.json deleted file mode 100644 index dcd2b0f47..000000000 --- a/packages/experimental-app-router/package.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "name": "@faustwp/experimental-app-router", - "type": "module", - "version": "0.6.0", - "description": "Experimental: A Faust package to support Next.js' App Router", - "exports": { - ".": "./dist/index.js", - "./ssr": "./dist/ssr.js", - "./package.json": "./package.json" - }, - "types": "dist/index.d.ts", - "keywords": [ - "next", - "nextjs", - "faust", - "faustjs", - "esm", - "headless", - "wordpress" - ], - "scripts": { - "dev": "concurrently \"npm:watch-*\" --prefix-colors \"auto\"", - "build": "concurrently \"npm:build-*\" --prefix-colors \"auto\"", - "prebuild": "npm run clean", - "clean": "rimraf dist", - "format": "prettier --write .", - "prepublish": "npm run build", - "test:coverage:ci": "jest --ci --json --coverage --testLocationInResults --outputFile=report.json", - "test:coverage": "jest --coverage", - "test:watch": "jest --watch", - "test": "jest", - "build-js": "tsc -p .", - "watch-js": "concurrently \"npm:build-js -- --watch\"" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/wpengine/faustjs.git" - }, - "author": "Faust Team", - "license": "MIT", - "bugs": { - "url": "https://github.com/wpengine/faustjs/issues" - }, - "homepage": "https://github.com/wpengine/faustjs#readme", - "engines": { - "node": ">=18", - "npm": ">=8" - }, - "peerDependencies": { - "@apollo/client": ">=3.8.0", - "@apollo/experimental-nextjs-app-support": ">=0.11.5", - "@faustwp/cli": ">=1.1.3", - "@faustwp/core": ">=1.1.2", - "next": ">=13.0.0", - "react": ">=18.0.0", - "react-dom": ">=18.0.0" - }, - "devDependencies": { - "@apollo/client": "^3.8.0", - "@apollo/experimental-nextjs-app-support": "^0.11.5", - "@testing-library/jest-dom": "^5.17.0", - "@types/node": "^20.4.6", - "concurrently": "^8.2.0", - "jest": "^29.6.2", - "jest-environment-jsdom": "^29.6.2", - "rimraf": "^5.0.1", - "ts-jest": "^29.1.1", - "ts-loader": "^9.4.4", - "typescript": "^5.1.6" - } -} diff --git a/packages/experimental-app-router/src/client/config.ts b/packages/experimental-app-router/src/client/config.ts deleted file mode 100644 index a4726fe6b..000000000 --- a/packages/experimental-app-router/src/client/config.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { - ApolloLink, - InMemoryCacheConfig, - createHttpLink, -} from '@apollo/client'; -// eslint-disable-next-line import/extensions -import { setContext } from '@apollo/client/link/context'; -import { getConfig, getGraphqlEndpoint } from '../faust-core-utils.js'; -import { fetchAccessToken } from '../server/auth/fetchAccessToken.js'; - -export function createApolloConfig( - authenticated = false, -): [InMemoryCacheConfig, ApolloLink] { - const { possibleTypes } = getConfig(); - - const inMemoryCacheObject: InMemoryCacheConfig = { - possibleTypes, - typePolicies: { - RootQuery: { - queryType: true, - }, - RootMutation: { - mutationType: true, - }, - }, - }; - - let linkChain = createHttpLink({ - uri: getGraphqlEndpoint(), - }); - - // @todo Create hook for client and options. - - // If the request is coming from the auth client, apply the auth link. - if (authenticated) { - linkChain = setContext(async (_, { headers }) => { - // get the authentication token from local storage if it exists - const token = await fetchAccessToken(); - - // return the headers to the context so httpLink can read them - return { - headers: { - ...headers, - authorization: token ? `Bearer ${token}` : '', - }, - }; - }).concat(linkChain); - } - - /** - * @todo - * Configure GET requests and persisted queries options. - * These are not defined right now as these behaviors may - * change based on the App Router implementation. For example, - * we may set config differently than how we currently do it. - */ - - return [inMemoryCacheObject, linkChain]; -} diff --git a/packages/experimental-app-router/src/client/rsc.tsx b/packages/experimental-app-router/src/client/rsc.tsx deleted file mode 100644 index 8342d3735..000000000 --- a/packages/experimental-app-router/src/client/rsc.tsx +++ /dev/null @@ -1,34 +0,0 @@ -// eslint-disable-next-line import/extensions -import { ApolloClient, InMemoryCache } from '@apollo/client'; -// eslint-disable-next-line import/extensions -import { registerApolloClient } from '@apollo/experimental-nextjs-app-support'; -import { fetchAccessToken } from '../server/auth/fetchAccessToken.js'; -import { createApolloConfig } from './config.js'; - -export function createRSCApolloClient(authenticated = false) { - const [inMemoryCacheObject, linkChain] = createApolloConfig(authenticated); - return new ApolloClient({ - cache: new InMemoryCache(inMemoryCacheObject), - link: linkChain, - }); -} - -export async function getClient() { - const faustApolloClient = createRSCApolloClient(false); - const client = registerApolloClient(() => faustApolloClient); - - return client.getClient(); -} - -export async function getAuthClient() { - const token = await fetchAccessToken(); - - if (!token) { - return null; - } - - const faustApolloClient = createRSCApolloClient(true); - const client = registerApolloClient(() => faustApolloClient); - - return client.getClient(); -} diff --git a/packages/experimental-app-router/src/client/ssr.tsx b/packages/experimental-app-router/src/client/ssr.tsx deleted file mode 100644 index 004f2437e..000000000 --- a/packages/experimental-app-router/src/client/ssr.tsx +++ /dev/null @@ -1,27 +0,0 @@ -'use client'; - -// eslint-disable-next-line import/extensions -import { - ApolloNextAppProvider, - ApolloClient, - InMemoryCache, - // eslint-disable-next-line import/extensions -} from '@apollo/experimental-nextjs-app-support'; -import React, { PropsWithChildren } from 'react'; -import { createApolloConfig } from './config.js'; - -export function createSSRApolloClient(authenticated = false) { - const [inMemoryCacheObject, linkChain] = createApolloConfig(authenticated); - return new ApolloClient({ - cache: new InMemoryCache(inMemoryCacheObject), - link: linkChain, - }); -} - -export function FaustSSRProvider({ children }: PropsWithChildren) { - return ( - createSSRApolloClient(false)}> - {children} - - ); -} diff --git a/packages/experimental-app-router/src/faust-core-utils.ts b/packages/experimental-app-router/src/faust-core-utils.ts deleted file mode 100644 index 73b01d0bc..000000000 --- a/packages/experimental-app-router/src/faust-core-utils.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * We are currently importing these utils from their deep paths because importing - * from the main export will also include the FaustProvider component, which throws an error because - * it does not have the "use client" directive set. - * - * @todo Find a workaround for importing these utils without invoking FaustProvider. - * @see https://github.com/vercel/next.js/issues/12557#issuecomment-1427088366 - */ -export { getConfig } from '@faustwp/core/dist/mjs/config/index.js'; -export { getGraphqlEndpoint } from '@faustwp/core/dist/mjs/lib/getGraphqlEndpoint.js'; -export { getWpUrl } from '@faustwp/core/dist/mjs/lib/getWpUrl.js'; -export { getWpSecret } from '@faustwp/core/dist/mjs/lib/getWpSecret.js'; -export { isValidEmail } from '@faustwp/core/dist/mjs/utils/assert.js'; diff --git a/packages/experimental-app-router/src/index.tsx b/packages/experimental-app-router/src/index.tsx deleted file mode 100644 index 26b73f850..000000000 --- a/packages/experimental-app-router/src/index.tsx +++ /dev/null @@ -1,5 +0,0 @@ -export { getClient, getAuthClient } from './client/rsc.js'; -export { faustRouteHandler } from './server/routeHandler/index.js'; -export { fetchAccessToken } from './server/auth/fetchAccessToken.js'; -export { onLogout } from './server-actions/logoutAction.js'; -export { onLogin } from './server-actions/loginAction.js'; diff --git a/packages/experimental-app-router/src/lib/getUrl.ts b/packages/experimental-app-router/src/lib/getUrl.ts deleted file mode 100644 index d48610321..000000000 --- a/packages/experimental-app-router/src/lib/getUrl.ts +++ /dev/null @@ -1,4 +0,0 @@ -export function getUrl() { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - return process.env.NEXT_PUBLIC_URL!; -} diff --git a/packages/experimental-app-router/src/server-actions/loginAction.ts b/packages/experimental-app-router/src/server-actions/loginAction.ts deleted file mode 100644 index a22fe5124..000000000 --- a/packages/experimental-app-router/src/server-actions/loginAction.ts +++ /dev/null @@ -1,124 +0,0 @@ -import { gql } from '@apollo/client'; -// eslint-disable-next-line import/extensions -import { print } from '@apollo/client/utilities'; -import { fetchTokens } from '../server/auth/fetchTokens.js'; -import { setRefreshToken } from './utils/setRefreshToken.js'; -import { isValidEmail, getGraphqlEndpoint } from '../faust-core-utils.js'; - -export const GENERATE_AUTHORIZATION_CODE = gql` - mutation GenerateAuthorizationCode( - $email: String - $username: String - $password: String! - ) { - generateAuthorizationCode( - input: { email: $email, username: $username, password: $password } - ) { - code - error - } - } -`; - -export type GenerateAuthCodeMutationRes = { - data?: - | { - generateAuthorizationCode: { - code: string; - error: null; - }; - } - | { - generateAuthorizationCode: { - code: null; - error: string; - }; - }; -}; - -function isString(value: any): value is string { - return typeof value === 'string' || value instanceof String; -} - -export const validationError = { - error: - 'There were validation errors. Please ensure your login action has two inputs, "usernameEmail" and "password"', -}; - -export async function onLogin(formData: FormData) { - 'use server'; - - try { - const usernameEmail = formData.get('usernameEmail'); - const password = formData.get('password'); - - if ( - !usernameEmail || - !isString(usernameEmail) || - !password || - !isString(password) - ) { - return validationError; - } - - const mutationVariables: { - username?: string; - email?: string; - password: string; - } = { password }; - - if (isValidEmail(usernameEmail)) { - mutationVariables.email = usernameEmail; - } else { - mutationVariables.username = usernameEmail; - } - - /** - * Using standard fetch here so we don't muddy the waters with Next caching - * and Apollo. - */ - const mutationRes = await fetch(`${getGraphqlEndpoint()}`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - query: print(GENERATE_AUTHORIZATION_CODE), - variables: mutationVariables, - }), - // We do not want Next caching the generate auth code response. - cache: 'no-store', - }); - - const { data } = (await mutationRes.json()) as GenerateAuthCodeMutationRes; - - if (data?.generateAuthorizationCode.error !== null) { - return { - error: data?.generateAuthorizationCode.error, - }; - } - - const { code } = data.generateAuthorizationCode; - - const tokens = await fetchTokens(code); - - if (tokens === null) { - throw new Error('Could not fetch tokens'); - } - - await setRefreshToken( - tokens.refreshToken, - tokens.refreshTokenExpiration * 1000, - ); - - return { - message: 'User was successfully logged in', - }; - } catch (err) { - console.error('User could not be logged in:', err); - - return { - error: 'There was an error logging in the user', - }; - } -} diff --git a/packages/experimental-app-router/src/server-actions/logoutAction.ts b/packages/experimental-app-router/src/server-actions/logoutAction.ts deleted file mode 100644 index de5527ce6..000000000 --- a/packages/experimental-app-router/src/server-actions/logoutAction.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { cookies } from 'next/headers.js'; -import { getWpUrl } from '../faust-core-utils.js'; - -export async function onLogout() { - 'use server'; - - const wpCookieName = `${getWpUrl()}-rt`; - // eslint-disable-next-line @typescript-eslint/await-thenable - const cookieStore = await cookies(); - const wpCookie = cookieStore.get(wpCookieName); - - if (wpCookie?.name) { - cookieStore.delete(wpCookieName); - return true; - } - return false; -} diff --git a/packages/experimental-app-router/src/server-actions/utils/setRefreshToken.ts b/packages/experimental-app-router/src/server-actions/utils/setRefreshToken.ts deleted file mode 100644 index 1b3828d0f..000000000 --- a/packages/experimental-app-router/src/server-actions/utils/setRefreshToken.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { cookies } from 'next/headers.js'; -import { getWpUrl } from '../../faust-core-utils.js'; - -/** - * Sets the refresh token to the proper cookie. This can only be used within - * server actions and server routes. - * - * @param refreshToken The refresh token from the token endpoint - * @param refreshTokenExpiration The refresh token expiration from the token endpoint - */ -export async function setRefreshToken( - refreshToken: string, - refreshTokenExpiration: number, -) { - // eslint-disable-next-line @typescript-eslint/await-thenable - const cookieStore = await cookies(); - const cookieName = `${getWpUrl()}-rt`; - - cookieStore.set(cookieName, refreshToken, { - secure: true, - httpOnly: true, - path: '/', - expires: new Date(refreshTokenExpiration), - sameSite: 'lax', - }); -} diff --git a/packages/experimental-app-router/src/server/auth/fetchAccessToken.ts b/packages/experimental-app-router/src/server/auth/fetchAccessToken.ts deleted file mode 100644 index 153bd02ba..000000000 --- a/packages/experimental-app-router/src/server/auth/fetchAccessToken.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { fetchTokens } from './fetchTokens.js'; - -/** - * Fetches an access token from the token endpoint. Uses fetchTokens under - * the hood. - * - * @param code string|undefined An authorization code to get tokens. - * @returns string|null - */ -export async function fetchAccessToken(code?: string) { - const tokens = await fetchTokens(code); - - if (tokens === null) { - return null; - } - - return tokens.accessToken; -} diff --git a/packages/experimental-app-router/src/server/auth/fetchTokens.ts b/packages/experimental-app-router/src/server/auth/fetchTokens.ts deleted file mode 100644 index 10c6179fd..000000000 --- a/packages/experimental-app-router/src/server/auth/fetchTokens.ts +++ /dev/null @@ -1,61 +0,0 @@ -// eslint-disable-next-line import/extensions -import { cookies } from 'next/headers.js'; -import { AuthorizeResponse } from '../routeHandler/tokenHandler.js'; -import { getUrl } from '../../lib/getUrl.js'; -import { getWpUrl } from '../../faust-core-utils.js'; - -/** - * Fetches tokens using either the refresh token cookie or the provided - * authorization code. - * - * @param code string|undefined An authorization code to fetch tokens. - * @returns string|null - */ -export async function fetchTokens(code?: string) { - // eslint-disable-next-line @typescript-eslint/await-thenable - const cookieStore = await cookies(); - const cookieName = `${getWpUrl()}-rt`; - - if (!cookieStore.get(cookieName)?.value && !code) { - // The user is not authenticated. - return null; - } - - let url = `${getUrl()}/api/faust/token`; - - if (code) { - url += `?code=${encodeURIComponent(code)}`; - } - - try { - const response = await fetch(url, { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - Cookie: cookieStore.toString(), - }, - cache: 'no-store', - }); - - if (!response.ok) { - if (response.status !== 401) { - throw new Error('Invalid response from token endpoint'); - } - - return null; - } - - if (!response.ok) { - return null; - } - - const data = (await response.json()) as AuthorizeResponse; - - return data; - } catch (err) { - // eslint-disable-next-line no-console - console.log('There was an error fetching the access token', err); - - return null; - } -} diff --git a/packages/experimental-app-router/src/server/routeHandler/index.ts b/packages/experimental-app-router/src/server/routeHandler/index.ts deleted file mode 100644 index f504531d5..000000000 --- a/packages/experimental-app-router/src/server/routeHandler/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { notFound } from 'next/navigation.js'; -import { tokenHandler } from './tokenHandler.js'; - -export async function GetFn(req: Request) { - const { pathname } = new URL(req.url); - - switch (pathname) { - case '/api/faust/token/': - case '/api/faust/token': { - return tokenHandler(req); - } - default: { - return notFound(); - } - } -} - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export async function PostFn(req: Request) { - // Intentionally left empty if/until we have POST endpoints. -} - -export const faustRouteHandler = { - GET: (req: Request) => GetFn(req), - POST: (req: Request) => PostFn(req), -}; diff --git a/packages/experimental-app-router/src/server/routeHandler/tokenHandler.ts b/packages/experimental-app-router/src/server/routeHandler/tokenHandler.ts deleted file mode 100644 index c43ef421e..000000000 --- a/packages/experimental-app-router/src/server/routeHandler/tokenHandler.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { cookies } from 'next/headers.js'; -import { NextResponse } from 'next/server.js'; -import { getWpUrl, getWpSecret } from '../../faust-core-utils.js'; - -export type AuthorizeResponse = { - accessToken: string; - accessTokenExpiration: number; - refreshToken: string; - refreshTokenExpiration: number; -}; - -export async function tokenHandler(req: Request) { - try { - const secretKey = getWpSecret(); - - if (!secretKey) { - throw new Error('FAUST_SECRET_KEY must be set'); - } - - const { url } = req; - const code = new URL(url).searchParams.get('code') ?? undefined; - // eslint-disable-next-line @typescript-eslint/await-thenable - const cookieStore = await cookies(); - const cookieName = `${getWpUrl()}-rt`; - const refreshToken = cookieStore.get(cookieName)?.value; - - if (!refreshToken && !code) { - return new Response(JSON.stringify({ error: 'Unauthorized' }), { - status: 401, - headers: { - 'Content-Type': 'application/json', - }, - }); - } - - const wpFaustAuthorizeEndpoint = `${getWpUrl()}/?rest_route=/faustwp/v1/authorize`; - - const response = await fetch(wpFaustAuthorizeEndpoint, { - headers: { - 'Content-Type': 'application/json', - 'x-faustwp-secret': secretKey, - }, - method: 'POST', - body: JSON.stringify({ - code, - refreshToken, - }), - }); - - if (!response.ok) { - /** - * Remove the refresh token from the cookie in the case the token is: - * - expired - * - invalid - * - revoked - * - from a different WordPress instance when developing on localhost - */ - - /** - * @TODO Delete the cookie - */ - // cookieStore.delete(cookieName); - - /** - * @TODO throw different errors based on response - */ - return new Response(JSON.stringify({ error: 'Unauthorized' }), { - status: 401, - headers: { - 'Content-Type': 'application/json', - }, - }); - } - - const data = (await response.json()) as AuthorizeResponse; - - /** - * @TODO Set the refresh token cookie with the new refresh token - * and expiration. - */ - - const res = new NextResponse(JSON.stringify(data), { - status: 200, - }); - - res.cookies.set(cookieName, data.refreshToken, { - secure: true, - httpOnly: true, - path: '/', - expires: new Date(data.refreshTokenExpiration * 1000), - sameSite: 'lax', - }); - - return res; - } catch (err) { - console.error('Invalid response for authorize handler:', err); - - return new Response(JSON.stringify({ error: 'Internal Server Error' }), { - status: 500, - headers: { - 'Content-Type': 'application/json', - }, - }); - } -} diff --git a/packages/experimental-app-router/src/ssr.tsx b/packages/experimental-app-router/src/ssr.tsx deleted file mode 100644 index 7a989ae98..000000000 --- a/packages/experimental-app-router/src/ssr.tsx +++ /dev/null @@ -1 +0,0 @@ -export { FaustSSRProvider as FaustProvider } from './client/ssr.js'; diff --git a/packages/experimental-app-router/tests/auth/fetchAccessToken.test.ts b/packages/experimental-app-router/tests/auth/fetchAccessToken.test.ts deleted file mode 100644 index 3c0a0cd37..000000000 --- a/packages/experimental-app-router/tests/auth/fetchAccessToken.test.ts +++ /dev/null @@ -1,112 +0,0 @@ -import 'isomorphic-fetch'; -import * as fetchAccessToken from '../../src/server/auth/fetchAccessToken.js'; -import fetchMock from 'fetch-mock'; -import { cookies } from 'next/headers.js'; - -// // https://github.com/aelbore/esbuild-jest/issues/26#issuecomment-893763840 -const nextHeaders = { cookies }; - -jest.mock('next/headers.js'); - -describe('fetchAccessToken', () => { - const envBackup = process.env; - - beforeEach(() => { - process.env = { ...envBackup }; - }); - - afterEach(() => { - jest.clearAllMocks(); - fetchMock.restore(); - }); - - afterAll(() => { - process.env = envBackup; - }); - - it('returns null if no code or refresh token is present', async () => { - const cookiesSpy = jest.spyOn(nextHeaders, 'cookies'); - - // No refresh token - cookiesSpy.mockReturnValue({ - get(name: string) { - return { name: undefined, value: undefined }; - }, - } as any); - - const token = await fetchAccessToken.fetchAccessToken(); - - expect(token).toBe(null); - }); - - it('makes a request to the token endpoint with the code if given', async () => { - process.env.NEXT_PUBLIC_URL = 'http://localhost:3000'; - - const cookiesSpy = jest.spyOn(nextHeaders, 'cookies'); - - // No refresh token - cookiesSpy.mockReturnValue({ - get(name: string) { - return { name: undefined, value: undefined }; - }, - } as any); - - const code = 'my code'; - - // Ensures proper URL encoding - fetchMock.get(`http://localhost:3000/api/faust/token?code=my%20code`, { - status: 200, - body: { - accessToken: 'valid-token', - }, - }); - - const token = await fetchAccessToken.fetchAccessToken(code); - - expect(token).toBe('valid-token'); - }); - - it('returns null if the token response was not ok', async () => { - process.env.NEXT_PUBLIC_URL = 'http://localhost:3000'; - - const cookiesSpy = jest.spyOn(nextHeaders, 'cookies'); - - cookiesSpy.mockReturnValue({ - get(name: string) { - return { name, value: '1234' }; - }, - } as any); - - fetchMock.get(`http://localhost:3000/api/faust/token`, { - status: 401, - }); - - const token = await fetchAccessToken.fetchAccessToken(); - - expect(token).toBeNull(); - }); - - it('properly returns the access token', async () => { - process.env.NEXT_PUBLIC_URL = 'http://localhost:3000'; - - const cookiesSpy = jest.spyOn(nextHeaders, 'cookies'); - - // No refresh token - cookiesSpy.mockReturnValue({ - get(name: string) { - return { name, value: 'valid-refresh-token' }; - }, - } as any); - - fetchMock.get(`http://localhost:3000/api/faust/token`, { - status: 200, - body: { - accessToken: 'valid-token', - }, - }); - - const token = await fetchAccessToken.fetchAccessToken(); - - expect(token).toBe('valid-token'); - }); -}); diff --git a/packages/experimental-app-router/tests/client.test.tsx.invalid b/packages/experimental-app-router/tests/client.test.tsx.invalid deleted file mode 100644 index 09ef82971..000000000 --- a/packages/experimental-app-router/tests/client.test.tsx.invalid +++ /dev/null @@ -1,41 +0,0 @@ -/** - * @jest-environment node - */ - -import * as apolloClient from '@apollo/client'; -import * as client from '../src/client'; - -afterEach(() => { - jest.clearAllMocks(); -}); - -describe('getClient', () => { - const httpLinkSpy = jest.spyOn(apolloClient, 'createHttpLink'); - - const envBackup = process.env; - - beforeEach(() => { - process.env = { ...envBackup }; - // @ts-ignore - }); - - afterEach(() => { - jest.clearAllMocks(); - }); - - afterAll(() => { - process.env = envBackup; - }); - - it('calls the appropriate Apollo link with WordPress GraphQL endpoint', async () => { - process.env.NEXT_PUBLIC_WORDPRESS_URL = 'http://headless.local'; - - client.getClient(); - - expect(httpLinkSpy).toHaveBeenCalledTimes(1); - - expect(httpLinkSpy).toHaveBeenCalledWith({ - uri: 'http://headless.local/index.php?graphql', - }); - }); -}); diff --git a/packages/experimental-app-router/tests/dummy.test.ts b/packages/experimental-app-router/tests/dummy.test.ts deleted file mode 100644 index 8ca53d887..000000000 --- a/packages/experimental-app-router/tests/dummy.test.ts +++ /dev/null @@ -1,3 +0,0 @@ -test('dummy test', () => { - expect(true).toBe(true); -}); diff --git a/packages/experimental-app-router/tests/server-actions/onLogin.test.ts b/packages/experimental-app-router/tests/server-actions/onLogin.test.ts deleted file mode 100644 index 56f27509a..000000000 --- a/packages/experimental-app-router/tests/server-actions/onLogin.test.ts +++ /dev/null @@ -1,152 +0,0 @@ -import 'isomorphic-fetch'; -import fetchMock from 'fetch-mock'; -import { cookies } from 'next/headers.js'; -import { - onLogin, - validationError, -} from '../../src/server-actions/loginAction.js'; -import * as fetchTokens from '../../src/server/auth/fetchTokens.js'; -import * as setRefreshToken from '../../src/server-actions/utils/setRefreshToken.js'; -import { getGraphqlEndpoint } from '../../src/faust-core-utils.js'; - -// // https://github.com/aelbore/esbuild-jest/issues/26#issuecomment-893763840 -const nextHeaders = { cookies }; - -jest.mock('next/headers.js'); - -describe('onLogout', () => { - const envBackup = process.env; - - beforeEach(() => { - process.env = { ...envBackup }; - }); - - afterEach(() => { - jest.clearAllMocks(); - fetchMock.restore(); - }); - - afterAll(() => { - process.env = envBackup; - }); - - it('returns validation errors', async () => { - const nullFormData = { - get(name: string) { - if (name === 'usernameEmail') return null; - if (name === 'password') return null; - }, - }; - - const noPasswordFormData = { - get(name: string) { - if (name === 'usernameEmail') return 'Admin'; - if (name === 'password') return null; - }, - }; - - const noUsernameFormData = { - get(name: string) { - if (name === 'usernameEmail') return null; - if (name === 'password') return 'password'; - }, - }; - - const invalidTypeFormData = { - get(name: string) { - if (name === 'usernameEmail') return 123; - if (name === 'password') return 123; - }, - }; - - expect(await onLogin(nullFormData as any as FormData)).toStrictEqual( - validationError, - ); - expect(await onLogin(noPasswordFormData as any as FormData)).toStrictEqual( - validationError, - ); - expect(await onLogin(noUsernameFormData as any as FormData)).toStrictEqual( - validationError, - ); - expect(await onLogin(invalidTypeFormData as any as FormData)).toStrictEqual( - validationError, - ); - }); - - it('returns the error received from graphql query if it exists', async () => { - const validFormData = { - get(name: string) { - if (name === 'usernameEmail') return 'admin'; - if (name === 'password') return 'admin'; - }, - }; - - process.env.NEXT_PUBLIC_WORDPRESS_URL = 'http://headless.local'; - - fetchMock.post(`${getGraphqlEndpoint()}`, { - status: 200, - body: JSON.stringify({ - data: { - generateAuthorizationCode: { - error: 'some error', - }, - }, - }), - }); - - const res = await onLogin(validFormData as any as FormData); - - expect(res).toStrictEqual({ error: 'some error' }); - }); - - it('properly logs in a user', async () => { - const tokens = { - accessToken: 'at', - accessTokenExpiration: 1234, - refreshToken: 'rt', - refreshTokenExpiration: 1234, - }; - - const fetchTokensSpy = jest - .spyOn(fetchTokens, 'fetchTokens') - .mockImplementation(async () => tokens); - - const setRefreshTokenSpy = jest - .spyOn(setRefreshToken, 'setRefreshToken') - .mockImplementation(); - - const validFormData = { - get(name: string) { - if (name === 'usernameEmail') return 'admin'; - if (name === 'password') return 'admin'; - }, - }; - - process.env.NEXT_PUBLIC_WORDPRESS_URL = 'http://headless.local'; - - let authCode = '12345'; - - fetchMock.post(`${getGraphqlEndpoint()}`, { - status: 200, - body: JSON.stringify({ - data: { - generateAuthorizationCode: { - code: authCode, - error: null, - }, - }, - }), - }); - - const res = await onLogin(validFormData as any as FormData); - - expect(res).toStrictEqual({ message: 'User was successfully logged in' }); - - expect(fetchTokensSpy).toHaveBeenCalledWith(authCode); - - expect(setRefreshTokenSpy).toHaveBeenCalledWith( - tokens.refreshToken, - tokens.refreshTokenExpiration * 1000, - ); - }); -}); diff --git a/packages/experimental-app-router/tests/server-actions/onLogout.test.ts b/packages/experimental-app-router/tests/server-actions/onLogout.test.ts deleted file mode 100644 index edf23a5e5..000000000 --- a/packages/experimental-app-router/tests/server-actions/onLogout.test.ts +++ /dev/null @@ -1,63 +0,0 @@ -import 'isomorphic-fetch'; -import { onLogout } from '../../src/server-actions/logoutAction.js'; -import fetchMock from 'fetch-mock'; -import { cookies } from 'next/headers.js'; - -// // https://github.com/aelbore/esbuild-jest/issues/26#issuecomment-893763840 -const nextHeaders = { cookies }; - -jest.mock('next/headers.js'); - -describe('onLogout', () => { - const envBackup = process.env; - - beforeEach(() => { - process.env = { ...envBackup }; - }); - - afterEach(() => { - jest.clearAllMocks(); - fetchMock.restore(); - }); - - afterAll(() => { - process.env = envBackup; - }); - - it('return true if cookie exists and gets deleted', async () => { - const cookiesSpy = jest.spyOn(nextHeaders, 'cookies'); - const deleteSpy = jest.fn(); - - // No refresh token - cookiesSpy.mockReturnValue({ - get() { - return { - value: 'values', - name: 'cookieName', - }; - }, - delete: deleteSpy, - } as any); - - const loggedOut = await onLogout(); - - expect(deleteSpy).toHaveBeenCalled(); - expect(loggedOut).toBeTruthy(); - }); - - it("return false if cookie doesn't exist", async () => { - const cookiesSpy = jest.spyOn(nextHeaders, 'cookies'); - - // No refresh token - cookiesSpy.mockReturnValue({ - get() { - return undefined; - }, - delete() {}, - } as any); - - const loggedOut = await onLogout(); - - expect(loggedOut).toBeFalsy(); - }); -}); diff --git a/packages/experimental-app-router/tests/server/routeHandler/index.test.ts b/packages/experimental-app-router/tests/server/routeHandler/index.test.ts deleted file mode 100644 index 88f07f739..000000000 --- a/packages/experimental-app-router/tests/server/routeHandler/index.test.ts +++ /dev/null @@ -1,36 +0,0 @@ -import 'isomorphic-fetch'; -import { NextRequest } from 'next/server'; -import * as faustRouteHandler from '../../../src/server/routeHandler/index.js'; -import * as tokenHandler from '../../../src/server/routeHandler/tokenHandler.js'; -import * as nextNavigation from 'next/navigation.js'; -jest.mock('next/navigation.js'); - -describe('faustRouteHandler', () => { - it('Returns 404 if there are no matching endpoints', async () => { - const notFoundSpy = jest - .spyOn(nextNavigation, 'notFound') - .mockImplementation(); - - const request = new NextRequest( - new Request('http://localhost:3000/api/faust/testing'), - ); - - const response = await faustRouteHandler.faustRouteHandler.GET(request); - - expect(notFoundSpy).toHaveBeenCalledTimes(1); - }); - - it('returns the token endpoint given the correct request url', async () => { - const tokenHandlerSpy = jest - .spyOn(tokenHandler, 'tokenHandler') - .mockImplementation(); - - const request = new NextRequest( - new Request('http://localhost:3000/api/faust/token'), - ); - - const response = await faustRouteHandler.faustRouteHandler.GET(request); - - expect(tokenHandlerSpy).toHaveBeenCalledTimes(1); - }); -}); diff --git a/packages/experimental-app-router/tests/server/routeHandler/tokenHandler.test.ts b/packages/experimental-app-router/tests/server/routeHandler/tokenHandler.test.ts deleted file mode 100644 index 0896c4a42..000000000 --- a/packages/experimental-app-router/tests/server/routeHandler/tokenHandler.test.ts +++ /dev/null @@ -1,134 +0,0 @@ -import 'isomorphic-fetch'; -import * as tokenHandler from '../../../src/server/routeHandler/tokenHandler'; -jest.mock('next/headers.js'); -import { cookies } from 'next/headers.js'; -import fetchMock from 'fetch-mock'; -import * as server from 'next/server'; - -// // https://github.com/aelbore/esbuild-jest/issues/26#issuecomment-893763840 -const nextHeaders = { cookies }; - -describe('tokenHandler', () => { - const envBackup = process.env; - - beforeEach(() => { - process.env = { ...envBackup }; - }); - - afterEach(() => { - jest.clearAllMocks(); - fetchMock.restore(); - }); - - afterAll(() => { - process.env = envBackup; - }); - - it('throws a 500 error if the secret key is not set', async () => { - const req = new Request('http://localhost:3000/api/faust/token'); - - const response = await tokenHandler.tokenHandler(req, server); - - expect(response.status).toBe(500); - expect(await response.json()).toStrictEqual({ - error: 'Internal Server Error', - }); - }); - - it('throws a 401 when the refresh token or code is not present', async () => { - const cookiesSpy = jest.spyOn(nextHeaders, 'cookies'); - - // No refresh token - cookiesSpy.mockReturnValue({ - get() { - return {}; - }, - } as any); - - process.env.FAUST_SECRET_KEY = 'xxxx'; - - const req = new Request('http://localhost:3000/api/faust/token'); - - const response = await tokenHandler.tokenHandler(req, server); - - expect(response.status).toBe(401); - expect(await response.json()).toStrictEqual({ - error: 'Unauthorized', - }); - }); - - it('returns 401 if wp endpoint response was not ok', async () => { - process.env.NEXT_PUBLIC_WORDPRESS_URL = 'http://headless.local'; - process.env.FAUST_SECRET_KEY = 'xxxx'; - - const cookiesSpy = jest.spyOn(nextHeaders, 'cookies'); - - // No refresh token - cookiesSpy.mockReturnValue({ - get() { - return { value: 'my-invalid-rt' }; - }, - } as any); - - fetchMock.post('http://headless.local/?rest_route=/faustwp/v1/authorize', { - status: 401, - }); - - const req = new server.NextRequest( - new Request('http://localhost:3000/api/faust/token'), - ); - - const response = await tokenHandler.tokenHandler(req, server); - - expect(response.status).toBe(401); - expect(await response.json()).toStrictEqual({ error: 'Unauthorized' }); - }); - - it('successfully returns tokens using refresh token', async () => { - process.env.NEXT_PUBLIC_WORDPRESS_URL = 'http://headless.local'; - process.env.FAUST_SECRET_KEY = 'xxxx'; - - const validResponse: tokenHandler.AuthorizeResponse = { - accessToken: 'at', - accessTokenExpiration: 1234, - refreshToken: 'rt', - refreshTokenExpiration: 1234, - }; - - const cookiesSpy = jest.spyOn(nextHeaders, 'cookies'); - - // No refresh token - cookiesSpy.mockReturnValue({ - get() { - return { value: 'my-valid-rt' }; - }, - } as any); - - fetchMock.post( - { - url: 'http://headless.local/?rest_route=/faustwp/v1/authorize', - headers: { - 'Content-Type': 'application/json', - 'x-faustwp-secret': 'xxxx', - }, - body: { - refreshToken: 'my-valid-rt', - code: 'my-code', - }, - }, - { - status: 200, - body: JSON.stringify(validResponse), - }, - ); - - const req = new server.NextRequest( - new Request('http://localhost:3000/api/faust/token?code=my-code'), - ); - - const response = await tokenHandler.tokenHandler(req, server); - - expect(response.status).toBe(200); - expect(await response.json()).toStrictEqual(validResponse); - }); -}); diff --git a/packages/experimental-app-router/tsconfig.json b/packages/experimental-app-router/tsconfig.json deleted file mode 100644 index 1a6420ae9..000000000 --- a/packages/experimental-app-router/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "outDir": "dist", - "target": "es2017", - "rootDir": "src", - "jsx": "react", - "declaration": true - }, - "exclude": ["node_modules", "dist"], - "include": ["src"] -} diff --git a/packages/faustwp-cli/src/telemetry/marshallTelemetryData.ts b/packages/faustwp-cli/src/telemetry/marshallTelemetryData.ts index 07b6a1f5a..150380413 100644 --- a/packages/faustwp-cli/src/telemetry/marshallTelemetryData.ts +++ b/packages/faustwp-cli/src/telemetry/marshallTelemetryData.ts @@ -37,12 +37,6 @@ export const marshallTelemetryData = (command: string) => { | string | undefined, ), - node_faustwp_experimental_app_router_version: sanitizePackageJsonVersion( - packageJson?.dependencies?.['@faustwp/experimental-app-router'] as - | string - | undefined, - ), - node_apollo_client_version: sanitizePackageJsonVersion( packageJson?.dependencies?.['@apollo/client'] as string | undefined, ),