diff --git a/apps/docs/components/Playground.js b/apps/docs/components/Playground.js
new file mode 100644
index 00000000..4bf9424f
--- /dev/null
+++ b/apps/docs/components/Playground.js
@@ -0,0 +1,179 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * @format
+ */
+
+import BrowserOnly from '@docusaurus/BrowserOnly';
+import * as stylex from '@stylexjs/stylex';
+import { WebContainer } from '@webcontainer/api';
+import * as React from 'react';
+import { useEffect, useRef, useState } from 'react';
+import { UnControlled as CodeMirror } from 'react-codemirror2';
+import { files } from './playground-utils/files';
+
+async function wcSpawn(instance, ...args) {
+ console.log('Running:', args.join(' '));
+ const process = await instance.spawn(...args);
+ process.output.pipeTo(
+ new WritableStream({
+ write(data) {
+ console.log(data);
+ },
+ }),
+ );
+ const exitCode = await process.exit;
+ if (exitCode !== 0) {
+ console.log('Command Failed:', args.join(' '), 'with exit code', exitCode);
+ throw new Error('Command Failed', args.join(' '));
+ }
+
+ console.log('Command Successful:', args.join(' '));
+ return process;
+}
+
+async function makeWebcontainer() {
+ console.log('Booting WebContainer...');
+ const instance = await WebContainer.boot();
+ console.log('Boot successful!');
+
+ console.log('Mounting files...');
+ await instance.mount(files);
+ console.log('Mounted files!');
+
+ console.log('Installing dependencies...');
+ await wcSpawn(instance, 'npm', ['install']);
+ console.log('Installed dependencies!');
+
+ return instance;
+}
+
+export default function Playground() {
+ const instance = useRef(null);
+ const [url, setUrl] = useState(null);
+ const debounceTimeout = useRef(null);
+ const [isUpdating, setIsUpdating] = useState(null);
+ const [code, setCode] = useState(
+ files.src.directory['App.jsx'].file.contents,
+ );
+
+ const build = async () => {
+ const containerInstance = instance.current;
+ if (!containerInstance) return;
+
+ console.log('Trying to run `npm run dev`...');
+ const process = await containerInstance.spawn('npm', ['run', 'dev']);
+ console.log('Spawned `npm run dev`...');
+ process.output.pipeTo(
+ new WritableStream({
+ write(data) {
+ console.log(data);
+ },
+ }),
+ );
+
+ console.log('Waiting for server-ready event...');
+ containerInstance.on('server-ready', (port, url) => {
+ console.log('server-ready', port, url);
+ setTimeout(() => {
+ setUrl(url);
+ }, 5000);
+ });
+ };
+
+ const updateFiles = async () => {
+ const containerInstance = instance.current;
+ const filePath = './src/App.jsx';
+ const updatedCode = code;
+ await containerInstance.fs.writeFile(filePath, updatedCode);
+ };
+
+ const handleCodeChange = (newCode) => {
+ if (debounceTimeout.current) {
+ clearTimeout(debounceTimeout.current);
+ debounceTimeout.current = null;
+ }
+
+ debounceTimeout.current = setTimeout(async () => {
+ setCode(newCode);
+ if (url) {
+ setIsUpdating(true);
+ try {
+ await updateFiles();
+ console.log('Successfully applied changes.');
+ } catch (err) {
+ console.error(err);
+ } finally {
+ setTimeout(() => {
+ setIsUpdating(false);
+ }, 5000);
+ }
+ }
+ }, 2000);
+ };
+
+ useEffect(() => {
+ require('codemirror/mode/javascript/javascript');
+ makeWebcontainer().then((i) => {
+ instance.current = i;
+ build();
+ });
+ () => {
+ instance.current.unmount();
+ if (debounceTimeout.current) {
+ clearTimeout(debounceTimeout.current);
+ }
+ };
+ }, []);
+
+ return (
+
+
+ {() => (
+ <>
+ handleCodeChange(newCode)}
+ />
+ {url && !isUpdating ? (
+
+ ) : (
+ Loading...
+ )}
+ >
+ )}
+
+
+ );
+}
+
+const styles = stylex.create({
+ container: {
+ display: 'flex',
+ alignItems: 'center',
+ justifyContent: 'center',
+ height: stylex.firstThatWorks('calc(100dvh - 60px)', 'calc(100vh - 60px)'),
+ borderBottomWidth: 2,
+ borderBottomStyle: 'solid',
+ borderBottomColor: 'var(--cyan)',
+ },
+ textarea: {
+ display: 'flex',
+ flexDirection: 'column',
+ alignItems: 'stretch',
+ justifyContent: 'stretch',
+ width: '50%',
+ height: '100%',
+ borderWidth: 0,
+ borderStyle: 'none',
+ },
+});
diff --git a/apps/docs/components/playground-utils/files.js b/apps/docs/components/playground-utils/files.js
new file mode 100644
index 00000000..b6aa1934
--- /dev/null
+++ b/apps/docs/components/playground-utils/files.js
@@ -0,0 +1,393 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * @format
+ */
+
+export const files = {
+ public: {
+ directory: {
+ 'index.html': {
+ file: {
+ contents: `
+
+
+
+
+
+ React + Rollup
+
+
+
+
+
+
+
+
+ `,
+ },
+ },
+ 'resets.css': {
+ file: {
+ contents: `
+@layer reset {
+ *, *::before, *::after {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+ }
+
+ :root {
+ color-scheme: light dark;
+ }
+
+ body {
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen,
+ Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ background-color: light-dark(white, black);
+ line-height: 1.5;
+ color: black;
+ }
+}
+ `,
+ },
+ },
+ },
+ },
+ build: {
+ directory: {
+ 'rollup-stylex-plugin.mjs': {
+ file: {
+ contents: `
+import { transformAsync } from "@babel/core";
+import flowSyntaxPlugin from "@babel/plugin-syntax-flow";
+import jsxSyntaxPlugin from "@babel/plugin-syntax-jsx";
+import typescriptSyntaxPlugin from "@babel/plugin-syntax-typescript";
+import stylexBabelPlugin from "@stylexjs/babel-plugin";
+import browserslist from "browserslist";
+import fs from "fs/promises";
+import { browserslistToTargets, transform } from "lightningcss";
+import path from "path";
+
+const IS_DEV_ENV =
+ process.env.NODE_ENV === "development" ||
+ process.env.BABEL_ENV === "development";
+
+export default function stylexPlugin({
+ dev = IS_DEV_ENV,
+ unstable_moduleResolution = {
+ type: "commonJS",
+ rootDir: process.cwd(),
+ },
+ fileName = "stylex.css",
+ babelConfig: { plugins = [], presets = [] } = {},
+ importSources = ["stylex", "@stylexjs/stylex"],
+ useCSSLayers = false,
+ lightningcssOptions,
+ ...options
+}) {
+ let stylexRules = {};
+ return {
+ name: "rollup-plugin-stylex-playground",
+ buildStart() {
+ stylexRules = {};
+ },
+ generateBundle() {
+ const rules = Object.values(stylexRules).flat();
+ if (rules.length > 0) {
+ const collectedCSS = stylexBabelPlugin.processStylexRules(
+ rules,
+ useCSSLayers
+ );
+ const { code } = transform({
+ targets: browserslistToTargets(browserslist(">= 1%")),
+ ...lightningcssOptions,
+ filename: fileName,
+ code: Buffer.from(collectedCSS),
+ });
+ const processedCSS = code.toString();
+ this.emitFile({
+ fileName,
+ source: processedCSS,
+ type: "asset",
+ });
+ }
+ },
+ shouldTransformCachedModule(_ref) {
+ let { code: _code, id, meta } = _ref;
+ stylexRules[id] = meta.stylex;
+ return false;
+ },
+ async transform(inputCode, id) {
+ if (
+ !importSources.some((importName) =>
+ typeof importName === "string"
+ ? inputCode.includes(importName)
+ : inputCode.includes(importName.from)
+ )
+ ) {
+ return null;
+ }
+ const result = await transformAsync(inputCode, {
+ babelrc: false,
+ filename: id,
+ presets,
+ plugins: [
+ ...plugins,
+ /\\.jsx?/.test(path.extname(id))
+ ? flowSyntaxPlugin
+ : [
+ typescriptSyntaxPlugin,
+ {
+ isTSX: true,
+ },
+ ],
+ jsxSyntaxPlugin,
+ stylexBabelPlugin.withOptions({
+ ...options,
+ dev,
+ unstable_moduleResolution,
+ }),
+ ],
+ caller: {
+ name: "@stylexjs/rollup-plugin",
+ supportsStaticESM: true,
+ supportsDynamicImport: true,
+ supportsTopLevelAwait: !inputCode.includes("require("),
+ supportsExportNamespaceFrom: true,
+ },
+ });
+ if (result == null) {
+ console.warn("stylex: transformAsync returned null");
+ return {
+ code: inputCode,
+ };
+ }
+ const { code, map, metadata } = result;
+ if (code == null) {
+ console.warn("stylex: transformAsync returned null code");
+ return {
+ code: inputCode,
+ };
+ }
+ const self = this;
+ if (self.meta.watchMode) {
+ const ast = self.parse(code);
+ for (const stmt of ast.body) {
+ if (stmt.type === "ImportDeclaration") {
+ const resolved = await self.resolve(stmt.source.value, id);
+ if (resolved && !resolved.external) {
+ const result = await self.load(resolved);
+ if (result && result.meta && "stylex" in result.meta) {
+ stylexRules[resolved.id] = result.meta.stylex;
+ }
+ }
+ }
+ }
+ }
+ let hasData = false;
+ if (!dev && metadata.stylex != null && metadata.stylex.length > 0) {
+ hasData = true;
+ stylexRules[id] = metadata.stylex;
+ }
+
+ const srcPath = path.join(unstable_moduleResolution.rootDir, "src");
+ const jsPreviewsPath = path.join(
+ unstable_moduleResolution.rootDir,
+ "previews/js"
+ );
+ const metadataPreviewsPath = path.join(
+ unstable_moduleResolution.rootDir,
+ "previews/metadata"
+ );
+
+ if (hasData && typeof id === "string" && id.includes(srcPath)) {
+ const fileRelativePath = path.relative(srcPath, id);
+
+ const jsOutputPath = path.join(jsPreviewsPath, fileRelativePath);
+ const metadataOutputPath = path.join(
+ metadataPreviewsPath,
+ fileRelativePath + ".json"
+ );
+
+ await Promise.all([
+ fs.mkdir(path.dirname(jsOutputPath), { recursive: true }),
+ fs.mkdir(path.dirname(metadataOutputPath), { recursive: true }),
+ ]);
+ await Promise.all([
+ fs.writeFile(jsOutputPath, code),
+ fs.writeFile(metadataOutputPath, formatMetadata(metadata.stylex)),
+ ]);
+ }
+
+ return {
+ code,
+ map: map,
+ meta: metadata,
+ };
+ },
+ };
+}
+
+function formatMetadata(metadata) {
+ const rows = metadata
+ .map(
+ ([id, { ltr }, priority]) =>
+ \` [ \${JSON.stringify(id)}, \${JSON.stringify(ltr)}, \${priority} ]\`
+ )
+ .join(",\\n");
+ return \`[\\n\${rows}\\n]\`;
+}
+ `,
+ },
+ },
+ },
+ },
+ 'rollup.config.js': {
+ file: {
+ contents: `
+import babel from "@rollup/plugin-babel";
+import commonjs from "@rollup/plugin-commonjs";
+import resolve from "@rollup/plugin-node-resolve";
+import replace from "@rollup/plugin-replace";
+import livereload from "rollup-plugin-livereload";
+import serve from "rollup-plugin-serve";
+import styleX from "./build/rollup-stylex-plugin.mjs";
+
+const isDev = process.env.NODE_ENV !== "production";
+
+export default {
+ input: "src/main.jsx",
+ output: {
+ file: "dist/bundle.js",
+ format: "umd",
+ sourcemap: true,
+ },
+ plugins: [
+ resolve({
+ extensions: [".js", ".jsx"],
+ }),
+ replace({
+ preventAssignment: true,
+ "process.env.NODE_ENV": JSON.stringify(
+ isDev ? "development" : "production"
+ ),
+ }),
+ commonjs(),
+ babel({
+ babelrc: false,
+ babelHelpers: "bundled",
+ extensions: [".js", ".jsx"],
+ presets: ["@babel/preset-react"],
+ }),
+ styleX({
+ fileName: "stylex.css",
+ useCSSLayers: true,
+ }),
+ isDev &&
+ serve({
+ open: true,
+ contentBase: ["dist", "public"],
+ host: "localhost",
+ port: 3000,
+ }),
+ isDev && livereload("dist"),
+ ],
+};
+ `,
+ },
+ },
+ 'package.json': {
+ file: {
+ contents: `
+{
+ "name": "stylex-playground",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "rollup -c -w",
+ "build": "rollup -c"
+ },
+ "dependencies": {
+ "@stylexjs/open-props": "^0.9.3",
+ "@stylexjs/stylex": "^0.9.3",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1"
+ },
+ "devDependencies": {
+ "@babel/preset-react": "^7.25.9",
+ "@rollup/plugin-babel": "^6.0.4",
+ "@rollup/plugin-commonjs": "^25.0.7",
+ "@rollup/plugin-node-resolve": "^15.2.3",
+ "@rollup/plugin-replace": "^5.0.5",
+ "@stylexjs/rollup-plugin": "^0.9.3",
+ "rollup": "^4.12.0",
+ "rollup-plugin-livereload": "^2.0.5",
+ "rollup-plugin-serve": "^2.0.2"
+ }
+}
+ `,
+ },
+ },
+ src: {
+ directory: {
+ 'main.jsx': {
+ file: {
+ contents: `
+import * as React from "react";
+import { StrictMode } from "react";
+import { createRoot } from "react-dom/client";
+import App from "./App";
+
+const root = document.getElementById("root");
+if (!root) throw new Error("Root element not found");
+
+createRoot(root).render(
+
+
+
+);
+ `,
+ },
+ },
+ 'App.jsx': {
+ file: {
+ contents: `import * as React from "react";
+import * as stylex from "@stylexjs/stylex";
+import { colorsHSL } from "@stylexjs/open-props/lib/colorsHSL.stylex";
+
+export default function App() {
+ return (
+
+
Hello World!
+
beep boop
+
+ );
+}
+
+const styles = stylex.create({
+ container: {
+ alignItems: "center",
+ backgroundColor: "#f3f4f6",
+ display: "flex",
+ flexDirection: "column",
+ gap: "1rem",
+ justifyContent: "center",
+ minHeight: stylex.firstThatWorks("100dvh", "100vh"),
+ },
+ code: {
+ color: \`hsl(\${colorsHSL.green4})\`,
+ },
+});
+`,
+ },
+ },
+ },
+ },
+};
diff --git a/apps/docs/package.json b/apps/docs/package.json
index 847f2e73..62d2557a 100644
--- a/apps/docs/package.json
+++ b/apps/docs/package.json
@@ -10,7 +10,7 @@
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
- "serve": "docusaurus serve",
+ "serve": "serve ./build -c ../serve.json",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids",
"lint": "eslint --cache \"**/*.js\" && stylelint \"**/*.css\""
@@ -21,8 +21,11 @@
"@mdx-js/react": "^1.6.22",
"@stylexjs/stylex": "0.8.0",
"@vercel/analytics": "^1.1.1",
+ "@webcontainer/api": "1.1.2",
"clsx": "^1.2.1",
+ "codemirror": "^5.65.16",
"react": "^17.0.2",
+ "react-codemirror2": "^7.3.0",
"react-dom": "^17.0.2",
"react-syntax-highlighter": "^15.5.0"
},
diff --git a/apps/docs/serve.json b/apps/docs/serve.json
new file mode 100644
index 00000000..eb2cce05
--- /dev/null
+++ b/apps/docs/serve.json
@@ -0,0 +1,21 @@
+{
+ "headers": [
+ {
+ "source": "**/**",
+ "headers": [
+ {
+ "key": "Cross-Origin-Embedder-Policy",
+ "value": "require-corp"
+ },
+ {
+ "key": "Cross-Origin-Opener-Policy",
+ "value": "same-origin"
+ },
+ {
+ "key": "Cross-Origin-Resource-Policy",
+ "value": "same-site"
+ }
+ ]
+ }
+ ]
+}
diff --git a/apps/docs/src/css/custom.css b/apps/docs/src/css/custom.css
index 90a75d0a..3417551d 100644
--- a/apps/docs/src/css/custom.css
+++ b/apps/docs/src/css/custom.css
@@ -13,6 +13,9 @@
* work well for content-centric websites.
*/
+@import 'codemirror/lib/codemirror.css';
+@import 'codemirror/theme/material-darker.css';
+
/* You can override the default Infima variables here. */
:root {
--aa-text-color-rgb: 38, 38, 39;
@@ -283,3 +286,6 @@ html[data-theme='dark'] .DocSearch-Logo svg path,
html[data-theme='dark'] .DocSearch-Logo svg rect {
fill: rgb(170, 175, 186);
}
+.CodeMirror {
+ height: 100%;
+}
diff --git a/apps/docs/src/pages/playground.js b/apps/docs/src/pages/playground.js
index 25f52847..67579ce9 100644
--- a/apps/docs/src/pages/playground.js
+++ b/apps/docs/src/pages/playground.js
@@ -8,30 +8,18 @@
*/
import * as React from 'react';
-import * as stylex from '@stylexjs/stylex';
+import BrowserOnly from '@docusaurus/BrowserOnly';
import Layout from '@theme/Layout';
-import CtaButton from '../../components/CtaButton';
-export default function Playground() {
+export default function PlaygroundPage() {
return (
-
-
- StyleX + Next Demo
-
- A full playground is coming soon.
-
+
+ {() => {
+ const Playground = require('../../components/Playground').default;
+ return ;
+ }}
+
);
}
-
-const styles = stylex.create({
- container: {
- display: 'flex',
- flexDirection: 'column',
- alignItems: 'center',
- justifyContent: 'center',
- height: '60vh',
- gap: '0.5rem',
- },
-});
diff --git a/package-lock.json b/package-lock.json
index b0828534..4da2504f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,6 +15,9 @@
"packages/*",
"apps/*"
],
+ "dependencies": {
+ "serve": "^14.2.4"
+ },
"devDependencies": {
"@babel/cli": "^7.25.6",
"@babel/core": "^7.25.2",
@@ -107,8 +110,11 @@
"@mdx-js/react": "^1.6.22",
"@stylexjs/stylex": "0.8.0",
"@vercel/analytics": "^1.1.1",
+ "@webcontainer/api": "1.1.2",
"clsx": "^1.2.1",
+ "codemirror": "^5.65.16",
"react": "^17.0.2",
+ "react-codemirror2": "^7.3.0",
"react-dom": "^17.0.2",
"react-syntax-highlighter": "^15.5.0"
},
@@ -139,6 +145,12 @@
"node": ">=6.9.0"
}
},
+ "apps/docs/node_modules/@webcontainer/api": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@webcontainer/api/-/api-1.1.2.tgz",
+ "integrity": "sha512-Lx4Z9S/11SXeQLuko7XV4/YBX1osCVLMBM1HDiR68+yjLhVqdF6yOMO1SaL43afmt7k3evEvOOT1ckNpIc8rIw==",
+ "license": "MIT"
+ },
"apps/docs/node_modules/array-includes": {
"version": "3.1.7",
"resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz",
@@ -8970,6 +8982,12 @@
"resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
},
+ "node_modules/@zeit/schemas": {
+ "version": "2.36.0",
+ "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.36.0.tgz",
+ "integrity": "sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==",
+ "license": "MIT"
+ },
"node_modules/accepts": {
"version": "1.3.8",
"license": "MIT",
@@ -9183,6 +9201,32 @@
"node": ">= 8"
}
},
+ "node_modules/arch": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
+ "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+ "license": "MIT"
+ },
"node_modules/argparse": {
"version": "1.0.10",
"license": "MIT",
@@ -10289,6 +10333,91 @@
"node": ">=4"
}
},
+ "node_modules/chalk-template": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz",
+ "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==",
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk-template?sponsor=1"
+ }
+ },
+ "node_modules/chalk-template/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==",
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/chalk-template/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "license": "MIT",
+ "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/chalk-template/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==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/chalk-template/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==",
+ "license": "MIT"
+ },
+ "node_modules/chalk-template/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==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/chalk-template/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==",
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/char-regex": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
@@ -10448,6 +10577,23 @@
"resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
"integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
},
+ "node_modules/clipboardy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz",
+ "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==",
+ "license": "MIT",
+ "dependencies": {
+ "arch": "^2.2.0",
+ "execa": "^5.1.1",
+ "is-wsl": "^2.2.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/cliui": {
"version": "8.0.1",
"license": "ISC",
@@ -10501,6 +10647,11 @@
"node": ">= 0.12.0"
}
},
+ "node_modules/codemirror": {
+ "version": "5.65.16",
+ "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.16.tgz",
+ "integrity": "sha512-br21LjYmSlVL0vFCPWPfhzUCT34FM/pAdK7rRIZwa0rrtrIdotvP4Oh4GUHsu2E3IrQMCfRkL/fN3ytMNxVQvg=="
+ },
"node_modules/collapse-white-space": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz",
@@ -13026,19 +13177,6 @@
"version": "2.0.6",
"license": "MIT"
},
- "node_modules/fast-url-parser": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz",
- "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==",
- "dependencies": {
- "punycode": "^1.3.2"
- }
- },
- "node_modules/fast-url-parser/node_modules/punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ=="
- },
"node_modules/fastest-levenshtein": {
"version": "1.0.16",
"dev": true,
@@ -15103,6 +15241,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-port-reachable": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-4.0.0.tgz",
+ "integrity": "sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-reference": {
"version": "1.2.1",
"dev": true,
@@ -15271,6 +15421,17 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "dependencies": {
+ "is-docker": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-yarn-global": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
@@ -20430,17 +20591,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/open/node_modules/is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
- "dependencies": {
- "is-docker": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/opener": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
@@ -20716,6 +20866,12 @@
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true
},
+ "node_modules/path-to-regexp": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz",
+ "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==",
+ "license": "MIT"
+ },
"node_modules/path-type": {
"version": "4.0.0",
"license": "MIT",
@@ -21758,6 +21914,15 @@
"pure-color": "^1.2.0"
}
},
+ "node_modules/react-codemirror2": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/react-codemirror2/-/react-codemirror2-7.3.0.tgz",
+ "integrity": "sha512-gCgJPXDX+5iaPolkHAu1YbJ92a2yL7Je4TuyO3QEqOtI/d6mbEk08l0oIm18R4ctuT/Sl87X63xIMBnRQBXYXA==",
+ "peerDependencies": {
+ "codemirror": "5.x",
+ "react": ">=15.5 <=17.x"
+ }
+ },
"node_modules/react-dev-utils": {
"version": "12.0.1",
"resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz",
@@ -23141,18 +23306,43 @@
"randombytes": "^2.1.0"
}
},
+ "node_modules/serve": {
+ "version": "14.2.4",
+ "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.4.tgz",
+ "integrity": "sha512-qy1S34PJ/fcY8gjVGszDB3EXiPSk5FKhUa7tQe0UPRddxRidc2V6cNHPNewbE1D7MAkgLuWEt3Vw56vYy73tzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@zeit/schemas": "2.36.0",
+ "ajv": "8.12.0",
+ "arg": "5.0.2",
+ "boxen": "7.0.0",
+ "chalk": "5.0.1",
+ "chalk-template": "0.4.0",
+ "clipboardy": "3.0.0",
+ "compression": "1.7.4",
+ "is-port-reachable": "4.0.0",
+ "serve-handler": "6.1.6",
+ "update-check": "1.5.4"
+ },
+ "bin": {
+ "serve": "build/main.js"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
"node_modules/serve-handler": {
- "version": "6.1.5",
- "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz",
- "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==",
+ "version": "6.1.6",
+ "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz",
+ "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==",
+ "license": "MIT",
"dependencies": {
"bytes": "3.0.0",
"content-disposition": "0.5.2",
- "fast-url-parser": "1.1.3",
"mime-types": "2.1.18",
"minimatch": "3.1.2",
"path-is-inside": "1.0.2",
- "path-to-regexp": "2.2.1",
+ "path-to-regexp": "3.3.0",
"range-parser": "1.2.0"
}
},
@@ -23183,11 +23373,6 @@
"node": ">= 0.6"
}
},
- "node_modules/serve-handler/node_modules/path-to-regexp": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz",
- "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ=="
- },
"node_modules/serve-handler/node_modules/range-parser": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
@@ -23251,6 +23436,165 @@
"version": "1.1.0",
"license": "ISC"
},
+ "node_modules/serve/node_modules/ajv": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+ "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/serve/node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/serve/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==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/serve/node_modules/boxen": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz",
+ "integrity": "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-align": "^3.0.1",
+ "camelcase": "^7.0.0",
+ "chalk": "^5.0.1",
+ "cli-boxes": "^3.0.0",
+ "string-width": "^5.1.2",
+ "type-fest": "^2.13.0",
+ "widest-line": "^4.0.1",
+ "wrap-ansi": "^8.0.1"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/serve/node_modules/camelcase": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz",
+ "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/serve/node_modules/chalk": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz",
+ "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/serve/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==",
+ "license": "MIT"
+ },
+ "node_modules/serve/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "license": "MIT"
+ },
+ "node_modules/serve/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==",
+ "license": "MIT",
+ "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/serve/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==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/serve/node_modules/type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/serve/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==",
+ "license": "MIT",
+ "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/server-only": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz",
@@ -23410,11 +23754,6 @@
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz",
"integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
},
- "node_modules/sitemap/node_modules/arg": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
- "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
- },
"node_modules/slash": {
"version": "2.0.0",
"dev": true,
@@ -24864,6 +25203,38 @@
"browserslist": ">= 4.21.0"
}
},
+ "node_modules/update-check": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz",
+ "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==",
+ "license": "MIT",
+ "dependencies": {
+ "registry-auth-token": "3.3.2",
+ "registry-url": "3.1.0"
+ }
+ },
+ "node_modules/update-check/node_modules/registry-auth-token": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
+ "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
+ "license": "MIT",
+ "dependencies": {
+ "rc": "^1.1.6",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/update-check/node_modules/registry-url": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
+ "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==",
+ "license": "MIT",
+ "dependencies": {
+ "rc": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/update-notifier": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz",
@@ -26425,6 +26796,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
"darwin"
@@ -26440,6 +26812,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"darwin"
@@ -26455,6 +26828,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
@@ -26470,6 +26844,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
@@ -26485,6 +26860,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
@@ -26500,6 +26876,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
@@ -26515,6 +26892,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
"win32"
@@ -26530,6 +26908,7 @@
"cpu": [
"ia32"
],
+ "dev": true,
"optional": true,
"os": [
"win32"
@@ -26545,6 +26924,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"win32"
@@ -32318,6 +32698,11 @@
"resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
},
+ "@zeit/schemas": {
+ "version": "2.36.0",
+ "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.36.0.tgz",
+ "integrity": "sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg=="
+ },
"accepts": {
"version": "1.3.8",
"requires": {
@@ -32457,6 +32842,16 @@
"picomatch": "^2.0.4"
}
},
+ "arch": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
+ "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ=="
+ },
+ "arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
+ },
"argparse": {
"version": "1.0.10",
"requires": {
@@ -33226,6 +33621,59 @@
"supports-color": "^5.3.0"
}
},
+ "chalk-template": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz",
+ "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==",
+ "requires": {
+ "chalk": "^4.1.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "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==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "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=="
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "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==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
"char-regex": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
@@ -33329,6 +33777,16 @@
"resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
"integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
},
+ "clipboardy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz",
+ "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==",
+ "requires": {
+ "arch": "^2.2.0",
+ "execa": "^5.1.1",
+ "is-wsl": "^2.2.0"
+ }
+ },
"cliui": {
"version": "8.0.1",
"requires": {
@@ -33364,6 +33822,11 @@
"integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
"dev": true
},
+ "codemirror": {
+ "version": "5.65.16",
+ "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.16.tgz",
+ "integrity": "sha512-br21LjYmSlVL0vFCPWPfhzUCT34FM/pAdK7rRIZwa0rrtrIdotvP4Oh4GUHsu2E3IrQMCfRkL/fN3ytMNxVQvg=="
+ },
"collapse-white-space": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz",
@@ -34125,8 +34588,10 @@
"@stylexjs/babel-plugin": "0.8.0",
"@stylexjs/stylex": "0.8.0",
"@vercel/analytics": "^1.1.1",
+ "@webcontainer/api": "1.1.2",
"clean-css": "^5.3.2",
"clsx": "^1.2.1",
+ "codemirror": "^5.65.16",
"eslint": "^8.56.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-plugin-header": "^3.1.1",
@@ -34136,6 +34601,7 @@
"eslint-plugin-react-hooks": "^4.6.0",
"mkdirp": "^1.0.4",
"react": "^17.0.2",
+ "react-codemirror2": "^7.3.0",
"react-dom": "^17.0.2",
"react-syntax-highlighter": "^15.5.0",
"stylelint": "^14.9.1"
@@ -34150,6 +34616,11 @@
"regenerator-runtime": "^0.14.0"
}
},
+ "@webcontainer/api": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@webcontainer/api/-/api-1.1.2.tgz",
+ "integrity": "sha512-Lx4Z9S/11SXeQLuko7XV4/YBX1osCVLMBM1HDiR68+yjLhVqdF6yOMO1SaL43afmt7k3evEvOOT1ckNpIc8rIw=="
+ },
"array-includes": {
"version": "3.1.7",
"resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz",
@@ -35547,21 +36018,6 @@
"fast-levenshtein": {
"version": "2.0.6"
},
- "fast-url-parser": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz",
- "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==",
- "requires": {
- "punycode": "^1.3.2"
- },
- "dependencies": {
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ=="
- }
- }
- },
"fastest-levenshtein": {
"version": "1.0.16",
"dev": true
@@ -36943,6 +37399,11 @@
"isobject": "^3.0.1"
}
},
+ "is-port-reachable": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-4.0.0.tgz",
+ "integrity": "sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig=="
+ },
"is-reference": {
"version": "1.2.1",
"dev": true,
@@ -37045,6 +37506,14 @@
"resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz",
"integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA=="
},
+ "is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "requires": {
+ "is-docker": "^2.0.0"
+ }
+ },
"is-yarn-global": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
@@ -41150,16 +41619,6 @@
"define-lazy-prop": "^2.0.0",
"is-docker": "^2.1.1",
"is-wsl": "^2.2.0"
- },
- "dependencies": {
- "is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
- "requires": {
- "is-docker": "^2.0.0"
- }
- }
}
},
"opener": {
@@ -41354,6 +41813,11 @@
}
}
},
+ "path-to-regexp": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz",
+ "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw=="
+ },
"path-type": {
"version": "4.0.0"
},
@@ -42003,6 +42467,12 @@
"pure-color": "^1.2.0"
}
},
+ "react-codemirror2": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/react-codemirror2/-/react-codemirror2-7.3.0.tgz",
+ "integrity": "sha512-gCgJPXDX+5iaPolkHAu1YbJ92a2yL7Je4TuyO3QEqOtI/d6mbEk08l0oIm18R4ctuT/Sl87X63xIMBnRQBXYXA==",
+ "requires": {}
+ },
"react-dev-utils": {
"version": "12.0.1",
"resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz",
@@ -43014,18 +43484,126 @@
"randombytes": "^2.1.0"
}
},
+ "serve": {
+ "version": "14.2.4",
+ "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.4.tgz",
+ "integrity": "sha512-qy1S34PJ/fcY8gjVGszDB3EXiPSk5FKhUa7tQe0UPRddxRidc2V6cNHPNewbE1D7MAkgLuWEt3Vw56vYy73tzQ==",
+ "requires": {
+ "@zeit/schemas": "2.36.0",
+ "ajv": "8.12.0",
+ "arg": "5.0.2",
+ "boxen": "7.0.0",
+ "chalk": "5.0.1",
+ "chalk-template": "0.4.0",
+ "clipboardy": "3.0.0",
+ "compression": "1.7.4",
+ "is-port-reachable": "4.0.0",
+ "serve-handler": "6.1.6",
+ "update-check": "1.5.4"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+ "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="
+ },
+ "ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="
+ },
+ "boxen": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz",
+ "integrity": "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==",
+ "requires": {
+ "ansi-align": "^3.0.1",
+ "camelcase": "^7.0.0",
+ "chalk": "^5.0.1",
+ "cli-boxes": "^3.0.0",
+ "string-width": "^5.1.2",
+ "type-fest": "^2.13.0",
+ "widest-line": "^4.0.1",
+ "wrap-ansi": "^8.0.1"
+ }
+ },
+ "camelcase": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz",
+ "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw=="
+ },
+ "chalk": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz",
+ "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w=="
+ },
+ "emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+ },
+ "json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
+ },
+ "string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "requires": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "requires": {
+ "ansi-regex": "^6.0.1"
+ }
+ },
+ "type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="
+ },
+ "wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "requires": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ }
+ }
+ }
+ },
"serve-handler": {
- "version": "6.1.5",
- "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz",
- "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==",
+ "version": "6.1.6",
+ "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz",
+ "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==",
"requires": {
"bytes": "3.0.0",
"content-disposition": "0.5.2",
- "fast-url-parser": "1.1.3",
"mime-types": "2.1.18",
"minimatch": "3.1.2",
"path-is-inside": "1.0.2",
- "path-to-regexp": "2.2.1",
+ "path-to-regexp": "3.3.0",
"range-parser": "1.2.0"
},
"dependencies": {
@@ -43047,11 +43625,6 @@
"mime-db": "~1.33.0"
}
},
- "path-to-regexp": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz",
- "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ=="
- },
"range-parser": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
@@ -43213,11 +43786,6 @@
"version": "17.0.45",
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz",
"integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
- },
- "arg": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
- "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
}
}
},
@@ -44277,6 +44845,34 @@
"picocolors": "^1.0.1"
}
},
+ "update-check": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz",
+ "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==",
+ "requires": {
+ "registry-auth-token": "3.3.2",
+ "registry-url": "3.1.0"
+ },
+ "dependencies": {
+ "registry-auth-token": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
+ "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
+ "requires": {
+ "rc": "^1.1.6",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "registry-url": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
+ "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==",
+ "requires": {
+ "rc": "^1.0.1"
+ }
+ }
+ }
+ },
"update-notifier": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz",
@@ -45258,60 +45854,6 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz",
"integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw=="
- },
- "@next/swc-darwin-arm64": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.1.tgz",
- "integrity": "sha512-JyxnGCS4qT67hdOKQ0CkgFTp+PXub5W1wsGvIq98TNbF3YEIN7iDekYhYsZzc8Ov0pWEsghQt+tANdidITCLaw==",
- "optional": true
- },
- "@next/swc-darwin-x64": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.1.tgz",
- "integrity": "sha512-625Z7bb5AyIzswF9hvfZWa+HTwFZw+Jn3lOBNZB87lUS0iuCYDHqk3ujuHCkiyPtSC0xFBtYDLcrZ11mF/ap3w==",
- "optional": true
- },
- "@next/swc-linux-arm64-gnu": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.1.tgz",
- "integrity": "sha512-iVpn3KG3DprFXzVHM09kvb//4CNNXBQ9NB/pTm8LO+vnnnaObnzFdS5KM+w1okwa32xH0g8EvZIhoB3fI3mS1g==",
- "optional": true
- },
- "@next/swc-linux-arm64-musl": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.1.tgz",
- "integrity": "sha512-mVsGyMxTLWZXyD5sen6kGOTYVOO67lZjLApIj/JsTEEohDDt1im2nkspzfV5MvhfS7diDw6Rp/xvAQaWZTv1Ww==",
- "optional": true
- },
- "@next/swc-linux-x64-gnu": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.1.tgz",
- "integrity": "sha512-wMqf90uDWN001NqCM/auRl3+qVVeKfjJdT9XW+RMIOf+rhUzadmYJu++tp2y+hUbb6GTRhT+VjQzcgg/QTD9NQ==",
- "optional": true
- },
- "@next/swc-linux-x64-musl": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.1.tgz",
- "integrity": "sha512-ol1X1e24w4j4QwdeNjfX0f+Nza25n+ymY0T2frTyalVczUmzkVD7QGgPTZMHfR1aLrO69hBs0G3QBYaj22J5GQ==",
- "optional": true
- },
- "@next/swc-win32-arm64-msvc": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.1.tgz",
- "integrity": "sha512-WEmTEeWs6yRUEnUlahTgvZteh5RJc4sEjCQIodJlZZ5/VJwVP8p2L7l6VhzQhT4h7KvLx/Ed4UViBdne6zpIsw==",
- "optional": true
- },
- "@next/swc-win32-ia32-msvc": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.1.tgz",
- "integrity": "sha512-oFpHphN4ygAgZUKjzga7SoH2VGbEJXZa/KL8bHCAwCjDWle6R1SpiGOdUdA8EJ9YsG1TYWpzY6FTbUA+iAJeww==",
- "optional": true
- },
- "@next/swc-win32-x64-msvc": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.1.tgz",
- "integrity": "sha512-FFp3nOJ/5qSpeWT0BZQ+YE1pSMk4IMpkME/1DwKBwhg4mJLB9L+6EXuJi4JEwaJdl5iN+UUlmUD3IsR1kx5fAg==",
- "optional": true
}
}
}
diff --git a/package.json b/package.json
index 280fcffd..054d1652 100644
--- a/package.json
+++ b/package.json
@@ -76,5 +76,8 @@
}
}
]
+ },
+ "dependencies": {
+ "serve": "^14.2.4"
}
}