From 0adffc22676a6324ecb66931005a9dfee981ef3c Mon Sep 17 00:00:00 2001 From: Dimitri POSTOLOV Date: Sun, 25 Jun 2023 14:13:57 +0200 Subject: [PATCH] simplify Next.js example + add symlinks to React Vite to maintain 2 examples from 1 place (#3281) --- .eslintrc.js | 5 +- examples/graphiql-create-react-app/README.md | 4 +- .../graphiql-create-react-app/package.json | 3 - .../graphiql-create-react-app/src/App.tsx | 39 +- .../graphiql-create-react-app/src/index.tsx | 2 +- examples/monaco-graphql-nextjs/.gitignore | 2 +- examples/monaco-graphql-nextjs/README.md | 12 +- examples/monaco-graphql-nextjs/next.config.js | 13 +- examples/monaco-graphql-nextjs/package.json | 37 +- .../monaco-graphql-nextjs/public/next.svg | 1 - .../monaco-graphql-nextjs/public/thirteen.svg | 1 - .../monaco-graphql-nextjs/public/vercel.svg | 1 - .../src/components/editor.tsx | 208 -------- .../monaco-graphql-nextjs/src/constants.ts | 84 ++++ examples/monaco-graphql-nextjs/src/editor.tsx | 156 ++++++ .../monaco-graphql-nextjs/src/pages/_app.tsx | 2 +- .../src/pages/_document.tsx | 13 - .../src/pages/api/hello.ts | 13 - .../monaco-graphql-nextjs/src/pages/index.tsx | 13 +- .../src/style.css} | 2 +- .../src/styles/globals.css | 41 -- examples/monaco-graphql-react-vite/README.md | 7 +- examples/monaco-graphql-react-vite/index.html | 6 +- .../monaco-graphql-react-vite/package.json | 3 +- .../monaco-graphql-react-vite/src/App.tsx | 182 ------- .../src/constants.ts | 46 +- .../monaco-graphql-react-vite/src/debounce.ts | 15 - .../monaco-graphql-react-vite/src/editor.tsx | 1 + .../monaco-graphql-react-vite/src/index.tsx | 6 +- .../monaco-graphql-react-vite/src/style.css | 1 + .../monaco-graphql-react-vite/vite.config.ts | 2 +- package.json | 5 +- yarn.lock | 476 +++++++++++++++++- 33 files changed, 780 insertions(+), 622 deletions(-) delete mode 100644 examples/monaco-graphql-nextjs/public/next.svg delete mode 100644 examples/monaco-graphql-nextjs/public/thirteen.svg delete mode 100644 examples/monaco-graphql-nextjs/public/vercel.svg delete mode 100644 examples/monaco-graphql-nextjs/src/components/editor.tsx create mode 100644 examples/monaco-graphql-nextjs/src/constants.ts create mode 100644 examples/monaco-graphql-nextjs/src/editor.tsx delete mode 100644 examples/monaco-graphql-nextjs/src/pages/_document.tsx delete mode 100644 examples/monaco-graphql-nextjs/src/pages/api/hello.ts rename examples/{monaco-graphql-react-vite/src/app.css => monaco-graphql-nextjs/src/style.css} (93%) delete mode 100644 examples/monaco-graphql-nextjs/src/styles/globals.css delete mode 100644 examples/monaco-graphql-react-vite/src/App.tsx mode change 100644 => 120000 examples/monaco-graphql-react-vite/src/constants.ts delete mode 100644 examples/monaco-graphql-react-vite/src/debounce.ts create mode 120000 examples/monaco-graphql-react-vite/src/editor.tsx create mode 120000 examples/monaco-graphql-react-vite/src/style.css diff --git a/.eslintrc.js b/.eslintrc.js index 62919fc4bd3..e4c436db408 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -10,10 +10,7 @@ module.exports = { root: true, reportUnusedDisableDirectives: true, - ignorePatterns: [ - // CRA example has its own eslint config - 'examples/graphiql-create-react-app', - ], + ignorePatterns: ['react-app-env.d.ts', 'next-env.d.ts'], overrides: [ { // Rules for all code files diff --git a/examples/graphiql-create-react-app/README.md b/examples/graphiql-create-react-app/README.md index 48fe6fba0ed..ed1d4301f9c 100644 --- a/examples/graphiql-create-react-app/README.md +++ b/examples/graphiql-create-react-app/README.md @@ -1,8 +1,8 @@ -## GraphiQL `create-react-app` Example +# GraphiQL `create-react-app` Example This example demonstrates how to transpile your own custom ES6 and typescript GraphiQL implementation bootstrapped with `create-react-app`, no config needed. -### Setup +## Setup 1. `yarn` and `yarn start` from this folder to start `react-scripts` dev server. 1. `yarn build` from this folder to build production ready transpiled files using `react-scripts`. Find the output in `build` folder. diff --git a/examples/graphiql-create-react-app/package.json b/examples/graphiql-create-react-app/package.json index 738fe6e20eb..de4b96f132c 100644 --- a/examples/graphiql-create-react-app/package.json +++ b/examples/graphiql-create-react-app/package.json @@ -13,9 +13,6 @@ "start": "react-scripts start", "build": "react-scripts build" }, - "eslintConfig": { - "extends": "react-app" - }, "browserslist": { "production": [ ">0.2%", diff --git a/examples/graphiql-create-react-app/src/App.tsx b/examples/graphiql-create-react-app/src/App.tsx index 28a8c1f1738..022260f5c67 100644 --- a/examples/graphiql-create-react-app/src/App.tsx +++ b/examples/graphiql-create-react-app/src/App.tsx @@ -1,25 +1,24 @@ import React from 'react'; -import GraphiQL from 'graphiql'; +import { GraphiQL } from 'graphiql'; +import type { Fetcher } from '@graphiql/toolkit'; import 'graphiql/graphiql.min.css'; -const App = () => ( - { - const data = await fetch( - 'https://swapi-graphql.netlify.app/.netlify/functions/index', - { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json', - }, - body: JSON.stringify(graphQLParams), - credentials: 'same-origin', - }, - ); - return data.json().catch(() => data.text()); - }} - /> -); +const fetcher: Fetcher = async graphQLParams => { + const data = await fetch( + 'https://swapi-graphql.netlify.app/.netlify/functions/index', + { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(graphQLParams), + credentials: 'same-origin', + }, + ); + return data.json().catch(() => data.text()); +}; + +const App = () => ; export default App; diff --git a/examples/graphiql-create-react-app/src/index.tsx b/examples/graphiql-create-react-app/src/index.tsx index d27cdb02a96..ac32f49914d 100644 --- a/examples/graphiql-create-react-app/src/index.tsx +++ b/examples/graphiql-create-react-app/src/index.tsx @@ -3,5 +3,5 @@ import { createRoot } from 'react-dom/client'; import App from './App'; import './index.css'; -const root = createRoot(document.getElementById('root')); +const root = createRoot(document.getElementById('root')!); root.render(); diff --git a/examples/monaco-graphql-nextjs/.gitignore b/examples/monaco-graphql-nextjs/.gitignore index a680367ef56..536d88c8a6d 100644 --- a/examples/monaco-graphql-nextjs/.gitignore +++ b/examples/monaco-graphql-nextjs/.gitignore @@ -1 +1 @@ -.next +.next/ diff --git a/examples/monaco-graphql-nextjs/README.md b/examples/monaco-graphql-nextjs/README.md index d7922ae6aee..d5901e71bac 100644 --- a/examples/monaco-graphql-nextjs/README.md +++ b/examples/monaco-graphql-nextjs/README.md @@ -1,3 +1,7 @@ +# Monaco GraphQL Next.js Example + +## Getting Started + This is a working example of `monaco-editor` and `monaco-graphql` using `next.js` 13 @@ -12,9 +16,9 @@ similar client-side-only loading (with or without dynamic import) should be fine. For more information on loading `monaco-editor` in esm contexts, you can [read their docs](https://github.com/microsoft/monaco-editor/blob/main/docs/integrate-esm.md) -This work was sponsored by [Grafbase](https://grafbase.com/)! +This work was sponsored by [Grafbase](https://grafbase.com)! -# Setup +## Setup -1. npm install -1. npm start +1. In monorepo root directory run `yarn` and `yarn build`. +1. In this directory run `yarn dev`. diff --git a/examples/monaco-graphql-nextjs/next.config.js b/examples/monaco-graphql-nextjs/next.config.js index 677993b4512..2ae3c4371ad 100644 --- a/examples/monaco-graphql-nextjs/next.config.js +++ b/examples/monaco-graphql-nextjs/next.config.js @@ -1,9 +1,11 @@ -const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin'); -const { patchWebpackConfig } = require('next-global-css'); +import MonacoWebpackPlugin from 'monaco-editor-webpack-plugin'; +import { patchWebpackConfig } from 'next-global-css'; /** @type {import('next').NextConfig} */ const nextConfig = { - reactStrictMode: true, + eslint: { + ignoreDuringBuilds: true, + }, trailingSlash: true, webpack(config, options) { // this fixes some issues with loading web workers @@ -13,7 +15,6 @@ const nextConfig = { patchWebpackConfig(config, options); config.resolve.alias = { ...config.resolve.alias, - // this solves a bug with more recent `monaco-editor` versions in next.js, // where vscode contains a version of `marked` with modules pre-transpiled, which seems to break the build. // @@ -36,7 +37,7 @@ const nextConfig = { label: 'graphql', worker: { id: 'graphql', - entry: require.resolve('monaco-graphql/esm/graphql.worker.js'), + entry: 'monaco-graphql/esm/graphql.worker.js', }, }, ], @@ -49,4 +50,4 @@ const nextConfig = { }, }; -module.exports = nextConfig; +export default nextConfig; diff --git a/examples/monaco-graphql-nextjs/package.json b/examples/monaco-graphql-nextjs/package.json index 8d2742a4ff0..98cbf92df68 100644 --- a/examples/monaco-graphql-nextjs/package.json +++ b/examples/monaco-graphql-nextjs/package.json @@ -1,32 +1,31 @@ { - "name": "next-monaco-example", - "version": "0.1.0", + "name": "example-monaco-graphql-nextjs", + "version": "0.0.0", "private": true, + "type": "module", "scripts": { - "dev": "next dev", + "dev": "next", "build": "next build", - "start": "next start", - "lint": "next lint" + "start": "next start" }, "dependencies": { - "@graphiql/toolkit": "^0.8.0", - "@types/node": "18.13.0", - "@types/react": "18.0.28", - "@types/react-dom": "18.0.11", - "eslint": "8.34.0", - "eslint-config-next": "13.1.6", + "prettier": "3.0.0-alpha.12", + "@graphiql/toolkit": "^0.8.4", "graphql": "^16.6.0", - "graphql-ws": "^5.11.3", + "graphql-ws": "^5.5.5", "jsonc-parser": "^3.2.0", "marked": "^4.2.12", - "monaco-editor": "^0.35.0", + "monaco-editor": "^0.39.0", "monaco-editor-webpack-plugin": "^7.0.1", - "monaco-graphql": "^1.1.7", - "next": "13.1.6", - "next-global-css": "^1.3.1", - "prettier": "^2.8.4", + "monaco-graphql": "^1.2.4", + "next": "13.4.7", "react": "18.2.0", - "react-dom": "18.2.0", - "typescript": "4.9.5" + "react-dom": "18.2.0" + }, + "devDependencies": { + "@types/node": "18.16.18", + "@types/react": "18.2.14", + "next-global-css": "1.3.1", + "typescript": "5.1.3" } } diff --git a/examples/monaco-graphql-nextjs/public/next.svg b/examples/monaco-graphql-nextjs/public/next.svg deleted file mode 100644 index 5174b28c565..00000000000 --- a/examples/monaco-graphql-nextjs/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/monaco-graphql-nextjs/public/thirteen.svg b/examples/monaco-graphql-nextjs/public/thirteen.svg deleted file mode 100644 index 8977c1bd123..00000000000 --- a/examples/monaco-graphql-nextjs/public/thirteen.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/monaco-graphql-nextjs/public/vercel.svg b/examples/monaco-graphql-nextjs/public/vercel.svg deleted file mode 100644 index d2f84222734..00000000000 --- a/examples/monaco-graphql-nextjs/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/monaco-graphql-nextjs/src/components/editor.tsx b/examples/monaco-graphql-nextjs/src/components/editor.tsx deleted file mode 100644 index c2d7ab503d4..00000000000 --- a/examples/monaco-graphql-nextjs/src/components/editor.tsx +++ /dev/null @@ -1,208 +0,0 @@ -import React, { useEffect } from 'react'; -import { getIntrospectionQuery, IntrospectionQuery } from 'graphql'; -import { Uri, editor, KeyMod, KeyCode, languages } from 'monaco-editor'; -import { initializeMode } from 'monaco-graphql/esm/initializeMode'; -import { createGraphiQLFetcher } from '@graphiql/toolkit'; -import * as JSONC from 'jsonc-parser'; - -/** - * Copied from graphql/graphiql/examples/monaco-graphql-vite - */ - -function debounce any>(duration: number, fn: F) { - let timeout: number | null; - return function (this: any, ...args: Parameters) { - if (timeout) { - window.clearTimeout(timeout); - } - timeout = window.setTimeout(() => { - timeout = null; - fn(args); - }, duration); - }; -} - -const fetcher = createGraphiQLFetcher({ - url: 'https://swapi-graphql.netlify.app/.netlify/functions/index/', -}); -const defaultVariables = - localStorage.getItem('variables') ?? - ` - { - // limit will appear here as autocomplete, - // and because the default value is 0, will - // complete as such - } -`; - -const getSchema = async () => - fetcher({ - query: getIntrospectionQuery(), - operationName: 'IntrospectionQuery', - }); - -const getOrCreateModel = (uri: string, value: string) => { - return ( - editor.getModel(Uri.file(uri)) ?? - editor.createModel(value, uri.split('.').pop(), Uri.file(uri)) - ); -}; - -const execOperation = async function () { - const variables = editor.getModel(Uri.file('variables.json'))!.getValue(); - const operations = editor.getModel(Uri.file('operation.graphql'))!.getValue(); - const resultsModel = editor.getModel(Uri.file('results.json')); - const result = await fetcher({ - query: operations, - variables: JSON.stringify(JSONC.parse(variables)), - }); - // TODO: this demo only supports a single iteration for http GET/POST, - // no multipart or subscriptions yet. - // @ts-expect-error - const data = await result.next(); - - resultsModel?.setValue(JSON.stringify(data.value, null, 2)); -}; - -const queryAction = { - id: 'graphql-run', - label: 'Run Operation', - contextMenuOrder: 0, - contextMenuGroupId: 'graphql', - keybindings: [ - // eslint-disable-next-line no-bitwise - KeyMod.CtrlCmd | KeyCode.Enter, - ], - run: execOperation, -}; -// set these early on so that initial variables with comments don't flash an error -languages.json.jsonDefaults.setDiagnosticsOptions({ - allowComments: true, - trailingCommas: 'ignore', -}); - -const createEditor = ( - ref: React.MutableRefObject, - options: editor.IStandaloneEditorConstructionOptions, -) => editor.create(ref.current as unknown as HTMLElement, options); - -export default function Editor() { - const opsRef = React.useRef(null); - const varsRef = React.useRef(null); - const resultsRef = React.useRef(null); - const [queryEditor, setQueryEditor] = - React.useState(null); - const [variablesEditor, setVariablesEditor] = - React.useState(null); - const [resultsViewer, setResultsViewer] = - React.useState(null); - const [schema, setSchema] = React.useState(null); - const [loading, setLoading] = React.useState(false); - - /** - * Create the models & editors - */ - useEffect(() => { - const queryModel = getOrCreateModel('operation.graphql', ''); - const variablesModel = getOrCreateModel('variables.json', defaultVariables); - const resultsModel = getOrCreateModel('results.json', '{}'); - - if (!queryEditor) { - setQueryEditor( - createEditor(opsRef, { - theme: 'vs-dark', - model: queryModel, - language: 'graphql', - }), - ); - } - if (!variablesEditor) { - setVariablesEditor( - createEditor(varsRef, { - theme: 'vs-dark', - model: variablesModel, - }), - ); - } - if (!resultsViewer) { - setResultsViewer( - createEditor(resultsRef, { - theme: 'vs-dark', - model: resultsModel, - readOnly: true, - smoothScrolling: true, - }), - ); - } - queryModel.onDidChangeContent( - debounce(300, () => { - localStorage.setItem('operations', queryModel.getValue()); - }), - ); - variablesModel.onDidChangeContent( - debounce(300, () => { - localStorage.setItem('variables', variablesModel.getValue()); - }), - ); - // eslint-disable-next-line react-hooks/exhaustive-deps -- only run once on mount - }, []); - - useEffect(() => { - queryEditor?.addAction(queryAction); - variablesEditor?.addAction(queryAction); - }, [queryEditor, variablesEditor]); - /** - * Handle the initial schema load - */ - useEffect(() => { - if (schema || loading) { - return; - } - - setLoading(true); - void getSchema() - .then(data => { - if (!('data' in data)) { - throw new Error( - 'this demo does not support subscriptions or http multipart yet', - ); - } - initializeMode({ - diagnosticSettings: { - validateVariablesJSON: { - [Uri.file('operation.graphql').toString()]: [ - Uri.file('variables.json').toString(), - ], - }, - jsonDiagnosticSettings: { - validate: true, - schemaValidation: 'error', - // set these again, because we are entirely re-setting them here - allowComments: true, - trailingCommas: 'ignore', - }, - }, - schemas: [ - { - introspectionJSON: data.data as unknown as IntrospectionQuery, - uri: 'myschema.graphql', - }, - ], - }); - - setSchema(data.data); - }) - .then(() => setLoading(false)); - }, [schema, loading]); - return ( -
-
-
-
-
-
-
-
-
- ); -} diff --git a/examples/monaco-graphql-nextjs/src/constants.ts b/examples/monaco-graphql-nextjs/src/constants.ts new file mode 100644 index 00000000000..237816702e7 --- /dev/null +++ b/examples/monaco-graphql-nextjs/src/constants.ts @@ -0,0 +1,84 @@ +import { editor, Uri } from 'monaco-editor'; +import { initializeMode } from 'monaco-graphql/esm/initializeMode'; + +type ModelType = 'operations' | 'variables' | 'response'; + +export const GRAPHQL_URL = 'https://countries.trevorblades.com'; + +export const DEFAULT_EDITOR_OPTIONS: editor.IStandaloneEditorConstructionOptions = + { + theme: 'vs-dark', + minimap: { + enabled: false, + }, + }; + +export const STORAGE_KEY = { + operations: 'operations', + variables: 'variables', +}; + +export const DEFAULT_VALUE: Record = { + operations: + localStorage.getItem(STORAGE_KEY.operations) ?? + `# CMD/CTRL + Return/Enter will execute the operation, +# same in the variables editor below +# also available via context menu & F1 command palette + +query($code: ID!) { + country(code: $code) { + awsRegion + native + phone + } +}`, + variables: + localStorage.getItem(STORAGE_KEY.variables) ?? + `{ + "code": "UA" +}`, + response: '', +}; + +export const FILE_SYSTEM_PATH: Record< + ModelType, + `${string}.${'graphql' | 'json'}` +> = { + operations: 'operations.graphql', + variables: 'variables.json', + response: 'response.json', +}; + +export const MONACO_GRAPHQL_API = initializeMode({ + diagnosticSettings: { + validateVariablesJSON: { + [Uri.file(FILE_SYSTEM_PATH.operations).toString()]: [ + Uri.file(FILE_SYSTEM_PATH.variables).toString(), + ], + }, + jsonDiagnosticSettings: { + validate: true, + schemaValidation: 'error', + // set these again, because we are entirely re-setting them here + allowComments: true, + trailingCommas: 'ignore', + }, + }, +}); + +export const MODEL: Record = { + operations: getOrCreateModel('operations'), + variables: getOrCreateModel('variables'), + response: getOrCreateModel('response'), +}; + +function getOrCreateModel( + type: 'operations' | 'variables' | 'response', +): editor.ITextModel { + const uri = Uri.file(FILE_SYSTEM_PATH[type]); + const defaultValue = DEFAULT_VALUE[type]; + const language = uri.path.split('.').pop(); + return ( + editor.getModel(uri) ?? editor.createModel(defaultValue, language, uri) + ); +} diff --git a/examples/monaco-graphql-nextjs/src/editor.tsx b/examples/monaco-graphql-nextjs/src/editor.tsx new file mode 100644 index 00000000000..5ae0986ebb8 --- /dev/null +++ b/examples/monaco-graphql-nextjs/src/editor.tsx @@ -0,0 +1,156 @@ +import { ReactElement, useEffect, useRef, useState } from 'react'; +import { getIntrospectionQuery, IntrospectionQuery } from 'graphql'; +import { editor, KeyMod, KeyCode, languages } from 'monaco-editor'; +import { createGraphiQLFetcher } from '@graphiql/toolkit'; +import * as JSONC from 'jsonc-parser'; +import { + DEFAULT_EDITOR_OPTIONS, + MONACO_GRAPHQL_API, + STORAGE_KEY, + GRAPHQL_URL, + MODEL, +} from './constants'; + +const fetcher = createGraphiQLFetcher({ url: GRAPHQL_URL }); + +async function getSchema(): Promise { + const data = await fetcher({ + query: getIntrospectionQuery(), + operationName: 'IntrospectionQuery', + }); + const introspectionJSON = + 'data' in data && (data.data as unknown as IntrospectionQuery); + + if (!introspectionJSON) { + throw new Error( + 'this demo does not support subscriptions or http multipart yet', + ); + } + return introspectionJSON; +} + +function debounce any>(duration: number, fn: F) { + let timeout = 0; + return (...args: Parameters) => { + if (timeout) { + window.clearTimeout(timeout); + } + timeout = window.setTimeout(() => { + timeout = 0; + fn(args); + }, duration); + }; +} + +const queryAction: editor.IActionDescriptor = { + id: 'graphql-run', + label: 'Run Operation', + contextMenuOrder: 0, + contextMenuGroupId: 'graphql', + keybindings: [ + // eslint-disable-next-line no-bitwise + KeyMod.CtrlCmd | KeyCode.Enter, + ], + async run() { + const result = await fetcher({ + query: MODEL.operations.getValue(), + variables: JSONC.parse(MODEL.variables.getValue()), + }); + // TODO: this demo only supports a single iteration for http GET/POST, + // no multipart or subscriptions yet. + // @ts-expect-error + const data = await result.next(); + MODEL.response.setValue(JSON.stringify(data.value, null, 2)); + }, +}; +// set these early on so that initial variables with comments don't flash an error +languages.json.jsonDefaults.setDiagnosticsOptions({ + allowComments: true, + trailingCommas: 'ignore', +}); + +type CodeEditor = editor.IStandaloneCodeEditor | null; + +export default function Editor(): ReactElement { + const operationsRef = useRef(null); + const variablesRef = useRef(null); + const responseRef = useRef(null); + const [operationsEditor, setOperationsEditor] = useState(null); + const [variablesEditor, setVariablesEditor] = useState(null); + const [responseEditor, setResponseEditor] = useState(null); + const [schema, setSchema] = useState(null); + const [loading, setLoading] = useState(false); + /** + * Create the models & editors + */ + useEffect(() => { + if (!operationsEditor) { + const codeEditor = editor.create(operationsRef.current!, { + model: MODEL.operations, + ...DEFAULT_EDITOR_OPTIONS, + }); + codeEditor.addAction(queryAction); + MODEL.operations.onDidChangeContent( + debounce(300, () => { + localStorage.setItem( + STORAGE_KEY.operations, + MODEL.operations.getValue(), + ); + }), + ); + setOperationsEditor(codeEditor); + } + if (!variablesEditor) { + const codeEditor = editor.create(variablesRef.current!, { + model: MODEL.variables, + ...DEFAULT_EDITOR_OPTIONS, + }); + codeEditor.addAction(queryAction); + MODEL.variables.onDidChangeContent( + debounce(300, () => { + localStorage.setItem( + STORAGE_KEY.variables, + MODEL.variables.getValue(), + ); + }), + ); + setVariablesEditor(codeEditor); + } + if (!responseEditor) { + setResponseEditor( + editor.create(responseRef.current!, { + model: MODEL.response, + ...DEFAULT_EDITOR_OPTIONS, + readOnly: true, + smoothScrolling: true, + }), + ); + } + }, []); // eslint-disable-line react-hooks/exhaustive-deps -- only run once on mount + /** + * Handle the initial schema load + */ + useEffect(() => { + if (schema || loading) { + return; + } + setLoading(true); + void getSchema().then(async introspectionJSON => { + MONACO_GRAPHQL_API.setSchemaConfig([ + { introspectionJSON, uri: 'myschema.graphql' }, + ]); + setSchema(introspectionJSON); + setLoading(false); + }); + }, [schema, loading]); + + return ( + <> +
+
+
+
+
+ + ); +} diff --git a/examples/monaco-graphql-nextjs/src/pages/_app.tsx b/examples/monaco-graphql-nextjs/src/pages/_app.tsx index 766bf32757c..70321d1ef2f 100644 --- a/examples/monaco-graphql-nextjs/src/pages/_app.tsx +++ b/examples/monaco-graphql-nextjs/src/pages/_app.tsx @@ -1,5 +1,5 @@ -import '../styles/globals.css'; import type { AppProps } from 'next/app'; +import '../style.css'; export default function App({ Component, pageProps }: AppProps) { return ; diff --git a/examples/monaco-graphql-nextjs/src/pages/_document.tsx b/examples/monaco-graphql-nextjs/src/pages/_document.tsx deleted file mode 100644 index e1e9cbbb75a..00000000000 --- a/examples/monaco-graphql-nextjs/src/pages/_document.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { Html, Head, Main, NextScript } from 'next/document'; - -export default function Document() { - return ( - - - -
- - - - ); -} diff --git a/examples/monaco-graphql-nextjs/src/pages/api/hello.ts b/examples/monaco-graphql-nextjs/src/pages/api/hello.ts deleted file mode 100644 index 141fc70a123..00000000000 --- a/examples/monaco-graphql-nextjs/src/pages/api/hello.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Next.js API route support: https://nextjs.org/docs/api-routes/introduction -import type { NextApiRequest, NextApiResponse } from 'next'; - -type Data = { - name: string; -}; - -export default function handler( - _req: NextApiRequest, - res: NextApiResponse, -) { - res.status(200).json({ name: 'John Doe' }); -} diff --git a/examples/monaco-graphql-nextjs/src/pages/index.tsx b/examples/monaco-graphql-nextjs/src/pages/index.tsx index de6a13d6c2c..f6541d67d6a 100644 --- a/examples/monaco-graphql-nextjs/src/pages/index.tsx +++ b/examples/monaco-graphql-nextjs/src/pages/index.tsx @@ -1,23 +1,18 @@ import Head from 'next/head'; import dynamic from 'next/dynamic'; -const DynamicEditor = dynamic(() => import('../components/editor'), { - suspense: true, - ssr: false, -}); +const DynamicEditor = dynamic(() => import('../editor'), { ssr: false }); export default function Home() { return ( <> - Create Next App - + Monaco Next.js Example + -
- -
+ ); } diff --git a/examples/monaco-graphql-react-vite/src/app.css b/examples/monaco-graphql-nextjs/src/style.css similarity index 93% rename from examples/monaco-graphql-react-vite/src/app.css rename to examples/monaco-graphql-nextjs/src/style.css index e318a0c25f1..12b19fc2642 100644 --- a/examples/monaco-graphql-react-vite/src/app.css +++ b/examples/monaco-graphql-nextjs/src/style.css @@ -3,7 +3,7 @@ body { height: 100vh; } -#root { +#__next { display: flex; height: inherit; } diff --git a/examples/monaco-graphql-nextjs/src/styles/globals.css b/examples/monaco-graphql-nextjs/src/styles/globals.css deleted file mode 100644 index 2a1436a33b2..00000000000 --- a/examples/monaco-graphql-nextjs/src/styles/globals.css +++ /dev/null @@ -1,41 +0,0 @@ -html, -body, -#__next, -main { - max-width: 100vw; - height: 100vh; - margin: 0; - background-color: #1e1e1e; -} - -body { - color: rgb(var(--foreground-rgb)); - background: linear-gradient( - to bottom, - transparent, - rgb(var(--background-end-rgb)) - ) - rgb(var(--background-start-rgb)); -} - -#wrapper { - display: flex; - flex-direction: row; - height: 97.7vh; -} - -.pane { - height: 100%; - width: 50%; - display: flex; - flex-direction: column; - align-self: stretch; -} - -#left-pane .editor { - height: 50%; -} - -#right-pane .editor { - height: 100%; -} diff --git a/examples/monaco-graphql-react-vite/README.md b/examples/monaco-graphql-react-vite/README.md index 54f551bd212..17be8deb661 100644 --- a/examples/monaco-graphql-react-vite/README.md +++ b/examples/monaco-graphql-react-vite/README.md @@ -1,4 +1,6 @@ -## Description +# Monaco-GraphQL React Vite Example + +## Getting Started This is an extremely naive & minimalist implementation of `monaco-graphql` with `react` using `vite` as a bundler. @@ -10,4 +12,5 @@ This workspace could be used to help us prototype components & hooks for ## Setup -In this directory, you can just run `yarn` and `yarn dev` +1. In monorepo root directory run `yarn` and `yarn build`. +1. In this directory run `yarn dev`. diff --git a/examples/monaco-graphql-react-vite/index.html b/examples/monaco-graphql-react-vite/index.html index 86de9ca3179..faadf86d987 100644 --- a/examples/monaco-graphql-react-vite/index.html +++ b/examples/monaco-graphql-react-vite/index.html @@ -3,11 +3,11 @@ - - Monaco Demo + + Monaco React Vite Example -
+
Loading...
diff --git a/examples/monaco-graphql-react-vite/package.json b/examples/monaco-graphql-react-vite/package.json index 06ef03df9af..77a4de61f2b 100644 --- a/examples/monaco-graphql-react-vite/package.json +++ b/examples/monaco-graphql-react-vite/package.json @@ -3,12 +3,13 @@ "private": true, "version": "0.0.0", "dependencies": { + "prettier": "3.0.0-alpha.12", "@graphiql/toolkit": "^0.8.4", "graphql-language-service": "^5.1.7", "monaco-graphql": "^1.2.4", "react": "^18.2.0", "react-dom": "^18.2.0", - "graphql": "^16.7.1", + "graphql": "^16.6.0", "jsonc-parser": "^3.2.0", "monaco-editor": "^0.39.0" }, diff --git a/examples/monaco-graphql-react-vite/src/App.tsx b/examples/monaco-graphql-react-vite/src/App.tsx deleted file mode 100644 index a08a8254664..00000000000 --- a/examples/monaco-graphql-react-vite/src/App.tsx +++ /dev/null @@ -1,182 +0,0 @@ -import { ReactElement, useEffect, useRef, useState } from 'react'; -import { getIntrospectionQuery, IntrospectionQuery } from 'graphql'; -import { Uri, editor, KeyMod, KeyCode, languages } from 'monaco-editor'; -import { initializeMode } from 'monaco-graphql/dist/initializeMode'; -import { createGraphiQLFetcher, SyncFetcherResult } from '@graphiql/toolkit'; -import * as JSONC from 'jsonc-parser'; -import { debounce } from './debounce'; -import { - DEFAULT_VALUE, - DEFAULT_EDITOR_OPTIONS, - GRAPHQL_URL, - FILE_SYSTEM_PATH, - STORAGE_KEY, -} from './constants'; - -const fetcher = createGraphiQLFetcher({ url: GRAPHQL_URL }); - -async function getSchema(): Promise { - return fetcher({ - query: getIntrospectionQuery(), - operationName: 'IntrospectionQuery', - }); -} - -export function getOrCreateModel( - type: 'operations' | 'variables' | 'response', -): editor.ITextModel { - const uri = Uri.file(FILE_SYSTEM_PATH[type]); - const defaultValue = DEFAULT_VALUE[type]; - const language = uri.path.split('.').pop(); - return ( - editor.getModel(uri) ?? editor.createModel(defaultValue, language, uri) - ); -} - -async function execOperation(): Promise { - const operationsModel = getOrCreateModel('operations'); - const variablesModel = getOrCreateModel('variables'); - const responseModel = getOrCreateModel('response'); - const result = await fetcher({ - query: operationsModel.getValue(), - variables: JSONC.parse(variablesModel.getValue()), - }); - // TODO: this demo only supports a single iteration for http GET/POST, - // no multipart or subscriptions yet. - // @ts-expect-error - const data = await result.next(); - - responseModel.setValue(JSON.stringify(data.value, null, 2)); -} - -const queryAction: editor.IActionDescriptor = { - id: 'graphql-run', - label: 'Run Operation', - contextMenuOrder: 0, - contextMenuGroupId: 'graphql', - keybindings: [ - // eslint-disable-next-line no-bitwise - KeyMod.CtrlCmd | KeyCode.Enter, - ], - run: execOperation, -}; -// set these early on so that initial variables with comments don't flash an error -languages.json.jsonDefaults.setDiagnosticsOptions({ - allowComments: true, - trailingCommas: 'ignore', -}); - -type Editor = editor.IStandaloneCodeEditor | null; - -export default function App(): ReactElement { - const operationsRef = useRef(null); - const variablesRef = useRef(null); - const responseRef = useRef(null); - const [operationsEditor, setOperationsEditor] = useState(null); - const [variablesEditor, setVariablesEditor] = useState(null); - const [responseEditor, setResponseEditor] = useState(null); - const [schema, setSchema] = useState(null); - const [loading, setLoading] = useState(false); - - /** - * Create the models & editors - */ - useEffect(() => { - const queryModel = getOrCreateModel('operations'); - const variablesModel = getOrCreateModel('variables'); - const resultsModel = getOrCreateModel('response'); - - if (!operationsEditor) { - setOperationsEditor( - editor.create(operationsRef.current!, { - model: queryModel, - ...DEFAULT_EDITOR_OPTIONS, - }), - ); - } - if (!variablesEditor) { - setVariablesEditor( - editor.create(variablesRef.current!, { - model: variablesModel, - ...DEFAULT_EDITOR_OPTIONS, - }), - ); - } - if (!responseEditor) { - setResponseEditor( - editor.create(responseRef.current!, { - model: resultsModel, - ...DEFAULT_EDITOR_OPTIONS, - readOnly: true, - smoothScrolling: true, - }), - ); - } - queryModel.onDidChangeContent( - debounce(300, () => { - localStorage.setItem(STORAGE_KEY.operations, queryModel.getValue()); - }), - ); - variablesModel.onDidChangeContent( - debounce(300, () => { - localStorage.setItem(STORAGE_KEY.variables, variablesModel.getValue()); - }), - ); - // eslint-disable-next-line react-hooks/exhaustive-deps -- only run once on mount - }, []); - - useEffect(() => { - operationsEditor?.addAction(queryAction); - variablesEditor?.addAction(queryAction); - }, [operationsEditor, variablesEditor]); - /** - * Handle the initial schema load - */ - useEffect(() => { - if (schema || loading) { - return; - } - setLoading(true); - - void getSchema().then(data => { - const introspectionJSON = - 'data' in data && (data.data as unknown as IntrospectionQuery); - - if (!introspectionJSON) { - throw new Error( - 'this demo does not support subscriptions or http multipart yet', - ); - } - initializeMode({ - diagnosticSettings: { - validateVariablesJSON: { - [Uri.file(FILE_SYSTEM_PATH.operations).toString()]: [ - Uri.file(FILE_SYSTEM_PATH.variables).toString(), - ], - }, - jsonDiagnosticSettings: { - validate: true, - schemaValidation: 'error', - // set these again, because we are entirely re-setting them here - allowComments: true, - trailingCommas: 'ignore', - }, - }, - schemas: [{ introspectionJSON, uri: 'myschema.graphql' }], - }); - - setSchema(introspectionJSON); - setLoading(false); - }); - }, [schema, loading]); - - return ( - <> -
-
-
-
-
- - ); -} diff --git a/examples/monaco-graphql-react-vite/src/constants.ts b/examples/monaco-graphql-react-vite/src/constants.ts deleted file mode 100644 index 7f064882159..00000000000 --- a/examples/monaco-graphql-react-vite/src/constants.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { editor } from 'monaco-editor'; - -type ModelType = 'operations' | 'variables' | 'response'; - -export const GRAPHQL_URL = 'https://countries.trevorblades.com'; - -export const DEFAULT_EDITOR_OPTIONS: editor.IStandaloneEditorConstructionOptions = - { - theme: 'vs-dark', - minimap: { - enabled: false, - }, - }; - -export const STORAGE_KEY = { - operations: 'operations', - variables: 'variables', -}; - -export const DEFAULT_VALUE: Record = { - operations: - localStorage.getItem(STORAGE_KEY.operations) ?? - `# cmd/ctrl + return/enter will execute the op, -# same in variables editor below -# also available via context menu & f1 command palette - -query($code: ID!) { - country(code: $code) { - awsRegion - native - phone - } -}`, - variables: localStorage.getItem(STORAGE_KEY.variables) ?? '{}', - response: '', -}; - -export const FILE_SYSTEM_PATH: Record< - ModelType, - `${string}.${'graphql' | 'json'}` -> = { - operations: 'operations.graphql', - variables: 'variables.json', - response: 'response.json', -}; diff --git a/examples/monaco-graphql-react-vite/src/constants.ts b/examples/monaco-graphql-react-vite/src/constants.ts new file mode 120000 index 00000000000..5e6ab6e6068 --- /dev/null +++ b/examples/monaco-graphql-react-vite/src/constants.ts @@ -0,0 +1 @@ +../../monaco-graphql-nextjs/src/constants.ts \ No newline at end of file diff --git a/examples/monaco-graphql-react-vite/src/debounce.ts b/examples/monaco-graphql-react-vite/src/debounce.ts deleted file mode 100644 index db7fd55fece..00000000000 --- a/examples/monaco-graphql-react-vite/src/debounce.ts +++ /dev/null @@ -1,15 +0,0 @@ -export function debounce any>( - duration: number, - fn: F, -) { - let timeout: number | null; - return function (this: any, ...args: Parameters) { - if (timeout) { - window.clearTimeout(timeout); - } - timeout = window.setTimeout(() => { - timeout = null; - fn(args); - }, duration); - }; -} diff --git a/examples/monaco-graphql-react-vite/src/editor.tsx b/examples/monaco-graphql-react-vite/src/editor.tsx new file mode 120000 index 00000000000..b49aef8cc69 --- /dev/null +++ b/examples/monaco-graphql-react-vite/src/editor.tsx @@ -0,0 +1 @@ +../../monaco-graphql-nextjs/src/editor.tsx \ No newline at end of file diff --git a/examples/monaco-graphql-react-vite/src/index.tsx b/examples/monaco-graphql-react-vite/src/index.tsx index 7dedc15718b..83f9e302e91 100644 --- a/examples/monaco-graphql-react-vite/src/index.tsx +++ b/examples/monaco-graphql-react-vite/src/index.tsx @@ -1,5 +1,5 @@ import { createRoot } from 'react-dom/client'; -import App from './App'; +import Editor from './editor'; -const root = createRoot(document.getElementById('root')!); -root.render(); +const root = createRoot(document.getElementById('__next')!); +root.render(); diff --git a/examples/monaco-graphql-react-vite/src/style.css b/examples/monaco-graphql-react-vite/src/style.css new file mode 120000 index 00000000000..32a7938addd --- /dev/null +++ b/examples/monaco-graphql-react-vite/src/style.css @@ -0,0 +1 @@ +../../monaco-graphql-nextjs/src/style.css \ No newline at end of file diff --git a/examples/monaco-graphql-react-vite/vite.config.ts b/examples/monaco-graphql-react-vite/vite.config.ts index 0b46cb00210..e0bcfff2fec 100644 --- a/examples/monaco-graphql-react-vite/vite.config.ts +++ b/examples/monaco-graphql-react-vite/vite.config.ts @@ -11,7 +11,7 @@ export default defineConfig({ customWorkers: [ { label: 'graphql', - entry: 'monaco-graphql/dist/graphql.worker', + entry: 'monaco-graphql/esm/graphql.worker', }, ], }), diff --git a/package.json b/package.json index 7d5b23cd4ef..c488fe7abc5 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,9 @@ "workspaces": { "packages": [ "packages/*", - "examples/monaco-graphql-webpack" + "examples/monaco-graphql-webpack", + "examples/monaco-graphql-nextjs", + "examples/monaco-graphql-react-vite" ] }, "lint-staged": { @@ -138,6 +140,7 @@ "ts-jest": "^27.1.5", "typedoc": "^0.19.2", "typescript": "^4.6.3", + "vitest": "^0.32.2", "wsrun": "^5.2.4" } } diff --git a/yarn.lock b/yarn.lock index 42b0ad06d42..1c74d80126d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -106,7 +106,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.5.tgz#b1f6c86a02d85d2dd3368a2b67c09add8cd0c255" integrity sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA== -"@babel/core@^7.1.0", "@babel/core@^7.21.3", "@babel/core@^7.21.4", "@babel/core@^7.7.2", "@babel/core@^7.8.0": +"@babel/core@^7.1.0", "@babel/core@^7.21.3", "@babel/core@^7.21.4", "@babel/core@^7.22.5", "@babel/core@^7.7.2", "@babel/core@^7.8.0": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.5.tgz#d67d9747ecf26ee7ecd3ebae1ee22225fe902a89" integrity sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg== @@ -1255,14 +1255,14 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.18.6" -"@babel/plugin-transform-react-jsx-self@^7.21.0": +"@babel/plugin-transform-react-jsx-self@^7.21.0", "@babel/plugin-transform-react-jsx-self@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz#ca2fdc11bc20d4d46de01137318b13d04e481d8e" integrity sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-react-jsx-source@^7.19.6": +"@babel/plugin-transform-react-jsx-source@^7.19.6", "@babel/plugin-transform-react-jsx-source@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz#49af1615bfdf6ed9d3e9e43e425e0b2b65d15b6c" integrity sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w== @@ -3371,6 +3371,56 @@ resolved "https://registry.yarnpkg.com/@n1ru4l/push-pull-async-iterable-iterator/-/push-pull-async-iterable-iterator-3.1.0.tgz#be450c97d1c7cd6af1a992d53232704454345df9" integrity sha512-K4scWxGhdQM0masHHy4gIQs2iGiLEXCrXttumknyPJqtdl4J179BjpibWSSQ1fxKdCcHgIlCTKXJU6cMM6D6Wg== +"@next/env@13.4.7": + version "13.4.7" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.4.7.tgz#ca12d341edb128ca70384635bd2794125ffb1c01" + integrity sha512-ZlbiFulnwiFsW9UV1ku1OvX/oyIPLtMk9p/nnvDSwI0s7vSoZdRtxXNsaO+ZXrLv/pMbXVGq4lL8TbY9iuGmVw== + +"@next/swc-darwin-arm64@13.4.7": + version "13.4.7" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.7.tgz#5e36c26dda5b0bc0ea15d8555d0abd71a1ef4b5d" + integrity sha512-VZTxPv1b59KGiv/pZHTO5Gbsdeoxcj2rU2cqJu03btMhHpn3vwzEK0gUSVC/XW96aeGO67X+cMahhwHzef24/w== + +"@next/swc-darwin-x64@13.4.7": + version "13.4.7" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.7.tgz#4c14ec14b200373cd602589086cb1253a28cd803" + integrity sha512-gO2bw+2Ymmga+QYujjvDz9955xvYGrWofmxTq7m70b9pDPvl7aDFABJOZ2a8SRCuSNB5mXU8eTOmVVwyp/nAew== + +"@next/swc-linux-arm64-gnu@13.4.7": + version "13.4.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.7.tgz#e7819167ec876ddac5a959e4c7bce4d001f0e924" + integrity sha512-6cqp3vf1eHxjIDhEOc7Mh/s8z1cwc/l5B6ZNkOofmZVyu1zsbEM5Hmx64s12Rd9AYgGoiCz4OJ4M/oRnkE16/Q== + +"@next/swc-linux-arm64-musl@13.4.7": + version "13.4.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.7.tgz#0cac0f01d4e308b439e6c33182bed77835fe383b" + integrity sha512-T1kD2FWOEy5WPidOn1si0rYmWORNch4a/NR52Ghyp4q7KyxOCuiOfZzyhVC5tsLIBDH3+cNdB5DkD9afpNDaOw== + +"@next/swc-linux-x64-gnu@13.4.7": + version "13.4.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.7.tgz#feb61e16a68c67f3ef230f30d9562a3783c7bd59" + integrity sha512-zaEC+iEiAHNdhl6fuwl0H0shnTzQoAoJiDYBUze8QTntE/GNPfTYpYboxF5LRYIjBwETUatvE0T64W6SKDipvg== + +"@next/swc-linux-x64-musl@13.4.7": + version "13.4.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.7.tgz#02179ecfa6d24a2956c2b54f7d27a050568bbf24" + integrity sha512-X6r12F8d8SKAtYJqLZBBMIwEqcTRvUdVm+xIq+l6pJqlgT2tNsLLf2i5Cl88xSsIytBICGsCNNHd+siD2fbWBA== + +"@next/swc-win32-arm64-msvc@13.4.7": + version "13.4.7" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.7.tgz#274b7f00a2ec5934af73db15da8459e8647bfaed" + integrity sha512-NPnmnV+vEIxnu6SUvjnuaWRglZzw4ox5n/MQTxeUhb5iwVWFedolPFebMNwgrWu4AELwvTdGtWjqof53AiWHcw== + +"@next/swc-win32-ia32-msvc@13.4.7": + version "13.4.7" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.7.tgz#4a95c106a6db2eee3a4c1352b77995e298d7446a" + integrity sha512-6Hxijm6/a8XqLQpOOf/XuwWRhcuc/g4rBB2oxjgCMuV9Xlr2bLs5+lXyh8w9YbAUMYR3iC9mgOlXbHa79elmXw== + +"@next/swc-win32-x64-msvc@13.4.7": + version "13.4.7" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.7.tgz#5137780f58d7f0230adc293a0429821bfa7d8c21" + integrity sha512-sW9Yt36Db1nXJL+mTr2Wo0y+VkPWeYhygvcHj1FF0srVtV+VoDjxleKtny21QHaG05zdeZnw2fCtf2+dEqgwqA== + "@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3": version "2.1.8-no-fsevents.3" resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b" @@ -4085,6 +4135,13 @@ "@svgr/hast-util-to-babel-ast" "^7.0.0" svg-parser "^2.0.4" +"@swc/helpers@0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.1.tgz#e9031491aa3f26bfcc974a67f48bd456c8a5357a" + integrity sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg== + dependencies: + tslib "^2.4.0" + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -4242,6 +4299,18 @@ resolved "https://registry.yarnpkg.com/@types/capitalize/-/capitalize-2.0.0.tgz#8efa550b70c7d05bd5a323d39ba762f3f058cdfb" integrity sha512-Jxz08Zch+/J+R3DUcPGmXZ4hNzZImd/FXXij32ByTfclrCQr15+geQjV5teTyFQb3zYPi7O5pRv2/YsyDfRmjA== +"@types/chai-subset@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.3.tgz#97893814e92abd2c534de422cb377e0e0bdaac94" + integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw== + dependencies: + "@types/chai" "*" + +"@types/chai@*", "@types/chai@^4.3.5": + version "4.3.5" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.5.tgz#ae69bcbb1bebb68c4ac0b11e9d8ed04526b3562b" + integrity sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng== + "@types/codemirror@^0.0.90": version "0.0.90" resolved "https://registry.yarnpkg.com/@types/codemirror/-/codemirror-0.0.90.tgz#9c5edafce2a780b4f8bc5e3b699fe1f4727c8f17" @@ -4561,6 +4630,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e" integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw== +"@types/node@18.16.18", "@types/node@^18.0.0": + version "18.16.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.18.tgz#85da09bafb66d4bc14f7c899185336d0c1736390" + integrity sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw== + "@types/node@^12.7.1": version "12.20.7" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.7.tgz#1cb61fd0c85cb87e728c43107b5fd82b69bc9ef8" @@ -4581,11 +4655,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.4.tgz#712ba61b4caf091fc6490301b1888356638c17bd" integrity sha512-9qGjJ5GyShZjUfx2ArBIGM+xExdfLvvaCyQR0t6yRXKPcWCVYF/WemtX/uIU3r7FYECXRXkIiw2Vnhn6y8d+pw== -"@types/node@^18.0.0": - version "18.16.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.18.tgz#85da09bafb66d4bc14f7c899185336d0c1736390" - integrity sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw== - "@types/normalize-package-data@^2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" @@ -4647,6 +4716,15 @@ "@types/scheduler" "*" csstype "^3.0.2" +"@types/react@18.2.14": + version "18.2.14" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.14.tgz#fa7a6fecf1ce35ca94e74874f70c56ce88f7a127" + integrity sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + "@types/retry@0.12.0": version "0.12.0" resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" @@ -5104,6 +5182,60 @@ "@babel/plugin-transform-react-jsx-source" "^7.19.6" react-refresh "^0.14.0" +"@vitejs/plugin-react@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.0.1.tgz#793aa790633433558da7ac0a38c58ddf47dff518" + integrity sha512-g25lL98essfeSj43HJ0o4DMp0325XK0ITkxpgChzJU/CyemgyChtlxfnRbjfwxDGCTRxTiXtQAsdebQXKMRSOA== + dependencies: + "@babel/core" "^7.22.5" + "@babel/plugin-transform-react-jsx-self" "^7.22.5" + "@babel/plugin-transform-react-jsx-source" "^7.22.5" + react-refresh "^0.14.0" + +"@vitest/expect@0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-0.32.2.tgz#8111f6ab1ff3b203efbe3a25e8bb2d160ce4b720" + integrity sha512-6q5yzweLnyEv5Zz1fqK5u5E83LU+gOMVBDuxBl2d2Jfx1BAp5M+rZgc5mlyqdnxquyoiOXpXmFNkcGcfFnFH3Q== + dependencies: + "@vitest/spy" "0.32.2" + "@vitest/utils" "0.32.2" + chai "^4.3.7" + +"@vitest/runner@0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-0.32.2.tgz#18dd979ce4e8766bcc90948d11b4c8ae6ed90b89" + integrity sha512-06vEL0C1pomOEktGoLjzZw+1Fb+7RBRhmw/06WkDrd1akkT9i12su0ku+R/0QM69dfkIL/rAIDTG+CSuQVDcKw== + dependencies: + "@vitest/utils" "0.32.2" + concordance "^5.0.4" + p-limit "^4.0.0" + pathe "^1.1.0" + +"@vitest/snapshot@0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-0.32.2.tgz#500b6453e88e4c50a0aded39839352c16b519b9e" + integrity sha512-JwhpeH/PPc7GJX38vEfCy9LtRzf9F4er7i4OsAJyV7sjPwjj+AIR8cUgpMTWK4S3TiamzopcTyLsZDMuldoi5A== + dependencies: + magic-string "^0.30.0" + pathe "^1.1.0" + pretty-format "^27.5.1" + +"@vitest/spy@0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-0.32.2.tgz#f3ef7afe0d34e863b90df7c959fa5af540a6aaf9" + integrity sha512-Q/ZNILJ4ca/VzQbRM8ur3Si5Sardsh1HofatG9wsJY1RfEaw0XKP8IVax2lI1qnrk9YPuG9LA2LkZ0EI/3d4ug== + dependencies: + tinyspy "^2.1.0" + +"@vitest/utils@0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-0.32.2.tgz#809c720cafbf4b35ce651deb8570d57785e77819" + integrity sha512-lnJ0T5i03j0IJaeW73hxe2AuVnZ/y1BhhCOuIcl9LIzXnbpXJT9Lrt6brwKHXLOiA7MZ6N5hSJjt0xE1dGNCzQ== + dependencies: + diff-sequences "^29.4.3" + loupe "^2.3.6" + pretty-format "^27.5.1" + "@vue/compiler-core@3.2.41": version "3.2.41" resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.41.tgz#fb5b25f23817400f44377d878a0cdead808453ef" @@ -5405,7 +5537,7 @@ acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn-walk@^8.0.0, acorn-walk@^8.0.2: +acorn-walk@^8.0.0, acorn-walk@^8.0.2, acorn-walk@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== @@ -5420,7 +5552,7 @@ acorn@^8.0.0, acorn@^8.0.4, acorn@^8.1.0, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8 resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== -acorn@^8.2.4, acorn@^8.8.2: +acorn@^8.2.4, acorn@^8.8.2, acorn@^8.9.0: version "8.9.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== @@ -5835,6 +5967,11 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" @@ -6191,6 +6328,11 @@ bluebird@3.7.2, bluebird@^3.4.1, bluebird@^3.5.1, bluebird@^3.5.5, bluebird@^3.7 resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== +blueimp-md5@^2.10.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.19.0.tgz#b53feea5498dcb53dc6ec4b823adb84b729c4af0" + integrity sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w== + body-parser@1.19.2: version "1.19.2" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e" @@ -6380,7 +6522,7 @@ builtins@^1.0.3: resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= -busboy@^1.6.0: +busboy@1.6.0, busboy@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== @@ -6402,6 +6544,11 @@ bytes@3.1.2, bytes@^3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +cac@^6.7.14: + version "6.7.14" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" @@ -6480,6 +6627,11 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001317, caniuse-lite@^1.0.30001328: resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001450.tgz" integrity sha512-qMBmvmQmFXaSxexkjjfMvD5rnDL0+m+dUMZKoDYsGG8iZN29RuYh9eRoMvKsT6uMAWlyUUGDEQGJJYjzCIO9ew== +caniuse-lite@^1.0.30001406: + version "1.0.30001507" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001507.tgz#fae53f6286e7564783eadea9b447819410a59534" + integrity sha512-SFpUDoSLCaE5XYL2jfqe9ova/pbQHEmbheDf5r4diNwbAgR3qxM9NQtfsiSscjqoya5K7kFcHPUQ+VsUkIJR4A== + caniuse-lite@^1.0.30001426, caniuse-lite@^1.0.30001449: version "1.0.30001457" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz#6af34bb5d720074e2099432aa522c21555a18301" @@ -6509,6 +6661,19 @@ ccount@^2.0.0: resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== +chai@^4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" + integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^4.1.2" + get-func-name "^2.0.0" + loupe "^2.3.1" + pathval "^1.1.1" + type-detect "^4.0.5" + chalk@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" @@ -6625,6 +6790,11 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== + check-more-types@2.24.0, check-more-types@^2.24.0: version "2.24.0" resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" @@ -6797,7 +6967,7 @@ cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" -client-only@^0.0.1: +client-only@0.0.1, client-only@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== @@ -7061,6 +7231,20 @@ concat-stream@^2.0.0: readable-stream "^3.0.2" typedarray "^0.0.6" +concordance@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/concordance/-/concordance-5.0.4.tgz#9896073261adced72f88d60e4d56f8efc4bbbbd2" + integrity sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw== + dependencies: + date-time "^3.1.0" + esutils "^2.0.3" + fast-diff "^1.2.0" + js-string-escape "^1.0.1" + lodash "^4.17.15" + md5-hex "^3.0.1" + semver "^7.3.2" + well-known-symbols "^2.0.0" + concurrently@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-7.0.0.tgz#78d31b441cec338dab03316c221a2f9a67c529b0" @@ -7684,6 +7868,13 @@ date-fns@^2.16.1: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2" integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw== +date-time@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/date-time/-/date-time-3.1.0.tgz#0d1e934d170579f481ed8df1e2b8ff70ee845e1e" + integrity sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg== + dependencies: + time-zone "^1.0.0" + dayjs@^1.10.4: version "1.11.7" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" @@ -7771,6 +7962,13 @@ dedent@^0.7.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= +deep-eql@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== + dependencies: + type-detect "^4.0.0" + deep-equal@^2.0.5: version "2.1.0" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.1.0.tgz#5ba60402cf44ab92c2c07f3f3312c3d857a0e1dd" @@ -9088,7 +9286,7 @@ estree-walker@^3.0.0, estree-walker@^3.0.3: dependencies: "@types/estree" "^1.0.0" -esutils@^2.0.2: +esutils@^2.0.2, esutils@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== @@ -9464,7 +9662,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-diff@^1.1.2: +fast-diff@^1.1.2, fast-diff@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== @@ -10094,6 +10292,11 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== + get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" @@ -12279,6 +12482,11 @@ js-green-licenses@3.0.0: spdx-satisfies "^5.0.0" strip-json-comments "^3.0.0" +js-string-escape@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" + integrity sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -12409,7 +12617,7 @@ json5@^2.2.2: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonc-parser@3.2.0: +jsonc-parser@3.2.0, jsonc-parser@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== @@ -12724,6 +12932,11 @@ loader-utils@^2.0.2: emojis-list "^3.0.0" json5 "^2.1.2" +local-pkg@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" + integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== + locate-character@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-character/-/locate-character-3.0.0.tgz#0305c5b8744f61028ef5d01f444009e00779f974" @@ -12847,6 +13060,13 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +loupe@^2.3.1, loupe@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" + integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== + dependencies: + get-func-name "^2.0.0" + lower-case@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" @@ -12998,6 +13218,11 @@ marked@^1.1.1: resolved "https://registry.yarnpkg.com/marked/-/marked-1.2.7.tgz#6e14b595581d2319cdcf033a24caaf41455a01fb" integrity sha512-No11hFYcXr/zkBvL6qFmAp1z6BKY3zqLMHny/JN/ey+al7qwCM2+CMBL9BOgqMxZU36fz4cCWfn2poWIf7QRXA== +marked@^4.2.12: + version "4.3.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" + integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== + matched@^0.4.1: version "0.4.4" resolved "https://registry.yarnpkg.com/matched/-/matched-0.4.4.tgz#56d7b7eb18033f0cf9bc52eb2090fac7dc1e89fa" @@ -13025,6 +13250,13 @@ math-random@^1.0.1: resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== +md5-hex@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-3.0.1.tgz#be3741b510591434b2784d79e556eefc2c9a8e5c" + integrity sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw== + dependencies: + blueimp-md5 "^2.10.0" + mdast-util-from-markdown@^0.8.5: version "0.8.5" resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c" @@ -13730,6 +13962,16 @@ mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mlly@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.4.0.tgz#830c10d63f1f97bd8785377b24dc2a15d972832b" + integrity sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg== + dependencies: + acorn "^8.9.0" + pathe "^1.1.1" + pkg-types "^1.0.3" + ufo "^1.1.2" + mocha@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.0.0.tgz#205447d8993ec755335c4b13deba3d3a13c4def9" @@ -13857,6 +14099,35 @@ neo-async@^2.6.0, neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +next-global-css@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/next-global-css/-/next-global-css-1.3.1.tgz#9a3097e5bcce87f7ec627b07292edf267dedf6c1" + integrity sha512-+OnTwQKmv1lDP7r4R3T94oq6372R9UGVivchBQu49j7ZjzvSXHCnv93yAuhgMkvUgAbGifTs8sQ5YL9wjyAxfA== + +next@13.4.7: + version "13.4.7" + resolved "https://registry.yarnpkg.com/next/-/next-13.4.7.tgz#2ab20e6fada2e25cb81bd17f68956705ffd9824e" + integrity sha512-M8z3k9VmG51SRT6v5uDKdJXcAqLzP3C+vaKfLIAM0Mhx1um1G7MDnO63+m52qPdZfrTFzMZNzfsgvm3ghuVHIQ== + dependencies: + "@next/env" "13.4.7" + "@swc/helpers" "0.5.1" + busboy "1.6.0" + caniuse-lite "^1.0.30001406" + postcss "8.4.14" + styled-jsx "5.1.1" + watchpack "2.4.0" + zod "3.21.4" + optionalDependencies: + "@next/swc-darwin-arm64" "13.4.7" + "@next/swc-darwin-x64" "13.4.7" + "@next/swc-linux-arm64-gnu" "13.4.7" + "@next/swc-linux-arm64-musl" "13.4.7" + "@next/swc-linux-x64-gnu" "13.4.7" + "@next/swc-linux-x64-musl" "13.4.7" + "@next/swc-win32-arm64-msvc" "13.4.7" + "@next/swc-win32-ia32-msvc" "13.4.7" + "@next/swc-win32-x64-msvc" "13.4.7" + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -14318,6 +14589,13 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + dependencies: + yocto-queue "^1.0.0" + p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -14570,6 +14848,16 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pathe@^1.1.0, pathe@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" + integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + pause-stream@0.0.11: version "0.0.11" resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" @@ -14668,6 +14956,15 @@ pkg-dir@^5.0.0: dependencies: find-up "^5.0.0" +pkg-types@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" + integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.2.0" + pathe "^1.1.0" + platform@^1.3.3, platform@^1.3.5: version "1.3.6" resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" @@ -15228,6 +15525,15 @@ postcss-value-parser@^4.1.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== +postcss@8.4.14: + version "8.4.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + postcss@8.4.21, postcss@^8.1.10, postcss@^8.4.19: version "8.4.21" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" @@ -15569,7 +15875,7 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@^18.2.0: +react-dom@18.2.0, react-dom@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== @@ -15661,7 +15967,7 @@ react-test-renderer@^18.2.0: react-shallow-renderer "^16.15.0" scheduler "^0.23.0" -react@^18.2.0: +react@18.2.0, react@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== @@ -16656,6 +16962,11 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" +siginfo@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -16926,6 +17237,11 @@ stack-utils@^2.0.3: dependencies: escape-string-regexp "^2.0.0" +stackback@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== + start-server-and-test@^1.10.11: version "1.12.1" resolved "https://registry.yarnpkg.com/start-server-and-test/-/start-server-and-test-1.12.1.tgz#bf84eb5c5a4c8a98b93ed36519035b3f76179f0e" @@ -16949,6 +17265,11 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +std-env@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.3.tgz#a54f06eb245fdcfef53d56f3c0251f1d5c3d01fe" + integrity sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg== + stream-combiner@~0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" @@ -17215,6 +17536,13 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +strip-literal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-1.0.1.tgz#0115a332710c849b4e46497891fb8d585e404bd2" + integrity sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q== + dependencies: + acorn "^8.8.2" + style-loader@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575" @@ -17233,6 +17561,13 @@ style-value-types@5.0.0: hey-listen "^1.0.8" tslib "^2.1.0" +styled-jsx@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f" + integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw== + dependencies: + client-only "0.0.1" + stylehacks@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" @@ -17489,6 +17824,11 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== +time-zone@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/time-zone/-/time-zone-1.0.0.tgz#99c5bf55958966af6d06d83bdf3800dc82faec5d" + integrity sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA== + tiny-glob@^0.2.9: version "0.2.9" resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" @@ -17497,6 +17837,21 @@ tiny-glob@^0.2.9: globalyzer "0.1.0" globrex "^0.1.2" +tinybench@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.5.0.tgz#4711c99bbf6f3e986f67eb722fed9cddb3a68ba5" + integrity sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA== + +tinypool@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.5.0.tgz#3861c3069bf71e4f1f5aa2d2e6b3aaacc278961e" + integrity sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ== + +tinyspy@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.1.1.tgz#9e6371b00c259e5c5b301917ca18c01d40ae558c" + integrity sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w== + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -17760,7 +18115,7 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@4.0.8: +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== @@ -17846,6 +18201,11 @@ typedoc@^0.19.2: shelljs "^0.8.4" typedoc-default-themes "^0.11.4" +typescript@5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.3.tgz#8d84219244a6b40b6fb2b33cc1c062f715b9e826" + integrity sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw== + typescript@^4.2.3, typescript@^4.3.4: version "4.7.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" @@ -17866,6 +18226,11 @@ uc.micro@^1.0.1, uc.micro@^1.0.5: resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== +ufo@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.1.2.tgz#d0d9e0fa09dece0c31ffd57bd363f030a35cfe76" + integrity sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ== + uglify-js@^3.1.4: version "3.8.1" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.8.1.tgz#43bb15ce6f545eaa0a64c49fd29375ea09fa0f93" @@ -18332,6 +18697,23 @@ vinyl@^1.1.1: clone-stats "^0.0.1" replace-ext "0.0.1" +vite-node@0.32.2: + version "0.32.2" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-0.32.2.tgz#bfccdfeb708b2309ea9e5fe424951c75bb9c0096" + integrity sha512-dTQ1DCLwl2aEseov7cfQ+kDMNJpM1ebpyMMMwWzBvLbis8Nla/6c9WQcqpPssTwS6Rp/+U6KwlIj8Eapw4bLdA== + dependencies: + cac "^6.7.14" + debug "^4.3.4" + mlly "^1.2.0" + pathe "^1.1.0" + picocolors "^1.0.0" + vite "^3.0.0 || ^4.0.0" + +vite-plugin-monaco-editor@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vite-plugin-monaco-editor/-/vite-plugin-monaco-editor-1.1.0.tgz#a6238c2e13d5e98dd54a1bc51f6f189325219de3" + integrity sha512-IvtUqZotrRoVqwT0PBBDIZPNraya3BxN/bfcNfnxZ5rkJiGcNtO5eAOWWSgT7zullIAEqQwxMU83yL9J5k7gww== + vite-plugin-svgr@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/vite-plugin-svgr/-/vite-plugin-svgr-3.2.0.tgz#920375aaf6635091c9ac8e467825f92d32544476" @@ -18341,7 +18723,7 @@ vite-plugin-svgr@^3.2.0: "@svgr/core" "^7.0.0" "@svgr/plugin-jsx" "^7.0.0" -vite@^4.3.9: +"vite@^3.0.0 || ^4.0.0", vite@^4.3.9: version "4.3.9" resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.9.tgz#db896200c0b1aa13b37cdc35c9e99ee2fdd5f96d" integrity sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg== @@ -18352,6 +18734,37 @@ vite@^4.3.9: optionalDependencies: fsevents "~2.3.2" +vitest@^0.32.2: + version "0.32.2" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.32.2.tgz#758ce2220f609e240ac054eca7ad11a5140679ab" + integrity sha512-hU8GNNuQfwuQmqTLfiKcqEhZY72Zxb7nnN07koCUNmntNxbKQnVbeIS6sqUgR3eXSlbOpit8+/gr1KpqoMgWCQ== + dependencies: + "@types/chai" "^4.3.5" + "@types/chai-subset" "^1.3.3" + "@types/node" "*" + "@vitest/expect" "0.32.2" + "@vitest/runner" "0.32.2" + "@vitest/snapshot" "0.32.2" + "@vitest/spy" "0.32.2" + "@vitest/utils" "0.32.2" + acorn "^8.8.2" + acorn-walk "^8.2.0" + cac "^6.7.14" + chai "^4.3.7" + concordance "^5.0.4" + debug "^4.3.4" + local-pkg "^0.4.3" + magic-string "^0.30.0" + pathe "^1.1.0" + picocolors "^1.0.0" + std-env "^3.3.2" + strip-literal "^1.0.1" + tinybench "^2.5.0" + tinypool "^0.5.0" + vite "^3.0.0 || ^4.0.0" + vite-node "0.32.2" + why-is-node-running "^2.2.2" + vsce@^2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/vsce/-/vsce-2.13.0.tgz#832adc2926a4ca9facf898fea011dd33515f7ace" @@ -18520,7 +18933,7 @@ watch@~0.10.0: resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" integrity sha1-d3mLLaD5kQ1ZXxrOWwwiWFIfIdw= -watchpack@^2.4.0: +watchpack@2.4.0, watchpack@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== @@ -18719,6 +19132,11 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== +well-known-symbols@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/well-known-symbols/-/well-known-symbols-2.0.0.tgz#e9c7c07dbd132b7b84212c8174391ec1f9871ba5" + integrity sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q== + whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" @@ -18818,6 +19236,14 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +why-is-node-running@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" + integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== + dependencies: + siginfo "^2.0.0" + stackback "0.0.2" + wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" @@ -19179,6 +19605,16 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +yocto-queue@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" + integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== + +zod@3.21.4: + version "3.21.4" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.21.4.tgz#10882231d992519f0a10b5dd58a38c9dabbb64db" + integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw== + zwitch@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7"