diff --git a/examples/hono-tractor-store-2.0/.eslintignore b/examples/hono-tractor-store-2.0/.eslintignore
new file mode 100644
index 0000000..9564c30
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/.eslintignore
@@ -0,0 +1,6 @@
+src/explore/database/index.js
+src/decide/database/index.js
+src/checkout/database/index.js
+public/explore/
+public/decide/
+public/checkout/
\ No newline at end of file
diff --git a/examples/hono-tractor-store-2.0/.eslintrc.json b/examples/hono-tractor-store-2.0/.eslintrc.json
new file mode 100644
index 0000000..7bef58e
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/.eslintrc.json
@@ -0,0 +1,15 @@
+{
+ "env": {
+ "es2021": true,
+ "node": true,
+ "browser": true
+ },
+ "extends": ["eslint:recommended", "plugin:prettier/recommended", "plugin:jsdoc/recommended"],
+ "parserOptions": {
+ "ecmaVersion": 14,
+ "sourceType": "module"
+ },
+ "rules": {
+ "jsdoc/no-undefined-types": "off"
+ }
+}
\ No newline at end of file
diff --git a/examples/hono-tractor-store-2.0/.gitignore b/examples/hono-tractor-store-2.0/.gitignore
new file mode 100644
index 0000000..0b97bb3
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/.gitignore
@@ -0,0 +1,4 @@
+node_modules/
+public/checkout/
+public/decide/
+public/explore/
diff --git a/examples/hono-tractor-store-2.0/.prettierrc b/examples/hono-tractor-store-2.0/.prettierrc
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/.prettierrc
@@ -0,0 +1 @@
+{}
diff --git a/examples/hono-tractor-store-2.0/README.md b/examples/hono-tractor-store-2.0/README.md
new file mode 100644
index 0000000..593282e
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/README.md
@@ -0,0 +1,93 @@
+# The Tractor Store - Blueprint
+
+## What is The Tractor Store?
+
+The Tractor Store is a template to experiment with micro frontend architecture.
+Goal is to create a real world application where developers can experiment with different integration techniques.
+
+The idea is similar to [TodoMVC](http://todomvc.com/) or [Movies](https://tastejs.com/movies/), but with a focus on micro frontends.
+
+## About this project
+
+- Three systems: Explore, Decide, Buy along the customer journey (buying process)
+- Store that sells tractors
+- E-commerce platform (homepage, catalog, product details, cart, checkout, thank you page)
+- Special features: Add to cart animation, recommendations, store picker, thank you confetti
+- Focus on frontend aspects. Backend and database are mocked with static data.
+- Styling is provided in the blueprint. It's not the focus of this project.
+- Static assets (images, fonts, helpers, ...) are provided. They can be copied or linked to directly (CDN).
+
+## Design principals
+
+- Each system can be developed and deployed independently by different teams
+- The freedom to change a systems technology stack without affecting the others must be guaranteed
+- Self-contained systems: Each system has its own database, backend and frontend
+- Loose coupling: Systems should be able to function independently of each other as best as possible
+- Provide a way to run the entire application locally for development and testing
+
+## Implementation choices
+
+- All described features must be implemented (user stories). End-to-end tests are provided to verify the implementation.
+- The concrete implementation is up to you (frontend framework, style handling, etc.)
+- Communication between systems can be achieved with different techniques (client, server, shared state, events, event-bus, etc.)
+- Server- and/or client-rendering is possible
+- An application shell is not required, but can be implemented if desired
+- Deployment can be done with different techniques (container, serverless, static, etc.)
+- Optional feature: extract shared UI components into a pattern library (button, ...)
+
+## Goal of the project
+
+There is no one-size-fits-all solution for micro frontends.
+The goal of this project is to provide a central place, where different micro frontend integration techniques can be compared and evaluated.
+
+- Make pros and cons of different tech-stacks and integration techniques visible and discussable
+ - Organizational scalability (more teams, more systems)
+ - Technical scalability (more users, more features)
+ - Performance characteristics (Core-Web-Vitals, ...)
+ - Development experience
+- Share knowledge and learnings with the community
+- Provide a blueprint for others to experiment with a specific micro frontends tech stack
+
+## Implementation gallery
+
+- Fork the blueprint or any other implementation
+- Submit a an issue with a link to your implementation (github repo)
+- Describe you tech stack and integration techniques using the issue template
+- Extra points if you provide a hosted version of your implementation
+
+## Anatomy of the project
+
+### Boundaries 📄
+
+- 🔴 Explore
+ - 📄 Home
+ - 📄 Category
+ - 📄 Stores
+ - 🧩 Header (🔴🟢🟡 every page, except checkout)
+ - 🧩 Footer (🔴🟢🟡 every page)
+ - 🧩 Recommendations (🔴 home, 🟢 product, 🟡 cart)
+ - 🧩 Store Picker (🟡 checkout)
+- 🟢 Decide
+ - 📄 Product detail
+- 🟡 Buy
+ - 📄 Cart
+ - 📄 Checkout
+ - 📄 Thank you
+ - 🧩 Mini Cart (🔴 header)
+ - 🧩 Add To Cart Button (🟢 product details)
+
+### Concepts 🧠
+
+- Inter-team navigation (server- and/or client-side)
+- Communication parent-child (variant change > recommendations, add to cart)
+- Communication sibling (add to cart > mini cart)
+- Communication child-parent (in store pickup > explore )
+- Potential client-side interactions (variant change, remove from cart, form validation)
+- Nested integration (page > header > mini cart)
+- [Bonus] Shared UI components / pattern library (button)
+
+### Infrastructure 🏗️
+
+- Deployment
+- Integration service
+- Ende-zu-Ende-Tests (planned)
diff --git a/examples/hono-tractor-store-2.0/esbuild.js b/examples/hono-tractor-store-2.0/esbuild.js
new file mode 100644
index 0000000..aedf93b
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/esbuild.js
@@ -0,0 +1,35 @@
+import esbuild from "esbuild";
+
+const isWatchMode = process.argv.includes("--watch");
+
+const teams = ["explore", "decide", "checkout"];
+const buildOptions = [];
+
+teams.forEach((team) => {
+ buildOptions.push(
+ {
+ entryPoints: [`src/${team}/scripts.js`],
+ outfile: `public/${team}/static/scripts.js`,
+ },
+ {
+ entryPoints: [`src/${team}/styles.css`],
+ external: ["*.woff2"],
+ outfile: `public/${team}/static/styles.css`,
+ },
+ );
+});
+
+buildOptions.forEach(async (options) => {
+ let opts = {
+ bundle: true,
+ minify: true,
+ logLevel: "info",
+ ...options,
+ };
+ if (isWatchMode) {
+ let ctx = await esbuild.context(opts);
+ ctx.watch();
+ } else {
+ esbuild.build(opts).catch(() => process.exit(1));
+ }
+});
diff --git a/examples/hono-tractor-store-2.0/package-lock.json b/examples/hono-tractor-store-2.0/package-lock.json
new file mode 100644
index 0000000..e3743a6
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/package-lock.json
@@ -0,0 +1,2898 @@
+{
+ "name": "tractor-store-blueprint",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "tractor-store-blueprint",
+ "version": "1.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "@hono/node-server": "^1.8.2",
+ "eslint-plugin-jsdoc": "^48.2.1",
+ "hono": "^4.1.0"
+ },
+ "devDependencies": {
+ "esbuild": "^0.20.1",
+ "eslint": "^8.56.0",
+ "eslint-config-prettier": "^9.1.0",
+ "eslint-plugin-prettier": "^5.1.3",
+ "prettier": "^3.2.5",
+ "wrangler": "^3.34.0"
+ }
+ },
+ "node_modules/@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/@cloudflare/kv-asset-handler": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.1.tgz",
+ "integrity": "sha512-lKN2XCfKCmpKb86a1tl4GIwsJYDy9TGuwjhDELLmpKygQhw8X2xR4dusgpC5Tg7q1pB96Eb0rBo81kxSILQMwA==",
+ "dev": true,
+ "dependencies": {
+ "mime": "^3.0.0"
+ }
+ },
+ "node_modules/@cloudflare/workerd-darwin-64": {
+ "version": "1.20240314.0",
+ "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240314.0.tgz",
+ "integrity": "sha512-19xW64AmkjGnp9ZSwa5RPMTBJ0eqadY/oLs3RcdC8J+R8vT766U2bgxyuf3VATlOf+T7t28aGYzW/QcBRls9eg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@cloudflare/workerd-darwin-arm64": {
+ "version": "1.20240314.0",
+ "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240314.0.tgz",
+ "integrity": "sha512-gq78D30GlNSg55YRzCzNHPuLp87L7xmYCYa5hIuIE7xpqhqGN6FV/mRtp2TQ5VoDXiuq1F+VdEZDwQFvrNAvtg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@cloudflare/workerd-linux-64": {
+ "version": "1.20240314.0",
+ "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240314.0.tgz",
+ "integrity": "sha512-1PYddg+lGGOUkXNt3LEHB0GvIBWjilTNwmbacGyyVRm+zaWGKqt2bS3bW/TY6cHJ1lxFe/fDMrQOgnSBB7jGIw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@cloudflare/workerd-linux-arm64": {
+ "version": "1.20240314.0",
+ "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240314.0.tgz",
+ "integrity": "sha512-GIyyO+TKYQ7TsM/DgpoHP2uQrJuPEc/cpRaXYeOzHerGAdQRej6iS2+LAnTJgLTXgOC4DE622mKBL3tnZvuKVQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@cloudflare/workerd-windows-64": {
+ "version": "1.20240314.0",
+ "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240314.0.tgz",
+ "integrity": "sha512-NWZeVXEXJfPuLAXfMTiFusJNOMnsHkBae0C4hlqzwIzYiQ0PYnQ+BEWFS5eWy5dZihhFrsW3VRYqnTbgESIkzw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@es-joy/jsdoccomment": {
+ "version": "0.42.0",
+ "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.42.0.tgz",
+ "integrity": "sha512-R1w57YlVA6+YE01wch3GPYn6bCsrOV3YW/5oGGE2tmX6JcL9Nr+b5IikrjMPF+v9CV3ay+obImEdsDhovhJrzw==",
+ "dependencies": {
+ "comment-parser": "1.4.1",
+ "esquery": "^1.5.0",
+ "jsdoc-type-pratt-parser": "~4.0.0"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@esbuild-plugins/node-globals-polyfill": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz",
+ "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==",
+ "dev": true,
+ "peerDependencies": {
+ "esbuild": "*"
+ }
+ },
+ "node_modules/@esbuild-plugins/node-modules-polyfill": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz",
+ "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^4.0.0",
+ "rollup-plugin-node-polyfills": "^0.2.1"
+ },
+ "peerDependencies": {
+ "esbuild": "*"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
+ "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz",
+ "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz",
+ "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz",
+ "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz",
+ "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz",
+ "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz",
+ "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz",
+ "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz",
+ "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz",
+ "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz",
+ "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz",
+ "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz",
+ "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz",
+ "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz",
+ "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz",
+ "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz",
+ "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz",
+ "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz",
+ "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz",
+ "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz",
+ "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz",
+ "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz",
+ "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+ "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+ "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@fastify/busboy": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
+ "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@hono/node-server": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.8.2.tgz",
+ "integrity": "sha512-h8l2TBLCPHZBUrrkosZ6L5CpBLj6zdESyF4B+zngiCDF7aZFQJ0alVbLx7jn8PCVi9EyoFf8a4hOZFi1tD95EA==",
+ "engines": {
+ "node": ">=18.14.1"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.14",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^2.0.2",
+ "debug": "^4.3.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
+ "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw=="
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@pkgr/core": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
+ "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "20.11.30",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz",
+ "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==",
+ "dev": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/@types/node-forge": {
+ "version": "1.3.11",
+ "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz",
+ "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ=="
+ },
+ "node_modules/acorn": {
+ "version": "8.11.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+ "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz",
+ "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/are-docs-informative": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz",
+ "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ },
+ "node_modules/as-table": {
+ "version": "1.0.55",
+ "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz",
+ "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==",
+ "dev": true,
+ "dependencies": {
+ "printable-characters": "^1.0.42"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/blake3-wasm": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz",
+ "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/builtin-modules": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
+ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/capnp-ts": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz",
+ "integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.1",
+ "tslib": "^2.2.0"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dev": true,
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/comment-parser": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz",
+ "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==",
+ "engines": {
+ "node": ">= 12.0.0"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "node_modules/cookie": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/data-uri-to-buffer": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz",
+ "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==",
+ "dev": true
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
+ "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.20.2",
+ "@esbuild/android-arm": "0.20.2",
+ "@esbuild/android-arm64": "0.20.2",
+ "@esbuild/android-x64": "0.20.2",
+ "@esbuild/darwin-arm64": "0.20.2",
+ "@esbuild/darwin-x64": "0.20.2",
+ "@esbuild/freebsd-arm64": "0.20.2",
+ "@esbuild/freebsd-x64": "0.20.2",
+ "@esbuild/linux-arm": "0.20.2",
+ "@esbuild/linux-arm64": "0.20.2",
+ "@esbuild/linux-ia32": "0.20.2",
+ "@esbuild/linux-loong64": "0.20.2",
+ "@esbuild/linux-mips64el": "0.20.2",
+ "@esbuild/linux-ppc64": "0.20.2",
+ "@esbuild/linux-riscv64": "0.20.2",
+ "@esbuild/linux-s390x": "0.20.2",
+ "@esbuild/linux-x64": "0.20.2",
+ "@esbuild/netbsd-x64": "0.20.2",
+ "@esbuild/openbsd-x64": "0.20.2",
+ "@esbuild/sunos-x64": "0.20.2",
+ "@esbuild/win32-arm64": "0.20.2",
+ "@esbuild/win32-ia32": "0.20.2",
+ "@esbuild/win32-x64": "0.20.2"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
+ "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.4",
+ "@eslint/js": "8.57.0",
+ "@humanwhocodes/config-array": "^0.11.14",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-config-prettier": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz",
+ "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==",
+ "dev": true,
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-jsdoc": {
+ "version": "48.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.1.tgz",
+ "integrity": "sha512-iUvbcyDZSO/9xSuRv2HQBw++8VkV/pt3UWtX9cpPH0l7GKPq78QC/6+PmyQHHvNZaTjAce6QVciEbnc6J/zH5g==",
+ "dependencies": {
+ "@es-joy/jsdoccomment": "~0.42.0",
+ "are-docs-informative": "^0.0.2",
+ "comment-parser": "1.4.1",
+ "debug": "^4.3.4",
+ "escape-string-regexp": "^4.0.0",
+ "esquery": "^1.5.0",
+ "is-builtin-module": "^3.2.1",
+ "semver": "^7.6.0",
+ "spdx-expression-parse": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-prettier": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz",
+ "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==",
+ "dev": true,
+ "dependencies": {
+ "prettier-linter-helpers": "^1.0.0",
+ "synckit": "^0.8.6"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint-plugin-prettier"
+ },
+ "peerDependencies": {
+ "@types/eslint": ">=8.0.0",
+ "eslint": ">=8.0.0",
+ "eslint-config-prettier": "*",
+ "prettier": ">=3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/eslint": {
+ "optional": true
+ },
+ "eslint-config-prettier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz",
+ "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==",
+ "dev": true
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/exit-hook": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz",
+ "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "node_modules/fast-diff": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
+ "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
+ "dev": true
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
+ },
+ "node_modules/fastq": {
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.3",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw=="
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-source": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz",
+ "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==",
+ "dev": true,
+ "dependencies": {
+ "data-uri-to-buffer": "^2.0.0",
+ "source-map": "^0.6.1"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+ "dev": true
+ },
+ "node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/hono": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/hono/-/hono-4.1.3.tgz",
+ "integrity": "sha512-V0I6qCw0gn2MA4LLtyXe6oD3/7ToeQf5Zv98o7uSuLuViQgWHJeYoYrZ4NbXhOtg4SaZjNJJm1+XuFB3LN+j6A==",
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+ "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-builtin-module": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
+ "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
+ "dependencies": {
+ "builtin-modules": "^3.3.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.13.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+ "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+ "dev": true,
+ "dependencies": {
+ "hasown": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsdoc-type-pratt-parser": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz",
+ "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==",
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
+ "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
+ "dev": true,
+ "dependencies": {
+ "sourcemap-codec": "^1.4.8"
+ }
+ },
+ "node_modules/mime": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
+ "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
+ "dev": true,
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/miniflare": {
+ "version": "3.20240314.0",
+ "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20240314.0.tgz",
+ "integrity": "sha512-vjjiCEgNy4rfE8VP2C9xngT3eQY4HQg5eiXL+I845voM+6m67a7sZaGl2MspANNHXAKVi71m5bAzFgPcb2Jw9w==",
+ "dev": true,
+ "dependencies": {
+ "@cspotcode/source-map-support": "0.8.1",
+ "acorn": "^8.8.0",
+ "acorn-walk": "^8.2.0",
+ "capnp-ts": "^0.7.0",
+ "exit-hook": "^2.2.1",
+ "glob-to-regexp": "^0.4.1",
+ "stoppable": "^1.1.0",
+ "undici": "^5.28.2",
+ "workerd": "1.20240314.0",
+ "ws": "^8.11.0",
+ "youch": "^3.2.2",
+ "zod": "^3.20.6"
+ },
+ "bin": {
+ "miniflare": "bootstrap.js"
+ },
+ "engines": {
+ "node": ">=16.13"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/mustache": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz",
+ "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==",
+ "dev": true,
+ "bin": {
+ "mustache": "bin/mustache"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
+ },
+ "node_modules/node-forge": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
+ "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6.13.0"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "dependencies": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "node_modules/path-to-regexp": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz",
+ "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz",
+ "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/prettier-linter-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+ "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+ "dev": true,
+ "dependencies": {
+ "fast-diff": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/printable-characters": {
+ "version": "1.0.42",
+ "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz",
+ "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==",
+ "dev": true
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve.exports": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
+ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rollup-plugin-inject": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz",
+ "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==",
+ "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.",
+ "dev": true,
+ "dependencies": {
+ "estree-walker": "^0.6.1",
+ "magic-string": "^0.25.3",
+ "rollup-pluginutils": "^2.8.1"
+ }
+ },
+ "node_modules/rollup-plugin-node-polyfills": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz",
+ "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==",
+ "dev": true,
+ "dependencies": {
+ "rollup-plugin-inject": "^3.0.0"
+ }
+ },
+ "node_modules/rollup-pluginutils": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz",
+ "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==",
+ "dev": true,
+ "dependencies": {
+ "estree-walker": "^0.6.1"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/selfsigned": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz",
+ "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==",
+ "dev": true,
+ "dependencies": {
+ "@types/node-forge": "^1.3.0",
+ "node-forge": "^1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sourcemap-codec": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
+ "deprecated": "Please use @jridgewell/sourcemap-codec instead",
+ "dev": true
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz",
+ "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==",
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz",
+ "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg=="
+ },
+ "node_modules/stacktracey": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz",
+ "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==",
+ "dev": true,
+ "dependencies": {
+ "as-table": "^1.0.36",
+ "get-source": "^2.0.12"
+ }
+ },
+ "node_modules/stoppable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz",
+ "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4",
+ "npm": ">=6"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/synckit": {
+ "version": "0.8.8",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz",
+ "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==",
+ "dev": true,
+ "dependencies": {
+ "@pkgr/core": "^0.1.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
+ "dev": true
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/undici": {
+ "version": "5.28.3",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.3.tgz",
+ "integrity": "sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==",
+ "dev": true,
+ "dependencies": {
+ "@fastify/busboy": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.0"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "dev": true
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/workerd": {
+ "version": "1.20240314.0",
+ "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20240314.0.tgz",
+ "integrity": "sha512-5vXqDe6vJTMpfPVW8Vtcy2zcVIBnOIMv0D+Z0gVPMPq++KwEyQWzCIVLpIyc28EUc5bW3gEO49E8BN1PQebgfw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "workerd": "bin/workerd"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "optionalDependencies": {
+ "@cloudflare/workerd-darwin-64": "1.20240314.0",
+ "@cloudflare/workerd-darwin-arm64": "1.20240314.0",
+ "@cloudflare/workerd-linux-64": "1.20240314.0",
+ "@cloudflare/workerd-linux-arm64": "1.20240314.0",
+ "@cloudflare/workerd-windows-64": "1.20240314.0"
+ }
+ },
+ "node_modules/wrangler": {
+ "version": "3.36.0",
+ "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.36.0.tgz",
+ "integrity": "sha512-Fywf9RGAePIuIDcsSg4BW+lDUZX1jh2jN+TtmZOwG5Ewdr9dJGP3dxoFa85eQQZP1VLvY4lsqrKy67JqOuP9Gw==",
+ "dev": true,
+ "dependencies": {
+ "@cloudflare/kv-asset-handler": "0.3.1",
+ "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
+ "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
+ "blake3-wasm": "^2.1.5",
+ "chokidar": "^3.5.3",
+ "esbuild": "0.17.19",
+ "miniflare": "3.20240314.0",
+ "nanoid": "^3.3.3",
+ "path-to-regexp": "^6.2.0",
+ "resolve": "^1.22.8",
+ "resolve.exports": "^2.0.2",
+ "selfsigned": "^2.0.1",
+ "source-map": "0.6.1",
+ "xxhash-wasm": "^1.0.1"
+ },
+ "bin": {
+ "wrangler": "bin/wrangler.js",
+ "wrangler2": "bin/wrangler.js"
+ },
+ "engines": {
+ "node": ">=16.17.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ },
+ "peerDependencies": {
+ "@cloudflare/workers-types": "^4.20230914.0"
+ },
+ "peerDependenciesMeta": {
+ "@cloudflare/workers-types": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/android-arm": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz",
+ "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/android-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz",
+ "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/android-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz",
+ "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/darwin-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz",
+ "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/darwin-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz",
+ "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz",
+ "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/freebsd-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz",
+ "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/linux-arm": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz",
+ "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/linux-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz",
+ "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/linux-ia32": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz",
+ "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/linux-loong64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz",
+ "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/linux-mips64el": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz",
+ "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/linux-ppc64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz",
+ "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/linux-riscv64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz",
+ "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/linux-s390x": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz",
+ "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/linux-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz",
+ "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/netbsd-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz",
+ "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/openbsd-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz",
+ "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/sunos-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz",
+ "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/win32-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz",
+ "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/win32-ia32": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz",
+ "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/@esbuild/win32-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz",
+ "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/wrangler/node_modules/esbuild": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz",
+ "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/android-arm": "0.17.19",
+ "@esbuild/android-arm64": "0.17.19",
+ "@esbuild/android-x64": "0.17.19",
+ "@esbuild/darwin-arm64": "0.17.19",
+ "@esbuild/darwin-x64": "0.17.19",
+ "@esbuild/freebsd-arm64": "0.17.19",
+ "@esbuild/freebsd-x64": "0.17.19",
+ "@esbuild/linux-arm": "0.17.19",
+ "@esbuild/linux-arm64": "0.17.19",
+ "@esbuild/linux-ia32": "0.17.19",
+ "@esbuild/linux-loong64": "0.17.19",
+ "@esbuild/linux-mips64el": "0.17.19",
+ "@esbuild/linux-ppc64": "0.17.19",
+ "@esbuild/linux-riscv64": "0.17.19",
+ "@esbuild/linux-s390x": "0.17.19",
+ "@esbuild/linux-x64": "0.17.19",
+ "@esbuild/netbsd-x64": "0.17.19",
+ "@esbuild/openbsd-x64": "0.17.19",
+ "@esbuild/sunos-x64": "0.17.19",
+ "@esbuild/win32-arm64": "0.17.19",
+ "@esbuild/win32-ia32": "0.17.19",
+ "@esbuild/win32-x64": "0.17.19"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "node_modules/ws": {
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz",
+ "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/xxhash-wasm": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz",
+ "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==",
+ "dev": true
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/youch": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.3.tgz",
+ "integrity": "sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==",
+ "dev": true,
+ "dependencies": {
+ "cookie": "^0.5.0",
+ "mustache": "^4.2.0",
+ "stacktracey": "^2.1.8"
+ }
+ },
+ "node_modules/zod": {
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz",
+ "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ }
+ }
+}
diff --git a/examples/hono-tractor-store-2.0/package.json b/examples/hono-tractor-store-2.0/package.json
new file mode 100644
index 0000000..f39358d
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/package.json
@@ -0,0 +1,35 @@
+{
+ "name": "tractor-store-blueprint",
+ "version": "1.0.0",
+ "description": "## What is The Tractor Store?",
+ "main": "src/server.js",
+ "scripts": {
+ "dev": "npm run build && node --watch --es-module-specifier-resolution=node --no-warnings src/server.node.js",
+ "dev:local-images": "USE_LOCAL_IMAGES=true npm run dev",
+ "watch": "node esbuild.js --watch",
+ "build": "node esbuild.js",
+ "lint": "eslint .",
+ "format": "prettier --write .",
+ "test": "echo \"Error: no test specified\" && exit 0",
+ "start": "NODE_ENV=production node src/server.node.js",
+ "database": "node src/explore/database/import.js && node src/decide/database/import.js && node src/checkout/database/import.js",
+ "dev:cloudflare": "wrangler dev",
+ "deploy:cloudflare": "npm run build && wrangler deploy"
+ },
+ "type": "module",
+ "author": "neuland",
+ "license": "MIT",
+ "dependencies": {
+ "@hono/node-server": "^1.8.2",
+ "eslint-plugin-jsdoc": "^48.2.1",
+ "hono": "^4.1.0"
+ },
+ "devDependencies": {
+ "esbuild": "^0.20.1",
+ "eslint": "^8.56.0",
+ "eslint-config-prettier": "^9.1.0",
+ "eslint-plugin-prettier": "^5.1.3",
+ "prettier": "^3.2.5",
+ "wrangler": "^3.34.0"
+ }
+}
\ No newline at end of file
diff --git a/examples/hono-tractor-store-2.0/products.js b/examples/hono-tractor-store-2.0/products.js
new file mode 100644
index 0000000..1d2ce4d
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/products.js
@@ -0,0 +1,628 @@
+/**
+ * @typedef {object} Variant
+ * @property {string} name - The variant name.
+ * @property {string} image - The URL to the variant's image.
+ * @property {string} sku - The stock keeping unit.
+ * @property {string} color - The color code in hexadecimal.
+ * @property {number} price - The price of the variant.
+ */
+
+/**
+ * @typedef {object} Product
+ * @property {string} name - The product name.
+ * @property {string} id - The product ID.
+ * @property {string} category - The product category.
+ * @property {string[]} highlights - List of product highlights.
+ * @property {Variant[]} variants - Available variants of the product.
+ */
+
+/**
+ * @type {Product[]}
+ */
+export default [
+ {
+ name: "TerraFirma AutoCultivator T-300",
+ id: "AU-01",
+ category: "autonomous",
+ highlightsa: [
+ "Precision GPS mapping optimizes field coverage.",
+ "Hybrid engine ensures eco-friendly extended operation.",
+ "Fully autonomous with smart obstacle detection and terrain adaptation.",
+ ],
+ variants: [
+ {
+ name: "Silver",
+ image: "/cdn/img/product/[size]/AU-01-SI.webp",
+ sku: "AU-01-SI",
+ color: "#C0C0C0", // Silver
+ price: 1000,
+ },
+ ],
+ },
+ {
+ name: "SmartFarm Titan",
+ id: "AU-02",
+ category: "autonomous",
+ highlights: [
+ "Advanced autopilot technology for precise farming operations.",
+ "Eco-friendly solar-assisted power system for sustainable use.",
+ "Intelligent AI for real-time field analysis and automated adjustments.",
+ ],
+ variants: [
+ {
+ name: "Sunset Copper",
+ image: "/cdn/img/product/[size]/AU-02-OG.webp",
+ sku: "AU-02-OG",
+ color: "#dd5219", // Sunset Copper:
+ price: 4100,
+ },
+ {
+ name: "Cosmic Sapphire",
+ image: "/cdn/img/product/[size]/AU-02-BL.webp",
+ sku: "AU-02-BL",
+ color: "#2A52BE", // Cosmic Sapphire:
+ price: 4000,
+ },
+ {
+ name: "Verdant Shadow",
+ image: "/cdn/img/product/[size]/AU-02-GG.webp",
+ sku: "AU-02-GG",
+ color: "#005A04",
+ price: 4000,
+ },
+ ],
+ },
+ {
+ name: "FutureHarvest Navigator",
+ id: "AU-03",
+ category: "autonomous",
+ highlights: [
+ "Autonomous navigation with sub-inch accuracy",
+ "Solar-enhanced hybrid powertrain for extended operation",
+ "Real-time crop and soil health analytics",
+ ],
+ variants: [
+ {
+ name: "Turquoise Titan",
+ image: "/cdn/img/product/[size]/AU-03-TQ.webp",
+ sku: "AU-03-TQ",
+ color: "#169fb8", // Turquoise Titan:
+ price: 1600,
+ },
+ {
+ name: "Majestic Violet",
+ image: "/cdn/img/product/[size]/AU-03-PL.webp",
+ sku: "AU-03-PL",
+ color: "#9B5FC0", // Majestic Violet:
+ price: 1700,
+ },
+ {
+ name: "Scarlet Dynamo",
+ image: "/cdn/img/product/[size]/AU-03-RD.webp",
+ sku: "AU-03-RD",
+ color: "#FF2400", // Scarlet Dynamo:
+ price: 1900,
+ },
+ {
+ name: "Sunbeam Yellow",
+ image: "/cdn/img/product/[size]/AU-03-YE.webp",
+ sku: "AU-03-YE",
+ color: "#faad00", // Sunbeam Yellow:
+ price: 1800,
+ },
+ ],
+ },
+ {
+ name: "Sapphire Sunworker 460R",
+ id: "AU-04",
+ category: "autonomous",
+ highlights: [
+ "Next-generation autonomous guidance system for seamless operation",
+ "High-capacity energy storage for all-day work without recharge",
+ "Advanced analytics suite for precision soil and plant health management",
+ ],
+ variants: [
+ {
+ name: "Ruby Red",
+ image: "/cdn/img/product/[size]/AU-04-RD.webp",
+ sku: "AU-04-RD",
+ color: "#9B111E", // Ruby Red:
+ price: 8700,
+ },
+ {
+ name: "Midnight Onyx",
+ image: "/cdn/img/product/[size]/AU-04-BK.webp",
+ sku: "AU-04-BK",
+ color: "#353839", // Midnight Onyx:
+ price: 8500,
+ },
+ ],
+ },
+ {
+ name: "EcoGrow Crop Commander",
+ id: "AU-05",
+ category: "autonomous",
+ highlights: [
+ "Ultra-precise field navigation technology",
+ "Dual-mode power system for maximum uptime",
+ "On-the-go field data analysis for smart farming decisions",
+ ],
+ variants: [
+ {
+ name: "Zestful Horizon",
+ image: "/cdn/img/product/[size]/AU-05-ZH.webp",
+ sku: "AU-05-ZH",
+ color: "#FFA07A", // Zestful Horizon:
+ price: 3400,
+ },
+ ],
+ },
+ {
+ name: "FarmFleet Sovereign",
+ id: "AU-06",
+ category: "autonomous",
+ highlights: [
+ "Robust all-terrain adaptability for diverse farm landscapes",
+ "High-efficiency energy matrix for longer field endurance",
+ "Integrated crop management system with advanced diagnostics",
+ ],
+ variants: [
+ {
+ name: "Canary Zenith",
+ image: "/cdn/img/product/[size]/AU-06-CZ.webp",
+ sku: "AU-06-CZ",
+ color: "#FFD700", // Canary Zenith:
+ price: 2200,
+ },
+ {
+ name: "Minted Jade",
+ color: "#628882", // Minted Jade:
+ image: "/cdn/img/product/[size]/AU-06-MT.webp",
+ sku: "AU-06-MT",
+ price: 2100,
+ },
+ ],
+ },
+ {
+ name: "Verde Voyager",
+ id: "AU-07",
+ category: "autonomous",
+ highlights: [
+ "Adaptive drive system intelligently navigates through diverse field conditions",
+ "Clean energy operation with advanced solar battery technology",
+ "High-resolution field scanners for precise agronomy insights",
+ ],
+ variants: [
+ {
+ name: "Glacial Mint",
+ image: "/cdn/img/product/[size]/AU-07-MT.webp",
+ sku: "AU-07-MT",
+ color: "#AFDBD2", // Glacial Mint:
+ price: 4000,
+ },
+ {
+ name: "Sunbeam Yellow",
+ image: "/cdn/img/product/[size]/AU-07-YE.webp",
+ sku: "AU-07-YE",
+ color: "#FFDA03", // Sunbeam Yellow:
+ price: 5000,
+ },
+ ],
+ },
+ {
+ name: "Field Pioneer",
+ id: "AU-08",
+ category: "autonomous",
+ highlights: [
+ "Automated field traversal with intelligent pathfinding algorithms",
+ "Eco-friendly electric motors paired with high-capacity batteries",
+ "Real-time environmental monitoring for optimal crop growth",
+ ],
+ variants: [
+ {
+ name: "Polar White",
+ image: "/cdn/img/product/[size]/AU-08-WH.webp",
+ sku: "AU-08-WH",
+ color: "#E8E8E8", // Polar White:
+ price: 4500,
+ },
+ ],
+ },
+ {
+ name: "Heritage Workhorse",
+ id: "CL-01",
+ category: "classic",
+ highlights: [
+ "Proven reliability with a touch of modern reliability enhancements",
+ "Robust construction equipped to withstand decades of labor",
+ "User-friendly operation with traditional manual controls",
+ ],
+ variants: [
+ {
+ name: "Verdant Field",
+ image: "/cdn/img/product/[size]/CL-01-GR.webp",
+ sku: "CL-01-GR",
+ color: "#6B8E23", // Verdant Field:
+ price: 5700,
+ },
+ {
+ name: "Stormy Sky",
+ image: "/cdn/img/product/[size]/CL-01-GY.webp",
+ sku: "CL-01-GY",
+ color: "#708090", // Stormy Sky:
+ price: 6200,
+ },
+ ],
+ },
+ {
+ name: "Falcon Crest Farm",
+ id: "CL-02",
+ category: "classic",
+ highlights: [
+ "Rugged simplicity meets classic design",
+ "Built-to-last machinery for reliable fieldwork",
+ "Ease of control with straightforward mechanical systems",
+ ],
+ variants: [
+ {
+ name: "Cerulean Classic",
+ image: "/cdn/img/product/[size]/CL-02-BL.webp",
+ sku: "CL-02-BL",
+ color: "#007BA7", // Cerulean Classic:
+ price: 2600,
+ },
+ ],
+ },
+ {
+ name: "Falcon Crest Work",
+ id: "CL-03",
+ category: "classic",
+ highlights: [
+ "Vintage engineering with a legacy of durability",
+ "Powerful yet simple mechanics for easy operation and repair",
+ "Classic aesthetics with a robust body, built to last",
+ ],
+ variants: [
+ {
+ name: "Meadow Green",
+ image: "/cdn/img/product/[size]/CL-03-GR.webp",
+ sku: "CL-03-GR",
+ color: "#7CFC00", // Meadow Green:
+ price: 2300,
+ },
+ {
+ name: "Rustic Rose",
+ image: "/cdn/img/product/[size]/CL-03-PI.webp",
+ sku: "CL-03-PI",
+ color: "#b50018", // Rustic Rose:
+ price: 2300,
+ },
+ {
+ name: "Harvest Gold",
+ image: "/cdn/img/product/[size]/CL-03-YE.webp",
+ sku: "CL-03-YE",
+ color: "#DA9100", // Harvest Gold:
+ price: 2300,
+ },
+ ],
+ },
+ {
+ name: "Broadfield Majestic",
+ id: "CL-04",
+ category: "classic",
+ highlights: [
+ "Built with the robust heart of early industrial workhorses",
+ "Simplified mechanics for unparalleled ease of use and maintenance",
+ "A testament to early agricultural machinery with a dependable engine",
+ ],
+ variants: [
+ {
+ name: "Oceanic Blue",
+ image: "/cdn/img/product/[size]/CL-04-BL.webp",
+ sku: "CL-04-BL",
+ color: "#0040a6", // Oceanic Blue:
+ price: 2200,
+ },
+ {
+ name: "Rustic Crimson",
+ image: "/cdn/img/product/[size]/CL-04-RD.webp",
+ sku: "CL-04-RD",
+ color: "#7B3F00", // Rustic Crimson:
+ price: 2200,
+ },
+ {
+ name: "Aqua Green",
+ image: "/cdn/img/product/[size]/CL-04-TQ.webp",
+ sku: "CL-04-TQ",
+ color: "#00b298", // Aqua Green:
+ price: 2200,
+ },
+ ],
+ },
+ {
+ name: "Countryside Commander",
+ id: "CL-05",
+ category: "classic",
+ highlights: [
+ "Reliable performance with time-tested engineering",
+ "Rugged design for efficient operation across all types of terrain",
+ "Classic operator comfort with modern ergonomic enhancements",
+ ],
+ variants: [
+ {
+ name: "Pacific Teal",
+ image: "/cdn/img/product/[size]/CL-05-PT.webp",
+ sku: "CL-05-PT",
+ color: "#479da8", // Pacific Teal:
+ price: 2700,
+ },
+ {
+ name: "Barn Red",
+ image: "/cdn/img/product/[size]/CL-05-RD.webp",
+ sku: "CL-05-RD",
+ color: "#7C0A02", // Barn Red:
+ price: 2700,
+ },
+ ],
+ },
+ {
+ name: "Danamark Steadfast",
+ id: "CL-06",
+ category: "classic",
+ highlights: [
+ "Engineered for the meticulous demands of Danish agriculture",
+ "Sturdy chassis and reliable mechanics for longevity",
+ "Utilitarian design with practical functionality and comfort",
+ ],
+ variants: [
+ {
+ name: "Emerald Forest",
+ image: "/cdn/img/product/[size]/CL-06-MT.webp",
+ sku: "CL-06-MT",
+ color: "#46f5bb", // Emerald Forest:
+ price: 2800,
+ },
+ {
+ name: "Golden Wheat",
+ image: "/cdn/img/product/[size]/CL-06-YE.webp",
+ sku: "CL-06-YE",
+ color: "#faaf3f", // Golden Wheat:
+ price: 2800,
+ },
+ ],
+ },
+ {
+ name: "Greenland Rover",
+ id: "CL-07",
+ category: "classic",
+ highlights: [
+ "Engineered to tackle the diverse European terrain with ease",
+ "Sturdy and reliable mechanics known for their longevity",
+ "Ergonomically designed for comfort during long working hours",
+ ],
+ variants: [
+ {
+ name: "Forest Fern",
+ image: "/cdn/img/product/[size]/CL-07-GR.webp",
+ sku: "CL-07-GR",
+ color: "#2ea250", // Forest Fern:
+ price: 2900,
+ },
+ {
+ name: "Autumn Amber",
+ image: "/cdn/img/product/[size]/CL-07-YE.webp",
+ sku: "CL-07-YE",
+ color: "#FFBF00", // Autumn Amber:
+ price: 2900,
+ },
+ ],
+ },
+ {
+ name: "Holland Hamster",
+ id: "CL-08",
+ category: "classic",
+ highlights: [
+ "Dutch craftsmanship for precision and quality",
+ "Optimized for tulip fields and versatile European landscapes",
+ "Ergonomic design with a focus on operator comfort and efficiency",
+ ],
+ variants: [
+ {
+ name: "Polder Green",
+ image: "/cdn/img/product/[size]/CL-08-GR.webp",
+ sku: "CL-08-GR",
+ color: "#C2B280", // Polder Green:
+ price: 7750,
+ },
+ {
+ name: "Tulip Magenta",
+ image: "/cdn/img/product/[size]/CL-08-PI.webp",
+ sku: "CL-08-PI",
+ color: "#D65282", // Tulip Magenta:
+ price: 7900,
+ },
+ ],
+ },
+ {
+ name: "TerraFirma Veneto",
+ id: "CL-09",
+ category: "classic",
+ highlights: [
+ "Elegant Italian design with sleek lines and a vibrant aesthetic",
+ "Precision mechanics for vineyard and orchard maneuverability",
+ "Comfort-focused design with a flair for the dramatic",
+ ],
+ variants: [
+ {
+ name: "Adriatic Blue",
+ image: "/cdn/img/product/[size]/CL-09-BL.webp",
+ sku: "CL-09-BL",
+ color: "#2f6ea3", // Adriatic Blue:
+ price: 2950,
+ },
+ {
+ name: "Tuscan Green",
+ image: "/cdn/img/product/[size]/CL-09-GR.webp",
+ sku: "CL-09-GR",
+ color: "#518b2b", // Tuscan Green:
+ price: 2950,
+ },
+ ],
+ },
+ {
+ name: "Global Gallant",
+ id: "CL-10",
+ category: "classic",
+ highlights: [
+ "Retro design with a nod to the golden era of farming",
+ "Engine robustness that stands the test of time",
+ "Functional simplicity for ease of operation in any region",
+ ],
+ variants: [
+ {
+ name: "Sahara Dawn",
+ image: "/cdn/img/product/[size]/CL-10-SD.webp",
+ sku: "CL-10-SD",
+ color: "#b8a875", // Sahara Dawn:
+ price: 2600,
+ },
+ {
+ name: "Violet Vintage",
+ image: "/cdn/img/product/[size]/CL-10-VI.webp",
+ sku: "CL-10-VI",
+ color: "#8A2BE2", // Violet Vintage:
+ price: 2600,
+ },
+ ],
+ },
+ {
+ name: "Scandinavia Sower",
+ id: "CL-11",
+ category: "classic",
+ highlights: [
+ "Authentic Swedish engineering for optimal cold-climate performance",
+ "Sturdy build and mechanics for lifelong reliability",
+ "Iconic design reflecting the simplicity and efficiency of Scandinavian style",
+ ],
+ variants: [
+ {
+ name: "Baltic Blue",
+ image: "/cdn/img/product/[size]/CL-11-SK.webp",
+ sku: "CL-11-SK",
+ color: "#95c1f4", // Baltic Blue:
+ price: 3100,
+ },
+ {
+ name: "Nordic Gold",
+ image: "/cdn/img/product/[size]/CL-11-YE.webp",
+ sku: "CL-11-YE",
+ color: "#FFD700", // Nordic Gold:
+ price: 3100,
+ },
+ ],
+ },
+ {
+ name: "Celerity Cruiser",
+ id: "CL-12",
+ category: "classic",
+ highlights: [
+ "A speedster in the classic tractor segment, unparalleled in quick task completion",
+ "Sleek design with aerodynamic contours for reduced drag",
+ "Enhanced gearbox for smooth acceleration and nimble handling",
+ ],
+ variants: [
+ {
+ name: "Velocity Blue",
+ image: "/cdn/img/product/[size]/CL-12-BL.webp",
+ sku: "CL-12-BL",
+ color: "#1E90FF", // Velocity Blue:
+ price: 3200,
+ },
+ {
+ name: "Rally Red",
+ image: "/cdn/img/product/[size]/CL-12-RD.webp",
+ sku: "CL-12-RD",
+ color: "#ED2939", // Rally Red:
+ price: 3200,
+ },
+ ],
+ },
+ {
+ name: "Rapid Racer",
+ id: "CL-13",
+ category: "classic",
+ highlights: [
+ "Streamlined design for faster field operations",
+ "Optimized gear ratios for efficient power transmission",
+ "Advanced air flow system for superior engine cooling",
+ ],
+ variants: [
+ {
+ name: "Speedway Blue",
+ image: "/cdn/img/product/[size]/CL-13-BL.webp",
+ sku: "CL-13-BL",
+ color: "#2679a6", // Speedway Blue:
+ price: 7500,
+ },
+ {
+ name: "Raceway Red",
+ image: "/cdn/img/product/[size]/CL-13-RD.webp",
+ sku: "CL-13-RD",
+ color: "#CF1020", // Raceway Red:
+ price: 7500,
+ },
+ ],
+ },
+ {
+ name: "Caribbean Cruiser",
+ id: "CL-14",
+ category: "classic",
+ highlights: [
+ "Robust construction for enduring performance",
+ "Time-tested design with a proven track record",
+ "Easy-to-service mechanics for long-term reliability",
+ ],
+ variants: [
+ {
+ name: "Emerald Grove",
+ image: "/cdn/img/product/[size]/CL-14-GR.webp",
+ sku: "CL-14-GR",
+ color: "#57ae13", // Emerald Grove:
+ price: 2300,
+ },
+ {
+ name: "Ruby Fields",
+ image: "/cdn/img/product/[size]/CL-14-RD.webp",
+ sku: "CL-14-RD",
+ color: "#cd2b1e", // Ruby Fields:
+ price: 2300,
+ },
+ ],
+ },
+ {
+ name: "Fieldmaster Classic",
+ id: "CL-15",
+ category: "classic",
+ highlights: [
+ "Timeless design with a focus on comfort and control",
+ "Efficient fuel consumption with a powerful engine",
+ "Versatile functionality for all types of agricultural work",
+ ],
+ variants: [
+ {
+ name: "Vintage Pink",
+ image: "/cdn/img/product/[size]/CL-15-PI.webp",
+ sku: "CL-15-PI",
+ color: "#e1949e", // Vintage Pink:
+ price: 6200,
+ },
+ {
+ name: "Sahara Dust",
+ image: "/cdn/img/product/[size]/CL-15-SD.webp",
+ sku: "CL-15-SD",
+ color: "#dec78c", // Sahara Dust:
+ price: 6200,
+ },
+ ],
+ },
+];
diff --git a/examples/hono-tractor-store-2.0/public/cdn/font/raleway-regular.woff2 b/examples/hono-tractor-store-2.0/public/cdn/font/raleway-regular.woff2
new file mode 100644
index 0000000..a763188
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/font/raleway-regular.woff2 differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/logo.svg b/examples/hono-tractor-store-2.0/public/cdn/img/logo.svg
new file mode 100644
index 0000000..cad2adc
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/public/cdn/img/logo.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/meta/android-chrome-192x192.png b/examples/hono-tractor-store-2.0/public/cdn/img/meta/android-chrome-192x192.png
new file mode 100644
index 0000000..a0ebdb7
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/meta/android-chrome-192x192.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/meta/android-chrome-512x512.png b/examples/hono-tractor-store-2.0/public/cdn/img/meta/android-chrome-512x512.png
new file mode 100644
index 0000000..8cf57e4
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/meta/android-chrome-512x512.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/meta/apple-touch-icon.png b/examples/hono-tractor-store-2.0/public/cdn/img/meta/apple-touch-icon.png
new file mode 100644
index 0000000..d6f9d4a
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/meta/apple-touch-icon.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/meta/browserconfig.xml b/examples/hono-tractor-store-2.0/public/cdn/img/meta/browserconfig.xml
new file mode 100644
index 0000000..b8daf29
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/public/cdn/img/meta/browserconfig.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+ #ffffff
+
+
+
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/meta/favicon-16x16.png b/examples/hono-tractor-store-2.0/public/cdn/img/meta/favicon-16x16.png
new file mode 100644
index 0000000..ca1090d
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/meta/favicon-16x16.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/meta/favicon-32x32.png b/examples/hono-tractor-store-2.0/public/cdn/img/meta/favicon-32x32.png
new file mode 100644
index 0000000..b427cb6
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/meta/favicon-32x32.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/meta/favicon-source.svg b/examples/hono-tractor-store-2.0/public/cdn/img/meta/favicon-source.svg
new file mode 100644
index 0000000..ff12be6
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/public/cdn/img/meta/favicon-source.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/meta/favicon.ico b/examples/hono-tractor-store-2.0/public/cdn/img/meta/favicon.ico
new file mode 100644
index 0000000..b401540
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/meta/favicon.ico differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/meta/mstile-144x144.png b/examples/hono-tractor-store-2.0/public/cdn/img/meta/mstile-144x144.png
new file mode 100644
index 0000000..66a4fc7
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/meta/mstile-144x144.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/meta/mstile-150x150.png b/examples/hono-tractor-store-2.0/public/cdn/img/meta/mstile-150x150.png
new file mode 100644
index 0000000..52b4faf
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/meta/mstile-150x150.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/meta/mstile-310x150.png b/examples/hono-tractor-store-2.0/public/cdn/img/meta/mstile-310x150.png
new file mode 100644
index 0000000..0ddabaf
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/meta/mstile-310x150.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/meta/mstile-310x310.png b/examples/hono-tractor-store-2.0/public/cdn/img/meta/mstile-310x310.png
new file mode 100644
index 0000000..b596276
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/meta/mstile-310x310.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/meta/mstile-70x70.png b/examples/hono-tractor-store-2.0/public/cdn/img/meta/mstile-70x70.png
new file mode 100644
index 0000000..d56b7d1
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/meta/mstile-70x70.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/meta/safari-pinned-tab.svg b/examples/hono-tractor-store-2.0/public/cdn/img/meta/safari-pinned-tab.svg
new file mode 100644
index 0000000..ae59e3a
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/public/cdn/img/meta/safari-pinned-tab.svg
@@ -0,0 +1,36 @@
+
+
+
+
+Created by potrace 1.14, written by Peter Selinger 2001-2017
+
+
+
+
+
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/meta/site.webmanifest b/examples/hono-tractor-store-2.0/public/cdn/img/meta/site.webmanifest
new file mode 100644
index 0000000..c7edfc6
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/public/cdn/img/meta/site.webmanifest
@@ -0,0 +1,19 @@
+{
+ "name": "",
+ "short_name": "",
+ "icons": [
+ {
+ "src": "/cdn/img/meta/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "/cdn/img/meta/android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ],
+ "theme_color": "#ffffff",
+ "background_color": "#ffffff",
+ "display": "standalone"
+}
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/neulandlogo.svg b/examples/hono-tractor-store-2.0/public/cdn/img/neulandlogo.svg
new file mode 100644
index 0000000..2a9509b
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/public/cdn/img/neulandlogo.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-01-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-01-GR.webp
new file mode 100644
index 0000000..91be59a
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-01-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-01-SI.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-01-SI.webp
new file mode 100644
index 0000000..6dfdff5
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-01-SI.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-02-BL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-02-BL.webp
new file mode 100644
index 0000000..9f6a034
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-02-BL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-02-GG.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-02-GG.webp
new file mode 100644
index 0000000..52f9636
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-02-GG.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-02-OG.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-02-OG.webp
new file mode 100644
index 0000000..ea82951
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-02-OG.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-03-PL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-03-PL.webp
new file mode 100644
index 0000000..7d5c14d
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-03-PL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-03-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-03-RD.webp
new file mode 100644
index 0000000..bdd6a1c
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-03-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-03-TQ.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-03-TQ.webp
new file mode 100644
index 0000000..92aa199
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-03-TQ.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-03-YE.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-03-YE.webp
new file mode 100644
index 0000000..c2ea8bb
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-03-YE.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-04-BK.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-04-BK.webp
new file mode 100644
index 0000000..9af16d5
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-04-BK.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-04-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-04-RD.webp
new file mode 100644
index 0000000..618181d
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-04-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-05-ZH.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-05-ZH.webp
new file mode 100644
index 0000000..7fb04cc
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-05-ZH.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-06-CZ.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-06-CZ.webp
new file mode 100644
index 0000000..38d0448
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-06-CZ.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-06-MT.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-06-MT.webp
new file mode 100644
index 0000000..39c9ead
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-06-MT.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-07-MT.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-07-MT.webp
new file mode 100644
index 0000000..054a427
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-07-MT.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-07-YE.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-07-YE.webp
new file mode 100644
index 0000000..1028c20
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-07-YE.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-08-WH.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-08-WH.webp
new file mode 100644
index 0000000..b14abc4
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/AU-08-WH.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-01-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-01-GR.webp
new file mode 100644
index 0000000..5801f03
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-01-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-01-GY.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-01-GY.webp
new file mode 100644
index 0000000..776e1f3
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-01-GY.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-02-BL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-02-BL.webp
new file mode 100644
index 0000000..699f1b0
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-02-BL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-03-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-03-GR.webp
new file mode 100644
index 0000000..70e8b43
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-03-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-03-PI.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-03-PI.webp
new file mode 100644
index 0000000..971c793
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-03-PI.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-03-YE.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-03-YE.webp
new file mode 100644
index 0000000..cde5766
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-03-YE.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-04-BL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-04-BL.webp
new file mode 100644
index 0000000..609796d
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-04-BL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-04-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-04-RD.webp
new file mode 100644
index 0000000..c8bfb0a
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-04-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-04-TQ.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-04-TQ.webp
new file mode 100644
index 0000000..dfb67a4
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-04-TQ.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-05-PT.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-05-PT.webp
new file mode 100644
index 0000000..dbac479
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-05-PT.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-05-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-05-RD.webp
new file mode 100644
index 0000000..4db2350
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-05-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-06-MT.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-06-MT.webp
new file mode 100644
index 0000000..e00a8b2
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-06-MT.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-06-YE.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-06-YE.webp
new file mode 100644
index 0000000..251a9fb
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-06-YE.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-07-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-07-GR.webp
new file mode 100644
index 0000000..9954f11
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-07-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-07-YE.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-07-YE.webp
new file mode 100644
index 0000000..52981bf
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-07-YE.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-08-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-08-GR.webp
new file mode 100644
index 0000000..09f8a91
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-08-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-08-PI.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-08-PI.webp
new file mode 100644
index 0000000..1e08585
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-08-PI.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-09-BL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-09-BL.webp
new file mode 100644
index 0000000..82d063a
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-09-BL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-09-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-09-GR.webp
new file mode 100644
index 0000000..47cabac
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-09-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-10-SD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-10-SD.webp
new file mode 100644
index 0000000..db3349a
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-10-SD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-10-VI.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-10-VI.webp
new file mode 100644
index 0000000..e0d530f
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-10-VI.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-11-SK.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-11-SK.webp
new file mode 100644
index 0000000..a89e2f6
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-11-SK.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-11-YE.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-11-YE.webp
new file mode 100644
index 0000000..78594c3
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-11-YE.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-12-BL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-12-BL.webp
new file mode 100644
index 0000000..4766f7c
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-12-BL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-12-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-12-RD.webp
new file mode 100644
index 0000000..3cbf72a
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-12-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-13-BL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-13-BL.webp
new file mode 100644
index 0000000..1838064
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-13-BL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-13-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-13-RD.webp
new file mode 100644
index 0000000..1ad055a
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-13-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-14-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-14-GR.webp
new file mode 100644
index 0000000..d87d811
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-14-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-14-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-14-RD.webp
new file mode 100644
index 0000000..aea6fac
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-14-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-15-PI.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-15-PI.webp
new file mode 100644
index 0000000..a2db6ae
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-15-PI.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-15-SD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-15-SD.webp
new file mode 100644
index 0000000..4edc7be
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/200/CL-15-SD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-01-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-01-GR.webp
new file mode 100644
index 0000000..b8b61cf
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-01-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-01-SI.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-01-SI.webp
new file mode 100644
index 0000000..5c6dcde
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-01-SI.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-02-BL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-02-BL.webp
new file mode 100644
index 0000000..51f732b
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-02-BL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-02-GG.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-02-GG.webp
new file mode 100644
index 0000000..d81ba0c
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-02-GG.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-02-OG.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-02-OG.webp
new file mode 100644
index 0000000..78dcfd6
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-02-OG.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-03-PL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-03-PL.webp
new file mode 100644
index 0000000..2d42eb1
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-03-PL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-03-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-03-RD.webp
new file mode 100644
index 0000000..689db93
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-03-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-03-TQ.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-03-TQ.webp
new file mode 100644
index 0000000..04cd557
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-03-TQ.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-03-YE.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-03-YE.webp
new file mode 100644
index 0000000..55ff939
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-03-YE.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-04-BK.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-04-BK.webp
new file mode 100644
index 0000000..9a969c4
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-04-BK.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-04-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-04-RD.webp
new file mode 100644
index 0000000..bdcdcbe
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-04-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-05-ZH.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-05-ZH.webp
new file mode 100644
index 0000000..f7e9928
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-05-ZH.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-06-CZ.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-06-CZ.webp
new file mode 100644
index 0000000..83f0496
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-06-CZ.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-06-MT.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-06-MT.webp
new file mode 100644
index 0000000..5d1b95b
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-06-MT.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-07-MT.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-07-MT.webp
new file mode 100644
index 0000000..8ac3283
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-07-MT.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-07-YE.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-07-YE.webp
new file mode 100644
index 0000000..19e02a3
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-07-YE.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-08-WH.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-08-WH.webp
new file mode 100644
index 0000000..accfa82
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/AU-08-WH.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-01-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-01-GR.webp
new file mode 100644
index 0000000..b7c45c7
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-01-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-01-GY.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-01-GY.webp
new file mode 100644
index 0000000..83360d4
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-01-GY.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-02-BL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-02-BL.webp
new file mode 100644
index 0000000..d02c199
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-02-BL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-03-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-03-GR.webp
new file mode 100644
index 0000000..e4fa712
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-03-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-03-PI.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-03-PI.webp
new file mode 100644
index 0000000..5c9b307
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-03-PI.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-03-YE.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-03-YE.webp
new file mode 100644
index 0000000..178a0eb
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-03-YE.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-04-BL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-04-BL.webp
new file mode 100644
index 0000000..476b30d
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-04-BL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-04-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-04-RD.webp
new file mode 100644
index 0000000..ec5cbfc
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-04-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-04-TQ.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-04-TQ.webp
new file mode 100644
index 0000000..a05a8ea
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-04-TQ.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-05-PT.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-05-PT.webp
new file mode 100644
index 0000000..8a1e2e4
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-05-PT.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-05-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-05-RD.webp
new file mode 100644
index 0000000..d5661c0
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-05-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-06-MT.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-06-MT.webp
new file mode 100644
index 0000000..cd02b1f
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-06-MT.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-06-YE.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-06-YE.webp
new file mode 100644
index 0000000..73d3030
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-06-YE.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-07-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-07-GR.webp
new file mode 100644
index 0000000..65f597f
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-07-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-07-YE.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-07-YE.webp
new file mode 100644
index 0000000..001b805
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-07-YE.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-08-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-08-GR.webp
new file mode 100644
index 0000000..486f3b9
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-08-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-08-PI.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-08-PI.webp
new file mode 100644
index 0000000..8932b8f
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-08-PI.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-09-BL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-09-BL.webp
new file mode 100644
index 0000000..748818a
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-09-BL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-09-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-09-GR.webp
new file mode 100644
index 0000000..edaba1a
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-09-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-10-SD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-10-SD.webp
new file mode 100644
index 0000000..74cfa86
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-10-SD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-10-VI.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-10-VI.webp
new file mode 100644
index 0000000..3dd982a
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-10-VI.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-11-SK.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-11-SK.webp
new file mode 100644
index 0000000..90dddea
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-11-SK.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-11-YE.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-11-YE.webp
new file mode 100644
index 0000000..5ff1f0a
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-11-YE.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-12-BL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-12-BL.webp
new file mode 100644
index 0000000..6c4a196
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-12-BL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-12-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-12-RD.webp
new file mode 100644
index 0000000..983be18
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-12-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-13-BL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-13-BL.webp
new file mode 100644
index 0000000..bfbe572
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-13-BL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-13-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-13-RD.webp
new file mode 100644
index 0000000..015fcfe
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-13-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-14-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-14-GR.webp
new file mode 100644
index 0000000..78fcf3a
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-14-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-14-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-14-RD.webp
new file mode 100644
index 0000000..b68f5c7
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-14-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-15-PI.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-15-PI.webp
new file mode 100644
index 0000000..9921048
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-15-PI.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-15-SD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-15-SD.webp
new file mode 100644
index 0000000..e98e8a1
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/400/CL-15-SD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-01-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-01-GR.webp
new file mode 100644
index 0000000..791898b
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-01-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-01-SI.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-01-SI.webp
new file mode 100644
index 0000000..e058ea1
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-01-SI.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-02-BL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-02-BL.webp
new file mode 100644
index 0000000..6036dcc
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-02-BL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-02-GG.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-02-GG.webp
new file mode 100644
index 0000000..d0817ee
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-02-GG.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-02-OG.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-02-OG.webp
new file mode 100644
index 0000000..098fe58
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-02-OG.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-03-PL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-03-PL.webp
new file mode 100644
index 0000000..fe403b7
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-03-PL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-03-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-03-RD.webp
new file mode 100644
index 0000000..e9f26b9
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-03-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-03-TQ.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-03-TQ.webp
new file mode 100644
index 0000000..5c98ad1
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-03-TQ.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-03-YE.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-03-YE.webp
new file mode 100644
index 0000000..ba02ae0
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-03-YE.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-04-BK.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-04-BK.webp
new file mode 100644
index 0000000..3cd129f
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-04-BK.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-04-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-04-RD.webp
new file mode 100644
index 0000000..959d261
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-04-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-05-ZH.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-05-ZH.webp
new file mode 100644
index 0000000..0da7558
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-05-ZH.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-06-CZ.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-06-CZ.webp
new file mode 100644
index 0000000..e3d853f
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-06-CZ.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-06-MT.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-06-MT.webp
new file mode 100644
index 0000000..6727edb
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-06-MT.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-07-MT.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-07-MT.webp
new file mode 100644
index 0000000..0fbca6a
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-07-MT.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-07-YE.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-07-YE.webp
new file mode 100644
index 0000000..1d760e6
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-07-YE.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-08-WH.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-08-WH.webp
new file mode 100644
index 0000000..5b6505c
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/AU-08-WH.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-01-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-01-GR.webp
new file mode 100644
index 0000000..40b153d
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-01-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-01-GY.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-01-GY.webp
new file mode 100644
index 0000000..3b7ffac
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-01-GY.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-02-BL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-02-BL.webp
new file mode 100644
index 0000000..de9fbe3
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-02-BL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-03-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-03-GR.webp
new file mode 100644
index 0000000..5c15682
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-03-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-03-PI.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-03-PI.webp
new file mode 100644
index 0000000..ee5c9af
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-03-PI.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-03-YE.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-03-YE.webp
new file mode 100644
index 0000000..710c0da
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-03-YE.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-04-BL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-04-BL.webp
new file mode 100644
index 0000000..14c1e22
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-04-BL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-04-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-04-RD.webp
new file mode 100644
index 0000000..e28584f
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-04-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-04-TQ.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-04-TQ.webp
new file mode 100644
index 0000000..14a7937
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-04-TQ.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-05-PT.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-05-PT.webp
new file mode 100644
index 0000000..15b6f20
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-05-PT.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-05-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-05-RD.webp
new file mode 100644
index 0000000..9a825d8
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-05-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-06-MT.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-06-MT.webp
new file mode 100644
index 0000000..57a2cad
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-06-MT.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-06-YE.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-06-YE.webp
new file mode 100644
index 0000000..068620c
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-06-YE.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-07-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-07-GR.webp
new file mode 100644
index 0000000..1b229f6
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-07-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-07-YE.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-07-YE.webp
new file mode 100644
index 0000000..5f0a803
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-07-YE.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-08-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-08-GR.webp
new file mode 100644
index 0000000..8bb0947
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-08-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-08-PI.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-08-PI.webp
new file mode 100644
index 0000000..2d72e73
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-08-PI.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-09-BL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-09-BL.webp
new file mode 100644
index 0000000..9b4d22b
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-09-BL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-09-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-09-GR.webp
new file mode 100644
index 0000000..22617f0
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-09-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-10-SD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-10-SD.webp
new file mode 100644
index 0000000..6393dec
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-10-SD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-10-VI.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-10-VI.webp
new file mode 100644
index 0000000..cd83e6a
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-10-VI.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-11-SK.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-11-SK.webp
new file mode 100644
index 0000000..8480d9c
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-11-SK.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-11-YE.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-11-YE.webp
new file mode 100644
index 0000000..98dc893
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-11-YE.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-12-BL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-12-BL.webp
new file mode 100644
index 0000000..0b12d0d
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-12-BL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-12-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-12-RD.webp
new file mode 100644
index 0000000..b97587d
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-12-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-13-BL.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-13-BL.webp
new file mode 100644
index 0000000..728e3ad
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-13-BL.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-13-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-13-RD.webp
new file mode 100644
index 0000000..0e7b09e
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-13-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-14-GR.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-14-GR.webp
new file mode 100644
index 0000000..aecdeab
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-14-GR.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-14-RD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-14-RD.webp
new file mode 100644
index 0000000..135cebd
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-14-RD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-15-PI.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-15-PI.webp
new file mode 100644
index 0000000..f8823dc
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-15-PI.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-15-SD.webp b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-15-SD.webp
new file mode 100644
index 0000000..7b65c04
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/800/CL-15-SD.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/convert.sh b/examples/hono-tractor-store-2.0/public/cdn/img/product/convert.sh
new file mode 100755
index 0000000..c5afdbd
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/public/cdn/img/product/convert.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+# Directory containing the original PNG images
+input_directory="./full"
+# Array of target widths
+declare -a sizes=(200 400 800)
+
+# Iterate through each file in the input directory
+for file in "$input_directory"/*.png; do
+ # Extract filename without extension
+ filename=$(basename -- "$file")
+ filename="${filename%.*}"
+
+ # Iterate through each size
+ for size in "${sizes[@]}"; do
+ # Create output directory if it doesn't exist
+ output_directory="./$size"
+ mkdir -p "$output_directory"
+
+ # Define output filename
+ output_file="$output_directory/${filename}.webp"
+
+ # Convert and resize the image
+ convert "$file" -resize "${size}x${size}" - | cwebp -m 6 -q 80 -o "$output_file" -- -
+ done
+done
+
+echo "Conversion completed."
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-01-GR.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-01-GR.png
new file mode 100644
index 0000000..520cfe8
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-01-GR.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-01-SI.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-01-SI.png
new file mode 100644
index 0000000..cec3aaf
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-01-SI.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-02-BL.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-02-BL.png
new file mode 100644
index 0000000..3a5b005
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-02-BL.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-02-GG.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-02-GG.png
new file mode 100644
index 0000000..c0d829e
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-02-GG.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-02-OG.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-02-OG.png
new file mode 100644
index 0000000..6607adf
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-02-OG.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-03-PL.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-03-PL.png
new file mode 100644
index 0000000..6f2a934
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-03-PL.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-03-RD.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-03-RD.png
new file mode 100644
index 0000000..a63fa47
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-03-RD.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-03-TQ.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-03-TQ.png
new file mode 100644
index 0000000..30b6f7a
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-03-TQ.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-03-YE.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-03-YE.png
new file mode 100644
index 0000000..a75a0f4
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-03-YE.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-04-BK.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-04-BK.png
new file mode 100644
index 0000000..c3912bd
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-04-BK.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-04-RD.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-04-RD.png
new file mode 100644
index 0000000..e824995
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-04-RD.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-05-ZH.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-05-ZH.png
new file mode 100644
index 0000000..43ea94d
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-05-ZH.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-06-CZ.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-06-CZ.png
new file mode 100644
index 0000000..918da6a
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-06-CZ.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-06-MT.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-06-MT.png
new file mode 100644
index 0000000..cbd3255
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-06-MT.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-07-MT.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-07-MT.png
new file mode 100644
index 0000000..b07a45a
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-07-MT.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-07-YE.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-07-YE.png
new file mode 100644
index 0000000..3533902
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-07-YE.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-08-WH.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-08-WH.png
new file mode 100644
index 0000000..fe780d0
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/AU-08-WH.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-01-GR.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-01-GR.png
new file mode 100644
index 0000000..15be099
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-01-GR.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-01-GY.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-01-GY.png
new file mode 100644
index 0000000..da8e10e
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-01-GY.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-02-BL.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-02-BL.png
new file mode 100644
index 0000000..33165b8
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-02-BL.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-03-GR.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-03-GR.png
new file mode 100644
index 0000000..9aef3ca
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-03-GR.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-03-PI.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-03-PI.png
new file mode 100644
index 0000000..276353a
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-03-PI.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-03-YE.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-03-YE.png
new file mode 100644
index 0000000..d33d3d0
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-03-YE.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-04-BL.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-04-BL.png
new file mode 100644
index 0000000..9e6ead4
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-04-BL.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-04-RD.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-04-RD.png
new file mode 100644
index 0000000..05ce7cd
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-04-RD.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-04-TQ.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-04-TQ.png
new file mode 100644
index 0000000..bd88875
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-04-TQ.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-05-PT.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-05-PT.png
new file mode 100644
index 0000000..fba3e80
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-05-PT.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-05-RD.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-05-RD.png
new file mode 100644
index 0000000..a2e821b
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-05-RD.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-06-MT.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-06-MT.png
new file mode 100644
index 0000000..ff3a09e
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-06-MT.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-06-YE.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-06-YE.png
new file mode 100644
index 0000000..f859df8
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-06-YE.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-07-GR.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-07-GR.png
new file mode 100644
index 0000000..d6d8195
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-07-GR.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-07-YE.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-07-YE.png
new file mode 100644
index 0000000..69e8075
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-07-YE.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-08-GR.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-08-GR.png
new file mode 100644
index 0000000..5c1188e
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-08-GR.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-08-PI.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-08-PI.png
new file mode 100644
index 0000000..c24a0b9
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-08-PI.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-09-BL.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-09-BL.png
new file mode 100644
index 0000000..d0e7d81
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-09-BL.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-09-GR.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-09-GR.png
new file mode 100644
index 0000000..dc79fb2
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-09-GR.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-10-SD.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-10-SD.png
new file mode 100644
index 0000000..0678602
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-10-SD.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-10-VI.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-10-VI.png
new file mode 100644
index 0000000..4bad110
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-10-VI.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-11-SK.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-11-SK.png
new file mode 100644
index 0000000..553a7e4
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-11-SK.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-11-YE.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-11-YE.png
new file mode 100644
index 0000000..3d49aa7
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-11-YE.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-12-BL.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-12-BL.png
new file mode 100644
index 0000000..7be14c6
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-12-BL.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-12-RD.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-12-RD.png
new file mode 100644
index 0000000..24e86e4
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-12-RD.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-13-BL.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-13-BL.png
new file mode 100644
index 0000000..b787ac1
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-13-BL.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-13-RD.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-13-RD.png
new file mode 100644
index 0000000..fd4b034
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-13-RD.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-14-GR.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-14-GR.png
new file mode 100644
index 0000000..353ad98
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-14-GR.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-14-RD.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-14-RD.png
new file mode 100644
index 0000000..9b6b4b8
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-14-RD.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-15-PI.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-15-PI.png
new file mode 100644
index 0000000..b826982
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-15-PI.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-15-SD.png b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-15-SD.png
new file mode 100644
index 0000000..39cb193
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/product/full/CL-15-SD.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/scene/1000/autonomous.webp b/examples/hono-tractor-store-2.0/public/cdn/img/scene/1000/autonomous.webp
new file mode 100644
index 0000000..d03c3b2
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/scene/1000/autonomous.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/scene/1000/classics.webp b/examples/hono-tractor-store-2.0/public/cdn/img/scene/1000/classics.webp
new file mode 100644
index 0000000..ccb2149
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/scene/1000/classics.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/scene/500/autonomous.webp b/examples/hono-tractor-store-2.0/public/cdn/img/scene/500/autonomous.webp
new file mode 100644
index 0000000..5d824a5
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/scene/500/autonomous.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/scene/500/classics.webp b/examples/hono-tractor-store-2.0/public/cdn/img/scene/500/classics.webp
new file mode 100644
index 0000000..a0f59f5
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/scene/500/classics.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/scene/convert.sh b/examples/hono-tractor-store-2.0/public/cdn/img/scene/convert.sh
new file mode 100755
index 0000000..42f83a5
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/public/cdn/img/scene/convert.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+# Directory containing the original PNG images
+input_directory="./full"
+# Array of target widths
+declare -a sizes=(500 1000)
+
+# Iterate through each file in the input directory
+for file in "$input_directory"/*.jpg; do
+ # Extract filename without extension
+ filename=$(basename -- "$file")
+ filename="${filename%.*}"
+
+ # Iterate through each size
+ for size in "${sizes[@]}"; do
+ # Create output directory if it doesn't exist
+ output_directory="./$size"
+ mkdir -p "$output_directory"
+
+ # Define output filename
+ output_file="$output_directory/${filename}.webp"
+
+ # Convert and resize the image
+ convert "$file" -resize "${size}x${size}" - | cwebp -m 6 -q 80 -o "$output_file" -- -
+ done
+done
+
+echo "Conversion completed."
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/scene/full/autonomous.jpg b/examples/hono-tractor-store-2.0/public/cdn/img/scene/full/autonomous.jpg
new file mode 100644
index 0000000..e9f5222
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/scene/full/autonomous.jpg differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/scene/full/classics.jpg b/examples/hono-tractor-store-2.0/public/cdn/img/scene/full/classics.jpg
new file mode 100644
index 0000000..4a64acf
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/scene/full/classics.jpg differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/200/store-1.webp b/examples/hono-tractor-store-2.0/public/cdn/img/store/200/store-1.webp
new file mode 100644
index 0000000..13e4681
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/store/200/store-1.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/200/store-2.webp b/examples/hono-tractor-store-2.0/public/cdn/img/store/200/store-2.webp
new file mode 100644
index 0000000..aa087c9
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/store/200/store-2.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/200/store-3.webp b/examples/hono-tractor-store-2.0/public/cdn/img/store/200/store-3.webp
new file mode 100644
index 0000000..e727ff8
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/store/200/store-3.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/200/store-4.webp b/examples/hono-tractor-store-2.0/public/cdn/img/store/200/store-4.webp
new file mode 100644
index 0000000..6f48faf
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/store/200/store-4.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/200/store-5.webp b/examples/hono-tractor-store-2.0/public/cdn/img/store/200/store-5.webp
new file mode 100644
index 0000000..89cd8b1
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/store/200/store-5.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/400/store-1.webp b/examples/hono-tractor-store-2.0/public/cdn/img/store/400/store-1.webp
new file mode 100644
index 0000000..c8214fe
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/store/400/store-1.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/400/store-2.webp b/examples/hono-tractor-store-2.0/public/cdn/img/store/400/store-2.webp
new file mode 100644
index 0000000..4a9970f
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/store/400/store-2.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/400/store-3.webp b/examples/hono-tractor-store-2.0/public/cdn/img/store/400/store-3.webp
new file mode 100644
index 0000000..fdd6b78
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/store/400/store-3.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/400/store-4.webp b/examples/hono-tractor-store-2.0/public/cdn/img/store/400/store-4.webp
new file mode 100644
index 0000000..59aee7c
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/store/400/store-4.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/400/store-5.webp b/examples/hono-tractor-store-2.0/public/cdn/img/store/400/store-5.webp
new file mode 100644
index 0000000..663c110
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/store/400/store-5.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/800/store-1.webp b/examples/hono-tractor-store-2.0/public/cdn/img/store/800/store-1.webp
new file mode 100644
index 0000000..21d4e4f
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/store/800/store-1.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/800/store-2.webp b/examples/hono-tractor-store-2.0/public/cdn/img/store/800/store-2.webp
new file mode 100644
index 0000000..35714ba
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/store/800/store-2.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/800/store-3.webp b/examples/hono-tractor-store-2.0/public/cdn/img/store/800/store-3.webp
new file mode 100644
index 0000000..2bf55b0
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/store/800/store-3.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/800/store-4.webp b/examples/hono-tractor-store-2.0/public/cdn/img/store/800/store-4.webp
new file mode 100644
index 0000000..0facd29
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/store/800/store-4.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/800/store-5.webp b/examples/hono-tractor-store-2.0/public/cdn/img/store/800/store-5.webp
new file mode 100644
index 0000000..0416187
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/store/800/store-5.webp differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/convert.sh b/examples/hono-tractor-store-2.0/public/cdn/img/store/convert.sh
new file mode 100755
index 0000000..c5afdbd
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/public/cdn/img/store/convert.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+# Directory containing the original PNG images
+input_directory="./full"
+# Array of target widths
+declare -a sizes=(200 400 800)
+
+# Iterate through each file in the input directory
+for file in "$input_directory"/*.png; do
+ # Extract filename without extension
+ filename=$(basename -- "$file")
+ filename="${filename%.*}"
+
+ # Iterate through each size
+ for size in "${sizes[@]}"; do
+ # Create output directory if it doesn't exist
+ output_directory="./$size"
+ mkdir -p "$output_directory"
+
+ # Define output filename
+ output_file="$output_directory/${filename}.webp"
+
+ # Convert and resize the image
+ convert "$file" -resize "${size}x${size}" - | cwebp -m 6 -q 80 -o "$output_file" -- -
+ done
+done
+
+echo "Conversion completed."
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/full/store-1.png b/examples/hono-tractor-store-2.0/public/cdn/img/store/full/store-1.png
new file mode 100644
index 0000000..525e03c
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/store/full/store-1.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/full/store-2.png b/examples/hono-tractor-store-2.0/public/cdn/img/store/full/store-2.png
new file mode 100644
index 0000000..529ea60
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/store/full/store-2.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/full/store-3.png b/examples/hono-tractor-store-2.0/public/cdn/img/store/full/store-3.png
new file mode 100644
index 0000000..b1670fa
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/store/full/store-3.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/full/store-4.png b/examples/hono-tractor-store-2.0/public/cdn/img/store/full/store-4.png
new file mode 100644
index 0000000..75888c0
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/store/full/store-4.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/img/store/full/store-5.png b/examples/hono-tractor-store-2.0/public/cdn/img/store/full/store-5.png
new file mode 100644
index 0000000..145f4ad
Binary files /dev/null and b/examples/hono-tractor-store-2.0/public/cdn/img/store/full/store-5.png differ
diff --git a/examples/hono-tractor-store-2.0/public/cdn/js/helper.js b/examples/hono-tractor-store-2.0/public/cdn/js/helper.js
new file mode 100644
index 0000000..5723d74
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/public/cdn/js/helper.js
@@ -0,0 +1,444 @@
+import roughjs from "https://cdn.jsdelivr.net/npm/roughjs@4.6.6/+esm";
+
+// team specific styles
+const config = {
+ explore: {
+ fill: "rgba(255, 90, 84, 0.1)",
+ stroke: "rgba(255, 90, 84, 1)",
+ hachureAngle: 30,
+ },
+ decide: {
+ fill: "rgba(84, 255, 144, 0.1)",
+ stroke: "rgba(84, 255, 144, 1)",
+ hachureAngle: 60,
+ },
+ checkout: {
+ fill: "rgba(255, 222, 84, 0.1)",
+ stroke: "rgba(255, 222, 84, 1)",
+ hachureAngle: 90,
+ },
+};
+
+/**
+ * Sets the basic styles.
+ */
+function setBasicStyles() {
+ const style = document.createElement("style");
+ style.innerHTML = `
+@import url('https://fonts.googleapis.com/css2?family=Pangolin&display=swap');
+
+[data-boundary] {
+ position: relative;
+ background-size: 100% 100%;
+ background-repeat: no-repeat;
+}
+[data-boundary]::after {
+ display: block;
+ content: attr(data-boundary);
+ position: absolute;
+ bottom: -0.8rem;
+ right: 50%;
+ transform: translateX(50%);
+ padding: 0 0.5rem;
+ line-height: 1.5;
+ font-weight: bold;
+ pointer-events: none;
+ font-family: "Pangolin", cursive;
+ font-weight: 400;
+ font-style: normal;
+}
+[data-boundary$="-page"]::after {
+ top: 250px;
+ left: 0rem;
+ bottom: auto;
+ right: auto;
+ transform: rotate(-90deg);
+ transform-origin: 0 0;
+}
+[data-boundary^="explore-"]::after { background-color: ${config.explore.stroke}; color: white }
+[data-boundary^="decide-"]::after { background-color: ${config.decide.stroke}; }
+[data-boundary^="checkout-"]::after { background: ${config.checkout.stroke}; }
+
+html:not(.showBoundaries) [data-boundary] { background-image: none !important;}
+html:not(.showBoundaries) [data-boundary]:after { display: none; }
+html.showBoundaries img { mix-blend-mode: multiply; }
+`;
+ document.head.appendChild(style);
+}
+
+/**
+ * Generates a rounded rectangle SVG path.
+ * @param {object} options - The options for generating the rounded rectangle.
+ * @param {number} options.x - The x-coordinate of the top-left corner of the rectangle.
+ * @param {number} options.y - The y-coordinate of the top-left corner of the rectangle.
+ * @param {number} options.width - The width of the rectangle.
+ * @param {number} options.height - The height of the rectangle.
+ * @param {number} options.borderRadius - The border radius of the rectangle.
+ * @param {number} options.segmentLength - The length of each line segment.
+ * @returns {string} The SVG path representing the rounded rectangle.
+ */
+function generateRoundedRectangle({
+ x,
+ y,
+ width,
+ height,
+ borderRadius,
+ segmentLength,
+}) {
+ const maxRadius = Math.min(width / 2, height / 2);
+ borderRadius = Math.min(borderRadius, maxRadius);
+
+ /**
+ * Generates line segments between two points.
+ * @param {number} startX - The x-coordinate of the starting point.
+ * @param {number} startY - The y-coordinate of the starting point.
+ * @param {number} endX - The x-coordinate of the ending point.
+ * @param {number} endY - The y-coordinate of the ending point.
+ * @param {number} segmentLength - The length of each line segment.
+ * @returns {string} The points representing the line segments.
+ */
+ function generateLineSegments(startX, startY, endX, endY, segmentLength) {
+ let points = "";
+ const dx = endX - startX;
+ const dy = endY - startY;
+ const distance = Math.sqrt(dx * dx + dy * dy);
+ const steps = Math.floor(distance / segmentLength);
+ const stepX = dx / steps;
+ const stepY = dy / steps;
+
+ for (let i = 1; i <= steps; i++) {
+ const nextX = startX + stepX * i;
+ const nextY = startY + stepY * i;
+ points += `L${nextX},${nextY} `;
+ }
+
+ return points;
+ }
+
+ const pathData = [
+ `M${x + borderRadius},${y}`,
+ generateLineSegments(
+ x + borderRadius,
+ y,
+ x + width - borderRadius,
+ y,
+ segmentLength,
+ ),
+ `Q${x + width},${y} ${x + width},${y + borderRadius}`,
+ generateLineSegments(
+ x + width,
+ y + borderRadius,
+ x + width,
+ y + height - borderRadius,
+ segmentLength,
+ ),
+ `Q${x + width},${y + height} ${x + width - borderRadius},${y + height}`,
+ generateLineSegments(
+ x + width - borderRadius,
+ y + height,
+ x + borderRadius,
+ y + height,
+ segmentLength,
+ ),
+ `Q${x},${y + height} ${x},${y + height - borderRadius}`,
+ generateLineSegments(
+ x,
+ y + height - borderRadius,
+ x,
+ y + borderRadius,
+ segmentLength,
+ ),
+ `Q${x},${y} ${x + borderRadius},${y}`,
+ "Z",
+ ];
+
+ return pathData.join(" ");
+}
+
+/**
+ * Writes the SVG node to the cache for the given boundary, width, and height.
+ * @param {SVGElement} svgNode - The SVG node to be cached.
+ * @param {string} boundary - The boundary identifier.
+ * @param {number} width - The width of the boundary.
+ * @param {number} height - The height of the boundary.
+ */
+function writeBoundaryToCache(svgNode, boundary, width, height) {
+ const serializer = new XMLSerializer();
+ const svgStr = serializer.serializeToString(svgNode);
+ const entry = { width, height, svg: svgStr };
+ window.sessionStorage.setItem(`boundary-${boundary}`, JSON.stringify(entry));
+}
+
+/**
+ * Reads the SVG string from the cache for the given boundary, width, and height.
+ * @param {string} boundary - The boundary identifier.
+ * @param {number} width - The width of the boundary.
+ * @param {number} height - The height of the boundary.
+ * @returns {SVGElement|null} - The parsed SVG element or null if not found or dimensions don't match.
+ */
+function readBoundaryFromCache(boundary, width, height) {
+ const svgStr = window.sessionStorage.getItem(`boundary-${boundary}`);
+ if (!svgStr) {
+ return null;
+ }
+ const entry = JSON.parse(svgStr);
+ const tolerance = 30;
+ if (
+ Math.abs(entry.width - width) >= tolerance ||
+ Math.abs(entry.height - height) >= tolerance
+ ) {
+ return null;
+ }
+ const parser = new window.DOMParser();
+ return parser.parseFromString(entry.svg, "image/svg+xml").firstChild;
+}
+
+/**
+ * Sets the CSS background for the given boundary using the SVG node.
+ * @param {string} boundary - The boundary identifier.
+ * @param {SVGElement} svgNode - The SVG node.
+ */
+function setCssBackground(boundary, svgNode) {
+ const serializer = new XMLSerializer();
+ const svgStr = serializer.serializeToString(svgNode);
+ const encodedSvg = encodeURIComponent(svgStr);
+ const url = `url("data:image/svg+xml,${encodedSvg}")`;
+
+ const id = `${boundary}-style`;
+ let style = document.getElementById(id);
+ if (!style) {
+ style = document.createElement("style");
+ style.id = id;
+ document.head.appendChild(style);
+ }
+ style.innerHTML = `[data-boundary="${boundary}"] { background-image: ${url}; }`;
+}
+
+/**
+ * Generates a white background for the given rectangle.
+ * @param {string} rectangle - The rectangle coordinates.
+ * @returns {SVGElement} The generated white background SVG element.
+ */
+function generateWhiteBackground(rectangle) {
+ const bgNode = document.createElementNS("http://www.w3.org/2000/svg", "path");
+ bgNode.setAttribute("d", rectangle);
+ bgNode.setAttribute("fill", "white");
+ return bgNode;
+}
+
+/**
+ * Generates a boundary for the given SVG element.
+ * @param {SVGElement} svg - The SVG element.
+ * @param {string} rectangle - The rectangle coordinates.
+ * @param {string} team - The team name.
+ * @param {boolean} isPage - Indicates if it's a page boundary.
+ * @returns {string} The generated boundary.
+ */
+function generateBoundary(svg, rectangle, team, isPage) {
+ const rc = roughjs.svg(svg);
+ return rc.path(rectangle, {
+ bowing: 0.5,
+ disableMultiStroke: true,
+ //fill: config[team].fill,
+ //fillStyle: "hachure",
+ //fillWeight: 1.5,
+ //hachureAngle: config[team].hachureAngle,
+ //hachureGap: 12,
+ preserveVertices: true,
+ roughness: isPage ? 5 : 3,
+ stroke: config[team].stroke,
+ strokeLineDash: null,
+ strokeWidth: isPage ? 20 : 3,
+ });
+}
+
+/**
+ * Generates a rough boundary for the given element.
+ * @param {HTMLElement} el - The element to generate the boundary for.
+ */
+function generateRoughBoundary(el) {
+ const clientRect = el.getBoundingClientRect();
+ const width = Math.round(clientRect.width);
+ const height = Math.round(clientRect.height);
+
+ const boundary = el.dataset.boundary;
+ const team = boundary.split("-")[0];
+ const isPage = boundary.endsWith("-page");
+
+ // basic shape and position of the boundary
+ const inset = isPage ? -2 : 10;
+ const rectangle = generateRoundedRectangle({
+ x: inset,
+ y: inset,
+ width: width - 2 * inset,
+ height: height - 2 * inset,
+ borderRadius: 10,
+ segmentLength: 150,
+ });
+
+ // svg document
+ const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
+ svg.setAttribute("width", width);
+ svg.setAttribute("height", height);
+ svg.setAttribute("preserveAspectRatio", "none");
+
+ // white background
+ svg.appendChild(generateWhiteBackground(rectangle));
+
+ // rough rectangle
+ let node = readBoundaryFromCache(boundary, width, height);
+ if (!node) {
+ node = generateBoundary(svg, rectangle, team, isPage);
+ writeBoundaryToCache(node, boundary, width, height);
+ }
+ svg.appendChild(node);
+
+ // apply to DOM
+ setCssBackground(boundary, svg);
+}
+
+/**
+ * Generate rough boundaries for all elements with the data-boundary attribute.
+ */
+function generateRoughBoundaries() {
+ const boundaries = document.querySelectorAll("[data-boundary]");
+ [...boundaries].forEach(generateRoughBoundary);
+}
+
+/**
+ * Toggle the boundaries based on the active state.
+ * @param {boolean} active - The active state of the boundaries.
+ */
+function toggleBoundaries(active) {
+ document.documentElement.classList.toggle("showBoundaries", active);
+ window.localStorage.setItem("showBoundaries", active);
+
+ if (!active) {
+ return;
+ }
+ generateRoughBoundaries();
+}
+
+/**
+ * Show toggle button.
+ */
+function showToggleButton() {
+ const showBoundaries =
+ window.localStorage.getItem("showBoundaries") === "true";
+ toggleBoundaries(showBoundaries);
+
+ const checkbox = document.createElement("input");
+ checkbox.type = "checkbox";
+ checkbox.checked = showBoundaries;
+ checkbox.addEventListener("change", (e) =>
+ toggleBoundaries(e.target.checked),
+ );
+
+ const checkboxView = document.createElement("div");
+ checkboxView.classList.add("toggleView");
+
+ const label = document.createElement("label");
+ label.appendChild(checkbox);
+ label.appendChild(checkboxView);
+ label.appendChild(document.createTextNode(" show team boundaries"));
+
+ const container = document.createElement("div");
+ container.classList.add("showBoundariesToggle");
+
+ const style = document.createElement("style");
+ style.innerHTML = `
+ .showBoundariesToggle {
+ position: fixed;
+ bottom: 10px;
+ left: 10px;
+ border-radius: 10px;
+ display: flex;
+ background-color: rgba(255, 255, 255, 0.8);
+ -webkit-user-select: none;
+ user-select: none;
+ box-shadow: 0 0 20px 10px rgba(235, 91, 89, 0.05);
+ border: 1px solid #eeebe2;
+ backdrop-filter: blur(5px);
+ -webkit-backdrop-filter: blur(5px);
+ margin-right: 10px;
+ }
+
+ .showBoundariesToggle input {
+ display: none;
+ }
+
+ .showBoundariesToggle label {
+ cursor: pointer;
+ padding: 20px;
+ display: flex;
+ }
+
+ .toggleView {
+ position: relative;
+ display: inline-block;
+ width: 40px;
+ height: 20px;
+ border: 1px solid #ccc;
+ border-radius: 10px;
+ margin-right: 10px;
+ box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.1);
+ background-color: #fff;
+ flex-shrink: 0;
+ }
+
+ .toggleView::before {
+ content: "";
+ display: block;
+ width: 18px;
+ height: 18px;
+ border-radius: 10px;
+ background-color: #fff;
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
+ transition: transform 0.3s, width 0.3s;
+ }
+
+ .toggleView::after {
+ top: 1px;
+ left: 1px;
+ position: absolute;
+ content: "";
+ display: block;
+ width: 16px;
+ height: 16px;
+ border-radius: 10px;
+ background-color: #000;
+ opacity: 0.5;
+ transition: transform 0.3s;
+ }
+
+ .showBoundariesToggle label:hover .toggleView::after {
+ opacity: 1;
+ }
+
+ .showBoundariesToggle input:checked + .toggleView::before {
+ width: 38px;
+ box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.1);
+ background-color: rgba(255, 90, 85, 1);
+ }
+
+ .showBoundariesToggle input:checked + .toggleView::after {
+ transform: translateX(20px);
+ opacity: 1;
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
+ }
+ `;
+ container.appendChild(style);
+ container.appendChild(label);
+ document.body.appendChild(container);
+}
+
+/**
+ * initialize
+ */
+
+setBasicStyles();
+showToggleButton();
+window.addEventListener("resize", () => {
+ window.requestAnimationFrame(generateRoughBoundaries);
+});
+window.addEventListener("click", generateRoughBoundaries);
diff --git a/examples/hono-tractor-store-2.0/src/checkout/actions.js b/examples/hono-tractor-store-2.0/src/checkout/actions.js
new file mode 100644
index 0000000..ebf8cdb
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/actions.js
@@ -0,0 +1,47 @@
+import { readFromCookie, writeToCookie } from "./state.js";
+
+/**
+ * Handles adding an item to the cart.
+ * @param {HonoContext} c - The hono context.
+ */
+export async function handleAddToCart(c) {
+ const body = await c.req.parseBody();
+ const sku = body.sku;
+
+ const items = readFromCookie(c);
+
+ const lineItem = items.find((i) => i.sku === sku);
+ if (lineItem) {
+ lineItem.quantity++;
+ } else {
+ items.push({ sku, quantity: 1 });
+ }
+ writeToCookie(items, c);
+}
+
+/**
+ * Handles removing an item from the cart.
+ * @param {HonoContext} c - The hono context.
+ */
+export async function handleRemoveFromCart(c) {
+ const body = await c.req.parseBody();
+ const sku = body.sku;
+
+ const items = readFromCookie(c);
+
+ const lineItem = items.find((i) => i.sku === sku);
+ if (lineItem) {
+ const index = items.indexOf(lineItem);
+ items.splice(index, 1);
+ }
+
+ writeToCookie(items, c);
+}
+
+/**
+ * Handles placing an order.
+ * @param {HonoContext} c - The hono context.
+ */
+export async function handlePlaceOrder(c) {
+ writeToCookie([], c);
+}
diff --git a/examples/hono-tractor-store-2.0/src/checkout/components/AddToCart.css b/examples/hono-tractor-store-2.0/src/checkout/components/AddToCart.css
new file mode 100644
index 0000000..d109a23
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/components/AddToCart.css
@@ -0,0 +1,37 @@
+.c_AddToCart {
+ padding: 1rem;
+ margin: 0 -1rem;
+}
+
+.c_AddToCart__information {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 1rem;
+}
+
+.c_AddToCart__stock {
+ display: block;
+}
+
+.c_AddToCart__stock--ok {
+ color: green;
+}
+
+.c_AddToCart__stock--empty {
+ color: red;
+}
+
+.c_AddToCart__confirmed {
+ display: flex;
+ align-items: baseline;
+ gap: 0.75ch;
+}
+
+.c_AddToCart__confirmed a {
+ color: inherit;
+}
+
+.c_AddToCart__confirmed--hidden {
+ visibility: hidden;
+}
diff --git a/examples/hono-tractor-store-2.0/src/checkout/components/AddToCart.js b/examples/hono-tractor-store-2.0/src/checkout/components/AddToCart.js
new file mode 100644
index 0000000..243db26
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/components/AddToCart.js
@@ -0,0 +1,42 @@
+import data from "../database/index.js";
+import { html } from "../utils.js";
+import Button from "./Button.js";
+
+/**
+ * AddToCart component.
+ * @param {object} props - The properties of the AddToCart component.
+ * @param {string} props.sku - The SKU of the variant to add to the cart.
+ * @returns {string} The AddToCart component markup.
+ */
+export default ({ sku }) => {
+ const variant = data.variants.find((p) => p.sku === sku);
+ const outOfStock = variant.inventory === 0;
+ return html`
`;
+};
diff --git a/examples/hono-tractor-store-2.0/src/checkout/components/Button.css b/examples/hono-tractor-store-2.0/src/checkout/components/Button.css
new file mode 100644
index 0000000..c0d5205
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/components/Button.css
@@ -0,0 +1,140 @@
+.c_Button--size-normal {
+ --button-height: 50px;
+}
+
+.c_Button--size-small {
+ --button-height: 40px;
+}
+
+.c_Button {
+ display: block;
+ height: var(--button-height);
+ width: 100%;
+ border-radius: calc(var(--button-height) / 2);
+ padding: 2px;
+ border: 0;
+ background: linear-gradient(180deg, rgb(168, 168, 168), rgb(255, 255, 255)),
+ var(--accent-color);
+ box-shadow:
+ 0 -2px 3px rgb(229, 229, 229),
+ 0 2px 3px 2px rgb(255, 255, 255),
+ 0 0 25px rgba(0, 0, 0, 0.05),
+ 0 -10px 5px rgb(255, 255, 255) inset;
+ position: relative;
+ text-transform: uppercase;
+ letter-spacing: 0.3em;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+ text-decoration: none;
+ font-size: 16px;
+}
+
+.c_Button--primary {
+ --accent-color: #333;
+ color: #fff;
+}
+
+.c_Button--secondary {
+ --accent-color: #ffffff;
+ color: #000;
+}
+
+.c_Button--rounded.c_Button--size-normal {
+ @media (max-width: 499px) {
+ --button-height: 40px;
+ }
+ @media (min-width: 500px) {
+ --button-height: 66px;
+ }
+ width: var(--button-height);
+}
+
+.c_Button--rounded.c_Button--size-small {
+ --button-height: 40px;
+
+ width: var(--button-height);
+}
+
+.c_Button--rounded .c_Button__inner {
+ padding: 0;
+}
+
+@media (max-width: 499px) {
+ .c_Button--rounded svg {
+ width: 20px;
+ height: 20px;
+ }
+}
+
+.c_Button[disabled] {
+ --accent-color: #d3d3d3;
+ pointer-events: none;
+}
+
+.c_Button::before {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ border-radius: inherit;
+ left: 0;
+ background: linear-gradient(
+ 0deg,
+ rgba(0, 0, 0, 0.19),
+ rgba(255, 255, 255, 0.3)
+ ),
+ var(--accent-color);
+ content: "";
+ box-shadow: 0 2px 1px -1px rgba(0, 0, 0, 0.1);
+ display: block;
+ transition:
+ transform 0.3s,
+ box-shadow 0.3s,
+ background 0.1s 0.2s;
+}
+
+.c_Button__inner {
+ position: relative;
+ padding-left: 20px;
+ padding-right: 20px;
+ background-color: var(--accent-color);
+ height: calc(var(--button-height) - 4px);
+ border-radius: inherit;
+ display: grid;
+ place-content: center;
+ transition:
+ transform 0.3s,
+ background 0.3s,
+ box-shadow 0.3s;
+ -webkit-user-select: none; /* Safari */
+ -ms-user-select: none; /* IE 10 and IE 11 */
+ user-select: none;
+ white-space: nowrap;
+}
+
+.c_Button:hover .c_Button__inner,
+.c_Button:focus .c_Button__inner {
+ background: linear-gradient(0deg, rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05)),
+ var(--accent-color);
+}
+
+.c_Button:active::before {
+ background: linear-gradient(0deg, rgba(0, 0, 0, 0.09), rgba(0, 0, 0, 0.16)),
+ var(--accent-color);
+ box-shadow:
+ 0 0 3px rgba(0, 0, 0, 0.6) inset,
+ 0 2px 1px -1px rgba(0, 0, 0, 0.1);
+ transform: scale(0.97);
+ transition:
+ all 0.1s,
+ background 0.05s;
+}
+
+.c_Button:active .c_Button__inner {
+ transform: scale(0.97);
+ background: linear-gradient(0deg, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)),
+ var(--accent-color);
+ transition: all 0.1s;
+ box-shadow:
+ 0 5px 5px rgba(0, 0, 0, 0.2) inset,
+ 0 -3px 3px rgba(255, 255, 255, 0.2) inset;
+}
diff --git a/examples/hono-tractor-store-2.0/src/checkout/components/Button.js b/examples/hono-tractor-store-2.0/src/checkout/components/Button.js
new file mode 100644
index 0000000..c036c32
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/components/Button.js
@@ -0,0 +1,45 @@
+import { html } from "../utils.js";
+
+/**
+ * Button component.
+ * @param {object} props - The properties of the button.
+ * @param {string} [props.href] - The href for the button if it's a link.
+ * @param {string} [props.type] - The type of the button.
+ * @param {string} [props.value] - The value of the button.
+ * @param {boolean} [props.disabled] - Whether the button is disabled.
+ * @param {boolean} [props.rounded] - Whether the button is rounded.
+ * @param {string} [props.className] - Additional CSS classes for the button.
+ * @param {string} [props.children] - The content inside the button.
+ * @param {string} [props.dataId] - The data-id attribute of the button.
+ * @param {('primary'|'secondary')} [props.variant] - The variant of the button. Valid options are 'primary' and 'secondary'.
+ * @param {string} [props.title] - The title attribute of the button.
+ * @param {('small'|'normal')} [props.size] - The size of the button. Valid options are 'small' and 'normalx'.
+ * @returns {string} The button markup.
+ */
+export default ({
+ href,
+ type,
+ value,
+ disabled,
+ rounded,
+ className = "",
+ children,
+ dataId,
+ size = "normal",
+ variant = "secondary",
+ title,
+}) => {
+ const tag = href ? "a" : "button";
+ return html` <${tag}
+ ${disabled ? "disabled" : ""}
+ ${href ? `href="${href}"` : ""}
+ ${type ? `type="${type}"` : ""}
+ ${value ? `value="${value}"` : ""}
+ ${dataId ? `data-id="${dataId}"` : ""}
+ ${title ? `title="${title}"` : ""}
+ class="c_Button c_Button--${variant} ${className} ${rounded ? "c_Button--rounded" : ""} c_Button--size-${size}"
+ ontouchstart
+ >
+ ${children}
+ ${tag}>`;
+};
diff --git a/examples/hono-tractor-store-2.0/src/checkout/components/CompactHeader.css b/examples/hono-tractor-store-2.0/src/checkout/components/CompactHeader.css
new file mode 100644
index 0000000..791eb52
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/components/CompactHeader.css
@@ -0,0 +1,22 @@
+.c_CompactHeader {
+ height: 135px;
+ display: flex;
+ margin: 0 0 2rem;
+ border-bottom: 1px solid #eeebe2;
+ box-shadow: 0 0 20px 10px #eb5b5920;
+ align-items: center;
+}
+
+.c_CompactHeader__inner {
+ display: flex;
+ max-width: calc(1000px + (2 * var(--outer-space)));
+ padding: 0 var(--outer-space);
+ margin: 0 auto;
+ align-items: center;
+ flex: 1;
+}
+
+.c_CompactHeader__logo {
+ display: block;
+ width: 270px;
+}
diff --git a/examples/hono-tractor-store-2.0/src/checkout/components/CompactHeader.js b/examples/hono-tractor-store-2.0/src/checkout/components/CompactHeader.js
new file mode 100644
index 0000000..7c6a757
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/components/CompactHeader.js
@@ -0,0 +1,15 @@
+import { html, IMAGE_SERVER } from "../utils.js";
+
+export default () => {
+ return html``;
+};
diff --git a/examples/hono-tractor-store-2.0/src/checkout/components/LineItem.css b/examples/hono-tractor-store-2.0/src/checkout/components/LineItem.css
new file mode 100644
index 0000000..570c125
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/components/LineItem.css
@@ -0,0 +1,52 @@
+.c_LineItem {
+ display: flex;
+ margin-bottom: 2rem;
+ flex-wrap: wrap;
+ gap: 2rem;
+ align-items: center;
+}
+
+.c_LineItem__image {
+ flex-basis: 150px;
+ padding-right: 2rem;
+}
+
+.c_LineItem__image img {
+ display: block;
+ aspect-ratio: 1 / 1;
+ width: 100%;
+ height: auto;
+ object-fit: contain;
+}
+
+.c_LineItem__details {
+ flex-grow: 1;
+ display: flex;
+ gap: 1rem;
+ flex-wrap: wrap;
+ align-items: center;
+ justify-content: flex-end;
+}
+
+.c_LineItem__name {
+ padding-right: 2rem;
+ flex-grow: 1;
+ color: inherit;
+ text-decoration: none;
+ min-width: 300px;
+}
+
+.c_LineItem__quantity {
+ display: flex;
+ gap: 1rem;
+ align-items: center;
+}
+
+.c_LineItem__price {
+ flex-basis: 100px;
+ text-align: end;
+}
+
+.c_LineItem__removeIcon {
+ width: 33px;
+}
diff --git a/examples/hono-tractor-store-2.0/src/checkout/components/LineItem.js b/examples/hono-tractor-store-2.0/src/checkout/components/LineItem.js
new file mode 100644
index 0000000..258803d
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/components/LineItem.js
@@ -0,0 +1,57 @@
+import { html, src, srcset } from "../utils.js";
+import Button from "./Button.js";
+
+/**
+ * LineItem component.
+ * @param {LineItem} props - The line item.
+ * @returns {string} The LineItem component markup.
+ */
+export default ({ sku, id, name, quantity, total, image }) => {
+ const url = `/product/${id}?sku=${sku}`;
+ return html`
+
+
+
+
+ `;
+};
diff --git a/examples/hono-tractor-store-2.0/src/checkout/components/Meta.js b/examples/hono-tractor-store-2.0/src/checkout/components/Meta.js
new file mode 100644
index 0000000..0165473
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/components/Meta.js
@@ -0,0 +1,37 @@
+import { html } from "../utils.js";
+
+export default () => {
+ return html`
+
+
+
+
+
+
+
+
+
+
+ `;
+};
diff --git a/examples/hono-tractor-store-2.0/src/checkout/components/MiniCart.css b/examples/hono-tractor-store-2.0/src/checkout/components/MiniCart.css
new file mode 100644
index 0000000..7152c88
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/components/MiniCart.css
@@ -0,0 +1,70 @@
+.c_MiniCart {
+ position: relative;
+ margin-right: 1.5rem;
+}
+
+.c_MiniCart__quantity {
+ background-color: #ff5a55;
+ border-radius: 10px;
+ box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);
+ color: rgb(255, 255, 255);
+ display: grid;
+ font-size: 12px;
+ font-variant-numeric: tabular-nums;
+ font-weight: bold;
+ height: 20px;
+ letter-spacing: normal;
+ min-width: 20px;
+ place-content: center;
+ position: absolute;
+ right: 0px;
+ text-align: center;
+ top: 0px;
+ transform: scale(1);
+ transition: all 0.3s;
+}
+
+.c_MiniCart svg {
+ --minicart-translate: -2px;
+ transform: translateY(var(--minicart-translate));
+}
+
+.c_MiniCart__quantity:empty {
+ transform: scale(0);
+}
+
+@keyframes bounce {
+ 0% {
+ transform: translateY(calc(var(--minicart-translate) + 0px));
+ }
+ 33% {
+ transform: translateY(calc(var(--minicart-translate) + 6px));
+ }
+ 100% {
+ transform: translateY(calc(var(--minicart-translate) + 0px));
+ }
+}
+
+.c_MiniCart--highlight svg {
+ animation: bounce 0.2s ease-out;
+}
+
+@keyframes shake {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 50% {
+ transform: rotate(6deg);
+ }
+ 100% {
+ transform: rotate(-6deg);
+ }
+}
+
+.c_MiniCart--highlight svg g {
+ transform-origin: center 7px;
+ animation: shake 0.2s infinite ease-in-out;
+}
+.c_MiniCart {
+ padding: 1.5rem;
+}
diff --git a/examples/hono-tractor-store-2.0/src/checkout/components/MiniCart.js b/examples/hono-tractor-store-2.0/src/checkout/components/MiniCart.js
new file mode 100644
index 0000000..9b40507
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/components/MiniCart.js
@@ -0,0 +1,42 @@
+import { readFromCookie } from "../state.js";
+import { html } from "../utils.js";
+import Button from "./Button.js";
+
+/**
+ * MiniCart component.
+ * @param {object} props - The properties of the MiniCart component.
+ * @param {HonoContext} props.c - The hono context.
+ * @returns {string} The MiniCart component markup.
+ */
+export default ({ c }) => {
+ const lineItems = readFromCookie(c);
+ const quantity = lineItems.reduce((t, { quantity }) => t + quantity, 0);
+ return html`
+ ${Button({
+ variant: "secondary",
+ rounded: true,
+ href: "/checkout/cart",
+ className: "c_MiniCart__button",
+ children: html`
+
+
+
+
+
+
+
+
+
${quantity || ""}
+ `,
+ })}
+
`;
+};
diff --git a/examples/hono-tractor-store-2.0/src/checkout/components/Page.js b/examples/hono-tractor-store-2.0/src/checkout/components/Page.js
new file mode 100644
index 0000000..466776f
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/components/Page.js
@@ -0,0 +1,22 @@
+import { html } from "../utils.js";
+import Meta from "./Meta.js";
+
+export default ({ content }) => {
+ return html`
+
+
+ Tractor Store
+
+
+
+ ${Meta()}
+
+
+ ${content}
+
+
+
+
+
+ `;
+};
diff --git a/examples/hono-tractor-store-2.0/src/checkout/database/database.json b/examples/hono-tractor-store-2.0/src/checkout/database/database.json
new file mode 100644
index 0000000..d99386d
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/database/database.json
@@ -0,0 +1,380 @@
+{
+ "variants": [
+ {
+ "id": "AU-01",
+ "name": "TerraFirma AutoCultivator T-300 Silver",
+ "sku": "AU-01-SI",
+ "price": 1000,
+ "image": "/cdn/img/product/[size]/AU-01-SI.webp",
+ "inventory": 8
+ },
+ {
+ "id": "AU-02",
+ "name": "SmartFarm Titan Sunset Copper",
+ "sku": "AU-02-OG",
+ "price": 4100,
+ "image": "/cdn/img/product/[size]/AU-02-OG.webp",
+ "inventory": 4
+ },
+ {
+ "id": "AU-02",
+ "name": "SmartFarm Titan Cosmic Sapphire",
+ "sku": "AU-02-BL",
+ "price": 4000,
+ "image": "/cdn/img/product/[size]/AU-02-BL.webp",
+ "inventory": 3
+ },
+ {
+ "id": "AU-02",
+ "name": "SmartFarm Titan Verdant Shadow",
+ "sku": "AU-02-GG",
+ "price": 4000,
+ "image": "/cdn/img/product/[size]/AU-02-GG.webp",
+ "inventory": 6
+ },
+ {
+ "id": "AU-03",
+ "name": "FutureHarvest Navigator Turquoise Titan",
+ "sku": "AU-03-TQ",
+ "price": 1600,
+ "image": "/cdn/img/product/[size]/AU-03-TQ.webp",
+ "inventory": 9
+ },
+ {
+ "id": "AU-03",
+ "name": "FutureHarvest Navigator Majestic Violet",
+ "sku": "AU-03-PL",
+ "price": 1700,
+ "image": "/cdn/img/product/[size]/AU-03-PL.webp",
+ "inventory": 7
+ },
+ {
+ "id": "AU-03",
+ "name": "FutureHarvest Navigator Scarlet Dynamo",
+ "sku": "AU-03-RD",
+ "price": 1900,
+ "image": "/cdn/img/product/[size]/AU-03-RD.webp",
+ "inventory": 8
+ },
+ {
+ "id": "AU-03",
+ "name": "FutureHarvest Navigator Sunbeam Yellow",
+ "sku": "AU-03-YE",
+ "price": 1800,
+ "image": "/cdn/img/product/[size]/AU-03-YE.webp",
+ "inventory": 3
+ },
+ {
+ "id": "AU-04",
+ "name": "Sapphire Sunworker 460R Ruby Red",
+ "sku": "AU-04-RD",
+ "price": 8700,
+ "image": "/cdn/img/product/[size]/AU-04-RD.webp",
+ "inventory": 9
+ },
+ {
+ "id": "AU-04",
+ "name": "Sapphire Sunworker 460R Midnight Onyx",
+ "sku": "AU-04-BK",
+ "price": 8500,
+ "image": "/cdn/img/product/[size]/AU-04-BK.webp",
+ "inventory": 8
+ },
+ {
+ "id": "AU-05",
+ "name": "EcoGrow Crop Commander Zestful Horizon",
+ "sku": "AU-05-ZH",
+ "price": 3400,
+ "image": "/cdn/img/product/[size]/AU-05-ZH.webp",
+ "inventory": 8
+ },
+ {
+ "id": "AU-06",
+ "name": "FarmFleet Sovereign Canary Zenith",
+ "sku": "AU-06-CZ",
+ "price": 2200,
+ "image": "/cdn/img/product/[size]/AU-06-CZ.webp",
+ "inventory": 3
+ },
+ {
+ "id": "AU-06",
+ "name": "FarmFleet Sovereign Minted Jade",
+ "sku": "AU-06-MT",
+ "price": 2100,
+ "image": "/cdn/img/product/[size]/AU-06-MT.webp",
+ "inventory": 5
+ },
+ {
+ "id": "AU-07",
+ "name": "Verde Voyager Glacial Mint",
+ "sku": "AU-07-MT",
+ "price": 4000,
+ "image": "/cdn/img/product/[size]/AU-07-MT.webp",
+ "inventory": 4
+ },
+ {
+ "id": "AU-07",
+ "name": "Verde Voyager Sunbeam Yellow",
+ "sku": "AU-07-YE",
+ "price": 5000,
+ "image": "/cdn/img/product/[size]/AU-07-YE.webp",
+ "inventory": 9
+ },
+ {
+ "id": "AU-08",
+ "name": "Field Pioneer Polar White",
+ "sku": "AU-08-WH",
+ "price": 4500,
+ "image": "/cdn/img/product/[size]/AU-08-WH.webp",
+ "inventory": 4
+ },
+ {
+ "id": "CL-01",
+ "name": "Heritage Workhorse Verdant Field",
+ "sku": "CL-01-GR",
+ "price": 5700,
+ "image": "/cdn/img/product/[size]/CL-01-GR.webp",
+ "inventory": 8
+ },
+ {
+ "id": "CL-01",
+ "name": "Heritage Workhorse Stormy Sky",
+ "sku": "CL-01-GY",
+ "price": 6200,
+ "image": "/cdn/img/product/[size]/CL-01-GY.webp",
+ "inventory": 7
+ },
+ {
+ "id": "CL-02",
+ "name": "Falcon Crest Farm Cerulean Classic",
+ "sku": "CL-02-BL",
+ "price": 2600,
+ "image": "/cdn/img/product/[size]/CL-02-BL.webp",
+ "inventory": 1
+ },
+ {
+ "id": "CL-03",
+ "name": "Falcon Crest Work Meadow Green",
+ "sku": "CL-03-GR",
+ "price": 2300,
+ "image": "/cdn/img/product/[size]/CL-03-GR.webp",
+ "inventory": 7
+ },
+ {
+ "id": "CL-03",
+ "name": "Falcon Crest Work Rustic Rose",
+ "sku": "CL-03-PI",
+ "price": 2300,
+ "image": "/cdn/img/product/[size]/CL-03-PI.webp",
+ "inventory": 3
+ },
+ {
+ "id": "CL-03",
+ "name": "Falcon Crest Work Harvest Gold",
+ "sku": "CL-03-YE",
+ "price": 2300,
+ "image": "/cdn/img/product/[size]/CL-03-YE.webp",
+ "inventory": 6
+ },
+ {
+ "id": "CL-04",
+ "name": "Broadfield Majestic Oceanic Blue",
+ "sku": "CL-04-BL",
+ "price": 2200,
+ "image": "/cdn/img/product/[size]/CL-04-BL.webp",
+ "inventory": 6
+ },
+ {
+ "id": "CL-04",
+ "name": "Broadfield Majestic Rustic Crimson",
+ "sku": "CL-04-RD",
+ "price": 2200,
+ "image": "/cdn/img/product/[size]/CL-04-RD.webp",
+ "inventory": 3
+ },
+ {
+ "id": "CL-04",
+ "name": "Broadfield Majestic Aqua Green",
+ "sku": "CL-04-TQ",
+ "price": 2200,
+ "image": "/cdn/img/product/[size]/CL-04-TQ.webp",
+ "inventory": 0
+ },
+ {
+ "id": "CL-05",
+ "name": "Countryside Commander Pacific Teal",
+ "sku": "CL-05-PT",
+ "price": 2700,
+ "image": "/cdn/img/product/[size]/CL-05-PT.webp",
+ "inventory": 1
+ },
+ {
+ "id": "CL-05",
+ "name": "Countryside Commander Barn Red",
+ "sku": "CL-05-RD",
+ "price": 2700,
+ "image": "/cdn/img/product/[size]/CL-05-RD.webp",
+ "inventory": 1
+ },
+ {
+ "id": "CL-06",
+ "name": "Danamark Steadfast Emerald Forest",
+ "sku": "CL-06-MT",
+ "price": 2800,
+ "image": "/cdn/img/product/[size]/CL-06-MT.webp",
+ "inventory": 1
+ },
+ {
+ "id": "CL-06",
+ "name": "Danamark Steadfast Golden Wheat",
+ "sku": "CL-06-YE",
+ "price": 2800,
+ "image": "/cdn/img/product/[size]/CL-06-YE.webp",
+ "inventory": 2
+ },
+ {
+ "id": "CL-07",
+ "name": "Greenland Rover Forest Fern",
+ "sku": "CL-07-GR",
+ "price": 2900,
+ "image": "/cdn/img/product/[size]/CL-07-GR.webp",
+ "inventory": 4
+ },
+ {
+ "id": "CL-07",
+ "name": "Greenland Rover Autumn Amber",
+ "sku": "CL-07-YE",
+ "price": 2900,
+ "image": "/cdn/img/product/[size]/CL-07-YE.webp",
+ "inventory": 4
+ },
+ {
+ "id": "CL-08",
+ "name": "Holland Hamster Polder Green",
+ "sku": "CL-08-GR",
+ "price": 7750,
+ "image": "/cdn/img/product/[size]/CL-08-GR.webp",
+ "inventory": 8
+ },
+ {
+ "id": "CL-08",
+ "name": "Holland Hamster Tulip Magenta",
+ "sku": "CL-08-PI",
+ "price": 7900,
+ "image": "/cdn/img/product/[size]/CL-08-PI.webp",
+ "inventory": 3
+ },
+ {
+ "id": "CL-09",
+ "name": "TerraFirma Veneto Adriatic Blue",
+ "sku": "CL-09-BL",
+ "price": 2950,
+ "image": "/cdn/img/product/[size]/CL-09-BL.webp",
+ "inventory": 4
+ },
+ {
+ "id": "CL-09",
+ "name": "TerraFirma Veneto Tuscan Green",
+ "sku": "CL-09-GR",
+ "price": 2950,
+ "image": "/cdn/img/product/[size]/CL-09-GR.webp",
+ "inventory": 7
+ },
+ {
+ "id": "CL-10",
+ "name": "Global Gallant Sahara Dawn",
+ "sku": "CL-10-SD",
+ "price": 2600,
+ "image": "/cdn/img/product/[size]/CL-10-SD.webp",
+ "inventory": 6
+ },
+ {
+ "id": "CL-10",
+ "name": "Global Gallant Violet Vintage",
+ "sku": "CL-10-VI",
+ "price": 2600,
+ "image": "/cdn/img/product/[size]/CL-10-VI.webp",
+ "inventory": 2
+ },
+ {
+ "id": "CL-11",
+ "name": "Scandinavia Sower Baltic Blue",
+ "sku": "CL-11-SK",
+ "price": 3100,
+ "image": "/cdn/img/product/[size]/CL-11-SK.webp",
+ "inventory": 0
+ },
+ {
+ "id": "CL-11",
+ "name": "Scandinavia Sower Nordic Gold",
+ "sku": "CL-11-YE",
+ "price": 3100,
+ "image": "/cdn/img/product/[size]/CL-11-YE.webp",
+ "inventory": 3
+ },
+ {
+ "id": "CL-12",
+ "name": "Celerity Cruiser Velocity Blue",
+ "sku": "CL-12-BL",
+ "price": 3200,
+ "image": "/cdn/img/product/[size]/CL-12-BL.webp",
+ "inventory": 8
+ },
+ {
+ "id": "CL-12",
+ "name": "Celerity Cruiser Rally Red",
+ "sku": "CL-12-RD",
+ "price": 3200,
+ "image": "/cdn/img/product/[size]/CL-12-RD.webp",
+ "inventory": 8
+ },
+ {
+ "id": "CL-13",
+ "name": "Rapid Racer Speedway Blue",
+ "sku": "CL-13-BL",
+ "price": 7500,
+ "image": "/cdn/img/product/[size]/CL-13-BL.webp",
+ "inventory": 1
+ },
+ {
+ "id": "CL-13",
+ "name": "Rapid Racer Raceway Red",
+ "sku": "CL-13-RD",
+ "price": 7500,
+ "image": "/cdn/img/product/[size]/CL-13-RD.webp",
+ "inventory": 5
+ },
+ {
+ "id": "CL-14",
+ "name": "Caribbean Cruiser Emerald Grove",
+ "sku": "CL-14-GR",
+ "price": 2300,
+ "image": "/cdn/img/product/[size]/CL-14-GR.webp",
+ "inventory": 3
+ },
+ {
+ "id": "CL-14",
+ "name": "Caribbean Cruiser Ruby Fields",
+ "sku": "CL-14-RD",
+ "price": 2300,
+ "image": "/cdn/img/product/[size]/CL-14-RD.webp",
+ "inventory": 5
+ },
+ {
+ "id": "CL-15",
+ "name": "Fieldmaster Classic Vintage Pink",
+ "sku": "CL-15-PI",
+ "price": 6200,
+ "image": "/cdn/img/product/[size]/CL-15-PI.webp",
+ "inventory": 0
+ },
+ {
+ "id": "CL-15",
+ "name": "Fieldmaster Classic Sahara Dust",
+ "sku": "CL-15-SD",
+ "price": 6200,
+ "image": "/cdn/img/product/[size]/CL-15-SD.webp",
+ "inventory": 9
+ }
+ ]
+}
\ No newline at end of file
diff --git a/examples/hono-tractor-store-2.0/src/checkout/database/import.js b/examples/hono-tractor-store-2.0/src/checkout/database/import.js
new file mode 100644
index 0000000..de84101
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/database/import.js
@@ -0,0 +1,43 @@
+// reads product data from a central source and writes the necessary data for this system.
+// here we are reading from a js file and writing to a json file.
+// in a real world scenario, you would read from a product service and write to a database.
+
+import fs from "fs";
+import path from "path";
+import products from "../../../products.js";
+
+/**
+ * Generates deterministic inventory (0-10) based on the name.
+ * @param {string} name - The name of the variant.
+ * @returns {number} - The inventory count of the variant.
+ */
+function getInventory(name) {
+ const hash = name
+ .split("")
+ .reduce((acc, char) => acc + char.charCodeAt(0), 0);
+ return hash % 11;
+}
+
+/**
+ * @type {Database}
+ */
+const database = {
+ variants: products.flatMap((p) => {
+ return p.variants.map((v) => {
+ const name = `${p.name} ${v.name}`;
+ return {
+ id: p.id,
+ name,
+ sku: v.sku,
+ price: v.price,
+ image: v.image,
+ inventory: getInventory(name),
+ };
+ });
+ }),
+};
+
+const __dirname = path.dirname(new URL(import.meta.url).pathname);
+const databaseFile = path.resolve(__dirname, "./database.json");
+console.log("Writing database to", databaseFile);
+fs.writeFileSync(databaseFile, JSON.stringify(database, null, 2));
diff --git a/examples/hono-tractor-store-2.0/src/checkout/database/index.js b/examples/hono-tractor-store-2.0/src/checkout/database/index.js
new file mode 100644
index 0000000..19eb799
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/database/index.js
@@ -0,0 +1,5 @@
+/**
+ * @type {Database}
+ */
+import data from "./database.json" assert { type: "json" };
+export default data;
diff --git a/examples/hono-tractor-store-2.0/src/checkout/index.js b/examples/hono-tractor-store-2.0/src/checkout/index.js
new file mode 100644
index 0000000..f4e158b
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/index.js
@@ -0,0 +1,5 @@
+export { default as CartPage } from "./pages/CartPage.js";
+export { default as Checkout } from "./pages/Checkout.js";
+export { default as MiniCart } from "./components/MiniCart.js";
+export { default as Thanks } from "./pages/Thanks.js";
+export * from "./actions.js";
diff --git a/examples/hono-tractor-store-2.0/src/checkout/pages/CartPage.css b/examples/hono-tractor-store-2.0/src/checkout/pages/CartPage.css
new file mode 100644
index 0000000..37fc8d3
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/pages/CartPage.css
@@ -0,0 +1,35 @@
+.c_CartPage {
+ margin: 0 auto;
+ max-width: calc(1000px + var(--outer-space) * 2);
+ padding: 0 var(--outer-space);
+}
+
+.c_CartPage__lineItems {
+ list-style: none;
+ padding: 0;
+}
+
+.c_CartPage hr {
+ border: 0;
+ height: 2px;
+ background-color: black;
+}
+
+.c_CartPage__total {
+ margin: 2rem 0 3rem;
+ text-align: right;
+ font-weight: bold;
+}
+
+.c_CartPage__buttons {
+ display: flex;
+ flex-direction: row-reverse;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ margin-bottom: 4rem;
+ gap: 2rem;
+}
+
+.c_CartPage__buttons > * {
+ flex: 0;
+}
diff --git a/examples/hono-tractor-store-2.0/src/checkout/pages/CartPage.js b/examples/hono-tractor-store-2.0/src/checkout/pages/CartPage.js
new file mode 100644
index 0000000..f397083
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/pages/CartPage.js
@@ -0,0 +1,59 @@
+import Page from "../components/Page.js";
+import LineItem from "../components/LineItem.js";
+import data from "../database/index.js";
+import { readFromCookie } from "../state.js";
+import { html } from "../utils.js";
+import Header from "../../explore/components/Header.js";
+import Footer from "../../explore/components/Footer.js";
+import Recommendations from "../../explore/components/Recommendations.js";
+import Button from "../components/Button.js";
+
+/**
+ * Converts cookie line items to cart line items.
+ * @param {CookieLineItem[]} items - List of cookie line items.
+ * @returns {LineItem[]} - Cart line items.
+ */
+function convertToLineItems(items) {
+ return items.reduce((res, { sku, quantity }) => {
+ const variant = data.variants.find((p) => p.sku === sku);
+ if (variant) {
+ res.push({ ...variant, quantity, total: variant.price * quantity });
+ }
+ return res;
+ }, []);
+}
+
+export default ({ c }) => {
+ const cookieLineItems = readFromCookie(c);
+ const lineItems = convertToLineItems(cookieLineItems);
+ const total = lineItems.reduce((res, { total }) => res + total, 0);
+ const skus = lineItems.map(({ sku }) => sku);
+ const content = html`
+ ${Header({ c })}
+
+ Warenkorb
+
+ ${lineItems.map(LineItem).join("")}
+
+
+ Total: ${total} Ø
+
+
+ ${Button({
+ href: "/checkout/checkout",
+ children: "Checkout",
+ variant: "primary",
+ })}
+ ${Button({
+ href: "/",
+ children: "Continue Shopping",
+ variant: "secondary",
+ })}
+
+
+ ${Recommendations({ skus })}
+
+ ${Footer()}
+ `;
+ return Page({ content });
+};
diff --git a/examples/hono-tractor-store-2.0/src/checkout/pages/Checkout.css b/examples/hono-tractor-store-2.0/src/checkout/pages/Checkout.css
new file mode 100644
index 0000000..256a923
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/pages/Checkout.css
@@ -0,0 +1,50 @@
+.c_Checkout {
+ margin: 0 auto;
+ max-width: calc(1000px + var(--outer-space) * 2);
+ padding: 0 var(--outer-space);
+}
+
+.c_Checkout fieldset {
+ border: 0;
+ border-bottom: 2px solid black;
+ padding: 0 0 2rem;
+ margin: 0;
+}
+
+.c_Checkout__name {
+ display: flex;
+ gap: 0 4rem;
+ flex-wrap: wrap;
+}
+
+.c_Checkout__buttons {
+ margin: 3rem 0 4rem;
+ display: flex;
+ flex-wrap: wrap;
+ gap: 2rem;
+ justify-content: space-between;
+ flex-direction: row-reverse;
+}
+
+.c_Checkout__buttons > * {
+ flex: 0;
+}
+
+.c_Checkout__label {
+ width: 100px;
+ display: inline-block;
+}
+
+.c_Checkout__input {
+ height: 40px;
+ padding: 5px 10px;
+ font-size: 16px;
+ border-radius: 8px;
+ margin: 1rem 0;
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) inset;
+}
+
+.c_Checkout__input:read-only {
+ background-color: rgba(0, 0, 0, 0.05);
+}
diff --git a/examples/hono-tractor-store-2.0/src/checkout/pages/Checkout.js b/examples/hono-tractor-store-2.0/src/checkout/pages/Checkout.js
new file mode 100644
index 0000000..e49c727
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/pages/Checkout.js
@@ -0,0 +1,78 @@
+import Page from "../components/Page.js";
+import CompactHeader from "../components/CompactHeader.js";
+import { html } from "../utils.js";
+import StorePicker from "../../explore/components/StorePicker.js";
+
+// imports from other teams -> fragments
+import Footer from "../../explore/components/Footer.js";
+import Button from "../components/Button.js";
+
+export default () => {
+ const content = html`
+ ${CompactHeader()}
+
+ Checkout
+
+
+ ${Footer()}
+ `;
+ return Page({ content });
+};
diff --git a/examples/hono-tractor-store-2.0/src/checkout/pages/Thanks.css b/examples/hono-tractor-store-2.0/src/checkout/pages/Thanks.css
new file mode 100644
index 0000000..c7ece18
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/pages/Thanks.css
@@ -0,0 +1,15 @@
+.c_Thanks {
+ margin: 0 auto;
+ max-width: calc(500px + var(--outer-space) * 2);
+ padding: 0 var(--outer-space);
+ min-height: 50vh;
+}
+
+.c_Thanks__title {
+ margin: 4rem 0;
+ font-size: 40px;
+}
+
+.c_Thanks__text {
+ margin: 4rem 0;
+}
diff --git a/examples/hono-tractor-store-2.0/src/checkout/pages/Thanks.js b/examples/hono-tractor-store-2.0/src/checkout/pages/Thanks.js
new file mode 100644
index 0000000..35ce8c9
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/pages/Thanks.js
@@ -0,0 +1,29 @@
+import Page from "../components/Page.js";
+import Header from "../../explore/components/Header.js";
+import { html } from "../utils.js";
+import Footer from "../../explore/components/Footer.js";
+import Button from "../components/Button.js";
+
+/**
+ * Thanks component.
+ * @param {object} props - The properties of the Thanks component.
+ * @param {HonoContext} props.c - The hono context.
+ * @returns {string} The Thanks component markup.
+ */
+export default ({ c }) => {
+ const content = html`
+ ${Header({ c })}
+
+ Thanks for your order!
+ We'll notify you, when its ready for pickup.
+
+ ${Button({
+ href: "/",
+ children: "Continue Shopping",
+ variant: "secondary",
+ })}
+
+ ${Footer()}
+ `;
+ return Page({ content });
+};
diff --git a/examples/hono-tractor-store-2.0/src/checkout/scripts.js b/examples/hono-tractor-store-2.0/src/checkout/scripts.js
new file mode 100644
index 0000000..ead7682
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/scripts.js
@@ -0,0 +1,114 @@
+/* client side javascript */
+
+/**
+ * Checkout page
+ * - form validation
+ * - react to store selected event (explore)
+ */
+const $checkoutForm = document.querySelector(".c_Checkout__form");
+if ($checkoutForm) {
+ const $submit = $checkoutForm.querySelector("button[type=submit]");
+ const $storeId = document.getElementById("c_storeId");
+
+ const update = () => {
+ const isValid = $checkoutForm.checkValidity() && $storeId.value;
+ $submit.disabled = !isValid;
+ };
+
+ $checkoutForm.addEventListener("input", update);
+ update();
+
+ const $storePicker = document.querySelector(".c_Checkout__store");
+ $storePicker.addEventListener("explore:store-selected", function (e) {
+ console.log("checkout: store-selected", e, e.detail);
+ document.getElementById("c_storeId").value = e.detail;
+ update();
+ });
+}
+
+/**
+ * Mini cart fragment
+ * - updated content on updated event
+ * - highlight animation
+ */
+document.addEventListener("checkout:cart-updated", async function () {
+ const $miniCart = document.querySelector(".c_MiniCart");
+ if ($miniCart) {
+ // update mini cart
+ const res = await fetch("/checkout/mini-cart");
+ const html = await res.text();
+ $miniCart.outerHTML = html;
+
+ // highlight updated mini cart
+ const $newMiniCart = document.querySelector(".c_MiniCart");
+ $newMiniCart.classList.add("c_MiniCart--highlight");
+ setTimeout(() => {
+ $newMiniCart.classList.remove("c_MiniCart--highlight");
+ }, 600);
+ }
+});
+
+/**
+ * Add to cart fragment
+ * - api call
+ * - updated mini cart event
+ */
+const $addToCart = document.querySelector(".c_AddToCart");
+if ($addToCart) {
+ $addToCart.addEventListener("submit", async function (e) {
+ e.preventDefault();
+ const formData = new URLSearchParams(new FormData($addToCart));
+ const res = await fetch("/checkout/cart/add", {
+ method: "POST",
+ body: formData,
+ });
+ if (res.ok) {
+ document.dispatchEvent(new Event("checkout:cart-updated"));
+ console.log($addToCart.querySelector(".c_AddToCart__confirmed"));
+
+ $addToCart
+ .querySelector(".c_AddToCart__confirmed")
+ .classList.remove("c_AddToCart__confirmed--hidden");
+ }
+ });
+}
+
+/**
+ * Thanks page
+ * - confetti on load
+ */
+const $thanksPage = document.querySelector(".c_Thanks");
+if ($thanksPage) {
+ import("https://cdn.jsdelivr.net/npm/canvas-confetti@1.9.2/+esm").then(
+ ({ default: confetti }) => {
+ var end = Date.now() + 1000;
+
+ const settings = {
+ particleCount: 3,
+ scalar: 1.5,
+ colors: ["#FFDE54", "#FF5A54", "#54FF90"],
+ spread: 70,
+ };
+ /**
+ * Animates confetti particles.
+ */
+ function frame() {
+ confetti({
+ ...settings,
+ angle: 60,
+ origin: { x: 0 },
+ });
+ confetti({
+ ...settings,
+ angle: 120,
+ origin: { x: 1 },
+ });
+
+ if (Date.now() < end) {
+ window.requestAnimationFrame(frame);
+ }
+ }
+ frame();
+ },
+ );
+}
diff --git a/examples/hono-tractor-store-2.0/src/checkout/state.js b/examples/hono-tractor-store-2.0/src/checkout/state.js
new file mode 100644
index 0000000..e07934b
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/state.js
@@ -0,0 +1,34 @@
+import { getCookie, setCookie } from "hono/cookie";
+
+const ITEM_SEP = "|";
+const QTY_SEP = "_";
+const COOKIE = "c_cart";
+
+/**
+ * Reads the line items from the cookie.
+ * @param {object} c - The hono context.
+ * @returns {CookieLineItem[]} An array of items read from the cookie.
+ */
+export function readFromCookie(c) {
+ const cookieStr = getCookie(c, COOKIE);
+
+ if (!cookieStr) return [];
+
+ return cookieStr.split(ITEM_SEP).map((item) => {
+ const [sku, quantity] = item.split(QTY_SEP);
+ return { sku, quantity: parseInt(quantity, 10) };
+ });
+}
+
+/**
+ * Writes the line items to the cookie.
+ * @param {CookieLineItem[]} items - An array of items to write to the cookie.
+ * @param {object} c - The hono context.
+ */
+export function writeToCookie(items, c) {
+ const cookieStr = items
+ .map((item) => `${item.sku}${QTY_SEP}${item.quantity}`)
+ .join(ITEM_SEP);
+ console.log("writeToCookie", cookieStr);
+ setCookie(c, COOKIE, cookieStr, { httpOnly: true });
+}
diff --git a/examples/hono-tractor-store-2.0/src/checkout/styles.css b/examples/hono-tractor-store-2.0/src/checkout/styles.css
new file mode 100644
index 0000000..d4ffa57
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/styles.css
@@ -0,0 +1,39 @@
+@import url("./pages/CartPage.css");
+@import url("./pages/Checkout.css");
+@import url("./pages/Thanks.css");
+@import url("./components/MiniCart.css");
+@import url("./components/AddToCart.css");
+@import url("./components/LineItem.css");
+@import url("./components/Button.css");
+@import url("./components/CompactHeader.css");
+
+@font-face {
+ font-family: "Raleway";
+ src: url("https://cdn.the-tractor.store/cdn/font/raleway-regular.woff2")
+ format("woff2");
+ font-weight: normal;
+ font-style: normal;
+}
+
+* {
+ box-sizing: border-box;
+}
+
+html {
+ font-family: raleway, "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 16px;
+}
+
+body {
+ padding: 0;
+ margin: 0;
+ min-height: 100vh;
+}
+
+p {
+ line-height: 1.5;
+}
+
+:root {
+ --outer-space: 1.5rem;
+}
diff --git a/examples/hono-tractor-store-2.0/src/checkout/types.js b/examples/hono-tractor-store-2.0/src/checkout/types.js
new file mode 100644
index 0000000..db9281b
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/types.js
@@ -0,0 +1,31 @@
+/**
+ * @typedef {object} Variant
+ * @property {string} id - The ID of the product the variant belongs to.
+ * @property {string} name - The name of the variant.
+ * @property {string} sku - The SKU of the variant.
+ * @property {number} price - The price of the variant.
+ * @property {string} image - The image URL of the variant.
+ * @property {number} inventory - The inventory count of the variant.
+ */
+
+/**
+ * @typedef {object} Database
+ * @property {Variant[]} variants - The variants in the database.
+ */
+
+/**
+ * @typedef {object} CookieLineItem
+ * @property {string} sku - The SKU of the line item.
+ * @property {number} quantity - The quantity of the line item in the cart.
+ */
+
+/**
+ * LineItem component.
+ * @typedef {object} LineItem
+ * @property {string} id - The ID of the product.
+ * @property {string} name - The name of the variant.
+ * @property {string} sku - The SKU of the variant.
+ * @property {number} quantity - The quantity of the variant in the cart.
+ * @property {number} total - The total price of the variant in the cart.
+ * @property {string} image - The URL of the variant image.
+ */
diff --git a/examples/hono-tractor-store-2.0/src/checkout/utils.js b/examples/hono-tractor-store-2.0/src/checkout/utils.js
new file mode 100644
index 0000000..33f29bd
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/checkout/utils.js
@@ -0,0 +1,29 @@
+// for prettier formatting
+// see https://prettier.io/docs/en/options.html#embedded-language-formatting
+export const html = String.raw;
+
+// use the image server if not using local images
+export const IMAGE_SERVER =
+ typeof process === "undefined" || process.env.USE_LOCAL_IMAGES !== "true"
+ ? "https://cdn.the-tractor.store"
+ : "";
+
+/**
+ * Replaces the placeholder "[size]" in the image URL with the specified size.
+ * @param {string} image - The original image URL.
+ * @param {number} size - The desired size for the image.
+ * @returns {string} - The modified image URL with the size placeholder replaced.
+ */
+export function src(image, size) {
+ return IMAGE_SERVER + image.replace("[size]", `${size}`);
+}
+
+/**
+ * Generates the srcset attribute value for an image with different sizes.
+ * @param {string} image - The original image URL.
+ * @param {number[]} sizes - The array of sizes for the image.
+ * @returns {string} - The srcset attribute value.
+ */
+export function srcset(image, sizes = []) {
+ return sizes.map((size) => `${src(image, size)} ${size}w`).join(", ");
+}
diff --git a/examples/hono-tractor-store-2.0/src/decide/components/Meta.js b/examples/hono-tractor-store-2.0/src/decide/components/Meta.js
new file mode 100644
index 0000000..0165473
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/decide/components/Meta.js
@@ -0,0 +1,37 @@
+import { html } from "../utils.js";
+
+export default () => {
+ return html`
+
+
+
+
+
+
+
+
+
+
+ `;
+};
diff --git a/examples/hono-tractor-store-2.0/src/decide/components/VariantOption.css b/examples/hono-tractor-store-2.0/src/decide/components/VariantOption.css
new file mode 100644
index 0000000..ad679fc
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/decide/components/VariantOption.css
@@ -0,0 +1,74 @@
+.d_VariantOption {
+ display: flex;
+ align-items: center;
+ gap: 5px;
+}
+
+.d_VariantOption__color {
+ width: 15px;
+ aspect-ratio: 1;
+ border-radius: 50%;
+ display: inline-block;
+ position: relative;
+ background-color: var(--variant-color);
+ box-shadow:
+ 0 0 2px rgba(0, 0, 0, 0.5) inset,
+ 0px 2px 3px rgba(0, 0, 0, 0.1);
+}
+
+.d_VariantOption__color::before,
+.d_VariantOption__color::after {
+ content: "";
+ display: block;
+ position: absolute;
+ top: 1px;
+ right: 1px;
+ bottom: 1px;
+ left: 1px;
+ border-radius: 50%;
+}
+.d_VariantOption__color::before {
+ background: linear-gradient(
+ to top,
+ rgba(0, 0, 0, 0.3),
+ rgba(0, 0, 0, 0.1) 60%
+ );
+}
+.d_VariantOption__color::after {
+ background: linear-gradient(
+ to bottom,
+ transparent,
+ rgba(255, 255, 255, 0.9) 10%,
+ rgba(255, 255, 255, 0.8) 30%,
+ transparent 30%
+ );
+ filter: blur(1px);
+}
+
+.d_VariantOption > a {
+ color: inherit;
+ text-decoration: none;
+ position: relative;
+}
+
+.d_VariantOption > strong {
+ font-weight: normal;
+ position: relative;
+}
+
+.d_VariantOption > strong::before,
+.d_VariantOption:hover > a::before {
+ content: "";
+ display: block;
+ width: 100%;
+ height: 2px;
+ bottom: -2px;
+ position: absolute;
+}
+
+.d_VariantOption > strong::before {
+ background-color: black;
+}
+.d_VariantOption:hover > a::before {
+ background-color: var(--variant-color);
+}
diff --git a/examples/hono-tractor-store-2.0/src/decide/components/VariantOption.js b/examples/hono-tractor-store-2.0/src/decide/components/VariantOption.js
new file mode 100644
index 0000000..56d3b91
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/decide/components/VariantOption.js
@@ -0,0 +1,19 @@
+import { html } from "../utils.js";
+
+/**
+ * VariantOption component.
+ * @param {object} props - The properties of the VariantOption component.
+ * @param {string} props.sku - The SKU of the product variant.
+ * @param {string} props.name - The name of the product variant.
+ * @param {boolean} props.selected - Whether the variant is selected.
+ * @param {string} props.color - The color of the product variant.
+ * @returns {string} The VariantOption component markup.
+ */
+export default ({ sku, name, selected, color }) => {
+ return html`
+
+ ${selected
+ ? html`${name} `
+ : html`${name} `}
+ `;
+};
diff --git a/examples/hono-tractor-store-2.0/src/decide/database/database.json b/examples/hono-tractor-store-2.0/src/decide/database/database.json
new file mode 100644
index 0000000..3f4ba9b
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/decide/database/database.json
@@ -0,0 +1,609 @@
+{
+ "products": [
+ {
+ "name": "TerraFirma AutoCultivator T-300",
+ "id": "AU-01",
+ "category": "autonomous",
+ "highlightsa": [
+ "Precision GPS mapping optimizes field coverage.",
+ "Hybrid engine ensures eco-friendly extended operation.",
+ "Fully autonomous with smart obstacle detection and terrain adaptation."
+ ],
+ "variants": [
+ {
+ "name": "Silver",
+ "image": "/cdn/img/product/[size]/AU-01-SI.webp",
+ "sku": "AU-01-SI",
+ "color": "#C0C0C0",
+ "price": 1000
+ }
+ ]
+ },
+ {
+ "name": "SmartFarm Titan",
+ "id": "AU-02",
+ "category": "autonomous",
+ "highlights": [
+ "Advanced autopilot technology for precise farming operations.",
+ "Eco-friendly solar-assisted power system for sustainable use.",
+ "Intelligent AI for real-time field analysis and automated adjustments."
+ ],
+ "variants": [
+ {
+ "name": "Sunset Copper",
+ "image": "/cdn/img/product/[size]/AU-02-OG.webp",
+ "sku": "AU-02-OG",
+ "color": "#dd5219",
+ "price": 4100
+ },
+ {
+ "name": "Cosmic Sapphire",
+ "image": "/cdn/img/product/[size]/AU-02-BL.webp",
+ "sku": "AU-02-BL",
+ "color": "#2A52BE",
+ "price": 4000
+ },
+ {
+ "name": "Verdant Shadow",
+ "image": "/cdn/img/product/[size]/AU-02-GG.webp",
+ "sku": "AU-02-GG",
+ "color": "#005A04",
+ "price": 4000
+ }
+ ]
+ },
+ {
+ "name": "FutureHarvest Navigator",
+ "id": "AU-03",
+ "category": "autonomous",
+ "highlights": [
+ "Autonomous navigation with sub-inch accuracy",
+ "Solar-enhanced hybrid powertrain for extended operation",
+ "Real-time crop and soil health analytics"
+ ],
+ "variants": [
+ {
+ "name": "Turquoise Titan",
+ "image": "/cdn/img/product/[size]/AU-03-TQ.webp",
+ "sku": "AU-03-TQ",
+ "color": "#169fb8",
+ "price": 1600
+ },
+ {
+ "name": "Majestic Violet",
+ "image": "/cdn/img/product/[size]/AU-03-PL.webp",
+ "sku": "AU-03-PL",
+ "color": "#9B5FC0",
+ "price": 1700
+ },
+ {
+ "name": "Scarlet Dynamo",
+ "image": "/cdn/img/product/[size]/AU-03-RD.webp",
+ "sku": "AU-03-RD",
+ "color": "#FF2400",
+ "price": 1900
+ },
+ {
+ "name": "Sunbeam Yellow",
+ "image": "/cdn/img/product/[size]/AU-03-YE.webp",
+ "sku": "AU-03-YE",
+ "color": "#faad00",
+ "price": 1800
+ }
+ ]
+ },
+ {
+ "name": "Sapphire Sunworker 460R",
+ "id": "AU-04",
+ "category": "autonomous",
+ "highlights": [
+ "Next-generation autonomous guidance system for seamless operation",
+ "High-capacity energy storage for all-day work without recharge",
+ "Advanced analytics suite for precision soil and plant health management"
+ ],
+ "variants": [
+ {
+ "name": "Ruby Red",
+ "image": "/cdn/img/product/[size]/AU-04-RD.webp",
+ "sku": "AU-04-RD",
+ "color": "#9B111E",
+ "price": 8700
+ },
+ {
+ "name": "Midnight Onyx",
+ "image": "/cdn/img/product/[size]/AU-04-BK.webp",
+ "sku": "AU-04-BK",
+ "color": "#353839",
+ "price": 8500
+ }
+ ]
+ },
+ {
+ "name": "EcoGrow Crop Commander",
+ "id": "AU-05",
+ "category": "autonomous",
+ "highlights": [
+ "Ultra-precise field navigation technology",
+ "Dual-mode power system for maximum uptime",
+ "On-the-go field data analysis for smart farming decisions"
+ ],
+ "variants": [
+ {
+ "name": "Zestful Horizon",
+ "image": "/cdn/img/product/[size]/AU-05-ZH.webp",
+ "sku": "AU-05-ZH",
+ "color": "#FFA07A",
+ "price": 3400
+ }
+ ]
+ },
+ {
+ "name": "FarmFleet Sovereign",
+ "id": "AU-06",
+ "category": "autonomous",
+ "highlights": [
+ "Robust all-terrain adaptability for diverse farm landscapes",
+ "High-efficiency energy matrix for longer field endurance",
+ "Integrated crop management system with advanced diagnostics"
+ ],
+ "variants": [
+ {
+ "name": "Canary Zenith",
+ "image": "/cdn/img/product/[size]/AU-06-CZ.webp",
+ "sku": "AU-06-CZ",
+ "color": "#FFD700",
+ "price": 2200
+ },
+ {
+ "name": "Minted Jade",
+ "color": "#628882",
+ "image": "/cdn/img/product/[size]/AU-06-MT.webp",
+ "sku": "AU-06-MT",
+ "price": 2100
+ }
+ ]
+ },
+ {
+ "name": "Verde Voyager",
+ "id": "AU-07",
+ "category": "autonomous",
+ "highlights": [
+ "Adaptive drive system intelligently navigates through diverse field conditions",
+ "Clean energy operation with advanced solar battery technology",
+ "High-resolution field scanners for precise agronomy insights"
+ ],
+ "variants": [
+ {
+ "name": "Glacial Mint",
+ "image": "/cdn/img/product/[size]/AU-07-MT.webp",
+ "sku": "AU-07-MT",
+ "color": "#AFDBD2",
+ "price": 4000
+ },
+ {
+ "name": "Sunbeam Yellow",
+ "image": "/cdn/img/product/[size]/AU-07-YE.webp",
+ "sku": "AU-07-YE",
+ "color": "#FFDA03",
+ "price": 5000
+ }
+ ]
+ },
+ {
+ "name": "Field Pioneer",
+ "id": "AU-08",
+ "category": "autonomous",
+ "highlights": [
+ "Automated field traversal with intelligent pathfinding algorithms",
+ "Eco-friendly electric motors paired with high-capacity batteries",
+ "Real-time environmental monitoring for optimal crop growth"
+ ],
+ "variants": [
+ {
+ "name": "Polar White",
+ "image": "/cdn/img/product/[size]/AU-08-WH.webp",
+ "sku": "AU-08-WH",
+ "color": "#E8E8E8",
+ "price": 4500
+ }
+ ]
+ },
+ {
+ "name": "Heritage Workhorse",
+ "id": "CL-01",
+ "category": "classic",
+ "highlights": [
+ "Proven reliability with a touch of modern reliability enhancements",
+ "Robust construction equipped to withstand decades of labor",
+ "User-friendly operation with traditional manual controls"
+ ],
+ "variants": [
+ {
+ "name": "Verdant Field",
+ "image": "/cdn/img/product/[size]/CL-01-GR.webp",
+ "sku": "CL-01-GR",
+ "color": "#6B8E23",
+ "price": 5700
+ },
+ {
+ "name": "Stormy Sky",
+ "image": "/cdn/img/product/[size]/CL-01-GY.webp",
+ "sku": "CL-01-GY",
+ "color": "#708090",
+ "price": 6200
+ }
+ ]
+ },
+ {
+ "name": "Falcon Crest Farm",
+ "id": "CL-02",
+ "category": "classic",
+ "highlights": [
+ "Rugged simplicity meets classic design",
+ "Built-to-last machinery for reliable fieldwork",
+ "Ease of control with straightforward mechanical systems"
+ ],
+ "variants": [
+ {
+ "name": "Cerulean Classic",
+ "image": "/cdn/img/product/[size]/CL-02-BL.webp",
+ "sku": "CL-02-BL",
+ "color": "#007BA7",
+ "price": 2600
+ }
+ ]
+ },
+ {
+ "name": "Falcon Crest Work",
+ "id": "CL-03",
+ "category": "classic",
+ "highlights": [
+ "Vintage engineering with a legacy of durability",
+ "Powerful yet simple mechanics for easy operation and repair",
+ "Classic aesthetics with a robust body, built to last"
+ ],
+ "variants": [
+ {
+ "name": "Meadow Green",
+ "image": "/cdn/img/product/[size]/CL-03-GR.webp",
+ "sku": "CL-03-GR",
+ "color": "#7CFC00",
+ "price": 2300
+ },
+ {
+ "name": "Rustic Rose",
+ "image": "/cdn/img/product/[size]/CL-03-PI.webp",
+ "sku": "CL-03-PI",
+ "color": "#b50018",
+ "price": 2300
+ },
+ {
+ "name": "Harvest Gold",
+ "image": "/cdn/img/product/[size]/CL-03-YE.webp",
+ "sku": "CL-03-YE",
+ "color": "#DA9100",
+ "price": 2300
+ }
+ ]
+ },
+ {
+ "name": "Broadfield Majestic",
+ "id": "CL-04",
+ "category": "classic",
+ "highlights": [
+ "Built with the robust heart of early industrial workhorses",
+ "Simplified mechanics for unparalleled ease of use and maintenance",
+ "A testament to early agricultural machinery with a dependable engine"
+ ],
+ "variants": [
+ {
+ "name": "Oceanic Blue",
+ "image": "/cdn/img/product/[size]/CL-04-BL.webp",
+ "sku": "CL-04-BL",
+ "color": "#0040a6",
+ "price": 2200
+ },
+ {
+ "name": "Rustic Crimson",
+ "image": "/cdn/img/product/[size]/CL-04-RD.webp",
+ "sku": "CL-04-RD",
+ "color": "#7B3F00",
+ "price": 2200
+ },
+ {
+ "name": "Aqua Green",
+ "image": "/cdn/img/product/[size]/CL-04-TQ.webp",
+ "sku": "CL-04-TQ",
+ "color": "#00b298",
+ "price": 2200
+ }
+ ]
+ },
+ {
+ "name": "Countryside Commander",
+ "id": "CL-05",
+ "category": "classic",
+ "highlights": [
+ "Reliable performance with time-tested engineering",
+ "Rugged design for efficient operation across all types of terrain",
+ "Classic operator comfort with modern ergonomic enhancements"
+ ],
+ "variants": [
+ {
+ "name": "Pacific Teal",
+ "image": "/cdn/img/product/[size]/CL-05-PT.webp",
+ "sku": "CL-05-PT",
+ "color": "#479da8",
+ "price": 2700
+ },
+ {
+ "name": "Barn Red",
+ "image": "/cdn/img/product/[size]/CL-05-RD.webp",
+ "sku": "CL-05-RD",
+ "color": "#7C0A02",
+ "price": 2700
+ }
+ ]
+ },
+ {
+ "name": "Danamark Steadfast",
+ "id": "CL-06",
+ "category": "classic",
+ "highlights": [
+ "Engineered for the meticulous demands of Danish agriculture",
+ "Sturdy chassis and reliable mechanics for longevity",
+ "Utilitarian design with practical functionality and comfort"
+ ],
+ "variants": [
+ {
+ "name": "Emerald Forest",
+ "image": "/cdn/img/product/[size]/CL-06-MT.webp",
+ "sku": "CL-06-MT",
+ "color": "#46f5bb",
+ "price": 2800
+ },
+ {
+ "name": "Golden Wheat",
+ "image": "/cdn/img/product/[size]/CL-06-YE.webp",
+ "sku": "CL-06-YE",
+ "color": "#faaf3f",
+ "price": 2800
+ }
+ ]
+ },
+ {
+ "name": "Greenland Rover",
+ "id": "CL-07",
+ "category": "classic",
+ "highlights": [
+ "Engineered to tackle the diverse European terrain with ease",
+ "Sturdy and reliable mechanics known for their longevity",
+ "Ergonomically designed for comfort during long working hours"
+ ],
+ "variants": [
+ {
+ "name": "Forest Fern",
+ "image": "/cdn/img/product/[size]/CL-07-GR.webp",
+ "sku": "CL-07-GR",
+ "color": "#2ea250",
+ "price": 2900
+ },
+ {
+ "name": "Autumn Amber",
+ "image": "/cdn/img/product/[size]/CL-07-YE.webp",
+ "sku": "CL-07-YE",
+ "color": "#FFBF00",
+ "price": 2900
+ }
+ ]
+ },
+ {
+ "name": "Holland Hamster",
+ "id": "CL-08",
+ "category": "classic",
+ "highlights": [
+ "Dutch craftsmanship for precision and quality",
+ "Optimized for tulip fields and versatile European landscapes",
+ "Ergonomic design with a focus on operator comfort and efficiency"
+ ],
+ "variants": [
+ {
+ "name": "Polder Green",
+ "image": "/cdn/img/product/[size]/CL-08-GR.webp",
+ "sku": "CL-08-GR",
+ "color": "#C2B280",
+ "price": 7750
+ },
+ {
+ "name": "Tulip Magenta",
+ "image": "/cdn/img/product/[size]/CL-08-PI.webp",
+ "sku": "CL-08-PI",
+ "color": "#D65282",
+ "price": 7900
+ }
+ ]
+ },
+ {
+ "name": "TerraFirma Veneto",
+ "id": "CL-09",
+ "category": "classic",
+ "highlights": [
+ "Elegant Italian design with sleek lines and a vibrant aesthetic",
+ "Precision mechanics for vineyard and orchard maneuverability",
+ "Comfort-focused design with a flair for the dramatic"
+ ],
+ "variants": [
+ {
+ "name": "Adriatic Blue",
+ "image": "/cdn/img/product/[size]/CL-09-BL.webp",
+ "sku": "CL-09-BL",
+ "color": "#2f6ea3",
+ "price": 2950
+ },
+ {
+ "name": "Tuscan Green",
+ "image": "/cdn/img/product/[size]/CL-09-GR.webp",
+ "sku": "CL-09-GR",
+ "color": "#518b2b",
+ "price": 2950
+ }
+ ]
+ },
+ {
+ "name": "Global Gallant",
+ "id": "CL-10",
+ "category": "classic",
+ "highlights": [
+ "Retro design with a nod to the golden era of farming",
+ "Engine robustness that stands the test of time",
+ "Functional simplicity for ease of operation in any region"
+ ],
+ "variants": [
+ {
+ "name": "Sahara Dawn",
+ "image": "/cdn/img/product/[size]/CL-10-SD.webp",
+ "sku": "CL-10-SD",
+ "color": "#b8a875",
+ "price": 2600
+ },
+ {
+ "name": "Violet Vintage",
+ "image": "/cdn/img/product/[size]/CL-10-VI.webp",
+ "sku": "CL-10-VI",
+ "color": "#8A2BE2",
+ "price": 2600
+ }
+ ]
+ },
+ {
+ "name": "Scandinavia Sower",
+ "id": "CL-11",
+ "category": "classic",
+ "highlights": [
+ "Authentic Swedish engineering for optimal cold-climate performance",
+ "Sturdy build and mechanics for lifelong reliability",
+ "Iconic design reflecting the simplicity and efficiency of Scandinavian style"
+ ],
+ "variants": [
+ {
+ "name": "Baltic Blue",
+ "image": "/cdn/img/product/[size]/CL-11-SK.webp",
+ "sku": "CL-11-SK",
+ "color": "#95c1f4",
+ "price": 3100
+ },
+ {
+ "name": "Nordic Gold",
+ "image": "/cdn/img/product/[size]/CL-11-YE.webp",
+ "sku": "CL-11-YE",
+ "color": "#FFD700",
+ "price": 3100
+ }
+ ]
+ },
+ {
+ "name": "Celerity Cruiser",
+ "id": "CL-12",
+ "category": "classic",
+ "highlights": [
+ "A speedster in the classic tractor segment, unparalleled in quick task completion",
+ "Sleek design with aerodynamic contours for reduced drag",
+ "Enhanced gearbox for smooth acceleration and nimble handling"
+ ],
+ "variants": [
+ {
+ "name": "Velocity Blue",
+ "image": "/cdn/img/product/[size]/CL-12-BL.webp",
+ "sku": "CL-12-BL",
+ "color": "#1E90FF",
+ "price": 3200
+ },
+ {
+ "name": "Rally Red",
+ "image": "/cdn/img/product/[size]/CL-12-RD.webp",
+ "sku": "CL-12-RD",
+ "color": "#ED2939",
+ "price": 3200
+ }
+ ]
+ },
+ {
+ "name": "Rapid Racer",
+ "id": "CL-13",
+ "category": "classic",
+ "highlights": [
+ "Streamlined design for faster field operations",
+ "Optimized gear ratios for efficient power transmission",
+ "Advanced air flow system for superior engine cooling"
+ ],
+ "variants": [
+ {
+ "name": "Speedway Blue",
+ "image": "/cdn/img/product/[size]/CL-13-BL.webp",
+ "sku": "CL-13-BL",
+ "color": "#2679a6",
+ "price": 7500
+ },
+ {
+ "name": "Raceway Red",
+ "image": "/cdn/img/product/[size]/CL-13-RD.webp",
+ "sku": "CL-13-RD",
+ "color": "#CF1020",
+ "price": 7500
+ }
+ ]
+ },
+ {
+ "name": "Caribbean Cruiser",
+ "id": "CL-14",
+ "category": "classic",
+ "highlights": [
+ "Robust construction for enduring performance",
+ "Time-tested design with a proven track record",
+ "Easy-to-service mechanics for long-term reliability"
+ ],
+ "variants": [
+ {
+ "name": "Emerald Grove",
+ "image": "/cdn/img/product/[size]/CL-14-GR.webp",
+ "sku": "CL-14-GR",
+ "color": "#57ae13",
+ "price": 2300
+ },
+ {
+ "name": "Ruby Fields",
+ "image": "/cdn/img/product/[size]/CL-14-RD.webp",
+ "sku": "CL-14-RD",
+ "color": "#cd2b1e",
+ "price": 2300
+ }
+ ]
+ },
+ {
+ "name": "Fieldmaster Classic",
+ "id": "CL-15",
+ "category": "classic",
+ "highlights": [
+ "Timeless design with a focus on comfort and control",
+ "Efficient fuel consumption with a powerful engine",
+ "Versatile functionality for all types of agricultural work"
+ ],
+ "variants": [
+ {
+ "name": "Vintage Pink",
+ "image": "/cdn/img/product/[size]/CL-15-PI.webp",
+ "sku": "CL-15-PI",
+ "color": "#e1949e",
+ "price": 6200
+ },
+ {
+ "name": "Sahara Dust",
+ "image": "/cdn/img/product/[size]/CL-15-SD.webp",
+ "sku": "CL-15-SD",
+ "color": "#dec78c",
+ "price": 6200
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/examples/hono-tractor-store-2.0/src/decide/database/import.js b/examples/hono-tractor-store-2.0/src/decide/database/import.js
new file mode 100644
index 0000000..8f810f9
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/decide/database/import.js
@@ -0,0 +1,19 @@
+// reads product data from a central source and writes the necessary data for this system.
+// here we are reading from a js file and writing to a json file.
+// in a real world scenario, you would read from a product service and write to a database.
+
+import fs from "fs";
+import path from "path";
+import products from "../../../products.js";
+
+/**
+ * @type {Database}
+ */
+const database = {
+ products,
+};
+
+const __dirname = path.dirname(new URL(import.meta.url).pathname);
+const databaseFile = path.resolve(__dirname, "./database.json");
+console.log("Writing database to", databaseFile);
+fs.writeFileSync(databaseFile, JSON.stringify(database, null, 2));
diff --git a/examples/hono-tractor-store-2.0/src/decide/database/index.js b/examples/hono-tractor-store-2.0/src/decide/database/index.js
new file mode 100644
index 0000000..19eb799
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/decide/database/index.js
@@ -0,0 +1,5 @@
+/**
+ * @type {Database}
+ */
+import data from "./database.json" assert { type: "json" };
+export default data;
diff --git a/examples/hono-tractor-store-2.0/src/decide/index.js b/examples/hono-tractor-store-2.0/src/decide/index.js
new file mode 100644
index 0000000..0524981
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/decide/index.js
@@ -0,0 +1 @@
+export { default as ProductPage } from "./pages/ProductPage.js";
diff --git a/examples/hono-tractor-store-2.0/src/decide/pages/ProductPage.css b/examples/hono-tractor-store-2.0/src/decide/pages/ProductPage.css
new file mode 100644
index 0000000..8ec51a8
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/decide/pages/ProductPage.css
@@ -0,0 +1,63 @@
+.d_ProductPage {
+ margin: 0 auto;
+ max-width: calc(1000px + var(--outer-space) * 2);
+ padding: 0 var(--outer-space);
+}
+
+.d_ProductPage__details {
+ @media (max-width: 499px) {
+ grid-template:
+ "image"
+ "information";
+ }
+
+ @media (min-width: 500px) and (max-width: 999px) {
+ grid-template:
+ ". image. "
+ ". information ." / 1fr 3fr 1fr;
+ }
+
+ @media (min-width: 1000px) {
+ grid-template: "image information" 1fr / 4fr 5fr;
+ gap: 10%;
+ min-height: clamp(400px, calc(70vh - 400px), 650px);
+ }
+
+ display: grid;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 1rem;
+}
+
+.d_ProductPage__productImage {
+ grid-area: image;
+ width: 100%;
+ height: auto;
+}
+
+.d_ProductPage__productInformation {
+ grid-area: information;
+}
+
+.d_ProductPage__title {
+ margin: 0;
+ font-size: 40px;
+}
+
+.d_ProductPage__highlights {
+ padding: 0;
+ list-style: none;
+}
+
+.d_ProductPage__highlights > li {
+ margin-bottom: 1rem;
+}
+
+.d_ProductPage__variants {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 1.5rem;
+ list-style: none;
+ margin-top: 3rem;
+ padding: 0;
+}
diff --git a/examples/hono-tractor-store-2.0/src/decide/pages/ProductPage.js b/examples/hono-tractor-store-2.0/src/decide/pages/ProductPage.js
new file mode 100644
index 0000000..59e0beb
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/decide/pages/ProductPage.js
@@ -0,0 +1,73 @@
+import VariantOption from "../components/VariantOption.js";
+import Header from "../../explore/components/Header.js";
+import Footer from "../../explore/components/Footer.js";
+import AddToCart from "../../checkout/components/AddToCart.js";
+import Recommendations from "../../explore/components/Recommendations.js";
+import { html, src, srcset } from "../utils.js";
+import data from "../database/index.js";
+import Meta from "../components/Meta.js";
+
+/**
+ * ProductPage component.
+ * @param {object} props - The properties of the ProductPage component.
+ * @param {string} props.id - The ID of the product.
+ * @param {string} props.sku - The SKU of the selected variant.
+ * @param {HonoContext} props.c - The hone object.
+ * @returns {string} The ProductPage component markup.
+ */
+export default ({ id, sku, c }) => {
+ const {
+ name,
+ variants,
+ highlights = [],
+ } = data.products.find((p) => p.id === id);
+ const variant = variants.find((v) => v.sku === sku) || variants[0];
+
+ return html`
+
+
+ Tractor Store
+
+
+
+ ${Meta()}
+
+
+ ${Header({ c })}
+
+
+
+
+
${name}
+
+ ${highlights
+ .map((highlight) => html`${highlight} `)
+ .join("")}
+
+
+ ${variants
+ .map((v) =>
+ VariantOption({ ...v, selected: v.sku === variant.sku }),
+ )
+ .join("")}
+
+ ${AddToCart({ sku: variant.sku })}
+
+
+ ${Recommendations({ skus: [variant.sku] })}
+
+ ${Footer()}
+
+
+
+
+
+ `;
+};
diff --git a/examples/hono-tractor-store-2.0/src/decide/scripts.js b/examples/hono-tractor-store-2.0/src/decide/scripts.js
new file mode 100644
index 0000000..2d3ccd2
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/decide/scripts.js
@@ -0,0 +1 @@
+/* client side javascript */
diff --git a/examples/hono-tractor-store-2.0/src/decide/styles.css b/examples/hono-tractor-store-2.0/src/decide/styles.css
new file mode 100644
index 0000000..0320128
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/decide/styles.css
@@ -0,0 +1,32 @@
+@import url("./pages/ProductPage.css");
+@import url("./components/VariantOption.css");
+
+@font-face {
+ font-family: "Raleway";
+ src: url("https://cdn.the-tractor.store/cdn/font/Raleway-Regular.woff2")
+ format("woff2");
+ font-weight: normal;
+ font-style: normal;
+}
+
+* {
+ box-sizing: border-box;
+}
+
+html {
+ font-family: Raleway, "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 16px;
+}
+
+body {
+ padding: 0;
+ margin: 0;
+}
+
+p {
+ line-height: 1.5;
+}
+
+:root {
+ --outer-space: 1.5rem;
+}
diff --git a/examples/hono-tractor-store-2.0/src/decide/types.js b/examples/hono-tractor-store-2.0/src/decide/types.js
new file mode 100644
index 0000000..5cd0c0a
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/decide/types.js
@@ -0,0 +1,22 @@
+/**
+ * @typedef {object} Variant
+ * @property {string} name - The name of the variant.
+ * @property {string} image - The URL of the variant image.
+ * @property {string} sku - The SKU of the variant.
+ * @property {string} color - The color of the variant.
+ * @property {number} price - The price of the variant.
+ */
+
+/**
+ * @typedef {object} Product
+ * @property {string} name - The name of the product.
+ * @property {string} id - The ID of the product.
+ * @property {string} category - The category of the product.
+ * @property {string[]} highlights - The highlights of the product.
+ * @property {Variant[]} variants - The variants of the product.
+ */
+
+/**
+ * @typedef {object} Database
+ * @property {Product[]} products - The products in the database.
+ */
diff --git a/examples/hono-tractor-store-2.0/src/decide/utils.js b/examples/hono-tractor-store-2.0/src/decide/utils.js
new file mode 100644
index 0000000..33f29bd
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/decide/utils.js
@@ -0,0 +1,29 @@
+// for prettier formatting
+// see https://prettier.io/docs/en/options.html#embedded-language-formatting
+export const html = String.raw;
+
+// use the image server if not using local images
+export const IMAGE_SERVER =
+ typeof process === "undefined" || process.env.USE_LOCAL_IMAGES !== "true"
+ ? "https://cdn.the-tractor.store"
+ : "";
+
+/**
+ * Replaces the placeholder "[size]" in the image URL with the specified size.
+ * @param {string} image - The original image URL.
+ * @param {number} size - The desired size for the image.
+ * @returns {string} - The modified image URL with the size placeholder replaced.
+ */
+export function src(image, size) {
+ return IMAGE_SERVER + image.replace("[size]", `${size}`);
+}
+
+/**
+ * Generates the srcset attribute value for an image with different sizes.
+ * @param {string} image - The original image URL.
+ * @param {number[]} sizes - The array of sizes for the image.
+ * @returns {string} - The srcset attribute value.
+ */
+export function srcset(image, sizes = []) {
+ return sizes.map((size) => `${src(image, size)} ${size}w`).join(", ");
+}
diff --git a/examples/hono-tractor-store-2.0/src/explore/components/Button.css b/examples/hono-tractor-store-2.0/src/explore/components/Button.css
new file mode 100644
index 0000000..3f13186
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/components/Button.css
@@ -0,0 +1,115 @@
+.e_Button {
+ --button-height: 50px;
+ display: block;
+ height: var(--button-height);
+ width: 100%;
+ border-radius: calc(var(--button-height) / 2);
+ padding: 2px;
+ border: 0;
+ background: linear-gradient(180deg, rgb(168, 168, 168), rgb(255, 255, 255)),
+ var(--accent-color);
+ box-shadow:
+ 0 -2px 3px rgb(229, 229, 229),
+ 0 2px 3px 2px rgb(255, 255, 255),
+ 0 0 25px rgba(0, 0, 0, 0.05),
+ 0 -10px 5px rgb(255, 255, 255) inset;
+ position: relative;
+ text-transform: uppercase;
+ letter-spacing: 0.3em;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+ text-decoration: none;
+ font-size: 16px;
+}
+
+.e_Button--primary {
+ --accent-color: #ff5a55;
+ color: #fff;
+}
+
+.e_Button--secondary {
+ --accent-color: #ffffff;
+ color: #000;
+}
+
+.e_Button--rounded {
+ --button-height: 66px;
+ width: var(--button-height);
+}
+
+.e_Button[disabled] {
+ --accent-color: #d3d3d3;
+ pointer-events: none;
+}
+
+.e_Button::before {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ border-radius: inherit;
+ left: 0;
+ background: linear-gradient(
+ 0deg,
+ rgba(0, 0, 0, 0.19),
+ rgba(255, 255, 255, 0.3)
+ ),
+ var(--accent-color);
+ content: "";
+ box-shadow: 0 2px 1px -1px rgba(0, 0, 0, 0.1);
+ display: block;
+ transition:
+ transform 0.3s,
+ box-shadow 0.3s,
+ background 0.1s 0.2s;
+}
+
+.e_Button__inner {
+ position: relative;
+ padding-left: 20px;
+ padding-right: 20px;
+ background-color: var(--accent-color);
+ height: calc(var(--button-height) - 4px);
+ border-radius: inherit;
+ display: grid;
+ place-content: center;
+ transition:
+ transform 0.3s,
+ background 0.3s,
+ box-shadow 0.3s;
+ -webkit-user-select: none; /* Safari */
+ -ms-user-select: none; /* IE 10 and IE 11 */
+ user-select: none;
+ white-space: nowrap;
+}
+
+.e_Button:hover .e_Button__inner,
+.e_Button:focus .e_Button__inner {
+ background: linear-gradient(0deg, rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05)),
+ var(--accent-color);
+}
+
+.e_Button:focus {
+ /* outline: none; */
+}
+
+.e_Button:active::before {
+ background: linear-gradient(0deg, rgba(0, 0, 0, 0.09), rgba(0, 0, 0, 0.16)),
+ var(--accent-color);
+ box-shadow:
+ 0 0 3px rgba(0, 0, 0, 0.6) inset,
+ 0 2px 1px -1px rgba(0, 0, 0, 0.1);
+ transform: scale(0.97);
+ transition:
+ all 0.1s,
+ background 0.05s;
+}
+
+.e_Button:active .e_Button__inner {
+ transform: scale(0.97);
+ background: linear-gradient(0deg, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)),
+ var(--accent-color);
+ transition: all 0.1s;
+ box-shadow:
+ 0 5px 5px rgba(0, 0, 0, 0.2) inset,
+ 0 -3px 3px rgba(255, 255, 255, 0.2) inset;
+}
diff --git a/examples/hono-tractor-store-2.0/src/explore/components/Button.js b/examples/hono-tractor-store-2.0/src/explore/components/Button.js
new file mode 100644
index 0000000..302b715
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/components/Button.js
@@ -0,0 +1,26 @@
+import { html } from "../utils.js";
+
+export default ({
+ href,
+ type,
+ value,
+ disabled,
+ rounded,
+ className,
+ children,
+ dataId,
+ variant = "secondary",
+}) => {
+ const tag = href ? "a" : "button";
+ return html` <${tag}
+ ${disabled ? "disabled" : ""}
+ ${href ? `href="${href}"` : ""}
+ ${type ? `type="${type}"` : ""}
+ ${value ? `value="${value}"` : ""}
+ ${dataId ? `data-id="${dataId}"` : ""}
+ class="e_Button e_Button--${variant} ${className} ${rounded ? "e_Button--rounded" : ""}"
+ ontouchstart
+ >
+ ${children}
+ ${tag}>`;
+};
diff --git a/examples/hono-tractor-store-2.0/src/explore/components/Filter.css b/examples/hono-tractor-store-2.0/src/explore/components/Filter.css
new file mode 100644
index 0000000..7ec2f41
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/components/Filter.css
@@ -0,0 +1,41 @@
+.e_Filter {
+ display: flex;
+ justify-content: flex-end;
+ margin-bottom: var(--outer-space);
+ gap: 1rem;
+}
+
+.e_Filter ul {
+ display: flex;
+ list-style: none;
+ gap: 0.8rem;
+ padding: 0;
+ margin: 0;
+}
+
+.e_Filter li {
+ position: relative;
+}
+
+.e_Filter a {
+ color: inherit;
+ text-decoration: none;
+}
+
+.e_Filter__filter--active::before,
+.e_Filter a:hover::before {
+ content: "";
+ display: block;
+ width: 100%;
+ height: 2px;
+ bottom: -2px;
+ position: absolute;
+}
+
+.e_Filter__filter--active::before {
+ background-color: black;
+}
+
+.e_Filter a:hover::before {
+ background-color: #ff5a55;
+}
diff --git a/examples/hono-tractor-store-2.0/src/explore/components/Filter.js b/examples/hono-tractor-store-2.0/src/explore/components/Filter.js
new file mode 100644
index 0000000..5969a8a
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/components/Filter.js
@@ -0,0 +1,16 @@
+import { html } from "../utils.js";
+
+export default ({ filters }) => {
+ return html`
+ Filter:
+
+ ${filters
+ .map((f) =>
+ f.active
+ ? `${f.name} `
+ : `${f.name} `,
+ )
+ .join("")}
+
+
`;
+};
diff --git a/examples/hono-tractor-store-2.0/src/explore/components/Footer.css b/examples/hono-tractor-store-2.0/src/explore/components/Footer.css
new file mode 100644
index 0000000..30870f6
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/components/Footer.css
@@ -0,0 +1,138 @@
+.e_Footer {
+ max-width: calc(1000px + var(--outer-space) * 2);
+ margin: 1rem auto 2rem;
+ align-items: center;
+}
+
+.e_Footer__cutter {
+ @media (min-width: 1100px) {
+ margin: 0 calc(var(--outer-space) * -1);
+ }
+ overflow: hidden;
+ padding: 30px 0 0;
+}
+
+.e_Footer__inner {
+ @media (max-width: 999px) {
+ padding: 3rem var(--outer-space);
+ }
+
+ @media (min-width: 1000px) {
+ display: flex;
+ padding: 3rem calc(2 * var(--outer-space));
+ }
+
+ @media (min-width: 1000px) and (max-width: 1099px) {
+ padding: 3rem var(--outer-space);
+ display: flex;
+ }
+
+ min-height: 135px;
+ box-shadow: 0 10px 20px 10px #eb5b5920;
+ border-top: 1px solid #eeebe2;
+ mix-blend-mode: darken;
+}
+
+.e_Footer__inner::before,
+.e_Footer__inner::after {
+ position: absolute;
+ top: 0;
+ width: 48px;
+ height: calc(100% + 30px);
+}
+
+@media (min-width: 1000px) {
+ .e_Footer__inner::before,
+ .e_Footer__inner::after {
+ content: "";
+ display: block;
+ }
+}
+
+@media (max-width: 1099px) {
+ .e_Footer__inner::before,
+ .e_Footer__inner::after {
+ width: var(--outer-space);
+ }
+}
+
+@media (min-width: 1100px) {
+ .e_Footer__inner::before,
+ .e_Footer__inner::after {
+ width: calc(var(--outer-space) * 2);
+ }
+}
+
+.e_Footer__inner::before {
+ left: 0;
+ background: linear-gradient(
+ 90deg,
+ rgba(255, 255, 255, 1),
+ rgba(255, 255, 255, 0)
+ );
+}
+
+@media (min-width: 1100px) {
+ .e_Footer__inner::before {
+ left: calc(var(--outer-space) * -1);
+ }
+}
+
+.e_Footer__inner::after {
+ right: 0;
+ background: linear-gradient(
+ -90deg,
+ rgba(255, 255, 255, 1),
+ rgba(255, 255, 255, 0)
+ );
+}
+
+@media (min-width: 1100px) {
+ .e_Footer__inner::after {
+ right: calc(var(--outer-space) * -1);
+ }
+}
+
+.e_Footer a {
+ color: #ff5a55;
+}
+
+.e_Footer__initiative {
+ display: flex;
+ gap: 1rem;
+ align-items: flex-start;
+ flex: 1;
+ margin-bottom: 2rem;
+}
+
+.e_Footer__initiative,
+.e_Footer__credits {
+ flex-grow: 1;
+ flex-shrink: 1;
+ flex-basis: 50%;
+}
+
+.e_Footer__initiative img {
+ margin-top: 4px;
+ width: 45px;
+}
+
+.e_Footer__initiative p {
+ margin: 0;
+}
+
+.e_Footer__credits h4 {
+ margin: 0;
+ font-size: 1em;
+ font-weight: normal;
+ color: #ff5a55;
+}
+
+.e_Footer__credits p {
+ margin: 0 0 1rem;
+}
+
+.e_Footer__credits img {
+ display: inline-block;
+ width: 15px;
+}
diff --git a/examples/hono-tractor-store-2.0/src/explore/components/Footer.js b/examples/hono-tractor-store-2.0/src/explore/components/Footer.js
new file mode 100644
index 0000000..382b5c4
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/components/Footer.js
@@ -0,0 +1,53 @@
+import { html, IMAGE_SERVER } from "../utils.js";
+
+export default () => {
+ return html``;
+};
diff --git a/examples/hono-tractor-store-2.0/src/explore/components/Header.css b/examples/hono-tractor-store-2.0/src/explore/components/Header.css
new file mode 100644
index 0000000..ab33f0d
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/components/Header.css
@@ -0,0 +1,135 @@
+.e_Header {
+ max-width: calc(1000px + var(--outer-space) * 2);
+ margin: 1rem auto 0;
+ align-items: center;
+}
+
+.e_Header__cutter {
+ @media (min-width: 1100px) {
+ margin: 0 calc(var(--outer-space) * -1);
+ }
+ overflow: hidden;
+ padding: 0 0 30px;
+}
+
+.e_Header__inner {
+ @media (max-width: 999px) {
+ display: grid;
+ grid-template:
+ "logo mini-cart"
+ "navigation navigation";
+ }
+
+ @media (min-width: 1000px) {
+ padding: 0 var(--outer-space);
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ }
+
+ @media (min-width: 1000px) and (max-width: 1099px) {
+ padding: 0;
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ }
+
+ min-height: 135px;
+ box-shadow: 0 0 20px 10px #eb5b5920;
+ border-bottom: 1px solid #eeebe2;
+ mix-blend-mode: darken;
+ flex: 1;
+}
+
+.e_Header__inner::before,
+.e_Header__inner::after {
+ position: absolute;
+ top: 0;
+ width: 48px;
+ height: calc(100% + 30px);
+}
+
+@media (min-width: 1000px) {
+ .e_Header__inner::before,
+ .e_Header__inner::after {
+ content: "";
+ display: block;
+ }
+}
+
+@media (max-width: 1099px) {
+ .e_Header__inner::before,
+ .e_Header__inner::after {
+ width: var(--outer-space);
+ }
+}
+
+@media (min-width: 1100px) {
+ .e_Header__inner::before,
+ .e_Header__inner::after {
+ width: calc(var(--outer-space) * 2);
+ }
+}
+
+.e_Header__inner::before {
+ left: 0;
+ background: linear-gradient(
+ 90deg,
+ rgba(255, 255, 255, 1),
+ rgba(255, 255, 255, 0)
+ );
+}
+
+@media (min-width: 1100px) {
+ .e_Header__inner::before {
+ left: calc(var(--outer-space) * -1);
+ }
+}
+
+.e_Header__inner::after {
+ right: 0;
+ background: linear-gradient(
+ -90deg,
+ rgba(255, 255, 255, 1),
+ rgba(255, 255, 255, 0)
+ );
+}
+
+@media (min-width: 1100px) {
+ .e_Header__inner::after {
+ right: calc(var(--outer-space) * -1);
+ }
+}
+
+.e_Header__logo {
+ @media (max-width: 499px) {
+ width: 170px;
+ }
+
+ @media (min-width: 500px) {
+ width: 270px;
+ }
+ display: block;
+}
+
+.e_Header__link {
+ grid-area: logo;
+ display: flex;
+ margin-left: var(--outer-space);
+ align-items: center;
+}
+
+.e_Header__cart {
+ grid-area: mini-cart;
+ display: flex;
+ justify-content: flex-end;
+}
+
+.e_Header__navigation {
+ @media (max-width: 999px) {
+ margin-bottom: 1rem;
+ }
+ grid-area: navigation;
+}
diff --git a/examples/hono-tractor-store-2.0/src/explore/components/Header.js b/examples/hono-tractor-store-2.0/src/explore/components/Header.js
new file mode 100644
index 0000000..5faf85c
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/components/Header.js
@@ -0,0 +1,27 @@
+import MiniCart from "../../checkout/components/MiniCart.js";
+import Navigation from "./Navigation.js";
+import { html, IMAGE_SERVER } from "../utils.js";
+
+/**
+ * Header component.
+ * @param {object} props - The properties of the Header component.
+ * @param {HonoContext} props.c - The hono context.
+ * @returns {string} The Header component markup.
+ */
+export default ({ c }) => {
+ return html``;
+};
diff --git a/examples/hono-tractor-store-2.0/src/explore/components/Meta.js b/examples/hono-tractor-store-2.0/src/explore/components/Meta.js
new file mode 100644
index 0000000..0165473
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/components/Meta.js
@@ -0,0 +1,37 @@
+import { html } from "../utils.js";
+
+export default () => {
+ return html`
+
+
+
+
+
+
+
+
+
+
+ `;
+};
diff --git a/examples/hono-tractor-store-2.0/src/explore/components/Navigation.css b/examples/hono-tractor-store-2.0/src/explore/components/Navigation.css
new file mode 100644
index 0000000..e416811
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/components/Navigation.css
@@ -0,0 +1,58 @@
+.e_Navigation {
+ flex-grow: 1;
+}
+
+.e_Navigation__list {
+ display: flex;
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ justify-content: center;
+ gap: 2rem;
+}
+
+.e_Navigation__item a {
+ position: relative;
+ display: block;
+ padding: 5px 20px;
+ color: #000;
+ text-transform: uppercase;
+ font-size: 13px;
+ letter-spacing: 4px;
+ text-decoration: none;
+ background: linear-gradient(0deg, #f5f5f5, #fff);
+ border-bottom: 1px solid #eeebe2;
+}
+
+.e_Navigation__item:hover a,
+.e_Navigation__item:focus a {
+ border-bottom-color: #757165;
+}
+
+.e_Navigation__item a::before,
+.e_Navigation__item a::after {
+ display: block;
+ content: "";
+ position: absolute;
+ width: 20px;
+ height: calc(100% + 1px);
+ top: 0;
+}
+
+.e_Navigation__item a::before {
+ left: 0;
+ background: linear-gradient(
+ -90deg,
+ rgba(255, 255, 255, 0),
+ rgba(255, 255, 255, 1)
+ );
+}
+
+.e_Navigation__item a::after {
+ right: 0;
+ background: linear-gradient(
+ 90deg,
+ rgba(255, 255, 255, 0),
+ rgba(255, 255, 255, 1)
+ );
+}
diff --git a/examples/hono-tractor-store-2.0/src/explore/components/Navigation.js b/examples/hono-tractor-store-2.0/src/explore/components/Navigation.js
new file mode 100644
index 0000000..50d3d16
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/components/Navigation.js
@@ -0,0 +1,10 @@
+import { html } from "../utils.js";
+
+export default () => {
+ return html`
+
+ `;
+};
diff --git a/examples/hono-tractor-store-2.0/src/explore/components/Product.css b/examples/hono-tractor-store-2.0/src/explore/components/Product.css
new file mode 100644
index 0000000..aad3d81
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/components/Product.css
@@ -0,0 +1,29 @@
+.e_Product {
+ margin: 0;
+}
+
+.e_Product_link {
+ text-decoration: none;
+ color: black;
+}
+
+.e_Product_image {
+ width: 100%;
+ height: auto;
+ aspect-ratio: 1 / 1;
+ display: block;
+}
+
+.e_Product_name {
+ margin: 12px 0 8px;
+ color: black;
+ text-align: center;
+ display: block;
+}
+
+.e_Product_price {
+ margin: 8px 0;
+ color: black;
+ text-align: center;
+ display: block;
+}
diff --git a/examples/hono-tractor-store-2.0/src/explore/components/Product.js b/examples/hono-tractor-store-2.0/src/explore/components/Product.js
new file mode 100644
index 0000000..9f651fe
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/components/Product.js
@@ -0,0 +1,23 @@
+import { html, src, srcset, fmtprice } from "../utils.js";
+
+/**
+ * Product component.
+ * @param {Product} props - The properties of the Product component.
+ * @returns {string} The Product component markup.
+ */
+export default ({ name, url, image, startPrice }) => {
+ return html`
+
+
+ ${name}
+ ${fmtprice(startPrice)}
+
+ `;
+};
diff --git a/examples/hono-tractor-store-2.0/src/explore/components/Recommendation.css b/examples/hono-tractor-store-2.0/src/explore/components/Recommendation.css
new file mode 100644
index 0000000..5499588
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/components/Recommendation.css
@@ -0,0 +1,28 @@
+.e_Recommendation {
+ margin: 0;
+}
+
+@media (min-width: 500px) and (max-width: 999px) {
+ .e_Recommendation:nth-child(4) {
+ display: none;
+ }
+}
+
+.e_Recommendation_link {
+ text-decoration: none;
+ color: black;
+}
+
+.e_Recommendation_image {
+ width: 100%;
+ height: auto;
+ aspect-ratio: 1 / 1;
+ display: block;
+}
+
+.e_Recommendation_name {
+ margin: 1rem 0;
+ color: black;
+ text-align: center;
+ display: block;
+}
diff --git a/examples/hono-tractor-store-2.0/src/explore/components/Recommendation.js b/examples/hono-tractor-store-2.0/src/explore/components/Recommendation.js
new file mode 100644
index 0000000..4b32f28
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/components/Recommendation.js
@@ -0,0 +1,22 @@
+import { html, src, srcset } from "../utils.js";
+
+/**
+ * Recommendation component.
+ * @param {RecoItem} props - The properties of the Recommendation component.
+ * @returns {string} The Recommendation component markup.
+ */
+export default ({ image, url, name }) => {
+ return html`
+
+
+ ${name}
+
+ `;
+};
diff --git a/examples/hono-tractor-store-2.0/src/explore/components/Recommendations.css b/examples/hono-tractor-store-2.0/src/explore/components/Recommendations.css
new file mode 100644
index 0000000..5e37c31
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/components/Recommendations.css
@@ -0,0 +1,24 @@
+.e_Recommendations {
+ padding: 1rem;
+ margin: 0 -1rem 3rem;
+}
+
+.e_Recommendations_list {
+ @media (max-width: 499px) {
+ grid-template-columns: 1fr 1fr;
+ }
+
+ @media (min-width: 500px) and (max-width: 999px) {
+ grid-template-columns: 1fr 1fr 1fr;
+ }
+
+ @media (min-width: 1000px) {
+ grid-template-columns: repeat(4, 1fr);
+ }
+
+ position: relative;
+ display: grid;
+ gap: 40px;
+ padding: 0;
+ list-style-type: none;
+}
diff --git a/examples/hono-tractor-store-2.0/src/explore/components/Recommendations.js b/examples/hono-tractor-store-2.0/src/explore/components/Recommendations.js
new file mode 100644
index 0000000..1d6794f
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/components/Recommendations.js
@@ -0,0 +1,83 @@
+import data from "../database/index.js";
+import { html } from "../utils.js";
+import Recommendation from "./Recommendation.js";
+
+const r = data.recommendations;
+
+/**
+ * Calculates the average color of an array of colors.
+ * @param {number[][]} colors - The array of rgb.
+ * @returns {number[]} The average rgb.
+ */
+function averageColor(colors) {
+ const total = colors.reduce(
+ (acc, [r, g, b]) => [acc[0] + r, acc[1] + g, acc[2] + b],
+ [0, 0, 0],
+ );
+ return total.map((c) => Math.round(c / colors.length));
+}
+
+/**
+ * Finds the colors of a list of SKUs.
+ * @param {string[]} skus - The array of SKUs.
+ * @returns {number[][]} The array of colors.
+ */
+function skusToColors(skus) {
+ return skus.filter((sku) => r[sku]).map((sku) => r[sku].rgb);
+}
+
+/**
+ * Calculates the distance between two RGB colors.
+ * @param {number[]} rgb1 - The first RGB color.
+ * @param {number[]} rgb2 - The second RGB color.
+ * @returns {number} The distance between the colors.
+ */
+function colorDistance(rgb1, rgb2) {
+ const [r1, g1, b1] = rgb1;
+ const [r2, g2, b2] = rgb2;
+ return Math.sqrt(
+ Math.pow(r1 - r2, 2) + Math.pow(g1 - g2, 2) + Math.pow(b1 - b2, 2),
+ );
+}
+
+/**
+ * Finds recommendations based on color similarity.
+ * @param {string[]} skus - The array of SKUs.
+ * @param {number} [length=5] - The number of recommendations to return.
+ * @returns {RecoItem[]} The array of recommendations.
+ */
+function recosForSkus(skus, length = 4) {
+ const targetRgb = averageColor(skusToColors(skus));
+ let distances = [];
+
+ for (let sku in r) {
+ if (!skus.includes(sku)) {
+ const distance = colorDistance(targetRgb, r[sku].rgb);
+ distances.push({ sku, distance });
+ }
+ }
+
+ distances.sort((a, b) => a.distance - b.distance);
+ return distances.slice(0, length).map((d) => r[d.sku]);
+}
+
+/**
+ * Recommendations component.
+ * @param {object} props - The properties of the Recommendations component.
+ * @param {string[]} props.skus - The SKUs of the variants to get recommendations for.
+ * @returns {string} The component markup.
+ */
+export default ({ skus }) => {
+ const recos = recosForSkus(skus);
+ return recos.length
+ ? html`
+
Recommendations
+
+ ${recos.map(Recommendation).join("")}
+
+
`
+ : "";
+};
diff --git a/examples/hono-tractor-store-2.0/src/explore/components/Store.js b/examples/hono-tractor-store-2.0/src/explore/components/Store.js
new file mode 100644
index 0000000..781e3cd
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/components/Store.js
@@ -0,0 +1,25 @@
+import { html, src, srcset } from "../utils.js";
+
+/**
+ * Store component.
+ * @param {Store} props - The properties of the Store component.
+ * @returns {string} The Product component markup.
+ */
+export default ({ name, image, street, city }) => {
+ return html`
+
+
+
+ ${name}
+ ${street}
+ ${city}
+
+
+ `;
+};
diff --git a/examples/hono-tractor-store-2.0/src/explore/components/StorePicker.css b/examples/hono-tractor-store-2.0/src/explore/components/StorePicker.css
new file mode 100644
index 0000000..d0cc7f0
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/components/StorePicker.css
@@ -0,0 +1,52 @@
+.e_StorePicker_control {
+ padding: 2rem;
+ margin: 0 0 0 -2rem;
+}
+
+.e_StorePicker_dialog::backdrop {
+ backdrop-filter: blur(2px);
+}
+
+.e_StorePicker_dialog {
+ overflow: visible;
+ border: none;
+ padding: 1rem 2rem;
+ max-height: unset;
+}
+
+.e_StorePicker_list {
+ display: grid;
+ gap: 3rem;
+ list-style-type: none;
+ padding: 0;
+ grid-template-columns: repeat(2, 1fr);
+}
+
+.e_StorePicker_image {
+ display: block;
+ max-width: 200px;
+ width: auto;
+ height: auto;
+}
+
+.e_StorePicker_address {
+ width: 200px;
+ margin: 1rem 0;
+}
+
+.e_StorePicker_control {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 1rem;
+ max-width: 500px;
+}
+
+.e_StorePicker_selected {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 1rem;
+}
+
+.e_StorePicker_selected:empty {
+ display: none;
+}
diff --git a/examples/hono-tractor-store-2.0/src/explore/components/StorePicker.js b/examples/hono-tractor-store-2.0/src/explore/components/StorePicker.js
new file mode 100644
index 0000000..ba7332f
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/components/StorePicker.js
@@ -0,0 +1,53 @@
+import data from "../database/index.js";
+import { html, src, srcset } from "../utils.js";
+import Button from "./Button.js";
+
+export default () => {
+ return html`
+
+
+ ${Button({
+ className: "e_StorePicker_choose",
+ type: "button",
+ children: "choose a store",
+ })}
+
+
+
+
Stores
+
+ ${data.stores
+ .map(
+ (s) =>
+ html`
+
+
+
+ ${s.name}
+ ${s.street}
+ ${s.city}
+
+
+ ${Button({
+ className: "e_StorePicker_select",
+ type: "button",
+ children: "select",
+ dataId: s.id,
+ })}
+ `,
+ )
+ .join("")}
+
+
+
+
`;
+};
diff --git a/examples/hono-tractor-store-2.0/src/explore/database/database.json b/examples/hono-tractor-store-2.0/src/explore/database/database.json
new file mode 100644
index 0000000..2c8a98a
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/database/database.json
@@ -0,0 +1,738 @@
+{
+ "teaser": [
+ {
+ "title": "Classic Tractors",
+ "image": "/cdn/img/scene/[size]/classics.webp",
+ "url": "/products/classic"
+ },
+ {
+ "title": "Autonomous Tractors",
+ "image": "/cdn/img/scene/[size]/autonomous.webp",
+ "url": "/products/autonomous"
+ }
+ ],
+ "categories": [
+ {
+ "key": "classic",
+ "name": "Classics",
+ "products": [
+ {
+ "name": "Heritage Workhorse",
+ "id": "CL-01",
+ "image": "/cdn/img/product/[size]/CL-01-GR.webp",
+ "startPrice": 5700,
+ "url": "/product/CL-01"
+ },
+ {
+ "name": "Falcon Crest Farm",
+ "id": "CL-02",
+ "image": "/cdn/img/product/[size]/CL-02-BL.webp",
+ "startPrice": 2600,
+ "url": "/product/CL-02"
+ },
+ {
+ "name": "Falcon Crest Work",
+ "id": "CL-03",
+ "image": "/cdn/img/product/[size]/CL-03-GR.webp",
+ "startPrice": 2300,
+ "url": "/product/CL-03"
+ },
+ {
+ "name": "Broadfield Majestic",
+ "id": "CL-04",
+ "image": "/cdn/img/product/[size]/CL-04-BL.webp",
+ "startPrice": 2200,
+ "url": "/product/CL-04"
+ },
+ {
+ "name": "Countryside Commander",
+ "id": "CL-05",
+ "image": "/cdn/img/product/[size]/CL-05-PT.webp",
+ "startPrice": 2700,
+ "url": "/product/CL-05"
+ },
+ {
+ "name": "Danamark Steadfast",
+ "id": "CL-06",
+ "image": "/cdn/img/product/[size]/CL-06-MT.webp",
+ "startPrice": 2800,
+ "url": "/product/CL-06"
+ },
+ {
+ "name": "Greenland Rover",
+ "id": "CL-07",
+ "image": "/cdn/img/product/[size]/CL-07-GR.webp",
+ "startPrice": 2900,
+ "url": "/product/CL-07"
+ },
+ {
+ "name": "Holland Hamster",
+ "id": "CL-08",
+ "image": "/cdn/img/product/[size]/CL-08-GR.webp",
+ "startPrice": 7750,
+ "url": "/product/CL-08"
+ },
+ {
+ "name": "TerraFirma Veneto",
+ "id": "CL-09",
+ "image": "/cdn/img/product/[size]/CL-09-BL.webp",
+ "startPrice": 2950,
+ "url": "/product/CL-09"
+ },
+ {
+ "name": "Global Gallant",
+ "id": "CL-10",
+ "image": "/cdn/img/product/[size]/CL-10-SD.webp",
+ "startPrice": 2600,
+ "url": "/product/CL-10"
+ },
+ {
+ "name": "Scandinavia Sower",
+ "id": "CL-11",
+ "image": "/cdn/img/product/[size]/CL-11-SK.webp",
+ "startPrice": 3100,
+ "url": "/product/CL-11"
+ },
+ {
+ "name": "Celerity Cruiser",
+ "id": "CL-12",
+ "image": "/cdn/img/product/[size]/CL-12-BL.webp",
+ "startPrice": 3200,
+ "url": "/product/CL-12"
+ },
+ {
+ "name": "Rapid Racer",
+ "id": "CL-13",
+ "image": "/cdn/img/product/[size]/CL-13-BL.webp",
+ "startPrice": 7500,
+ "url": "/product/CL-13"
+ },
+ {
+ "name": "Caribbean Cruiser",
+ "id": "CL-14",
+ "image": "/cdn/img/product/[size]/CL-14-GR.webp",
+ "startPrice": 2300,
+ "url": "/product/CL-14"
+ },
+ {
+ "name": "Fieldmaster Classic",
+ "id": "CL-15",
+ "image": "/cdn/img/product/[size]/CL-15-PI.webp",
+ "startPrice": 6200,
+ "url": "/product/CL-15"
+ }
+ ]
+ },
+ {
+ "key": "autonomous",
+ "name": "Autonomous",
+ "products": [
+ {
+ "name": "TerraFirma AutoCultivator T-300",
+ "id": "AU-01",
+ "image": "/cdn/img/product/[size]/AU-01-SI.webp",
+ "startPrice": 1000,
+ "url": "/product/AU-01"
+ },
+ {
+ "name": "SmartFarm Titan",
+ "id": "AU-02",
+ "image": "/cdn/img/product/[size]/AU-02-OG.webp",
+ "startPrice": 4000,
+ "url": "/product/AU-02"
+ },
+ {
+ "name": "FutureHarvest Navigator",
+ "id": "AU-03",
+ "image": "/cdn/img/product/[size]/AU-03-TQ.webp",
+ "startPrice": 1600,
+ "url": "/product/AU-03"
+ },
+ {
+ "name": "Sapphire Sunworker 460R",
+ "id": "AU-04",
+ "image": "/cdn/img/product/[size]/AU-04-RD.webp",
+ "startPrice": 8500,
+ "url": "/product/AU-04"
+ },
+ {
+ "name": "EcoGrow Crop Commander",
+ "id": "AU-05",
+ "image": "/cdn/img/product/[size]/AU-05-ZH.webp",
+ "startPrice": 3400,
+ "url": "/product/AU-05"
+ },
+ {
+ "name": "FarmFleet Sovereign",
+ "id": "AU-06",
+ "image": "/cdn/img/product/[size]/AU-06-CZ.webp",
+ "startPrice": 2100,
+ "url": "/product/AU-06"
+ },
+ {
+ "name": "Verde Voyager",
+ "id": "AU-07",
+ "image": "/cdn/img/product/[size]/AU-07-MT.webp",
+ "startPrice": 4000,
+ "url": "/product/AU-07"
+ },
+ {
+ "name": "Field Pioneer",
+ "id": "AU-08",
+ "image": "/cdn/img/product/[size]/AU-08-WH.webp",
+ "startPrice": 4500,
+ "url": "/product/AU-08"
+ }
+ ]
+ }
+ ],
+ "recommendations": {
+ "AU-01-SI": {
+ "name": "TerraFirma AutoCultivator T-300 Silver",
+ "sku": "AU-01-SI",
+ "image": "/cdn/img/product/[size]/AU-01-SI.webp",
+ "url": "/product/AU-01?sku=AU-01-SI",
+ "rgb": [
+ 192,
+ 192,
+ 192
+ ]
+ },
+ "AU-02-OG": {
+ "name": "SmartFarm Titan Sunset Copper",
+ "sku": "AU-02-OG",
+ "image": "/cdn/img/product/[size]/AU-02-OG.webp",
+ "url": "/product/AU-02?sku=AU-02-OG",
+ "rgb": [
+ 221,
+ 82,
+ 25
+ ]
+ },
+ "AU-02-BL": {
+ "name": "SmartFarm Titan Cosmic Sapphire",
+ "sku": "AU-02-BL",
+ "image": "/cdn/img/product/[size]/AU-02-BL.webp",
+ "url": "/product/AU-02?sku=AU-02-BL",
+ "rgb": [
+ 42,
+ 82,
+ 190
+ ]
+ },
+ "AU-02-GG": {
+ "name": "SmartFarm Titan Verdant Shadow",
+ "sku": "AU-02-GG",
+ "image": "/cdn/img/product/[size]/AU-02-GG.webp",
+ "url": "/product/AU-02?sku=AU-02-GG",
+ "rgb": [
+ 0,
+ 90,
+ 4
+ ]
+ },
+ "AU-03-TQ": {
+ "name": "FutureHarvest Navigator Turquoise Titan",
+ "sku": "AU-03-TQ",
+ "image": "/cdn/img/product/[size]/AU-03-TQ.webp",
+ "url": "/product/AU-03?sku=AU-03-TQ",
+ "rgb": [
+ 22,
+ 159,
+ 184
+ ]
+ },
+ "AU-03-PL": {
+ "name": "FutureHarvest Navigator Majestic Violet",
+ "sku": "AU-03-PL",
+ "image": "/cdn/img/product/[size]/AU-03-PL.webp",
+ "url": "/product/AU-03?sku=AU-03-PL",
+ "rgb": [
+ 155,
+ 95,
+ 192
+ ]
+ },
+ "AU-03-RD": {
+ "name": "FutureHarvest Navigator Scarlet Dynamo",
+ "sku": "AU-03-RD",
+ "image": "/cdn/img/product/[size]/AU-03-RD.webp",
+ "url": "/product/AU-03?sku=AU-03-RD",
+ "rgb": [
+ 255,
+ 36,
+ 0
+ ]
+ },
+ "AU-03-YE": {
+ "name": "FutureHarvest Navigator Sunbeam Yellow",
+ "sku": "AU-03-YE",
+ "image": "/cdn/img/product/[size]/AU-03-YE.webp",
+ "url": "/product/AU-03?sku=AU-03-YE",
+ "rgb": [
+ 250,
+ 173,
+ 0
+ ]
+ },
+ "AU-04-RD": {
+ "name": "Sapphire Sunworker 460R Ruby Red",
+ "sku": "AU-04-RD",
+ "image": "/cdn/img/product/[size]/AU-04-RD.webp",
+ "url": "/product/AU-04?sku=AU-04-RD",
+ "rgb": [
+ 155,
+ 17,
+ 30
+ ]
+ },
+ "AU-04-BK": {
+ "name": "Sapphire Sunworker 460R Midnight Onyx",
+ "sku": "AU-04-BK",
+ "image": "/cdn/img/product/[size]/AU-04-BK.webp",
+ "url": "/product/AU-04?sku=AU-04-BK",
+ "rgb": [
+ 53,
+ 56,
+ 57
+ ]
+ },
+ "AU-05-ZH": {
+ "name": "EcoGrow Crop Commander Zestful Horizon",
+ "sku": "AU-05-ZH",
+ "image": "/cdn/img/product/[size]/AU-05-ZH.webp",
+ "url": "/product/AU-05?sku=AU-05-ZH",
+ "rgb": [
+ 255,
+ 160,
+ 122
+ ]
+ },
+ "AU-06-CZ": {
+ "name": "FarmFleet Sovereign Canary Zenith",
+ "sku": "AU-06-CZ",
+ "image": "/cdn/img/product/[size]/AU-06-CZ.webp",
+ "url": "/product/AU-06?sku=AU-06-CZ",
+ "rgb": [
+ 255,
+ 215,
+ 0
+ ]
+ },
+ "AU-06-MT": {
+ "name": "FarmFleet Sovereign Minted Jade",
+ "sku": "AU-06-MT",
+ "image": "/cdn/img/product/[size]/AU-06-MT.webp",
+ "url": "/product/AU-06?sku=AU-06-MT",
+ "rgb": [
+ 98,
+ 136,
+ 130
+ ]
+ },
+ "AU-07-MT": {
+ "name": "Verde Voyager Glacial Mint",
+ "sku": "AU-07-MT",
+ "image": "/cdn/img/product/[size]/AU-07-MT.webp",
+ "url": "/product/AU-07?sku=AU-07-MT",
+ "rgb": [
+ 175,
+ 219,
+ 210
+ ]
+ },
+ "AU-07-YE": {
+ "name": "Verde Voyager Sunbeam Yellow",
+ "sku": "AU-07-YE",
+ "image": "/cdn/img/product/[size]/AU-07-YE.webp",
+ "url": "/product/AU-07?sku=AU-07-YE",
+ "rgb": [
+ 255,
+ 218,
+ 3
+ ]
+ },
+ "AU-08-WH": {
+ "name": "Field Pioneer Polar White",
+ "sku": "AU-08-WH",
+ "image": "/cdn/img/product/[size]/AU-08-WH.webp",
+ "url": "/product/AU-08?sku=AU-08-WH",
+ "rgb": [
+ 232,
+ 232,
+ 232
+ ]
+ },
+ "CL-01-GR": {
+ "name": "Heritage Workhorse Verdant Field",
+ "sku": "CL-01-GR",
+ "image": "/cdn/img/product/[size]/CL-01-GR.webp",
+ "url": "/product/CL-01?sku=CL-01-GR",
+ "rgb": [
+ 107,
+ 142,
+ 35
+ ]
+ },
+ "CL-01-GY": {
+ "name": "Heritage Workhorse Stormy Sky",
+ "sku": "CL-01-GY",
+ "image": "/cdn/img/product/[size]/CL-01-GY.webp",
+ "url": "/product/CL-01?sku=CL-01-GY",
+ "rgb": [
+ 112,
+ 128,
+ 144
+ ]
+ },
+ "CL-02-BL": {
+ "name": "Falcon Crest Farm Cerulean Classic",
+ "sku": "CL-02-BL",
+ "image": "/cdn/img/product/[size]/CL-02-BL.webp",
+ "url": "/product/CL-02?sku=CL-02-BL",
+ "rgb": [
+ 0,
+ 123,
+ 167
+ ]
+ },
+ "CL-03-GR": {
+ "name": "Falcon Crest Work Meadow Green",
+ "sku": "CL-03-GR",
+ "image": "/cdn/img/product/[size]/CL-03-GR.webp",
+ "url": "/product/CL-03?sku=CL-03-GR",
+ "rgb": [
+ 124,
+ 252,
+ 0
+ ]
+ },
+ "CL-03-PI": {
+ "name": "Falcon Crest Work Rustic Rose",
+ "sku": "CL-03-PI",
+ "image": "/cdn/img/product/[size]/CL-03-PI.webp",
+ "url": "/product/CL-03?sku=CL-03-PI",
+ "rgb": [
+ 181,
+ 0,
+ 24
+ ]
+ },
+ "CL-03-YE": {
+ "name": "Falcon Crest Work Harvest Gold",
+ "sku": "CL-03-YE",
+ "image": "/cdn/img/product/[size]/CL-03-YE.webp",
+ "url": "/product/CL-03?sku=CL-03-YE",
+ "rgb": [
+ 218,
+ 145,
+ 0
+ ]
+ },
+ "CL-04-BL": {
+ "name": "Broadfield Majestic Oceanic Blue",
+ "sku": "CL-04-BL",
+ "image": "/cdn/img/product/[size]/CL-04-BL.webp",
+ "url": "/product/CL-04?sku=CL-04-BL",
+ "rgb": [
+ 0,
+ 64,
+ 166
+ ]
+ },
+ "CL-04-RD": {
+ "name": "Broadfield Majestic Rustic Crimson",
+ "sku": "CL-04-RD",
+ "image": "/cdn/img/product/[size]/CL-04-RD.webp",
+ "url": "/product/CL-04?sku=CL-04-RD",
+ "rgb": [
+ 123,
+ 63,
+ 0
+ ]
+ },
+ "CL-04-TQ": {
+ "name": "Broadfield Majestic Aqua Green",
+ "sku": "CL-04-TQ",
+ "image": "/cdn/img/product/[size]/CL-04-TQ.webp",
+ "url": "/product/CL-04?sku=CL-04-TQ",
+ "rgb": [
+ 0,
+ 178,
+ 152
+ ]
+ },
+ "CL-05-PT": {
+ "name": "Countryside Commander Pacific Teal",
+ "sku": "CL-05-PT",
+ "image": "/cdn/img/product/[size]/CL-05-PT.webp",
+ "url": "/product/CL-05?sku=CL-05-PT",
+ "rgb": [
+ 71,
+ 157,
+ 168
+ ]
+ },
+ "CL-05-RD": {
+ "name": "Countryside Commander Barn Red",
+ "sku": "CL-05-RD",
+ "image": "/cdn/img/product/[size]/CL-05-RD.webp",
+ "url": "/product/CL-05?sku=CL-05-RD",
+ "rgb": [
+ 124,
+ 10,
+ 2
+ ]
+ },
+ "CL-06-MT": {
+ "name": "Danamark Steadfast Emerald Forest",
+ "sku": "CL-06-MT",
+ "image": "/cdn/img/product/[size]/CL-06-MT.webp",
+ "url": "/product/CL-06?sku=CL-06-MT",
+ "rgb": [
+ 70,
+ 245,
+ 187
+ ]
+ },
+ "CL-06-YE": {
+ "name": "Danamark Steadfast Golden Wheat",
+ "sku": "CL-06-YE",
+ "image": "/cdn/img/product/[size]/CL-06-YE.webp",
+ "url": "/product/CL-06?sku=CL-06-YE",
+ "rgb": [
+ 250,
+ 175,
+ 63
+ ]
+ },
+ "CL-07-GR": {
+ "name": "Greenland Rover Forest Fern",
+ "sku": "CL-07-GR",
+ "image": "/cdn/img/product/[size]/CL-07-GR.webp",
+ "url": "/product/CL-07?sku=CL-07-GR",
+ "rgb": [
+ 46,
+ 162,
+ 80
+ ]
+ },
+ "CL-07-YE": {
+ "name": "Greenland Rover Autumn Amber",
+ "sku": "CL-07-YE",
+ "image": "/cdn/img/product/[size]/CL-07-YE.webp",
+ "url": "/product/CL-07?sku=CL-07-YE",
+ "rgb": [
+ 255,
+ 191,
+ 0
+ ]
+ },
+ "CL-08-GR": {
+ "name": "Holland Hamster Polder Green",
+ "sku": "CL-08-GR",
+ "image": "/cdn/img/product/[size]/CL-08-GR.webp",
+ "url": "/product/CL-08?sku=CL-08-GR",
+ "rgb": [
+ 194,
+ 178,
+ 128
+ ]
+ },
+ "CL-08-PI": {
+ "name": "Holland Hamster Tulip Magenta",
+ "sku": "CL-08-PI",
+ "image": "/cdn/img/product/[size]/CL-08-PI.webp",
+ "url": "/product/CL-08?sku=CL-08-PI",
+ "rgb": [
+ 214,
+ 82,
+ 130
+ ]
+ },
+ "CL-09-BL": {
+ "name": "TerraFirma Veneto Adriatic Blue",
+ "sku": "CL-09-BL",
+ "image": "/cdn/img/product/[size]/CL-09-BL.webp",
+ "url": "/product/CL-09?sku=CL-09-BL",
+ "rgb": [
+ 47,
+ 110,
+ 163
+ ]
+ },
+ "CL-09-GR": {
+ "name": "TerraFirma Veneto Tuscan Green",
+ "sku": "CL-09-GR",
+ "image": "/cdn/img/product/[size]/CL-09-GR.webp",
+ "url": "/product/CL-09?sku=CL-09-GR",
+ "rgb": [
+ 81,
+ 139,
+ 43
+ ]
+ },
+ "CL-10-SD": {
+ "name": "Global Gallant Sahara Dawn",
+ "sku": "CL-10-SD",
+ "image": "/cdn/img/product/[size]/CL-10-SD.webp",
+ "url": "/product/CL-10?sku=CL-10-SD",
+ "rgb": [
+ 184,
+ 168,
+ 117
+ ]
+ },
+ "CL-10-VI": {
+ "name": "Global Gallant Violet Vintage",
+ "sku": "CL-10-VI",
+ "image": "/cdn/img/product/[size]/CL-10-VI.webp",
+ "url": "/product/CL-10?sku=CL-10-VI",
+ "rgb": [
+ 138,
+ 43,
+ 226
+ ]
+ },
+ "CL-11-SK": {
+ "name": "Scandinavia Sower Baltic Blue",
+ "sku": "CL-11-SK",
+ "image": "/cdn/img/product/[size]/CL-11-SK.webp",
+ "url": "/product/CL-11?sku=CL-11-SK",
+ "rgb": [
+ 149,
+ 193,
+ 244
+ ]
+ },
+ "CL-11-YE": {
+ "name": "Scandinavia Sower Nordic Gold",
+ "sku": "CL-11-YE",
+ "image": "/cdn/img/product/[size]/CL-11-YE.webp",
+ "url": "/product/CL-11?sku=CL-11-YE",
+ "rgb": [
+ 255,
+ 215,
+ 0
+ ]
+ },
+ "CL-12-BL": {
+ "name": "Celerity Cruiser Velocity Blue",
+ "sku": "CL-12-BL",
+ "image": "/cdn/img/product/[size]/CL-12-BL.webp",
+ "url": "/product/CL-12?sku=CL-12-BL",
+ "rgb": [
+ 30,
+ 144,
+ 255
+ ]
+ },
+ "CL-12-RD": {
+ "name": "Celerity Cruiser Rally Red",
+ "sku": "CL-12-RD",
+ "image": "/cdn/img/product/[size]/CL-12-RD.webp",
+ "url": "/product/CL-12?sku=CL-12-RD",
+ "rgb": [
+ 237,
+ 41,
+ 57
+ ]
+ },
+ "CL-13-BL": {
+ "name": "Rapid Racer Speedway Blue",
+ "sku": "CL-13-BL",
+ "image": "/cdn/img/product/[size]/CL-13-BL.webp",
+ "url": "/product/CL-13?sku=CL-13-BL",
+ "rgb": [
+ 38,
+ 121,
+ 166
+ ]
+ },
+ "CL-13-RD": {
+ "name": "Rapid Racer Raceway Red",
+ "sku": "CL-13-RD",
+ "image": "/cdn/img/product/[size]/CL-13-RD.webp",
+ "url": "/product/CL-13?sku=CL-13-RD",
+ "rgb": [
+ 207,
+ 16,
+ 32
+ ]
+ },
+ "CL-14-GR": {
+ "name": "Caribbean Cruiser Emerald Grove",
+ "sku": "CL-14-GR",
+ "image": "/cdn/img/product/[size]/CL-14-GR.webp",
+ "url": "/product/CL-14?sku=CL-14-GR",
+ "rgb": [
+ 87,
+ 174,
+ 19
+ ]
+ },
+ "CL-14-RD": {
+ "name": "Caribbean Cruiser Ruby Fields",
+ "sku": "CL-14-RD",
+ "image": "/cdn/img/product/[size]/CL-14-RD.webp",
+ "url": "/product/CL-14?sku=CL-14-RD",
+ "rgb": [
+ 205,
+ 43,
+ 30
+ ]
+ },
+ "CL-15-PI": {
+ "name": "Fieldmaster Classic Vintage Pink",
+ "sku": "CL-15-PI",
+ "image": "/cdn/img/product/[size]/CL-15-PI.webp",
+ "url": "/product/CL-15?sku=CL-15-PI",
+ "rgb": [
+ 225,
+ 148,
+ 158
+ ]
+ },
+ "CL-15-SD": {
+ "name": "Fieldmaster Classic Sahara Dust",
+ "sku": "CL-15-SD",
+ "image": "/cdn/img/product/[size]/CL-15-SD.webp",
+ "url": "/product/CL-15?sku=CL-15-SD",
+ "rgb": [
+ 222,
+ 199,
+ 140
+ ]
+ }
+ },
+ "stores": [
+ {
+ "id": "store-a",
+ "name": "Aurora Flagship Store",
+ "street": "Astronaut Way 1",
+ "city": "Arlington",
+ "image": "/cdn/img/store/[size]/store-1.webp"
+ },
+ {
+ "id": "store-b",
+ "name": "Big Micro Machines",
+ "street": "Broadway 2",
+ "city": "Burlington",
+ "image": "/cdn/img/store/[size]/store-2.webp"
+ },
+ {
+ "id": "store-c",
+ "name": "Central Mall",
+ "street": "Clown Street 3",
+ "city": "Cryo",
+ "image": "/cdn/img/store/[size]/store-3.webp"
+ },
+ {
+ "id": "store-d",
+ "name": "Downtown Model Store",
+ "street": "Duck Street 4",
+ "city": "Davenport",
+ "image": "/cdn/img/store/[size]/store-4.webp"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/examples/hono-tractor-store-2.0/src/explore/database/import.js b/examples/hono-tractor-store-2.0/src/explore/database/import.js
new file mode 100644
index 0000000..164a6de
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/database/import.js
@@ -0,0 +1,148 @@
+// reads product data from a central source and writes the necessary data for this system.
+// here we are reading from a js file and writing to a json file.
+// in a real world scenario, you would read from a product service and write to a database.
+
+import fs from "fs";
+import path from "path";
+import products from "../../../products.js";
+
+/**
+ * Generates the URL for a product.
+ * @param {string} id - The ID of the product.
+ * @param {string} sku - The SKU of the product variant.
+ * @returns {string} The URL of the product.
+ */
+export function productUrl(id, sku) {
+ const query = sku ? `?sku=${sku}` : "";
+ return `/product/${id}${query}`;
+}
+
+/**
+ * Calculates the starting price of a product's variants.
+ * @param {Variant[]} variants - The variants of the product.
+ * @returns {number} The starting price.
+ */
+function startPrice(variants) {
+ return variants.reduce((min, variant) => {
+ return Math.min(min, variant.price);
+ }, Infinity);
+}
+
+/**
+ * Converts a product object to a formatted product.
+ * @param {Product} product - The product object.
+ * @returns {Product} The formatted product.
+ */
+function toProduct(product) {
+ return {
+ name: product.name,
+ id: product.id,
+ image: product.variants[0].image,
+ startPrice: startPrice(product.variants),
+ url: productUrl(product.id),
+ };
+}
+
+/**
+ * Converts a hex color string to an RGB array.
+ * @param {string} hex - The hex color string.
+ * @returns {number[]} The RGB array.
+ **/
+function hexToRgb(hex) {
+ var bigint = parseInt(hex.replace("#", ""), 16);
+ var r = (bigint >> 16) & 255;
+ var g = (bigint >> 8) & 255;
+ var b = bigint & 255;
+ return [r, g, b];
+}
+
+/**
+ * Converts a product object and a variant object to a formatted recommendation item.
+ * @param {Product} product - The product object.
+ * @param {Variant} variant - The variant object.
+ * @returns {RecoItem} The formatted recommendation item.
+ */
+function toRecoItem(product, variant) {
+ return {
+ name: `${product.name} ${variant.name}`,
+ sku: variant.sku,
+ image: variant.image,
+ url: productUrl(product.id, variant.sku),
+ rgb: hexToRgb(variant.color),
+ };
+}
+
+/**
+ * @type {Database}
+ */
+const database = {
+ teaser: [
+ {
+ title: "Classic Tractors",
+ image: "/cdn/img/scene/[size]/classics.webp",
+ url: "/products/classic",
+ },
+ {
+ title: "Autonomous Tractors",
+ image: "/cdn/img/scene/[size]/autonomous.webp",
+ url: "/products/autonomous",
+ },
+ ],
+ categories: [
+ {
+ key: "classic",
+ name: "Classics",
+ products: products.filter((p) => p.category === "classic").map(toProduct),
+ },
+ {
+ key: "autonomous",
+ name: "Autonomous",
+ products: products
+ .filter((p) => p.category === "autonomous")
+ .map(toProduct),
+ },
+ ],
+ recommendations: products
+ .flatMap((product) =>
+ product.variants.map((variant) => toRecoItem(product, variant)),
+ )
+ .reduce((res, variant) => {
+ res[variant.sku] = variant;
+ return res;
+ }, {}),
+ stores: [
+ {
+ id: "store-a",
+ name: "Aurora Flagship Store",
+ street: "Astronaut Way 1",
+ city: "Arlington",
+ image: "/cdn/img/store/[size]/store-1.webp",
+ },
+ {
+ id: "store-b",
+ name: "Big Micro Machines",
+ street: "Broadway 2",
+ city: "Burlington",
+ image: "/cdn/img/store/[size]/store-2.webp",
+ },
+ {
+ id: "store-c",
+ name: "Central Mall",
+ street: "Clown Street 3",
+ city: "Cryo",
+ image: "/cdn/img/store/[size]/store-3.webp",
+ },
+ {
+ id: "store-d",
+ name: "Downtown Model Store",
+ street: "Duck Street 4",
+ city: "Davenport",
+ image: "/cdn/img/store/[size]/store-4.webp",
+ },
+ ],
+};
+
+const __dirname = path.dirname(new URL(import.meta.url).pathname);
+const databaseFile = path.resolve(__dirname, "./database.json");
+console.log("Writing database to", databaseFile);
+fs.writeFileSync(databaseFile, JSON.stringify(database, null, 2));
diff --git a/examples/hono-tractor-store-2.0/src/explore/database/index.js b/examples/hono-tractor-store-2.0/src/explore/database/index.js
new file mode 100644
index 0000000..19eb799
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/database/index.js
@@ -0,0 +1,5 @@
+/**
+ * @type {Database}
+ */
+import data from "./database.json" assert { type: "json" };
+export default data;
diff --git a/examples/hono-tractor-store-2.0/src/explore/index.js b/examples/hono-tractor-store-2.0/src/explore/index.js
new file mode 100644
index 0000000..0d0d588
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/index.js
@@ -0,0 +1,3 @@
+export { default as HomePage } from "./pages/HomePage.js";
+export { default as StoresPage } from "./pages/StoresPage.js";
+export { default as CategoryPage } from "./pages/CategoryPage.js";
diff --git a/examples/hono-tractor-store-2.0/src/explore/pages/CategoryPage.css b/examples/hono-tractor-store-2.0/src/explore/pages/CategoryPage.css
new file mode 100644
index 0000000..247d673
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/pages/CategoryPage.css
@@ -0,0 +1,43 @@
+.e_CategoryPage {
+ max-width: calc(1000px + var(--outer-space) * 2);
+ padding: 0 var(--outer-space);
+ margin: 0 auto;
+}
+
+.e_CategoryPage_list {
+ display: grid;
+
+ grid-gap: 40px;
+ padding: 0;
+ list-style-type: none;
+}
+
+@media (max-width: 499px) {
+ .e_CategoryPage_list {
+ grid-template-columns: 1fr;
+ }
+}
+
+@media (min-width: 500px) and (max-width: 999px) {
+ .e_CategoryPage_list {
+ grid-template-columns: 1fr 1fr;
+ }
+}
+
+@media (min-width: 1000px) {
+ .e_CategoryPage_list {
+ grid-template-columns: 1fr 1fr 1fr;
+ }
+}
+
+.e_CategoryPage__subline {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 1em;
+ justify-content: space-between;
+}
+
+.e_CategoryPage__subline * {
+ margin: 0;
+ line-height: 1.5;
+}
diff --git a/examples/hono-tractor-store-2.0/src/explore/pages/CategoryPage.js b/examples/hono-tractor-store-2.0/src/explore/pages/CategoryPage.js
new file mode 100644
index 0000000..af3a002
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/pages/CategoryPage.js
@@ -0,0 +1,62 @@
+import data from "../database/index.js";
+import Header from "../components/Header.js";
+import Footer from "../components/Footer.js";
+import Product from "../components/Product.js";
+import Filter from "../components/Filter.js";
+import { html } from "../utils.js";
+import Meta from "../components/Meta.js";
+
+/**
+ * CategoryPage component.
+ * @param {object} props - The properties of the CategoryPage component.
+ * @param {string} props.category - The category key.
+ * @param {HonoContext} props.c - The hone context.
+ * @returns {string} The CategoryPage component markup.
+ */
+export default ({ category, c }) => {
+ const cat = category && data.categories.find((c) => c.key === category);
+
+ const title = cat ? cat.name : "All Machines";
+ const products = cat
+ ? cat.products
+ : data.categories.flatMap((c) => c.products);
+ // sort products by price descending
+ products.sort((a, b) => b.startPrice - a.startPrice);
+ const filters = [
+ { url: "/products", name: "All", active: !cat },
+ ...data.categories.map((c) => ({
+ url: `/products/${c.key}`,
+ name: c.name,
+ active: c.key === category,
+ })),
+ ];
+
+ return html`
+
+
+ Tractor Store
+
+
+
+ ${Meta()}
+
+
+ ${Header({ c })}
+
+ ${title}
+
+
${products.length} products
+ ${Filter({ filters })}
+
+
+ ${products.map(Product).join("")}
+
+
+ ${Footer()}
+
+
+
+
+
+ `;
+};
diff --git a/examples/hono-tractor-store-2.0/src/explore/pages/HomePage.css b/examples/hono-tractor-store-2.0/src/explore/pages/HomePage.css
new file mode 100644
index 0000000..7803305
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/pages/HomePage.css
@@ -0,0 +1,35 @@
+.e_HomePage {
+ @media (min-width: 500px) {
+ grid-template-columns: 1fr 1fr;
+ display: grid;
+ gap: 1rem;
+ }
+
+ max-width: calc(1000px + var(--outer-space) * 2);
+ padding: 0 var(--outer-space);
+ margin: 3rem auto 0;
+}
+
+.e_HomePage__categoryLink {
+ display: block;
+ position: relative;
+ margin-bottom: 2rem;
+ color: inherit;
+ text-align: center;
+ text-decoration: none;
+}
+
+.e_HomePage__categoryLink:hover,
+.e_HomePage__categoryLink:focus {
+ text-decoration: underline;
+}
+
+.e_HomePage__categoryLink img {
+ width: 100%;
+ aspect-ratio: 1000 / 560;
+ margin-bottom: 0.75rem;
+}
+
+.e_HomePage__recommendations {
+ grid-column: span 2;
+}
diff --git a/examples/hono-tractor-store-2.0/src/explore/pages/HomePage.js b/examples/hono-tractor-store-2.0/src/explore/pages/HomePage.js
new file mode 100644
index 0000000..b87ba0b
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/pages/HomePage.js
@@ -0,0 +1,54 @@
+import data from "../database/index.js";
+import Header from "../components/Header.js";
+import Footer from "../components/Footer.js";
+import Recommendations from "../components/Recommendations.js";
+import { html, src, srcset } from "../utils.js";
+import Meta from "../components/Meta.js";
+
+/**
+ * HomePage component.
+ * @param {object} props - The properties of the HomePage component.
+ * @param {HonoContext} props.c - The hone context.
+ * @returns {string} The HomePage component markup.
+ */
+export default ({ c }) => {
+ return html`
+
+
+ Tractor Store
+
+
+
+ ${Meta()}
+
+
+ ${Header({ c })}
+
+ ${data.teaser
+ .map(
+ ({ title, image, url }) =>
+ html`
+
+ ${title}
+ `,
+ )
+ .join("")}
+
+ ${Recommendations({
+ skus: ["CL-01-GY", "AU-07-MT"],
+ })}
+
+
+ ${Footer()}
+
+
+
+
+
+ `;
+};
diff --git a/examples/hono-tractor-store-2.0/src/explore/pages/StoresPage.css b/examples/hono-tractor-store-2.0/src/explore/pages/StoresPage.css
new file mode 100644
index 0000000..5b747ea
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/pages/StoresPage.css
@@ -0,0 +1,19 @@
+.e_StoresPage {
+ max-width: calc(1000px + var(--outer-space) * 2);
+ padding: 0 var(--outer-space);
+ margin: 0 auto;
+}
+
+.e_StoresPage_list {
+ list-style: none;
+ padding: 0;
+ margin: 5em 0 4em;
+ display: flex;
+ justify-content: space-between;
+ gap: 2em;
+ flex-wrap: wrap;
+}
+
+.e_StoresPage p {
+ max-width: 80ch;
+}
diff --git a/examples/hono-tractor-store-2.0/src/explore/pages/StoresPage.js b/examples/hono-tractor-store-2.0/src/explore/pages/StoresPage.js
new file mode 100644
index 0000000..12344c5
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/pages/StoresPage.js
@@ -0,0 +1,45 @@
+import data from "../database/index.js";
+import Header from "../components/Header.js";
+import Footer from "../components/Footer.js";
+import Store from "../components/Store.js";
+import { html } from "../utils.js";
+import Meta from "../components/Meta.js";
+
+/**
+ * StoresPage component.
+ * @param {object} props - The properties of the StoresPage component.
+ * @param {string} props.category - The category key.
+ * @param {HonoContext} props.c - The hone context.
+ * @returns {string} The StoresPage component markup.
+ */
+export default ({ c }) => {
+ return html`
+
+
+ Tractor Store
+
+
+
+ ${Meta()}
+
+
+ ${Header({ c })}
+
+ Our Stores
+
+ Want to see our products in person? Visit one of our stores to see
+ our products up close and talk to our experts. We have stores in the
+ following locations:
+
+
+ ${data.stores.map(Store).join("")}
+
+
+ ${Footer()}
+
+
+
+
+
+ `;
+};
diff --git a/examples/hono-tractor-store-2.0/src/explore/scripts.js b/examples/hono-tractor-store-2.0/src/explore/scripts.js
new file mode 100644
index 0000000..5442265
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/scripts.js
@@ -0,0 +1,28 @@
+/* client side javascript */
+
+/**
+ * Store picker fragment
+ * - open dialog on button click
+ * - select store on button click
+ * - publish event on store selected
+ */
+const $picker = document.querySelector(".e_StorePicker");
+if ($picker) {
+ const dialog = $picker.querySelector(".e_StorePicker dialog");
+ const chooseButton = $picker.querySelector(".e_StorePicker_choose");
+ const selectButtons = $picker.querySelectorAll(".e_StorePicker_select");
+ const selected = $picker.querySelector(".e_StorePicker_selected");
+
+ chooseButton.addEventListener("click", () => dialog.showModal());
+ [...selectButtons].forEach((button) => {
+ button.addEventListener("click", (e) => {
+ const detail = e.currentTarget.getAttribute("data-id");
+ $picker.dispatchEvent(
+ new CustomEvent("explore:store-selected", { bubbles: true, detail }),
+ );
+ dialog.close();
+ // copy selected store content to top level
+ selected.innerHTML = e.currentTarget.previousElementSibling.innerHTML;
+ });
+ });
+}
diff --git a/examples/hono-tractor-store-2.0/src/explore/styles.css b/examples/hono-tractor-store-2.0/src/explore/styles.css
new file mode 100644
index 0000000..b1a6c06
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/styles.css
@@ -0,0 +1,43 @@
+@import url("./components/Header.css");
+@import url("./components/Navigation.css");
+@import url("./components/Footer.css");
+@import url("./components/StorePicker.css");
+@import url("./components/Product.css");
+@import url("./components/Recommendations.css");
+@import url("./components/Recommendation.css");
+@import url("./components/Button.css");
+@import url("./components/Filter.css");
+@import url("./pages/CategoryPage.css");
+@import url("./pages/StoresPage.css");
+@import url("./pages/HomePage.css");
+
+@font-face {
+ font-family: "Raleway";
+ src: url("https://cdn.the-tractor.store/cdn/font/raleway-regular.woff2")
+ format("woff2");
+ font-weight: normal;
+ font-style: normal;
+}
+
+* {
+ box-sizing: border-box;
+}
+
+html {
+ font-family: Raleway, "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 16px;
+}
+
+body {
+ padding: 0;
+ margin: 0;
+ overflow-x: hidden;
+}
+
+p {
+ line-height: 1.5;
+}
+
+:root {
+ --outer-space: 1.5rem;
+}
diff --git a/examples/hono-tractor-store-2.0/src/explore/types.js b/examples/hono-tractor-store-2.0/src/explore/types.js
new file mode 100644
index 0000000..ae1e689
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/types.js
@@ -0,0 +1,39 @@
+/**
+ * @typedef {object} Product
+ * @property {string} id - The ID of the product.
+ * @property {string} name - The name of the product.
+ * @property {string} image - The image URL of the product.
+ * @property {string} url - The URL of the product.
+ * @property {number} startPrice - The starting price of the product.
+ */
+
+/**
+ * @typedef {object} Variant
+ * @property {string} name - The name of the variant.
+ * @property {string} sku - The SKU of the variant.
+ * @property {string} image - The image URL of the variant.
+ * @property {string} product - The ID of the product the variant belongs to.
+ * @property {string} url - The URL of the variant.
+ */
+
+/**
+ * @typedef {object} RecoItem
+ * @property {string} name - The name of the recommendation item.
+ * @property {string} sku - The SKU of the recommendation item.
+ * @property {string} image - The image URL of the recommendation item.
+ * @property {string} url - The URL of the recommendation item.
+ * @property {number[]} rgb - The RGB color of the recommendation item.
+ */
+
+/**
+ * @typedef {object} Category
+ * @property {string} key - The key of the category.
+ * @property {string} name - The name of the category.
+ * @property {Product[]} products - The products in the category.
+ */
+
+/**
+ * @typedef {object} Database
+ * @property {Category[]} categories - The categories in the database.
+ * @property {{[key: string]: RecoItem}} recommendations - The recommendations in the database.
+ */
diff --git a/examples/hono-tractor-store-2.0/src/explore/utils.js b/examples/hono-tractor-store-2.0/src/explore/utils.js
new file mode 100644
index 0000000..7d1c762
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/explore/utils.js
@@ -0,0 +1,38 @@
+// for prettier formatting
+// see https://prettier.io/docs/en/options.html#embedded-language-formatting
+export const html = String.raw;
+
+// use the image server if not using local images
+export const IMAGE_SERVER =
+ typeof process === "undefined" || process.env.USE_LOCAL_IMAGES !== "true"
+ ? "https://cdn.the-tractor.store"
+ : "";
+
+/**
+ * Replaces the placeholder "[size]" in the image URL with the specified size.
+ * @param {string} image - The original image URL.
+ * @param {number} size - The desired size for the image.
+ * @returns {string} - The modified image URL with the size placeholder replaced.
+ */
+export function src(image, size) {
+ return IMAGE_SERVER + image.replace("[size]", `${size}`);
+}
+
+/**
+ * Generates the srcset attribute value for an image with different sizes.
+ * @param {string} image - The original image URL.
+ * @param {number[]} sizes - The array of sizes for the image.
+ * @returns {string} - The srcset attribute value.
+ */
+export function srcset(image, sizes = []) {
+ return sizes.map((size) => `${src(image, size)} ${size}w`).join(", ");
+}
+
+/**
+ * Formats a price value.
+ * @param {number} price - The price value to format.
+ * @returns {string} - The formatted price.
+ */
+export function fmtprice(price) {
+ return `${price},00 Ø`;
+}
diff --git a/examples/hono-tractor-store-2.0/src/server.cloudflare.js b/examples/hono-tractor-store-2.0/src/server.cloudflare.js
new file mode 100644
index 0000000..88b9548
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/server.cloudflare.js
@@ -0,0 +1,12 @@
+import createServer from "./server.js";
+import { serveStatic } from "hono/cloudflare-workers";
+import manifest from "__STATIC_CONTENT_MANIFEST";
+
+const app = createServer();
+
+app.use("/cdn/*", serveStatic({ root: "./", manifest }));
+["explore", "decide", "checkout"].forEach((team) => {
+ app.use(`/${team}/static/*`, serveStatic({ root: `./`, manifest }));
+});
+
+export default app;
diff --git a/examples/hono-tractor-store-2.0/src/server.js b/examples/hono-tractor-store-2.0/src/server.js
new file mode 100644
index 0000000..f466755
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/server.js
@@ -0,0 +1,68 @@
+import { Hono } from "hono";
+import { logger } from "hono/logger";
+import { HomePage, StoresPage, CategoryPage } from "./explore/index.js";
+import { ProductPage } from "./decide/index.js";
+import {
+ MiniCart,
+ CartPage,
+ Checkout,
+ Thanks,
+ handleAddToCart,
+ handleRemoveFromCart,
+ handlePlaceOrder,
+} from "./checkout/index.js";
+
+/**
+ * Creates a server instance.
+ * @returns {Hono} The server instance.
+ */
+export default function createServer() {
+ const app = new Hono();
+ app.use(logger());
+
+ /**
+ * Team Explore
+ */
+ app.get("/", async (c) => {
+ return c.html(HomePage({ c }));
+ });
+ app.get("/stores", async (c) => {
+ return c.html(StoresPage({ c }));
+ });
+ app.get("/products/:category?", async (c) => {
+ console.log("category", c.req.param("category"));
+ const category = c.req.param("category");
+ return c.html(CategoryPage({ category, c }));
+ });
+
+ /**
+ * Team Decide
+ */
+ app.get("/product/:id", async (c) => {
+ const { id } = c.req.param();
+ const sku = c.req.query("sku");
+ return c.html(ProductPage({ id, sku, c }));
+ });
+
+ /**
+ * Team Buy
+ */
+ app.get("/checkout/cart", (c) => c.html(CartPage({ c })));
+ app.get("/checkout/checkout", (c) => c.html(Checkout()));
+ app.get("/checkout/mini-cart", (c) => c.html(MiniCart({ c })));
+ app.post("/checkout/cart/add", async (c) => {
+ await handleAddToCart(c);
+ return c.redirect("/checkout/cart");
+ });
+ app.post("/checkout/cart/remove", async (c) => {
+ await handleRemoveFromCart(c);
+ return c.redirect("/checkout/cart");
+ });
+ app.post("/checkout/place-order", async (c) => {
+ await handlePlaceOrder(c);
+ return c.redirect("/checkout/thanks");
+ });
+ app.get("/checkout/thanks", (c) => c.html(Thanks({ c })));
+
+ return app;
+}
diff --git a/examples/hono-tractor-store-2.0/src/server.node.js b/examples/hono-tractor-store-2.0/src/server.node.js
new file mode 100644
index 0000000..9c24684
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/server.node.js
@@ -0,0 +1,27 @@
+import createServer from "./server.js";
+import { serve } from "@hono/node-server";
+import { serveStatic } from "@hono/node-server/serve-static";
+
+const app = createServer();
+
+// Serve static files
+const isProd = process.env.NODE_ENV === "production";
+const cacheControl = isProd ? "public, max-age=86400" : "no-store";
+const setHeaders = (res) => {
+ res.setHeader("Cache-Control", cacheControl);
+};
+
+const onNotFound = (path, c) =>
+ console.log(`${path} is not found, request to ${c.req.path}`);
+
+app.use("/cdn/*", serveStatic({ root: "./public/", setHeaders, onNotFound }));
+["explore", "decide", "checkout"].forEach((team) => {
+ app.use(
+ `/${team}/static/*`,
+ serveStatic({ root: `./public/`, setHeaders, onNotFound }),
+ );
+});
+
+serve({ fetch: app.fetch, port: 3000 }, (info) => {
+ console.log(`Listening on http://localhost:${info.port}`);
+});
diff --git a/examples/hono-tractor-store-2.0/src/types.js b/examples/hono-tractor-store-2.0/src/types.js
new file mode 100644
index 0000000..70eaea8
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/src/types.js
@@ -0,0 +1,16 @@
+/**
+ * HonoContext.
+ * @typedef {object} HonoContext
+ * @property {HonoRequest} req - The request object.
+ * @property {Function} html - Returns the HTML content.
+ * @property {Function} redirect - Redirects to a URL.
+ */
+
+/**
+ * HonoRequest.
+ * @typedef {object} HonoRequest
+ * @property {Function} parseBody - Parses the request body.
+ * @property {Function} query - Returns the request query.
+ * @property {Function} param - Returns the request params.
+ * @property {string} path - Returns the request path.
+ */
diff --git a/examples/hono-tractor-store-2.0/wrangler.toml b/examples/hono-tractor-store-2.0/wrangler.toml
new file mode 100644
index 0000000..bd69b53
--- /dev/null
+++ b/examples/hono-tractor-store-2.0/wrangler.toml
@@ -0,0 +1,6 @@
+name = "tractor-store-blueprint"
+main = "src/server.cloudflare.js"
+compatibility_date = "2024-03-12"
+
+[site]
+bucket = "./public"
\ No newline at end of file
diff --git a/rspack_hmr/README.md b/rspack_hmr/README.md
new file mode 100644
index 0000000..4edb088
--- /dev/null
+++ b/rspack_hmr/README.md
@@ -0,0 +1,101 @@
+# mf-runtime
+
+## How to run this example
+First install all by running
+
+```sh
+pnpm install && pnpm run install-all
+```
+
+After installation run:
+`pnpm run start`
+
+Rspack remotes:
+run `host` (localhost:3000) and `app2`
+
+runtime remotes:
+run `runhost` (localhost:3003) and `app2`
+
+HMR should work fine in both cases!
+
+## How does it work
+
+We pay attention to all the `rspack.config.ts` in each of the modules.
+
+Let's start with `app_02` where it provides the component to others.
+
+Within [`app_02`'s `rspack.config.ts`](./app2/rspack.config.js), we expose two things (only one thing is used atm for other hosts)
+
+```js
+ new ModuleFederationPlugin({
+ name: name,
+ filename: 'remoteEntry.js',
+ exposes: {
+ './Hello': './src/Hello.tsx',
+ './pi': './src/pi.ts',
+ },
+ manifest: true,
+
+ }),
+```
+
+The component is exposed from the configuration, while we define a public path (for other consuming application to find it) at:
+
+```js
+ output: {
+ path: __dirname + '/dist',
+ uniqueName: name1,
+ publicPath: 'http://localhost:3001/',
+ filename: '[name].js',
+ },
+```
+And of course, often time we run into `CORS` error so we also need to make sure the headers are configured correctly since we will be fetching part of the frontend from `app2` to other host application (in this case, dir name `host` and `runhost`):
+
+```js
+headers: {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, PATCH, OPTIONS',
+ 'Access-Control-Allow-Headers': 'X-Requested-With, content-type, Authorization',
+ },
+```
+
+Next we go into [`host/rspack.config.ts`](./host/rspack.config.js), to consume the remote module from other application we will need:
+1. the app's unique name `app_02`
+2. the public path (at the moment it runs on your local computer)
+3. the module federation manifest
+4. specify if there is any shared dependencies
+
+This part of the code is how `host` can find `app2`:
+
+```js
+ new ModuleFederationPlugin({
+ name: name,
+ filename: 'remoteEntry.js',
+ remotes: {
+ app_02: 'app_02@http://localhost:3001/mf-manifest.json',
+ },
+
+ shared: ['react', 'react-dom'],
+ }),
+```
+
+When we are going to consume the `Hello` module from `app2`, we find the [`host/src/App.tsx`](./host/src/App.tsx) and import it just like every other React component with a path we have defined in `rspack.config.ts`:
+
+```tsx
+import { Hello } from 'app_02/Hello';
+
+```
+and then within the component:
+```tsx
+...
+
+
+
+
+
+
+...
+```
diff --git a/rspack_hmr/app2/.gitignore b/rspack_hmr/app2/.gitignore
new file mode 100644
index 0000000..a547bf3
--- /dev/null
+++ b/rspack_hmr/app2/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/rspack_hmr/app2/index.html b/rspack_hmr/app2/index.html
new file mode 100644
index 0000000..5dab944
--- /dev/null
+++ b/rspack_hmr/app2/index.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+ Rspack + React + TS
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rspack_hmr/app2/package.json b/rspack_hmr/app2/package.json
new file mode 100644
index 0000000..46b245b
--- /dev/null
+++ b/rspack_hmr/app2/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "@rspack-hmr/app2",
+ "private": true,
+ "version": "1.0.0",
+ "scripts": {
+ "dev": "NODE_ENV=development rspack serve",
+ "build": "NODE_ENV=production rspack build"
+ },
+ "dependencies": {
+ "@module-federation/enhanced": "0.2.1",
+ "@module-federation/runtime": "0.2.1",
+ "@module-federation/sdk": "0.2.1",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "zephyr-webpack-plugin": "^0.0.13"
+ },
+ "devDependencies": {
+ "@rspack/cli": "0.7.4",
+ "@rspack/core": "0.7.4",
+ "@rspack/plugin-react-refresh": "0.7.4",
+ "@types/react": "18.3.3",
+ "@types/react-dom": "18.3.0",
+ "prettier": "3.3.2",
+ "react-refresh": "0.14.2"
+ }
+}
diff --git a/rspack_hmr/app2/pnpm-lock.yaml b/rspack_hmr/app2/pnpm-lock.yaml
new file mode 100644
index 0000000..6359e06
--- /dev/null
+++ b/rspack_hmr/app2/pnpm-lock.yaml
@@ -0,0 +1,3163 @@
+lockfileVersion: '6.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+dependencies:
+ '@module-federation/enhanced':
+ specifier: 0.2.1
+ version: 0.2.1(typescript@5.5.3)(webpack@5.92.1)
+ '@module-federation/runtime':
+ specifier: 0.2.1
+ version: 0.2.1
+ '@module-federation/sdk':
+ specifier: 0.2.1
+ version: 0.2.1
+ react:
+ specifier: ^18.2.0
+ version: 18.3.1
+ react-dom:
+ specifier: ^18.2.0
+ version: 18.3.1(react@18.3.1)
+ zephyr-webpack-plugin:
+ specifier: ^0.0.13
+ version: 0.0.13
+
+devDependencies:
+ '@rspack/cli':
+ specifier: 0.7.4
+ version: 0.7.4(@rspack/core@0.7.4)(webpack@5.92.1)
+ '@rspack/core':
+ specifier: 0.7.4
+ version: 0.7.4
+ '@rspack/plugin-react-refresh':
+ specifier: 0.7.4
+ version: 0.7.4(react-refresh@0.14.2)
+ '@types/react':
+ specifier: 18.3.3
+ version: 18.3.3
+ '@types/react-dom':
+ specifier: 18.3.0
+ version: 18.3.0
+ prettier:
+ specifier: 3.3.2
+ version: 3.3.2
+ react-refresh:
+ specifier: 0.14.2
+ version: 0.14.2
+
+packages:
+
+ /@discoveryjs/json-ext@0.5.7:
+ resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
+ engines: {node: '>=10.0.0'}
+ dev: true
+
+ /@jridgewell/gen-mapping@0.3.5:
+ resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.4.15
+ '@jridgewell/trace-mapping': 0.3.25
+
+ /@jridgewell/resolve-uri@3.1.2:
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ /@jridgewell/set-array@1.2.1:
+ resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
+ engines: {node: '>=6.0.0'}
+
+ /@jridgewell/source-map@0.3.6:
+ resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
+
+ /@jridgewell/sourcemap-codec@1.4.15:
+ resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
+
+ /@jridgewell/trace-mapping@0.3.25:
+ resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.4.15
+
+ /@leichtgewicht/ip-codec@2.0.5:
+ resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==}
+ dev: true
+
+ /@module-federation/automatic-vendor-federation@1.2.1(webpack@5.92.1):
+ resolution: {integrity: sha512-73wxkXM7pbRZ6GGM90JP5IPTPvY3fvrhQyTVdMCUx85cQRWqnbzbibcsz3pkOMOeXyYAO4tXXsG13yNaEEGhJA==}
+ peerDependencies:
+ webpack: 5.91.0
+ dependencies:
+ find-package-json: 1.2.0
+ webpack: 5.92.1
+ dev: false
+
+ /@module-federation/bridge-react-webpack-plugin@0.2.1:
+ resolution: {integrity: sha512-dWqA4mm81yDBBWD452UiX3TXxFQPpu4KCArAIO72cISq5Llrsd0WbyUQY1DOWFN8wdhy5OwyMS5qj5wCNHXeew==}
+ dependencies:
+ '@module-federation/sdk': 0.2.1
+ dev: false
+
+ /@module-federation/dts-plugin@0.2.1(typescript@5.5.3):
+ resolution: {integrity: sha512-hr1w7KEaIVvoCB6mn1//+yZig099m6Ux3b5lW+w7SrH54dLzJHtIfllhWhZPZi5D9Y3mMuQlAxodsCD/sXQlKQ==}
+ peerDependencies:
+ typescript: ^4.9.0 || ^5.0.0
+ vue-tsc: ^1.0.24
+ peerDependenciesMeta:
+ vue-tsc:
+ optional: true
+ dependencies:
+ '@module-federation/managers': 0.2.1
+ '@module-federation/sdk': 0.2.1
+ '@module-federation/third-party-dts-extractor': 0.2.1
+ adm-zip: 0.5.14
+ ansi-colors: 4.1.3
+ axios: 1.7.2
+ chalk: 3.0.0
+ fs-extra: 9.1.0
+ isomorphic-ws: 5.0.0(ws@8.17.1)
+ koa: 2.11.0
+ lodash.clonedeepwith: 4.5.0
+ log4js: 6.9.1
+ node-schedule: 2.1.1
+ rambda: 9.2.1
+ typescript: 5.5.3
+ ws: 8.17.1
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+ dev: false
+
+ /@module-federation/enhanced@0.2.1(typescript@5.5.3)(webpack@5.92.1):
+ resolution: {integrity: sha512-4iXsTU7HQUNtZMR4FAUTuctBQ9jOkYPINiCRveZjERW+UWC2g6KZ/rjbT5H5pBu/Ta6os8NSuNECtXGsT6Bprg==}
+ peerDependencies:
+ typescript: ^4.9.0 || ^5.0.0
+ vue-tsc: ^1.0.24
+ webpack: ^5.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ vue-tsc:
+ optional: true
+ webpack:
+ optional: true
+ dependencies:
+ '@module-federation/bridge-react-webpack-plugin': 0.2.1
+ '@module-federation/dts-plugin': 0.2.1(typescript@5.5.3)
+ '@module-federation/managers': 0.2.1
+ '@module-federation/manifest': 0.2.1(typescript@5.5.3)
+ '@module-federation/rspack': 0.2.1(typescript@5.5.3)
+ '@module-federation/runtime-tools': 0.2.1
+ '@module-federation/sdk': 0.2.1
+ btoa: 1.2.1
+ typescript: 5.5.3
+ upath: 2.0.1
+ webpack: 5.92.1
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+ dev: false
+
+ /@module-federation/managers@0.2.1:
+ resolution: {integrity: sha512-x7Qon5YhLr9KPjig2zPkL76ZFLkvzDm7zrF2fVGO/wURWoeTougZ8vcUsDFrpEHxoQaC3OEgN0i5ZwEeRZlE2Q==}
+ dependencies:
+ '@module-federation/sdk': 0.2.1
+ find-pkg: 2.0.0
+ fs-extra: 9.1.0
+ dev: false
+
+ /@module-federation/manifest@0.2.1(typescript@5.5.3):
+ resolution: {integrity: sha512-Q0mw8ASPwCFdOvVrm7VHUMfki5MCtglb0FIPTDfhhHgVEQ6J2zW7WTu8/6HXY/SiorI1r1YBp9qhh0EzpMxgvA==}
+ dependencies:
+ '@module-federation/dts-plugin': 0.2.1(typescript@5.5.3)
+ '@module-federation/managers': 0.2.1
+ '@module-federation/sdk': 0.2.1
+ chalk: 3.0.0
+ find-pkg: 2.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - vue-tsc
+ dev: false
+
+ /@module-federation/rspack@0.2.1(typescript@5.5.3):
+ resolution: {integrity: sha512-J6IGpHje69E7l6kJAZ++j35OqCJDmkj5vFdt4/nSosgAHH1hnVzTgZAvscvfsupgUntZn0HJWPNmXwBaOrccbw==}
+ dependencies:
+ '@module-federation/bridge-react-webpack-plugin': 0.2.1
+ '@module-federation/dts-plugin': 0.2.1(typescript@5.5.3)
+ '@module-federation/managers': 0.2.1
+ '@module-federation/manifest': 0.2.1(typescript@5.5.3)
+ '@module-federation/runtime-tools': 0.2.1
+ '@module-federation/sdk': 0.2.1
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - vue-tsc
+ dev: false
+
+ /@module-federation/runtime-tools@0.1.6:
+ resolution: {integrity: sha512-7ILVnzMIa0Dlc0Blck5tVZG1tnk1MmLnuZpLOMpbdW+zl+N6wdMjjHMjEZFCUAJh2E5XJ3BREwfX8Ets0nIkLg==}
+ dependencies:
+ '@module-federation/runtime': 0.1.6
+ '@module-federation/webpack-bundler-runtime': 0.1.6
+ dev: true
+
+ /@module-federation/runtime-tools@0.2.1:
+ resolution: {integrity: sha512-UUmEuvYWyubHfgavnqvkVmxI/Js1V4bYEMnIHTQsIn4j1DRe7DKhKeaFk+OxsAzspiIPZdEWrvmzehSYaSChJw==}
+ dependencies:
+ '@module-federation/runtime': 0.2.1
+ '@module-federation/webpack-bundler-runtime': 0.2.1
+ dev: false
+
+ /@module-federation/runtime@0.1.6:
+ resolution: {integrity: sha512-nj6a+yJ+QxmcE89qmrTl4lphBIoAds0PFPVGnqLRWflwAP88jrCcrrTqRhARegkFDL+wE9AE04+h6jzlbIfMKg==}
+ dependencies:
+ '@module-federation/sdk': 0.1.6
+ dev: true
+
+ /@module-federation/runtime@0.2.1:
+ resolution: {integrity: sha512-uzp2Smg2yhJYnfYAlleFrDkVXi8b5MaEd9ve8YjrulCnhN3dAq4tQkwXOiryVtpGT5qVUBdfVoTW+HozYibEOw==}
+ dependencies:
+ '@module-federation/sdk': 0.2.1
+ dev: false
+
+ /@module-federation/sdk@0.1.6:
+ resolution: {integrity: sha512-qifXpyYLM7abUeEOIfv0oTkguZgRZuwh89YOAYIZJlkP6QbRG7DJMQvtM8X2yHXm9PTk0IYNnOJH0vNQCo6auQ==}
+ dev: true
+
+ /@module-federation/sdk@0.2.1:
+ resolution: {integrity: sha512-t3136yds14EBb+BAvp3LJg8E8W+07tNweXUOt5NQfn4TROml6wF4TFyrLsaXi5F8c1C95IGYRxUNKjQ/ImLK6w==}
+ dev: false
+
+ /@module-federation/third-party-dts-extractor@0.2.1:
+ resolution: {integrity: sha512-ws1xxpPcn1nE75jlc5jFeMaj65HdMiO9JN0Z661936q76C6gsjM0G+YQLRy/lr834/F4+zkRBaInyglM98I1eg==}
+ dependencies:
+ find-pkg: 2.0.0
+ fs-extra: 9.1.0
+ resolve: 1.22.8
+ dev: false
+
+ /@module-federation/webpack-bundler-runtime@0.1.6:
+ resolution: {integrity: sha512-K5WhKZ4RVNaMEtfHsd/9CNCgGKB0ipbm/tgweNNeC11mEuBTNxJ09Y630vg3WPkKv9vfMCuXg2p2Dk+Q/KWTSA==}
+ dependencies:
+ '@module-federation/runtime': 0.1.6
+ '@module-federation/sdk': 0.1.6
+ dev: true
+
+ /@module-federation/webpack-bundler-runtime@0.2.1:
+ resolution: {integrity: sha512-8TdWq3TNd6fT6BayQRHtoonGfO5tyW/QjKJE/z2OWFFfG8JYF/dNWcOfLYm9Wui8Xts6nSyQIKhAD0tBifQtMw==}
+ dependencies:
+ '@module-federation/runtime': 0.2.1
+ '@module-federation/sdk': 0.2.1
+ dev: false
+
+ /@polka/url@1.0.0-next.25:
+ resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==}
+ dev: true
+
+ /@rspack/binding-darwin-arm64@0.7.4:
+ resolution: {integrity: sha512-K78fUe9OhFTV61kHYCuahNkBXCFJMmqSGyIgNtLR9Psk82IVCHkvxY5565An1Quvo1UmgVh5R2YmylKE81mwiw==}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-darwin-x64@0.7.4:
+ resolution: {integrity: sha512-EQriu7oE+tZv25g5VJH6Ael74U42fmpb4zGs7wLmWyKfCtO6SegL3tJ8Jc6mMmp+vg949dVvkw7uB6TJjOqx2g==}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-linux-arm64-gnu@0.7.4:
+ resolution: {integrity: sha512-yhJLkU1zEXMyHNWhh8pBEaK6cRAjFzRK2hqejhhZ0K+lqC0Af9bKvZyXXGrMfmmHlsh1VJ9VVmi21qcXr/kdzg==}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-linux-arm64-musl@0.7.4:
+ resolution: {integrity: sha512-6GV3Ztl6Q1zdJmNo+dwHiJd2Y/IEH9qWOh4YHiyzYGbQQYpfhhLYwKexalWaAAhdMm6KKoeqzklgHImCINImEg==}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-linux-x64-gnu@0.7.4:
+ resolution: {integrity: sha512-KFdAEIZ7mPnT0y198xVOa8vIT9tgpEFVidCSIlxdk65UGC59g6UxEQq1EVAbcBi1Ou6Zza/UtxIlzk6Ev6KDkQ==}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-linux-x64-musl@0.7.4:
+ resolution: {integrity: sha512-qekcXkv12oWRztZHXGzNAI92/O/+abU35/nGDycZmMtr+Qt2XS5hE1T9oBQ54yecIzUVDGNcYwhIMWBX6E2dmQ==}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-win32-arm64-msvc@0.7.4:
+ resolution: {integrity: sha512-D1BccimBVeA/k2ty/28ER/j3s/c0n0MtN4kpyjYwgRILVLRSr+rfbC75i8wYh8r8AXjhNWNG88LmrFN9e9i7Ug==}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-win32-ia32-msvc@0.7.4:
+ resolution: {integrity: sha512-5//TZH0Y4fRuTQ/ZmNOVaIfPIQXtgNAI78QxvF8Amygk4Uqklpo3ceHGP+yZfZgjh3mzjoUK+22fWbq/cUmW0w==}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-win32-x64-msvc@0.7.4:
+ resolution: {integrity: sha512-C3ZxIEYKvnjQbV19FfQE6CGO6vcGp2JcvSQCc6SHwU/KNxLDrI1pA7XUG5TKoGSsqVEDZN6H8fJxLUYPQBjJcg==}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding@0.7.4:
+ resolution: {integrity: sha512-H1rTtYxbxe40miV2gYLPwIxEn2yMY6+bq+fjfiRu61kTvllexPMBYgFpKqSAc5Qyyto9j9uCkR4MJEYj2R/SQQ==}
+ optionalDependencies:
+ '@rspack/binding-darwin-arm64': 0.7.4
+ '@rspack/binding-darwin-x64': 0.7.4
+ '@rspack/binding-linux-arm64-gnu': 0.7.4
+ '@rspack/binding-linux-arm64-musl': 0.7.4
+ '@rspack/binding-linux-x64-gnu': 0.7.4
+ '@rspack/binding-linux-x64-musl': 0.7.4
+ '@rspack/binding-win32-arm64-msvc': 0.7.4
+ '@rspack/binding-win32-ia32-msvc': 0.7.4
+ '@rspack/binding-win32-x64-msvc': 0.7.4
+ dev: true
+
+ /@rspack/cli@0.7.4(@rspack/core@0.7.4)(webpack@5.92.1):
+ resolution: {integrity: sha512-UFQWYpgHqrtCzySif9F/ueBn8CbsGmlXOZRYnOzC9HzKXZY9JYgJFbT7EL7JfFe1LmBukF3yaTOuSgTbIxJkJQ==}
+ hasBin: true
+ peerDependencies:
+ '@rspack/core': '>=0.4.0'
+ dependencies:
+ '@discoveryjs/json-ext': 0.5.7
+ '@rspack/core': 0.7.4
+ '@rspack/dev-server': 0.7.4(@rspack/core@0.7.4)(webpack@5.92.1)
+ colorette: 2.0.19
+ exit-hook: 3.2.0
+ interpret: 3.1.1
+ rechoir: 0.8.0
+ semver: 6.3.1
+ webpack-bundle-analyzer: 4.6.1
+ yargs: 17.6.2
+ transitivePeerDependencies:
+ - '@types/express'
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+ - webpack
+ - webpack-cli
+ dev: true
+
+ /@rspack/core@0.7.4:
+ resolution: {integrity: sha512-HECQ0WL8iVS1Mwq2W2hfrStZZbtTPl/GjDdAZDMToPqWtSVGww99UDGIYTHW8G6kawQ3GY6wa86WTQNfXEpSCA==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ '@swc/helpers': '>=0.5.1'
+ peerDependenciesMeta:
+ '@swc/helpers':
+ optional: true
+ dependencies:
+ '@module-federation/runtime-tools': 0.1.6
+ '@rspack/binding': 0.7.4
+ caniuse-lite: 1.0.30001639
+ tapable: 2.2.1
+ webpack-sources: 3.2.3
+ dev: true
+
+ /@rspack/dev-server@0.7.4(@rspack/core@0.7.4)(webpack@5.92.1):
+ resolution: {integrity: sha512-mzc1gqZ0iMmqbsWiVSoRfZQiz2x1wGQc0uibyRzDxZ1Z9IqSjHwoZopVAN9aiR6CNWrSXRHy7KuyhCFfweOh0g==}
+ peerDependencies:
+ '@rspack/core': '*'
+ dependencies:
+ '@rspack/core': 0.7.4
+ chokidar: 3.5.3
+ connect-history-api-fallback: 2.0.0
+ express: 4.19.2
+ http-proxy-middleware: 2.0.6(@types/express@4.17.21)
+ mime-types: 2.1.35
+ webpack-dev-middleware: 6.1.2(webpack@5.92.1)
+ webpack-dev-server: 4.13.1(webpack@5.92.1)
+ ws: 8.8.1
+ transitivePeerDependencies:
+ - '@types/express'
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+ - webpack
+ - webpack-cli
+ dev: true
+
+ /@rspack/plugin-react-refresh@0.7.4(react-refresh@0.14.2):
+ resolution: {integrity: sha512-9tAJdG/xZ6hUtD5K5OVpwAl2yV2HFnNl5fU5aOR5VJ5Pk0rCsYwbEZRbRnmSZwzMWIKDnowhoTi+4Ha3JV3aeQ==}
+ peerDependencies:
+ react-refresh: '>=0.10.0 <1.0.0'
+ peerDependenciesMeta:
+ react-refresh:
+ optional: true
+ dependencies:
+ react-refresh: 0.14.2
+ dev: true
+
+ /@socket.io/component-emitter@3.1.2:
+ resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
+ dev: false
+
+ /@types/body-parser@1.19.5:
+ resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==}
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/bonjour@3.5.13:
+ resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==}
+ dependencies:
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/connect-history-api-fallback@1.5.4:
+ resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==}
+ dependencies:
+ '@types/express-serve-static-core': 4.19.5
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/connect@3.4.38:
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+ dependencies:
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/eslint-scope@3.7.7:
+ resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
+ dependencies:
+ '@types/eslint': 8.56.10
+ '@types/estree': 1.0.5
+
+ /@types/eslint@8.56.10:
+ resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==}
+ dependencies:
+ '@types/estree': 1.0.5
+ '@types/json-schema': 7.0.15
+
+ /@types/estree@1.0.5:
+ resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
+
+ /@types/express-serve-static-core@4.19.5:
+ resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==}
+ dependencies:
+ '@types/node': 20.14.9
+ '@types/qs': 6.9.15
+ '@types/range-parser': 1.2.7
+ '@types/send': 0.17.4
+ dev: true
+
+ /@types/express@4.17.21:
+ resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==}
+ dependencies:
+ '@types/body-parser': 1.19.5
+ '@types/express-serve-static-core': 4.19.5
+ '@types/qs': 6.9.15
+ '@types/serve-static': 1.15.7
+ dev: true
+
+ /@types/http-errors@2.0.4:
+ resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==}
+ dev: true
+
+ /@types/http-proxy@1.17.14:
+ resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==}
+ dependencies:
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/json-schema@7.0.15:
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+ /@types/mime@1.3.5:
+ resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
+ dev: true
+
+ /@types/node-forge@1.3.11:
+ resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==}
+ dependencies:
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/node@20.14.9:
+ resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==}
+ dependencies:
+ undici-types: 5.26.5
+
+ /@types/prop-types@15.7.12:
+ resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==}
+ dev: true
+
+ /@types/qs@6.9.15:
+ resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==}
+ dev: true
+
+ /@types/range-parser@1.2.7:
+ resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
+ dev: true
+
+ /@types/react-dom@18.3.0:
+ resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==}
+ dependencies:
+ '@types/react': 18.3.3
+ dev: true
+
+ /@types/react@18.3.3:
+ resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==}
+ dependencies:
+ '@types/prop-types': 15.7.12
+ csstype: 3.1.3
+ dev: true
+
+ /@types/retry@0.12.0:
+ resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==}
+ dev: true
+
+ /@types/send@0.17.4:
+ resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==}
+ dependencies:
+ '@types/mime': 1.3.5
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/serve-index@1.9.4:
+ resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==}
+ dependencies:
+ '@types/express': 4.17.21
+ dev: true
+
+ /@types/serve-static@1.15.7:
+ resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==}
+ dependencies:
+ '@types/http-errors': 2.0.4
+ '@types/node': 20.14.9
+ '@types/send': 0.17.4
+ dev: true
+
+ /@types/sockjs@0.3.36:
+ resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==}
+ dependencies:
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/ws@8.5.10:
+ resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==}
+ dependencies:
+ '@types/node': 20.14.9
+ dev: true
+
+ /@webassemblyjs/ast@1.12.1:
+ resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==}
+ dependencies:
+ '@webassemblyjs/helper-numbers': 1.11.6
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+
+ /@webassemblyjs/floating-point-hex-parser@1.11.6:
+ resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==}
+
+ /@webassemblyjs/helper-api-error@1.11.6:
+ resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==}
+
+ /@webassemblyjs/helper-buffer@1.12.1:
+ resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==}
+
+ /@webassemblyjs/helper-numbers@1.11.6:
+ resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==}
+ dependencies:
+ '@webassemblyjs/floating-point-hex-parser': 1.11.6
+ '@webassemblyjs/helper-api-error': 1.11.6
+ '@xtuc/long': 4.2.2
+
+ /@webassemblyjs/helper-wasm-bytecode@1.11.6:
+ resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==}
+
+ /@webassemblyjs/helper-wasm-section@1.12.1:
+ resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-buffer': 1.12.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+ '@webassemblyjs/wasm-gen': 1.12.1
+
+ /@webassemblyjs/ieee754@1.11.6:
+ resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==}
+ dependencies:
+ '@xtuc/ieee754': 1.2.0
+
+ /@webassemblyjs/leb128@1.11.6:
+ resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==}
+ dependencies:
+ '@xtuc/long': 4.2.2
+
+ /@webassemblyjs/utf8@1.11.6:
+ resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==}
+
+ /@webassemblyjs/wasm-edit@1.12.1:
+ resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-buffer': 1.12.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+ '@webassemblyjs/helper-wasm-section': 1.12.1
+ '@webassemblyjs/wasm-gen': 1.12.1
+ '@webassemblyjs/wasm-opt': 1.12.1
+ '@webassemblyjs/wasm-parser': 1.12.1
+ '@webassemblyjs/wast-printer': 1.12.1
+
+ /@webassemblyjs/wasm-gen@1.12.1:
+ resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+ '@webassemblyjs/ieee754': 1.11.6
+ '@webassemblyjs/leb128': 1.11.6
+ '@webassemblyjs/utf8': 1.11.6
+
+ /@webassemblyjs/wasm-opt@1.12.1:
+ resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-buffer': 1.12.1
+ '@webassemblyjs/wasm-gen': 1.12.1
+ '@webassemblyjs/wasm-parser': 1.12.1
+
+ /@webassemblyjs/wasm-parser@1.12.1:
+ resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-api-error': 1.11.6
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+ '@webassemblyjs/ieee754': 1.11.6
+ '@webassemblyjs/leb128': 1.11.6
+ '@webassemblyjs/utf8': 1.11.6
+
+ /@webassemblyjs/wast-printer@1.12.1:
+ resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@xtuc/long': 4.2.2
+
+ /@xtuc/ieee754@1.2.0:
+ resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
+
+ /@xtuc/long@4.2.2:
+ resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
+
+ /accepts@1.3.8:
+ resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-types: 2.1.35
+ negotiator: 0.6.3
+
+ /acorn-import-attributes@1.9.5(acorn@8.12.0):
+ resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
+ peerDependencies:
+ acorn: ^8
+ dependencies:
+ acorn: 8.12.0
+
+ /acorn-walk@8.3.3:
+ resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==}
+ engines: {node: '>=0.4.0'}
+ dependencies:
+ acorn: 8.12.0
+ dev: true
+
+ /acorn@8.12.0:
+ resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ /adm-zip@0.5.14:
+ resolution: {integrity: sha512-DnyqqifT4Jrcvb8USYjp6FHtBpEIz1mnXu6pTRHZ0RL69LbQYiO+0lDFg5+OKA7U29oWSs3a/i8fhn8ZcceIWg==}
+ engines: {node: '>=12.0'}
+ dev: false
+
+ /ajv-formats@2.1.1(ajv@8.16.0):
+ resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+ dependencies:
+ ajv: 8.16.0
+ dev: true
+
+ /ajv-keywords@3.5.2(ajv@6.12.6):
+ resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
+ peerDependencies:
+ ajv: ^6.9.1
+ dependencies:
+ ajv: 6.12.6
+
+ /ajv-keywords@5.1.0(ajv@8.16.0):
+ resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
+ peerDependencies:
+ ajv: ^8.8.2
+ dependencies:
+ ajv: 8.16.0
+ fast-deep-equal: 3.1.3
+ dev: true
+
+ /ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
+ /ajv@8.16.0:
+ resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+ uri-js: 4.4.1
+ dev: true
+
+ /ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /ansi-html-community@0.0.8:
+ resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==}
+ engines: {'0': node >= 0.8.0}
+ hasBin: true
+ dev: true
+
+ /ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+ dependencies:
+ color-convert: 2.0.1
+
+ /any-promise@1.3.0:
+ resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
+ dev: false
+
+ /anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+ dev: true
+
+ /array-flatten@1.1.1:
+ resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
+ dev: true
+
+ /asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+ dev: false
+
+ /at-least-node@1.0.0:
+ resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
+ engines: {node: '>= 4.0.0'}
+ dev: false
+
+ /axios@1.7.2:
+ resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==}
+ dependencies:
+ follow-redirects: 1.15.6
+ form-data: 4.0.0
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+ dev: false
+
+ /balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ dev: true
+
+ /batch@0.6.1:
+ resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==}
+ dev: true
+
+ /binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /body-parser@1.20.2:
+ resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ on-finished: 2.4.1
+ qs: 6.11.0
+ raw-body: 2.5.2
+ type-is: 1.6.18
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /bonjour-service@1.2.1:
+ resolution: {integrity: sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ multicast-dns: 7.2.5
+ dev: true
+
+ /brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+ dev: true
+
+ /braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+ dependencies:
+ fill-range: 7.1.1
+ dev: true
+
+ /browserslist@4.23.1:
+ resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+ dependencies:
+ caniuse-lite: 1.0.30001639
+ electron-to-chromium: 1.4.816
+ node-releases: 2.0.14
+ update-browserslist-db: 1.0.16(browserslist@4.23.1)
+
+ /btoa@1.2.1:
+ resolution: {integrity: sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==}
+ engines: {node: '>= 0.4.0'}
+ hasBin: true
+ dev: false
+
+ /buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ /bundle-name@4.1.0:
+ resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
+ engines: {node: '>=18'}
+ dependencies:
+ run-applescript: 7.0.0
+ dev: false
+
+ /bytes@3.0.0:
+ resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /bytes@3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /cache-content-type@1.0.1:
+ resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==}
+ engines: {node: '>= 6.0.0'}
+ dependencies:
+ mime-types: 2.1.35
+ ylru: 1.4.0
+ dev: false
+
+ /call-bind@1.0.7:
+ resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ set-function-length: 1.2.2
+ dev: true
+
+ /caniuse-lite@1.0.30001639:
+ resolution: {integrity: sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==}
+
+ /chalk@3.0.0:
+ resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+ dev: false
+
+ /chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+ dev: true
+
+ /chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+ dev: true
+
+ /chrome-trace-event@1.0.4:
+ resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
+ engines: {node: '>=6.0'}
+
+ /ci-info@3.9.0:
+ resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
+ engines: {node: '>=8'}
+ dev: false
+
+ /cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+ dev: true
+
+ /co@4.6.0:
+ resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
+ engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
+ dev: false
+
+ /color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+ dependencies:
+ color-name: 1.1.4
+
+ /color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ /colorette@2.0.19:
+ resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==}
+ dev: true
+
+ /combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ delayed-stream: 1.0.0
+ dev: false
+
+ /commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ /commander@7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+ dev: true
+
+ /compressible@2.0.18:
+ resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-db: 1.52.0
+ dev: true
+
+ /compression@1.7.4:
+ resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ accepts: 1.3.8
+ bytes: 3.0.0
+ compressible: 2.0.18
+ debug: 2.6.9
+ on-headers: 1.0.2
+ safe-buffer: 5.1.2
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ dev: true
+
+ /connect-history-api-fallback@2.0.0:
+ resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==}
+ engines: {node: '>=0.8'}
+ dev: true
+
+ /content-disposition@0.5.4:
+ resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ safe-buffer: 5.2.1
+
+ /content-type@1.0.5:
+ resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+ engines: {node: '>= 0.6'}
+
+ /cookie-signature@1.0.6:
+ resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
+ dev: true
+
+ /cookie@0.6.0:
+ resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /cookies@0.8.0:
+ resolution: {integrity: sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ depd: 2.0.0
+ keygrip: 1.1.0
+ dev: false
+
+ /core-util-is@1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+ dev: true
+
+ /cron-parser@4.9.0:
+ resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==}
+ engines: {node: '>=12.0.0'}
+ dependencies:
+ luxon: 3.4.4
+ dev: false
+
+ /cross-spawn@7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+ engines: {node: '>= 8'}
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+ dev: true
+
+ /csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+ dev: true
+
+ /date-format@4.0.14:
+ resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==}
+ engines: {node: '>=4.0'}
+ dev: false
+
+ /debug@2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.0.0
+ dev: true
+
+ /debug@3.1.0:
+ resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.0.0
+ dev: false
+
+ /debug@4.3.5:
+ resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.1.2
+
+ /deep-equal@1.0.1:
+ resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==}
+ dev: false
+
+ /default-browser-id@5.0.0:
+ resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==}
+ engines: {node: '>=18'}
+ dev: false
+
+ /default-browser@5.2.1:
+ resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==}
+ engines: {node: '>=18'}
+ dependencies:
+ bundle-name: 4.1.0
+ default-browser-id: 5.0.0
+ dev: false
+
+ /default-gateway@6.0.3:
+ resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==}
+ engines: {node: '>= 10'}
+ dependencies:
+ execa: 5.1.1
+ dev: true
+
+ /define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ gopd: 1.0.1
+ dev: true
+
+ /define-lazy-prop@2.0.0:
+ resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /define-lazy-prop@3.0.0:
+ resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+ dev: false
+
+ /delegates@1.0.0:
+ resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
+ dev: false
+
+ /depd@1.1.2:
+ resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
+ engines: {node: '>= 0.6'}
+
+ /depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
+ /destroy@1.2.0:
+ resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
+ /detect-node@2.1.0:
+ resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
+ dev: true
+
+ /dns-packet@5.6.1:
+ resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==}
+ engines: {node: '>=6'}
+ dependencies:
+ '@leichtgewicht/ip-codec': 2.0.5
+ dev: true
+
+ /duplexer@0.1.2:
+ resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
+ dev: true
+
+ /ee-first@1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+
+ /electron-to-chromium@1.4.816:
+ resolution: {integrity: sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==}
+
+ /emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ dev: true
+
+ /encodeurl@1.0.2:
+ resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
+ engines: {node: '>= 0.8'}
+
+ /engine.io-client@6.5.4:
+ resolution: {integrity: sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==}
+ dependencies:
+ '@socket.io/component-emitter': 3.1.2
+ debug: 4.3.5
+ engine.io-parser: 5.2.2
+ ws: 8.17.1
+ xmlhttprequest-ssl: 2.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+ dev: false
+
+ /engine.io-parser@5.2.2:
+ resolution: {integrity: sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==}
+ engines: {node: '>=10.0.0'}
+ dev: false
+
+ /enhanced-resolve@5.17.0:
+ resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.2.1
+
+ /error-inject@1.0.0:
+ resolution: {integrity: sha512-JM8N6PytDbmIYm1IhPWlo8vr3NtfjhDY/1MhD/a5b/aad/USE8a0+NsqE9d5n+GVGmuNkPQWm4bFQWv18d8tMg==}
+ dev: false
+
+ /es-define-property@1.0.0:
+ resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ get-intrinsic: 1.2.4
+ dev: true
+
+ /es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /es-module-lexer@1.5.4:
+ resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==}
+
+ /escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ /escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
+ /eslint-scope@5.1.1:
+ resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 4.3.0
+
+ /esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+ dependencies:
+ estraverse: 5.3.0
+
+ /estraverse@4.3.0:
+ resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+ engines: {node: '>=4.0'}
+
+ /estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+
+ /etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+ dev: true
+
+ /events@3.3.0:
+ resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
+ engines: {node: '>=0.8.x'}
+
+ /execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+ dev: true
+
+ /exit-hook@3.2.0:
+ resolution: {integrity: sha512-aIQN7Q04HGAV/I5BszisuHTZHXNoC23WtLkxdCLuYZMdWviRD0TMIt2bnUBi9MrHaF/hH8b3gwG9iaAUHKnJGA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dev: true
+
+ /expand-tilde@2.0.2:
+ resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ homedir-polyfill: 1.0.3
+ dev: false
+
+ /express@4.19.2:
+ resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==}
+ engines: {node: '>= 0.10.0'}
+ dependencies:
+ accepts: 1.3.8
+ array-flatten: 1.1.1
+ body-parser: 1.20.2
+ content-disposition: 0.5.4
+ content-type: 1.0.5
+ cookie: 0.6.0
+ cookie-signature: 1.0.6
+ debug: 2.6.9
+ depd: 2.0.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 1.2.0
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ merge-descriptors: 1.0.1
+ methods: 1.1.2
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ path-to-regexp: 0.1.7
+ proxy-addr: 2.0.7
+ qs: 6.11.0
+ range-parser: 1.2.1
+ safe-buffer: 5.2.1
+ send: 0.18.0
+ serve-static: 1.15.0
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ type-is: 1.6.18
+ utils-merge: 1.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ /fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ /faye-websocket@0.11.4:
+ resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==}
+ engines: {node: '>=0.8.0'}
+ dependencies:
+ websocket-driver: 0.7.4
+ dev: true
+
+ /fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+ dependencies:
+ to-regex-range: 5.0.1
+ dev: true
+
+ /finalhandler@1.2.0:
+ resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ debug: 2.6.9
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.1
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /find-file-up@2.0.1:
+ resolution: {integrity: sha512-qVdaUhYO39zmh28/JLQM5CoYN9byEOKEH4qfa8K1eNV17W0UUMJ9WgbR/hHFH+t5rcl+6RTb5UC7ck/I+uRkpQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ resolve-dir: 1.0.1
+ dev: false
+
+ /find-package-json@1.2.0:
+ resolution: {integrity: sha512-+SOGcLGYDJHtyqHd87ysBhmaeQ95oWspDKnMXBrnQ9Eq4OkLNqejgoaD8xVWu6GPa0B6roa6KinCMEMcVeqONw==}
+ dev: false
+
+ /find-pkg@2.0.0:
+ resolution: {integrity: sha512-WgZ+nKbELDa6N3i/9nrHeNznm+lY3z4YfhDDWgW+5P0pdmMj26bxaxU11ookgY3NyP9GC7HvZ9etp0jRFqGEeQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ find-file-up: 2.0.1
+ dev: false
+
+ /flatted@3.3.1:
+ resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
+ dev: false
+
+ /follow-redirects@1.15.6:
+ resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ /form-data@4.0.0:
+ resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
+ engines: {node: '>= 6'}
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
+ dev: false
+
+ /forwarded@0.2.0:
+ resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /fresh@0.5.2:
+ resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
+ engines: {node: '>= 0.6'}
+
+ /fs-extra@8.1.0:
+ resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
+ engines: {node: '>=6 <7 || >=8'}
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 4.0.0
+ universalify: 0.1.2
+ dev: false
+
+ /fs-extra@9.1.0:
+ resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ at-least-node: 1.0.0
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+ dev: false
+
+ /fs-monkey@1.0.6:
+ resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==}
+ dev: true
+
+ /fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+ dev: true
+
+ /fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ /get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+ dev: true
+
+ /get-intrinsic@1.2.4:
+ resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ has-proto: 1.0.3
+ has-symbols: 1.0.3
+ hasown: 2.0.2
+ dev: true
+
+ /get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+ dependencies:
+ is-glob: 4.0.3
+ dev: true
+
+ /glob-to-regexp@0.4.1:
+ resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+
+ /glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+ dev: true
+
+ /global-modules@1.0.0:
+ resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ global-prefix: 1.0.2
+ is-windows: 1.0.2
+ resolve-dir: 1.0.1
+ dev: false
+
+ /global-prefix@1.0.2:
+ resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ expand-tilde: 2.0.2
+ homedir-polyfill: 1.0.3
+ ini: 1.3.8
+ is-windows: 1.0.2
+ which: 1.3.1
+ dev: false
+
+ /gopd@1.0.1:
+ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+ dependencies:
+ get-intrinsic: 1.2.4
+ dev: true
+
+ /graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ /gzip-size@6.0.0:
+ resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ duplexer: 0.1.2
+ dev: true
+
+ /handle-thing@2.0.1:
+ resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==}
+ dev: true
+
+ /has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ /has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+ dependencies:
+ es-define-property: 1.0.0
+ dev: true
+
+ /has-proto@1.0.3:
+ resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /has-symbols@1.0.3:
+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+ engines: {node: '>= 0.4'}
+
+ /has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-symbols: 1.0.3
+ dev: false
+
+ /hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ function-bind: 1.1.2
+
+ /homedir-polyfill@1.0.3:
+ resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ parse-passwd: 1.0.0
+ dev: false
+
+ /hpack.js@2.1.6:
+ resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==}
+ dependencies:
+ inherits: 2.0.4
+ obuf: 1.1.2
+ readable-stream: 2.3.8
+ wbuf: 1.7.3
+ dev: true
+
+ /html-entities@2.5.2:
+ resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==}
+ dev: true
+
+ /http-assert@1.5.0:
+ resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ deep-equal: 1.0.1
+ http-errors: 1.8.1
+ dev: false
+
+ /http-deceiver@1.2.7:
+ resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==}
+ dev: true
+
+ /http-errors@1.6.3:
+ resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ depd: 1.1.2
+ inherits: 2.0.3
+ setprototypeof: 1.1.0
+ statuses: 1.5.0
+ dev: true
+
+ /http-errors@1.8.1:
+ resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ depd: 1.1.2
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 1.5.0
+ toidentifier: 1.0.1
+ dev: false
+
+ /http-errors@2.0.0:
+ resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ toidentifier: 1.0.1
+ dev: true
+
+ /http-parser-js@0.5.8:
+ resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==}
+ dev: true
+
+ /http-proxy-middleware@2.0.6(@types/express@4.17.21):
+ resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@types/express': ^4.17.13
+ peerDependenciesMeta:
+ '@types/express':
+ optional: true
+ dependencies:
+ '@types/express': 4.17.21
+ '@types/http-proxy': 1.17.14
+ http-proxy: 1.18.1
+ is-glob: 4.0.3
+ is-plain-obj: 3.0.0
+ micromatch: 4.0.7
+ transitivePeerDependencies:
+ - debug
+ dev: true
+
+ /http-proxy@1.18.1:
+ resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ eventemitter3: 4.0.7
+ follow-redirects: 1.15.6
+ requires-port: 1.0.0
+ transitivePeerDependencies:
+ - debug
+ dev: true
+
+ /human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+ dev: true
+
+ /iconv-lite@0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ safer-buffer: 2.1.2
+ dev: true
+
+ /inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+ dev: true
+
+ /inherits@2.0.3:
+ resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
+ dev: true
+
+ /inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ /ini@1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+ dev: false
+
+ /interpret@3.1.1:
+ resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==}
+ engines: {node: '>=10.13.0'}
+ dev: true
+
+ /ipaddr.js@1.9.1:
+ resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
+ engines: {node: '>= 0.10'}
+ dev: true
+
+ /ipaddr.js@2.2.0:
+ resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==}
+ engines: {node: '>= 10'}
+ dev: true
+
+ /is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+ dependencies:
+ binary-extensions: 2.3.0
+ dev: true
+
+ /is-ci@3.0.1:
+ resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==}
+ hasBin: true
+ dependencies:
+ ci-info: 3.9.0
+ dev: false
+
+ /is-core-module@2.14.0:
+ resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ hasown: 2.0.2
+
+ /is-docker@2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+ dev: true
+
+ /is-docker@3.0.0:
+ resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ hasBin: true
+ dev: false
+
+ /is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-generator-function@1.0.10:
+ resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.2
+ dev: false
+
+ /is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-extglob: 2.1.1
+ dev: true
+
+ /is-inside-container@1.0.0:
+ resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
+ engines: {node: '>=14.16'}
+ hasBin: true
+ dependencies:
+ is-docker: 3.0.0
+ dev: false
+
+ /is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+ dev: true
+
+ /is-plain-obj@3.0.0:
+ resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-windows@1.0.2:
+ resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /is-wsl@2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
+ dependencies:
+ is-docker: 2.2.1
+ dev: true
+
+ /is-wsl@3.1.0:
+ resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
+ engines: {node: '>=16'}
+ dependencies:
+ is-inside-container: 1.0.0
+ dev: false
+
+ /isarray@1.0.0:
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+ dev: true
+
+ /isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ /isomorphic-ws@5.0.0(ws@8.17.1):
+ resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==}
+ peerDependencies:
+ ws: '*'
+ dependencies:
+ ws: 8.17.1
+ dev: false
+
+ /jest-worker@27.5.1:
+ resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
+ engines: {node: '>= 10.13.0'}
+ dependencies:
+ '@types/node': 20.14.9
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
+ /jose@5.6.2:
+ resolution: {integrity: sha512-F1t1/WZJ4JdmCE/XoMYw1dPOW5g8JF0xGm6Ox2fwaCAPlCzt+4Bh0EWP59iQuZNHHauDkCdjx+kCZSh5z/PGow==}
+ dev: false
+
+ /js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+ dev: false
+
+ /json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+ /json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+ /json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+ dev: true
+
+ /jsonfile@4.0.0:
+ resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
+ optionalDependencies:
+ graceful-fs: 4.2.11
+ dev: false
+
+ /jsonfile@6.1.0:
+ resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+ dev: false
+
+ /keygrip@1.1.0:
+ resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ tsscmp: 1.0.6
+ dev: false
+
+ /koa-compose@3.2.1:
+ resolution: {integrity: sha512-8gen2cvKHIZ35eDEik5WOo8zbVp9t4cP8p4hW4uE55waxolLRexKKrqfCpwhGVppnB40jWeF8bZeTVg99eZgPw==}
+ dependencies:
+ any-promise: 1.3.0
+ dev: false
+
+ /koa-compose@4.1.0:
+ resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==}
+ dev: false
+
+ /koa-convert@1.2.0:
+ resolution: {integrity: sha512-K9XqjmEDStGX09v3oxR7t5uPRy0jqJdvodHa6wxWTHrTfDq0WUNnYTOOUZN6g8OM8oZQXprQASbiIXG2Ez8ehA==}
+ engines: {node: '>= 4'}
+ dependencies:
+ co: 4.6.0
+ koa-compose: 3.2.1
+ dev: false
+
+ /koa@2.11.0:
+ resolution: {integrity: sha512-EpR9dElBTDlaDgyhDMiLkXrPwp6ZqgAIBvhhmxQ9XN4TFgW+gEz6tkcsNI6BnUbUftrKDjVFj4lW2/J2aNBMMA==}
+ engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4}
+ dependencies:
+ accepts: 1.3.8
+ cache-content-type: 1.0.1
+ content-disposition: 0.5.4
+ content-type: 1.0.5
+ cookies: 0.8.0
+ debug: 3.1.0
+ delegates: 1.0.0
+ depd: 1.1.2
+ destroy: 1.2.0
+ encodeurl: 1.0.2
+ error-inject: 1.0.0
+ escape-html: 1.0.3
+ fresh: 0.5.2
+ http-assert: 1.5.0
+ http-errors: 1.8.1
+ is-generator-function: 1.0.10
+ koa-compose: 4.1.0
+ koa-convert: 1.2.0
+ on-finished: 2.4.1
+ only: 0.0.2
+ parseurl: 1.3.3
+ statuses: 1.5.0
+ type-is: 1.6.18
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /launch-editor@2.8.0:
+ resolution: {integrity: sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==}
+ dependencies:
+ picocolors: 1.0.1
+ shell-quote: 1.8.1
+ dev: true
+
+ /loader-runner@4.3.0:
+ resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
+ engines: {node: '>=6.11.5'}
+
+ /lodash.clonedeepwith@4.5.0:
+ resolution: {integrity: sha512-QRBRSxhbtsX1nc0baxSkkK5WlVTTm/s48DSukcGcWZwIyI8Zz+lB+kFiELJXtzfH4Aj6kMWQ1VWW4U5uUDgZMA==}
+ dev: false
+
+ /lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+ dev: true
+
+ /log4js@6.9.1:
+ resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==}
+ engines: {node: '>=8.0'}
+ dependencies:
+ date-format: 4.0.14
+ debug: 4.3.5
+ flatted: 3.3.1
+ rfdc: 1.4.1
+ streamroller: 3.1.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /long-timeout@0.1.1:
+ resolution: {integrity: sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==}
+ dev: false
+
+ /loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+ dependencies:
+ js-tokens: 4.0.0
+ dev: false
+
+ /luxon@3.4.4:
+ resolution: {integrity: sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /media-typer@0.3.0:
+ resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
+ engines: {node: '>= 0.6'}
+
+ /memfs@3.5.3:
+ resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==}
+ engines: {node: '>= 4.0.0'}
+ dependencies:
+ fs-monkey: 1.0.6
+ dev: true
+
+ /merge-descriptors@1.0.1:
+ resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
+ dev: true
+
+ /merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+ /methods@1.1.2:
+ resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /micromatch@4.0.7:
+ resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==}
+ engines: {node: '>=8.6'}
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+ dev: true
+
+ /mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ /mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-db: 1.52.0
+
+ /mime@1.6.0:
+ resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dev: true
+
+ /mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /minimalistic-assert@1.0.1:
+ resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
+ dev: true
+
+ /minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+ dependencies:
+ brace-expansion: 1.1.11
+ dev: true
+
+ /mrmime@1.0.1:
+ resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /ms@2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+
+ /ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ /ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ dev: true
+
+ /multicast-dns@7.2.5:
+ resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==}
+ hasBin: true
+ dependencies:
+ dns-packet: 5.6.1
+ thunky: 1.1.0
+ dev: true
+
+ /negotiator@0.6.3:
+ resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
+ engines: {node: '>= 0.6'}
+
+ /neo-async@2.6.2:
+ resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+
+ /node-forge@1.3.1:
+ resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==}
+ engines: {node: '>= 6.13.0'}
+ dev: true
+
+ /node-persist@4.0.1:
+ resolution: {integrity: sha512-QtRjwAlcOQChQpfG6odtEhxYmA3nS5XYr+bx9JRjwahl1TM3sm9J3CCn51/MI0eoHRb2DrkEsCOFo8sq8jG5sQ==}
+ engines: {node: '>=10.12.0'}
+ dev: false
+
+ /node-releases@2.0.14:
+ resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
+
+ /node-schedule@2.1.1:
+ resolution: {integrity: sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==}
+ engines: {node: '>=6'}
+ dependencies:
+ cron-parser: 4.9.0
+ long-timeout: 0.1.1
+ sorted-array-functions: 1.3.0
+ dev: false
+
+ /normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+ dependencies:
+ path-key: 3.1.1
+ dev: true
+
+ /object-inspect@1.13.2:
+ resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /obuf@1.1.2:
+ resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==}
+ dev: true
+
+ /on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ ee-first: 1.1.1
+
+ /on-headers@1.0.2:
+ resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+ dependencies:
+ wrappy: 1.0.2
+ dev: true
+
+ /onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+ dependencies:
+ mimic-fn: 2.1.0
+ dev: true
+
+ /only@0.0.2:
+ resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==}
+ dev: false
+
+ /open@10.1.0:
+ resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==}
+ engines: {node: '>=18'}
+ dependencies:
+ default-browser: 5.2.1
+ define-lazy-prop: 3.0.0
+ is-inside-container: 1.0.0
+ is-wsl: 3.1.0
+ dev: false
+
+ /open@8.4.2:
+ resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ define-lazy-prop: 2.0.0
+ is-docker: 2.2.1
+ is-wsl: 2.2.0
+ dev: true
+
+ /opener@1.5.2:
+ resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==}
+ hasBin: true
+ dev: true
+
+ /p-retry@4.6.2:
+ resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@types/retry': 0.12.0
+ retry: 0.13.1
+ dev: true
+
+ /parse-passwd@1.0.0:
+ resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+
+ /path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ /path-to-regexp@0.1.7:
+ resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
+ dev: true
+
+ /picocolors@1.0.1:
+ resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
+
+ /picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+ dev: true
+
+ /prettier@3.3.2:
+ resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==}
+ engines: {node: '>=14'}
+ hasBin: true
+ dev: true
+
+ /process-nextick-args@2.0.1:
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+ dev: true
+
+ /proxy-addr@2.0.7:
+ resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ forwarded: 0.2.0
+ ipaddr.js: 1.9.1
+ dev: true
+
+ /proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+ dev: false
+
+ /punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
+ /qs@6.11.0:
+ resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
+ engines: {node: '>=0.6'}
+ dependencies:
+ side-channel: 1.0.6
+ dev: true
+
+ /rambda@9.2.1:
+ resolution: {integrity: sha512-6Dp+QQVQuAuhwBlbIvL2FjJVHCKF29W+n9ca/BMTVDqpj+Q7KKqUh7UAINEna8aaB2/oRvPuL5hViCTQARa70Q==}
+ dev: false
+
+ /randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+ dependencies:
+ safe-buffer: 5.2.1
+
+ /range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /raw-body@2.5.2:
+ resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ unpipe: 1.0.0
+ dev: true
+
+ /react-dom@18.3.1(react@18.3.1):
+ resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
+ peerDependencies:
+ react: ^18.3.1
+ dependencies:
+ loose-envify: 1.4.0
+ react: 18.3.1
+ scheduler: 0.23.2
+ dev: false
+
+ /react-refresh@0.14.2:
+ resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /react@18.3.1:
+ resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ loose-envify: 1.4.0
+ dev: false
+
+ /readable-stream@2.3.8:
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+ dev: true
+
+ /readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+ dev: true
+
+ /readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+ dependencies:
+ picomatch: 2.3.1
+ dev: true
+
+ /rechoir@0.8.0:
+ resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==}
+ engines: {node: '>= 10.13.0'}
+ dependencies:
+ resolve: 1.22.8
+ dev: true
+
+ /require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /requires-port@1.0.0:
+ resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
+ dev: true
+
+ /resolve-dir@1.0.1:
+ resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ expand-tilde: 2.0.2
+ global-modules: 1.0.0
+ dev: false
+
+ /resolve@1.22.8:
+ resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
+ hasBin: true
+ dependencies:
+ is-core-module: 2.14.0
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ /retry@0.13.1:
+ resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
+ engines: {node: '>= 4'}
+ dev: true
+
+ /rfdc@1.4.1:
+ resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+ dev: false
+
+ /rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
+ hasBin: true
+ dependencies:
+ glob: 7.2.3
+ dev: true
+
+ /run-applescript@7.0.0:
+ resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==}
+ engines: {node: '>=18'}
+ dev: false
+
+ /safe-buffer@5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+ dev: true
+
+ /safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ /safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+ dev: true
+
+ /scheduler@0.23.2:
+ resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+ dependencies:
+ loose-envify: 1.4.0
+ dev: false
+
+ /schema-utils@3.3.0:
+ resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
+ engines: {node: '>= 10.13.0'}
+ dependencies:
+ '@types/json-schema': 7.0.15
+ ajv: 6.12.6
+ ajv-keywords: 3.5.2(ajv@6.12.6)
+
+ /schema-utils@4.2.0:
+ resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==}
+ engines: {node: '>= 12.13.0'}
+ dependencies:
+ '@types/json-schema': 7.0.15
+ ajv: 8.16.0
+ ajv-formats: 2.1.1(ajv@8.16.0)
+ ajv-keywords: 5.1.0(ajv@8.16.0)
+ dev: true
+
+ /select-hose@2.0.0:
+ resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==}
+ dev: true
+
+ /selfsigned@2.4.1:
+ resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ '@types/node-forge': 1.3.11
+ node-forge: 1.3.1
+ dev: true
+
+ /semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+ dev: true
+
+ /send@0.18.0:
+ resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ mime: 1.6.0
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /serialize-javascript@6.0.2:
+ resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+ dependencies:
+ randombytes: 2.1.0
+
+ /serve-index@1.9.1:
+ resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ accepts: 1.3.8
+ batch: 0.6.1
+ debug: 2.6.9
+ escape-html: 1.0.3
+ http-errors: 1.6.3
+ mime-types: 2.1.35
+ parseurl: 1.3.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /serve-static@1.15.0:
+ resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 0.18.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.2
+ dev: true
+
+ /setprototypeof@1.1.0:
+ resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==}
+ dev: true
+
+ /setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
+ /shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+ dependencies:
+ shebang-regex: 3.0.0
+ dev: true
+
+ /shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /shell-quote@1.8.1:
+ resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==}
+ dev: true
+
+ /side-channel@1.0.6:
+ resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+ object-inspect: 1.13.2
+ dev: true
+
+ /signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+ dev: true
+
+ /sirv@1.0.19:
+ resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==}
+ engines: {node: '>= 10'}
+ dependencies:
+ '@polka/url': 1.0.0-next.25
+ mrmime: 1.0.1
+ totalist: 1.1.0
+ dev: true
+
+ /socket.io-client@4.7.5:
+ resolution: {integrity: sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==}
+ engines: {node: '>=10.0.0'}
+ dependencies:
+ '@socket.io/component-emitter': 3.1.2
+ debug: 4.3.5
+ engine.io-client: 6.5.4
+ socket.io-parser: 4.2.4
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+ dev: false
+
+ /socket.io-parser@4.2.4:
+ resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==}
+ engines: {node: '>=10.0.0'}
+ dependencies:
+ '@socket.io/component-emitter': 3.1.2
+ debug: 4.3.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /sockjs@0.3.24:
+ resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==}
+ dependencies:
+ faye-websocket: 0.11.4
+ uuid: 8.3.2
+ websocket-driver: 0.7.4
+ dev: true
+
+ /sorted-array-functions@1.3.0:
+ resolution: {integrity: sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==}
+ dev: false
+
+ /source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ /source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ /spdy-transport@3.0.0:
+ resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==}
+ dependencies:
+ debug: 4.3.5
+ detect-node: 2.1.0
+ hpack.js: 2.1.6
+ obuf: 1.1.2
+ readable-stream: 3.6.2
+ wbuf: 1.7.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /spdy@4.0.2:
+ resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ debug: 4.3.5
+ handle-thing: 2.0.1
+ http-deceiver: 1.2.7
+ select-hose: 2.0.0
+ spdy-transport: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /statuses@1.5.0:
+ resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
+ engines: {node: '>= 0.6'}
+
+ /statuses@2.0.1:
+ resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /streamroller@3.1.5:
+ resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==}
+ engines: {node: '>=8.0'}
+ dependencies:
+ date-format: 4.0.14
+ debug: 4.3.5
+ fs-extra: 8.1.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+ dev: true
+
+ /string_decoder@1.1.1:
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+ dependencies:
+ safe-buffer: 5.1.2
+ dev: true
+
+ /string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: true
+
+ /strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-regex: 5.0.1
+ dev: true
+
+ /strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+ dependencies:
+ has-flag: 4.0.0
+
+ /supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ has-flag: 4.0.0
+
+ /supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ /tapable@2.2.1:
+ resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
+ engines: {node: '>=6'}
+
+ /terser-webpack-plugin@5.3.10(webpack@5.92.1):
+ resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==}
+ engines: {node: '>= 10.13.0'}
+ peerDependencies:
+ '@swc/core': '*'
+ esbuild: '*'
+ uglify-js: '*'
+ webpack: ^5.1.0
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ esbuild:
+ optional: true
+ uglify-js:
+ optional: true
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.25
+ jest-worker: 27.5.1
+ schema-utils: 3.3.0
+ serialize-javascript: 6.0.2
+ terser: 5.31.1
+ webpack: 5.92.1
+
+ /terser@5.31.1:
+ resolution: {integrity: sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ '@jridgewell/source-map': 0.3.6
+ acorn: 8.12.0
+ commander: 2.20.3
+ source-map-support: 0.5.21
+
+ /thunky@1.1.0:
+ resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==}
+ dev: true
+
+ /to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+ dependencies:
+ is-number: 7.0.0
+ dev: true
+
+ /toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
+ /totalist@1.1.0:
+ resolution: {integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /tslib@2.6.3:
+ resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
+ dev: false
+
+ /tsscmp@1.0.6:
+ resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==}
+ engines: {node: '>=0.6.x'}
+ dev: false
+
+ /type-is@1.6.18:
+ resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ media-typer: 0.3.0
+ mime-types: 2.1.35
+
+ /typescript@5.5.3:
+ resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+ dev: false
+
+ /undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ /universalify@0.1.2:
+ resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
+ engines: {node: '>= 4.0.0'}
+ dev: false
+
+ /universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+ dev: false
+
+ /unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /upath@2.0.1:
+ resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /update-browserslist-db@1.0.16(browserslist@4.23.1):
+ resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+ dependencies:
+ browserslist: 4.23.1
+ escalade: 3.1.2
+ picocolors: 1.0.1
+
+ /uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ dependencies:
+ punycode: 2.3.1
+
+ /util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+ dev: true
+
+ /utils-merge@1.0.1:
+ resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
+ engines: {node: '>= 0.4.0'}
+ dev: true
+
+ /uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ /vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+
+ /watchpack@2.4.1:
+ resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+
+ /wbuf@1.7.3:
+ resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==}
+ dependencies:
+ minimalistic-assert: 1.0.1
+ dev: true
+
+ /webpack-bundle-analyzer@4.6.1:
+ resolution: {integrity: sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw==}
+ engines: {node: '>= 10.13.0'}
+ hasBin: true
+ dependencies:
+ acorn: 8.12.0
+ acorn-walk: 8.3.3
+ chalk: 4.1.2
+ commander: 7.2.0
+ gzip-size: 6.0.0
+ lodash: 4.17.21
+ opener: 1.5.2
+ sirv: 1.0.19
+ ws: 7.5.10
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+ dev: true
+
+ /webpack-dev-middleware@5.3.4(webpack@5.92.1):
+ resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==}
+ engines: {node: '>= 12.13.0'}
+ peerDependencies:
+ webpack: ^4.0.0 || ^5.0.0
+ dependencies:
+ colorette: 2.0.19
+ memfs: 3.5.3
+ mime-types: 2.1.35
+ range-parser: 1.2.1
+ schema-utils: 4.2.0
+ webpack: 5.92.1
+ dev: true
+
+ /webpack-dev-middleware@6.1.2(webpack@5.92.1):
+ resolution: {integrity: sha512-Wu+EHmX326YPYUpQLKmKbTyZZJIB8/n6R09pTmB03kJmnMsVPTo9COzHZFr01txwaCAuZvfBJE4ZCHRcKs5JaQ==}
+ engines: {node: '>= 14.15.0'}
+ peerDependencies:
+ webpack: ^5.0.0
+ peerDependenciesMeta:
+ webpack:
+ optional: true
+ dependencies:
+ colorette: 2.0.19
+ memfs: 3.5.3
+ mime-types: 2.1.35
+ range-parser: 1.2.1
+ schema-utils: 4.2.0
+ webpack: 5.92.1
+ dev: true
+
+ /webpack-dev-server@4.13.1(webpack@5.92.1):
+ resolution: {integrity: sha512-5tWg00bnWbYgkN+pd5yISQKDejRBYGEw15RaEEslH+zdbNDxxaZvEAO2WulaSaFKb5n3YG8JXsGaDsut1D0xdA==}
+ engines: {node: '>= 12.13.0'}
+ hasBin: true
+ peerDependencies:
+ webpack: ^4.37.0 || ^5.0.0
+ webpack-cli: '*'
+ peerDependenciesMeta:
+ webpack:
+ optional: true
+ webpack-cli:
+ optional: true
+ dependencies:
+ '@types/bonjour': 3.5.13
+ '@types/connect-history-api-fallback': 1.5.4
+ '@types/express': 4.17.21
+ '@types/serve-index': 1.9.4
+ '@types/serve-static': 1.15.7
+ '@types/sockjs': 0.3.36
+ '@types/ws': 8.5.10
+ ansi-html-community: 0.0.8
+ bonjour-service: 1.2.1
+ chokidar: 3.5.3
+ colorette: 2.0.19
+ compression: 1.7.4
+ connect-history-api-fallback: 2.0.0
+ default-gateway: 6.0.3
+ express: 4.19.2
+ graceful-fs: 4.2.11
+ html-entities: 2.5.2
+ http-proxy-middleware: 2.0.6(@types/express@4.17.21)
+ ipaddr.js: 2.2.0
+ launch-editor: 2.8.0
+ open: 8.4.2
+ p-retry: 4.6.2
+ rimraf: 3.0.2
+ schema-utils: 4.2.0
+ selfsigned: 2.4.1
+ serve-index: 1.9.1
+ sockjs: 0.3.24
+ spdy: 4.0.2
+ webpack: 5.92.1
+ webpack-dev-middleware: 5.3.4(webpack@5.92.1)
+ ws: 8.17.1
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+ dev: true
+
+ /webpack-sources@3.2.3:
+ resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
+ engines: {node: '>=10.13.0'}
+
+ /webpack@5.92.1:
+ resolution: {integrity: sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+ peerDependencies:
+ webpack-cli: '*'
+ peerDependenciesMeta:
+ webpack-cli:
+ optional: true
+ dependencies:
+ '@types/eslint-scope': 3.7.7
+ '@types/estree': 1.0.5
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/wasm-edit': 1.12.1
+ '@webassemblyjs/wasm-parser': 1.12.1
+ acorn: 8.12.0
+ acorn-import-attributes: 1.9.5(acorn@8.12.0)
+ browserslist: 4.23.1
+ chrome-trace-event: 1.0.4
+ enhanced-resolve: 5.17.0
+ es-module-lexer: 1.5.4
+ eslint-scope: 5.1.1
+ events: 3.3.0
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+ json-parse-even-better-errors: 2.3.1
+ loader-runner: 4.3.0
+ mime-types: 2.1.35
+ neo-async: 2.6.2
+ schema-utils: 3.3.0
+ tapable: 2.2.1
+ terser-webpack-plugin: 5.3.10(webpack@5.92.1)
+ watchpack: 2.4.1
+ webpack-sources: 3.2.3
+ transitivePeerDependencies:
+ - '@swc/core'
+ - esbuild
+ - uglify-js
+
+ /websocket-driver@0.7.4:
+ resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==}
+ engines: {node: '>=0.8.0'}
+ dependencies:
+ http-parser-js: 0.5.8
+ safe-buffer: 5.2.1
+ websocket-extensions: 0.1.4
+ dev: true
+
+ /websocket-extensions@0.1.4:
+ resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==}
+ engines: {node: '>=0.8.0'}
+ dev: true
+
+ /which@1.3.1:
+ resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+ dev: false
+
+ /which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+ dev: true
+
+ /wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ dev: true
+
+ /wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ dev: true
+
+ /ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ dev: true
+
+ /ws@8.17.1:
+ resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ /ws@8.8.1:
+ resolution: {integrity: sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ dev: true
+
+ /xmlhttprequest-ssl@2.0.0:
+ resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==}
+ engines: {node: '>=0.4.0'}
+ dev: false
+
+ /y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /yargs@17.6.2:
+ resolution: {integrity: sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==}
+ engines: {node: '>=12'}
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+ dev: true
+
+ /ylru@1.4.0:
+ resolution: {integrity: sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==}
+ engines: {node: '>= 4.0.0'}
+ dev: false
+
+ /zephyr-agent@0.0.13:
+ resolution: {integrity: sha512-MxSthGw3OVs80dG6JWeauIGdvMLpfpS2DxlfWVdQjqMnvnU/2OToOxGX+f6qdfpnu1bu+jd/QetPjmwBHxYLxg==}
+ dependencies:
+ is-ci: 3.0.1
+ jose: 5.6.2
+ open: 10.1.0
+ socket.io-client: 4.7.5
+ tslib: 2.6.3
+ uuid: 8.3.2
+ zephyr-edge-contract: 0.0.13
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+ dev: false
+
+ /zephyr-edge-contract@0.0.13:
+ resolution: {integrity: sha512-RvYPYjQnC54GDTxG/dvMvjYfQcjmCxA/ugqs3/W1L280o3z3gxiFyM0Wo+4Zca3V/GCo03isvbs0KGJwj2VD8Q==}
+ dependencies:
+ debug: 4.3.5
+ node-persist: 4.0.1
+ tslib: 2.6.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /zephyr-webpack-plugin@0.0.13:
+ resolution: {integrity: sha512-LEFrj8gNzAzrCKSomSwLWMqFqpVgOVxJVmMwzQy3cZ4yAQeNgpjLAm5BOccE3MoewPWqdgzTCjEbqdIK+TyMFQ==}
+ dependencies:
+ '@module-federation/automatic-vendor-federation': 1.2.1(webpack@5.92.1)
+ is-ci: 3.0.1
+ tslib: 2.6.3
+ webpack: 5.92.1
+ zephyr-agent: 0.0.13
+ zephyr-edge-contract: 0.0.13
+ transitivePeerDependencies:
+ - '@swc/core'
+ - bufferutil
+ - esbuild
+ - supports-color
+ - uglify-js
+ - utf-8-validate
+ - webpack-cli
+ dev: false
diff --git a/rspack_hmr/app2/rspack.config.js b/rspack_hmr/app2/rspack.config.js
new file mode 100644
index 0000000..e76e13b
--- /dev/null
+++ b/rspack_hmr/app2/rspack.config.js
@@ -0,0 +1,110 @@
+const rspack = require('@rspack/core');
+const refreshPlugin = require('@rspack/plugin-react-refresh');
+const isDev = process.env.NODE_ENV === 'development';
+
+const path = require('path');
+const deps = require('./package.json').dependencies;
+console.log({ deps });
+const { ModuleFederationPlugin } = require('@module-federation/enhanced/rspack');
+
+const name = 'app_02';
+const name1 = name + '1';
+/**
+ * @type {import('@rspack/cli').Configuration}
+ */
+module.exports = {
+ entry: {
+ main: './src/index.tsx',
+ },
+ resolve: {
+ extensions: ['...', '.ts', '.tsx', '.jsx'],
+ },
+
+ devtool: 'source-map',
+ optimization: {
+ minimize: false,
+ },
+ devServer: {
+ port: 3001,
+ hot: true,
+ static: {
+ directory: path.join(__dirname, 'build'),
+ },
+ liveReload: false,
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, PATCH, OPTIONS',
+ 'Access-Control-Allow-Headers': 'X-Requested-With, content-type, Authorization',
+ },
+ },
+ optimization: { minimize: false },
+ output: {
+ path: __dirname + '/dist',
+ uniqueName: name1,
+ publicPath: 'http://localhost:3001/',
+ filename: '[name].js',
+ },
+ watch: true,
+ module: {
+ rules: [
+ {
+ test: /\.svg$/,
+ type: 'asset',
+ },
+ {
+ test: /\.(jsx?|tsx?)$/,
+ exclude: /(node_modules|\.webpack)/,
+ use: [
+ {
+ loader: 'builtin:swc-loader',
+ options: {
+ sourceMap: true,
+ jsc: {
+ parser: {
+ syntax: 'typescript',
+ tsx: true,
+ },
+ transform: {
+ react: {
+ runtime: 'automatic',
+ development: isDev,
+ refresh: isDev,
+ },
+ },
+ },
+ env: {
+ targets: ['chrome >= 87', 'edge >= 88', 'firefox >= 78', 'safari >= 14'],
+ },
+ },
+ },
+ ],
+ },
+ ],
+ },
+ plugins: [
+ new rspack.DefinePlugin({
+ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
+ }),
+ new rspack.ProgressPlugin({}),
+ isDev && new rspack.HotModuleReplacementPlugin(),
+
+ new rspack.HtmlRspackPlugin({
+ template: './index.html',
+ excludedChunks: [name],
+ filename: 'index.html',
+ inject: true,
+ publicPath: '/',
+ }),
+ new ModuleFederationPlugin({
+ name: name,
+ filename: 'remoteEntry.js',
+ exposes: {
+ './Hello': './src/Hello.tsx',
+ './pi': './src/pi.ts',
+ },
+ manifest: true,
+
+ }),
+ isDev ? new refreshPlugin() : null,
+ ].filter(Boolean),
+};
diff --git a/rspack_hmr/app2/src/App.css b/rspack_hmr/app2/src/App.css
new file mode 100644
index 0000000..2c5e2ef
--- /dev/null
+++ b/rspack_hmr/app2/src/App.css
@@ -0,0 +1,41 @@
+#root {
+ max-width: 1280px;
+ margin: 0 auto;
+ padding: 2rem;
+ text-align: center;
+}
+
+.logo {
+ height: 6em;
+ padding: 1.5em;
+ will-change: filter;
+}
+.logo:hover {
+ filter: drop-shadow(0 0 2em #646cffaa);
+}
+.logo.react:hover {
+ filter: drop-shadow(0 0 2em #61dafbaa);
+}
+
+@keyframes logo-spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ a:nth-of-type(2) .logo {
+ animation: logo-spin infinite 20s linear;
+ }
+}
+
+.card {
+ padding: 2em;
+}
+
+.read-the-docs {
+ color: #888;
+}
diff --git a/rspack_hmr/app2/src/App.tsx b/rspack_hmr/app2/src/App.tsx
new file mode 100644
index 0000000..86f291d
--- /dev/null
+++ b/rspack_hmr/app2/src/App.tsx
@@ -0,0 +1,21 @@
+import './App.css';
+import { Hello } from './Hello';
+
+function App() {
+ return (
+
+
+
App_02 :)
+
+ This is currently in app2 while we are using the{' '}
+ 'Hello'
module ourselves, we are also exposing it and
+ providing it to other applications.
+
+
+
+
+
+ );
+}
+
+export default App;
diff --git a/rspack_hmr/app2/src/Hello.tsx b/rspack_hmr/app2/src/Hello.tsx
new file mode 100644
index 0000000..2fc4fa9
--- /dev/null
+++ b/rspack_hmr/app2/src/Hello.tsx
@@ -0,0 +1,16 @@
+interface Props {
+ name: string;
+}
+
+export const Hello = ({ name }: Props) => {
+ return (
+
+
+ <Hello name="{name}"> from app2
+
+
+ Hello, from app_02, {name}!
+
+
+ );
+};
diff --git a/rspack_hmr/app2/src/assets/react.svg b/rspack_hmr/app2/src/assets/react.svg
new file mode 100644
index 0000000..6c87de9
--- /dev/null
+++ b/rspack_hmr/app2/src/assets/react.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/rspack_hmr/app2/src/bootstrap.tsx b/rspack_hmr/app2/src/bootstrap.tsx
new file mode 100644
index 0000000..8c4462a
--- /dev/null
+++ b/rspack_hmr/app2/src/bootstrap.tsx
@@ -0,0 +1,10 @@
+import React from 'react';
+import ReactDOM from 'react-dom/client';
+import App from './App.tsx';
+import './index.css';
+
+ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
+
+
+ ,
+);
diff --git a/rspack_hmr/app2/src/index.css b/rspack_hmr/app2/src/index.css
new file mode 100644
index 0000000..0d181ba
--- /dev/null
+++ b/rspack_hmr/app2/src/index.css
@@ -0,0 +1,70 @@
+:root {
+ font-family: Inter, Avenir, Helvetica, Arial, sans-serif;
+ font-size: 16px;
+ line-height: 24px;
+ font-weight: 400;
+
+ color-scheme: light dark;
+ color: rgba(255, 255, 255, 0.87);
+ background-color: #242424;
+
+ font-synthesis: none;
+ text-rendering: optimizeLegibility;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-text-size-adjust: 100%;
+}
+
+a {
+ font-weight: 500;
+ color: #646cff;
+ text-decoration: inherit;
+}
+a:hover {
+ color: #535bf2;
+}
+
+body {
+ margin: 0;
+ display: flex;
+ place-items: center;
+ min-width: 640px;
+ min-height: 100vh;
+}
+
+h1 {
+ font-size: 3.2em;
+ line-height: 1.1;
+}
+
+button {
+ border-radius: 8px;
+ border: 1px solid transparent;
+ padding: 0.6em 1.2em;
+ font-size: 1em;
+ font-weight: 500;
+ font-family: inherit;
+ background-color: #1a1a1a;
+ cursor: pointer;
+ transition: border-color 0.25s;
+}
+button:hover {
+ border-color: #646cff;
+}
+button:focus,
+button:focus-visible {
+ outline: 4px auto -webkit-focus-ring-color;
+}
+
+@media (prefers-color-scheme: light) {
+ :root {
+ color: #213547;
+ background-color: #ffffff;
+ }
+ a:hover {
+ color: #747bff;
+ }
+ button {
+ background-color: #f9f9f9;
+ }
+}
diff --git a/rspack_hmr/app2/src/index.tsx b/rspack_hmr/app2/src/index.tsx
new file mode 100644
index 0000000..b93c7a0
--- /dev/null
+++ b/rspack_hmr/app2/src/index.tsx
@@ -0,0 +1 @@
+import('./bootstrap');
diff --git a/rspack_hmr/app2/src/pi.ts b/rspack_hmr/app2/src/pi.ts
new file mode 100644
index 0000000..37493ec
--- /dev/null
+++ b/rspack_hmr/app2/src/pi.ts
@@ -0,0 +1,3 @@
+export default function pi() {
+ return 3.141592653589793;
+}
diff --git a/rspack_hmr/app2/src/react-env.d.ts b/rspack_hmr/app2/src/react-env.d.ts
new file mode 100644
index 0000000..bd4c10d
--- /dev/null
+++ b/rspack_hmr/app2/src/react-env.d.ts
@@ -0,0 +1,213 @@
+// CSS modules
+type CSSModuleClasses = { readonly [key: string]: string };
+
+declare module '*.module.css' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.scss' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.sass' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.less' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.styl' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.stylus' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.pcss' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.sss' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+
+// CSS
+declare module '*.css' {
+ /**
+ * @deprecated Use `import style from './style.css?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.scss' {
+ /**
+ * @deprecated Use `import style from './style.scss?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.sass' {
+ /**
+ * @deprecated Use `import style from './style.sass?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.less' {
+ /**
+ * @deprecated Use `import style from './style.less?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.styl' {
+ /**
+ * @deprecated Use `import style from './style.styl?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.stylus' {
+ /**
+ * @deprecated Use `import style from './style.stylus?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.pcss' {
+ /**
+ * @deprecated Use `import style from './style.pcss?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.sss' {
+ /**
+ * @deprecated Use `import style from './style.sss?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+
+// images
+declare module '*.png' {
+ const src: string;
+ export default src;
+}
+declare module '*.jpg' {
+ const src: string;
+ export default src;
+}
+declare module '*.jpeg' {
+ const src: string;
+ export default src;
+}
+declare module '*.jfif' {
+ const src: string;
+ export default src;
+}
+declare module '*.pjpeg' {
+ const src: string;
+ export default src;
+}
+declare module '*.pjp' {
+ const src: string;
+ export default src;
+}
+declare module '*.gif' {
+ const src: string;
+ export default src;
+}
+declare module '*.svg' {
+ const ReactComponent: React.FC>;
+ const content: string;
+
+ export { ReactComponent };
+ export default content;
+}
+declare module '*.ico' {
+ const src: string;
+ export default src;
+}
+declare module '*.webp' {
+ const src: string;
+ export default src;
+}
+declare module '*.avif' {
+ const src: string;
+ export default src;
+}
+
+// media
+declare module '*.mp4' {
+ const src: string;
+ export default src;
+}
+declare module '*.webm' {
+ const src: string;
+ export default src;
+}
+declare module '*.ogg' {
+ const src: string;
+ export default src;
+}
+declare module '*.mp3' {
+ const src: string;
+ export default src;
+}
+declare module '*.wav' {
+ const src: string;
+ export default src;
+}
+declare module '*.flac' {
+ const src: string;
+ export default src;
+}
+declare module '*.aac' {
+ const src: string;
+ export default src;
+}
+
+declare module '*.opus' {
+ const src: string;
+ export default src;
+}
+
+// fonts
+declare module '*.woff' {
+ const src: string;
+ export default src;
+}
+declare module '*.woff2' {
+ const src: string;
+ export default src;
+}
+declare module '*.eot' {
+ const src: string;
+ export default src;
+}
+declare module '*.ttf' {
+ const src: string;
+ export default src;
+}
+declare module '*.otf' {
+ const src: string;
+ export default src;
+}
+
+// other
+declare module '*.webmanifest' {
+ const src: string;
+ export default src;
+}
+declare module '*.pdf' {
+ const src: string;
+ export default src;
+}
+declare module '*.txt' {
+ const src: string;
+ export default src;
+}
diff --git a/rspack_hmr/app2/tsconfig.json b/rspack_hmr/app2/tsconfig.json
new file mode 100644
index 0000000..1f067d6
--- /dev/null
+++ b/rspack_hmr/app2/tsconfig.json
@@ -0,0 +1,18 @@
+{
+ "compilerOptions": {
+ "target": "ES6",
+ "lib": ["DOM", "DOM.Iterable", "ESNext"],
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "react-jsx",
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["src"]
+}
diff --git a/rspack_hmr/host/.gitignore b/rspack_hmr/host/.gitignore
new file mode 100644
index 0000000..a547bf3
--- /dev/null
+++ b/rspack_hmr/host/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/rspack_hmr/host/@mf-types/app_02/Hello.d.ts b/rspack_hmr/host/@mf-types/app_02/Hello.d.ts
new file mode 100644
index 0000000..965f617
--- /dev/null
+++ b/rspack_hmr/host/@mf-types/app_02/Hello.d.ts
@@ -0,0 +1,2 @@
+export * from './compiled-types/Hello';
+export { default } from './compiled-types/Hello';
\ No newline at end of file
diff --git a/rspack_hmr/host/@mf-types/app_02/apis.d.ts b/rspack_hmr/host/@mf-types/app_02/apis.d.ts
new file mode 100644
index 0000000..2cc44cb
--- /dev/null
+++ b/rspack_hmr/host/@mf-types/app_02/apis.d.ts
@@ -0,0 +1,3 @@
+
+ export type RemoteKeys = 'app_02/Hello' | 'app_02/pi';
+ type PackageType = T extends 'app_02/pi' ? typeof import('app_02/pi') :T extends 'app_02/Hello' ? typeof import('app_02/Hello') :any;
\ No newline at end of file
diff --git a/rspack_hmr/host/@mf-types/app_02/compiled-types/Hello.d.ts b/rspack_hmr/host/@mf-types/app_02/compiled-types/Hello.d.ts
new file mode 100644
index 0000000..a70e0b7
--- /dev/null
+++ b/rspack_hmr/host/@mf-types/app_02/compiled-types/Hello.d.ts
@@ -0,0 +1,5 @@
+interface Props {
+ name: string;
+}
+export declare const Hello: ({ name }: Props) => import("react/jsx-runtime").JSX.Element;
+export {};
diff --git a/rspack_hmr/host/@mf-types/app_02/compiled-types/pi.d.ts b/rspack_hmr/host/@mf-types/app_02/compiled-types/pi.d.ts
new file mode 100644
index 0000000..98a0b63
--- /dev/null
+++ b/rspack_hmr/host/@mf-types/app_02/compiled-types/pi.d.ts
@@ -0,0 +1 @@
+export default function pi(): number;
diff --git a/rspack_hmr/host/@mf-types/app_02/pi.d.ts b/rspack_hmr/host/@mf-types/app_02/pi.d.ts
new file mode 100644
index 0000000..b1d8b3d
--- /dev/null
+++ b/rspack_hmr/host/@mf-types/app_02/pi.d.ts
@@ -0,0 +1,2 @@
+export * from './compiled-types/pi';
+export { default } from './compiled-types/pi';
\ No newline at end of file
diff --git a/rspack_hmr/host/@mf-types/index.d.ts b/rspack_hmr/host/@mf-types/index.d.ts
new file mode 100644
index 0000000..38e2a4f
--- /dev/null
+++ b/rspack_hmr/host/@mf-types/index.d.ts
@@ -0,0 +1,23 @@
+import type { PackageType as PackageType_0,RemoteKeys as RemoteKeys_0 } from './app_02/apis.d.ts';
+ declare module "@module-federation/runtime" {
+ type RemoteKeys = RemoteKeys_0;
+ type PackageType = T extends RemoteKeys_0 ? PackageType_0 :
+Y ;
+ export function loadRemote(packageName: T): Promise>;
+ export function loadRemote(packageName: T): Promise>;
+ }
+declare module "@module-federation/enhanced/runtime" {
+ type RemoteKeys = RemoteKeys_0;
+ type PackageType = T extends RemoteKeys_0 ? PackageType_0 :
+Y ;
+ export function loadRemote(packageName: T): Promise>;
+ export function loadRemote(packageName: T): Promise>;
+ }
+declare module "@module-federation/runtime-tools" {
+ type RemoteKeys = RemoteKeys_0;
+ type PackageType = T extends RemoteKeys_0 ? PackageType_0 :
+Y ;
+ export function loadRemote(packageName: T): Promise>;
+ export function loadRemote(packageName: T): Promise>;
+ }
+
\ No newline at end of file
diff --git a/rspack_hmr/host/index.html b/rspack_hmr/host/index.html
new file mode 100644
index 0000000..2dc4b39
--- /dev/null
+++ b/rspack_hmr/host/index.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+ rspack + react + ts
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rspack_hmr/host/package.json b/rspack_hmr/host/package.json
new file mode 100644
index 0000000..76a981b
--- /dev/null
+++ b/rspack_hmr/host/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "@rspack-hmr/rspack-host",
+ "private": true,
+ "version": "1.0.0",
+ "scripts": {
+ "dev": "NODE_ENV=development rspack serve",
+ "build": "NODE_ENV=production rspack build"
+ },
+ "dependencies": {
+ "@module-federation/enhanced": "0.2.1",
+ "@module-federation/runtime": "0.2.1",
+ "@module-federation/sdk": "0.2.1",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "zephyr-webpack-plugin": "^0.0.13"
+ },
+ "devDependencies": {
+ "@rspack/cli": "0.7.4",
+ "@rspack/core": "0.7.4",
+ "@rspack/plugin-react-refresh": "0.7.4",
+ "@types/react": "18.3.3",
+ "@types/react-dom": "18.3.0",
+ "prettier": "3.3.2",
+ "react-refresh": "0.14.2"
+ }
+}
diff --git a/rspack_hmr/host/pnpm-lock.yaml b/rspack_hmr/host/pnpm-lock.yaml
new file mode 100644
index 0000000..6359e06
--- /dev/null
+++ b/rspack_hmr/host/pnpm-lock.yaml
@@ -0,0 +1,3163 @@
+lockfileVersion: '6.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+dependencies:
+ '@module-federation/enhanced':
+ specifier: 0.2.1
+ version: 0.2.1(typescript@5.5.3)(webpack@5.92.1)
+ '@module-federation/runtime':
+ specifier: 0.2.1
+ version: 0.2.1
+ '@module-federation/sdk':
+ specifier: 0.2.1
+ version: 0.2.1
+ react:
+ specifier: ^18.2.0
+ version: 18.3.1
+ react-dom:
+ specifier: ^18.2.0
+ version: 18.3.1(react@18.3.1)
+ zephyr-webpack-plugin:
+ specifier: ^0.0.13
+ version: 0.0.13
+
+devDependencies:
+ '@rspack/cli':
+ specifier: 0.7.4
+ version: 0.7.4(@rspack/core@0.7.4)(webpack@5.92.1)
+ '@rspack/core':
+ specifier: 0.7.4
+ version: 0.7.4
+ '@rspack/plugin-react-refresh':
+ specifier: 0.7.4
+ version: 0.7.4(react-refresh@0.14.2)
+ '@types/react':
+ specifier: 18.3.3
+ version: 18.3.3
+ '@types/react-dom':
+ specifier: 18.3.0
+ version: 18.3.0
+ prettier:
+ specifier: 3.3.2
+ version: 3.3.2
+ react-refresh:
+ specifier: 0.14.2
+ version: 0.14.2
+
+packages:
+
+ /@discoveryjs/json-ext@0.5.7:
+ resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
+ engines: {node: '>=10.0.0'}
+ dev: true
+
+ /@jridgewell/gen-mapping@0.3.5:
+ resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.4.15
+ '@jridgewell/trace-mapping': 0.3.25
+
+ /@jridgewell/resolve-uri@3.1.2:
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ /@jridgewell/set-array@1.2.1:
+ resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
+ engines: {node: '>=6.0.0'}
+
+ /@jridgewell/source-map@0.3.6:
+ resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
+
+ /@jridgewell/sourcemap-codec@1.4.15:
+ resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
+
+ /@jridgewell/trace-mapping@0.3.25:
+ resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.4.15
+
+ /@leichtgewicht/ip-codec@2.0.5:
+ resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==}
+ dev: true
+
+ /@module-federation/automatic-vendor-federation@1.2.1(webpack@5.92.1):
+ resolution: {integrity: sha512-73wxkXM7pbRZ6GGM90JP5IPTPvY3fvrhQyTVdMCUx85cQRWqnbzbibcsz3pkOMOeXyYAO4tXXsG13yNaEEGhJA==}
+ peerDependencies:
+ webpack: 5.91.0
+ dependencies:
+ find-package-json: 1.2.0
+ webpack: 5.92.1
+ dev: false
+
+ /@module-federation/bridge-react-webpack-plugin@0.2.1:
+ resolution: {integrity: sha512-dWqA4mm81yDBBWD452UiX3TXxFQPpu4KCArAIO72cISq5Llrsd0WbyUQY1DOWFN8wdhy5OwyMS5qj5wCNHXeew==}
+ dependencies:
+ '@module-federation/sdk': 0.2.1
+ dev: false
+
+ /@module-federation/dts-plugin@0.2.1(typescript@5.5.3):
+ resolution: {integrity: sha512-hr1w7KEaIVvoCB6mn1//+yZig099m6Ux3b5lW+w7SrH54dLzJHtIfllhWhZPZi5D9Y3mMuQlAxodsCD/sXQlKQ==}
+ peerDependencies:
+ typescript: ^4.9.0 || ^5.0.0
+ vue-tsc: ^1.0.24
+ peerDependenciesMeta:
+ vue-tsc:
+ optional: true
+ dependencies:
+ '@module-federation/managers': 0.2.1
+ '@module-federation/sdk': 0.2.1
+ '@module-federation/third-party-dts-extractor': 0.2.1
+ adm-zip: 0.5.14
+ ansi-colors: 4.1.3
+ axios: 1.7.2
+ chalk: 3.0.0
+ fs-extra: 9.1.0
+ isomorphic-ws: 5.0.0(ws@8.17.1)
+ koa: 2.11.0
+ lodash.clonedeepwith: 4.5.0
+ log4js: 6.9.1
+ node-schedule: 2.1.1
+ rambda: 9.2.1
+ typescript: 5.5.3
+ ws: 8.17.1
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+ dev: false
+
+ /@module-federation/enhanced@0.2.1(typescript@5.5.3)(webpack@5.92.1):
+ resolution: {integrity: sha512-4iXsTU7HQUNtZMR4FAUTuctBQ9jOkYPINiCRveZjERW+UWC2g6KZ/rjbT5H5pBu/Ta6os8NSuNECtXGsT6Bprg==}
+ peerDependencies:
+ typescript: ^4.9.0 || ^5.0.0
+ vue-tsc: ^1.0.24
+ webpack: ^5.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ vue-tsc:
+ optional: true
+ webpack:
+ optional: true
+ dependencies:
+ '@module-federation/bridge-react-webpack-plugin': 0.2.1
+ '@module-federation/dts-plugin': 0.2.1(typescript@5.5.3)
+ '@module-federation/managers': 0.2.1
+ '@module-federation/manifest': 0.2.1(typescript@5.5.3)
+ '@module-federation/rspack': 0.2.1(typescript@5.5.3)
+ '@module-federation/runtime-tools': 0.2.1
+ '@module-federation/sdk': 0.2.1
+ btoa: 1.2.1
+ typescript: 5.5.3
+ upath: 2.0.1
+ webpack: 5.92.1
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+ dev: false
+
+ /@module-federation/managers@0.2.1:
+ resolution: {integrity: sha512-x7Qon5YhLr9KPjig2zPkL76ZFLkvzDm7zrF2fVGO/wURWoeTougZ8vcUsDFrpEHxoQaC3OEgN0i5ZwEeRZlE2Q==}
+ dependencies:
+ '@module-federation/sdk': 0.2.1
+ find-pkg: 2.0.0
+ fs-extra: 9.1.0
+ dev: false
+
+ /@module-federation/manifest@0.2.1(typescript@5.5.3):
+ resolution: {integrity: sha512-Q0mw8ASPwCFdOvVrm7VHUMfki5MCtglb0FIPTDfhhHgVEQ6J2zW7WTu8/6HXY/SiorI1r1YBp9qhh0EzpMxgvA==}
+ dependencies:
+ '@module-federation/dts-plugin': 0.2.1(typescript@5.5.3)
+ '@module-federation/managers': 0.2.1
+ '@module-federation/sdk': 0.2.1
+ chalk: 3.0.0
+ find-pkg: 2.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - vue-tsc
+ dev: false
+
+ /@module-federation/rspack@0.2.1(typescript@5.5.3):
+ resolution: {integrity: sha512-J6IGpHje69E7l6kJAZ++j35OqCJDmkj5vFdt4/nSosgAHH1hnVzTgZAvscvfsupgUntZn0HJWPNmXwBaOrccbw==}
+ dependencies:
+ '@module-federation/bridge-react-webpack-plugin': 0.2.1
+ '@module-federation/dts-plugin': 0.2.1(typescript@5.5.3)
+ '@module-federation/managers': 0.2.1
+ '@module-federation/manifest': 0.2.1(typescript@5.5.3)
+ '@module-federation/runtime-tools': 0.2.1
+ '@module-federation/sdk': 0.2.1
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - vue-tsc
+ dev: false
+
+ /@module-federation/runtime-tools@0.1.6:
+ resolution: {integrity: sha512-7ILVnzMIa0Dlc0Blck5tVZG1tnk1MmLnuZpLOMpbdW+zl+N6wdMjjHMjEZFCUAJh2E5XJ3BREwfX8Ets0nIkLg==}
+ dependencies:
+ '@module-federation/runtime': 0.1.6
+ '@module-federation/webpack-bundler-runtime': 0.1.6
+ dev: true
+
+ /@module-federation/runtime-tools@0.2.1:
+ resolution: {integrity: sha512-UUmEuvYWyubHfgavnqvkVmxI/Js1V4bYEMnIHTQsIn4j1DRe7DKhKeaFk+OxsAzspiIPZdEWrvmzehSYaSChJw==}
+ dependencies:
+ '@module-federation/runtime': 0.2.1
+ '@module-federation/webpack-bundler-runtime': 0.2.1
+ dev: false
+
+ /@module-federation/runtime@0.1.6:
+ resolution: {integrity: sha512-nj6a+yJ+QxmcE89qmrTl4lphBIoAds0PFPVGnqLRWflwAP88jrCcrrTqRhARegkFDL+wE9AE04+h6jzlbIfMKg==}
+ dependencies:
+ '@module-federation/sdk': 0.1.6
+ dev: true
+
+ /@module-federation/runtime@0.2.1:
+ resolution: {integrity: sha512-uzp2Smg2yhJYnfYAlleFrDkVXi8b5MaEd9ve8YjrulCnhN3dAq4tQkwXOiryVtpGT5qVUBdfVoTW+HozYibEOw==}
+ dependencies:
+ '@module-federation/sdk': 0.2.1
+ dev: false
+
+ /@module-federation/sdk@0.1.6:
+ resolution: {integrity: sha512-qifXpyYLM7abUeEOIfv0oTkguZgRZuwh89YOAYIZJlkP6QbRG7DJMQvtM8X2yHXm9PTk0IYNnOJH0vNQCo6auQ==}
+ dev: true
+
+ /@module-federation/sdk@0.2.1:
+ resolution: {integrity: sha512-t3136yds14EBb+BAvp3LJg8E8W+07tNweXUOt5NQfn4TROml6wF4TFyrLsaXi5F8c1C95IGYRxUNKjQ/ImLK6w==}
+ dev: false
+
+ /@module-federation/third-party-dts-extractor@0.2.1:
+ resolution: {integrity: sha512-ws1xxpPcn1nE75jlc5jFeMaj65HdMiO9JN0Z661936q76C6gsjM0G+YQLRy/lr834/F4+zkRBaInyglM98I1eg==}
+ dependencies:
+ find-pkg: 2.0.0
+ fs-extra: 9.1.0
+ resolve: 1.22.8
+ dev: false
+
+ /@module-federation/webpack-bundler-runtime@0.1.6:
+ resolution: {integrity: sha512-K5WhKZ4RVNaMEtfHsd/9CNCgGKB0ipbm/tgweNNeC11mEuBTNxJ09Y630vg3WPkKv9vfMCuXg2p2Dk+Q/KWTSA==}
+ dependencies:
+ '@module-federation/runtime': 0.1.6
+ '@module-federation/sdk': 0.1.6
+ dev: true
+
+ /@module-federation/webpack-bundler-runtime@0.2.1:
+ resolution: {integrity: sha512-8TdWq3TNd6fT6BayQRHtoonGfO5tyW/QjKJE/z2OWFFfG8JYF/dNWcOfLYm9Wui8Xts6nSyQIKhAD0tBifQtMw==}
+ dependencies:
+ '@module-federation/runtime': 0.2.1
+ '@module-federation/sdk': 0.2.1
+ dev: false
+
+ /@polka/url@1.0.0-next.25:
+ resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==}
+ dev: true
+
+ /@rspack/binding-darwin-arm64@0.7.4:
+ resolution: {integrity: sha512-K78fUe9OhFTV61kHYCuahNkBXCFJMmqSGyIgNtLR9Psk82IVCHkvxY5565An1Quvo1UmgVh5R2YmylKE81mwiw==}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-darwin-x64@0.7.4:
+ resolution: {integrity: sha512-EQriu7oE+tZv25g5VJH6Ael74U42fmpb4zGs7wLmWyKfCtO6SegL3tJ8Jc6mMmp+vg949dVvkw7uB6TJjOqx2g==}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-linux-arm64-gnu@0.7.4:
+ resolution: {integrity: sha512-yhJLkU1zEXMyHNWhh8pBEaK6cRAjFzRK2hqejhhZ0K+lqC0Af9bKvZyXXGrMfmmHlsh1VJ9VVmi21qcXr/kdzg==}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-linux-arm64-musl@0.7.4:
+ resolution: {integrity: sha512-6GV3Ztl6Q1zdJmNo+dwHiJd2Y/IEH9qWOh4YHiyzYGbQQYpfhhLYwKexalWaAAhdMm6KKoeqzklgHImCINImEg==}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-linux-x64-gnu@0.7.4:
+ resolution: {integrity: sha512-KFdAEIZ7mPnT0y198xVOa8vIT9tgpEFVidCSIlxdk65UGC59g6UxEQq1EVAbcBi1Ou6Zza/UtxIlzk6Ev6KDkQ==}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-linux-x64-musl@0.7.4:
+ resolution: {integrity: sha512-qekcXkv12oWRztZHXGzNAI92/O/+abU35/nGDycZmMtr+Qt2XS5hE1T9oBQ54yecIzUVDGNcYwhIMWBX6E2dmQ==}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-win32-arm64-msvc@0.7.4:
+ resolution: {integrity: sha512-D1BccimBVeA/k2ty/28ER/j3s/c0n0MtN4kpyjYwgRILVLRSr+rfbC75i8wYh8r8AXjhNWNG88LmrFN9e9i7Ug==}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-win32-ia32-msvc@0.7.4:
+ resolution: {integrity: sha512-5//TZH0Y4fRuTQ/ZmNOVaIfPIQXtgNAI78QxvF8Amygk4Uqklpo3ceHGP+yZfZgjh3mzjoUK+22fWbq/cUmW0w==}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-win32-x64-msvc@0.7.4:
+ resolution: {integrity: sha512-C3ZxIEYKvnjQbV19FfQE6CGO6vcGp2JcvSQCc6SHwU/KNxLDrI1pA7XUG5TKoGSsqVEDZN6H8fJxLUYPQBjJcg==}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding@0.7.4:
+ resolution: {integrity: sha512-H1rTtYxbxe40miV2gYLPwIxEn2yMY6+bq+fjfiRu61kTvllexPMBYgFpKqSAc5Qyyto9j9uCkR4MJEYj2R/SQQ==}
+ optionalDependencies:
+ '@rspack/binding-darwin-arm64': 0.7.4
+ '@rspack/binding-darwin-x64': 0.7.4
+ '@rspack/binding-linux-arm64-gnu': 0.7.4
+ '@rspack/binding-linux-arm64-musl': 0.7.4
+ '@rspack/binding-linux-x64-gnu': 0.7.4
+ '@rspack/binding-linux-x64-musl': 0.7.4
+ '@rspack/binding-win32-arm64-msvc': 0.7.4
+ '@rspack/binding-win32-ia32-msvc': 0.7.4
+ '@rspack/binding-win32-x64-msvc': 0.7.4
+ dev: true
+
+ /@rspack/cli@0.7.4(@rspack/core@0.7.4)(webpack@5.92.1):
+ resolution: {integrity: sha512-UFQWYpgHqrtCzySif9F/ueBn8CbsGmlXOZRYnOzC9HzKXZY9JYgJFbT7EL7JfFe1LmBukF3yaTOuSgTbIxJkJQ==}
+ hasBin: true
+ peerDependencies:
+ '@rspack/core': '>=0.4.0'
+ dependencies:
+ '@discoveryjs/json-ext': 0.5.7
+ '@rspack/core': 0.7.4
+ '@rspack/dev-server': 0.7.4(@rspack/core@0.7.4)(webpack@5.92.1)
+ colorette: 2.0.19
+ exit-hook: 3.2.0
+ interpret: 3.1.1
+ rechoir: 0.8.0
+ semver: 6.3.1
+ webpack-bundle-analyzer: 4.6.1
+ yargs: 17.6.2
+ transitivePeerDependencies:
+ - '@types/express'
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+ - webpack
+ - webpack-cli
+ dev: true
+
+ /@rspack/core@0.7.4:
+ resolution: {integrity: sha512-HECQ0WL8iVS1Mwq2W2hfrStZZbtTPl/GjDdAZDMToPqWtSVGww99UDGIYTHW8G6kawQ3GY6wa86WTQNfXEpSCA==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ '@swc/helpers': '>=0.5.1'
+ peerDependenciesMeta:
+ '@swc/helpers':
+ optional: true
+ dependencies:
+ '@module-federation/runtime-tools': 0.1.6
+ '@rspack/binding': 0.7.4
+ caniuse-lite: 1.0.30001639
+ tapable: 2.2.1
+ webpack-sources: 3.2.3
+ dev: true
+
+ /@rspack/dev-server@0.7.4(@rspack/core@0.7.4)(webpack@5.92.1):
+ resolution: {integrity: sha512-mzc1gqZ0iMmqbsWiVSoRfZQiz2x1wGQc0uibyRzDxZ1Z9IqSjHwoZopVAN9aiR6CNWrSXRHy7KuyhCFfweOh0g==}
+ peerDependencies:
+ '@rspack/core': '*'
+ dependencies:
+ '@rspack/core': 0.7.4
+ chokidar: 3.5.3
+ connect-history-api-fallback: 2.0.0
+ express: 4.19.2
+ http-proxy-middleware: 2.0.6(@types/express@4.17.21)
+ mime-types: 2.1.35
+ webpack-dev-middleware: 6.1.2(webpack@5.92.1)
+ webpack-dev-server: 4.13.1(webpack@5.92.1)
+ ws: 8.8.1
+ transitivePeerDependencies:
+ - '@types/express'
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+ - webpack
+ - webpack-cli
+ dev: true
+
+ /@rspack/plugin-react-refresh@0.7.4(react-refresh@0.14.2):
+ resolution: {integrity: sha512-9tAJdG/xZ6hUtD5K5OVpwAl2yV2HFnNl5fU5aOR5VJ5Pk0rCsYwbEZRbRnmSZwzMWIKDnowhoTi+4Ha3JV3aeQ==}
+ peerDependencies:
+ react-refresh: '>=0.10.0 <1.0.0'
+ peerDependenciesMeta:
+ react-refresh:
+ optional: true
+ dependencies:
+ react-refresh: 0.14.2
+ dev: true
+
+ /@socket.io/component-emitter@3.1.2:
+ resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
+ dev: false
+
+ /@types/body-parser@1.19.5:
+ resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==}
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/bonjour@3.5.13:
+ resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==}
+ dependencies:
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/connect-history-api-fallback@1.5.4:
+ resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==}
+ dependencies:
+ '@types/express-serve-static-core': 4.19.5
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/connect@3.4.38:
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+ dependencies:
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/eslint-scope@3.7.7:
+ resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
+ dependencies:
+ '@types/eslint': 8.56.10
+ '@types/estree': 1.0.5
+
+ /@types/eslint@8.56.10:
+ resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==}
+ dependencies:
+ '@types/estree': 1.0.5
+ '@types/json-schema': 7.0.15
+
+ /@types/estree@1.0.5:
+ resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
+
+ /@types/express-serve-static-core@4.19.5:
+ resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==}
+ dependencies:
+ '@types/node': 20.14.9
+ '@types/qs': 6.9.15
+ '@types/range-parser': 1.2.7
+ '@types/send': 0.17.4
+ dev: true
+
+ /@types/express@4.17.21:
+ resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==}
+ dependencies:
+ '@types/body-parser': 1.19.5
+ '@types/express-serve-static-core': 4.19.5
+ '@types/qs': 6.9.15
+ '@types/serve-static': 1.15.7
+ dev: true
+
+ /@types/http-errors@2.0.4:
+ resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==}
+ dev: true
+
+ /@types/http-proxy@1.17.14:
+ resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==}
+ dependencies:
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/json-schema@7.0.15:
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+ /@types/mime@1.3.5:
+ resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
+ dev: true
+
+ /@types/node-forge@1.3.11:
+ resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==}
+ dependencies:
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/node@20.14.9:
+ resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==}
+ dependencies:
+ undici-types: 5.26.5
+
+ /@types/prop-types@15.7.12:
+ resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==}
+ dev: true
+
+ /@types/qs@6.9.15:
+ resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==}
+ dev: true
+
+ /@types/range-parser@1.2.7:
+ resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
+ dev: true
+
+ /@types/react-dom@18.3.0:
+ resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==}
+ dependencies:
+ '@types/react': 18.3.3
+ dev: true
+
+ /@types/react@18.3.3:
+ resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==}
+ dependencies:
+ '@types/prop-types': 15.7.12
+ csstype: 3.1.3
+ dev: true
+
+ /@types/retry@0.12.0:
+ resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==}
+ dev: true
+
+ /@types/send@0.17.4:
+ resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==}
+ dependencies:
+ '@types/mime': 1.3.5
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/serve-index@1.9.4:
+ resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==}
+ dependencies:
+ '@types/express': 4.17.21
+ dev: true
+
+ /@types/serve-static@1.15.7:
+ resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==}
+ dependencies:
+ '@types/http-errors': 2.0.4
+ '@types/node': 20.14.9
+ '@types/send': 0.17.4
+ dev: true
+
+ /@types/sockjs@0.3.36:
+ resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==}
+ dependencies:
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/ws@8.5.10:
+ resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==}
+ dependencies:
+ '@types/node': 20.14.9
+ dev: true
+
+ /@webassemblyjs/ast@1.12.1:
+ resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==}
+ dependencies:
+ '@webassemblyjs/helper-numbers': 1.11.6
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+
+ /@webassemblyjs/floating-point-hex-parser@1.11.6:
+ resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==}
+
+ /@webassemblyjs/helper-api-error@1.11.6:
+ resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==}
+
+ /@webassemblyjs/helper-buffer@1.12.1:
+ resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==}
+
+ /@webassemblyjs/helper-numbers@1.11.6:
+ resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==}
+ dependencies:
+ '@webassemblyjs/floating-point-hex-parser': 1.11.6
+ '@webassemblyjs/helper-api-error': 1.11.6
+ '@xtuc/long': 4.2.2
+
+ /@webassemblyjs/helper-wasm-bytecode@1.11.6:
+ resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==}
+
+ /@webassemblyjs/helper-wasm-section@1.12.1:
+ resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-buffer': 1.12.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+ '@webassemblyjs/wasm-gen': 1.12.1
+
+ /@webassemblyjs/ieee754@1.11.6:
+ resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==}
+ dependencies:
+ '@xtuc/ieee754': 1.2.0
+
+ /@webassemblyjs/leb128@1.11.6:
+ resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==}
+ dependencies:
+ '@xtuc/long': 4.2.2
+
+ /@webassemblyjs/utf8@1.11.6:
+ resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==}
+
+ /@webassemblyjs/wasm-edit@1.12.1:
+ resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-buffer': 1.12.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+ '@webassemblyjs/helper-wasm-section': 1.12.1
+ '@webassemblyjs/wasm-gen': 1.12.1
+ '@webassemblyjs/wasm-opt': 1.12.1
+ '@webassemblyjs/wasm-parser': 1.12.1
+ '@webassemblyjs/wast-printer': 1.12.1
+
+ /@webassemblyjs/wasm-gen@1.12.1:
+ resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+ '@webassemblyjs/ieee754': 1.11.6
+ '@webassemblyjs/leb128': 1.11.6
+ '@webassemblyjs/utf8': 1.11.6
+
+ /@webassemblyjs/wasm-opt@1.12.1:
+ resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-buffer': 1.12.1
+ '@webassemblyjs/wasm-gen': 1.12.1
+ '@webassemblyjs/wasm-parser': 1.12.1
+
+ /@webassemblyjs/wasm-parser@1.12.1:
+ resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-api-error': 1.11.6
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+ '@webassemblyjs/ieee754': 1.11.6
+ '@webassemblyjs/leb128': 1.11.6
+ '@webassemblyjs/utf8': 1.11.6
+
+ /@webassemblyjs/wast-printer@1.12.1:
+ resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@xtuc/long': 4.2.2
+
+ /@xtuc/ieee754@1.2.0:
+ resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
+
+ /@xtuc/long@4.2.2:
+ resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
+
+ /accepts@1.3.8:
+ resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-types: 2.1.35
+ negotiator: 0.6.3
+
+ /acorn-import-attributes@1.9.5(acorn@8.12.0):
+ resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
+ peerDependencies:
+ acorn: ^8
+ dependencies:
+ acorn: 8.12.0
+
+ /acorn-walk@8.3.3:
+ resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==}
+ engines: {node: '>=0.4.0'}
+ dependencies:
+ acorn: 8.12.0
+ dev: true
+
+ /acorn@8.12.0:
+ resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ /adm-zip@0.5.14:
+ resolution: {integrity: sha512-DnyqqifT4Jrcvb8USYjp6FHtBpEIz1mnXu6pTRHZ0RL69LbQYiO+0lDFg5+OKA7U29oWSs3a/i8fhn8ZcceIWg==}
+ engines: {node: '>=12.0'}
+ dev: false
+
+ /ajv-formats@2.1.1(ajv@8.16.0):
+ resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+ dependencies:
+ ajv: 8.16.0
+ dev: true
+
+ /ajv-keywords@3.5.2(ajv@6.12.6):
+ resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
+ peerDependencies:
+ ajv: ^6.9.1
+ dependencies:
+ ajv: 6.12.6
+
+ /ajv-keywords@5.1.0(ajv@8.16.0):
+ resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
+ peerDependencies:
+ ajv: ^8.8.2
+ dependencies:
+ ajv: 8.16.0
+ fast-deep-equal: 3.1.3
+ dev: true
+
+ /ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
+ /ajv@8.16.0:
+ resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+ uri-js: 4.4.1
+ dev: true
+
+ /ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /ansi-html-community@0.0.8:
+ resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==}
+ engines: {'0': node >= 0.8.0}
+ hasBin: true
+ dev: true
+
+ /ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+ dependencies:
+ color-convert: 2.0.1
+
+ /any-promise@1.3.0:
+ resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
+ dev: false
+
+ /anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+ dev: true
+
+ /array-flatten@1.1.1:
+ resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
+ dev: true
+
+ /asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+ dev: false
+
+ /at-least-node@1.0.0:
+ resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
+ engines: {node: '>= 4.0.0'}
+ dev: false
+
+ /axios@1.7.2:
+ resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==}
+ dependencies:
+ follow-redirects: 1.15.6
+ form-data: 4.0.0
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+ dev: false
+
+ /balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ dev: true
+
+ /batch@0.6.1:
+ resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==}
+ dev: true
+
+ /binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /body-parser@1.20.2:
+ resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ on-finished: 2.4.1
+ qs: 6.11.0
+ raw-body: 2.5.2
+ type-is: 1.6.18
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /bonjour-service@1.2.1:
+ resolution: {integrity: sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ multicast-dns: 7.2.5
+ dev: true
+
+ /brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+ dev: true
+
+ /braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+ dependencies:
+ fill-range: 7.1.1
+ dev: true
+
+ /browserslist@4.23.1:
+ resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+ dependencies:
+ caniuse-lite: 1.0.30001639
+ electron-to-chromium: 1.4.816
+ node-releases: 2.0.14
+ update-browserslist-db: 1.0.16(browserslist@4.23.1)
+
+ /btoa@1.2.1:
+ resolution: {integrity: sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==}
+ engines: {node: '>= 0.4.0'}
+ hasBin: true
+ dev: false
+
+ /buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ /bundle-name@4.1.0:
+ resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
+ engines: {node: '>=18'}
+ dependencies:
+ run-applescript: 7.0.0
+ dev: false
+
+ /bytes@3.0.0:
+ resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /bytes@3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /cache-content-type@1.0.1:
+ resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==}
+ engines: {node: '>= 6.0.0'}
+ dependencies:
+ mime-types: 2.1.35
+ ylru: 1.4.0
+ dev: false
+
+ /call-bind@1.0.7:
+ resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ set-function-length: 1.2.2
+ dev: true
+
+ /caniuse-lite@1.0.30001639:
+ resolution: {integrity: sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==}
+
+ /chalk@3.0.0:
+ resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+ dev: false
+
+ /chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+ dev: true
+
+ /chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+ dev: true
+
+ /chrome-trace-event@1.0.4:
+ resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
+ engines: {node: '>=6.0'}
+
+ /ci-info@3.9.0:
+ resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
+ engines: {node: '>=8'}
+ dev: false
+
+ /cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+ dev: true
+
+ /co@4.6.0:
+ resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
+ engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
+ dev: false
+
+ /color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+ dependencies:
+ color-name: 1.1.4
+
+ /color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ /colorette@2.0.19:
+ resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==}
+ dev: true
+
+ /combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ delayed-stream: 1.0.0
+ dev: false
+
+ /commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ /commander@7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+ dev: true
+
+ /compressible@2.0.18:
+ resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-db: 1.52.0
+ dev: true
+
+ /compression@1.7.4:
+ resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ accepts: 1.3.8
+ bytes: 3.0.0
+ compressible: 2.0.18
+ debug: 2.6.9
+ on-headers: 1.0.2
+ safe-buffer: 5.1.2
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ dev: true
+
+ /connect-history-api-fallback@2.0.0:
+ resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==}
+ engines: {node: '>=0.8'}
+ dev: true
+
+ /content-disposition@0.5.4:
+ resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ safe-buffer: 5.2.1
+
+ /content-type@1.0.5:
+ resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+ engines: {node: '>= 0.6'}
+
+ /cookie-signature@1.0.6:
+ resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
+ dev: true
+
+ /cookie@0.6.0:
+ resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /cookies@0.8.0:
+ resolution: {integrity: sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ depd: 2.0.0
+ keygrip: 1.1.0
+ dev: false
+
+ /core-util-is@1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+ dev: true
+
+ /cron-parser@4.9.0:
+ resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==}
+ engines: {node: '>=12.0.0'}
+ dependencies:
+ luxon: 3.4.4
+ dev: false
+
+ /cross-spawn@7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+ engines: {node: '>= 8'}
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+ dev: true
+
+ /csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+ dev: true
+
+ /date-format@4.0.14:
+ resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==}
+ engines: {node: '>=4.0'}
+ dev: false
+
+ /debug@2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.0.0
+ dev: true
+
+ /debug@3.1.0:
+ resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.0.0
+ dev: false
+
+ /debug@4.3.5:
+ resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.1.2
+
+ /deep-equal@1.0.1:
+ resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==}
+ dev: false
+
+ /default-browser-id@5.0.0:
+ resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==}
+ engines: {node: '>=18'}
+ dev: false
+
+ /default-browser@5.2.1:
+ resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==}
+ engines: {node: '>=18'}
+ dependencies:
+ bundle-name: 4.1.0
+ default-browser-id: 5.0.0
+ dev: false
+
+ /default-gateway@6.0.3:
+ resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==}
+ engines: {node: '>= 10'}
+ dependencies:
+ execa: 5.1.1
+ dev: true
+
+ /define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ gopd: 1.0.1
+ dev: true
+
+ /define-lazy-prop@2.0.0:
+ resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /define-lazy-prop@3.0.0:
+ resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+ dev: false
+
+ /delegates@1.0.0:
+ resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
+ dev: false
+
+ /depd@1.1.2:
+ resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
+ engines: {node: '>= 0.6'}
+
+ /depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
+ /destroy@1.2.0:
+ resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
+ /detect-node@2.1.0:
+ resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
+ dev: true
+
+ /dns-packet@5.6.1:
+ resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==}
+ engines: {node: '>=6'}
+ dependencies:
+ '@leichtgewicht/ip-codec': 2.0.5
+ dev: true
+
+ /duplexer@0.1.2:
+ resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
+ dev: true
+
+ /ee-first@1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+
+ /electron-to-chromium@1.4.816:
+ resolution: {integrity: sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==}
+
+ /emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ dev: true
+
+ /encodeurl@1.0.2:
+ resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
+ engines: {node: '>= 0.8'}
+
+ /engine.io-client@6.5.4:
+ resolution: {integrity: sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==}
+ dependencies:
+ '@socket.io/component-emitter': 3.1.2
+ debug: 4.3.5
+ engine.io-parser: 5.2.2
+ ws: 8.17.1
+ xmlhttprequest-ssl: 2.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+ dev: false
+
+ /engine.io-parser@5.2.2:
+ resolution: {integrity: sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==}
+ engines: {node: '>=10.0.0'}
+ dev: false
+
+ /enhanced-resolve@5.17.0:
+ resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.2.1
+
+ /error-inject@1.0.0:
+ resolution: {integrity: sha512-JM8N6PytDbmIYm1IhPWlo8vr3NtfjhDY/1MhD/a5b/aad/USE8a0+NsqE9d5n+GVGmuNkPQWm4bFQWv18d8tMg==}
+ dev: false
+
+ /es-define-property@1.0.0:
+ resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ get-intrinsic: 1.2.4
+ dev: true
+
+ /es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /es-module-lexer@1.5.4:
+ resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==}
+
+ /escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ /escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
+ /eslint-scope@5.1.1:
+ resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 4.3.0
+
+ /esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+ dependencies:
+ estraverse: 5.3.0
+
+ /estraverse@4.3.0:
+ resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+ engines: {node: '>=4.0'}
+
+ /estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+
+ /etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+ dev: true
+
+ /events@3.3.0:
+ resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
+ engines: {node: '>=0.8.x'}
+
+ /execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+ dev: true
+
+ /exit-hook@3.2.0:
+ resolution: {integrity: sha512-aIQN7Q04HGAV/I5BszisuHTZHXNoC23WtLkxdCLuYZMdWviRD0TMIt2bnUBi9MrHaF/hH8b3gwG9iaAUHKnJGA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dev: true
+
+ /expand-tilde@2.0.2:
+ resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ homedir-polyfill: 1.0.3
+ dev: false
+
+ /express@4.19.2:
+ resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==}
+ engines: {node: '>= 0.10.0'}
+ dependencies:
+ accepts: 1.3.8
+ array-flatten: 1.1.1
+ body-parser: 1.20.2
+ content-disposition: 0.5.4
+ content-type: 1.0.5
+ cookie: 0.6.0
+ cookie-signature: 1.0.6
+ debug: 2.6.9
+ depd: 2.0.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 1.2.0
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ merge-descriptors: 1.0.1
+ methods: 1.1.2
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ path-to-regexp: 0.1.7
+ proxy-addr: 2.0.7
+ qs: 6.11.0
+ range-parser: 1.2.1
+ safe-buffer: 5.2.1
+ send: 0.18.0
+ serve-static: 1.15.0
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ type-is: 1.6.18
+ utils-merge: 1.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ /fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ /faye-websocket@0.11.4:
+ resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==}
+ engines: {node: '>=0.8.0'}
+ dependencies:
+ websocket-driver: 0.7.4
+ dev: true
+
+ /fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+ dependencies:
+ to-regex-range: 5.0.1
+ dev: true
+
+ /finalhandler@1.2.0:
+ resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ debug: 2.6.9
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.1
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /find-file-up@2.0.1:
+ resolution: {integrity: sha512-qVdaUhYO39zmh28/JLQM5CoYN9byEOKEH4qfa8K1eNV17W0UUMJ9WgbR/hHFH+t5rcl+6RTb5UC7ck/I+uRkpQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ resolve-dir: 1.0.1
+ dev: false
+
+ /find-package-json@1.2.0:
+ resolution: {integrity: sha512-+SOGcLGYDJHtyqHd87ysBhmaeQ95oWspDKnMXBrnQ9Eq4OkLNqejgoaD8xVWu6GPa0B6roa6KinCMEMcVeqONw==}
+ dev: false
+
+ /find-pkg@2.0.0:
+ resolution: {integrity: sha512-WgZ+nKbELDa6N3i/9nrHeNznm+lY3z4YfhDDWgW+5P0pdmMj26bxaxU11ookgY3NyP9GC7HvZ9etp0jRFqGEeQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ find-file-up: 2.0.1
+ dev: false
+
+ /flatted@3.3.1:
+ resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
+ dev: false
+
+ /follow-redirects@1.15.6:
+ resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ /form-data@4.0.0:
+ resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
+ engines: {node: '>= 6'}
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
+ dev: false
+
+ /forwarded@0.2.0:
+ resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /fresh@0.5.2:
+ resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
+ engines: {node: '>= 0.6'}
+
+ /fs-extra@8.1.0:
+ resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
+ engines: {node: '>=6 <7 || >=8'}
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 4.0.0
+ universalify: 0.1.2
+ dev: false
+
+ /fs-extra@9.1.0:
+ resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ at-least-node: 1.0.0
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+ dev: false
+
+ /fs-monkey@1.0.6:
+ resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==}
+ dev: true
+
+ /fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+ dev: true
+
+ /fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ /get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+ dev: true
+
+ /get-intrinsic@1.2.4:
+ resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ has-proto: 1.0.3
+ has-symbols: 1.0.3
+ hasown: 2.0.2
+ dev: true
+
+ /get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+ dependencies:
+ is-glob: 4.0.3
+ dev: true
+
+ /glob-to-regexp@0.4.1:
+ resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+
+ /glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+ dev: true
+
+ /global-modules@1.0.0:
+ resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ global-prefix: 1.0.2
+ is-windows: 1.0.2
+ resolve-dir: 1.0.1
+ dev: false
+
+ /global-prefix@1.0.2:
+ resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ expand-tilde: 2.0.2
+ homedir-polyfill: 1.0.3
+ ini: 1.3.8
+ is-windows: 1.0.2
+ which: 1.3.1
+ dev: false
+
+ /gopd@1.0.1:
+ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+ dependencies:
+ get-intrinsic: 1.2.4
+ dev: true
+
+ /graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ /gzip-size@6.0.0:
+ resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ duplexer: 0.1.2
+ dev: true
+
+ /handle-thing@2.0.1:
+ resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==}
+ dev: true
+
+ /has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ /has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+ dependencies:
+ es-define-property: 1.0.0
+ dev: true
+
+ /has-proto@1.0.3:
+ resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /has-symbols@1.0.3:
+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+ engines: {node: '>= 0.4'}
+
+ /has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-symbols: 1.0.3
+ dev: false
+
+ /hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ function-bind: 1.1.2
+
+ /homedir-polyfill@1.0.3:
+ resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ parse-passwd: 1.0.0
+ dev: false
+
+ /hpack.js@2.1.6:
+ resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==}
+ dependencies:
+ inherits: 2.0.4
+ obuf: 1.1.2
+ readable-stream: 2.3.8
+ wbuf: 1.7.3
+ dev: true
+
+ /html-entities@2.5.2:
+ resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==}
+ dev: true
+
+ /http-assert@1.5.0:
+ resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ deep-equal: 1.0.1
+ http-errors: 1.8.1
+ dev: false
+
+ /http-deceiver@1.2.7:
+ resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==}
+ dev: true
+
+ /http-errors@1.6.3:
+ resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ depd: 1.1.2
+ inherits: 2.0.3
+ setprototypeof: 1.1.0
+ statuses: 1.5.0
+ dev: true
+
+ /http-errors@1.8.1:
+ resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ depd: 1.1.2
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 1.5.0
+ toidentifier: 1.0.1
+ dev: false
+
+ /http-errors@2.0.0:
+ resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ toidentifier: 1.0.1
+ dev: true
+
+ /http-parser-js@0.5.8:
+ resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==}
+ dev: true
+
+ /http-proxy-middleware@2.0.6(@types/express@4.17.21):
+ resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@types/express': ^4.17.13
+ peerDependenciesMeta:
+ '@types/express':
+ optional: true
+ dependencies:
+ '@types/express': 4.17.21
+ '@types/http-proxy': 1.17.14
+ http-proxy: 1.18.1
+ is-glob: 4.0.3
+ is-plain-obj: 3.0.0
+ micromatch: 4.0.7
+ transitivePeerDependencies:
+ - debug
+ dev: true
+
+ /http-proxy@1.18.1:
+ resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ eventemitter3: 4.0.7
+ follow-redirects: 1.15.6
+ requires-port: 1.0.0
+ transitivePeerDependencies:
+ - debug
+ dev: true
+
+ /human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+ dev: true
+
+ /iconv-lite@0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ safer-buffer: 2.1.2
+ dev: true
+
+ /inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+ dev: true
+
+ /inherits@2.0.3:
+ resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
+ dev: true
+
+ /inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ /ini@1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+ dev: false
+
+ /interpret@3.1.1:
+ resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==}
+ engines: {node: '>=10.13.0'}
+ dev: true
+
+ /ipaddr.js@1.9.1:
+ resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
+ engines: {node: '>= 0.10'}
+ dev: true
+
+ /ipaddr.js@2.2.0:
+ resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==}
+ engines: {node: '>= 10'}
+ dev: true
+
+ /is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+ dependencies:
+ binary-extensions: 2.3.0
+ dev: true
+
+ /is-ci@3.0.1:
+ resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==}
+ hasBin: true
+ dependencies:
+ ci-info: 3.9.0
+ dev: false
+
+ /is-core-module@2.14.0:
+ resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ hasown: 2.0.2
+
+ /is-docker@2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+ dev: true
+
+ /is-docker@3.0.0:
+ resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ hasBin: true
+ dev: false
+
+ /is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-generator-function@1.0.10:
+ resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.2
+ dev: false
+
+ /is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-extglob: 2.1.1
+ dev: true
+
+ /is-inside-container@1.0.0:
+ resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
+ engines: {node: '>=14.16'}
+ hasBin: true
+ dependencies:
+ is-docker: 3.0.0
+ dev: false
+
+ /is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+ dev: true
+
+ /is-plain-obj@3.0.0:
+ resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-windows@1.0.2:
+ resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /is-wsl@2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
+ dependencies:
+ is-docker: 2.2.1
+ dev: true
+
+ /is-wsl@3.1.0:
+ resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
+ engines: {node: '>=16'}
+ dependencies:
+ is-inside-container: 1.0.0
+ dev: false
+
+ /isarray@1.0.0:
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+ dev: true
+
+ /isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ /isomorphic-ws@5.0.0(ws@8.17.1):
+ resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==}
+ peerDependencies:
+ ws: '*'
+ dependencies:
+ ws: 8.17.1
+ dev: false
+
+ /jest-worker@27.5.1:
+ resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
+ engines: {node: '>= 10.13.0'}
+ dependencies:
+ '@types/node': 20.14.9
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
+ /jose@5.6.2:
+ resolution: {integrity: sha512-F1t1/WZJ4JdmCE/XoMYw1dPOW5g8JF0xGm6Ox2fwaCAPlCzt+4Bh0EWP59iQuZNHHauDkCdjx+kCZSh5z/PGow==}
+ dev: false
+
+ /js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+ dev: false
+
+ /json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+ /json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+ /json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+ dev: true
+
+ /jsonfile@4.0.0:
+ resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
+ optionalDependencies:
+ graceful-fs: 4.2.11
+ dev: false
+
+ /jsonfile@6.1.0:
+ resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+ dev: false
+
+ /keygrip@1.1.0:
+ resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ tsscmp: 1.0.6
+ dev: false
+
+ /koa-compose@3.2.1:
+ resolution: {integrity: sha512-8gen2cvKHIZ35eDEik5WOo8zbVp9t4cP8p4hW4uE55waxolLRexKKrqfCpwhGVppnB40jWeF8bZeTVg99eZgPw==}
+ dependencies:
+ any-promise: 1.3.0
+ dev: false
+
+ /koa-compose@4.1.0:
+ resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==}
+ dev: false
+
+ /koa-convert@1.2.0:
+ resolution: {integrity: sha512-K9XqjmEDStGX09v3oxR7t5uPRy0jqJdvodHa6wxWTHrTfDq0WUNnYTOOUZN6g8OM8oZQXprQASbiIXG2Ez8ehA==}
+ engines: {node: '>= 4'}
+ dependencies:
+ co: 4.6.0
+ koa-compose: 3.2.1
+ dev: false
+
+ /koa@2.11.0:
+ resolution: {integrity: sha512-EpR9dElBTDlaDgyhDMiLkXrPwp6ZqgAIBvhhmxQ9XN4TFgW+gEz6tkcsNI6BnUbUftrKDjVFj4lW2/J2aNBMMA==}
+ engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4}
+ dependencies:
+ accepts: 1.3.8
+ cache-content-type: 1.0.1
+ content-disposition: 0.5.4
+ content-type: 1.0.5
+ cookies: 0.8.0
+ debug: 3.1.0
+ delegates: 1.0.0
+ depd: 1.1.2
+ destroy: 1.2.0
+ encodeurl: 1.0.2
+ error-inject: 1.0.0
+ escape-html: 1.0.3
+ fresh: 0.5.2
+ http-assert: 1.5.0
+ http-errors: 1.8.1
+ is-generator-function: 1.0.10
+ koa-compose: 4.1.0
+ koa-convert: 1.2.0
+ on-finished: 2.4.1
+ only: 0.0.2
+ parseurl: 1.3.3
+ statuses: 1.5.0
+ type-is: 1.6.18
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /launch-editor@2.8.0:
+ resolution: {integrity: sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==}
+ dependencies:
+ picocolors: 1.0.1
+ shell-quote: 1.8.1
+ dev: true
+
+ /loader-runner@4.3.0:
+ resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
+ engines: {node: '>=6.11.5'}
+
+ /lodash.clonedeepwith@4.5.0:
+ resolution: {integrity: sha512-QRBRSxhbtsX1nc0baxSkkK5WlVTTm/s48DSukcGcWZwIyI8Zz+lB+kFiELJXtzfH4Aj6kMWQ1VWW4U5uUDgZMA==}
+ dev: false
+
+ /lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+ dev: true
+
+ /log4js@6.9.1:
+ resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==}
+ engines: {node: '>=8.0'}
+ dependencies:
+ date-format: 4.0.14
+ debug: 4.3.5
+ flatted: 3.3.1
+ rfdc: 1.4.1
+ streamroller: 3.1.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /long-timeout@0.1.1:
+ resolution: {integrity: sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==}
+ dev: false
+
+ /loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+ dependencies:
+ js-tokens: 4.0.0
+ dev: false
+
+ /luxon@3.4.4:
+ resolution: {integrity: sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /media-typer@0.3.0:
+ resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
+ engines: {node: '>= 0.6'}
+
+ /memfs@3.5.3:
+ resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==}
+ engines: {node: '>= 4.0.0'}
+ dependencies:
+ fs-monkey: 1.0.6
+ dev: true
+
+ /merge-descriptors@1.0.1:
+ resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
+ dev: true
+
+ /merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+ /methods@1.1.2:
+ resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /micromatch@4.0.7:
+ resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==}
+ engines: {node: '>=8.6'}
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+ dev: true
+
+ /mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ /mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-db: 1.52.0
+
+ /mime@1.6.0:
+ resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dev: true
+
+ /mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /minimalistic-assert@1.0.1:
+ resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
+ dev: true
+
+ /minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+ dependencies:
+ brace-expansion: 1.1.11
+ dev: true
+
+ /mrmime@1.0.1:
+ resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /ms@2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+
+ /ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ /ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ dev: true
+
+ /multicast-dns@7.2.5:
+ resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==}
+ hasBin: true
+ dependencies:
+ dns-packet: 5.6.1
+ thunky: 1.1.0
+ dev: true
+
+ /negotiator@0.6.3:
+ resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
+ engines: {node: '>= 0.6'}
+
+ /neo-async@2.6.2:
+ resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+
+ /node-forge@1.3.1:
+ resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==}
+ engines: {node: '>= 6.13.0'}
+ dev: true
+
+ /node-persist@4.0.1:
+ resolution: {integrity: sha512-QtRjwAlcOQChQpfG6odtEhxYmA3nS5XYr+bx9JRjwahl1TM3sm9J3CCn51/MI0eoHRb2DrkEsCOFo8sq8jG5sQ==}
+ engines: {node: '>=10.12.0'}
+ dev: false
+
+ /node-releases@2.0.14:
+ resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
+
+ /node-schedule@2.1.1:
+ resolution: {integrity: sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==}
+ engines: {node: '>=6'}
+ dependencies:
+ cron-parser: 4.9.0
+ long-timeout: 0.1.1
+ sorted-array-functions: 1.3.0
+ dev: false
+
+ /normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+ dependencies:
+ path-key: 3.1.1
+ dev: true
+
+ /object-inspect@1.13.2:
+ resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /obuf@1.1.2:
+ resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==}
+ dev: true
+
+ /on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ ee-first: 1.1.1
+
+ /on-headers@1.0.2:
+ resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+ dependencies:
+ wrappy: 1.0.2
+ dev: true
+
+ /onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+ dependencies:
+ mimic-fn: 2.1.0
+ dev: true
+
+ /only@0.0.2:
+ resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==}
+ dev: false
+
+ /open@10.1.0:
+ resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==}
+ engines: {node: '>=18'}
+ dependencies:
+ default-browser: 5.2.1
+ define-lazy-prop: 3.0.0
+ is-inside-container: 1.0.0
+ is-wsl: 3.1.0
+ dev: false
+
+ /open@8.4.2:
+ resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ define-lazy-prop: 2.0.0
+ is-docker: 2.2.1
+ is-wsl: 2.2.0
+ dev: true
+
+ /opener@1.5.2:
+ resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==}
+ hasBin: true
+ dev: true
+
+ /p-retry@4.6.2:
+ resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@types/retry': 0.12.0
+ retry: 0.13.1
+ dev: true
+
+ /parse-passwd@1.0.0:
+ resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+
+ /path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ /path-to-regexp@0.1.7:
+ resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
+ dev: true
+
+ /picocolors@1.0.1:
+ resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
+
+ /picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+ dev: true
+
+ /prettier@3.3.2:
+ resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==}
+ engines: {node: '>=14'}
+ hasBin: true
+ dev: true
+
+ /process-nextick-args@2.0.1:
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+ dev: true
+
+ /proxy-addr@2.0.7:
+ resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ forwarded: 0.2.0
+ ipaddr.js: 1.9.1
+ dev: true
+
+ /proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+ dev: false
+
+ /punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
+ /qs@6.11.0:
+ resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
+ engines: {node: '>=0.6'}
+ dependencies:
+ side-channel: 1.0.6
+ dev: true
+
+ /rambda@9.2.1:
+ resolution: {integrity: sha512-6Dp+QQVQuAuhwBlbIvL2FjJVHCKF29W+n9ca/BMTVDqpj+Q7KKqUh7UAINEna8aaB2/oRvPuL5hViCTQARa70Q==}
+ dev: false
+
+ /randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+ dependencies:
+ safe-buffer: 5.2.1
+
+ /range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /raw-body@2.5.2:
+ resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ unpipe: 1.0.0
+ dev: true
+
+ /react-dom@18.3.1(react@18.3.1):
+ resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
+ peerDependencies:
+ react: ^18.3.1
+ dependencies:
+ loose-envify: 1.4.0
+ react: 18.3.1
+ scheduler: 0.23.2
+ dev: false
+
+ /react-refresh@0.14.2:
+ resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /react@18.3.1:
+ resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ loose-envify: 1.4.0
+ dev: false
+
+ /readable-stream@2.3.8:
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+ dev: true
+
+ /readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+ dev: true
+
+ /readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+ dependencies:
+ picomatch: 2.3.1
+ dev: true
+
+ /rechoir@0.8.0:
+ resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==}
+ engines: {node: '>= 10.13.0'}
+ dependencies:
+ resolve: 1.22.8
+ dev: true
+
+ /require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /requires-port@1.0.0:
+ resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
+ dev: true
+
+ /resolve-dir@1.0.1:
+ resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ expand-tilde: 2.0.2
+ global-modules: 1.0.0
+ dev: false
+
+ /resolve@1.22.8:
+ resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
+ hasBin: true
+ dependencies:
+ is-core-module: 2.14.0
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ /retry@0.13.1:
+ resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
+ engines: {node: '>= 4'}
+ dev: true
+
+ /rfdc@1.4.1:
+ resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+ dev: false
+
+ /rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
+ hasBin: true
+ dependencies:
+ glob: 7.2.3
+ dev: true
+
+ /run-applescript@7.0.0:
+ resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==}
+ engines: {node: '>=18'}
+ dev: false
+
+ /safe-buffer@5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+ dev: true
+
+ /safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ /safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+ dev: true
+
+ /scheduler@0.23.2:
+ resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+ dependencies:
+ loose-envify: 1.4.0
+ dev: false
+
+ /schema-utils@3.3.0:
+ resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
+ engines: {node: '>= 10.13.0'}
+ dependencies:
+ '@types/json-schema': 7.0.15
+ ajv: 6.12.6
+ ajv-keywords: 3.5.2(ajv@6.12.6)
+
+ /schema-utils@4.2.0:
+ resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==}
+ engines: {node: '>= 12.13.0'}
+ dependencies:
+ '@types/json-schema': 7.0.15
+ ajv: 8.16.0
+ ajv-formats: 2.1.1(ajv@8.16.0)
+ ajv-keywords: 5.1.0(ajv@8.16.0)
+ dev: true
+
+ /select-hose@2.0.0:
+ resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==}
+ dev: true
+
+ /selfsigned@2.4.1:
+ resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ '@types/node-forge': 1.3.11
+ node-forge: 1.3.1
+ dev: true
+
+ /semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+ dev: true
+
+ /send@0.18.0:
+ resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ mime: 1.6.0
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /serialize-javascript@6.0.2:
+ resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+ dependencies:
+ randombytes: 2.1.0
+
+ /serve-index@1.9.1:
+ resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ accepts: 1.3.8
+ batch: 0.6.1
+ debug: 2.6.9
+ escape-html: 1.0.3
+ http-errors: 1.6.3
+ mime-types: 2.1.35
+ parseurl: 1.3.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /serve-static@1.15.0:
+ resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 0.18.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.2
+ dev: true
+
+ /setprototypeof@1.1.0:
+ resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==}
+ dev: true
+
+ /setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
+ /shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+ dependencies:
+ shebang-regex: 3.0.0
+ dev: true
+
+ /shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /shell-quote@1.8.1:
+ resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==}
+ dev: true
+
+ /side-channel@1.0.6:
+ resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+ object-inspect: 1.13.2
+ dev: true
+
+ /signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+ dev: true
+
+ /sirv@1.0.19:
+ resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==}
+ engines: {node: '>= 10'}
+ dependencies:
+ '@polka/url': 1.0.0-next.25
+ mrmime: 1.0.1
+ totalist: 1.1.0
+ dev: true
+
+ /socket.io-client@4.7.5:
+ resolution: {integrity: sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==}
+ engines: {node: '>=10.0.0'}
+ dependencies:
+ '@socket.io/component-emitter': 3.1.2
+ debug: 4.3.5
+ engine.io-client: 6.5.4
+ socket.io-parser: 4.2.4
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+ dev: false
+
+ /socket.io-parser@4.2.4:
+ resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==}
+ engines: {node: '>=10.0.0'}
+ dependencies:
+ '@socket.io/component-emitter': 3.1.2
+ debug: 4.3.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /sockjs@0.3.24:
+ resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==}
+ dependencies:
+ faye-websocket: 0.11.4
+ uuid: 8.3.2
+ websocket-driver: 0.7.4
+ dev: true
+
+ /sorted-array-functions@1.3.0:
+ resolution: {integrity: sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==}
+ dev: false
+
+ /source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ /source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ /spdy-transport@3.0.0:
+ resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==}
+ dependencies:
+ debug: 4.3.5
+ detect-node: 2.1.0
+ hpack.js: 2.1.6
+ obuf: 1.1.2
+ readable-stream: 3.6.2
+ wbuf: 1.7.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /spdy@4.0.2:
+ resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ debug: 4.3.5
+ handle-thing: 2.0.1
+ http-deceiver: 1.2.7
+ select-hose: 2.0.0
+ spdy-transport: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /statuses@1.5.0:
+ resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
+ engines: {node: '>= 0.6'}
+
+ /statuses@2.0.1:
+ resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /streamroller@3.1.5:
+ resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==}
+ engines: {node: '>=8.0'}
+ dependencies:
+ date-format: 4.0.14
+ debug: 4.3.5
+ fs-extra: 8.1.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+ dev: true
+
+ /string_decoder@1.1.1:
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+ dependencies:
+ safe-buffer: 5.1.2
+ dev: true
+
+ /string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: true
+
+ /strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-regex: 5.0.1
+ dev: true
+
+ /strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+ dependencies:
+ has-flag: 4.0.0
+
+ /supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ has-flag: 4.0.0
+
+ /supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ /tapable@2.2.1:
+ resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
+ engines: {node: '>=6'}
+
+ /terser-webpack-plugin@5.3.10(webpack@5.92.1):
+ resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==}
+ engines: {node: '>= 10.13.0'}
+ peerDependencies:
+ '@swc/core': '*'
+ esbuild: '*'
+ uglify-js: '*'
+ webpack: ^5.1.0
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ esbuild:
+ optional: true
+ uglify-js:
+ optional: true
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.25
+ jest-worker: 27.5.1
+ schema-utils: 3.3.0
+ serialize-javascript: 6.0.2
+ terser: 5.31.1
+ webpack: 5.92.1
+
+ /terser@5.31.1:
+ resolution: {integrity: sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ '@jridgewell/source-map': 0.3.6
+ acorn: 8.12.0
+ commander: 2.20.3
+ source-map-support: 0.5.21
+
+ /thunky@1.1.0:
+ resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==}
+ dev: true
+
+ /to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+ dependencies:
+ is-number: 7.0.0
+ dev: true
+
+ /toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
+ /totalist@1.1.0:
+ resolution: {integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /tslib@2.6.3:
+ resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
+ dev: false
+
+ /tsscmp@1.0.6:
+ resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==}
+ engines: {node: '>=0.6.x'}
+ dev: false
+
+ /type-is@1.6.18:
+ resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ media-typer: 0.3.0
+ mime-types: 2.1.35
+
+ /typescript@5.5.3:
+ resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+ dev: false
+
+ /undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ /universalify@0.1.2:
+ resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
+ engines: {node: '>= 4.0.0'}
+ dev: false
+
+ /universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+ dev: false
+
+ /unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /upath@2.0.1:
+ resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /update-browserslist-db@1.0.16(browserslist@4.23.1):
+ resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+ dependencies:
+ browserslist: 4.23.1
+ escalade: 3.1.2
+ picocolors: 1.0.1
+
+ /uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ dependencies:
+ punycode: 2.3.1
+
+ /util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+ dev: true
+
+ /utils-merge@1.0.1:
+ resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
+ engines: {node: '>= 0.4.0'}
+ dev: true
+
+ /uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ /vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+
+ /watchpack@2.4.1:
+ resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+
+ /wbuf@1.7.3:
+ resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==}
+ dependencies:
+ minimalistic-assert: 1.0.1
+ dev: true
+
+ /webpack-bundle-analyzer@4.6.1:
+ resolution: {integrity: sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw==}
+ engines: {node: '>= 10.13.0'}
+ hasBin: true
+ dependencies:
+ acorn: 8.12.0
+ acorn-walk: 8.3.3
+ chalk: 4.1.2
+ commander: 7.2.0
+ gzip-size: 6.0.0
+ lodash: 4.17.21
+ opener: 1.5.2
+ sirv: 1.0.19
+ ws: 7.5.10
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+ dev: true
+
+ /webpack-dev-middleware@5.3.4(webpack@5.92.1):
+ resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==}
+ engines: {node: '>= 12.13.0'}
+ peerDependencies:
+ webpack: ^4.0.0 || ^5.0.0
+ dependencies:
+ colorette: 2.0.19
+ memfs: 3.5.3
+ mime-types: 2.1.35
+ range-parser: 1.2.1
+ schema-utils: 4.2.0
+ webpack: 5.92.1
+ dev: true
+
+ /webpack-dev-middleware@6.1.2(webpack@5.92.1):
+ resolution: {integrity: sha512-Wu+EHmX326YPYUpQLKmKbTyZZJIB8/n6R09pTmB03kJmnMsVPTo9COzHZFr01txwaCAuZvfBJE4ZCHRcKs5JaQ==}
+ engines: {node: '>= 14.15.0'}
+ peerDependencies:
+ webpack: ^5.0.0
+ peerDependenciesMeta:
+ webpack:
+ optional: true
+ dependencies:
+ colorette: 2.0.19
+ memfs: 3.5.3
+ mime-types: 2.1.35
+ range-parser: 1.2.1
+ schema-utils: 4.2.0
+ webpack: 5.92.1
+ dev: true
+
+ /webpack-dev-server@4.13.1(webpack@5.92.1):
+ resolution: {integrity: sha512-5tWg00bnWbYgkN+pd5yISQKDejRBYGEw15RaEEslH+zdbNDxxaZvEAO2WulaSaFKb5n3YG8JXsGaDsut1D0xdA==}
+ engines: {node: '>= 12.13.0'}
+ hasBin: true
+ peerDependencies:
+ webpack: ^4.37.0 || ^5.0.0
+ webpack-cli: '*'
+ peerDependenciesMeta:
+ webpack:
+ optional: true
+ webpack-cli:
+ optional: true
+ dependencies:
+ '@types/bonjour': 3.5.13
+ '@types/connect-history-api-fallback': 1.5.4
+ '@types/express': 4.17.21
+ '@types/serve-index': 1.9.4
+ '@types/serve-static': 1.15.7
+ '@types/sockjs': 0.3.36
+ '@types/ws': 8.5.10
+ ansi-html-community: 0.0.8
+ bonjour-service: 1.2.1
+ chokidar: 3.5.3
+ colorette: 2.0.19
+ compression: 1.7.4
+ connect-history-api-fallback: 2.0.0
+ default-gateway: 6.0.3
+ express: 4.19.2
+ graceful-fs: 4.2.11
+ html-entities: 2.5.2
+ http-proxy-middleware: 2.0.6(@types/express@4.17.21)
+ ipaddr.js: 2.2.0
+ launch-editor: 2.8.0
+ open: 8.4.2
+ p-retry: 4.6.2
+ rimraf: 3.0.2
+ schema-utils: 4.2.0
+ selfsigned: 2.4.1
+ serve-index: 1.9.1
+ sockjs: 0.3.24
+ spdy: 4.0.2
+ webpack: 5.92.1
+ webpack-dev-middleware: 5.3.4(webpack@5.92.1)
+ ws: 8.17.1
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+ dev: true
+
+ /webpack-sources@3.2.3:
+ resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
+ engines: {node: '>=10.13.0'}
+
+ /webpack@5.92.1:
+ resolution: {integrity: sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+ peerDependencies:
+ webpack-cli: '*'
+ peerDependenciesMeta:
+ webpack-cli:
+ optional: true
+ dependencies:
+ '@types/eslint-scope': 3.7.7
+ '@types/estree': 1.0.5
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/wasm-edit': 1.12.1
+ '@webassemblyjs/wasm-parser': 1.12.1
+ acorn: 8.12.0
+ acorn-import-attributes: 1.9.5(acorn@8.12.0)
+ browserslist: 4.23.1
+ chrome-trace-event: 1.0.4
+ enhanced-resolve: 5.17.0
+ es-module-lexer: 1.5.4
+ eslint-scope: 5.1.1
+ events: 3.3.0
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+ json-parse-even-better-errors: 2.3.1
+ loader-runner: 4.3.0
+ mime-types: 2.1.35
+ neo-async: 2.6.2
+ schema-utils: 3.3.0
+ tapable: 2.2.1
+ terser-webpack-plugin: 5.3.10(webpack@5.92.1)
+ watchpack: 2.4.1
+ webpack-sources: 3.2.3
+ transitivePeerDependencies:
+ - '@swc/core'
+ - esbuild
+ - uglify-js
+
+ /websocket-driver@0.7.4:
+ resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==}
+ engines: {node: '>=0.8.0'}
+ dependencies:
+ http-parser-js: 0.5.8
+ safe-buffer: 5.2.1
+ websocket-extensions: 0.1.4
+ dev: true
+
+ /websocket-extensions@0.1.4:
+ resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==}
+ engines: {node: '>=0.8.0'}
+ dev: true
+
+ /which@1.3.1:
+ resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+ dev: false
+
+ /which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+ dev: true
+
+ /wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ dev: true
+
+ /wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ dev: true
+
+ /ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ dev: true
+
+ /ws@8.17.1:
+ resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ /ws@8.8.1:
+ resolution: {integrity: sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ dev: true
+
+ /xmlhttprequest-ssl@2.0.0:
+ resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==}
+ engines: {node: '>=0.4.0'}
+ dev: false
+
+ /y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /yargs@17.6.2:
+ resolution: {integrity: sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==}
+ engines: {node: '>=12'}
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+ dev: true
+
+ /ylru@1.4.0:
+ resolution: {integrity: sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==}
+ engines: {node: '>= 4.0.0'}
+ dev: false
+
+ /zephyr-agent@0.0.13:
+ resolution: {integrity: sha512-MxSthGw3OVs80dG6JWeauIGdvMLpfpS2DxlfWVdQjqMnvnU/2OToOxGX+f6qdfpnu1bu+jd/QetPjmwBHxYLxg==}
+ dependencies:
+ is-ci: 3.0.1
+ jose: 5.6.2
+ open: 10.1.0
+ socket.io-client: 4.7.5
+ tslib: 2.6.3
+ uuid: 8.3.2
+ zephyr-edge-contract: 0.0.13
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+ dev: false
+
+ /zephyr-edge-contract@0.0.13:
+ resolution: {integrity: sha512-RvYPYjQnC54GDTxG/dvMvjYfQcjmCxA/ugqs3/W1L280o3z3gxiFyM0Wo+4Zca3V/GCo03isvbs0KGJwj2VD8Q==}
+ dependencies:
+ debug: 4.3.5
+ node-persist: 4.0.1
+ tslib: 2.6.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /zephyr-webpack-plugin@0.0.13:
+ resolution: {integrity: sha512-LEFrj8gNzAzrCKSomSwLWMqFqpVgOVxJVmMwzQy3cZ4yAQeNgpjLAm5BOccE3MoewPWqdgzTCjEbqdIK+TyMFQ==}
+ dependencies:
+ '@module-federation/automatic-vendor-federation': 1.2.1(webpack@5.92.1)
+ is-ci: 3.0.1
+ tslib: 2.6.3
+ webpack: 5.92.1
+ zephyr-agent: 0.0.13
+ zephyr-edge-contract: 0.0.13
+ transitivePeerDependencies:
+ - '@swc/core'
+ - bufferutil
+ - esbuild
+ - supports-color
+ - uglify-js
+ - utf-8-validate
+ - webpack-cli
+ dev: false
diff --git a/rspack_hmr/host/rspack.config.js b/rspack_hmr/host/rspack.config.js
new file mode 100644
index 0000000..defe4ff
--- /dev/null
+++ b/rspack_hmr/host/rspack.config.js
@@ -0,0 +1,111 @@
+const rspack = require('@rspack/core');
+const refreshPlugin = require('@rspack/plugin-react-refresh');
+const isDev = process.env.NODE_ENV === 'development';
+
+const path = require('path');
+const deps = require('./package.json').dependencies;
+console.log({ deps });
+const { ModuleFederationPlugin } = require('@module-federation/enhanced/rspack');
+
+const name = 'app_01';
+const name1 = name + '1';
+/**
+ * @type {import('@rspack/cli').Configuration}
+ */
+module.exports = {
+ //context: __dirname,
+ entry: {
+ main: './src/index.tsx',
+ },
+ resolve: {
+ extensions: ['...', '.ts', '.tsx', '.jsx'],
+ },
+ optimization: {
+ minimize: false,
+ },
+ devServer: {
+ port: 3000,
+ hot: true,
+ static: {
+ directory: path.join(__dirname, 'build'),
+ },
+ liveReload: false,
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, PATCH, OPTIONS',
+ 'Access-Control-Allow-Headers': 'X-Requested-With, content-type, Authorization',
+ },
+ },
+
+ devtool: 'source-map',
+ optimization: { minimize: false },
+ output: {
+ path: __dirname + '/dist',
+ uniqueName: name1,
+ publicPath: 'http://localhost:3000/',
+ filename: '[name].js',
+ },
+ watch: true,
+ module: {
+ rules: [
+ {
+ test: /\.svg$/,
+ type: 'asset',
+ },
+ {
+ test: /\.(jsx?|tsx?)$/,
+
+ exclude: /(node_modules|\.webpack)/,
+ use: [
+ {
+ loader: 'builtin:swc-loader',
+ options: {
+ sourceMap: true,
+ jsc: {
+ parser: {
+ syntax: 'typescript',
+ tsx: true,
+ },
+ transform: {
+ react: {
+ runtime: 'automatic',
+ development: isDev,
+ refresh: isDev,
+ },
+ },
+ },
+ env: {
+ targets: ['chrome >= 87', 'edge >= 88', 'firefox >= 78', 'safari >= 14'],
+ },
+ },
+ },
+ ],
+ },
+ ],
+ },
+ plugins: [
+ new rspack.DefinePlugin({
+ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
+ }),
+ new rspack.ProgressPlugin({}),
+
+ isDev && new rspack.HotModuleReplacementPlugin(),
+ new rspack.HtmlRspackPlugin({
+ template: './index.html',
+ excludedChunks: [name],
+ filename: 'index.html',
+ inject: true,
+ publicPath: '/',
+ }),
+ new ModuleFederationPlugin({
+ name: name,
+ filename: 'remoteEntry.js',
+ remotes: {
+ app_02: 'app_02@http://localhost:3001/mf-manifest.json',
+ },
+
+ shared: ['react', 'react-dom'],
+ }),
+ isDev ? new refreshPlugin() : null,
+ ].filter(Boolean),
+};
diff --git a/rspack_hmr/host/src/App.css b/rspack_hmr/host/src/App.css
new file mode 100644
index 0000000..0d75132
--- /dev/null
+++ b/rspack_hmr/host/src/App.css
@@ -0,0 +1,43 @@
+#root {
+ max-width: 1280px;
+ margin: 0 auto;
+ padding: 2rem;
+ text-align: center;
+}
+
+.logo {
+ position: absolute;
+ top: 10rem;
+ height: 2em;
+ padding: 1.5em;
+ will-change: filter;
+}
+.logo:hover {
+ filter: drop-shadow(0 0 2em #646cffaa);
+}
+.logo.react:hover {
+ filter: drop-shadow(0 0 2em #61dafbaa);
+}
+
+@keyframes logo-spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ a:nth-of-type(2) .logo {
+ animation: logo-spin infinite 20s linear;
+ }
+}
+
+.card {
+ padding: 2em;
+}
+
+.read-the-docs {
+ color: #888;
+}
diff --git a/rspack_hmr/host/src/App.tsx b/rspack_hmr/host/src/App.tsx
new file mode 100644
index 0000000..415d664
--- /dev/null
+++ b/rspack_hmr/host/src/App.tsx
@@ -0,0 +1,30 @@
+import './App.css';
+import { Hello } from 'app_02/Hello';
+
+function App() {
+ return (
+
+
+
Host :)
+
+ This is currently in a host app.{' '}
+
+ Directory name: host
+ package.json name: @rspack-hmr/rspack-host
+ {' '}
+
We are taking the
'Hello'
module from App_02
+
+
+
+
+
+
+
+
+ );
+}
+
+export default App;
diff --git a/rspack_hmr/host/src/bootstrap.tsx b/rspack_hmr/host/src/bootstrap.tsx
new file mode 100644
index 0000000..8c4462a
--- /dev/null
+++ b/rspack_hmr/host/src/bootstrap.tsx
@@ -0,0 +1,10 @@
+import React from 'react';
+import ReactDOM from 'react-dom/client';
+import App from './App.tsx';
+import './index.css';
+
+ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
+
+
+ ,
+);
diff --git a/rspack_hmr/host/src/index.css b/rspack_hmr/host/src/index.css
new file mode 100644
index 0000000..917888c
--- /dev/null
+++ b/rspack_hmr/host/src/index.css
@@ -0,0 +1,70 @@
+:root {
+ font-family: Inter, Avenir, Helvetica, Arial, sans-serif;
+ font-size: 16px;
+ line-height: 24px;
+ font-weight: 400;
+
+ color-scheme: light dark;
+ color: rgba(255, 255, 255, 0.87);
+ background-color: #242424;
+
+ font-synthesis: none;
+ text-rendering: optimizeLegibility;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-text-size-adjust: 100%;
+}
+
+a {
+ font-weight: 500;
+ color: #646cff;
+ text-decoration: inherit;
+}
+a:hover {
+ color: #535bf2;
+}
+
+body {
+ margin: 0;
+ display: flex;
+ place-items: center;
+ min-width: 320px;
+ min-height: 100vh;
+}
+
+h1 {
+ font-size: 3.2em;
+ line-height: 1.1;
+}
+
+button {
+ border-radius: 8px;
+ border: 1px solid transparent;
+ padding: 0.6em 1.2em;
+ font-size: 1em;
+ font-weight: 500;
+ font-family: inherit;
+ background-color: #1a1a1a;
+ cursor: pointer;
+ transition: border-color 0.25s;
+}
+button:hover {
+ border-color: #646cff;
+}
+button:focus,
+button:focus-visible {
+ outline: 4px auto -webkit-focus-ring-color;
+}
+
+@media (prefers-color-scheme: light) {
+ :root {
+ color: #213547;
+ background-color: #ffffff;
+ }
+ a:hover {
+ color: #747bff;
+ }
+ button {
+ background-color: #f9f9f9;
+ }
+}
diff --git a/rspack_hmr/host/src/index.tsx b/rspack_hmr/host/src/index.tsx
new file mode 100644
index 0000000..b93c7a0
--- /dev/null
+++ b/rspack_hmr/host/src/index.tsx
@@ -0,0 +1 @@
+import('./bootstrap');
diff --git a/rspack_hmr/host/src/react-env.d.ts b/rspack_hmr/host/src/react-env.d.ts
new file mode 100644
index 0000000..bd4c10d
--- /dev/null
+++ b/rspack_hmr/host/src/react-env.d.ts
@@ -0,0 +1,213 @@
+// CSS modules
+type CSSModuleClasses = { readonly [key: string]: string };
+
+declare module '*.module.css' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.scss' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.sass' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.less' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.styl' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.stylus' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.pcss' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.sss' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+
+// CSS
+declare module '*.css' {
+ /**
+ * @deprecated Use `import style from './style.css?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.scss' {
+ /**
+ * @deprecated Use `import style from './style.scss?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.sass' {
+ /**
+ * @deprecated Use `import style from './style.sass?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.less' {
+ /**
+ * @deprecated Use `import style from './style.less?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.styl' {
+ /**
+ * @deprecated Use `import style from './style.styl?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.stylus' {
+ /**
+ * @deprecated Use `import style from './style.stylus?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.pcss' {
+ /**
+ * @deprecated Use `import style from './style.pcss?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.sss' {
+ /**
+ * @deprecated Use `import style from './style.sss?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+
+// images
+declare module '*.png' {
+ const src: string;
+ export default src;
+}
+declare module '*.jpg' {
+ const src: string;
+ export default src;
+}
+declare module '*.jpeg' {
+ const src: string;
+ export default src;
+}
+declare module '*.jfif' {
+ const src: string;
+ export default src;
+}
+declare module '*.pjpeg' {
+ const src: string;
+ export default src;
+}
+declare module '*.pjp' {
+ const src: string;
+ export default src;
+}
+declare module '*.gif' {
+ const src: string;
+ export default src;
+}
+declare module '*.svg' {
+ const ReactComponent: React.FC>;
+ const content: string;
+
+ export { ReactComponent };
+ export default content;
+}
+declare module '*.ico' {
+ const src: string;
+ export default src;
+}
+declare module '*.webp' {
+ const src: string;
+ export default src;
+}
+declare module '*.avif' {
+ const src: string;
+ export default src;
+}
+
+// media
+declare module '*.mp4' {
+ const src: string;
+ export default src;
+}
+declare module '*.webm' {
+ const src: string;
+ export default src;
+}
+declare module '*.ogg' {
+ const src: string;
+ export default src;
+}
+declare module '*.mp3' {
+ const src: string;
+ export default src;
+}
+declare module '*.wav' {
+ const src: string;
+ export default src;
+}
+declare module '*.flac' {
+ const src: string;
+ export default src;
+}
+declare module '*.aac' {
+ const src: string;
+ export default src;
+}
+
+declare module '*.opus' {
+ const src: string;
+ export default src;
+}
+
+// fonts
+declare module '*.woff' {
+ const src: string;
+ export default src;
+}
+declare module '*.woff2' {
+ const src: string;
+ export default src;
+}
+declare module '*.eot' {
+ const src: string;
+ export default src;
+}
+declare module '*.ttf' {
+ const src: string;
+ export default src;
+}
+declare module '*.otf' {
+ const src: string;
+ export default src;
+}
+
+// other
+declare module '*.webmanifest' {
+ const src: string;
+ export default src;
+}
+declare module '*.pdf' {
+ const src: string;
+ export default src;
+}
+declare module '*.txt' {
+ const src: string;
+ export default src;
+}
diff --git a/rspack_hmr/host/tsconfig.json b/rspack_hmr/host/tsconfig.json
new file mode 100644
index 0000000..cb52ef7
--- /dev/null
+++ b/rspack_hmr/host/tsconfig.json
@@ -0,0 +1,21 @@
+{
+ "compilerOptions": {
+ "target": "ES6",
+ "lib": ["DOM", "DOM.Iterable", "ESNext"],
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "react-jsx",
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true,
+ "paths": {
+ "*": ["./@mf-types/*"]
+ }
+ },
+ "include": ["src"]
+}
diff --git a/rspack_hmr/package.json b/rspack_hmr/package.json
new file mode 100644
index 0000000..9745597
--- /dev/null
+++ b/rspack_hmr/package.json
@@ -0,0 +1,14 @@
+{
+ "name": "rspack-hmr",
+ "scripts": {
+ "install-all": "concurrently \"pnpm i --filter @rspack-hmr/rspack-host\" \"pnpm i --filter @rspack-hmr/app2\" \"pnpm i --filter @rspack-hmr/rspack-runhost\"",
+ "start": "pnpm run --filter @rspack-hmr/* dev",
+ "build": "pnpm run --filter @rspack-hmr/* build"
+ },
+ "devDependencies": {
+ "concurrently": "^8.2.2"
+ },
+ "engines": {
+ "node": "20.x"
+ }
+}
\ No newline at end of file
diff --git a/rspack_hmr/pnpm-lock.yaml b/rspack_hmr/pnpm-lock.yaml
new file mode 100644
index 0000000..949480e
--- /dev/null
+++ b/rspack_hmr/pnpm-lock.yaml
@@ -0,0 +1,204 @@
+lockfileVersion: '6.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+devDependencies:
+ concurrently:
+ specifier: ^8.2.2
+ version: 8.2.2
+
+packages:
+
+ /@babel/runtime@7.24.7:
+ resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ regenerator-runtime: 0.14.1
+ dev: true
+
+ /ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+ dependencies:
+ color-convert: 2.0.1
+ dev: true
+
+ /chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+ dev: true
+
+ /cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+ dev: true
+
+ /color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+ dependencies:
+ color-name: 1.1.4
+ dev: true
+
+ /color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ dev: true
+
+ /concurrently@8.2.2:
+ resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==}
+ engines: {node: ^14.13.0 || >=16.0.0}
+ hasBin: true
+ dependencies:
+ chalk: 4.1.2
+ date-fns: 2.30.0
+ lodash: 4.17.21
+ rxjs: 7.8.1
+ shell-quote: 1.8.1
+ spawn-command: 0.0.2
+ supports-color: 8.1.1
+ tree-kill: 1.2.2
+ yargs: 17.7.2
+ dev: true
+
+ /date-fns@2.30.0:
+ resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==}
+ engines: {node: '>=0.11'}
+ dependencies:
+ '@babel/runtime': 7.24.7
+ dev: true
+
+ /emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ dev: true
+
+ /escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+ dev: true
+
+ /has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+ dev: true
+
+ /regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+ dev: true
+
+ /require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /rxjs@7.8.1:
+ resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
+ dependencies:
+ tslib: 2.6.3
+ dev: true
+
+ /shell-quote@1.8.1:
+ resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==}
+ dev: true
+
+ /spawn-command@0.0.2:
+ resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==}
+ dev: true
+
+ /string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+ dev: true
+
+ /strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-regex: 5.0.1
+ dev: true
+
+ /supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+ dependencies:
+ has-flag: 4.0.0
+ dev: true
+
+ /supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ has-flag: 4.0.0
+ dev: true
+
+ /tree-kill@1.2.2:
+ resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
+ hasBin: true
+ dev: true
+
+ /tslib@2.6.3:
+ resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
+ dev: true
+
+ /wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ dev: true
+
+ /y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+ dev: true
diff --git a/rspack_hmr/runhost/.gitignore b/rspack_hmr/runhost/.gitignore
new file mode 100644
index 0000000..a547bf3
--- /dev/null
+++ b/rspack_hmr/runhost/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/rspack_hmr/runhost/@mf-types/a2/Hello.d.ts b/rspack_hmr/runhost/@mf-types/a2/Hello.d.ts
new file mode 100644
index 0000000..965f617
--- /dev/null
+++ b/rspack_hmr/runhost/@mf-types/a2/Hello.d.ts
@@ -0,0 +1,2 @@
+export * from './compiled-types/Hello';
+export { default } from './compiled-types/Hello';
\ No newline at end of file
diff --git a/rspack_hmr/runhost/@mf-types/a2/apis.d.ts b/rspack_hmr/runhost/@mf-types/a2/apis.d.ts
new file mode 100644
index 0000000..3515229
--- /dev/null
+++ b/rspack_hmr/runhost/@mf-types/a2/apis.d.ts
@@ -0,0 +1,3 @@
+
+ export type RemoteKeys = 'a2/Hello' | 'a2/pi';
+ type PackageType = T extends 'a2/pi' ? typeof import('a2/pi') :T extends 'a2/Hello' ? typeof import('a2/Hello') :any;
\ No newline at end of file
diff --git a/rspack_hmr/runhost/@mf-types/a2/compiled-types/Hello.d.ts b/rspack_hmr/runhost/@mf-types/a2/compiled-types/Hello.d.ts
new file mode 100644
index 0000000..a70e0b7
--- /dev/null
+++ b/rspack_hmr/runhost/@mf-types/a2/compiled-types/Hello.d.ts
@@ -0,0 +1,5 @@
+interface Props {
+ name: string;
+}
+export declare const Hello: ({ name }: Props) => import("react/jsx-runtime").JSX.Element;
+export {};
diff --git a/rspack_hmr/runhost/@mf-types/a2/compiled-types/pi.d.ts b/rspack_hmr/runhost/@mf-types/a2/compiled-types/pi.d.ts
new file mode 100644
index 0000000..98a0b63
--- /dev/null
+++ b/rspack_hmr/runhost/@mf-types/a2/compiled-types/pi.d.ts
@@ -0,0 +1 @@
+export default function pi(): number;
diff --git a/rspack_hmr/runhost/@mf-types/a2/pi.d.ts b/rspack_hmr/runhost/@mf-types/a2/pi.d.ts
new file mode 100644
index 0000000..b1d8b3d
--- /dev/null
+++ b/rspack_hmr/runhost/@mf-types/a2/pi.d.ts
@@ -0,0 +1,2 @@
+export * from './compiled-types/pi';
+export { default } from './compiled-types/pi';
\ No newline at end of file
diff --git a/rspack_hmr/runhost/@mf-types/index.d.ts b/rspack_hmr/runhost/@mf-types/index.d.ts
new file mode 100644
index 0000000..8c6b3d4
--- /dev/null
+++ b/rspack_hmr/runhost/@mf-types/index.d.ts
@@ -0,0 +1,23 @@
+import type { PackageType as PackageType_0,RemoteKeys as RemoteKeys_0 } from './a2/apis.d.ts';
+ declare module "@module-federation/runtime" {
+ type RemoteKeys = RemoteKeys_0;
+ type PackageType = T extends RemoteKeys_0 ? PackageType_0 :
+Y ;
+ export function loadRemote(packageName: T): Promise>;
+ export function loadRemote(packageName: T): Promise>;
+ }
+declare module "@module-federation/enhanced/runtime" {
+ type RemoteKeys = RemoteKeys_0;
+ type PackageType = T extends RemoteKeys_0 ? PackageType_0 :
+Y ;
+ export function loadRemote(packageName: T): Promise>;
+ export function loadRemote(packageName: T): Promise>;
+ }
+declare module "@module-federation/runtime-tools" {
+ type RemoteKeys = RemoteKeys_0;
+ type PackageType = T extends RemoteKeys_0 ? PackageType_0 :
+Y ;
+ export function loadRemote(packageName: T): Promise>;
+ export function loadRemote(packageName: T): Promise>;
+ }
+
\ No newline at end of file
diff --git a/rspack_hmr/runhost/index.html b/rspack_hmr/runhost/index.html
new file mode 100644
index 0000000..5dab944
--- /dev/null
+++ b/rspack_hmr/runhost/index.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+ Rspack + React + TS
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rspack_hmr/runhost/package.json b/rspack_hmr/runhost/package.json
new file mode 100644
index 0000000..3b2e1b5
--- /dev/null
+++ b/rspack_hmr/runhost/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "@rspack-hmr/rspack-runhost",
+ "private": true,
+ "version": "1.0.0",
+ "scripts": {
+ "dev": "NODE_ENV=development rspack serve",
+ "build": "NODE_ENV=production rspack build"
+ },
+ "dependencies": {
+ "@module-federation/enhanced": "0.2.1",
+ "@module-federation/runtime": "0.2.1",
+ "@module-federation/sdk": "0.2.1",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "zephyr-webpack-plugin": "^0.0.13"
+ },
+ "devDependencies": {
+ "@rspack/cli": "0.7.4",
+ "@rspack/core": "0.7.4",
+ "@rspack/plugin-react-refresh": "0.7.4",
+ "@types/react": "18.3.3",
+ "@types/react-dom": "18.3.0",
+ "prettier": "3.3.2",
+ "react-refresh": "0.14.2"
+ }
+}
diff --git a/rspack_hmr/runhost/pnpm-lock.yaml b/rspack_hmr/runhost/pnpm-lock.yaml
new file mode 100644
index 0000000..6359e06
--- /dev/null
+++ b/rspack_hmr/runhost/pnpm-lock.yaml
@@ -0,0 +1,3163 @@
+lockfileVersion: '6.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+dependencies:
+ '@module-federation/enhanced':
+ specifier: 0.2.1
+ version: 0.2.1(typescript@5.5.3)(webpack@5.92.1)
+ '@module-federation/runtime':
+ specifier: 0.2.1
+ version: 0.2.1
+ '@module-federation/sdk':
+ specifier: 0.2.1
+ version: 0.2.1
+ react:
+ specifier: ^18.2.0
+ version: 18.3.1
+ react-dom:
+ specifier: ^18.2.0
+ version: 18.3.1(react@18.3.1)
+ zephyr-webpack-plugin:
+ specifier: ^0.0.13
+ version: 0.0.13
+
+devDependencies:
+ '@rspack/cli':
+ specifier: 0.7.4
+ version: 0.7.4(@rspack/core@0.7.4)(webpack@5.92.1)
+ '@rspack/core':
+ specifier: 0.7.4
+ version: 0.7.4
+ '@rspack/plugin-react-refresh':
+ specifier: 0.7.4
+ version: 0.7.4(react-refresh@0.14.2)
+ '@types/react':
+ specifier: 18.3.3
+ version: 18.3.3
+ '@types/react-dom':
+ specifier: 18.3.0
+ version: 18.3.0
+ prettier:
+ specifier: 3.3.2
+ version: 3.3.2
+ react-refresh:
+ specifier: 0.14.2
+ version: 0.14.2
+
+packages:
+
+ /@discoveryjs/json-ext@0.5.7:
+ resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
+ engines: {node: '>=10.0.0'}
+ dev: true
+
+ /@jridgewell/gen-mapping@0.3.5:
+ resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.4.15
+ '@jridgewell/trace-mapping': 0.3.25
+
+ /@jridgewell/resolve-uri@3.1.2:
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ /@jridgewell/set-array@1.2.1:
+ resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
+ engines: {node: '>=6.0.0'}
+
+ /@jridgewell/source-map@0.3.6:
+ resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
+
+ /@jridgewell/sourcemap-codec@1.4.15:
+ resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
+
+ /@jridgewell/trace-mapping@0.3.25:
+ resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.4.15
+
+ /@leichtgewicht/ip-codec@2.0.5:
+ resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==}
+ dev: true
+
+ /@module-federation/automatic-vendor-federation@1.2.1(webpack@5.92.1):
+ resolution: {integrity: sha512-73wxkXM7pbRZ6GGM90JP5IPTPvY3fvrhQyTVdMCUx85cQRWqnbzbibcsz3pkOMOeXyYAO4tXXsG13yNaEEGhJA==}
+ peerDependencies:
+ webpack: 5.91.0
+ dependencies:
+ find-package-json: 1.2.0
+ webpack: 5.92.1
+ dev: false
+
+ /@module-federation/bridge-react-webpack-plugin@0.2.1:
+ resolution: {integrity: sha512-dWqA4mm81yDBBWD452UiX3TXxFQPpu4KCArAIO72cISq5Llrsd0WbyUQY1DOWFN8wdhy5OwyMS5qj5wCNHXeew==}
+ dependencies:
+ '@module-federation/sdk': 0.2.1
+ dev: false
+
+ /@module-federation/dts-plugin@0.2.1(typescript@5.5.3):
+ resolution: {integrity: sha512-hr1w7KEaIVvoCB6mn1//+yZig099m6Ux3b5lW+w7SrH54dLzJHtIfllhWhZPZi5D9Y3mMuQlAxodsCD/sXQlKQ==}
+ peerDependencies:
+ typescript: ^4.9.0 || ^5.0.0
+ vue-tsc: ^1.0.24
+ peerDependenciesMeta:
+ vue-tsc:
+ optional: true
+ dependencies:
+ '@module-federation/managers': 0.2.1
+ '@module-federation/sdk': 0.2.1
+ '@module-federation/third-party-dts-extractor': 0.2.1
+ adm-zip: 0.5.14
+ ansi-colors: 4.1.3
+ axios: 1.7.2
+ chalk: 3.0.0
+ fs-extra: 9.1.0
+ isomorphic-ws: 5.0.0(ws@8.17.1)
+ koa: 2.11.0
+ lodash.clonedeepwith: 4.5.0
+ log4js: 6.9.1
+ node-schedule: 2.1.1
+ rambda: 9.2.1
+ typescript: 5.5.3
+ ws: 8.17.1
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+ dev: false
+
+ /@module-federation/enhanced@0.2.1(typescript@5.5.3)(webpack@5.92.1):
+ resolution: {integrity: sha512-4iXsTU7HQUNtZMR4FAUTuctBQ9jOkYPINiCRveZjERW+UWC2g6KZ/rjbT5H5pBu/Ta6os8NSuNECtXGsT6Bprg==}
+ peerDependencies:
+ typescript: ^4.9.0 || ^5.0.0
+ vue-tsc: ^1.0.24
+ webpack: ^5.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ vue-tsc:
+ optional: true
+ webpack:
+ optional: true
+ dependencies:
+ '@module-federation/bridge-react-webpack-plugin': 0.2.1
+ '@module-federation/dts-plugin': 0.2.1(typescript@5.5.3)
+ '@module-federation/managers': 0.2.1
+ '@module-federation/manifest': 0.2.1(typescript@5.5.3)
+ '@module-federation/rspack': 0.2.1(typescript@5.5.3)
+ '@module-federation/runtime-tools': 0.2.1
+ '@module-federation/sdk': 0.2.1
+ btoa: 1.2.1
+ typescript: 5.5.3
+ upath: 2.0.1
+ webpack: 5.92.1
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+ dev: false
+
+ /@module-federation/managers@0.2.1:
+ resolution: {integrity: sha512-x7Qon5YhLr9KPjig2zPkL76ZFLkvzDm7zrF2fVGO/wURWoeTougZ8vcUsDFrpEHxoQaC3OEgN0i5ZwEeRZlE2Q==}
+ dependencies:
+ '@module-federation/sdk': 0.2.1
+ find-pkg: 2.0.0
+ fs-extra: 9.1.0
+ dev: false
+
+ /@module-federation/manifest@0.2.1(typescript@5.5.3):
+ resolution: {integrity: sha512-Q0mw8ASPwCFdOvVrm7VHUMfki5MCtglb0FIPTDfhhHgVEQ6J2zW7WTu8/6HXY/SiorI1r1YBp9qhh0EzpMxgvA==}
+ dependencies:
+ '@module-federation/dts-plugin': 0.2.1(typescript@5.5.3)
+ '@module-federation/managers': 0.2.1
+ '@module-federation/sdk': 0.2.1
+ chalk: 3.0.0
+ find-pkg: 2.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - vue-tsc
+ dev: false
+
+ /@module-federation/rspack@0.2.1(typescript@5.5.3):
+ resolution: {integrity: sha512-J6IGpHje69E7l6kJAZ++j35OqCJDmkj5vFdt4/nSosgAHH1hnVzTgZAvscvfsupgUntZn0HJWPNmXwBaOrccbw==}
+ dependencies:
+ '@module-federation/bridge-react-webpack-plugin': 0.2.1
+ '@module-federation/dts-plugin': 0.2.1(typescript@5.5.3)
+ '@module-federation/managers': 0.2.1
+ '@module-federation/manifest': 0.2.1(typescript@5.5.3)
+ '@module-federation/runtime-tools': 0.2.1
+ '@module-federation/sdk': 0.2.1
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - vue-tsc
+ dev: false
+
+ /@module-federation/runtime-tools@0.1.6:
+ resolution: {integrity: sha512-7ILVnzMIa0Dlc0Blck5tVZG1tnk1MmLnuZpLOMpbdW+zl+N6wdMjjHMjEZFCUAJh2E5XJ3BREwfX8Ets0nIkLg==}
+ dependencies:
+ '@module-federation/runtime': 0.1.6
+ '@module-federation/webpack-bundler-runtime': 0.1.6
+ dev: true
+
+ /@module-federation/runtime-tools@0.2.1:
+ resolution: {integrity: sha512-UUmEuvYWyubHfgavnqvkVmxI/Js1V4bYEMnIHTQsIn4j1DRe7DKhKeaFk+OxsAzspiIPZdEWrvmzehSYaSChJw==}
+ dependencies:
+ '@module-federation/runtime': 0.2.1
+ '@module-federation/webpack-bundler-runtime': 0.2.1
+ dev: false
+
+ /@module-federation/runtime@0.1.6:
+ resolution: {integrity: sha512-nj6a+yJ+QxmcE89qmrTl4lphBIoAds0PFPVGnqLRWflwAP88jrCcrrTqRhARegkFDL+wE9AE04+h6jzlbIfMKg==}
+ dependencies:
+ '@module-federation/sdk': 0.1.6
+ dev: true
+
+ /@module-federation/runtime@0.2.1:
+ resolution: {integrity: sha512-uzp2Smg2yhJYnfYAlleFrDkVXi8b5MaEd9ve8YjrulCnhN3dAq4tQkwXOiryVtpGT5qVUBdfVoTW+HozYibEOw==}
+ dependencies:
+ '@module-federation/sdk': 0.2.1
+ dev: false
+
+ /@module-federation/sdk@0.1.6:
+ resolution: {integrity: sha512-qifXpyYLM7abUeEOIfv0oTkguZgRZuwh89YOAYIZJlkP6QbRG7DJMQvtM8X2yHXm9PTk0IYNnOJH0vNQCo6auQ==}
+ dev: true
+
+ /@module-federation/sdk@0.2.1:
+ resolution: {integrity: sha512-t3136yds14EBb+BAvp3LJg8E8W+07tNweXUOt5NQfn4TROml6wF4TFyrLsaXi5F8c1C95IGYRxUNKjQ/ImLK6w==}
+ dev: false
+
+ /@module-federation/third-party-dts-extractor@0.2.1:
+ resolution: {integrity: sha512-ws1xxpPcn1nE75jlc5jFeMaj65HdMiO9JN0Z661936q76C6gsjM0G+YQLRy/lr834/F4+zkRBaInyglM98I1eg==}
+ dependencies:
+ find-pkg: 2.0.0
+ fs-extra: 9.1.0
+ resolve: 1.22.8
+ dev: false
+
+ /@module-federation/webpack-bundler-runtime@0.1.6:
+ resolution: {integrity: sha512-K5WhKZ4RVNaMEtfHsd/9CNCgGKB0ipbm/tgweNNeC11mEuBTNxJ09Y630vg3WPkKv9vfMCuXg2p2Dk+Q/KWTSA==}
+ dependencies:
+ '@module-federation/runtime': 0.1.6
+ '@module-federation/sdk': 0.1.6
+ dev: true
+
+ /@module-federation/webpack-bundler-runtime@0.2.1:
+ resolution: {integrity: sha512-8TdWq3TNd6fT6BayQRHtoonGfO5tyW/QjKJE/z2OWFFfG8JYF/dNWcOfLYm9Wui8Xts6nSyQIKhAD0tBifQtMw==}
+ dependencies:
+ '@module-federation/runtime': 0.2.1
+ '@module-federation/sdk': 0.2.1
+ dev: false
+
+ /@polka/url@1.0.0-next.25:
+ resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==}
+ dev: true
+
+ /@rspack/binding-darwin-arm64@0.7.4:
+ resolution: {integrity: sha512-K78fUe9OhFTV61kHYCuahNkBXCFJMmqSGyIgNtLR9Psk82IVCHkvxY5565An1Quvo1UmgVh5R2YmylKE81mwiw==}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-darwin-x64@0.7.4:
+ resolution: {integrity: sha512-EQriu7oE+tZv25g5VJH6Ael74U42fmpb4zGs7wLmWyKfCtO6SegL3tJ8Jc6mMmp+vg949dVvkw7uB6TJjOqx2g==}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-linux-arm64-gnu@0.7.4:
+ resolution: {integrity: sha512-yhJLkU1zEXMyHNWhh8pBEaK6cRAjFzRK2hqejhhZ0K+lqC0Af9bKvZyXXGrMfmmHlsh1VJ9VVmi21qcXr/kdzg==}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-linux-arm64-musl@0.7.4:
+ resolution: {integrity: sha512-6GV3Ztl6Q1zdJmNo+dwHiJd2Y/IEH9qWOh4YHiyzYGbQQYpfhhLYwKexalWaAAhdMm6KKoeqzklgHImCINImEg==}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-linux-x64-gnu@0.7.4:
+ resolution: {integrity: sha512-KFdAEIZ7mPnT0y198xVOa8vIT9tgpEFVidCSIlxdk65UGC59g6UxEQq1EVAbcBi1Ou6Zza/UtxIlzk6Ev6KDkQ==}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-linux-x64-musl@0.7.4:
+ resolution: {integrity: sha512-qekcXkv12oWRztZHXGzNAI92/O/+abU35/nGDycZmMtr+Qt2XS5hE1T9oBQ54yecIzUVDGNcYwhIMWBX6E2dmQ==}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-win32-arm64-msvc@0.7.4:
+ resolution: {integrity: sha512-D1BccimBVeA/k2ty/28ER/j3s/c0n0MtN4kpyjYwgRILVLRSr+rfbC75i8wYh8r8AXjhNWNG88LmrFN9e9i7Ug==}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-win32-ia32-msvc@0.7.4:
+ resolution: {integrity: sha512-5//TZH0Y4fRuTQ/ZmNOVaIfPIQXtgNAI78QxvF8Amygk4Uqklpo3ceHGP+yZfZgjh3mzjoUK+22fWbq/cUmW0w==}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding-win32-x64-msvc@0.7.4:
+ resolution: {integrity: sha512-C3ZxIEYKvnjQbV19FfQE6CGO6vcGp2JcvSQCc6SHwU/KNxLDrI1pA7XUG5TKoGSsqVEDZN6H8fJxLUYPQBjJcg==}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rspack/binding@0.7.4:
+ resolution: {integrity: sha512-H1rTtYxbxe40miV2gYLPwIxEn2yMY6+bq+fjfiRu61kTvllexPMBYgFpKqSAc5Qyyto9j9uCkR4MJEYj2R/SQQ==}
+ optionalDependencies:
+ '@rspack/binding-darwin-arm64': 0.7.4
+ '@rspack/binding-darwin-x64': 0.7.4
+ '@rspack/binding-linux-arm64-gnu': 0.7.4
+ '@rspack/binding-linux-arm64-musl': 0.7.4
+ '@rspack/binding-linux-x64-gnu': 0.7.4
+ '@rspack/binding-linux-x64-musl': 0.7.4
+ '@rspack/binding-win32-arm64-msvc': 0.7.4
+ '@rspack/binding-win32-ia32-msvc': 0.7.4
+ '@rspack/binding-win32-x64-msvc': 0.7.4
+ dev: true
+
+ /@rspack/cli@0.7.4(@rspack/core@0.7.4)(webpack@5.92.1):
+ resolution: {integrity: sha512-UFQWYpgHqrtCzySif9F/ueBn8CbsGmlXOZRYnOzC9HzKXZY9JYgJFbT7EL7JfFe1LmBukF3yaTOuSgTbIxJkJQ==}
+ hasBin: true
+ peerDependencies:
+ '@rspack/core': '>=0.4.0'
+ dependencies:
+ '@discoveryjs/json-ext': 0.5.7
+ '@rspack/core': 0.7.4
+ '@rspack/dev-server': 0.7.4(@rspack/core@0.7.4)(webpack@5.92.1)
+ colorette: 2.0.19
+ exit-hook: 3.2.0
+ interpret: 3.1.1
+ rechoir: 0.8.0
+ semver: 6.3.1
+ webpack-bundle-analyzer: 4.6.1
+ yargs: 17.6.2
+ transitivePeerDependencies:
+ - '@types/express'
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+ - webpack
+ - webpack-cli
+ dev: true
+
+ /@rspack/core@0.7.4:
+ resolution: {integrity: sha512-HECQ0WL8iVS1Mwq2W2hfrStZZbtTPl/GjDdAZDMToPqWtSVGww99UDGIYTHW8G6kawQ3GY6wa86WTQNfXEpSCA==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ '@swc/helpers': '>=0.5.1'
+ peerDependenciesMeta:
+ '@swc/helpers':
+ optional: true
+ dependencies:
+ '@module-federation/runtime-tools': 0.1.6
+ '@rspack/binding': 0.7.4
+ caniuse-lite: 1.0.30001639
+ tapable: 2.2.1
+ webpack-sources: 3.2.3
+ dev: true
+
+ /@rspack/dev-server@0.7.4(@rspack/core@0.7.4)(webpack@5.92.1):
+ resolution: {integrity: sha512-mzc1gqZ0iMmqbsWiVSoRfZQiz2x1wGQc0uibyRzDxZ1Z9IqSjHwoZopVAN9aiR6CNWrSXRHy7KuyhCFfweOh0g==}
+ peerDependencies:
+ '@rspack/core': '*'
+ dependencies:
+ '@rspack/core': 0.7.4
+ chokidar: 3.5.3
+ connect-history-api-fallback: 2.0.0
+ express: 4.19.2
+ http-proxy-middleware: 2.0.6(@types/express@4.17.21)
+ mime-types: 2.1.35
+ webpack-dev-middleware: 6.1.2(webpack@5.92.1)
+ webpack-dev-server: 4.13.1(webpack@5.92.1)
+ ws: 8.8.1
+ transitivePeerDependencies:
+ - '@types/express'
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+ - webpack
+ - webpack-cli
+ dev: true
+
+ /@rspack/plugin-react-refresh@0.7.4(react-refresh@0.14.2):
+ resolution: {integrity: sha512-9tAJdG/xZ6hUtD5K5OVpwAl2yV2HFnNl5fU5aOR5VJ5Pk0rCsYwbEZRbRnmSZwzMWIKDnowhoTi+4Ha3JV3aeQ==}
+ peerDependencies:
+ react-refresh: '>=0.10.0 <1.0.0'
+ peerDependenciesMeta:
+ react-refresh:
+ optional: true
+ dependencies:
+ react-refresh: 0.14.2
+ dev: true
+
+ /@socket.io/component-emitter@3.1.2:
+ resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
+ dev: false
+
+ /@types/body-parser@1.19.5:
+ resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==}
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/bonjour@3.5.13:
+ resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==}
+ dependencies:
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/connect-history-api-fallback@1.5.4:
+ resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==}
+ dependencies:
+ '@types/express-serve-static-core': 4.19.5
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/connect@3.4.38:
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+ dependencies:
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/eslint-scope@3.7.7:
+ resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
+ dependencies:
+ '@types/eslint': 8.56.10
+ '@types/estree': 1.0.5
+
+ /@types/eslint@8.56.10:
+ resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==}
+ dependencies:
+ '@types/estree': 1.0.5
+ '@types/json-schema': 7.0.15
+
+ /@types/estree@1.0.5:
+ resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
+
+ /@types/express-serve-static-core@4.19.5:
+ resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==}
+ dependencies:
+ '@types/node': 20.14.9
+ '@types/qs': 6.9.15
+ '@types/range-parser': 1.2.7
+ '@types/send': 0.17.4
+ dev: true
+
+ /@types/express@4.17.21:
+ resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==}
+ dependencies:
+ '@types/body-parser': 1.19.5
+ '@types/express-serve-static-core': 4.19.5
+ '@types/qs': 6.9.15
+ '@types/serve-static': 1.15.7
+ dev: true
+
+ /@types/http-errors@2.0.4:
+ resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==}
+ dev: true
+
+ /@types/http-proxy@1.17.14:
+ resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==}
+ dependencies:
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/json-schema@7.0.15:
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+ /@types/mime@1.3.5:
+ resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
+ dev: true
+
+ /@types/node-forge@1.3.11:
+ resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==}
+ dependencies:
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/node@20.14.9:
+ resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==}
+ dependencies:
+ undici-types: 5.26.5
+
+ /@types/prop-types@15.7.12:
+ resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==}
+ dev: true
+
+ /@types/qs@6.9.15:
+ resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==}
+ dev: true
+
+ /@types/range-parser@1.2.7:
+ resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
+ dev: true
+
+ /@types/react-dom@18.3.0:
+ resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==}
+ dependencies:
+ '@types/react': 18.3.3
+ dev: true
+
+ /@types/react@18.3.3:
+ resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==}
+ dependencies:
+ '@types/prop-types': 15.7.12
+ csstype: 3.1.3
+ dev: true
+
+ /@types/retry@0.12.0:
+ resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==}
+ dev: true
+
+ /@types/send@0.17.4:
+ resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==}
+ dependencies:
+ '@types/mime': 1.3.5
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/serve-index@1.9.4:
+ resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==}
+ dependencies:
+ '@types/express': 4.17.21
+ dev: true
+
+ /@types/serve-static@1.15.7:
+ resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==}
+ dependencies:
+ '@types/http-errors': 2.0.4
+ '@types/node': 20.14.9
+ '@types/send': 0.17.4
+ dev: true
+
+ /@types/sockjs@0.3.36:
+ resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==}
+ dependencies:
+ '@types/node': 20.14.9
+ dev: true
+
+ /@types/ws@8.5.10:
+ resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==}
+ dependencies:
+ '@types/node': 20.14.9
+ dev: true
+
+ /@webassemblyjs/ast@1.12.1:
+ resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==}
+ dependencies:
+ '@webassemblyjs/helper-numbers': 1.11.6
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+
+ /@webassemblyjs/floating-point-hex-parser@1.11.6:
+ resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==}
+
+ /@webassemblyjs/helper-api-error@1.11.6:
+ resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==}
+
+ /@webassemblyjs/helper-buffer@1.12.1:
+ resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==}
+
+ /@webassemblyjs/helper-numbers@1.11.6:
+ resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==}
+ dependencies:
+ '@webassemblyjs/floating-point-hex-parser': 1.11.6
+ '@webassemblyjs/helper-api-error': 1.11.6
+ '@xtuc/long': 4.2.2
+
+ /@webassemblyjs/helper-wasm-bytecode@1.11.6:
+ resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==}
+
+ /@webassemblyjs/helper-wasm-section@1.12.1:
+ resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-buffer': 1.12.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+ '@webassemblyjs/wasm-gen': 1.12.1
+
+ /@webassemblyjs/ieee754@1.11.6:
+ resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==}
+ dependencies:
+ '@xtuc/ieee754': 1.2.0
+
+ /@webassemblyjs/leb128@1.11.6:
+ resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==}
+ dependencies:
+ '@xtuc/long': 4.2.2
+
+ /@webassemblyjs/utf8@1.11.6:
+ resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==}
+
+ /@webassemblyjs/wasm-edit@1.12.1:
+ resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-buffer': 1.12.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+ '@webassemblyjs/helper-wasm-section': 1.12.1
+ '@webassemblyjs/wasm-gen': 1.12.1
+ '@webassemblyjs/wasm-opt': 1.12.1
+ '@webassemblyjs/wasm-parser': 1.12.1
+ '@webassemblyjs/wast-printer': 1.12.1
+
+ /@webassemblyjs/wasm-gen@1.12.1:
+ resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+ '@webassemblyjs/ieee754': 1.11.6
+ '@webassemblyjs/leb128': 1.11.6
+ '@webassemblyjs/utf8': 1.11.6
+
+ /@webassemblyjs/wasm-opt@1.12.1:
+ resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-buffer': 1.12.1
+ '@webassemblyjs/wasm-gen': 1.12.1
+ '@webassemblyjs/wasm-parser': 1.12.1
+
+ /@webassemblyjs/wasm-parser@1.12.1:
+ resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-api-error': 1.11.6
+ '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+ '@webassemblyjs/ieee754': 1.11.6
+ '@webassemblyjs/leb128': 1.11.6
+ '@webassemblyjs/utf8': 1.11.6
+
+ /@webassemblyjs/wast-printer@1.12.1:
+ resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==}
+ dependencies:
+ '@webassemblyjs/ast': 1.12.1
+ '@xtuc/long': 4.2.2
+
+ /@xtuc/ieee754@1.2.0:
+ resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
+
+ /@xtuc/long@4.2.2:
+ resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
+
+ /accepts@1.3.8:
+ resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-types: 2.1.35
+ negotiator: 0.6.3
+
+ /acorn-import-attributes@1.9.5(acorn@8.12.0):
+ resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
+ peerDependencies:
+ acorn: ^8
+ dependencies:
+ acorn: 8.12.0
+
+ /acorn-walk@8.3.3:
+ resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==}
+ engines: {node: '>=0.4.0'}
+ dependencies:
+ acorn: 8.12.0
+ dev: true
+
+ /acorn@8.12.0:
+ resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ /adm-zip@0.5.14:
+ resolution: {integrity: sha512-DnyqqifT4Jrcvb8USYjp6FHtBpEIz1mnXu6pTRHZ0RL69LbQYiO+0lDFg5+OKA7U29oWSs3a/i8fhn8ZcceIWg==}
+ engines: {node: '>=12.0'}
+ dev: false
+
+ /ajv-formats@2.1.1(ajv@8.16.0):
+ resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+ dependencies:
+ ajv: 8.16.0
+ dev: true
+
+ /ajv-keywords@3.5.2(ajv@6.12.6):
+ resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
+ peerDependencies:
+ ajv: ^6.9.1
+ dependencies:
+ ajv: 6.12.6
+
+ /ajv-keywords@5.1.0(ajv@8.16.0):
+ resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
+ peerDependencies:
+ ajv: ^8.8.2
+ dependencies:
+ ajv: 8.16.0
+ fast-deep-equal: 3.1.3
+ dev: true
+
+ /ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
+ /ajv@8.16.0:
+ resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+ uri-js: 4.4.1
+ dev: true
+
+ /ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /ansi-html-community@0.0.8:
+ resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==}
+ engines: {'0': node >= 0.8.0}
+ hasBin: true
+ dev: true
+
+ /ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+ dependencies:
+ color-convert: 2.0.1
+
+ /any-promise@1.3.0:
+ resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
+ dev: false
+
+ /anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+ dev: true
+
+ /array-flatten@1.1.1:
+ resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
+ dev: true
+
+ /asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+ dev: false
+
+ /at-least-node@1.0.0:
+ resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
+ engines: {node: '>= 4.0.0'}
+ dev: false
+
+ /axios@1.7.2:
+ resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==}
+ dependencies:
+ follow-redirects: 1.15.6
+ form-data: 4.0.0
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+ dev: false
+
+ /balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ dev: true
+
+ /batch@0.6.1:
+ resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==}
+ dev: true
+
+ /binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /body-parser@1.20.2:
+ resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ on-finished: 2.4.1
+ qs: 6.11.0
+ raw-body: 2.5.2
+ type-is: 1.6.18
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /bonjour-service@1.2.1:
+ resolution: {integrity: sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ multicast-dns: 7.2.5
+ dev: true
+
+ /brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+ dev: true
+
+ /braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+ dependencies:
+ fill-range: 7.1.1
+ dev: true
+
+ /browserslist@4.23.1:
+ resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+ dependencies:
+ caniuse-lite: 1.0.30001639
+ electron-to-chromium: 1.4.816
+ node-releases: 2.0.14
+ update-browserslist-db: 1.0.16(browserslist@4.23.1)
+
+ /btoa@1.2.1:
+ resolution: {integrity: sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==}
+ engines: {node: '>= 0.4.0'}
+ hasBin: true
+ dev: false
+
+ /buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ /bundle-name@4.1.0:
+ resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
+ engines: {node: '>=18'}
+ dependencies:
+ run-applescript: 7.0.0
+ dev: false
+
+ /bytes@3.0.0:
+ resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /bytes@3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /cache-content-type@1.0.1:
+ resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==}
+ engines: {node: '>= 6.0.0'}
+ dependencies:
+ mime-types: 2.1.35
+ ylru: 1.4.0
+ dev: false
+
+ /call-bind@1.0.7:
+ resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ set-function-length: 1.2.2
+ dev: true
+
+ /caniuse-lite@1.0.30001639:
+ resolution: {integrity: sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==}
+
+ /chalk@3.0.0:
+ resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+ dev: false
+
+ /chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+ dev: true
+
+ /chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+ dev: true
+
+ /chrome-trace-event@1.0.4:
+ resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
+ engines: {node: '>=6.0'}
+
+ /ci-info@3.9.0:
+ resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
+ engines: {node: '>=8'}
+ dev: false
+
+ /cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+ dev: true
+
+ /co@4.6.0:
+ resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
+ engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
+ dev: false
+
+ /color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+ dependencies:
+ color-name: 1.1.4
+
+ /color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ /colorette@2.0.19:
+ resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==}
+ dev: true
+
+ /combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ delayed-stream: 1.0.0
+ dev: false
+
+ /commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ /commander@7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+ dev: true
+
+ /compressible@2.0.18:
+ resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-db: 1.52.0
+ dev: true
+
+ /compression@1.7.4:
+ resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ accepts: 1.3.8
+ bytes: 3.0.0
+ compressible: 2.0.18
+ debug: 2.6.9
+ on-headers: 1.0.2
+ safe-buffer: 5.1.2
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ dev: true
+
+ /connect-history-api-fallback@2.0.0:
+ resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==}
+ engines: {node: '>=0.8'}
+ dev: true
+
+ /content-disposition@0.5.4:
+ resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ safe-buffer: 5.2.1
+
+ /content-type@1.0.5:
+ resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+ engines: {node: '>= 0.6'}
+
+ /cookie-signature@1.0.6:
+ resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
+ dev: true
+
+ /cookie@0.6.0:
+ resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /cookies@0.8.0:
+ resolution: {integrity: sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ depd: 2.0.0
+ keygrip: 1.1.0
+ dev: false
+
+ /core-util-is@1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+ dev: true
+
+ /cron-parser@4.9.0:
+ resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==}
+ engines: {node: '>=12.0.0'}
+ dependencies:
+ luxon: 3.4.4
+ dev: false
+
+ /cross-spawn@7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+ engines: {node: '>= 8'}
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+ dev: true
+
+ /csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+ dev: true
+
+ /date-format@4.0.14:
+ resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==}
+ engines: {node: '>=4.0'}
+ dev: false
+
+ /debug@2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.0.0
+ dev: true
+
+ /debug@3.1.0:
+ resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.0.0
+ dev: false
+
+ /debug@4.3.5:
+ resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.1.2
+
+ /deep-equal@1.0.1:
+ resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==}
+ dev: false
+
+ /default-browser-id@5.0.0:
+ resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==}
+ engines: {node: '>=18'}
+ dev: false
+
+ /default-browser@5.2.1:
+ resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==}
+ engines: {node: '>=18'}
+ dependencies:
+ bundle-name: 4.1.0
+ default-browser-id: 5.0.0
+ dev: false
+
+ /default-gateway@6.0.3:
+ resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==}
+ engines: {node: '>= 10'}
+ dependencies:
+ execa: 5.1.1
+ dev: true
+
+ /define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ gopd: 1.0.1
+ dev: true
+
+ /define-lazy-prop@2.0.0:
+ resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /define-lazy-prop@3.0.0:
+ resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+ dev: false
+
+ /delegates@1.0.0:
+ resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
+ dev: false
+
+ /depd@1.1.2:
+ resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
+ engines: {node: '>= 0.6'}
+
+ /depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
+ /destroy@1.2.0:
+ resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
+ /detect-node@2.1.0:
+ resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
+ dev: true
+
+ /dns-packet@5.6.1:
+ resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==}
+ engines: {node: '>=6'}
+ dependencies:
+ '@leichtgewicht/ip-codec': 2.0.5
+ dev: true
+
+ /duplexer@0.1.2:
+ resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
+ dev: true
+
+ /ee-first@1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+
+ /electron-to-chromium@1.4.816:
+ resolution: {integrity: sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==}
+
+ /emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ dev: true
+
+ /encodeurl@1.0.2:
+ resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
+ engines: {node: '>= 0.8'}
+
+ /engine.io-client@6.5.4:
+ resolution: {integrity: sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==}
+ dependencies:
+ '@socket.io/component-emitter': 3.1.2
+ debug: 4.3.5
+ engine.io-parser: 5.2.2
+ ws: 8.17.1
+ xmlhttprequest-ssl: 2.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+ dev: false
+
+ /engine.io-parser@5.2.2:
+ resolution: {integrity: sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==}
+ engines: {node: '>=10.0.0'}
+ dev: false
+
+ /enhanced-resolve@5.17.0:
+ resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.2.1
+
+ /error-inject@1.0.0:
+ resolution: {integrity: sha512-JM8N6PytDbmIYm1IhPWlo8vr3NtfjhDY/1MhD/a5b/aad/USE8a0+NsqE9d5n+GVGmuNkPQWm4bFQWv18d8tMg==}
+ dev: false
+
+ /es-define-property@1.0.0:
+ resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ get-intrinsic: 1.2.4
+ dev: true
+
+ /es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /es-module-lexer@1.5.4:
+ resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==}
+
+ /escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ /escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
+ /eslint-scope@5.1.1:
+ resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 4.3.0
+
+ /esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+ dependencies:
+ estraverse: 5.3.0
+
+ /estraverse@4.3.0:
+ resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+ engines: {node: '>=4.0'}
+
+ /estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+
+ /etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+ dev: true
+
+ /events@3.3.0:
+ resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
+ engines: {node: '>=0.8.x'}
+
+ /execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+ dev: true
+
+ /exit-hook@3.2.0:
+ resolution: {integrity: sha512-aIQN7Q04HGAV/I5BszisuHTZHXNoC23WtLkxdCLuYZMdWviRD0TMIt2bnUBi9MrHaF/hH8b3gwG9iaAUHKnJGA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dev: true
+
+ /expand-tilde@2.0.2:
+ resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ homedir-polyfill: 1.0.3
+ dev: false
+
+ /express@4.19.2:
+ resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==}
+ engines: {node: '>= 0.10.0'}
+ dependencies:
+ accepts: 1.3.8
+ array-flatten: 1.1.1
+ body-parser: 1.20.2
+ content-disposition: 0.5.4
+ content-type: 1.0.5
+ cookie: 0.6.0
+ cookie-signature: 1.0.6
+ debug: 2.6.9
+ depd: 2.0.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 1.2.0
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ merge-descriptors: 1.0.1
+ methods: 1.1.2
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ path-to-regexp: 0.1.7
+ proxy-addr: 2.0.7
+ qs: 6.11.0
+ range-parser: 1.2.1
+ safe-buffer: 5.2.1
+ send: 0.18.0
+ serve-static: 1.15.0
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ type-is: 1.6.18
+ utils-merge: 1.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ /fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ /faye-websocket@0.11.4:
+ resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==}
+ engines: {node: '>=0.8.0'}
+ dependencies:
+ websocket-driver: 0.7.4
+ dev: true
+
+ /fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+ dependencies:
+ to-regex-range: 5.0.1
+ dev: true
+
+ /finalhandler@1.2.0:
+ resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ debug: 2.6.9
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.1
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /find-file-up@2.0.1:
+ resolution: {integrity: sha512-qVdaUhYO39zmh28/JLQM5CoYN9byEOKEH4qfa8K1eNV17W0UUMJ9WgbR/hHFH+t5rcl+6RTb5UC7ck/I+uRkpQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ resolve-dir: 1.0.1
+ dev: false
+
+ /find-package-json@1.2.0:
+ resolution: {integrity: sha512-+SOGcLGYDJHtyqHd87ysBhmaeQ95oWspDKnMXBrnQ9Eq4OkLNqejgoaD8xVWu6GPa0B6roa6KinCMEMcVeqONw==}
+ dev: false
+
+ /find-pkg@2.0.0:
+ resolution: {integrity: sha512-WgZ+nKbELDa6N3i/9nrHeNznm+lY3z4YfhDDWgW+5P0pdmMj26bxaxU11ookgY3NyP9GC7HvZ9etp0jRFqGEeQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ find-file-up: 2.0.1
+ dev: false
+
+ /flatted@3.3.1:
+ resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
+ dev: false
+
+ /follow-redirects@1.15.6:
+ resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ /form-data@4.0.0:
+ resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
+ engines: {node: '>= 6'}
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
+ dev: false
+
+ /forwarded@0.2.0:
+ resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /fresh@0.5.2:
+ resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
+ engines: {node: '>= 0.6'}
+
+ /fs-extra@8.1.0:
+ resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
+ engines: {node: '>=6 <7 || >=8'}
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 4.0.0
+ universalify: 0.1.2
+ dev: false
+
+ /fs-extra@9.1.0:
+ resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ at-least-node: 1.0.0
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+ dev: false
+
+ /fs-monkey@1.0.6:
+ resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==}
+ dev: true
+
+ /fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+ dev: true
+
+ /fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ /get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+ dev: true
+
+ /get-intrinsic@1.2.4:
+ resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ has-proto: 1.0.3
+ has-symbols: 1.0.3
+ hasown: 2.0.2
+ dev: true
+
+ /get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+ dependencies:
+ is-glob: 4.0.3
+ dev: true
+
+ /glob-to-regexp@0.4.1:
+ resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+
+ /glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+ dev: true
+
+ /global-modules@1.0.0:
+ resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ global-prefix: 1.0.2
+ is-windows: 1.0.2
+ resolve-dir: 1.0.1
+ dev: false
+
+ /global-prefix@1.0.2:
+ resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ expand-tilde: 2.0.2
+ homedir-polyfill: 1.0.3
+ ini: 1.3.8
+ is-windows: 1.0.2
+ which: 1.3.1
+ dev: false
+
+ /gopd@1.0.1:
+ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+ dependencies:
+ get-intrinsic: 1.2.4
+ dev: true
+
+ /graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ /gzip-size@6.0.0:
+ resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ duplexer: 0.1.2
+ dev: true
+
+ /handle-thing@2.0.1:
+ resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==}
+ dev: true
+
+ /has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ /has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+ dependencies:
+ es-define-property: 1.0.0
+ dev: true
+
+ /has-proto@1.0.3:
+ resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /has-symbols@1.0.3:
+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+ engines: {node: '>= 0.4'}
+
+ /has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-symbols: 1.0.3
+ dev: false
+
+ /hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ function-bind: 1.1.2
+
+ /homedir-polyfill@1.0.3:
+ resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ parse-passwd: 1.0.0
+ dev: false
+
+ /hpack.js@2.1.6:
+ resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==}
+ dependencies:
+ inherits: 2.0.4
+ obuf: 1.1.2
+ readable-stream: 2.3.8
+ wbuf: 1.7.3
+ dev: true
+
+ /html-entities@2.5.2:
+ resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==}
+ dev: true
+
+ /http-assert@1.5.0:
+ resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ deep-equal: 1.0.1
+ http-errors: 1.8.1
+ dev: false
+
+ /http-deceiver@1.2.7:
+ resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==}
+ dev: true
+
+ /http-errors@1.6.3:
+ resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ depd: 1.1.2
+ inherits: 2.0.3
+ setprototypeof: 1.1.0
+ statuses: 1.5.0
+ dev: true
+
+ /http-errors@1.8.1:
+ resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ depd: 1.1.2
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 1.5.0
+ toidentifier: 1.0.1
+ dev: false
+
+ /http-errors@2.0.0:
+ resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ toidentifier: 1.0.1
+ dev: true
+
+ /http-parser-js@0.5.8:
+ resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==}
+ dev: true
+
+ /http-proxy-middleware@2.0.6(@types/express@4.17.21):
+ resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@types/express': ^4.17.13
+ peerDependenciesMeta:
+ '@types/express':
+ optional: true
+ dependencies:
+ '@types/express': 4.17.21
+ '@types/http-proxy': 1.17.14
+ http-proxy: 1.18.1
+ is-glob: 4.0.3
+ is-plain-obj: 3.0.0
+ micromatch: 4.0.7
+ transitivePeerDependencies:
+ - debug
+ dev: true
+
+ /http-proxy@1.18.1:
+ resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ eventemitter3: 4.0.7
+ follow-redirects: 1.15.6
+ requires-port: 1.0.0
+ transitivePeerDependencies:
+ - debug
+ dev: true
+
+ /human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+ dev: true
+
+ /iconv-lite@0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ safer-buffer: 2.1.2
+ dev: true
+
+ /inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+ dev: true
+
+ /inherits@2.0.3:
+ resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
+ dev: true
+
+ /inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ /ini@1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+ dev: false
+
+ /interpret@3.1.1:
+ resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==}
+ engines: {node: '>=10.13.0'}
+ dev: true
+
+ /ipaddr.js@1.9.1:
+ resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
+ engines: {node: '>= 0.10'}
+ dev: true
+
+ /ipaddr.js@2.2.0:
+ resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==}
+ engines: {node: '>= 10'}
+ dev: true
+
+ /is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+ dependencies:
+ binary-extensions: 2.3.0
+ dev: true
+
+ /is-ci@3.0.1:
+ resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==}
+ hasBin: true
+ dependencies:
+ ci-info: 3.9.0
+ dev: false
+
+ /is-core-module@2.14.0:
+ resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ hasown: 2.0.2
+
+ /is-docker@2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+ dev: true
+
+ /is-docker@3.0.0:
+ resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ hasBin: true
+ dev: false
+
+ /is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-generator-function@1.0.10:
+ resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.2
+ dev: false
+
+ /is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-extglob: 2.1.1
+ dev: true
+
+ /is-inside-container@1.0.0:
+ resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
+ engines: {node: '>=14.16'}
+ hasBin: true
+ dependencies:
+ is-docker: 3.0.0
+ dev: false
+
+ /is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+ dev: true
+
+ /is-plain-obj@3.0.0:
+ resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-windows@1.0.2:
+ resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /is-wsl@2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
+ dependencies:
+ is-docker: 2.2.1
+ dev: true
+
+ /is-wsl@3.1.0:
+ resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
+ engines: {node: '>=16'}
+ dependencies:
+ is-inside-container: 1.0.0
+ dev: false
+
+ /isarray@1.0.0:
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+ dev: true
+
+ /isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ /isomorphic-ws@5.0.0(ws@8.17.1):
+ resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==}
+ peerDependencies:
+ ws: '*'
+ dependencies:
+ ws: 8.17.1
+ dev: false
+
+ /jest-worker@27.5.1:
+ resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
+ engines: {node: '>= 10.13.0'}
+ dependencies:
+ '@types/node': 20.14.9
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
+ /jose@5.6.2:
+ resolution: {integrity: sha512-F1t1/WZJ4JdmCE/XoMYw1dPOW5g8JF0xGm6Ox2fwaCAPlCzt+4Bh0EWP59iQuZNHHauDkCdjx+kCZSh5z/PGow==}
+ dev: false
+
+ /js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+ dev: false
+
+ /json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+ /json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+ /json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+ dev: true
+
+ /jsonfile@4.0.0:
+ resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
+ optionalDependencies:
+ graceful-fs: 4.2.11
+ dev: false
+
+ /jsonfile@6.1.0:
+ resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+ dev: false
+
+ /keygrip@1.1.0:
+ resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ tsscmp: 1.0.6
+ dev: false
+
+ /koa-compose@3.2.1:
+ resolution: {integrity: sha512-8gen2cvKHIZ35eDEik5WOo8zbVp9t4cP8p4hW4uE55waxolLRexKKrqfCpwhGVppnB40jWeF8bZeTVg99eZgPw==}
+ dependencies:
+ any-promise: 1.3.0
+ dev: false
+
+ /koa-compose@4.1.0:
+ resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==}
+ dev: false
+
+ /koa-convert@1.2.0:
+ resolution: {integrity: sha512-K9XqjmEDStGX09v3oxR7t5uPRy0jqJdvodHa6wxWTHrTfDq0WUNnYTOOUZN6g8OM8oZQXprQASbiIXG2Ez8ehA==}
+ engines: {node: '>= 4'}
+ dependencies:
+ co: 4.6.0
+ koa-compose: 3.2.1
+ dev: false
+
+ /koa@2.11.0:
+ resolution: {integrity: sha512-EpR9dElBTDlaDgyhDMiLkXrPwp6ZqgAIBvhhmxQ9XN4TFgW+gEz6tkcsNI6BnUbUftrKDjVFj4lW2/J2aNBMMA==}
+ engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4}
+ dependencies:
+ accepts: 1.3.8
+ cache-content-type: 1.0.1
+ content-disposition: 0.5.4
+ content-type: 1.0.5
+ cookies: 0.8.0
+ debug: 3.1.0
+ delegates: 1.0.0
+ depd: 1.1.2
+ destroy: 1.2.0
+ encodeurl: 1.0.2
+ error-inject: 1.0.0
+ escape-html: 1.0.3
+ fresh: 0.5.2
+ http-assert: 1.5.0
+ http-errors: 1.8.1
+ is-generator-function: 1.0.10
+ koa-compose: 4.1.0
+ koa-convert: 1.2.0
+ on-finished: 2.4.1
+ only: 0.0.2
+ parseurl: 1.3.3
+ statuses: 1.5.0
+ type-is: 1.6.18
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /launch-editor@2.8.0:
+ resolution: {integrity: sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==}
+ dependencies:
+ picocolors: 1.0.1
+ shell-quote: 1.8.1
+ dev: true
+
+ /loader-runner@4.3.0:
+ resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
+ engines: {node: '>=6.11.5'}
+
+ /lodash.clonedeepwith@4.5.0:
+ resolution: {integrity: sha512-QRBRSxhbtsX1nc0baxSkkK5WlVTTm/s48DSukcGcWZwIyI8Zz+lB+kFiELJXtzfH4Aj6kMWQ1VWW4U5uUDgZMA==}
+ dev: false
+
+ /lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+ dev: true
+
+ /log4js@6.9.1:
+ resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==}
+ engines: {node: '>=8.0'}
+ dependencies:
+ date-format: 4.0.14
+ debug: 4.3.5
+ flatted: 3.3.1
+ rfdc: 1.4.1
+ streamroller: 3.1.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /long-timeout@0.1.1:
+ resolution: {integrity: sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==}
+ dev: false
+
+ /loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+ dependencies:
+ js-tokens: 4.0.0
+ dev: false
+
+ /luxon@3.4.4:
+ resolution: {integrity: sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /media-typer@0.3.0:
+ resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
+ engines: {node: '>= 0.6'}
+
+ /memfs@3.5.3:
+ resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==}
+ engines: {node: '>= 4.0.0'}
+ dependencies:
+ fs-monkey: 1.0.6
+ dev: true
+
+ /merge-descriptors@1.0.1:
+ resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
+ dev: true
+
+ /merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+ /methods@1.1.2:
+ resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /micromatch@4.0.7:
+ resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==}
+ engines: {node: '>=8.6'}
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+ dev: true
+
+ /mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ /mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-db: 1.52.0
+
+ /mime@1.6.0:
+ resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dev: true
+
+ /mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /minimalistic-assert@1.0.1:
+ resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
+ dev: true
+
+ /minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+ dependencies:
+ brace-expansion: 1.1.11
+ dev: true
+
+ /mrmime@1.0.1:
+ resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /ms@2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+
+ /ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ /ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ dev: true
+
+ /multicast-dns@7.2.5:
+ resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==}
+ hasBin: true
+ dependencies:
+ dns-packet: 5.6.1
+ thunky: 1.1.0
+ dev: true
+
+ /negotiator@0.6.3:
+ resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
+ engines: {node: '>= 0.6'}
+
+ /neo-async@2.6.2:
+ resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+
+ /node-forge@1.3.1:
+ resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==}
+ engines: {node: '>= 6.13.0'}
+ dev: true
+
+ /node-persist@4.0.1:
+ resolution: {integrity: sha512-QtRjwAlcOQChQpfG6odtEhxYmA3nS5XYr+bx9JRjwahl1TM3sm9J3CCn51/MI0eoHRb2DrkEsCOFo8sq8jG5sQ==}
+ engines: {node: '>=10.12.0'}
+ dev: false
+
+ /node-releases@2.0.14:
+ resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
+
+ /node-schedule@2.1.1:
+ resolution: {integrity: sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==}
+ engines: {node: '>=6'}
+ dependencies:
+ cron-parser: 4.9.0
+ long-timeout: 0.1.1
+ sorted-array-functions: 1.3.0
+ dev: false
+
+ /normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+ dependencies:
+ path-key: 3.1.1
+ dev: true
+
+ /object-inspect@1.13.2:
+ resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /obuf@1.1.2:
+ resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==}
+ dev: true
+
+ /on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ ee-first: 1.1.1
+
+ /on-headers@1.0.2:
+ resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+ dependencies:
+ wrappy: 1.0.2
+ dev: true
+
+ /onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+ dependencies:
+ mimic-fn: 2.1.0
+ dev: true
+
+ /only@0.0.2:
+ resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==}
+ dev: false
+
+ /open@10.1.0:
+ resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==}
+ engines: {node: '>=18'}
+ dependencies:
+ default-browser: 5.2.1
+ define-lazy-prop: 3.0.0
+ is-inside-container: 1.0.0
+ is-wsl: 3.1.0
+ dev: false
+
+ /open@8.4.2:
+ resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ define-lazy-prop: 2.0.0
+ is-docker: 2.2.1
+ is-wsl: 2.2.0
+ dev: true
+
+ /opener@1.5.2:
+ resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==}
+ hasBin: true
+ dev: true
+
+ /p-retry@4.6.2:
+ resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@types/retry': 0.12.0
+ retry: 0.13.1
+ dev: true
+
+ /parse-passwd@1.0.0:
+ resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+
+ /path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ /path-to-regexp@0.1.7:
+ resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
+ dev: true
+
+ /picocolors@1.0.1:
+ resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
+
+ /picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+ dev: true
+
+ /prettier@3.3.2:
+ resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==}
+ engines: {node: '>=14'}
+ hasBin: true
+ dev: true
+
+ /process-nextick-args@2.0.1:
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+ dev: true
+
+ /proxy-addr@2.0.7:
+ resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ forwarded: 0.2.0
+ ipaddr.js: 1.9.1
+ dev: true
+
+ /proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+ dev: false
+
+ /punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
+ /qs@6.11.0:
+ resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
+ engines: {node: '>=0.6'}
+ dependencies:
+ side-channel: 1.0.6
+ dev: true
+
+ /rambda@9.2.1:
+ resolution: {integrity: sha512-6Dp+QQVQuAuhwBlbIvL2FjJVHCKF29W+n9ca/BMTVDqpj+Q7KKqUh7UAINEna8aaB2/oRvPuL5hViCTQARa70Q==}
+ dev: false
+
+ /randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+ dependencies:
+ safe-buffer: 5.2.1
+
+ /range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /raw-body@2.5.2:
+ resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ unpipe: 1.0.0
+ dev: true
+
+ /react-dom@18.3.1(react@18.3.1):
+ resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
+ peerDependencies:
+ react: ^18.3.1
+ dependencies:
+ loose-envify: 1.4.0
+ react: 18.3.1
+ scheduler: 0.23.2
+ dev: false
+
+ /react-refresh@0.14.2:
+ resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /react@18.3.1:
+ resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ loose-envify: 1.4.0
+ dev: false
+
+ /readable-stream@2.3.8:
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+ dev: true
+
+ /readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+ dev: true
+
+ /readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+ dependencies:
+ picomatch: 2.3.1
+ dev: true
+
+ /rechoir@0.8.0:
+ resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==}
+ engines: {node: '>= 10.13.0'}
+ dependencies:
+ resolve: 1.22.8
+ dev: true
+
+ /require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /requires-port@1.0.0:
+ resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
+ dev: true
+
+ /resolve-dir@1.0.1:
+ resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ expand-tilde: 2.0.2
+ global-modules: 1.0.0
+ dev: false
+
+ /resolve@1.22.8:
+ resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
+ hasBin: true
+ dependencies:
+ is-core-module: 2.14.0
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ /retry@0.13.1:
+ resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
+ engines: {node: '>= 4'}
+ dev: true
+
+ /rfdc@1.4.1:
+ resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+ dev: false
+
+ /rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
+ hasBin: true
+ dependencies:
+ glob: 7.2.3
+ dev: true
+
+ /run-applescript@7.0.0:
+ resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==}
+ engines: {node: '>=18'}
+ dev: false
+
+ /safe-buffer@5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+ dev: true
+
+ /safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ /safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+ dev: true
+
+ /scheduler@0.23.2:
+ resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+ dependencies:
+ loose-envify: 1.4.0
+ dev: false
+
+ /schema-utils@3.3.0:
+ resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
+ engines: {node: '>= 10.13.0'}
+ dependencies:
+ '@types/json-schema': 7.0.15
+ ajv: 6.12.6
+ ajv-keywords: 3.5.2(ajv@6.12.6)
+
+ /schema-utils@4.2.0:
+ resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==}
+ engines: {node: '>= 12.13.0'}
+ dependencies:
+ '@types/json-schema': 7.0.15
+ ajv: 8.16.0
+ ajv-formats: 2.1.1(ajv@8.16.0)
+ ajv-keywords: 5.1.0(ajv@8.16.0)
+ dev: true
+
+ /select-hose@2.0.0:
+ resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==}
+ dev: true
+
+ /selfsigned@2.4.1:
+ resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ '@types/node-forge': 1.3.11
+ node-forge: 1.3.1
+ dev: true
+
+ /semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+ dev: true
+
+ /send@0.18.0:
+ resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ mime: 1.6.0
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /serialize-javascript@6.0.2:
+ resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+ dependencies:
+ randombytes: 2.1.0
+
+ /serve-index@1.9.1:
+ resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ accepts: 1.3.8
+ batch: 0.6.1
+ debug: 2.6.9
+ escape-html: 1.0.3
+ http-errors: 1.6.3
+ mime-types: 2.1.35
+ parseurl: 1.3.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /serve-static@1.15.0:
+ resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 0.18.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.2
+ dev: true
+
+ /setprototypeof@1.1.0:
+ resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==}
+ dev: true
+
+ /setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
+ /shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+ dependencies:
+ shebang-regex: 3.0.0
+ dev: true
+
+ /shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /shell-quote@1.8.1:
+ resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==}
+ dev: true
+
+ /side-channel@1.0.6:
+ resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+ object-inspect: 1.13.2
+ dev: true
+
+ /signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+ dev: true
+
+ /sirv@1.0.19:
+ resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==}
+ engines: {node: '>= 10'}
+ dependencies:
+ '@polka/url': 1.0.0-next.25
+ mrmime: 1.0.1
+ totalist: 1.1.0
+ dev: true
+
+ /socket.io-client@4.7.5:
+ resolution: {integrity: sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==}
+ engines: {node: '>=10.0.0'}
+ dependencies:
+ '@socket.io/component-emitter': 3.1.2
+ debug: 4.3.5
+ engine.io-client: 6.5.4
+ socket.io-parser: 4.2.4
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+ dev: false
+
+ /socket.io-parser@4.2.4:
+ resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==}
+ engines: {node: '>=10.0.0'}
+ dependencies:
+ '@socket.io/component-emitter': 3.1.2
+ debug: 4.3.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /sockjs@0.3.24:
+ resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==}
+ dependencies:
+ faye-websocket: 0.11.4
+ uuid: 8.3.2
+ websocket-driver: 0.7.4
+ dev: true
+
+ /sorted-array-functions@1.3.0:
+ resolution: {integrity: sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==}
+ dev: false
+
+ /source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ /source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ /spdy-transport@3.0.0:
+ resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==}
+ dependencies:
+ debug: 4.3.5
+ detect-node: 2.1.0
+ hpack.js: 2.1.6
+ obuf: 1.1.2
+ readable-stream: 3.6.2
+ wbuf: 1.7.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /spdy@4.0.2:
+ resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ debug: 4.3.5
+ handle-thing: 2.0.1
+ http-deceiver: 1.2.7
+ select-hose: 2.0.0
+ spdy-transport: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /statuses@1.5.0:
+ resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
+ engines: {node: '>= 0.6'}
+
+ /statuses@2.0.1:
+ resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /streamroller@3.1.5:
+ resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==}
+ engines: {node: '>=8.0'}
+ dependencies:
+ date-format: 4.0.14
+ debug: 4.3.5
+ fs-extra: 8.1.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+ dev: true
+
+ /string_decoder@1.1.1:
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+ dependencies:
+ safe-buffer: 5.1.2
+ dev: true
+
+ /string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: true
+
+ /strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-regex: 5.0.1
+ dev: true
+
+ /strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+ dependencies:
+ has-flag: 4.0.0
+
+ /supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ has-flag: 4.0.0
+
+ /supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ /tapable@2.2.1:
+ resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
+ engines: {node: '>=6'}
+
+ /terser-webpack-plugin@5.3.10(webpack@5.92.1):
+ resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==}
+ engines: {node: '>= 10.13.0'}
+ peerDependencies:
+ '@swc/core': '*'
+ esbuild: '*'
+ uglify-js: '*'
+ webpack: ^5.1.0
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ esbuild:
+ optional: true
+ uglify-js:
+ optional: true
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.25
+ jest-worker: 27.5.1
+ schema-utils: 3.3.0
+ serialize-javascript: 6.0.2
+ terser: 5.31.1
+ webpack: 5.92.1
+
+ /terser@5.31.1:
+ resolution: {integrity: sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ '@jridgewell/source-map': 0.3.6
+ acorn: 8.12.0
+ commander: 2.20.3
+ source-map-support: 0.5.21
+
+ /thunky@1.1.0:
+ resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==}
+ dev: true
+
+ /to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+ dependencies:
+ is-number: 7.0.0
+ dev: true
+
+ /toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
+ /totalist@1.1.0:
+ resolution: {integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /tslib@2.6.3:
+ resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
+ dev: false
+
+ /tsscmp@1.0.6:
+ resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==}
+ engines: {node: '>=0.6.x'}
+ dev: false
+
+ /type-is@1.6.18:
+ resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ media-typer: 0.3.0
+ mime-types: 2.1.35
+
+ /typescript@5.5.3:
+ resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+ dev: false
+
+ /undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ /universalify@0.1.2:
+ resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
+ engines: {node: '>= 4.0.0'}
+ dev: false
+
+ /universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+ dev: false
+
+ /unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /upath@2.0.1:
+ resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /update-browserslist-db@1.0.16(browserslist@4.23.1):
+ resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+ dependencies:
+ browserslist: 4.23.1
+ escalade: 3.1.2
+ picocolors: 1.0.1
+
+ /uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ dependencies:
+ punycode: 2.3.1
+
+ /util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+ dev: true
+
+ /utils-merge@1.0.1:
+ resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
+ engines: {node: '>= 0.4.0'}
+ dev: true
+
+ /uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ /vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+
+ /watchpack@2.4.1:
+ resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+
+ /wbuf@1.7.3:
+ resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==}
+ dependencies:
+ minimalistic-assert: 1.0.1
+ dev: true
+
+ /webpack-bundle-analyzer@4.6.1:
+ resolution: {integrity: sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw==}
+ engines: {node: '>= 10.13.0'}
+ hasBin: true
+ dependencies:
+ acorn: 8.12.0
+ acorn-walk: 8.3.3
+ chalk: 4.1.2
+ commander: 7.2.0
+ gzip-size: 6.0.0
+ lodash: 4.17.21
+ opener: 1.5.2
+ sirv: 1.0.19
+ ws: 7.5.10
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+ dev: true
+
+ /webpack-dev-middleware@5.3.4(webpack@5.92.1):
+ resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==}
+ engines: {node: '>= 12.13.0'}
+ peerDependencies:
+ webpack: ^4.0.0 || ^5.0.0
+ dependencies:
+ colorette: 2.0.19
+ memfs: 3.5.3
+ mime-types: 2.1.35
+ range-parser: 1.2.1
+ schema-utils: 4.2.0
+ webpack: 5.92.1
+ dev: true
+
+ /webpack-dev-middleware@6.1.2(webpack@5.92.1):
+ resolution: {integrity: sha512-Wu+EHmX326YPYUpQLKmKbTyZZJIB8/n6R09pTmB03kJmnMsVPTo9COzHZFr01txwaCAuZvfBJE4ZCHRcKs5JaQ==}
+ engines: {node: '>= 14.15.0'}
+ peerDependencies:
+ webpack: ^5.0.0
+ peerDependenciesMeta:
+ webpack:
+ optional: true
+ dependencies:
+ colorette: 2.0.19
+ memfs: 3.5.3
+ mime-types: 2.1.35
+ range-parser: 1.2.1
+ schema-utils: 4.2.0
+ webpack: 5.92.1
+ dev: true
+
+ /webpack-dev-server@4.13.1(webpack@5.92.1):
+ resolution: {integrity: sha512-5tWg00bnWbYgkN+pd5yISQKDejRBYGEw15RaEEslH+zdbNDxxaZvEAO2WulaSaFKb5n3YG8JXsGaDsut1D0xdA==}
+ engines: {node: '>= 12.13.0'}
+ hasBin: true
+ peerDependencies:
+ webpack: ^4.37.0 || ^5.0.0
+ webpack-cli: '*'
+ peerDependenciesMeta:
+ webpack:
+ optional: true
+ webpack-cli:
+ optional: true
+ dependencies:
+ '@types/bonjour': 3.5.13
+ '@types/connect-history-api-fallback': 1.5.4
+ '@types/express': 4.17.21
+ '@types/serve-index': 1.9.4
+ '@types/serve-static': 1.15.7
+ '@types/sockjs': 0.3.36
+ '@types/ws': 8.5.10
+ ansi-html-community: 0.0.8
+ bonjour-service: 1.2.1
+ chokidar: 3.5.3
+ colorette: 2.0.19
+ compression: 1.7.4
+ connect-history-api-fallback: 2.0.0
+ default-gateway: 6.0.3
+ express: 4.19.2
+ graceful-fs: 4.2.11
+ html-entities: 2.5.2
+ http-proxy-middleware: 2.0.6(@types/express@4.17.21)
+ ipaddr.js: 2.2.0
+ launch-editor: 2.8.0
+ open: 8.4.2
+ p-retry: 4.6.2
+ rimraf: 3.0.2
+ schema-utils: 4.2.0
+ selfsigned: 2.4.1
+ serve-index: 1.9.1
+ sockjs: 0.3.24
+ spdy: 4.0.2
+ webpack: 5.92.1
+ webpack-dev-middleware: 5.3.4(webpack@5.92.1)
+ ws: 8.17.1
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+ dev: true
+
+ /webpack-sources@3.2.3:
+ resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
+ engines: {node: '>=10.13.0'}
+
+ /webpack@5.92.1:
+ resolution: {integrity: sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+ peerDependencies:
+ webpack-cli: '*'
+ peerDependenciesMeta:
+ webpack-cli:
+ optional: true
+ dependencies:
+ '@types/eslint-scope': 3.7.7
+ '@types/estree': 1.0.5
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/wasm-edit': 1.12.1
+ '@webassemblyjs/wasm-parser': 1.12.1
+ acorn: 8.12.0
+ acorn-import-attributes: 1.9.5(acorn@8.12.0)
+ browserslist: 4.23.1
+ chrome-trace-event: 1.0.4
+ enhanced-resolve: 5.17.0
+ es-module-lexer: 1.5.4
+ eslint-scope: 5.1.1
+ events: 3.3.0
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+ json-parse-even-better-errors: 2.3.1
+ loader-runner: 4.3.0
+ mime-types: 2.1.35
+ neo-async: 2.6.2
+ schema-utils: 3.3.0
+ tapable: 2.2.1
+ terser-webpack-plugin: 5.3.10(webpack@5.92.1)
+ watchpack: 2.4.1
+ webpack-sources: 3.2.3
+ transitivePeerDependencies:
+ - '@swc/core'
+ - esbuild
+ - uglify-js
+
+ /websocket-driver@0.7.4:
+ resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==}
+ engines: {node: '>=0.8.0'}
+ dependencies:
+ http-parser-js: 0.5.8
+ safe-buffer: 5.2.1
+ websocket-extensions: 0.1.4
+ dev: true
+
+ /websocket-extensions@0.1.4:
+ resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==}
+ engines: {node: '>=0.8.0'}
+ dev: true
+
+ /which@1.3.1:
+ resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+ dev: false
+
+ /which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+ dev: true
+
+ /wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ dev: true
+
+ /wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ dev: true
+
+ /ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ dev: true
+
+ /ws@8.17.1:
+ resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ /ws@8.8.1:
+ resolution: {integrity: sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ dev: true
+
+ /xmlhttprequest-ssl@2.0.0:
+ resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==}
+ engines: {node: '>=0.4.0'}
+ dev: false
+
+ /y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /yargs@17.6.2:
+ resolution: {integrity: sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==}
+ engines: {node: '>=12'}
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+ dev: true
+
+ /ylru@1.4.0:
+ resolution: {integrity: sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==}
+ engines: {node: '>= 4.0.0'}
+ dev: false
+
+ /zephyr-agent@0.0.13:
+ resolution: {integrity: sha512-MxSthGw3OVs80dG6JWeauIGdvMLpfpS2DxlfWVdQjqMnvnU/2OToOxGX+f6qdfpnu1bu+jd/QetPjmwBHxYLxg==}
+ dependencies:
+ is-ci: 3.0.1
+ jose: 5.6.2
+ open: 10.1.0
+ socket.io-client: 4.7.5
+ tslib: 2.6.3
+ uuid: 8.3.2
+ zephyr-edge-contract: 0.0.13
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+ dev: false
+
+ /zephyr-edge-contract@0.0.13:
+ resolution: {integrity: sha512-RvYPYjQnC54GDTxG/dvMvjYfQcjmCxA/ugqs3/W1L280o3z3gxiFyM0Wo+4Zca3V/GCo03isvbs0KGJwj2VD8Q==}
+ dependencies:
+ debug: 4.3.5
+ node-persist: 4.0.1
+ tslib: 2.6.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /zephyr-webpack-plugin@0.0.13:
+ resolution: {integrity: sha512-LEFrj8gNzAzrCKSomSwLWMqFqpVgOVxJVmMwzQy3cZ4yAQeNgpjLAm5BOccE3MoewPWqdgzTCjEbqdIK+TyMFQ==}
+ dependencies:
+ '@module-federation/automatic-vendor-federation': 1.2.1(webpack@5.92.1)
+ is-ci: 3.0.1
+ tslib: 2.6.3
+ webpack: 5.92.1
+ zephyr-agent: 0.0.13
+ zephyr-edge-contract: 0.0.13
+ transitivePeerDependencies:
+ - '@swc/core'
+ - bufferutil
+ - esbuild
+ - supports-color
+ - uglify-js
+ - utf-8-validate
+ - webpack-cli
+ dev: false
diff --git a/rspack_hmr/runhost/rspack.config.js b/rspack_hmr/runhost/rspack.config.js
new file mode 100644
index 0000000..70e9512
--- /dev/null
+++ b/rspack_hmr/runhost/rspack.config.js
@@ -0,0 +1,109 @@
+const rspack = require('@rspack/core');
+const refreshPlugin = require('@rspack/plugin-react-refresh');
+const { withZephyr } = require("zephyr-webpack-plugin")
+const isDev = process.env.NODE_ENV === 'development';
+
+const path = require('path');
+const deps = require('./package.json').dependencies;
+console.log({ deps });
+const { ModuleFederationPlugin } = require('@module-federation/enhanced/rspack');
+
+const name = 'runhost';
+const name1 = name + '1';
+/**
+ * @type {import('@rspack/cli').Configuration}
+ */
+module.exports = {
+ //context: __dirname,
+ entry: {
+ main: './src/index.tsx',
+ },
+ resolve: {
+ extensions: ['...', '.ts', '.tsx', '.jsx'],
+ },
+ devServer: {
+ port: 3003,
+ hot: true,
+ static: {
+ directory: path.join(__dirname, 'build'),
+ },
+ liveReload: false,
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, PATCH, OPTIONS',
+ 'Access-Control-Allow-Headers': 'X-Requested-With, content-type, Authorization',
+ },
+ },
+
+ devtool: 'source-map',
+ optimization: { minimize: false },
+ output: {
+ path: __dirname + '/dist',
+ uniqueName: name1,
+ publicPath: 'http://localhost:3003/',
+ filename: '[name].js',
+ },
+ watch: true,
+ module: {
+ rules: [
+ {
+ test: /\.svg$/,
+ type: 'asset',
+ },
+ {
+ test: /\.(jsx?|tsx?)$/,
+
+ exclude: /(node_modules|\.webpack)/,
+ use: [
+ {
+ loader: 'builtin:swc-loader',
+ options: {
+ sourceMap: true,
+ jsc: {
+ parser: {
+ syntax: 'typescript',
+ tsx: true,
+ },
+ transform: {
+ react: {
+ runtime: 'automatic',
+ development: isDev,
+ refresh: isDev,
+ },
+ },
+ },
+ env: {
+ targets: ['chrome >= 87', 'edge >= 88', 'firefox >= 78', 'safari >= 14'],
+ },
+ },
+ },
+ ],
+ },
+ ],
+ },
+ plugins: [
+ new rspack.DefinePlugin({
+ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
+ }),
+ new rspack.ProgressPlugin({}),
+
+ isDev && new rspack.HotModuleReplacementPlugin(),
+ new rspack.HtmlRspackPlugin({
+ template: './index.html',
+ excludedChunks: [name],
+ filename: 'index.html',
+ inject: true,
+ publicPath: '/',
+ }),
+ new ModuleFederationPlugin({
+ name: name,
+ filename: 'remoteEntry.js',
+ // remotes: {
+ // app_02: "app_02@http://localhost:3001/mf-manifest.json",
+ // },
+
+ shared: ['react', 'react-dom'],
+ }),
+ isDev ? new refreshPlugin() : null,
+ ].filter(Boolean),
+};
diff --git a/rspack_hmr/runhost/src/App.css b/rspack_hmr/runhost/src/App.css
new file mode 100644
index 0000000..2c5e2ef
--- /dev/null
+++ b/rspack_hmr/runhost/src/App.css
@@ -0,0 +1,41 @@
+#root {
+ max-width: 1280px;
+ margin: 0 auto;
+ padding: 2rem;
+ text-align: center;
+}
+
+.logo {
+ height: 6em;
+ padding: 1.5em;
+ will-change: filter;
+}
+.logo:hover {
+ filter: drop-shadow(0 0 2em #646cffaa);
+}
+.logo.react:hover {
+ filter: drop-shadow(0 0 2em #61dafbaa);
+}
+
+@keyframes logo-spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ a:nth-of-type(2) .logo {
+ animation: logo-spin infinite 20s linear;
+ }
+}
+
+.card {
+ padding: 2em;
+}
+
+.read-the-docs {
+ color: #888;
+}
diff --git a/rspack_hmr/runhost/src/App.tsx b/rspack_hmr/runhost/src/App.tsx
new file mode 100644
index 0000000..c768602
--- /dev/null
+++ b/rspack_hmr/runhost/src/App.tsx
@@ -0,0 +1,30 @@
+import './App.css';
+import { lazy, Suspense } from 'react';
+import { loadRemote } from '@module-federation/runtime';
+//@ts-ignore
+const Hello = lazy(() =>
+ loadRemote('a2/Hello').then(module => ({ default: module.Hello })),
+);
+function App() {
+ return (
+
+
+
Runhost :)
+
+ This is currently in the runhost
app.{' '}
+
+ Directory name: runhost
+ package.json name: @rspack-hmr/rspack-runhost
+ {' '}
+
We are taking the
'Hello'
module from App_02
+
+
+
+
+
+
+
+ );
+}
+
+export default App;
diff --git a/rspack_hmr/runhost/src/bootstrap.tsx b/rspack_hmr/runhost/src/bootstrap.tsx
new file mode 100644
index 0000000..faffd42
--- /dev/null
+++ b/rspack_hmr/runhost/src/bootstrap.tsx
@@ -0,0 +1,83 @@
+import React from 'react';
+import ReactDOM from 'react-dom/client';
+import App from './App.tsx';
+import './index.css';
+import { FederationRuntimePlugin, init, loadRemote } from '@module-federation/enhanced/runtime';
+
+const runtimePlugin: () => FederationRuntimePlugin = function () {
+ return {
+ name: 'my-runtime-plugin',
+ beforeInit(args) {
+ console.log('beforeInit: ', args);
+ return args;
+ },
+ beforeRequest(args) {
+ console.log('beforeRequest: ', args);
+ return args;
+ },
+
+ // loadRemoteSnapshot(args) {
+ // console.log("loadRemoteSnapshot: ", args);
+ // if (args.manifestJson && (args.manifestJson.metaData as any).publicPath.includes("placeholder")) {
+ // (args.manifestJson.metaData as any).publicPath = (args.manifestJson.metaData as any).publicPath.replace(
+ // "placeholder",
+ // args.manifestUrl?.split("/")[2].split(":")[0],
+ // );
+ // }
+ // if ((args.remoteSnapshot as any).publicPath.includes("placeholder")) {
+ // (args.remoteSnapshot as any).publicPath = (args.remoteSnapshot as any).publicPath.replace(
+ // "placeholder",
+ // args.manifestUrl?.split("/")[2].split(":")[0],
+ // );
+ // }
+ // return args;
+ //},
+
+ afterResolve(args) {
+ console.log('afterResolve', args);
+ return args;
+ },
+ onLoad(args) {
+ console.log('onLoad: ', args);
+ return args;
+ },
+ async loadShare(args) {
+ console.log('loadShare:', args);
+ return args;
+ },
+ async beforeLoadShare(args) {
+ console.log('beforeloadShare:', args);
+ return args;
+ },
+ // async initContainer(args) {
+ // console.log("initContainer: ", args);
+ // args.origin.snapshotHandler.manifestCache.forEach((manifest, index) => {
+ // console.log(args);
+ // manifest.metaData.publicPath = manifest.metaData.publicPath.replace(
+ // "placeholder",
+ // args.remoteInfo.entry.split("/")[2].split(":")[0],
+ // );
+ // console.log("manifest: ", manifest);
+ // });
+ // console.log("args after", args);
+ //return args;
+ //},
+ };
+};
+
+export async function renderApp() {
+ init({
+ name: 'runhost',
+ remotes: [{ name: '@app_02', entry: 'http://localhost:3001/mf-manifest.json', alias: 'a2' }],
+ plugins: [runtimePlugin()],
+ });
+
+ loadRemote('a2/pi').then(module => {
+ console.log('results from pi in app02: ', (module as any).default());
+ });
+ ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
+
+
+ ,
+ );
+}
diff --git a/rspack_hmr/runhost/src/index.css b/rspack_hmr/runhost/src/index.css
new file mode 100644
index 0000000..917888c
--- /dev/null
+++ b/rspack_hmr/runhost/src/index.css
@@ -0,0 +1,70 @@
+:root {
+ font-family: Inter, Avenir, Helvetica, Arial, sans-serif;
+ font-size: 16px;
+ line-height: 24px;
+ font-weight: 400;
+
+ color-scheme: light dark;
+ color: rgba(255, 255, 255, 0.87);
+ background-color: #242424;
+
+ font-synthesis: none;
+ text-rendering: optimizeLegibility;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-text-size-adjust: 100%;
+}
+
+a {
+ font-weight: 500;
+ color: #646cff;
+ text-decoration: inherit;
+}
+a:hover {
+ color: #535bf2;
+}
+
+body {
+ margin: 0;
+ display: flex;
+ place-items: center;
+ min-width: 320px;
+ min-height: 100vh;
+}
+
+h1 {
+ font-size: 3.2em;
+ line-height: 1.1;
+}
+
+button {
+ border-radius: 8px;
+ border: 1px solid transparent;
+ padding: 0.6em 1.2em;
+ font-size: 1em;
+ font-weight: 500;
+ font-family: inherit;
+ background-color: #1a1a1a;
+ cursor: pointer;
+ transition: border-color 0.25s;
+}
+button:hover {
+ border-color: #646cff;
+}
+button:focus,
+button:focus-visible {
+ outline: 4px auto -webkit-focus-ring-color;
+}
+
+@media (prefers-color-scheme: light) {
+ :root {
+ color: #213547;
+ background-color: #ffffff;
+ }
+ a:hover {
+ color: #747bff;
+ }
+ button {
+ background-color: #f9f9f9;
+ }
+}
diff --git a/rspack_hmr/runhost/src/index.tsx b/rspack_hmr/runhost/src/index.tsx
new file mode 100644
index 0000000..2e6eb1a
--- /dev/null
+++ b/rspack_hmr/runhost/src/index.tsx
@@ -0,0 +1,3 @@
+import('./bootstrap').then(async ({ renderApp }) => {
+ await renderApp();
+});
diff --git a/rspack_hmr/runhost/src/react-env.d.ts b/rspack_hmr/runhost/src/react-env.d.ts
new file mode 100644
index 0000000..bd4c10d
--- /dev/null
+++ b/rspack_hmr/runhost/src/react-env.d.ts
@@ -0,0 +1,213 @@
+// CSS modules
+type CSSModuleClasses = { readonly [key: string]: string };
+
+declare module '*.module.css' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.scss' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.sass' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.less' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.styl' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.stylus' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.pcss' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+declare module '*.module.sss' {
+ const classes: CSSModuleClasses;
+ export default classes;
+}
+
+// CSS
+declare module '*.css' {
+ /**
+ * @deprecated Use `import style from './style.css?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.scss' {
+ /**
+ * @deprecated Use `import style from './style.scss?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.sass' {
+ /**
+ * @deprecated Use `import style from './style.sass?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.less' {
+ /**
+ * @deprecated Use `import style from './style.less?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.styl' {
+ /**
+ * @deprecated Use `import style from './style.styl?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.stylus' {
+ /**
+ * @deprecated Use `import style from './style.stylus?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.pcss' {
+ /**
+ * @deprecated Use `import style from './style.pcss?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+declare module '*.sss' {
+ /**
+ * @deprecated Use `import style from './style.sss?inline'` instead.
+ */
+ const css: string;
+ export default css;
+}
+
+// images
+declare module '*.png' {
+ const src: string;
+ export default src;
+}
+declare module '*.jpg' {
+ const src: string;
+ export default src;
+}
+declare module '*.jpeg' {
+ const src: string;
+ export default src;
+}
+declare module '*.jfif' {
+ const src: string;
+ export default src;
+}
+declare module '*.pjpeg' {
+ const src: string;
+ export default src;
+}
+declare module '*.pjp' {
+ const src: string;
+ export default src;
+}
+declare module '*.gif' {
+ const src: string;
+ export default src;
+}
+declare module '*.svg' {
+ const ReactComponent: React.FC>;
+ const content: string;
+
+ export { ReactComponent };
+ export default content;
+}
+declare module '*.ico' {
+ const src: string;
+ export default src;
+}
+declare module '*.webp' {
+ const src: string;
+ export default src;
+}
+declare module '*.avif' {
+ const src: string;
+ export default src;
+}
+
+// media
+declare module '*.mp4' {
+ const src: string;
+ export default src;
+}
+declare module '*.webm' {
+ const src: string;
+ export default src;
+}
+declare module '*.ogg' {
+ const src: string;
+ export default src;
+}
+declare module '*.mp3' {
+ const src: string;
+ export default src;
+}
+declare module '*.wav' {
+ const src: string;
+ export default src;
+}
+declare module '*.flac' {
+ const src: string;
+ export default src;
+}
+declare module '*.aac' {
+ const src: string;
+ export default src;
+}
+
+declare module '*.opus' {
+ const src: string;
+ export default src;
+}
+
+// fonts
+declare module '*.woff' {
+ const src: string;
+ export default src;
+}
+declare module '*.woff2' {
+ const src: string;
+ export default src;
+}
+declare module '*.eot' {
+ const src: string;
+ export default src;
+}
+declare module '*.ttf' {
+ const src: string;
+ export default src;
+}
+declare module '*.otf' {
+ const src: string;
+ export default src;
+}
+
+// other
+declare module '*.webmanifest' {
+ const src: string;
+ export default src;
+}
+declare module '*.pdf' {
+ const src: string;
+ export default src;
+}
+declare module '*.txt' {
+ const src: string;
+ export default src;
+}
diff --git a/rspack_hmr/runhost/tsconfig.json b/rspack_hmr/runhost/tsconfig.json
new file mode 100644
index 0000000..cb52ef7
--- /dev/null
+++ b/rspack_hmr/runhost/tsconfig.json
@@ -0,0 +1,21 @@
+{
+ "compilerOptions": {
+ "target": "ES6",
+ "lib": ["DOM", "DOM.Iterable", "ESNext"],
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "react-jsx",
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true,
+ "paths": {
+ "*": ["./@mf-types/*"]
+ }
+ },
+ "include": ["src"]
+}