diff --git a/.changeset/chilled-jars-pump.md b/.changeset/chilled-jars-pump.md
new file mode 100644
index 0000000000..379c54982c
--- /dev/null
+++ b/.changeset/chilled-jars-pump.md
@@ -0,0 +1,10 @@
+---
+'@ice/webpack-config': minor
+'@ice/shared-config': minor
+'@ice/runtime': minor
+'@ice/app': minor
+'@ice/bundles': patch
+'@ice/route-manifest': patch
+---
+
+feat: support react server component
diff --git a/examples/with-rsc/ice.config.mts b/examples/with-rsc/ice.config.mts
new file mode 100644
index 0000000000..845f8921f4
--- /dev/null
+++ b/examples/with-rsc/ice.config.mts
@@ -0,0 +1,11 @@
+import { defineConfig } from '@ice/app';
+
+export default defineConfig({
+ ssr: true,
+ // TODO: support esm format and resolve runtime dependencies to compiled dependencies.
+ server: {
+ bundle: true,
+ format: 'cjs',
+ },
+ rsc: true,
+});
diff --git a/examples/with-rsc/package.json b/examples/with-rsc/package.json
new file mode 100644
index 0000000000..1f1edeef31
--- /dev/null
+++ b/examples/with-rsc/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "@examples/with-server-component",
+ "private": true,
+ "version": "1.0.0",
+ "scripts": {
+ "start": "ice start",
+ "build": "ice build"
+ },
+ "description": "ICE example with server-component",
+ "author": "ICE Team",
+ "license": "MIT",
+ "dependencies": {
+ "@ice/app": "workspace:*",
+ "@ice/runtime": "workspace:*",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
+ },
+ "devDependencies": {
+ "@types/react": "^18.0.17",
+ "@types/react-dom": "^18.0.6"
+ }
+}
diff --git a/examples/with-rsc/src/app.tsx b/examples/with-rsc/src/app.tsx
new file mode 100644
index 0000000000..1ceb78f306
--- /dev/null
+++ b/examples/with-rsc/src/app.tsx
@@ -0,0 +1,7 @@
+import { defineAppConfig } from 'ice';
+
+export default defineAppConfig({
+ app: {
+ rootId: 'app',
+ },
+});
diff --git a/examples/with-rsc/src/components/Comments.tsx b/examples/with-rsc/src/components/Comments.tsx
new file mode 100644
index 0000000000..616b32df3f
--- /dev/null
+++ b/examples/with-rsc/src/components/Comments.tsx
@@ -0,0 +1,33 @@
+async function Comments() {
+ const comments = await getData();
+
+ console.log('Render: Comments');
+
+ return (
+
+ {comments.map((comment, i) => (
+
+ {comment}
+
+ ))}
+
+ );
+}
+
+export default Comments;
+
+const fakeData = [
+ "Wait, it doesn't wait for React to load?",
+ 'How does this even work?',
+ 'I like marshmallows',
+];
+
+async function getData() {
+ console.log('load comments');
+
+ await new Promise((resolve) => {
+ setTimeout(() => resolve(null), 3000);
+ });
+
+ return fakeData;
+}
diff --git a/examples/with-rsc/src/components/Counter.client.tsx b/examples/with-rsc/src/components/Counter.client.tsx
new file mode 100644
index 0000000000..a9ed6568d3
--- /dev/null
+++ b/examples/with-rsc/src/components/Counter.client.tsx
@@ -0,0 +1,21 @@
+'use client';
+import { useState } from 'react';
+import { useAppContext } from 'ice';
+import styles from './counter.module.css';
+
+export default function Counter() {
+ const [count, setCount] = useState(0);
+
+ function updateCount() {
+ setCount(count + 1);
+ }
+
+ const appContext = useAppContext();
+ console.log(appContext);
+
+ return (
+
+ );
+}
\ No newline at end of file
diff --git a/examples/with-rsc/src/components/EditButton.client.tsx b/examples/with-rsc/src/components/EditButton.client.tsx
new file mode 100644
index 0000000000..4a9fd16add
--- /dev/null
+++ b/examples/with-rsc/src/components/EditButton.client.tsx
@@ -0,0 +1,24 @@
+'use client';
+import { useTransition } from 'react';
+
+export default function EditButton({ noteId, children }) {
+ const [isPending, startTransition] = useTransition();
+ const isDraft = noteId == null;
+ return (
+
+ );
+}
diff --git a/examples/with-rsc/src/components/Footer.tsx b/examples/with-rsc/src/components/Footer.tsx
new file mode 100644
index 0000000000..27ceace7ba
--- /dev/null
+++ b/examples/with-rsc/src/components/Footer.tsx
@@ -0,0 +1,29 @@
+import { useSuspenseData, withSuspense } from 'ice';
+
+function Footer() {
+ const data = useSuspenseData(getData);
+
+ console.log('Render: Footer');
+
+ return (
+
+
{data.title}
+
+ );
+}
+
+export default withSuspense(Footer);
+
+const fakeData = {
+ title: 'Thanks for reading!',
+};
+
+async function getData() {
+ console.log('load footer');
+
+ await new Promise((resolve) => {
+ setTimeout(() => resolve(null), 2000);
+ });
+
+ return fakeData;
+}
\ No newline at end of file
diff --git a/examples/with-rsc/src/components/counter.module.css b/examples/with-rsc/src/components/counter.module.css
new file mode 100644
index 0000000000..75eea836a4
--- /dev/null
+++ b/examples/with-rsc/src/components/counter.module.css
@@ -0,0 +1,14 @@
+.link {
+ font-size: 1.2rem;
+ color: var(--primary);
+}
+
+.button {
+ outline: none;
+ border: none;
+ border-radius: 8px;
+ padding: 10px 35px;
+ background: var(--primary);
+ box-shadow: 0 5px 10px 0 #ddd;
+ font-size: calc(10px + 2vmin);
+}
diff --git a/examples/with-rsc/src/document.tsx b/examples/with-rsc/src/document.tsx
new file mode 100644
index 0000000000..195d21a7f1
--- /dev/null
+++ b/examples/with-rsc/src/document.tsx
@@ -0,0 +1,22 @@
+import { Meta, Title, Links, Main, Scripts } from 'ice';
+
+function Document() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export default Document;
diff --git a/examples/with-rsc/src/pages/about.module.css b/examples/with-rsc/src/pages/about.module.css
new file mode 100644
index 0000000000..18968098e0
--- /dev/null
+++ b/examples/with-rsc/src/pages/about.module.css
@@ -0,0 +1,30 @@
+.about {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+}
+
+.about > header {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+.about > header > img {
+ width: 120px;
+}
+
+.about > header > p {
+ margin: 20px 0;
+ text-align: center;
+ font-size: 2.6rem;
+}
+
+.about > main {
+ display: flex;
+ flex-direction: column;
+ margin: 20px 0 10px;
+ font-size: 0.9rem;
+}
\ No newline at end of file
diff --git a/examples/with-rsc/src/pages/about.tsx b/examples/with-rsc/src/pages/about.tsx
new file mode 100644
index 0000000000..76f33efa99
--- /dev/null
+++ b/examples/with-rsc/src/pages/about.tsx
@@ -0,0 +1,22 @@
+import { useAppContext } from 'ice';
+import styles from './about.module.css';
+import Counter from '@/components/Counter.client';
+
+if (!global.requestCount) {
+ global.requestCount = 0;
+}
+
+export default function Home() {
+ console.log('Render: Index');
+
+ const appContext = useAppContext();
+ console.log(appContext);
+
+ return (
+
+
About Page
+
server request count: { global.requestCount++ }
+
+
+ );
+}
diff --git a/examples/with-rsc/src/pages/index.module.css b/examples/with-rsc/src/pages/index.module.css
new file mode 100644
index 0000000000..67e8c355ea
--- /dev/null
+++ b/examples/with-rsc/src/pages/index.module.css
@@ -0,0 +1,30 @@
+.app {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+}
+
+.app > header {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+.app > header > img {
+ width: 120px;
+}
+
+.app > header > p {
+ margin: 20px 0;
+ text-align: center;
+ font-size: 2.6rem;
+}
+
+.app > main {
+ display: flex;
+ flex-direction: column;
+ margin: 20px 0 10px;
+ font-size: 0.9rem;
+}
\ No newline at end of file
diff --git a/examples/with-rsc/src/pages/index.tsx b/examples/with-rsc/src/pages/index.tsx
new file mode 100644
index 0000000000..2f951e4ba0
--- /dev/null
+++ b/examples/with-rsc/src/pages/index.tsx
@@ -0,0 +1,27 @@
+import { Suspense } from 'react';
+import { useAppContext } from 'ice';
+import styles from './index.module.css';
+import EditButton from '@/components/EditButton.client';
+import Counter from '@/components/Counter.client';
+import Comments from '@/components/Comments';
+
+export default function Home() {
+ console.log('Render: Index');
+
+ const appContext = useAppContext();
+ console.log(appContext);
+
+ return (
+
+
Home Page
+
+ loading>}>
+ {/* @ts-ignore */}
+
+
+
+ hello world
+
+
+ );
+}
diff --git a/examples/with-rsc/src/pages/layout.tsx b/examples/with-rsc/src/pages/layout.tsx
new file mode 100644
index 0000000000..71a8cec4e2
--- /dev/null
+++ b/examples/with-rsc/src/pages/layout.tsx
@@ -0,0 +1,10 @@
+export default function Layout(props) {
+ console.log('Render: Layout');
+
+ return (
+
+
Suspense App
+ {props.children}
+
+ );
+}
\ No newline at end of file
diff --git a/examples/with-rsc/src/typings.d.ts b/examples/with-rsc/src/typings.d.ts
new file mode 100644
index 0000000000..1a48695046
--- /dev/null
+++ b/examples/with-rsc/src/typings.d.ts
@@ -0,0 +1 @@
+///
\ No newline at end of file
diff --git a/examples/with-rsc/tsconfig.json b/examples/with-rsc/tsconfig.json
new file mode 100644
index 0000000000..e41a1f451f
--- /dev/null
+++ b/examples/with-rsc/tsconfig.json
@@ -0,0 +1,32 @@
+{
+ "compileOnSave": false,
+ "buildOnSave": false,
+ "compilerOptions": {
+ "baseUrl": ".",
+ "outDir": "build",
+ "module": "esnext",
+ "target": "esnext",
+ "jsx": "react-jsx",
+ "moduleResolution": "node",
+ "allowSyntheticDefaultImports": true,
+ "lib": ["es6", "dom"],
+ "sourceMap": true,
+ "allowJs": true,
+ "rootDir": "./",
+ "forceConsistentCasingInFileNames": true,
+ "noImplicitReturns": true,
+ "noImplicitThis": true,
+ "noImplicitAny": false,
+ "importHelpers": true,
+ "strictNullChecks": true,
+ "suppressImplicitAnyIndexErrors": true,
+ "noUnusedLocals": true,
+ "skipLibCheck": true,
+ "paths": {
+ "@/*": ["./src/*"],
+ "ice": [".ice"]
+ }
+ },
+ "include": ["src", ".ice", "ice.config.*"],
+ "exclude": ["build", "public"]
+}
\ No newline at end of file
diff --git a/packages/bundles/package.json b/packages/bundles/package.json
index 014a665484..793bded5fa 100644
--- a/packages/bundles/package.json
+++ b/packages/bundles/package.json
@@ -15,10 +15,11 @@
"main": "./esm/index.js",
"type": "module",
"dependencies": {
- "@swc/core": "1.3.80",
+ "@swc/core": "1.3.85",
"@ice/swc-plugin-remove-export": "0.2.0",
"@ice/swc-plugin-keep-export": "0.2.0",
"@ice/swc-plugin-node-transform": "0.2.0",
+ "@ice/swc-plugin-react-server-component": "0.1.1",
"ansi-html-community": "^0.0.8",
"html-entities": "^2.3.2",
"core-js": "3.32.0",
@@ -33,6 +34,7 @@
"react-refresh": "0.14.0",
"core-js-pure": "^3.8.1",
"error-stack-parser": "^2.0.6",
+ "acorn-loose": "^8.3.0",
"@ice/css-modules-hash": "0.0.6",
"browserslist": "^4.21.3",
"compare-versions": "6.0.0-rc.1",
@@ -111,7 +113,11 @@
"loader-utils": "^2.0.0",
"source-map": "0.8.0-beta.0",
"find-up": "5.0.0",
- "common-path-prefix": "3.0.0"
+ "common-path-prefix": "3.0.0",
+ "react-builtin": "npm:react@18.3.0-canary-dd480ef92-20230822",
+ "react-dom-builtin": "npm:react-dom@18.3.0-canary-dd480ef92-20230822",
+ "react-server-dom-webpack": "18.3.0-canary-dd480ef92-20230822",
+ "scheduler-builtin": "npm:scheduler@0.24.0-canary-dd480ef92-20230822"
},
"publishConfig": {
"access": "public",
diff --git a/packages/bundles/scripts/tasks.ts b/packages/bundles/scripts/tasks.ts
index 5555d665db..bb4b567ddb 100644
--- a/packages/bundles/scripts/tasks.ts
+++ b/packages/bundles/scripts/tasks.ts
@@ -22,6 +22,53 @@ export const taskExternals = {
esbuild: 'esbuild',
};
+// Override the `react`, `react-dom` and `scheduler`'s package names to avoid
+// "The name `react` was looked up in the Haste module map" warnings.
+function overridePackageName(source: string, channel: string) {
+ const json = JSON.parse(source);
+ json.name = `${json.name}-${channel}`;
+ return JSON.stringify(
+ {
+ name: json.name,
+ main: json.main,
+ exports: json.exports,
+ dependencies: json.dependencies,
+ peerDependencies: json.peerDependencies,
+ browser: json.browser,
+ },
+ null,
+ 2,
+ );
+}
+
+interface CopyModulesOptions {
+ loaders?: { test: RegExp; handler: (code: string, id: string) => string }[];
+ channel?: string;
+ ignore?: string[];
+}
+
+function copyModules(rules: string[], packageName: string, option?: CopyModulesOptions) {
+ const { channel, ignore, loaders } = option || {};
+ const pkgDir = path.join(__dirname, `../node_modules/${packageName}${channel ? `-${channel}` : ''}`);
+ const targetDir = path.join(__dirname, `../compiled/${packageName}`);
+ const filePaths = globbySync(rules, { cwd: pkgDir, ignore: ignore ?? ['node_modules'] });
+ filePaths.forEach((filePath) => {
+ fs.ensureDirSync(path.join(targetDir, path.dirname(filePath)));
+ const sourcePath = path.join(pkgDir, filePath);
+ const targetPath = path.join(targetDir, filePath);
+ // Only deal with js files.
+ if (loaders) {
+ const loader = loaders.find(({ test }) => test.test(filePath));
+ if (loader) {
+ const fileContent = fs.readFileSync(sourcePath, 'utf8');
+ fs.writeFileSync(targetPath, loader.handler(fileContent, filePath));
+ return;
+ }
+ }
+ fs.copyFileSync(sourcePath, targetPath);
+ });
+}
+
const commonDeps = ['terser', 'tapable', 'cssnano', 'terser-webpack-plugin', 'webpack', 'schema-utils',
'lodash', 'postcss-preset-env', 'loader-utils', 'find-up', 'common-path-prefix', 'magic-string'];
@@ -220,6 +267,95 @@ const tasks = [
fs.copySync(path.join(__dirname, '../webpack/packages'), targetPath);
},
},
+ {
+ pkgName: 'react',
+ skipCompile: true,
+ declaration: false,
+ patch: () => {
+ copyModules(
+ ['*.{json,js}', 'cjs/**/*.js', 'LICENSE'],
+ 'react',
+ {
+ channel: 'builtin',
+ loaders: [
+ { test: /package.json$/, handler: (source) => overridePackageName(source, 'builtin') },
+ { test: /\.js$/, handler: (source) => replaceDeps(source, ['scheduler']) },
+ ],
+ },
+ );
+ },
+ },
+ {
+ pkgName: 'react-dom',
+ skipCompile: true,
+ declaration: false,
+ patch: () => {
+ copyModules(
+ ['*.{json,js}', 'cjs/**/*.js', 'LICENSE'],
+ 'react-dom',
+ {
+ channel: 'builtin',
+ loaders: [
+ { test: /package.json$/, handler: (source) => overridePackageName(source, 'builtin') },
+ { test: /\.js$/, handler: (source) => replaceDeps(source, ['scheduler', 'react']) },
+ ],
+ // Ignore unused files.
+ ignore: [
+ 'node_modules',
+ 'static.js',
+ 'static.node.js',
+ 'static.browser.js',
+ 'unstable_testing.js',
+ 'test-utils.js',
+ 'server.bun.js',
+ 'cjs/react-dom-server.bun.development.js',
+ 'cjs/react-dom-server.bun.production.min.js',
+ 'cjs/react-dom-test-utils.development.js',
+ 'cjs/react-dom-test-utils.production.min.js',
+ 'unstable_server-external-runtime.js',
+ ],
+ },
+ );
+ },
+ },
+ {
+ pkgName: 'react-server-dom-webpack',
+ skipCompile: true,
+ patch: () => {
+ copyModules(
+ ['*.{json,js}', 'cjs/**/*.js', 'LICENSE'],
+ 'react-server-dom-webpack',
+ {
+ loaders: [
+ { test: /package.json$/,
+handler: (source) => {
+ const json = JSON.parse(source);
+ // Compatible with both esm and cjs.
+ json.exports['./plugin.js'] = './plugin.js';
+ return JSON.stringify(json, null, 2);
+ } },
+ ],
+ },
+ );
+ },
+ },
+ {
+ pkgName: 'scheduler',
+ skipCompile: true,
+ declaration: false,
+ patch: () => {
+ copyModules(
+ ['*.{json,js}', 'cjs/**/*.js', 'LICENSE'],
+ 'scheduler',
+ {
+ channel: 'builtin',
+ loaders: [
+ { test: /package.json$/, handler: (source) => overridePackageName(source, 'builtin') },
+ ],
+ },
+ );
+ },
+ },
{
pkgName: '@rspack/core',
skipCompile: true,
diff --git a/packages/bundles/src/index.ts b/packages/bundles/src/index.ts
index 4cc767dd61..d6ac73e769 100644
--- a/packages/bundles/src/index.ts
+++ b/packages/bundles/src/index.ts
@@ -7,11 +7,14 @@ import swc from '@swc/core';
import esbuild from 'esbuild';
import * as caniuseLite from 'caniuse-lite';
import { getCssModulesLocalIdent } from '@ice/css-modules-hash';
+import asyncLib from 'neo-async';
+import * as acorn from 'acorn-loose';
const require = createRequire(import.meta.url);
const swcPluginRemoveExport = require.resolve('@ice/swc-plugin-remove-export');
const swcPluginKeepExport = require.resolve('@ice/swc-plugin-keep-export');
const swcPluginNodeTransform = require.resolve('@ice/swc-plugin-node-transform');
+const swcPluginReactServerComponent = require.resolve('@ice/swc-plugin-react-server-component');
const coreJsPath = dirname(require.resolve('core-js/package.json'));
export {
postcss,
@@ -22,12 +25,15 @@ export {
swcPluginRemoveExport,
swcPluginKeepExport,
swcPluginNodeTransform,
+ swcPluginReactServerComponent,
coreJsPath,
esbuild,
caniuseLite,
getCssModulesLocalIdent,
+ asyncLib,
+ acorn,
};
export type { ProcessOptions } from 'postcss';
diff --git a/packages/bundles/webpack/bundle.js b/packages/bundles/webpack/bundle.js
index 4b9bfbb841..b65e9f5542 100644
--- a/packages/bundles/webpack/bundle.js
+++ b/packages/bundles/webpack/bundle.js
@@ -13,6 +13,8 @@ module.exports = {
StringXor: require('webpack/lib/util/StringXor'),
NormalModule: require('webpack/lib/NormalModule'),
EntryDependency: require('webpack/lib/dependencies/EntryDependency'),
+ ModuleDependency: require('webpack/lib/dependencies/ModuleDependency'),
+ NullDependency: require('webpack/lib/dependencies/NullDependency'),
sources: require('webpack').sources,
webpack: require('webpack'),
package: {
diff --git a/packages/bundles/webpack/packages/ModuleDependency.js b/packages/bundles/webpack/packages/ModuleDependency.js
new file mode 100644
index 0000000000..8b970cbad1
--- /dev/null
+++ b/packages/bundles/webpack/packages/ModuleDependency.js
@@ -0,0 +1 @@
+module.exports = require('./bundle').ModuleDependency;
diff --git a/packages/bundles/webpack/packages/NullDependency.js b/packages/bundles/webpack/packages/NullDependency.js
new file mode 100644
index 0000000000..910cb4ea23
--- /dev/null
+++ b/packages/bundles/webpack/packages/NullDependency.js
@@ -0,0 +1 @@
+module.exports = require('./bundle').NullDependency;
diff --git a/packages/ice/src/bundler/webpack/getWebpackConfig.ts b/packages/ice/src/bundler/webpack/getWebpackConfig.ts
index d45402f19d..b256536fe4 100644
--- a/packages/ice/src/bundler/webpack/getWebpackConfig.ts
+++ b/packages/ice/src/bundler/webpack/getWebpackConfig.ts
@@ -1,7 +1,11 @@
+import * as path from 'path';
+import { fileURLToPath } from 'url';
import webpack from '@ice/bundles/compiled/webpack/index.js';
import lodash from '@ice/bundles/compiled/lodash/index.js';
import { getWebpackConfig as getDefaultWebpackConfig } from '@ice/webpack-config';
import type { Configuration } from 'webpack';
+import { FlightManifestPlugin } from '../../webpack/FlightManifestPlugin.js';
+import { FlightClientEntryPlugin } from '../../webpack/FlightClientEntryPlugin.js';
import { getExpandedEnvs } from '../../utils/runtimeEnv.js';
import { getRouteExportConfig } from '../../service/config.js';
import { getFileHash } from '../../utils/hash.js';
@@ -13,6 +17,8 @@ import type ServerRunnerPlugin from '../../webpack/ServerRunnerPlugin.js';
import type ServerCompilerPlugin from '../../webpack/ServerCompilerPlugin.js';
import type { BundlerOptions, Context } from '../types.js';
+const __dirname = path.dirname(fileURLToPath(import.meta.url));
+
const { debounce } = lodash;
type GetWebpackConfig = (
@@ -116,6 +122,19 @@ const getWebpackConfig: GetWebpackConfig = async (context, options) => {
}
// Add spinner for webpack task.
webpackConfig.plugins.push(getSpinnerPlugin(spinner));
+ if (userConfig.rsc) {
+ webpackConfig.resolveLoader = {
+ alias: {
+ 'flight-client-entry-loader': path.join(__dirname, '../../webpack/FlightClientEntryLoader.js'),
+ },
+ };
+
+ webpackConfig.plugins.push(new FlightClientEntryPlugin({
+ rootDir,
+ getRoutesFile,
+ }));
+ webpackConfig.plugins.push(new FlightManifestPlugin());
+ }
return webpackConfig;
});
diff --git a/packages/ice/src/config.ts b/packages/ice/src/config.ts
index ee9ec028e5..6a1d6ff467 100644
--- a/packages/ice/src/config.ts
+++ b/packages/ice/src/config.ts
@@ -126,6 +126,11 @@ const userConfig = [
validation: 'boolean',
defaultValue: true,
},
+ {
+ name: 'rsc',
+ validation: 'boolean',
+ defaultValue: false,
+ },
{
name: 'ssr',
validation: 'boolean',
diff --git a/packages/ice/src/createService.ts b/packages/ice/src/createService.ts
index 932e0f3276..50f727f839 100644
--- a/packages/ice/src/createService.ts
+++ b/packages/ice/src/createService.ts
@@ -281,6 +281,7 @@ async function createService({ rootDir, command, commandArgs }: CreateServiceOpt
dataLoader: userConfig.dataLoader,
routeImports,
routeDefinition,
+ rsc: userConfig.rsc,
});
dataCache.set('routes', JSON.stringify(routesInfo));
dataCache.set('hasExportAppData', hasExportAppData ? 'true' : '');
diff --git a/packages/ice/src/esbuild/assets.ts b/packages/ice/src/esbuild/assets.ts
index ea594ffd4e..1846c83464 100644
--- a/packages/ice/src/esbuild/assets.ts
+++ b/packages/ice/src/esbuild/assets.ts
@@ -40,6 +40,7 @@ const ASSETS_RE = new RegExp(`\\.(${ASSET_TYPES.join('|')})(\\?.*)?$`);
interface CompilationInfo {
assetsManifest?: AssetsManifest;
+ rscManifest?: any;
}
const createAssetsPlugin = (compilationInfo: CompilationInfo | (() => CompilationInfo), rootDir: string) => ({
@@ -60,6 +61,21 @@ const createAssetsPlugin = (compilationInfo: CompilationInfo | (() => Compilatio
loader: 'json',
};
});
+ build.onResolve({ filter: /react-client-manifest.json$/ }, (args) => {
+ if (args.path === 'virtual:react-client-manifest.json') {
+ return {
+ path: args.path,
+ namespace: 'react-client-manifest',
+ };
+ }
+ });
+ build.onLoad({ filter: /.*/, namespace: 'react-client-manifest' }, () => {
+ const manifest = typeof compilationInfo === 'function' ? compilationInfo() : compilationInfo;
+ return {
+ contents: JSON.stringify(manifest?.rscManifest || ''),
+ loader: 'json',
+ };
+ });
build.onLoad({ filter: ASSETS_RE }, async (args) => {
const manifest = typeof compilationInfo === 'function' ? compilationInfo() : compilationInfo;
if (args.suffix == '?raw') {
diff --git a/packages/ice/src/plugins/task.ts b/packages/ice/src/plugins/task.ts
index 721ffee2b8..e89004168f 100644
--- a/packages/ice/src/plugins/task.ts
+++ b/packages/ice/src/plugins/task.ts
@@ -26,12 +26,12 @@ const getDefaultTaskConfig = ({ rootDir, command }): Config => {
'universal-env': envReplacement,
'@uni/env': envReplacement,
},
-
assetsManifest: true,
fastRefresh: command === 'start',
logging: process.env.WEBPACK_LOGGING || defaultLogging,
minify: command === 'build',
useDevServer: true,
+ useDataLoader: true,
};
};
diff --git a/packages/ice/src/plugins/web/config.ts b/packages/ice/src/plugins/web/config.ts
new file mode 100644
index 0000000000..9b44cbfe53
--- /dev/null
+++ b/packages/ice/src/plugins/web/config.ts
@@ -0,0 +1,17 @@
+export function createRSCAliases() {
+ const alias: Record = {
+ react$: '@ice/bundles/compiled/react',
+ 'react-dom$': '@ice/bundles/compiled/react-dom',
+ 'react/jsx-runtime$': '@ice/bundles/compiled/react/jsx-runtime',
+ 'react/jsx-dev-runtime$': '@ice/bundles/compiled/react/jsx-dev-runtime',
+ 'react-dom/client$': '@ice/bundles/compiled/react-dom/client',
+ 'react-dom/server$': '@ice/bundles/compiled/react-dom/server',
+ 'react-dom/server.edge$': '@ice/bundles/compiled/react-dom/server.edge',
+ 'react-dom/server.browser$': '@ice/bundles/compiled/react-dom/server.browser',
+ 'react-server-dom-webpack/client$': '@ice/bundles/compiled/react-server-dom-webpack/client',
+ 'react-server-dom-webpack/client.edge$': '@ice/bundles/compiled/react-server-dom-webpack/client.edge',
+ 'react-server-dom-webpack/server.edge$': '@ice/bundles/compiled/react-server-dom-webpack/server.edge',
+ 'react-server-dom-webpack/server.node$': '@ice/bundles/compiled/react-server-dom-webpack/server.node',
+ };
+ return alias;
+}
diff --git a/packages/ice/src/plugins/web/index.ts b/packages/ice/src/plugins/web/index.ts
index 4f2c090a1e..2d54af4f52 100644
--- a/packages/ice/src/plugins/web/index.ts
+++ b/packages/ice/src/plugins/web/index.ts
@@ -1,13 +1,15 @@
+import * as path from 'path';
import chalk from 'chalk';
import type { Plugin } from '../../types/plugin.js';
-import { WEB } from '../../constant.js';
+import { WEB, RUNTIME_TMP_DIR } from '../../constant.js';
import openBrowser from '../../utils/openBrowser.js';
import { logger } from '../../utils/logger.js';
+import { createRSCAliases } from './config.js';
const plugin: Plugin = () => ({
name: 'plugin-web',
setup: ({ registerTask, onHook, context, generator }) => {
- const { commandArgs, command, userConfig } = context;
+ const { commandArgs, command, userConfig, rootDir } = context;
generator.addTargetExport({
specifier: [
@@ -45,6 +47,14 @@ const plugin: Plugin = () => ({
swcOptions: {
removeExportExprs,
},
+ serverComponent: userConfig.rsc,
+ ...(userConfig.rsc ? {
+ alias: createRSCAliases(),
+ // TODO: temporary solution for rsc.
+ entry: {
+ main: [path.join(rootDir, RUNTIME_TMP_DIR, 'rsc.client.tsx')],
+ route: [path.join(rootDir, RUNTIME_TMP_DIR, 'routes.tsx')],
+ } } : {}),
});
onHook('after.start.compile', async ({ isSuccessful, isFirstCompile, urls, devUrlInfo }) => {
diff --git a/packages/ice/src/routes.ts b/packages/ice/src/routes.ts
index e7f26469f5..930d8dfe6c 100644
--- a/packages/ice/src/routes.ts
+++ b/packages/ice/src/routes.ts
@@ -73,11 +73,12 @@ export function getRoutesDefinition(nestRouteManifest: NestedRouteManifest[], la
routeImports.push(`import * as ${routeSpecifier} from '${formatPath(componentPath)}';`);
loadStatement = routeSpecifier;
}
- const component = `Component: () => WrapRouteComponent({
- routeId: '${id}',
- isLayout: ${layout},
- routeExports: ${lazy ? 'componentModule' : loadStatement},
- })`;
+ const component = `Component: (props) => WrapRouteComponent({
+ routeId: '${id}',
+ isLayout: ${layout},
+ routeExports: ${lazy ? 'componentModule' : loadStatement},
+ children: props?.children
+ })`;
const loader = `loader: createRouteLoader({
routeId: '${id}',
requestContext,
diff --git a/packages/ice/src/service/serverCompiler.ts b/packages/ice/src/service/serverCompiler.ts
index fe6c667176..237dc62b31 100644
--- a/packages/ice/src/service/serverCompiler.ts
+++ b/packages/ice/src/service/serverCompiler.ts
@@ -95,6 +95,23 @@ export const getRuntimeDefination = (
return define;
};
+function formatAlias(alias: Record) {
+ const aliasMap: Record = {};
+ for (const key in alias) {
+ const value = alias[key];
+ // Esbuild only receive string type of alias.
+ if (typeof value === 'string') {
+ if (key.endsWith('$')) {
+ // Esbuild do not support alias ends with $.
+ aliasMap[key.replace(/\$$/, '')] = value;
+ } else {
+ aliasMap[key] = value;
+ }
+ }
+ }
+ return aliasMap;
+}
+
export function createServerCompiler(options: Options) {
const { task, rootDir, command, speedup, server, syntaxFeatures, getRoutesFile } = options;
const externals = task.config?.externals || {};
@@ -170,7 +187,7 @@ export function createServerCompiler(options: Options) {
bundle: true,
format,
target: 'node12.20.0',
- alias,
+ alias: formatAlias(alias),
// enable JSX syntax in .js files by default for compatible with migrate project
// while it is not recommended
loader: { '.js': 'jsx' },
diff --git a/packages/ice/src/types/userConfig.ts b/packages/ice/src/types/userConfig.ts
index a1f96f8a49..a157b57407 100644
--- a/packages/ice/src/types/userConfig.ts
+++ b/packages/ice/src/types/userConfig.ts
@@ -190,6 +190,10 @@ export interface UserConfig {
* @see https://v3.ice.work/docs/guide/basic/config#ssg
*/
ssg?: boolean;
+ /**
+ * A switch for RSC (React Server Component) support.
+ */
+ rsc?: boolean;
/**
* config for server bundle
* @see https://v3.ice.work/docs/guide/basic/config#server
diff --git a/packages/ice/src/webpack/FlightClientEntryLoader.ts b/packages/ice/src/webpack/FlightClientEntryLoader.ts
new file mode 100644
index 0000000000..748c947526
--- /dev/null
+++ b/packages/ice/src/webpack/FlightClientEntryLoader.ts
@@ -0,0 +1,24 @@
+export type ClientComponentImports = string[];
+export type CssImports = Record;
+
+export type FlightClientEntryLoaderOptions = {
+ modules: ClientComponentImports;
+};
+
+export default function transformSource() {
+ let { modules }: FlightClientEntryLoaderOptions = this.getOptions();
+
+ if (!Array.isArray(modules)) {
+ modules = modules ? [modules] : [];
+ }
+
+ const requests = modules as string[];
+ const code = requests
+ .map(
+ (request) =>
+ `import(/* webpackMode: "eager" */ ${JSON.stringify(request)})`,
+ )
+ .join(';\n');
+
+ return code;
+}
diff --git a/packages/ice/src/webpack/FlightClientEntryPlugin.ts b/packages/ice/src/webpack/FlightClientEntryPlugin.ts
new file mode 100644
index 0000000000..32900200e3
--- /dev/null
+++ b/packages/ice/src/webpack/FlightClientEntryPlugin.ts
@@ -0,0 +1,343 @@
+import { join, relative } from 'path';
+import { stringify } from 'querystring';
+import { asyncLib, acorn } from '@ice/bundles';
+import webpack from '@ice/bundles/compiled/webpack/index.js';
+import NullDependency from '@ice/bundles/compiled/webpack/NullDependency.js';
+import ModuleDependency from '@ice/bundles/compiled/webpack/ModuleDependency.js';
+import type { Compiler, Compilation } from 'webpack';
+import { createComponentName } from '@ice/route-manifest';
+import formatPath from '../utils/formatPath.js';
+
+const PLUGIN_NAME = 'FlightClientEntryPlugin';
+
+interface ClientReferenceSearchPath {
+ directory: string;
+ recursive?: boolean;
+ include: RegExp;
+ exclude?: RegExp;
+}
+
+interface Options {
+ rootDir: string;
+ clientReferences?: ClientReferenceSearchPath[];
+ getRoutesFile: () => string[];
+}
+
+class ClientReferenceDependency extends ModuleDependency {
+ userRequest: string;
+ request: string;
+
+ constructor(request: string) {
+ super(request);
+ this.request = request;
+ }
+ get type(): string {
+ return 'client-reference';
+ }
+}
+
+export class FlightClientEntryPlugin {
+ clientReferences: ClientReferenceSearchPath[];
+ clientFiles = new Set();
+ pageDir: string;
+ rootDir: string;
+ getRoutesFile: () => string[];
+
+ constructor(options: Options) {
+ this.rootDir = options.rootDir;
+ this.pageDir = join(options.rootDir, 'src', 'pages');
+
+ this.getRoutesFile = options.getRoutesFile;
+
+ if (options.clientReferences) {
+ this.clientReferences = options.clientReferences;
+ } else {
+ this.clientReferences = [
+ {
+ directory: '.',
+ recursive: true,
+ include: /\.(js|ts|jsx|tsx)$/,
+ exclude: /types.ts|.d.ts|node_modules/,
+ },
+ ];
+ }
+ }
+
+ apply(compiler: Compiler) {
+ const _this = this;
+
+ compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation, { normalModuleFactory }) => {
+ // @ts-expect-error TODO: add types for ModuleDependency.
+ compilation.dependencyFactories.set(ClientReferenceDependency, normalModuleFactory);
+ // @ts-expect-error TODO: add types for ModuleDependency.
+ compilation.dependencyTemplates.set(ClientReferenceDependency, new NullDependency.Template());
+ });
+
+ compiler.hooks.beforeCompile.tapAsync(PLUGIN_NAME, ({ contextModuleFactory }, callback) => {
+ const contextResolver = compiler.resolverFactory.get('context', {});
+ const normalResolver = compiler.resolverFactory.get('normal');
+
+ _this.resolveClientFiles(
+ compiler.context,
+ contextResolver,
+ normalResolver,
+ compiler.inputFileSystem,
+ contextModuleFactory,
+ (err, resolvedClientRefs) => {
+ if (err) {
+ callback(err);
+ return;
+ }
+ resolvedClientRefs.forEach(dep => {
+ _this.clientFiles.add(dep.request);
+ });
+
+ callback();
+ },
+ );
+ });
+
+ compiler.hooks.finishMake.tapPromise(PLUGIN_NAME, (compilation) =>
+ _this.createClientEntries(compiler, compilation),
+ );
+
+ compiler.hooks.make.tap(PLUGIN_NAME, (compilation) => {
+ compilation.hooks.processAssets.tap({
+ name: PLUGIN_NAME,
+ stage: webpack.Compilation.PROCESS_ASSETS_STAGE_PRE_PROCESS,
+ }, () => {
+ compilation.chunks.forEach((chunk) => {
+ if (chunk.name === 'route' || chunk.runtime === 'route') {
+ chunk.files.forEach((file) => {
+ delete compilation.assets[file];
+ });
+ }
+ });
+ });
+ });
+ }
+
+ async createClientEntries(compiler: Compiler, compilation: Compilation) {
+ const routes = this.getRoutesFile().map(file => join(this.rootDir, file));
+ const addClientEntryList = [];
+
+ for (const [name, entry] of compilation.entries.entries()) {
+ if (name === 'main') {
+ continue;
+ }
+
+ const entryDependency = entry.dependencies?.[0];
+ if (!entryDependency) {
+ continue;
+ }
+
+ const entryModule = compilation.moduleGraph.getResolvedModule(entryDependency);
+ for (const connection of compilation.moduleGraph.getOutgoingConnections(entryModule)) {
+ // @ts-ignore
+ const entryRequest = connection.resolvedModule?.resource;
+
+ if (routes.indexOf(entryRequest) === -1) continue;
+
+ const { clientComponentImports, CSSImports } = this.collectComponentInfoFromDependency({
+ compilation,
+ resolvedModule: connection.resolvedModule,
+ });
+
+ if (clientComponentImports.length || CSSImports.length) {
+ const injected = this.injectClientEntry({
+ compiler,
+ compilation,
+ bundlePath: entryRequest,
+ clientImports: [
+ ...clientComponentImports,
+ ...CSSImports,
+ ],
+ });
+
+ addClientEntryList.push(injected);
+ }
+ }
+ }
+
+ await Promise.all(addClientEntryList);
+ }
+
+ injectClientEntry({ compiler, compilation, bundlePath, clientImports }) {
+ const clientLoader = `flight-client-entry-loader?${stringify({
+ modules: clientImports,
+ })}!`;
+
+ const componentName = createComponentName(formatPath(relative(this.pageDir, bundlePath)));
+ const name = `rsc_${componentName}`;
+ const clientComponentEntryDep = webpack.EntryPlugin.createDependency(clientLoader, {
+ name,
+ });
+
+ return new Promise((resolve, reject) => {
+ compilation.addEntry(compiler.context, clientComponentEntryDep, { name, dependOn: ['main'] }, (err) => {
+ if (err) {
+ reject(err);
+ }
+
+ resolve();
+ });
+ });
+ }
+
+ collectComponentInfoFromDependency({ compilation, resolvedModule }) {
+ // Keep track of checked modules to avoid infinite loops with recursive imports.
+ const visited = new Set();
+ // Info to collect.
+ const clientComponentImports = [];
+ const CSSImports = [];
+
+ const filterClientComponents = (mod) => {
+ if (!mod) return;
+
+ const modRequest: string | undefined = mod.resourceResolveData?.path + mod.resourceResolveData?.query;
+
+ if (!modRequest || visited.has(modRequest)) return;
+ visited.add(modRequest);
+
+ const isCSS = isCSSMod(mod);
+
+ if (isCSS) {
+ CSSImports.push(modRequest);
+ }
+
+ if (this.isClientComponentEntryModule(mod)) {
+ clientComponentImports.push(modRequest);
+ return;
+ }
+
+ compilation.moduleGraph.getOutgoingConnections(mod).forEach((connection) => {
+ filterClientComponents(connection.resolvedModule);
+ });
+ };
+
+ // Traverse the module graph to find all client components.
+ filterClientComponents(resolvedModule);
+
+ return {
+ clientComponentImports,
+ CSSImports,
+ };
+ }
+
+ isClientComponentEntryModule(mod) {
+ if (this.clientFiles.has(mod.resource)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ resolveClientFiles(
+ context: string,
+ contenxtResolver: ReturnType,
+ normalResolver: ReturnType,
+ fs: Compilation['inputFileSystem'],
+ contextModuleFactory: Compilation['params']['contextModuleFactory'],
+ callback: (err: Error | null, files?: ClientReferenceDependency[]) => void,
+ ) {
+ function hasUseClientDirective(source: string): boolean {
+ if (source.indexOf('use client') === -1) {
+ return false;
+ }
+ let body;
+ try {
+ // TODO: check client directive by comment injected by swc plugin.
+ body = acorn.parse(source, {
+ ecmaVersion: '2024',
+ sourceType: 'module',
+ }).body;
+ } catch (x) {
+ return false;
+ }
+ for (let i = 0; i < body.length; i++) {
+ const node = body[i];
+ if (node.type !== 'ExpressionStatement' || !node.directive) {
+ break;
+ }
+ if (node.directive === 'use client') {
+ return true;
+ }
+ }
+ return false;
+ }
+ asyncLib.map(this.clientReferences, (
+ clientReference: ClientReferenceSearchPath,
+ cb: (err: null | Error, result?: ClientReferenceDependency[]) => void,
+ ) => {
+ contenxtResolver.resolve({}, context, clientReference.directory, {}, (err, resolvedDirectory) => {
+ if (err) return cb(err);
+ const options = {
+ resource: resolvedDirectory,
+ resourceQuery: '',
+ recursive:
+ clientReference.recursive === undefined
+ ? true
+ : clientReference.recursive,
+ regExp: clientReference.include,
+ include: undefined,
+ exclude: clientReference.exclude,
+ };
+ // @ts-expect-error TODO: add types for resolveDependencies options.
+ contextModuleFactory.resolveDependencies(fs, options, (err, dependencies) => {
+ if (err) return cb(err);
+ const clientRefDeps = dependencies.map(dep => {
+ // Use userRequest instead of request. request always end with undefined which is wrong.
+ const request = join(resolvedDirectory as string, dep.userRequest);
+ const clientRefDep = new ClientReferenceDependency(request);
+ clientRefDep.userRequest = dep.userRequest;
+ return clientRefDep;
+ });
+ asyncLib.filter(
+ clientRefDeps,
+ (dep: ClientReferenceDependency, filterCb: (err: null | Error, truthValue: boolean) => void,
+ ) => {
+ normalResolver.resolve(
+ {},
+ context,
+ dep.request,
+ {},
+ (err: null | Error, resolvedPath: any) => {
+ if (err || typeof resolvedPath !== 'string') {
+ return filterCb(null, false);
+ }
+
+ fs.readFile(
+ resolvedPath,
+ 'utf-8',
+ // @ts-expect-error
+ (err: null | Error, content: string) => {
+ if (err || typeof content !== 'string') {
+ return filterCb(null, false);
+ }
+ const useClient = hasUseClientDirective(content);
+ filterCb(null, useClient);
+ },
+ );
+ },
+ );
+ }, cb);
+ });
+ });
+ }, (
+ err: null | Error,
+ result: ClientReferenceDependency[],
+ ) => {
+ if (err) return callback(err);
+ const flat: ClientReferenceDependency[] = [];
+ for (let i = 0; i < result.length; i++) {
+ flat.push.apply(flat, result[i]);
+ }
+ callback(null, flat);
+ });
+ }
+}
+
+const regexCSS = /\.(css|scss|sass)(\?.*)?$/;
+function isCSSMod(mod) {
+ return mod.resource && regexCSS.test(mod.resource);
+}
\ No newline at end of file
diff --git a/packages/ice/src/webpack/FlightManifestPlugin.ts b/packages/ice/src/webpack/FlightManifestPlugin.ts
new file mode 100644
index 0000000000..f8bda22836
--- /dev/null
+++ b/packages/ice/src/webpack/FlightManifestPlugin.ts
@@ -0,0 +1,152 @@
+// Fork form https://github.com/facebook/react/blob/main/packages/react-server-dom-webpack/src/ReactFlightWebpackPlugin.js
+// Add special handling for ice.js when enable RSC.
+import webpack from '@ice/bundles/compiled/webpack/index.js';
+import type { Compiler } from 'webpack';
+
+const PLUGIN_NAME = 'FlightManifestPlugin';
+
+interface Options {
+ clientManifestFilename?: string;
+ ssrManifestFilename?: string;
+}
+
+interface SSRExports {
+ [chunkName: string]: { specifier: string; name: string };
+}
+
+interface ClientManifest {
+ [key: string]: {
+ chunks: (string | number)[];
+ id: string | number;
+ name: string;
+};
+}
+
+interface SsrManifest {
+ [key: string]: SSRExports;
+}
+
+export class FlightManifestPlugin {
+ clientManifestFilename?: string;
+ ssrManifestFilename?: string;
+
+ constructor(options: Options = {}) {
+ this.clientManifestFilename =
+ options.clientManifestFilename || 'react-client-manifest.json';
+ this.ssrManifestFilename =
+ options.ssrManifestFilename || 'react-ssr-manifest.json';
+ }
+
+ apply(compiler: Compiler) {
+ const _this = this;
+
+ compiler.hooks.make.tap(PLUGIN_NAME, (compilation) => {
+ compilation.hooks.processAssets.tap({
+ name: PLUGIN_NAME,
+ stage: webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT,
+ }, () => {
+ const clientManifestMapping: {
+ [key: string]: ClientManifest;
+ } = {};
+ const ssrManifestSetMapping: {
+ [key: string]: SsrManifest;
+ } = {};
+
+ compilation.chunkGroups.forEach((chunkGroup) => {
+ const chunkGroupName = chunkGroup.name;
+
+ const clientManifest: ClientManifest = {};
+
+ const ssrManifest: SsrManifest = {};
+
+ let hasRecord = false;
+
+ const recordModule = (id: string | number, module: any) => {
+ // const modId = path.relative(compiler.context, module.resource);
+ const modId = module.resource;
+ if (modId !== undefined) {
+ hasRecord = true;
+
+ clientManifest[modId] = {
+ id,
+ chunks: chunkIds,
+ name: '*',
+ };
+ // TODO: If this module ends up split into multiple modules, then
+ // we should encode each the chunks needed for the specific export.
+ // When the module isn't split, it doesn't matter and we can just
+ // encode the id of the whole module. This code doesn't currently
+ // deal with module splitting so is likely broken from ESM anyway.
+ ssrManifest[id] = {
+ '*': {
+ specifier: modId,
+ name: '*',
+ },
+ };
+ }
+ };
+
+ const chunkIds = chunkGroup.chunks.map((chunk) => chunk.id);
+ chunkGroup.chunks.forEach((chunk) => {
+ const chunkModules = compilation.chunkGraph.getChunkModulesIterable(chunk);
+ [...chunkModules].forEach((module) => {
+ const { request } = module as any;
+
+ if (
+ !request ||
+ !request.includes('FlightClientEntryLoader.js')
+ ) {
+ return;
+ }
+
+ const connections = compilation.moduleGraph.getOutgoingConnections(module);
+
+ for (const connection of connections) {
+ const { dependency } = connection;
+ if (!dependency) continue;
+
+ const clientEntryMod = compilation.moduleGraph.getResolvedModule(
+ dependency,
+ ) as any;
+ const modId = compilation.chunkGraph.getModuleId(clientEntryMod) as
+ | string
+ | number
+ | null;
+
+ if (modId) {
+ recordModule(modId, clientEntryMod);
+ } else {
+ // If this is a concatenation, register each child to the parent ID.
+ if (connection.module?.constructor.name === 'ConcatenatedModule') {
+ const concatenatedMod = connection.module;
+ const concatenatedModId =
+ compilation.chunkGraph.getModuleId(concatenatedMod);
+ recordModule(concatenatedModId, clientEntryMod);
+ }
+ }
+ }
+ });
+
+ // One client component may bundle into serveral chunks, so we need to create manifest for each page.
+ if (hasRecord) {
+ clientManifestMapping[chunkGroupName] = clientManifest;
+ ssrManifestSetMapping[chunkGroupName] = ssrManifest;
+ }
+ });
+ });
+
+ const clientOutput = JSON.stringify(clientManifestMapping, null, 2);
+ compilation.emitAsset(
+ _this.clientManifestFilename,
+ new webpack.sources.RawSource(clientOutput, false),
+ );
+
+ const ssrOutput = JSON.stringify(ssrManifestSetMapping, null, 2);
+ compilation.emitAsset(
+ _this.ssrManifestFilename,
+ new webpack.sources.RawSource(ssrOutput, false),
+ );
+ });
+ });
+ }
+}
diff --git a/packages/ice/src/webpack/ServerCompilerPlugin.ts b/packages/ice/src/webpack/ServerCompilerPlugin.ts
index a4b62f7ce9..6375baa211 100644
--- a/packages/ice/src/webpack/ServerCompilerPlugin.ts
+++ b/packages/ice/src/webpack/ServerCompilerPlugin.ts
@@ -41,6 +41,12 @@ export default class ServerCompilerPlugin {
// Option of compilationInfo need to be object, while it may changed during multi-time compilation.
this.compilerOptions.compilationInfo.assetsManifest =
JSON.parse(compilation.getAsset('assets-manifest.json').source.source().toString());
+
+ if (compilation.getAsset('react-client-manifest.json')) {
+ // @ts-ignore
+ this.compilerOptions.compilationInfo.rscManifest =
+ JSON.parse(compilation.getAsset('react-client-manifest.json').source.source().toString());
+ }
}
// For first time, we create a new task.
// The next time, we use incremental build so do not create task again.
diff --git a/packages/ice/templates/core/entry.server.ts.ejs b/packages/ice/templates/core/entry.server.ts.ejs
index 00d0322ebf..8cc74f3393 100644
--- a/packages/ice/templates/core/entry.server.ts.ejs
+++ b/packages/ice/templates/core/entry.server.ts.ejs
@@ -13,6 +13,9 @@ import type { RenderMode, DistType } from '@ice/runtime';
import type { RenderToPipeableStreamOptions } from 'react-dom/server';
// @ts-ignore
import assetsManifest from 'virtual:assets-manifest.json';
+<% if(rsc) {-%>
+import clientManifest from 'virtual:react-client-manifest.json';
+<% }-%>
<% if (hydrate) {-%>
import createRoutes from './routes';
<% } else { -%>
@@ -68,6 +71,11 @@ export async function renderToResponse(requestContext, options: RenderOptions =
setRuntimeEnv(renderMode);
const mergedOptions = mergeOptions(options);
+
+ <% if(rsc) {-%>
+ return runtime.runRSCServerApp(requestContext, mergedOptions);
+ <% }-%>
+
return runtime.renderToResponse(requestContext, mergedOptions);
}
@@ -99,6 +107,9 @@ function mergeOptions(options) {
basename: basename || getRouterBasename(),
renderMode,
routesConfig,
+ <% if(rsc) {-%>
+ clientManifest,
+ <% }-%>
<% if (hydrate) {-%>
runtimeOptions: {
<% if (runtimeOptions.exports) { -%>
diff --git a/packages/ice/templates/core/rsc.client.tsx.ejs b/packages/ice/templates/core/rsc.client.tsx.ejs
new file mode 100644
index 0000000000..0ded0e7f79
--- /dev/null
+++ b/packages/ice/templates/core/rsc.client.tsx.ejs
@@ -0,0 +1,10 @@
+<% if (importCoreJs) { -%>import 'core-js';<% } %>
+import { runRSCClientApp, getAppConfig } from '<%- iceRuntimePath %>';
+import * as app from '@/app';
+
+const render = (customOptions = {}) => {
+ const appConfig = getAppConfig(app);
+ return runRSCClientApp(appConfig);
+};
+
+<%- entryCode %>
diff --git a/packages/route-manifest/src/index.ts b/packages/route-manifest/src/index.ts
index af00031e2c..8175fbe6a1 100644
--- a/packages/route-manifest/src/index.ts
+++ b/packages/route-manifest/src/index.ts
@@ -46,11 +46,14 @@ const routeModuleExts = [
// '.mdx',
];
+export {
+ createComponentName,
+};
+
export function isRouteModuleFile(filename: string): boolean {
return routeModuleExts.includes(path.extname(filename));
}
-
export function generateRouteManifest(
rootDir: string,
ignoreFiles: string[] = [],
diff --git a/packages/runtime/package.json b/packages/runtime/package.json
index f777e59f08..2a822f8062 100644
--- a/packages/runtime/package.json
+++ b/packages/runtime/package.json
@@ -42,8 +42,9 @@
"devDependencies": {
"@types/react": "^18.0.8",
"@types/react-dom": "^18.0.3",
- "react": "^18.0.0",
- "react-dom": "^18.0.0",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "react-server-dom-webpack": "18.3.0-canary-dd480ef92-20230822",
"regenerator-runtime": "^0.13.9",
"@remix-run/web-fetch": "^4.3.3"
},
@@ -65,8 +66,8 @@
"source-map": "^0.7.4"
},
"peerDependencies": {
- "react": "^18.1.0",
- "react-dom": "^18.1.0"
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
},
"publishConfig": {
"access": "public"
diff --git a/packages/runtime/src/AppContext.tsx b/packages/runtime/src/AppContext.tsx
index ff05e7fdbf..5998beb8af 100644
--- a/packages/runtime/src/AppContext.tsx
+++ b/packages/runtime/src/AppContext.tsx
@@ -1,17 +1,22 @@
import * as React from 'react';
import type { AppContext } from './types.js';
-const Context = React.createContext(undefined);
+// @ts-ignore
+const Context = React.createServerContext
+ // @ts-ignore
+ ? React.createServerContext(undefined)
+ : React.createContext(undefined);
Context.displayName = 'AppContext';
function useAppContext() {
- const value = React.useContext(Context);
+ const value: AppContext = React.useContext(Context);
return value;
}
function useAppData() {
const value = React.useContext(Context);
+ // @ts-ignore
return value.appData;
}
diff --git a/packages/runtime/src/index.server.ts b/packages/runtime/src/index.server.ts
index e1390daf38..83dd937a2a 100644
--- a/packages/runtime/src/index.server.ts
+++ b/packages/runtime/src/index.server.ts
@@ -1,2 +1,4 @@
export { renderToResponse, renderToHTML, renderToEntry } from './runServerApp.js';
+export { runRSCServerApp } from './runRSCServerApp.js';
+
export * from './index.js';
diff --git a/packages/runtime/src/index.ts b/packages/runtime/src/index.ts
index ad0b5c0029..4329b4caef 100644
--- a/packages/runtime/src/index.ts
+++ b/packages/runtime/src/index.ts
@@ -26,6 +26,7 @@ import type { RunClientAppOptions, CreateRoutes } from './runClientApp.js';
import { useAppContext as useInternalAppContext, useAppData, AppContextProvider } from './AppContext.js';
import { getAppData } from './appData.js';
import { useData, useConfig } from './RouteContext.js';
+import { runRSCClientApp } from './runRSCClientApp.js';
import {
Meta,
Title,
@@ -144,6 +145,8 @@ export {
createRouteLoader,
WrapRouteComponent,
RouteErrorComponent,
+
+ runRSCClientApp,
};
export type {
diff --git a/packages/runtime/src/routes.tsx b/packages/runtime/src/routes.tsx
index 77e887c9bf..1e98c473a1 100644
--- a/packages/runtime/src/routes.tsx
+++ b/packages/runtime/src/routes.tsx
@@ -57,12 +57,16 @@ export function WrapRouteComponent(options: {
routeId: string;
isLayout?: boolean;
routeExports: ComponentModule;
+ children?: Array;
}) {
- const { routeId, isLayout, routeExports } = options;
- const { RouteWrappers } = useAppContext();
+ const { routeId, isLayout, routeExports, children } = options;
+
+ const { RouteWrappers } = useAppContext() || {};
return (
-
+
+ { children }
+
);
}
diff --git a/packages/runtime/src/routesConfig.ts b/packages/runtime/src/routesConfig.ts
index ceba4f3aba..ea3fce7cf3 100644
--- a/packages/runtime/src/routesConfig.ts
+++ b/packages/runtime/src/routesConfig.ts
@@ -32,7 +32,7 @@ function getMergedValue(key: string, matches: RouteMatch[], loadersData: Loaders
let result;
for (let match of matches) {
const routeId = match.route.id;
- const data = loadersData[routeId]?.pageConfig;
+ const data = loadersData?.[routeId]?.pageConfig;
const value = data?.[key];
if (Array.isArray(value)) {
diff --git a/packages/runtime/src/runRSCClientApp.tsx b/packages/runtime/src/runRSCClientApp.tsx
new file mode 100644
index 0000000000..37db3a5fac
--- /dev/null
+++ b/packages/runtime/src/runRSCClientApp.tsx
@@ -0,0 +1,96 @@
+import * as React from 'react';
+import * as ReactDOM from 'react-dom/client';
+import pkg from 'react-server-dom-webpack/client';
+import type { AppConfig } from './types.js';
+
+// @ts-ignore
+const { Suspense, use } = React;
+const { createFromReadableStream } = pkg;
+
+export async function runRSCClientApp(appConfig: AppConfig) {
+ // It's possible that the DOM is already loaded.
+ if (document.readyState === 'loading') {
+ document.addEventListener('DOMContentLoaded', DOMContentLoaded, false);
+ } else {
+ DOMContentLoaded();
+ }
+
+ const rscData = (self as any).__rsc_data = (self as any).__rsc_data || [];
+ rscData.forEach(serverDataCallback);
+ rscData.push = serverDataCallback;
+
+ const rootId = appConfig.app.rootId || 'app';
+ const container = document.getElementById(rootId);
+ const root = ReactDOM.createRoot(container);
+ root.render();
+}
+
+function Root() {
+ const response = useInitialServerResponse(window.location.href);
+
+ return (
+
+ {use(response)}
+
+ );
+}
+
+const rscCache = new Map();
+
+function useInitialServerResponse(cacheKey: string): Promise {
+ const response = rscCache.get(cacheKey);
+ if (response) return response;
+
+ const readable = new ReadableStream({
+ start(controller) {
+ nextServerDataRegisterWriter(controller);
+ },
+ });
+
+ const newResponse = createFromReadableStream(readable);
+
+ rscCache.set(cacheKey, newResponse);
+ return newResponse;
+}
+
+let initialServerDataBuffer: string[] | undefined;
+let initialServerDataWriter: ReadableStreamDefaultController | undefined;
+let initialServerDataLoaded = false;
+let initialServerDataFlushed = false;
+const encoder = new TextEncoder();
+
+function nextServerDataRegisterWriter(ctr: ReadableStreamDefaultController) {
+ if (initialServerDataBuffer) {
+ initialServerDataBuffer.forEach((val) => {
+ ctr.enqueue(encoder.encode(val));
+ });
+ if (initialServerDataLoaded && !initialServerDataFlushed) {
+ ctr.close();
+ initialServerDataFlushed = true;
+ initialServerDataBuffer = undefined;
+ }
+ }
+
+ initialServerDataWriter = ctr;
+}
+
+// When `DOMContentLoaded`, we can close all pending writers to finish hydration.
+const DOMContentLoaded = function () {
+ if (initialServerDataWriter && !initialServerDataFlushed) {
+ initialServerDataWriter.close();
+ initialServerDataFlushed = true;
+ initialServerDataBuffer = undefined;
+ }
+ initialServerDataLoaded = true;
+};
+
+function serverDataCallback(seg) {
+ if (initialServerDataWriter) {
+ initialServerDataWriter.enqueue(encoder.encode(seg));
+ } else {
+ if (!initialServerDataBuffer) {
+ initialServerDataBuffer = [];
+ }
+ initialServerDataBuffer.push(seg);
+ }
+}
\ No newline at end of file
diff --git a/packages/runtime/src/runRSCServerApp.tsx b/packages/runtime/src/runRSCServerApp.tsx
new file mode 100644
index 0000000000..0327f05b6b
--- /dev/null
+++ b/packages/runtime/src/runRSCServerApp.tsx
@@ -0,0 +1,150 @@
+import { TextDecoder, TextEncoder } from 'util';
+import * as React from 'react';
+import * as ReactDOMServer from 'react-dom/server';
+import { renderToPipeableStream } from 'react-server-dom-webpack/server.node';
+import { AppContextProvider } from './AppContext.js';
+import { DocumentContextProvider } from './Document.js';
+import { loadRouteModules } from './routes.js';
+import getAppConfig from './appConfig.js';
+import getRequestContext from './requestContext.js';
+import getLocation from './utils/getLocation.js';
+import addLeadingSlash from './utils/addLeadingSlash.js';
+import matchRoutes from './matchRoutes.js';
+import type {
+ AppContext,
+ ServerContext,
+ RouteMatch,
+ RouteModules,
+ ServerRenderOptions as RenderOptions,
+} from './types.js';
+
+// This utility is based on https://github.com/zertosh/htmlescape
+// License: https://github.com/zertosh/htmlescape/blob/0527ca7156a524d256101bb310a9f970f63078ad/LICENSE
+const ESCAPE_LOOKUP: { [match: string]: string } = {
+ '&': '\\u0026',
+ '>': '\\u003e',
+ '<': '\\u003c',
+ '\u2028': '\\u2028',
+ '\u2029': '\\u2029',
+};
+
+const ESCAPE_REGEX = /[&><\u2028\u2029]/g;
+
+function htmlEscapeJsonString(str: string): string {
+ return str.replace(ESCAPE_REGEX, (match) => ESCAPE_LOOKUP[match]);
+}
+
+export async function runRSCServerApp(serverContext: ServerContext, renderOptions: RenderOptions) {
+ const { req, res } = serverContext;
+
+ const {
+ app,
+ createRoutes,
+ renderMode,
+ basename,
+ serverOnlyBasename,
+ clientManifest: clientManifestMapping,
+ assetsManifest,
+ } = renderOptions;
+
+ const location = getLocation(req.url);
+ const requestContext = getRequestContext(location, serverContext);
+ const routes = createRoutes({
+ requestContext,
+ renderMode,
+ });
+ const finalBasename = addLeadingSlash(serverOnlyBasename || basename);
+ const matches = matchRoutes(routes, location, finalBasename);
+
+ const appConfig = getAppConfig(app);
+ const appContext: AppContext = {
+ appConfig,
+ appData: null,
+ renderMode,
+ assetsManifest,
+ basename: finalBasename,
+ matches: [],
+ };
+
+ renderDocument(serverContext, renderOptions, appContext, matches);
+
+ const routeModules = await loadRouteModules(matches.map(({ route: { id, lazy } }) => ({ id, lazy })));
+
+ const element = (
+
+ {renderMatches(matches, routeModules)}
+
+ );
+
+ // Merge client manifest for match route.
+ const clientManifest = {};
+ matches.forEach(match => {
+ const { componentName } = match.route;
+ const manifest = clientManifestMapping[`rsc_${componentName}`];
+ if (manifest) {
+ Object.assign(clientManifest, manifest);
+ }
+ });
+
+ const decoder = new TextDecoder();
+ const encoder = new TextEncoder();
+
+ res.write('');
+
+ function decorateWrite(write) {
+ return function (data) {
+ const chunk = decoder.decode(data, { stream: true });
+ const modifiedData = ``;
+
+ return write.call(this, encoder.encode(modifiedData));
+ };
+ }
+
+ res.write = decorateWrite(res.write);
+
+ const { pipe } = renderToPipeableStream(
+ element,
+ clientManifest,
+ );
+
+ pipe(res);
+}
+
+function renderMatches(matches: RouteMatch[], routeModules: RouteModules) {
+ return matches.reduceRight((children, match) => {
+ if (match.route) {
+ const Component = routeModules[match.route.id].default;
+
+ return React.createElement(Component, {
+ children,
+ });
+ }
+
+ return children;
+ }, React.createElement(null));
+}
+
+function renderDocument(requestContext, renderOptions, appContext, matches) {
+ const { res } = requestContext;
+
+ const {
+ Document,
+ routePath,
+ } = renderOptions;
+
+ const documentContext = {
+ main: null,
+ };
+
+ const htmlStr = ReactDOMServer.renderToString(
+
+
+
+
+ ,
+ );
+
+ res.setHeader('Content-Type', 'text/html; charset=utf-8');
+ res.write(`${htmlStr}`);
+}
+
diff --git a/packages/runtime/src/runServerApp.tsx b/packages/runtime/src/runServerApp.tsx
index 28e4a8c26c..2f402b1090 100644
--- a/packages/runtime/src/runServerApp.tsx
+++ b/packages/runtime/src/runServerApp.tsx
@@ -2,21 +2,14 @@ import type { ServerResponse, IncomingMessage } from 'http';
import * as React from 'react';
import * as ReactDOMServer from 'react-dom/server';
import type { Location } from 'history';
-import { parsePath } from 'history';
import { isFunction } from '@ice/shared';
-import type { RenderToPipeableStreamOptions, OnAllReadyParams, NodeWritablePiper } from './server/streamRender.js';
+import type { OnAllReadyParams, NodeWritablePiper } from './server/streamRender.js';
import type {
AppContext, RouteItem, ServerContext,
- AppExport,
- AssetsManifest,
RouteMatch,
- PageConfig,
- RenderMode,
- DocumentComponent,
- RuntimeModules,
AppData,
ServerAppRouterProps,
- DocumentDataLoaderConfig,
+ ServerRenderOptions as RenderOptions,
} from './types.js';
import Runtime from './runtime.js';
import { AppContextProvider } from './AppContext.js';
@@ -24,7 +17,6 @@ import { getAppData } from './appData.js';
import getAppConfig from './appConfig.js';
import { DocumentContextProvider } from './Document.js';
import { loadRouteModules } from './routes.js';
-import type { RouteLoaderOptions } from './routes.js';
import { pipeToString, renderToNodeStream } from './server/streamRender.js';
import getRequestContext from './requestContext.js';
import matchRoutes from './matchRoutes.js';
@@ -32,38 +24,13 @@ import getCurrentRoutePath from './utils/getCurrentRoutePath.js';
import ServerRouter from './ServerRouter.js';
import { renderHTMLToJS } from './renderHTMLToJS.js';
import addLeadingSlash from './utils/addLeadingSlash.js';
-
-
-export interface RenderOptions {
- app: AppExport;
- assetsManifest: AssetsManifest;
- createRoutes: (options: Pick) => RouteItem[];
- runtimeModules: RuntimeModules;
- documentDataLoader?: DocumentDataLoaderConfig;
- Document?: DocumentComponent;
- documentOnly?: boolean;
- preRender?: boolean;
- renderMode?: RenderMode;
- // basename is used both for server and client, once set, it will be sync to client.
- basename?: string;
- // serverOnlyBasename is used when just want to change basename for server.
- serverOnlyBasename?: string;
- routePath?: string;
- disableFallback?: boolean;
- routesConfig: {
- [key: string]: PageConfig;
- };
- runtimeOptions?: Record;
- distType?: Array<'html' | 'javascript'>;
- prependCode?: string;
- serverData?: any;
- streamOptions?: RenderToPipeableStreamOptions;
-}
+import getLocation from './utils/getLocation.js';
interface Piper {
pipe: NodeWritablePiper;
- fallback: Function;
+ fallback?: Function;
}
+
interface Response {
statusCode?: number;
statusText?: string;
@@ -381,16 +348,16 @@ interface RenderServerEntry {
async function renderServerEntry(
{
runtime,
- matches,
location,
renderOptions,
}: RenderServerEntry,
): Promise {
const { Document } = renderOptions;
const appContext = runtime.getAppContext();
- const { routes, routePath, loaderData, basename } = appContext;
+ const { routes, matches, routePath, loaderData, basename } = appContext;
const AppRuntimeProvider = runtime.composeAppProvider() || React.Fragment;
const AppRouter = runtime.getAppRouter();
+
const routerContext: ServerAppRouterProps['routerContext'] = {
// @ts-expect-error matches type should be use `AgnosticDataRouteMatch[]`
matches,
@@ -405,7 +372,7 @@ async function renderServerEntry(
),
};
- const element = (
+ const element: JSX.Element = (
@@ -417,10 +384,6 @@ async function renderServerEntry(
);
- const pipe = renderToNodeStream(element, {
- renderOptions,
- routerContext,
- });
const fallback = () => {
return renderDocument({
@@ -433,6 +396,11 @@ async function renderServerEntry(
});
};
+ const pipe: NodeWritablePiper = renderToNodeStream(element, {
+ renderOptions,
+ routerContext,
+ });
+
return {
value: {
pipe,
@@ -524,21 +492,3 @@ function renderDocument(options: RenderDocumentOptions): Response {
};
}
-/**
- * ref: https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/server.tsx
- */
-const REGEXP_WITH_HOSTNAME = /^https?:\/\/[^/]+/i;
-function getLocation(url: string) {
- // In case of invalid URL, provide a default base url.
- const locationPath = url.replace(REGEXP_WITH_HOSTNAME, '') || '/';
- const locationProps = parsePath(locationPath);
- const location: Location = {
- pathname: locationProps.pathname || '/',
- search: locationProps.search || '',
- hash: locationProps.hash || '',
- state: null,
- key: 'default',
- };
-
- return location;
-}
diff --git a/packages/runtime/src/server/streamRender.tsx b/packages/runtime/src/server/streamRender.tsx
index 34ce4813a6..e55293908f 100644
--- a/packages/runtime/src/server/streamRender.tsx
+++ b/packages/runtime/src/server/streamRender.tsx
@@ -2,8 +2,7 @@ import * as Stream from 'stream';
import type * as StreamType from 'stream';
import * as ReactDOMServer from 'react-dom/server';
import { getAllAssets } from '../Document.js';
-import type { RenderOptions } from '../runServerApp.js';
-import type { ServerAppRouterProps } from '../types.js';
+import type { ServerAppRouterProps, ServerRenderOptions as RenderOptions } from '../types.js';
const { Writable } = Stream;
@@ -117,4 +116,4 @@ export function pipeToString(input): Promise {
},
});
});
-}
\ No newline at end of file
+}
diff --git a/packages/runtime/src/types.ts b/packages/runtime/src/types.ts
index fdf1ce211b..09ac67ce7a 100644
--- a/packages/runtime/src/types.ts
+++ b/packages/runtime/src/types.ts
@@ -3,6 +3,8 @@ import type { InitialEntry, AgnosticRouteObject, Location, History, RouterInit,
import type { ComponentType, PropsWithChildren } from 'react';
import type { HydrationOptions, Root } from 'react-dom/client';
import type { Params, RouteObject } from 'react-router-dom';
+import type { RenderToPipeableStreamOptions } from './server/streamRender.js';
+import type { RouteLoaderOptions } from './routes.js';
type UseConfig = () => RouteConfig>;
type UseData = () => RouteData;
@@ -313,3 +315,30 @@ declare global {
env: Record;
}
}
+
+export interface ServerRenderOptions {
+ app: AppExport;
+ assetsManifest: AssetsManifest;
+ createRoutes: (options: Pick) => RouteItem[];
+ runtimeModules: RuntimeModules;
+ documentDataLoader?: DocumentDataLoaderConfig;
+ preRender?: boolean;
+ Document?: DocumentComponent;
+ documentOnly?: boolean;
+ renderMode?: RenderMode;
+ // basename is used both for server and client, once set, it will be sync to client.
+ basename?: string;
+ // serverOnlyBasename is used when just want to change basename for server.
+ serverOnlyBasename?: string;
+ routePath?: string;
+ disableFallback?: boolean;
+ routesConfig: {
+ [key: string]: PageConfig;
+ };
+ runtimeOptions?: Record;
+ distType?: Array<'html' | 'javascript'>;
+ prependCode?: string;
+ serverData?: any;
+ streamOptions?: RenderToPipeableStreamOptions;
+ clientManifest?: any;
+}
diff --git a/packages/runtime/src/utils/getLocation.ts b/packages/runtime/src/utils/getLocation.ts
new file mode 100644
index 0000000000..fc3d6c9e72
--- /dev/null
+++ b/packages/runtime/src/utils/getLocation.ts
@@ -0,0 +1,22 @@
+/**
+ * ref: https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/server.tsx
+ */
+import { parsePath } from 'history';
+import type { Location } from 'history';
+
+const REGEXP_WITH_HOSTNAME = /^https?:\/\/[^/]+/i;
+
+export default function getLocation(url: string) {
+ // In case of invalid URL, provide a default base url.
+ const locationPath = url.replace(REGEXP_WITH_HOSTNAME, '') || '/';
+ const locationProps = parsePath(locationPath);
+ const location: Location = {
+ pathname: locationProps.pathname || '/',
+ search: locationProps.search || '',
+ hash: locationProps.hash || '',
+ state: null,
+ key: 'default',
+ };
+
+ return location;
+}
diff --git a/packages/shared-config/src/getCompilerPlugins.ts b/packages/shared-config/src/getCompilerPlugins.ts
index 3e4706321b..b4d1782d35 100644
--- a/packages/shared-config/src/getCompilerPlugins.ts
+++ b/packages/shared-config/src/getCompilerPlugins.ts
@@ -50,6 +50,7 @@ function getCompilerPlugins(rootDir: string, config: Config, compiler: Compiler,
polyfill,
enableEnv,
getRoutesFile,
+ serverComponent,
} = config;
const compilerPlugins = [];
@@ -74,6 +75,8 @@ function getCompilerPlugins(rootDir: string, config: Config, compiler: Compiler,
polyfill,
enableEnv,
getRoutesFile,
+ serverComponent,
+ isServer: true,
}));
}
diff --git a/packages/shared-config/src/types.ts b/packages/shared-config/src/types.ts
index 0d0b90e8e2..68ea8e56c5 100644
--- a/packages/shared-config/src/types.ts
+++ b/packages/shared-config/src/types.ts
@@ -153,7 +153,7 @@ export interface Config {
redirectImports?: ImportDeclaration[];
entry?: {
- [key: string]: string;
+ [key: string]: string | string[];
};
splitChunks?: boolean | 'vendors' | 'chunks' | 'page-vendors' | webpack.Configuration['optimization']['splitChunks'];
@@ -205,4 +205,6 @@ export interface Config {
useDevServer?: boolean;
useDataLoader?: boolean;
+
+ serverComponent?: boolean;
}
diff --git a/packages/shared-config/src/unPlugins/compilation.ts b/packages/shared-config/src/unPlugins/compilation.ts
index f45b2f4f0a..ea319ece78 100644
--- a/packages/shared-config/src/unPlugins/compilation.ts
+++ b/packages/shared-config/src/unPlugins/compilation.ts
@@ -1,5 +1,5 @@
import path from 'path';
-import { swc, swcPluginRemoveExport, swcPluginKeepExport, swcPluginNodeTransform, coreJsPath, caniuseLite } from '@ice/bundles';
+import { swc, swcPluginRemoveExport, swcPluginKeepExport, swcPluginNodeTransform, swcPluginReactServerComponent, coreJsPath, caniuseLite } from '@ice/bundles';
import browserslist from 'browserslist';
import consola from 'consola';
import type { SwcConfig, ReactConfig } from '@ice/bundles';
@@ -24,6 +24,8 @@ interface Options {
polyfill?: Config['polyfill'];
enableEnv?: boolean;
getRoutesFile?: () => string[];
+ serverComponent?: boolean;
+ isServer?: boolean;
}
const formatId = (id: string) => id.split(path.sep).join('/');
@@ -44,6 +46,8 @@ const compilationPlugin = (options: Options): UnpluginOptions => {
polyfill,
enableEnv,
getRoutesFile,
+ serverComponent,
+ isServer,
} = options;
const { removeExportExprs, compilationConfig, keepExports, nodeTransform } = swcOptions;
@@ -105,6 +109,16 @@ const compilationPlugin = (options: Options): UnpluginOptions => {
const swcPlugins = [];
+ if (serverComponent) {
+ swcPlugins.push([
+ swcPluginReactServerComponent,
+ {
+ isServer,
+ assertImports: false,
+ },
+ ]);
+ }
+
// handle app.tsx and page entries only
if (removeExportExprs) {
if (isRouteEntry(id) || isAppEntry(id)) {
@@ -216,7 +230,6 @@ export function getJsxTransformOptions({
},
module: {
type: 'es6',
- noInterop: false,
},
};
if (enableEnv) {
diff --git a/packages/webpack-config/src/index.ts b/packages/webpack-config/src/index.ts
index b6ee1e705d..fa72b2b3e6 100644
--- a/packages/webpack-config/src/index.ts
+++ b/packages/webpack-config/src/index.ts
@@ -108,6 +108,7 @@ export function getWebpackConfig(options: GetWebpackConfigOptions): Configuratio
enableCopyPlugin,
polyfill,
enableRpx2Vw = true,
+ serverComponent,
} = config;
const absoluteOutputDir = path.isAbsolute(outputDir) ? outputDir : path.join(rootDir, outputDir);
const dev = mode !== 'production';
@@ -163,6 +164,8 @@ export function getWebpackConfig(options: GetWebpackConfigOptions): Configuratio
polyfill,
enableEnv: true,
getRoutesFile,
+ serverComponent,
+ isServer: false,
});
const webpackConfig = {
mode,
diff --git a/packages/webpack-config/src/webpackPlugins/AssetsManifestPlugin.ts b/packages/webpack-config/src/webpackPlugins/AssetsManifestPlugin.ts
index fe494cd1a9..e3e8ad98d2 100644
--- a/packages/webpack-config/src/webpackPlugins/AssetsManifestPlugin.ts
+++ b/packages/webpack-config/src/webpackPlugins/AssetsManifestPlugin.ts
@@ -9,13 +9,15 @@ interface Assets {
getFiles: () => string[];
}
-function filterAssets(assets: Assets): string[] {
+function filterAssets(compilation: Compilation, assets: Assets): string[] {
return (
assets
?.getFiles()
.filter((file: string) => {
+ const exists = compilation.assets[file];
// We don't want to include `.hot-update.js` files into the initial page
- return /(? file.replace(/\\/g, '/')) ?? []
);
@@ -43,19 +45,38 @@ export default class AssetsManifestPlugin {
assets[asset.sourceFilename] = asset.contenthash;
}
}
+
const entryFiles = [];
for (const entrypoint of entrypoints) {
const entryName = entrypoint.name;
- const mainFiles = filterAssets(entrypoint);
+
+ const entryChunk = entrypoint.getEntrypointChunk();
+
+ // Keep only main chunk as entry files.
+ if (entryChunk.runtime !== entryChunk.name) {
+ continue;
+ }
+
+ const entryFile = [...entryChunk.files].filter((file) => file.endsWith('.js'))?.[0];
+ // Temp files may have been deleted.
+ if (!compilation.assets[entryFile]) {
+ continue;
+ }
+
+ const mainFiles = filterAssets(compilation, entrypoint);
+ if (!mainFiles.length) {
+ continue;
+ }
+
+ entryFiles.push(entryFile);
entries[entryName] = mainFiles;
- const jsMainFiles = mainFiles.filter((file) => file.endsWith('.js'));
- entryFiles.push(jsMainFiles[0]);
- const chunks = entrypoint?.getChildren();
- chunks.forEach((chunk) => {
+
+ const childChunks = entrypoint?.getChildren();
+ childChunks.forEach((chunk) => {
// Dynamic import missing chunk name, but not output solid assets.
const chunkName = chunk.name;
if (chunkName) {
- pages[chunkName.replace(/^p_/, '')] = filterAssets(chunk);
+ pages[chunkName.replace(/^p_/, '').replace(/^rsc_/, '')] = filterAssets(compilation, chunk);
}
});
}
@@ -76,6 +97,7 @@ export default class AssetsManifestPlugin {
const output = JSON.stringify(manifest, null, 2);
// Emit asset manifest for server compile.
compilation.emitAsset(this.fileName, new webpack.sources.RawSource(output));
+
// Inject assets manifest to entry file.
entryFiles.forEach((entryFile) => {
compilation.assets[entryFile] = new webpack.sources.ConcatSource(
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d477baff7d..39ce40dd0f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -843,7 +843,7 @@ importers:
dependencies:
'@alifd/next':
specifier: ^1.25.49
- version: 1.26.2(@alifd/meet-react@2.9.7)(moment@2.29.4)(react-dom@18.2.0)(react@18.2.0)
+ version: 1.26.2(@alifd/meet-react@2.9.8)(moment@2.29.4)(react-dom@18.2.0)(react@18.2.0)
'@ice/runtime':
specifier: workspace:*
version: link:../../packages/runtime
@@ -960,7 +960,7 @@ importers:
version: 29.5.0
ts-jest:
specifier: ^28.0.8
- version: 28.0.8(@babel/core@7.23.3)(jest@28.1.3)(typescript@4.9.5)
+ version: 28.0.8(@babel/core@7.21.0)(jest@28.1.3)(typescript@4.9.5)
typescript:
specifier: ^4.8.2
version: 4.9.5
@@ -1077,6 +1077,28 @@ importers:
specifier: ^18.0.6
version: 18.0.11
+ examples/with-rsc:
+ dependencies:
+ '@ice/app':
+ specifier: workspace:*
+ version: link:../../packages/ice
+ '@ice/runtime':
+ specifier: workspace:*
+ version: link:../../packages/runtime
+ react:
+ specifier: ^18.2.0
+ version: 18.2.0
+ react-dom:
+ specifier: ^18.2.0
+ version: 18.2.0(react@18.2.0)
+ devDependencies:
+ '@types/react':
+ specifier: ^18.0.17
+ version: 18.0.34
+ '@types/react-dom':
+ specifier: ^18.0.6
+ version: 18.0.11
+
examples/with-ssg:
dependencies:
'@ice/app':
@@ -1281,21 +1303,27 @@ importers:
'@ice/swc-plugin-node-transform':
specifier: 0.2.0
version: 0.2.0
+ '@ice/swc-plugin-react-server-component':
+ specifier: 0.1.1
+ version: 0.1.1
'@ice/swc-plugin-remove-export':
specifier: 0.2.0
version: 0.2.0
'@swc/core':
- specifier: 1.3.80
- version: 1.3.80
+ specifier: 1.3.85
+ version: 1.3.85
+ acorn-loose:
+ specifier: ^8.3.0
+ version: 8.3.0
ansi-html-community:
specifier: ^0.0.8
version: 0.0.8
browserslist:
specifier: ^4.21.3
- version: 4.21.5
+ version: 4.22.2
caniuse-lite:
specifier: ^1.0.30001561
- version: 1.0.30001564
+ version: 1.0.30001571
chokidar:
specifier: 3.5.3
version: 3.5.3
@@ -1331,7 +1359,7 @@ importers:
version: 27.5.1
json-parse-even-better-errors:
specifier: ^3.0.0
- version: 3.0.0
+ version: 3.0.1
less:
specifier: 4.1.2
version: 4.1.2
@@ -1361,10 +1389,10 @@ importers:
version: 3.2.3
zod:
specifier: ^3.22.3
- version: 3.22.3
+ version: 3.22.4
zod-validation-error:
specifier: 1.2.0
- version: 1.2.0(zod@3.22.3)
+ version: 1.2.0(zod@3.22.4)
devDependencies:
'@pmmmwh/react-refresh-webpack-plugin':
specifier: 0.5.10
@@ -1374,7 +1402,7 @@ importers:
version: 0.4.3
'@rspack/dev-server':
specifier: 0.4.3
- version: 0.4.3(@rspack/core@0.4.3)(@swc/core@1.3.80)(esbuild@0.17.16)(react-refresh@0.14.0)
+ version: 0.4.3(@rspack/core@0.4.3)(@swc/core@1.3.85)(esbuild@0.17.16)(react-refresh@0.14.0)
'@rspack/plugin-react-refresh':
specifier: 0.4.3
version: 0.4.3(react-refresh@0.14.0)
@@ -1386,7 +1414,7 @@ importers:
version: 4.14.191
'@types/webpack-bundle-analyzer':
specifier: ^4.4.1
- version: 4.6.0(@swc/core@1.3.80)(esbuild@0.17.16)
+ version: 4.6.0(@swc/core@1.3.85)(esbuild@0.17.16)
bonjour-service:
specifier: ^1.0.13
version: 1.1.0
@@ -1498,12 +1526,24 @@ importers:
postcss-preset-env:
specifier: 7.4.3
version: 7.4.3(postcss@8.4.31)
+ react-builtin:
+ specifier: npm:react@18.3.0-canary-dd480ef92-20230822
+ version: /react@18.3.0-canary-dd480ef92-20230822
+ react-dom-builtin:
+ specifier: npm:react-dom@18.3.0-canary-dd480ef92-20230822
+ version: /react-dom@18.3.0-canary-dd480ef92-20230822(react@18.3.0-canary-dd480ef92-20230822)
+ react-server-dom-webpack:
+ specifier: 18.3.0-canary-dd480ef92-20230822
+ version: 18.3.0-canary-dd480ef92-20230822(react-dom@18.3.0-canary-dd480ef92-20230822)(react@18.3.0-canary-dd480ef92-20230822)(webpack@5.88.2)
rimraf:
specifier: ^3.0.2
version: 3.0.2
sass-loader:
specifier: 12.6.0
version: 12.6.0(sass@1.50.0)(webpack@5.88.2)
+ scheduler-builtin:
+ specifier: npm:scheduler@0.24.0-canary-dd480ef92-20230822
+ version: /scheduler@0.24.0-canary-dd480ef92-20230822
schema-utils:
specifier: ^4.0.0
version: 4.0.0
@@ -1530,7 +1570,7 @@ importers:
version: 5.14.2
terser-webpack-plugin:
specifier: 5.3.5
- version: 5.3.5(@swc/core@1.3.80)(esbuild@0.17.16)(webpack@5.88.2)
+ version: 5.3.5(@swc/core@1.3.85)(esbuild@0.17.16)(webpack@5.88.2)
trusted-cert:
specifier: 1.1.3
version: 1.1.3
@@ -1542,7 +1582,7 @@ importers:
version: 1.5.1(patch_hash=eanypstkeladyqkfllfbryx6lu)
webpack:
specifier: 5.88.2
- version: 5.88.2(@swc/core@1.3.80)(esbuild@0.17.16)
+ version: 5.88.2(@swc/core@1.3.85)(esbuild@0.17.16)
webpack-bundle-analyzer:
specifier: 4.5.0
version: 4.5.0
@@ -2224,26 +2264,26 @@ importers:
dependencies:
'@unocss/config':
specifier: ^0.57.6
- version: 0.57.6
+ version: 0.57.7
'@unocss/core':
specifier: ^0.57.6
- version: 0.57.6
+ version: 0.57.7
'@unocss/reset':
specifier: ^0.57.6
- version: 0.57.6
+ version: 0.57.7
'@unocss/webpack':
specifier: ^0.57.6
- version: 0.57.6(webpack@5.88.2)
+ version: 0.57.7(webpack@5.88.2)
unocss:
specifier: ^0.57.6
- version: 0.57.6(@unocss/webpack@0.57.6)(postcss@8.4.31)(vite@3.2.5)
+ version: 0.57.7(@unocss/webpack@0.57.7)(postcss@8.4.31)(vite@3.2.5)
devDependencies:
'@ice/app':
specifier: workspace:^
version: link:../ice
'@nuxt/schema':
specifier: ^3.8.1
- version: 3.8.2
+ version: 3.9.0
packages/rax-compat:
dependencies:
@@ -2347,11 +2387,14 @@ importers:
specifier: ^18.0.3
version: 18.0.11
react:
- specifier: ^18.0.0
+ specifier: ^18.2.0
version: 18.2.0
react-dom:
- specifier: ^18.0.0
+ specifier: ^18.2.0
version: 18.2.0(react@18.2.0)
+ react-server-dom-webpack:
+ specifier: 18.3.0-canary-dd480ef92-20230822
+ version: 18.3.0-canary-dd480ef92-20230822(react-dom@18.2.0)(react@18.2.0)(webpack@5.88.2)
regenerator-runtime:
specifier: ^0.13.9
version: 0.13.11
@@ -2372,7 +2415,7 @@ importers:
version: 4.2.1
browserslist:
specifier: ^4.22.1
- version: 4.22.1
+ version: 4.22.2
consola:
specifier: ^2.15.3
version: 2.15.3
@@ -2656,8 +2699,8 @@ packages:
universal-transition: 1.1.1
dev: false
- /@alifd/meet-react@2.9.7(rax@1.2.3)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-OiIvw7XFwKNEUU2nOuwB/yoddrk118Dpagii7Hn9+vHxucrUuwfY00uY6pW/Z7MbwPwjQBJYiuCdFWHX/9ZFbQ==}
+ /@alifd/meet-react@2.9.8(rax@1.2.3)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-rGzn1rXbMRhEEcs9Le6ZCYK6PPWtdmbMfIFx2M4P2JwH8erIfV95i7x24djHrMD4FxI45SO8aCxcVUrZoN/1SQ==}
peerDependencies:
react: '>=16.0.0'
react-dom: '>=16.0.0'
@@ -2685,7 +2728,7 @@ packages:
- rax
dev: false
- /@alifd/next@1.26.2(@alifd/meet-react@2.9.7)(moment@2.29.4)(react-dom@18.2.0)(react@18.2.0):
+ /@alifd/next@1.26.2(@alifd/meet-react@2.9.8)(moment@2.29.4)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-Qz7mJ50lMg3h4yWhV0uIJKzYV4O0zJGN/dZa6xU9+26Yu2VUKMECCcoxBRyiCXVdSNb3XPsLKE8/37R0fw8CGg==}
peerDependencies:
'@alifd/meet-react': ^2.0.0
@@ -2694,7 +2737,7 @@ packages:
react-dom: '>=16.0.0'
dependencies:
'@alifd/field': 1.5.8
- '@alifd/meet-react': 2.9.7(rax@1.2.3)(react-dom@18.2.0)(react@18.2.0)
+ '@alifd/meet-react': 2.9.8(rax@1.2.3)(react-dom@18.2.0)(react@18.2.0)
'@alifd/overlay': 0.2.12
'@alifd/validate': 1.2.3
babel-runtime: 6.26.0
@@ -2836,8 +2879,8 @@ packages:
find-up: 5.0.0
dev: false
- /@antfu/utils@0.7.6:
- resolution: {integrity: sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w==}
+ /@antfu/utils@0.7.7:
+ resolution: {integrity: sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==}
dev: false
/@applint/commitlint-config@1.0.2:
@@ -2941,8 +2984,8 @@ packages:
dependencies:
'@babel/highlight': 7.18.6
- /@babel/code-frame@7.23.4:
- resolution: {integrity: sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==}
+ /@babel/code-frame@7.23.5:
+ resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/highlight': 7.23.4
@@ -2952,8 +2995,8 @@ packages:
resolution: {integrity: sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==}
engines: {node: '>=6.9.0'}
- /@babel/compat-data@7.23.3:
- resolution: {integrity: sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==}
+ /@babel/compat-data@7.23.5:
+ resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==}
engines: {node: '>=6.9.0'}
/@babel/core@7.12.9:
@@ -2967,7 +3010,7 @@ packages:
'@babel/parser': 7.18.10
'@babel/template': 7.20.7
'@babel/traverse': 7.18.10
- '@babel/types': 7.23.4
+ '@babel/types': 7.21.2
convert-source-map: 1.9.0
debug: 4.3.4
gensync: 1.0.0-beta.2
@@ -3001,20 +3044,20 @@ packages:
transitivePeerDependencies:
- supports-color
- /@babel/core@7.23.3:
- resolution: {integrity: sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==}
+ /@babel/core@7.23.6:
+ resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==}
engines: {node: '>=6.9.0'}
dependencies:
'@ampproject/remapping': 2.2.0
- '@babel/code-frame': 7.23.4
- '@babel/generator': 7.23.4
- '@babel/helper-compilation-targets': 7.22.15
- '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3)
- '@babel/helpers': 7.23.4
- '@babel/parser': 7.23.4
+ '@babel/code-frame': 7.23.5
+ '@babel/generator': 7.23.6
+ '@babel/helper-compilation-targets': 7.23.6
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6)
+ '@babel/helpers': 7.23.6
+ '@babel/parser': 7.23.6
'@babel/template': 7.22.15
- '@babel/traverse': 7.23.4
- '@babel/types': 7.23.4
+ '@babel/traverse': 7.23.6
+ '@babel/types': 7.23.6
convert-source-map: 2.0.0
debug: 4.3.4
gensync: 1.0.0-beta.2
@@ -3041,7 +3084,7 @@ packages:
resolution: {integrity: sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.21.2
'@jridgewell/gen-mapping': 0.3.2
jsesc: 2.5.2
@@ -3054,11 +3097,11 @@ packages:
'@jridgewell/trace-mapping': 0.3.17
jsesc: 2.5.2
- /@babel/generator@7.23.4:
- resolution: {integrity: sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ==}
+ /@babel/generator@7.23.6:
+ resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.6
'@jridgewell/gen-mapping': 0.3.2
'@jridgewell/trace-mapping': 0.3.17
jsesc: 2.5.2
@@ -3073,7 +3116,7 @@ packages:
resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.6
dev: false
/@babel/helper-builder-binary-assignment-operator-visitor@7.18.9:
@@ -3081,7 +3124,7 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-explode-assignable-expression': 7.18.6
- '@babel/types': 7.23.4
+ '@babel/types': 7.21.2
/@babel/helper-compilation-targets@7.20.7(@babel/core@7.21.0):
resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==}
@@ -3092,17 +3135,17 @@ packages:
'@babel/compat-data': 7.21.0
'@babel/core': 7.21.0
'@babel/helper-validator-option': 7.21.0
- browserslist: 4.22.1
+ browserslist: 4.22.2
lru-cache: 5.1.1
semver: 6.3.0
- /@babel/helper-compilation-targets@7.22.15:
- resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==}
+ /@babel/helper-compilation-targets@7.23.6:
+ resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/compat-data': 7.23.3
- '@babel/helper-validator-option': 7.22.15
- browserslist: 4.22.1
+ '@babel/compat-data': 7.23.5
+ '@babel/helper-validator-option': 7.23.5
+ browserslist: 4.22.2
lru-cache: 5.1.1
semver: 6.3.1
@@ -3124,19 +3167,19 @@ packages:
transitivePeerDependencies:
- supports-color
- /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.3):
- resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==}
+ /@babel/helper-create-class-features-plugin@7.23.6(@babel/core@7.23.6):
+ resolution: {integrity: sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/core': 7.23.3
+ '@babel/core': 7.23.6
'@babel/helper-annotate-as-pure': 7.22.5
'@babel/helper-environment-visitor': 7.22.20
'@babel/helper-function-name': 7.23.0
'@babel/helper-member-expression-to-functions': 7.23.0
'@babel/helper-optimise-call-expression': 7.22.5
- '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.3)
+ '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6)
'@babel/helper-skip-transparent-expression-wrappers': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6
semver: 6.3.1
@@ -3179,7 +3222,7 @@ packages:
resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.21.2
/@babel/helper-function-name@7.21.0:
resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==}
@@ -3193,7 +3236,7 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/template': 7.22.15
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.6
/@babel/helper-hoist-variables@7.18.6:
resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
@@ -3205,19 +3248,19 @@ packages:
resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.6
/@babel/helper-member-expression-to-functions@7.21.0:
resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.21.2
/@babel/helper-member-expression-to-functions@7.23.0:
resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.6
dev: false
/@babel/helper-module-imports@7.18.6:
@@ -3230,7 +3273,7 @@ packages:
resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.6
/@babel/helper-module-transforms@7.21.2:
resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==}
@@ -3247,13 +3290,13 @@ packages:
transitivePeerDependencies:
- supports-color
- /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.3):
+ /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6):
resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/core': 7.23.3
+ '@babel/core': 7.23.6
'@babel/helper-environment-visitor': 7.22.20
'@babel/helper-module-imports': 7.22.15
'@babel/helper-simple-access': 7.22.5
@@ -3264,13 +3307,13 @@ packages:
resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.21.2
/@babel/helper-optimise-call-expression@7.22.5:
resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.6
dev: false
/@babel/helper-plugin-utils@7.10.4:
@@ -3295,7 +3338,7 @@ packages:
'@babel/helper-annotate-as-pure': 7.18.6
'@babel/helper-environment-visitor': 7.18.9
'@babel/helper-wrap-function': 7.20.5
- '@babel/types': 7.23.4
+ '@babel/types': 7.21.2
transitivePeerDependencies:
- supports-color
@@ -3308,17 +3351,17 @@ packages:
'@babel/helper-optimise-call-expression': 7.18.6
'@babel/template': 7.20.7
'@babel/traverse': 7.21.2
- '@babel/types': 7.23.4
+ '@babel/types': 7.21.2
transitivePeerDependencies:
- supports-color
- /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.3):
+ /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.6):
resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/core': 7.23.3
+ '@babel/core': 7.23.6
'@babel/helper-environment-visitor': 7.22.20
'@babel/helper-member-expression-to-functions': 7.23.0
'@babel/helper-optimise-call-expression': 7.22.5
@@ -3334,19 +3377,19 @@ packages:
resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.6
/@babel/helper-skip-transparent-expression-wrappers@7.20.0:
resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.21.2
/@babel/helper-skip-transparent-expression-wrappers@7.22.5:
resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.6
dev: false
/@babel/helper-split-export-declaration@7.18.6:
@@ -3359,7 +3402,7 @@ packages:
resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.6
/@babel/helper-string-parser@7.19.4:
resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
@@ -3381,8 +3424,8 @@ packages:
resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==}
engines: {node: '>=6.9.0'}
- /@babel/helper-validator-option@7.22.15:
- resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==}
+ /@babel/helper-validator-option@7.23.5:
+ resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==}
engines: {node: '>=6.9.0'}
/@babel/helper-wrap-function@7.20.5:
@@ -3392,7 +3435,7 @@ packages:
'@babel/helper-function-name': 7.21.0
'@babel/template': 7.20.7
'@babel/traverse': 7.21.2
- '@babel/types': 7.23.4
+ '@babel/types': 7.21.2
transitivePeerDependencies:
- supports-color
@@ -3406,13 +3449,13 @@ packages:
transitivePeerDependencies:
- supports-color
- /@babel/helpers@7.23.4:
- resolution: {integrity: sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw==}
+ /@babel/helpers@7.23.6:
+ resolution: {integrity: sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/template': 7.22.15
- '@babel/traverse': 7.23.4
- '@babel/types': 7.23.4
+ '@babel/traverse': 7.23.6
+ '@babel/types': 7.23.6
transitivePeerDependencies:
- supports-color
@@ -3446,12 +3489,12 @@ packages:
dependencies:
'@babel/types': 7.21.2
- /@babel/parser@7.23.4:
- resolution: {integrity: sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==}
+ /@babel/parser@7.23.6:
+ resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.6
/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.21.0):
resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==}
@@ -3766,13 +3809,13 @@ packages:
'@babel/core': 7.21.0
'@babel/helper-plugin-utils': 7.20.2
- /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.3):
+ /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.6):
resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.23.3
+ '@babel/core': 7.23.6
'@babel/helper-plugin-utils': 7.22.5
dev: false
@@ -3859,13 +3902,13 @@ packages:
'@babel/core': 7.21.0
'@babel/helper-plugin-utils': 7.20.2
- /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.3):
+ /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.6):
resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.23.3
+ '@babel/core': 7.23.6
'@babel/helper-plugin-utils': 7.22.5
dev: false
@@ -4039,14 +4082,14 @@ packages:
transitivePeerDependencies:
- supports-color
- /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.3):
+ /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.6):
resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.23.3
- '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3)
+ '@babel/core': 7.23.6
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6)
'@babel/helper-plugin-utils': 7.22.5
'@babel/helper-simple-access': 7.22.5
dev: false
@@ -4299,17 +4342,17 @@ packages:
transitivePeerDependencies:
- supports-color
- /@babel/plugin-transform-typescript@7.23.4(@babel/core@7.23.3):
- resolution: {integrity: sha512-39hCCOl+YUAyMOu6B9SmUTiHUU0t/CxJNUmY3qRdJujbqi+lrQcL11ysYUsAvFWPBdhihrv1z0oRG84Yr3dODQ==}
+ /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.6):
+ resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.23.3
+ '@babel/core': 7.23.6
'@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3)
+ '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6)
'@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.3)
+ '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6)
dev: false
/@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.21.0):
@@ -4455,18 +4498,18 @@ packages:
transitivePeerDependencies:
- supports-color
- /@babel/preset-typescript@7.23.3(@babel/core@7.23.3):
+ /@babel/preset-typescript@7.23.3(@babel/core@7.23.6):
resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.23.3
+ '@babel/core': 7.23.6
'@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-validator-option': 7.22.15
- '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.3)
- '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.3)
- '@babel/plugin-transform-typescript': 7.23.4(@babel/core@7.23.3)
+ '@babel/helper-validator-option': 7.23.5
+ '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6)
+ '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6)
+ '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.6)
dev: false
/@babel/regjsgen@0.8.0:
@@ -4485,8 +4528,8 @@ packages:
dependencies:
regenerator-runtime: 0.13.11
- /@babel/standalone@7.23.4:
- resolution: {integrity: sha512-cXT2Xi9YVJEi7kLjqoeZBXjrNt1PASOh4Zi3jp5yXT06Gt4ZeRETfYH9y5x3RQhFTpNxaA1300lzK1obiy6tcQ==}
+ /@babel/standalone@7.23.6:
+ resolution: {integrity: sha512-+AzS6BZwZdSosrgS/TiGDYLxtlefARKClWgJ4ql//XfmV9KbPWbkEekvbvDRJ8a6qog8E9j3CziHLz5dbIEMyw==}
engines: {node: '>=6.9.0'}
dev: true
@@ -4502,9 +4545,9 @@ packages:
resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/code-frame': 7.23.4
- '@babel/parser': 7.23.4
- '@babel/types': 7.23.4
+ '@babel/code-frame': 7.23.5
+ '@babel/parser': 7.23.6
+ '@babel/types': 7.23.6
/@babel/traverse@7.18.10:
resolution: {integrity: sha512-J7ycxg0/K9XCtLyHf0cz2DqDihonJeIo+z+HEdRe9YuT8TY4A66i+Ab2/xZCEW7Ro60bPCBBfqqboHSamoV3+g==}
@@ -4540,18 +4583,18 @@ packages:
transitivePeerDependencies:
- supports-color
- /@babel/traverse@7.23.4:
- resolution: {integrity: sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg==}
+ /@babel/traverse@7.23.6:
+ resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/code-frame': 7.23.4
- '@babel/generator': 7.23.4
+ '@babel/code-frame': 7.23.5
+ '@babel/generator': 7.23.6
'@babel/helper-environment-visitor': 7.22.20
'@babel/helper-function-name': 7.23.0
'@babel/helper-hoist-variables': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6
- '@babel/parser': 7.23.4
- '@babel/types': 7.23.4
+ '@babel/parser': 7.23.6
+ '@babel/types': 7.23.6
debug: 4.3.4
globals: 11.12.0
transitivePeerDependencies:
@@ -4565,8 +4608,8 @@ packages:
'@babel/helper-validator-identifier': 7.19.1
to-fast-properties: 2.0.0
- /@babel/types@7.23.4:
- resolution: {integrity: sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==}
+ /@babel/types@7.23.6:
+ resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-string-parser': 7.23.4
@@ -6748,7 +6791,7 @@ packages:
'@rollup/pluginutils': 4.2.1
'@swc/core': 1.3.32
acorn: 8.8.2
- autoprefixer: 10.4.13(postcss@8.4.31)
+ autoprefixer: 10.4.13(postcss@8.4.25)
build-scripts: 2.1.0
cac: 6.7.14
chokidar: 3.5.3
@@ -6762,7 +6805,7 @@ packages:
lodash.merge: 4.6.2
magic-string: 0.25.9
picocolors: 1.0.0
- postcss: 8.4.31
+ postcss: 8.4.25
rollup: 2.79.1
rollup-plugin-styles: 4.0.0(rollup@2.79.1)
rollup-plugin-visualizer: 5.9.0(rollup@2.79.1)
@@ -6817,6 +6860,10 @@ packages:
resolution: {integrity: sha512-06NtOUGVAUKP1eQXGMkaIZpNl9d5RK6SB6xQJsMY/DIso8WnwymyN7hmoFXPzX0eFkhmQEc7jzJ7NDBXaXRqWQ==}
dev: false
+ /@ice/swc-plugin-react-server-component@0.1.1:
+ resolution: {integrity: sha512-3FdXOZ7HTBHY+DKQXDpzqV10ngfl0ifffc7HFV0P4YPLfvEJjT0RxIZJW1QwRZ3QeB2ph4zvXfdBG1lYTzT58Q==}
+ dev: false
+
/@ice/swc-plugin-remove-export@0.2.0:
resolution: {integrity: sha512-kmyrCMtuEsS7J3rpENT5qUhhbuu3eldsN1WpJjtXX4rgogJ1+QmnAPjnhB0SWzr0/b5ArGfz83O6M+5NNGRd+A==}
dev: false
@@ -6840,11 +6887,11 @@ packages:
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
dev: false
- /@iconify/utils@2.1.11:
- resolution: {integrity: sha512-M/w3PkN8zQYXi8N6qK/KhnYMfEbbb6Sk8RZVn8g+Pmmu5ybw177RpsaGwpziyHeUsu4etrexYSWq3rwnIqzYCg==}
+ /@iconify/utils@2.1.13:
+ resolution: {integrity: sha512-6uWvJIo715xYRy1KmCCyZYW0YYkLjaojEExoEkxpOHKhi9cyHW8hVKo+m8zrxzNVSqjUx9OuVRa2BWXeXfkp5A==}
dependencies:
'@antfu/install-pkg': 0.1.1
- '@antfu/utils': 0.7.6
+ '@antfu/utils': 0.7.7
'@iconify/types': 2.0.0
debug: 4.3.4
kolorist: 1.8.0
@@ -7568,8 +7615,8 @@ packages:
semver: 7.4.0
dev: true
- /@nuxt/schema@3.8.2:
- resolution: {integrity: sha512-AMpysQ/wHK2sOujLShqYdC4OSj/S3fFJGjhYXqA2g6dgmz+FNQWJRG/ie5sI9r2EX9Ela1wt0GN1jZR3wYNE8Q==}
+ /@nuxt/schema@3.9.0:
+ resolution: {integrity: sha512-NaRiq+g6XE4YOZLy7be2e6AmZCW0gfQWDM88TSfNr3Lypo+6PuY2VqzZLpSvOCNlW3CFj/kWtMdhool2BP0yIg==}
engines: {node: ^14.18.0 || >=16.10.0}
dependencies:
'@nuxt/ui-templates': 1.3.1
@@ -7578,10 +7625,10 @@ packages:
hookable: 5.5.3
pathe: 1.1.1
pkg-types: 1.0.3
- scule: 1.1.0
- std-env: 3.5.0
+ scule: 1.1.1
+ std-env: 3.7.0
ufo: 1.3.2
- unimport: 3.5.0
+ unimport: 3.7.0
untyped: 1.4.0
transitivePeerDependencies:
- rollup
@@ -7628,13 +7675,17 @@ packages:
react-refresh: 0.14.0
schema-utils: 3.1.1
source-map: 0.7.4
- webpack: 5.88.2(@swc/core@1.3.80)(esbuild@0.17.16)
+ webpack: 5.88.2(@swc/core@1.3.85)(esbuild@0.17.16)
webpack-dev-server: 4.15.0(webpack@5.88.2)
dev: true
/@polka/url@1.0.0-next.21:
resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==}
+ /@polka/url@1.0.0-next.24:
+ resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==}
+ dev: false
+
/@rc-component/context@1.3.0(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-6QdaCJ7Wn5UZLJs15IEfqy4Ru3OaL5ctqpQYWd5rlfV9wwzrzdt6+kgAQZV/qdB0MUPN4nhyBfRembQCIvBf+w==}
peerDependencies:
@@ -8017,23 +8068,23 @@ packages:
dependencies:
'@rspack/binding': 0.4.3
'@swc/helpers': 0.5.1
- browserslist: 4.22.1
+ browserslist: 4.22.2
compare-versions: 6.0.0-rc.1
enhanced-resolve: 5.12.0
fast-querystring: 1.1.2
graceful-fs: 4.2.10
- json-parse-even-better-errors: 3.0.0
+ json-parse-even-better-errors: 3.0.1
neo-async: 2.6.2
react-refresh: 0.14.0
tapable: 2.2.1
terminal-link: 2.1.1
watchpack: 2.4.0
webpack-sources: 3.2.3
- zod: 3.22.3
- zod-validation-error: 1.3.1(zod@3.22.3)
+ zod: 3.22.4
+ zod-validation-error: 1.3.1(zod@3.22.4)
dev: true
- /@rspack/dev-server@0.4.3(@rspack/core@0.4.3)(@swc/core@1.3.80)(esbuild@0.17.16)(react-refresh@0.14.0):
+ /@rspack/dev-server@0.4.3(@rspack/core@0.4.3)(@swc/core@1.3.85)(esbuild@0.17.16)(react-refresh@0.14.0):
resolution: {integrity: sha512-qbggWEySoWdCrbWxqV+HX7nXgyT6qE3DqGtdYKzX9RLPp+RilXtnPlXtwY1AXNh8e0gYe1dMpvTcHYxeSglZSg==}
peerDependencies:
'@rspack/core': '*'
@@ -8045,7 +8096,7 @@ packages:
express: 4.18.1
http-proxy-middleware: 2.0.6(@types/express@4.17.17)
mime-types: 2.1.35
- webpack: 5.76.0(@swc/core@1.3.80)(esbuild@0.17.16)
+ webpack: 5.76.0(@swc/core@1.3.85)(esbuild@0.17.16)
webpack-dev-middleware: 6.0.2(webpack@5.76.0)
webpack-dev-server: 4.13.1(webpack@5.76.0)
ws: 8.8.1
@@ -8324,7 +8375,7 @@ packages:
resolution: {integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==}
engines: {node: '>=10'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.21.2
entities: 4.4.0
/@svgr/plugin-jsx@5.5.0:
@@ -8413,8 +8464,8 @@ packages:
dev: true
optional: true
- /@swc/core-darwin-arm64@1.3.80:
- resolution: {integrity: sha512-rhoFTcQMUGfO7IkfOnopPSF6O0/aVJ58B7KueIKbvrMe6YvSfFj9QfObELFjYCcrJZTvUWBhig0QrsfPIiUphA==}
+ /@swc/core-darwin-arm64@1.3.85:
+ resolution: {integrity: sha512-jTikp+i4nO4Ofe6qGm4I3sFeebD1OvueBCHITux5tQKD6umN1c2z4CRGv6K49NIz/qEpUcdr6Qny6K+3yibVFQ==}
engines: {node: '>=10'}
cpu: [arm64]
os: [darwin]
@@ -8430,8 +8481,8 @@ packages:
dev: true
optional: true
- /@swc/core-darwin-x64@1.3.80:
- resolution: {integrity: sha512-0dOLedFpVXe+ugkKHXsqSxMKqvQYfFtibWbrZ7j8wOaErzSGPr0VpyWvepNVb9s046725kPXSw+fsGhqZR8wrw==}
+ /@swc/core-darwin-x64@1.3.85:
+ resolution: {integrity: sha512-3uHYkjVU+2F+YbVYtq5rH0uCJIztFTALaS3mQEfQUZKXZ5/8jD5titTCRqFKtSlQg0CzaFZgsYsuqwYBmgN0mA==}
engines: {node: '>=10'}
cpu: [x64]
os: [darwin]
@@ -8447,8 +8498,8 @@ packages:
dev: true
optional: true
- /@swc/core-linux-arm-gnueabihf@1.3.80:
- resolution: {integrity: sha512-QIjwP3PtDeHBDkwF6+ZZqdUsqAhORbMpxrw2jq3mHe4lQrxBttSFTq018vlMRo2mFEorOvXdadzaD9m+NymPrw==}
+ /@swc/core-linux-arm-gnueabihf@1.3.85:
+ resolution: {integrity: sha512-ouHzAHsFaEOkRuoTAOI/8n2m8BQAAnb4vr/xbMhhDOmix0lp5eNsW5Iac/EcJ2uG6B3n7P2K8oycj9SWkj+pfw==}
engines: {node: '>=10'}
cpu: [arm]
os: [linux]
@@ -8464,8 +8515,8 @@ packages:
dev: true
optional: true
- /@swc/core-linux-arm64-gnu@1.3.80:
- resolution: {integrity: sha512-cg8WriIueab58ZwkzXmIACnjSzFLzOBwxlC9k65gPXMNgCjab2YbqEYvAbjBqneuqaao02gW6tad2uhjgYaExw==}
+ /@swc/core-linux-arm64-gnu@1.3.85:
+ resolution: {integrity: sha512-/Z1CZOWiO+NqJEh1J20PIxQFHMH43upQJ1l7FJ5Z7+MyuYF8WkeJ7OSovau729pBR+38vvvccEJrMZIztfv7hQ==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
@@ -8481,8 +8532,8 @@ packages:
dev: true
optional: true
- /@swc/core-linux-arm64-musl@1.3.80:
- resolution: {integrity: sha512-AhdCQ7QKx5mWrtpaOA1mFRiWWvuiiUtspvo0QSpspDetRKTND1rlf/3UB5+gp0kCeCNUTsVmJWU7fIA9ICZtXA==}
+ /@swc/core-linux-arm64-musl@1.3.85:
+ resolution: {integrity: sha512-gfh7CfKavi076dbMBTzfdawSGcYfZ4+1Q+8aRkSesqepKHcIWIJti8Cf3zB4a6CHNhJe+VN0Gb7DEfumydAm1w==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
@@ -8498,8 +8549,8 @@ packages:
dev: true
optional: true
- /@swc/core-linux-x64-gnu@1.3.80:
- resolution: {integrity: sha512-+2e5oni1vOrLIjM5Q2/GIzK/uS2YEtuJqnjPvCK8SciRJsSl8OgVsRvyCDbmKeZNtJ2Q+o/O2AQ2w1qpAJG6jg==}
+ /@swc/core-linux-x64-gnu@1.3.85:
+ resolution: {integrity: sha512-lWVqjHKzofb9q1qrBM4dLqO7CIisp08/xMS5Hz9DWex1gTc5F2b6yJO6Ceqwa256GMweJcdP6A5EvEFQAiZ5dg==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
@@ -8515,8 +8566,8 @@ packages:
dev: true
optional: true
- /@swc/core-linux-x64-musl@1.3.80:
- resolution: {integrity: sha512-8OK9IlI1zpWOm7vIp1iXmZSEzLAwFpqhsGSEhxPavpOx2m54kLFdPcw/Uv3n461f6TCtszIxkGq1kSqBUdfUBA==}
+ /@swc/core-linux-x64-musl@1.3.85:
+ resolution: {integrity: sha512-EPJmlfqC05TUetnlErxNRyIp7Nc3B2w9abET6oQ/EgldeAeQnZ3M6svMViET/c2QSomgrU3rdP+Qcozkt62/4A==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
@@ -8532,8 +8583,8 @@ packages:
dev: true
optional: true
- /@swc/core-win32-arm64-msvc@1.3.80:
- resolution: {integrity: sha512-RKhatwiAGlffnF6z2Mm3Ddid0v3KB+uf5m/Gc7N9zO/EUAV0PnHRuYuZSGyqodHmGFC+mK8YrCooFCEmHL9n+w==}
+ /@swc/core-win32-arm64-msvc@1.3.85:
+ resolution: {integrity: sha512-ibckJDZw8kNosciMexwk0z75ZyUhwtiFMV9rSBpup0opa7NNCUCoERCJ1e9LRyMdhsVUoLpZg/KZiHCdTw96hQ==}
engines: {node: '>=10'}
cpu: [arm64]
os: [win32]
@@ -8549,8 +8600,8 @@ packages:
dev: true
optional: true
- /@swc/core-win32-ia32-msvc@1.3.80:
- resolution: {integrity: sha512-3jiiZzU/kaw7k4zUp1yMq1QiUe4wJVtCEXIhf+fKuBsIwm7rdvyK/+PIx5KHnZy4TGQnYczKBRhJA5nuBcrUCQ==}
+ /@swc/core-win32-ia32-msvc@1.3.85:
+ resolution: {integrity: sha512-hY4MpHGUVQHL1T2kgRXOigDho4DTIpVPYzJ4uyy8VQRbS7GzN5XtvdGP/fA4zp8+2BQjcig+6J7Y92SY15ouNQ==}
engines: {node: '>=10'}
cpu: [ia32]
os: [win32]
@@ -8566,8 +8617,8 @@ packages:
dev: true
optional: true
- /@swc/core-win32-x64-msvc@1.3.80:
- resolution: {integrity: sha512-2eZtIoIWQBWqykfms92Zd37lveYOBWQTZjdooBGlsLHtcoQLkNpf1NXmR6TKY0yy8q6Yl3OhPvY+izjmO08MSg==}
+ /@swc/core-win32-x64-msvc@1.3.85:
+ resolution: {integrity: sha512-ktxWOMFJ0iqKn6WUHtXqi4CS7xkyHmrRtjllGRuGqxmLmDX/HSOfuQ55Tm1KXKk5oHLacJkUbOSF2kBrpZ8dpg==}
engines: {node: '>=10'}
cpu: [x64]
os: [win32]
@@ -8591,8 +8642,8 @@ packages:
'@swc/core-win32-x64-msvc': 1.3.32
dev: true
- /@swc/core@1.3.80:
- resolution: {integrity: sha512-yX2xV5I/lYswHHR+44TPvzBgq3/Y8N1YWpTQADYuvSiX3Jxyvemk5Jpx3rRtigYb8WBkWAAf2i5d5ZJ2M7hhgw==}
+ /@swc/core@1.3.85:
+ resolution: {integrity: sha512-qnoxp+2O0GtvRdYnXgR1v8J7iymGGYpx6f6yCK9KxipOZOjrlKILFANYlghQxZyPUfXwK++TFxfSlX4r9wK+kg==}
engines: {node: '>=10'}
requiresBuild: true
peerDependencies:
@@ -8603,16 +8654,16 @@ packages:
dependencies:
'@swc/types': 0.1.4
optionalDependencies:
- '@swc/core-darwin-arm64': 1.3.80
- '@swc/core-darwin-x64': 1.3.80
- '@swc/core-linux-arm-gnueabihf': 1.3.80
- '@swc/core-linux-arm64-gnu': 1.3.80
- '@swc/core-linux-arm64-musl': 1.3.80
- '@swc/core-linux-x64-gnu': 1.3.80
- '@swc/core-linux-x64-musl': 1.3.80
- '@swc/core-win32-arm64-msvc': 1.3.80
- '@swc/core-win32-ia32-msvc': 1.3.80
- '@swc/core-win32-x64-msvc': 1.3.80
+ '@swc/core-darwin-arm64': 1.3.85
+ '@swc/core-darwin-x64': 1.3.85
+ '@swc/core-linux-arm-gnueabihf': 1.3.85
+ '@swc/core-linux-arm64-gnu': 1.3.85
+ '@swc/core-linux-arm64-musl': 1.3.85
+ '@swc/core-linux-x64-gnu': 1.3.85
+ '@swc/core-linux-x64-musl': 1.3.85
+ '@swc/core-win32-arm64-msvc': 1.3.85
+ '@swc/core-win32-ia32-msvc': 1.3.85
+ '@swc/core-win32-x64-msvc': 1.3.85
/@swc/helpers@0.5.1:
resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==}
@@ -8708,7 +8759,7 @@ packages:
resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==}
dependencies:
'@babel/parser': 7.21.2
- '@babel/types': 7.23.4
+ '@babel/types': 7.21.2
'@types/babel__generator': 7.6.4
'@types/babel__template': 7.4.1
'@types/babel__traverse': 7.18.3
@@ -8724,7 +8775,7 @@ packages:
resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==}
dependencies:
'@babel/parser': 7.21.2
- '@babel/types': 7.23.4
+ '@babel/types': 7.21.2
dev: true
/@types/babel__traverse@7.18.3:
@@ -9180,12 +9231,12 @@ packages:
/@types/unist@2.0.6:
resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==}
- /@types/webpack-bundle-analyzer@4.6.0(@swc/core@1.3.80)(esbuild@0.17.16):
+ /@types/webpack-bundle-analyzer@4.6.0(@swc/core@1.3.85)(esbuild@0.17.16):
resolution: {integrity: sha512-XeQmQCCXdZdap+A/60UKmxW5Mz31Vp9uieGlHB3T4z/o2OLVLtTI3bvTuS6A2OWd/rbAAQiGGWIEFQACu16szA==}
dependencies:
'@types/node': 18.14.6
tapable: 2.2.1
- webpack: 5.88.2(@swc/core@1.3.80)(esbuild@0.17.16)
+ webpack: 5.88.2(@swc/core@1.3.85)(esbuild@0.17.16)
transitivePeerDependencies:
- '@swc/core'
- esbuild
@@ -9400,32 +9451,32 @@ packages:
'@uni/action-sheet': 1.0.8
dev: false
- /@unocss/astro@0.57.6(vite@3.2.5):
- resolution: {integrity: sha512-7NIGMg9ZHlWWeZoOFzruKQh6sz+wKtRN8ioiAOxIYVtULCoazfjhfzhiWcmyiHWVgrZ0TyUep/nz5cRumNBrQw==}
+ /@unocss/astro@0.57.7(vite@3.2.5):
+ resolution: {integrity: sha512-X4KSBdrAADdtS4x7xz02b016xpRDt9mD/d/oq23HyZAZ+sZc4oZs8el9MLSUJgu2okdWzAE62lRRV/oc4HWI1A==}
peerDependencies:
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
peerDependenciesMeta:
vite:
optional: true
dependencies:
- '@unocss/core': 0.57.6
- '@unocss/reset': 0.57.6
- '@unocss/vite': 0.57.6(vite@3.2.5)
+ '@unocss/core': 0.57.7
+ '@unocss/reset': 0.57.7
+ '@unocss/vite': 0.57.7(vite@3.2.5)
vite: 3.2.5(@types/node@17.0.45)
transitivePeerDependencies:
- rollup
dev: false
- /@unocss/cli@0.57.6:
- resolution: {integrity: sha512-s6/TghesVk+0bKPBJ86gk9FI6EO8Jc9GyJ1/qNOxR5Q3O+EttYsptHuicY4pZXGFWsU7AnD6ZziixQiPHJGamw==}
+ /@unocss/cli@0.57.7:
+ resolution: {integrity: sha512-FZHTTBYyibySpBEPbA/ilDzI4v4Uy/bROItEYogZkpXNoCLzlclX+UcuFBXXLt6VFJk4WjLNFLRSQlVcCUUOLA==}
engines: {node: '>=14'}
hasBin: true
dependencies:
'@ampproject/remapping': 2.2.1
'@rollup/pluginutils': 5.1.0
- '@unocss/config': 0.57.6
- '@unocss/core': 0.57.6
- '@unocss/preset-uno': 0.57.6
+ '@unocss/config': 0.57.7
+ '@unocss/core': 0.57.7
+ '@unocss/preset-uno': 0.57.7
cac: 6.7.14
chokidar: 3.5.3
colorette: 2.0.20
@@ -9438,174 +9489,174 @@ packages:
- rollup
dev: false
- /@unocss/config@0.57.6:
- resolution: {integrity: sha512-ZPWS2ju430xhtS1ZFNcuNhosuBwk9iSQEnhej9n7Qem6sr5odTxx7FqExb2eG4rjMyOIlwSInv+krg39xAAibg==}
+ /@unocss/config@0.57.7:
+ resolution: {integrity: sha512-UG8G9orWEdk/vyDvGUToXYn/RZy/Qjpx66pLsaf5wQK37hkYsBoReAU5v8Ia/6PL1ueJlkcNXLaNpN6/yVoJvg==}
engines: {node: '>=14'}
dependencies:
- '@unocss/core': 0.57.6
+ '@unocss/core': 0.57.7
unconfig: 0.3.11
dev: false
- /@unocss/core@0.57.6:
- resolution: {integrity: sha512-rkqMX5Lyyl2u2PF2EMcH/QeFUAoiFeq5vnaGGYV2LVfTlDrEVx8CrNHlBmWr5fXrhyzXi366pK/ErJ2pepGiqg==}
+ /@unocss/core@0.57.7:
+ resolution: {integrity: sha512-1d36M0CV3yC80J0pqOa5rH1BX6g2iZdtKmIb3oSBN4AWnMCSrrJEPBrUikyMq2TEQTrYWJIVDzv5A9hBUat3TA==}
dev: false
- /@unocss/extractor-arbitrary-variants@0.57.6:
- resolution: {integrity: sha512-I4/JpdF/2x4BnG+O6RQFRmfsI0UAJ6ik8Usw4zx2CQIdfTYxRJ4eU52jo5l8cm+YdDrXuiARRAEj6G96qHU3RQ==}
+ /@unocss/extractor-arbitrary-variants@0.57.7:
+ resolution: {integrity: sha512-JdyhPlsgS0x4zoF8WYXDcusPcpU4ysE6Rkkit4a9+xUZEvg7vy7InH6PQ8dL8B9oY7pbxF7G6eFguUDpv9xx4Q==}
dependencies:
- '@unocss/core': 0.57.6
+ '@unocss/core': 0.57.7
dev: false
- /@unocss/inspector@0.57.6:
- resolution: {integrity: sha512-rNc4zX08PLeGHBtg+qxCSfPxtKuu4M0skaI6JLnHAR74KaVtmL0cE3+9K2PZbzHEy0iSbPzZQij+YlQ71Ic7yA==}
+ /@unocss/inspector@0.57.7:
+ resolution: {integrity: sha512-b9ckqn5aRsmhTdXJ5cPMKDKuNRe+825M+s9NbYcTjENnP6ellUFZo91sYF5S+LeATmU12TcwJZ83NChF4HpBSA==}
dependencies:
- '@unocss/core': 0.57.6
- '@unocss/rule-utils': 0.57.6
+ '@unocss/core': 0.57.7
+ '@unocss/rule-utils': 0.57.7
gzip-size: 6.0.0
- sirv: 2.0.3
+ sirv: 2.0.4
dev: false
- /@unocss/postcss@0.57.6(postcss@8.4.31):
- resolution: {integrity: sha512-xpyr9OHZ59iYr/e0vGgqc4kDGJLbVAvysChfe2xCmfXf2hrqVWwcEYoeE3zW/6xnEDNxk6IQBml2xLjdS34haA==}
+ /@unocss/postcss@0.57.7(postcss@8.4.31):
+ resolution: {integrity: sha512-13c9p5ecTvYa6inDky++8dlVuxQ0JuKaKW5A0NW3XuJ3Uz1t8Pguji+NAUddfTYEFF6GHu47L3Aac7vpI8pMcQ==}
engines: {node: '>=14'}
peerDependencies:
postcss: ^8.4.21
dependencies:
- '@unocss/config': 0.57.6
- '@unocss/core': 0.57.6
- '@unocss/rule-utils': 0.57.6
+ '@unocss/config': 0.57.7
+ '@unocss/core': 0.57.7
+ '@unocss/rule-utils': 0.57.7
css-tree: 2.3.1
fast-glob: 3.3.2
magic-string: 0.30.5
postcss: 8.4.31
dev: false
- /@unocss/preset-attributify@0.57.6:
- resolution: {integrity: sha512-3SK7Gn98WkhfvXFALEGvhGLH3jEKXluOQ8LBMR1eewULtXzIAv/YDpqaGV0aOb8gjw16RHDBsScVM1s9mHy7Dw==}
+ /@unocss/preset-attributify@0.57.7:
+ resolution: {integrity: sha512-vUqfwUokNHt1FJXIuVyj2Xze9LfJdLAy62h79lNyyEISZmiDF4a4hWTKLBe0d6Kyfr33DyXMmkLp57t5YW0V3A==}
dependencies:
- '@unocss/core': 0.57.6
+ '@unocss/core': 0.57.7
dev: false
- /@unocss/preset-icons@0.57.6:
- resolution: {integrity: sha512-VC08C0QQ9MEEpMAXa6ffyZi6p7IoJ3UrphUQKjkTz0fvWBZ8NnlTGrw65R75nv4Cxos+2erOvJAOyMG9z7/z3g==}
+ /@unocss/preset-icons@0.57.7:
+ resolution: {integrity: sha512-s3AelKCS9CL1ArP1GanYv0XxxPrcFi+XOuQoQCwCRHDo2CiBEq3fLLMIhaUCFEWGtIy7o7wLeL5BRjMvJ2QnMg==}
dependencies:
- '@iconify/utils': 2.1.11
- '@unocss/core': 0.57.6
+ '@iconify/utils': 2.1.13
+ '@unocss/core': 0.57.7
ofetch: 1.3.3
transitivePeerDependencies:
- supports-color
dev: false
- /@unocss/preset-mini@0.57.6:
- resolution: {integrity: sha512-oOrtP9Wbm5cjokx9o2j/LhwRFB39whVVU1DDXllHyC0TGCXUd6gpmKwg8mePWkWWv0iM7v8EufCU4xCfNmazxQ==}
+ /@unocss/preset-mini@0.57.7:
+ resolution: {integrity: sha512-YPmmh+ZIg4J7/nPMfvzD1tOfUFD+8KEFXX9ISRteooflYeosn2YytGW66d/sq97AZos9N630FJ//DvPD2wfGwA==}
dependencies:
- '@unocss/core': 0.57.6
- '@unocss/extractor-arbitrary-variants': 0.57.6
- '@unocss/rule-utils': 0.57.6
+ '@unocss/core': 0.57.7
+ '@unocss/extractor-arbitrary-variants': 0.57.7
+ '@unocss/rule-utils': 0.57.7
dev: false
- /@unocss/preset-tagify@0.57.6:
- resolution: {integrity: sha512-o0nSjCshTTn0QhrJsJpPM5PWshpRMJH0vGSRSiSlkJ/hveRFQLwcf2fWNPI2wNTgX0P7pVCUtrda2XbCLnwVrg==}
+ /@unocss/preset-tagify@0.57.7:
+ resolution: {integrity: sha512-va25pTJ5OtbqCHFBIj8myVk0PwuSucUqTx840r/YSHka0P9th6UGRS1LU30OUgjgr7FhLaWXtJMN4gkCUtQSoA==}
dependencies:
- '@unocss/core': 0.57.6
+ '@unocss/core': 0.57.7
dev: false
- /@unocss/preset-typography@0.57.6:
- resolution: {integrity: sha512-ETMmtxjJbc7VHfKprQD2wj92daQQQ5/oQFBtT7afbelcKTuTa/WfLeJkWdp7Fgf4qZGqAHYoZWYcyKTquxwojw==}
+ /@unocss/preset-typography@0.57.7:
+ resolution: {integrity: sha512-1QuoLhqHVRs+baaVvfH54JxmJhVuBp5jdVw3HCN/vXs1CSnq2Rm/C/+PahcnQg/KLtoW6MgK5S+/hU9TCxGRVQ==}
dependencies:
- '@unocss/core': 0.57.6
- '@unocss/preset-mini': 0.57.6
+ '@unocss/core': 0.57.7
+ '@unocss/preset-mini': 0.57.7
dev: false
- /@unocss/preset-uno@0.57.6:
- resolution: {integrity: sha512-9OQiXA5+B876u7nv4bsJpDHNIvXyw+lKAYowCcKXB6YuVFHz10BFhv0EIgRkwoIiZ60oj0ng/MFrvj4LXH74ag==}
+ /@unocss/preset-uno@0.57.7:
+ resolution: {integrity: sha512-yRKvRBaPLmDSUZet5WnV1WNb3BV4EFwvB1Zbvlc3lyVp6uCksP/SYlxuUwht7JefOrfiY2sGugoBxZTyGmj/kQ==}
dependencies:
- '@unocss/core': 0.57.6
- '@unocss/preset-mini': 0.57.6
- '@unocss/preset-wind': 0.57.6
- '@unocss/rule-utils': 0.57.6
+ '@unocss/core': 0.57.7
+ '@unocss/preset-mini': 0.57.7
+ '@unocss/preset-wind': 0.57.7
+ '@unocss/rule-utils': 0.57.7
dev: false
- /@unocss/preset-web-fonts@0.57.6:
- resolution: {integrity: sha512-IXCXQOm/RVbpuo6uHxlW+nYEgU4H4NRIl7lL7QDawEh3u5oY6s/JwOQZE0DQqulG9sfdXhH9e8gokcqfZdQy+g==}
+ /@unocss/preset-web-fonts@0.57.7:
+ resolution: {integrity: sha512-wBPej5GeYb0D/xjMdMmpH6k/3Oe1ujx9DJys2/gtvl/rsBZpSkoWcnl+8Z3bAhooDnwL2gkJCIlpuDiRNtKvGA==}
dependencies:
- '@unocss/core': 0.57.6
+ '@unocss/core': 0.57.7
ofetch: 1.3.3
dev: false
- /@unocss/preset-wind@0.57.6:
- resolution: {integrity: sha512-RE5Qlm7PVlzDjqk6AxuJDZYWArpH1VGf6ikfcN5/DRqEXDpAx1F0WYprhs2l9GYa66jBaenSITJQS4xoR5+yHw==}
+ /@unocss/preset-wind@0.57.7:
+ resolution: {integrity: sha512-olQ6+w0fQ84eEC1t7SF4vJyKcyawkDWSRF5YufOqeQZL3zjqBzMQi+3PUlKCstrDO1DNZ3qdcwg1vPHRmuX9VA==}
dependencies:
- '@unocss/core': 0.57.6
- '@unocss/preset-mini': 0.57.6
- '@unocss/rule-utils': 0.57.6
+ '@unocss/core': 0.57.7
+ '@unocss/preset-mini': 0.57.7
+ '@unocss/rule-utils': 0.57.7
dev: false
- /@unocss/reset@0.57.6:
- resolution: {integrity: sha512-AUk/XSegAX91qhNpS82t3Cd1MuyOy8xgLzkU7iEDbU4EPh94/mOY/Ebj7AFGMGtOAe47AE6vTyAMRL3YglVuyQ==}
+ /@unocss/reset@0.57.7:
+ resolution: {integrity: sha512-oN9024WVrMewGbornnAPIpzHeKPIfVmZ5IsZGilWR761TnI5jTjHUkswsVoFx7tZdpCN2/bqS3JK/Ah0aot3NQ==}
dev: false
- /@unocss/rule-utils@0.57.6:
- resolution: {integrity: sha512-EHsSitEVdADh0SOs3MCioYXojgshlhMwo+zMthmXCQMBispOR70rVYUr8QqqyWBKLt948rbqCxVl3DIXrwYnxA==}
+ /@unocss/rule-utils@0.57.7:
+ resolution: {integrity: sha512-gLqbKTIetvRynLkhonu1znr+bmWnw+Cl3dFVNgZPGjiqGHd78PGS0gXQKvzuyN0iO2ADub1A7GlCWs826iEHjA==}
engines: {node: '>=14'}
dependencies:
- '@unocss/core': 0.57.6
+ '@unocss/core': 0.57.7
magic-string: 0.30.5
dev: false
- /@unocss/scope@0.57.6:
- resolution: {integrity: sha512-0Zk0GZIwhu7yPBRFjaFjI2zBBFs9crQLe69xLeHfaTSbIYtbM7PI3gAmnGetljrI8njb/zMKf+gby8SaXAlf/w==}
+ /@unocss/scope@0.57.7:
+ resolution: {integrity: sha512-pqWbKXcrTJ2ovVRTYFLnUX5ryEhdSXp7YfyBQT3zLtQb4nQ2XZcLTvGdWo7F+9jZ09yP7NdHscBLkeWgx+mVgw==}
dev: false
- /@unocss/transformer-attributify-jsx-babel@0.57.6:
- resolution: {integrity: sha512-Ki0R/vCH/xONd12PIo4+iC4u1pN4cs7HcdyX8P3yxJ92SV7u7awtTRAOgAvK8W59Wgh02WX8dHI8bNBmDouSAQ==}
+ /@unocss/transformer-attributify-jsx-babel@0.57.7:
+ resolution: {integrity: sha512-CqxTiT5ikOC6R/HNyBcCIVYUfeazqRbsw7X4hYKmGHO7QsnaKQFWZTpj+sSDRh3oHq+IDtcD6KB2anTEffEQNA==}
dependencies:
- '@babel/core': 7.23.3
- '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.3)
- '@babel/preset-typescript': 7.23.3(@babel/core@7.23.3)
- '@unocss/core': 0.57.6
+ '@babel/core': 7.23.6
+ '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6)
+ '@babel/preset-typescript': 7.23.3(@babel/core@7.23.6)
+ '@unocss/core': 0.57.7
transitivePeerDependencies:
- supports-color
dev: false
- /@unocss/transformer-attributify-jsx@0.57.6:
- resolution: {integrity: sha512-SwyCKMTPvsXsR3B0l8FoRT1gUhrmG3SCxoskUb/s64l6fdBlfM8h+H4kPiepRbp99E04xGG5tIxxaBTTMeA+Gg==}
+ /@unocss/transformer-attributify-jsx@0.57.7:
+ resolution: {integrity: sha512-FpCJM+jDN4Kyp7mMMN41tTWEq6pHKAXAyJoW1GwhYw6lLu9cwyXnne6t7rQ11EPU95Z2cIEMpIJo8reDkDaiPg==}
dependencies:
- '@unocss/core': 0.57.6
+ '@unocss/core': 0.57.7
dev: false
- /@unocss/transformer-compile-class@0.57.6:
- resolution: {integrity: sha512-IEpfuL4Kp+xJunr3GJ+qa5Xr4EOq3RTfmw1CDWsVrSb6pF7JgYSMahxc2knQ5SzgBQKTnW8vc2E0dHGOF+FIVQ==}
+ /@unocss/transformer-compile-class@0.57.7:
+ resolution: {integrity: sha512-D+PyD7IOXUm/lzzoCt/yon0Gh1fIK9iKeSBvB6/BREF/ejscNzQ/ia0Pq0pid2cVvOULCSo0z2sO9zljsQtv9A==}
dependencies:
- '@unocss/core': 0.57.6
+ '@unocss/core': 0.57.7
dev: false
- /@unocss/transformer-directives@0.57.6:
- resolution: {integrity: sha512-V0mdQuq08fvOrRHxKtwFTia3WtXqRqPiSxoZ0wBoOM05ChKUEc7/CdPv4FZNOtC0PvDi+BT5L3IQs35r6FZAiQ==}
+ /@unocss/transformer-directives@0.57.7:
+ resolution: {integrity: sha512-m0n7WqU3o+1Vyh1uaeU7H4u5gJqakkRqZqTq3MR3xLCSVfORJ/5XO8r+t6VUkJtaLxcIrtYE2geAbwmGV3zSKA==}
dependencies:
- '@unocss/core': 0.57.6
- '@unocss/rule-utils': 0.57.6
+ '@unocss/core': 0.57.7
+ '@unocss/rule-utils': 0.57.7
css-tree: 2.3.1
dev: false
- /@unocss/transformer-variant-group@0.57.6:
- resolution: {integrity: sha512-6W/fitUZdwluyndV2wU4gnU9ykY8P82W3IYt7koufPI8AtO4wJnYFQoxK6aAO+74aYoFbJ2Pr00rhWKwGmyOwQ==}
+ /@unocss/transformer-variant-group@0.57.7:
+ resolution: {integrity: sha512-O5L5Za0IZtOWd2R66vy0k07pLlB9rCIybmUommUqKWpvd1n/pg8czQ5EkmNDprINvinKObVlGVuY4Uq/JsLM0A==}
dependencies:
- '@unocss/core': 0.57.6
+ '@unocss/core': 0.57.7
dev: false
- /@unocss/vite@0.57.6(vite@3.2.5):
- resolution: {integrity: sha512-sVVKhFCYDFCR+In8HXJ5ddnD+OnFw/3BcLoV3aRvIloojkDCG8rUywxS67TNu40LBZ8E+emFMcreDCFpwqphDA==}
+ /@unocss/vite@0.57.7(vite@3.2.5):
+ resolution: {integrity: sha512-SbJrRgfc35MmgMBlHaEK4YpJVD2B0bmxH9PVgHRuDae/hOEOG0VqNP0f2ijJtX9HG3jOpQVlbEoGnUo8jsZtsw==}
peerDependencies:
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
dependencies:
'@ampproject/remapping': 2.2.1
'@rollup/pluginutils': 5.1.0
- '@unocss/config': 0.57.6
- '@unocss/core': 0.57.6
- '@unocss/inspector': 0.57.6
- '@unocss/scope': 0.57.6
- '@unocss/transformer-directives': 0.57.6
+ '@unocss/config': 0.57.7
+ '@unocss/core': 0.57.7
+ '@unocss/inspector': 0.57.7
+ '@unocss/scope': 0.57.7
+ '@unocss/transformer-directives': 0.57.7
chokidar: 3.5.3
fast-glob: 3.3.2
magic-string: 0.30.5
@@ -9614,15 +9665,15 @@ packages:
- rollup
dev: false
- /@unocss/webpack@0.57.6(webpack@5.88.2):
- resolution: {integrity: sha512-1qOSQmEWf4qgOoTMtZ7Ldn4bX+mkHxeXdizTPZ9j6p3jNh1OvXj5Egxc/Rbn96AgdfAmFoNYduXFNSg2BtGOPg==}
+ /@unocss/webpack@0.57.7(webpack@5.88.2):
+ resolution: {integrity: sha512-EyMDKx6ZW7huNSoIWUFMY7l2iuke4x9dlG90W9IGUR3+KIO+ZHjByUIrtBWsWiFT5ysywSBTauLYKRDfU4+6eg==}
peerDependencies:
webpack: ^4 || ^5
dependencies:
'@ampproject/remapping': 2.2.1
'@rollup/pluginutils': 5.1.0
- '@unocss/config': 0.57.6
- '@unocss/core': 0.57.6
+ '@unocss/config': 0.57.7
+ '@unocss/core': 0.57.7
chokidar: 3.5.3
fast-glob: 3.3.2
magic-string: 0.30.5
@@ -9940,20 +9991,12 @@ packages:
acorn-walk: 8.2.0
dev: true
- /acorn-import-assertions@1.9.0(acorn@8.11.2):
- resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==}
- peerDependencies:
- acorn: ^8
- dependencies:
- acorn: 8.11.2
-
/acorn-import-assertions@1.9.0(acorn@8.8.2):
resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==}
peerDependencies:
acorn: ^8
dependencies:
acorn: 8.8.2
- dev: true
/acorn-jsx@5.3.2(acorn@8.8.2):
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
@@ -9962,6 +10005,12 @@ packages:
dependencies:
acorn: 8.8.2
+ /acorn-loose@8.3.0:
+ resolution: {integrity: sha512-75lAs9H19ldmW+fAbyqHdjgdCrz0pWGXKmnqFoh8PyVd1L2RIb4RzYrSjmopeqv3E1G3/Pimu6GgLlrGbrkF7w==}
+ engines: {node: '>=0.4.0'}
+ dependencies:
+ acorn: 8.8.2
+
/acorn-node@1.8.2:
resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==}
dependencies:
@@ -10499,6 +10548,22 @@ packages:
hasBin: true
dev: false
+ /autoprefixer@10.4.13(postcss@8.4.25):
+ resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+ dependencies:
+ browserslist: 4.22.2
+ caniuse-lite: 1.0.30001571
+ fraction.js: 4.2.0
+ normalize-range: 0.1.2
+ picocolors: 1.0.0
+ postcss: 8.4.25
+ postcss-value-parser: 4.2.0
+ dev: true
+
/autoprefixer@10.4.13(postcss@8.4.31):
resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==}
engines: {node: ^10 || ^12 || >=14}
@@ -10506,8 +10571,8 @@ packages:
peerDependencies:
postcss: ^8.1.0
dependencies:
- browserslist: 4.22.1
- caniuse-lite: 1.0.30001564
+ browserslist: 4.22.2
+ caniuse-lite: 1.0.30001571
fraction.js: 4.2.0
normalize-range: 0.1.2
picocolors: 1.0.0
@@ -10647,7 +10712,7 @@ packages:
engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0}
dependencies:
'@babel/template': 7.20.7
- '@babel/types': 7.23.4
+ '@babel/types': 7.21.2
'@types/babel__core': 7.20.0
'@types/babel__traverse': 7.18.3
dev: true
@@ -10657,7 +10722,7 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@babel/template': 7.20.7
- '@babel/types': 7.23.4
+ '@babel/types': 7.21.2
'@types/babel__core': 7.20.0
'@types/babel__traverse': 7.18.3
dev: true
@@ -10963,15 +11028,15 @@ packages:
node-releases: 2.0.10
update-browserslist-db: 1.0.10(browserslist@4.21.5)
- /browserslist@4.22.1:
- resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==}
+ /browserslist@4.22.2:
+ resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
- caniuse-lite: 1.0.30001564
- electron-to-chromium: 1.4.593
- node-releases: 2.0.13
- update-browserslist-db: 1.0.13(browserslist@4.22.1)
+ caniuse-lite: 1.0.30001571
+ electron-to-chromium: 1.4.616
+ node-releases: 2.0.14
+ update-browserslist-db: 1.0.13(browserslist@4.22.2)
/bs-logger@0.2.6:
resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==}
@@ -11170,16 +11235,16 @@ packages:
/caniuse-api@3.0.0:
resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
dependencies:
- browserslist: 4.22.1
- caniuse-lite: 1.0.30001564
+ browserslist: 4.22.2
+ caniuse-lite: 1.0.30001571
lodash.memoize: 4.1.2
lodash.uniq: 4.5.0
/caniuse-lite@1.0.30001462:
resolution: {integrity: sha512-PDd20WuOBPiasZ7KbFnmQRyuLE7cFXW2PVd7dmALzbkUXEP46upAuCDm9eY9vho8fgNMGmbAX92QBZHzcnWIqw==}
- /caniuse-lite@1.0.30001564:
- resolution: {integrity: sha512-DqAOf+rhof+6GVx1y+xzbFPeOumfQnhYzVnZD6LAXijR77yPtm9mfOcqOnT3mpnJiZVT+kwLAFnRlZcIz+c6bg==}
+ /caniuse-lite@1.0.30001571:
+ resolution: {integrity: sha512-tYq/6MoXhdezDLFZuCO/TKboTzuQ/xR5cFdgXPfDtM7/kchBO3b4VWghE/OAi/DV7tTdhmLjZiZBZi1fA/GheQ==}
/caseless@0.12.0:
resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
@@ -11523,6 +11588,7 @@ packages:
/colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
+ dev: false
/combine-promises@1.1.0:
resolution: {integrity: sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==}
@@ -11731,7 +11797,7 @@ packages:
normalize-path: 3.0.0
schema-utils: 4.0.0
serialize-javascript: 6.0.1
- webpack: 5.88.2(@swc/core@1.3.80)(esbuild@0.17.16)
+ webpack: 5.88.2(@swc/core@1.3.85)(esbuild@0.17.16)
dev: true
/copy-webpack-plugin@11.0.0(webpack@5.88.2):
@@ -11751,7 +11817,7 @@ packages:
/core-js-compat@3.29.0:
resolution: {integrity: sha512-ScMn3uZNAFhK2DGoEfErguoiAHhV2Ju+oJo/jK08p7B3f3UhocUrCCkTvnZaiS+edl5nlIoiBXKcwMc6elv4KQ==}
dependencies:
- browserslist: 4.22.1
+ browserslist: 4.22.2
/core-js-pure@3.29.0:
resolution: {integrity: sha512-v94gUjN5UTe1n0yN/opTihJ8QBWD2O8i19RfTZR7foONPWArnjB96QA/wk5ozu1mm6ja3udQCzOzwQXTxi3xOQ==}
@@ -11919,7 +11985,7 @@ packages:
postcss-modules-values: 4.0.0(postcss@8.4.31)
postcss-value-parser: 4.2.0
semver: 7.3.8
- webpack: 5.88.2(@swc/core@1.3.80)(esbuild@0.17.16)
+ webpack: 5.88.2(@swc/core@1.3.85)(esbuild@0.17.16)
dev: true
/css-loader@6.7.3(webpack@5.88.2):
@@ -11964,7 +12030,7 @@ packages:
schema-utils: 4.0.0
serialize-javascript: 6.0.1
source-map: 0.6.1
- webpack: 5.88.2(@swc/core@1.3.80)(esbuild@0.17.16)
+ webpack: 5.88.2(@swc/core@1.3.85)(esbuild@0.17.16)
dev: true
/css-minimizer-webpack-plugin@4.2.2(clean-css@5.3.2)(webpack@5.88.2):
@@ -12763,8 +12829,8 @@ packages:
/electron-to-chromium@1.4.322:
resolution: {integrity: sha512-KovjizNC9XB7dno/2GjxX8VS0SlfPpCjtyoKft+bCO+UfD8bFy16hY4Sh9s0h9BDxbRH2U0zX5VBjpM1LTcNlg==}
- /electron-to-chromium@1.4.593:
- resolution: {integrity: sha512-c7+Hhj87zWmdpmjDONbvNKNo24tvmD4mjal1+qqTYTrlF0/sNpAcDlU0Ki84ftA/5yj3BF2QhSGEC0Rky6larg==}
+ /electron-to-chromium@1.4.616:
+ resolution: {integrity: sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==}
/emittery@0.10.2:
resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==}
@@ -13660,7 +13726,7 @@ packages:
micromatch: 4.0.5
normalize-path: 3.0.0
schema-utils: 3.1.1
- webpack: 5.88.2(@swc/core@1.3.80)(esbuild@0.17.16)
+ webpack: 5.88.2(@swc/core@1.3.85)(esbuild@0.17.16)
dev: true
/eslint@8.35.0:
@@ -13751,6 +13817,12 @@ packages:
/estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+ /estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+ dependencies:
+ '@types/estree': 1.0.0
+ dev: true
+
/esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
@@ -14293,7 +14365,7 @@ packages:
semver: 7.3.8
tapable: 2.2.1
typescript: 4.9.5
- webpack: 5.88.2(@swc/core@1.3.80)(esbuild@0.17.16)
+ webpack: 5.88.2(@swc/core@1.3.85)(esbuild@0.17.16)
dev: true
/form-data@2.3.3:
@@ -14924,7 +14996,7 @@ packages:
he: 1.2.0
param-case: 3.0.4
relateurl: 0.2.7
- terser: 5.14.2
+ terser: 5.16.5
/html-minifier@4.0.0:
resolution: {integrity: sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==}
@@ -16724,8 +16796,8 @@ packages:
/json-parse-even-better-errors@2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
- /json-parse-even-better-errors@3.0.0:
- resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==}
+ /json-parse-even-better-errors@3.0.1:
+ resolution: {integrity: sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
/json-schema-traverse@0.4.1:
@@ -16875,7 +16947,7 @@ packages:
dependencies:
klona: 2.0.6
less: 4.1.2
- webpack: 5.88.2(@swc/core@1.3.80)(esbuild@0.17.16)
+ webpack: 5.88.2(@swc/core@1.3.85)(esbuild@0.17.16)
dev: true
/less@4.1.2:
@@ -17427,7 +17499,7 @@ packages:
webpack: ^5.0.0
dependencies:
schema-utils: 4.0.0
- webpack: 5.88.2(@swc/core@1.3.80)(esbuild@0.17.16)
+ webpack: 5.88.2(@swc/core@1.3.85)(esbuild@0.17.16)
dev: true
/mini-css-extract-plugin@2.7.2(webpack@5.88.2):
@@ -17609,6 +17681,11 @@ packages:
resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
engines: {node: '>=10'}
+ /mrmime@2.0.0:
+ resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
+ engines: {node: '>=10'}
+ dev: false
+
/ms@2.0.0:
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
@@ -17688,8 +17765,8 @@ packages:
dependencies:
lodash: 4.17.21
- /node-fetch-native@1.4.1:
- resolution: {integrity: sha512-NsXBU0UgBxo2rQLOeWNZqS3fvflWePMECr8CoSWoSTqCqGbVVsvl9vZu1HfQicYN0g5piV9Gh8RTEvo/uP752w==}
+ /node-fetch-native@1.6.1:
+ resolution: {integrity: sha512-bW9T/uJDPAJB2YNYEpWzE54U5O3MQidXsOyTfnbKYtTtFexRvGzb1waphBN4ZwP6EcIvYYEOwW0b72BpAqydTw==}
dev: false
/node-fetch@2.6.7:
@@ -17719,8 +17796,8 @@ packages:
/node-releases@2.0.10:
resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==}
- /node-releases@2.0.13:
- resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
+ /node-releases@2.0.14:
+ resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
/normalize-package-data@2.5.0:
resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
@@ -17892,7 +17969,7 @@ packages:
resolution: {integrity: sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg==}
dependencies:
destr: 2.0.2
- node-fetch-native: 1.4.1
+ node-fetch-native: 1.6.1
ufo: 1.3.2
dev: false
@@ -18369,7 +18446,7 @@ packages:
peerDependencies:
postcss: ^8.2.15
dependencies:
- browserslist: 4.22.1
+ browserslist: 4.22.2
caniuse-api: 3.0.0
colord: 2.9.3
postcss: 8.4.31
@@ -18381,7 +18458,7 @@ packages:
peerDependencies:
postcss: ^8.2.15
dependencies:
- browserslist: 4.22.1
+ browserslist: 4.22.2
postcss: 8.4.31
postcss-value-parser: 4.2.0
@@ -18612,7 +18689,7 @@ packages:
klona: 2.0.6
postcss: 8.4.31
semver: 7.3.8
- webpack: 5.88.2(@swc/core@1.3.80)(esbuild@0.17.16)
+ webpack: 5.88.2(@swc/core@1.3.85)(esbuild@0.17.16)
dev: true
/postcss-loader@7.0.2(postcss@8.4.31)(webpack@5.88.2):
@@ -18676,7 +18753,7 @@ packages:
peerDependencies:
postcss: ^8.2.15
dependencies:
- browserslist: 4.22.1
+ browserslist: 4.22.2
caniuse-api: 3.0.0
cssnano-utils: 3.1.0(postcss@8.4.31)
postcss: 8.4.31
@@ -18708,7 +18785,7 @@ packages:
peerDependencies:
postcss: ^8.2.15
dependencies:
- browserslist: 4.22.1
+ browserslist: 4.22.2
cssnano-utils: 3.1.0(postcss@8.4.31)
postcss: 8.4.31
postcss-value-parser: 4.2.0
@@ -18865,7 +18942,7 @@ packages:
peerDependencies:
postcss: ^8.2.15
dependencies:
- browserslist: 4.22.1
+ browserslist: 4.22.2
postcss: 8.4.31
postcss-value-parser: 4.2.0
@@ -18958,7 +19035,7 @@ packages:
'@csstools/postcss-oklab-function': 1.1.1(postcss@8.4.31)
'@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.31)
autoprefixer: 10.4.13(postcss@8.4.31)
- browserslist: 4.21.5
+ browserslist: 4.22.2
css-blank-pseudo: 3.0.3(postcss@8.4.31)
css-has-pseudo: 3.0.4(postcss@8.4.31)
css-prefers-color-scheme: 6.0.3(postcss@8.4.31)
@@ -19020,7 +19097,7 @@ packages:
peerDependencies:
postcss: ^8.2.15
dependencies:
- browserslist: 4.22.1
+ browserslist: 4.22.2
caniuse-api: 3.0.0
postcss: 8.4.31
@@ -19134,6 +19211,15 @@ packages:
source-map: 0.6.1
dev: false
+ /postcss@8.4.25:
+ resolution: {integrity: sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw==}
+ engines: {node: ^10 || ^12 || >=14}
+ dependencies:
+ nanoid: 3.3.6
+ picocolors: 1.0.0
+ source-map-js: 1.0.2
+ dev: true
+
/postcss@8.4.31:
resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
engines: {node: ^10 || ^12 || >=14}
@@ -20431,7 +20517,7 @@ packages:
dependencies:
'@babel/code-frame': 7.18.6
address: 1.2.2
- browserslist: 4.22.1
+ browserslist: 4.22.2
chalk: 4.1.2
cross-spawn: 7.0.3
detect-port-alt: 1.1.6
@@ -20479,6 +20565,16 @@ packages:
react: 18.2.0
scheduler: 0.23.0
+ /react-dom@18.3.0-canary-dd480ef92-20230822(react@18.3.0-canary-dd480ef92-20230822):
+ resolution: {integrity: sha512-xAUst7w1A+Cupsv8x9pT/hZ8VmkA4UwZixUVMiay2keN9oRY8f0xvQTcwXgFgOH6wqgsoT2KPpmm6Yf8QMik5g==}
+ peerDependencies:
+ react: 18.3.0-canary-dd480ef92-20230822
+ dependencies:
+ loose-envify: 1.4.0
+ react: 18.3.0-canary-dd480ef92-20230822
+ scheduler: 0.24.0-canary-dd480ef92-20230822
+ dev: true
+
/react-error-overlay@6.0.11:
resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==}
@@ -20668,6 +20764,38 @@ packages:
'@remix-run/router': 1.7.2
react: 18.2.0
+ /react-server-dom-webpack@18.3.0-canary-dd480ef92-20230822(react-dom@18.2.0)(react@18.2.0)(webpack@5.88.2):
+ resolution: {integrity: sha512-vBIBAkrOMrqZZGKgjSY9ly82YgZrmQgK4OOMBfMD5ZpAl58eifQFF18ZtVYNX9sLdPPi4MrizYfGjMaS9fP2VQ==}
+ engines: {node: '>=0.10.0'}
+ peerDependencies:
+ react: 18.3.0-canary-dd480ef92-20230822
+ react-dom: 18.3.0-canary-dd480ef92-20230822
+ webpack: ^5.59.0
+ dependencies:
+ acorn-loose: 8.3.0
+ loose-envify: 1.4.0
+ neo-async: 2.6.2
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ webpack: 5.88.2
+ dev: true
+
+ /react-server-dom-webpack@18.3.0-canary-dd480ef92-20230822(react-dom@18.3.0-canary-dd480ef92-20230822)(react@18.3.0-canary-dd480ef92-20230822)(webpack@5.88.2):
+ resolution: {integrity: sha512-vBIBAkrOMrqZZGKgjSY9ly82YgZrmQgK4OOMBfMD5ZpAl58eifQFF18ZtVYNX9sLdPPi4MrizYfGjMaS9fP2VQ==}
+ engines: {node: '>=0.10.0'}
+ peerDependencies:
+ react: 18.3.0-canary-dd480ef92-20230822
+ react-dom: 18.3.0-canary-dd480ef92-20230822
+ webpack: ^5.59.0
+ dependencies:
+ acorn-loose: 8.3.0
+ loose-envify: 1.4.0
+ neo-async: 2.6.2
+ react: 18.3.0-canary-dd480ef92-20230822
+ react-dom: 18.3.0-canary-dd480ef92-20230822(react@18.3.0-canary-dd480ef92-20230822)
+ webpack: 5.88.2(@swc/core@1.3.85)(esbuild@0.17.16)
+ dev: true
+
/react-textarea-autosize@8.4.0(@types/react@17.0.53)(react@17.0.2):
resolution: {integrity: sha512-YrTFaEHLgJsi8sJVYHBzYn+mkP3prGkmP2DKb/tm0t7CLJY5t1Rxix8070LAKb0wby7bl/lf2EeHkuMihMZMwQ==}
engines: {node: '>=10'}
@@ -20709,6 +20837,13 @@ packages:
dependencies:
loose-envify: 1.4.0
+ /react@18.3.0-canary-dd480ef92-20230822:
+ resolution: {integrity: sha512-12tBLcvl+cSvREyeKgGfv7k9R22nxNIjIaExcPTYtPCEoefaagzuW8v3jFFSgZNw/XGg57bivIQVkj8ImVvnvg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ loose-envify: 1.4.0
+ dev: true
+
/read-cache@1.0.0:
resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
dependencies:
@@ -21303,7 +21438,7 @@ packages:
klona: 2.0.6
neo-async: 2.6.2
sass: 1.50.0
- webpack: 5.88.2(@swc/core@1.3.80)(esbuild@0.17.16)
+ webpack: 5.88.2(@swc/core@1.3.85)(esbuild@0.17.16)
dev: true
/sass@1.50.0:
@@ -21342,6 +21477,12 @@ packages:
dependencies:
loose-envify: 1.4.0
+ /scheduler@0.24.0-canary-dd480ef92-20230822:
+ resolution: {integrity: sha512-6hp1jChwe5RNdfVyA8rXw28CdPh7/hVGALqjwNwpaVrTM0SdPHy0Hes6Rqon1c9qKfUrQFhds+C+0fNMgy9hRw==}
+ dependencies:
+ loose-envify: 1.4.0
+ dev: true
+
/schema-utils@2.7.0:
resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==}
engines: {node: '>= 8.9.0'}
@@ -21409,8 +21550,8 @@ packages:
compute-scroll-into-view: 3.0.3
dev: false
- /scule@1.1.0:
- resolution: {integrity: sha512-vRUjqhyM/YWYzT+jsMk6tnl3NkY4A4soJ8uyh3O6Um+JXEQL9ozUCe7pqrxn3CSKokw0hw3nFStfskzpgYwR0g==}
+ /scule@1.1.1:
+ resolution: {integrity: sha512-sHtm/SsIK9BUBI3EFT/Gnp9VoKfY6QLvlkvAE6YK7454IF8FSgJEAnJpVdSC7K5/pjI5NfxhzBLW2JAfYA/shQ==}
dev: true
/section-matter@1.0.0:
@@ -21622,12 +21763,12 @@ packages:
mrmime: 1.0.1
totalist: 1.1.0
- /sirv@2.0.3:
- resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==}
+ /sirv@2.0.4:
+ resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==}
engines: {node: '>= 10'}
dependencies:
- '@polka/url': 1.0.0-next.21
- mrmime: 1.0.1
+ '@polka/url': 1.0.0-next.24
+ mrmime: 2.0.0
totalist: 3.0.1
dev: false
@@ -21907,8 +22048,8 @@ packages:
/std-env@3.3.2:
resolution: {integrity: sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==}
- /std-env@3.5.0:
- resolution: {integrity: sha512-JGUEaALvL0Mf6JCfYnJOTcobY+Nc7sG/TemDRBqCA0wEr4DER7zDchaaixTlmOxAjG1uRJmX82EQcxwTQTkqVA==}
+ /std-env@3.7.0:
+ resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==}
dev: true
/stealthy-require@1.1.1:
@@ -22090,7 +22231,7 @@ packages:
/strip-literal@0.4.2:
resolution: {integrity: sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==}
dependencies:
- acorn: 8.11.2
+ acorn: 8.8.2
dev: true
/strip-literal@1.3.0:
@@ -22131,7 +22272,7 @@ packages:
peerDependencies:
postcss: ^8.2.15
dependencies:
- browserslist: 4.22.1
+ browserslist: 4.22.2
postcss: 8.4.31
postcss-selector-parser: 6.0.11
@@ -22410,7 +22551,7 @@ packages:
ansi-escapes: 4.3.2
supports-hyperlinks: 2.3.0
- /terser-webpack-plugin@5.3.5(@swc/core@1.3.80)(esbuild@0.17.16)(webpack@5.76.0):
+ /terser-webpack-plugin@5.3.5(@swc/core@1.3.85)(esbuild@0.17.16)(webpack@5.76.0):
resolution: {integrity: sha512-AOEDLDxD2zylUGf/wxHxklEkOe2/r+seuyOWujejFrIxHf11brA1/dWQNIgXa1c6/Wkxgu7zvv0JhOWfc2ELEA==}
engines: {node: '>= 10.13.0'}
peerDependencies:
@@ -22427,16 +22568,16 @@ packages:
optional: true
dependencies:
'@jridgewell/trace-mapping': 0.3.17
- '@swc/core': 1.3.80
+ '@swc/core': 1.3.85
esbuild: 0.17.16
jest-worker: 27.5.1
schema-utils: 3.1.1
serialize-javascript: 6.0.1
terser: 5.14.2
- webpack: 5.76.0(@swc/core@1.3.80)(esbuild@0.17.16)
+ webpack: 5.76.0(@swc/core@1.3.85)(esbuild@0.17.16)
dev: true
- /terser-webpack-plugin@5.3.5(@swc/core@1.3.80)(esbuild@0.17.16)(webpack@5.88.2):
+ /terser-webpack-plugin@5.3.5(@swc/core@1.3.85)(esbuild@0.17.16)(webpack@5.88.2):
resolution: {integrity: sha512-AOEDLDxD2zylUGf/wxHxklEkOe2/r+seuyOWujejFrIxHf11brA1/dWQNIgXa1c6/Wkxgu7zvv0JhOWfc2ELEA==}
engines: {node: '>= 10.13.0'}
peerDependencies:
@@ -22453,13 +22594,13 @@ packages:
optional: true
dependencies:
'@jridgewell/trace-mapping': 0.3.17
- '@swc/core': 1.3.80
+ '@swc/core': 1.3.85
esbuild: 0.17.16
jest-worker: 27.5.1
schema-utils: 3.1.1
serialize-javascript: 6.0.1
terser: 5.14.2
- webpack: 5.88.2(@swc/core@1.3.80)(esbuild@0.17.16)
+ webpack: 5.88.2(@swc/core@1.3.85)(esbuild@0.17.16)
dev: true
/terser-webpack-plugin@5.3.5(esbuild@0.17.16)(webpack@5.76.0):
@@ -22507,10 +22648,10 @@ packages:
jest-worker: 27.5.1
schema-utils: 3.3.0
serialize-javascript: 6.0.1
- terser: 5.14.2
+ terser: 5.16.5
webpack: 5.88.2
- /terser-webpack-plugin@5.3.7(@swc/core@1.3.80)(esbuild@0.17.16)(webpack@5.88.2):
+ /terser-webpack-plugin@5.3.7(@swc/core@1.3.85)(esbuild@0.17.16)(webpack@5.88.2):
resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==}
engines: {node: '>= 10.13.0'}
peerDependencies:
@@ -22527,13 +22668,13 @@ packages:
optional: true
dependencies:
'@jridgewell/trace-mapping': 0.3.17
- '@swc/core': 1.3.80
+ '@swc/core': 1.3.85
esbuild: 0.17.16
jest-worker: 27.5.1
schema-utils: 3.3.0
serialize-javascript: 6.0.1
terser: 5.16.5
- webpack: 5.88.2(@swc/core@1.3.80)(esbuild@0.17.16)
+ webpack: 5.88.2(@swc/core@1.3.85)(esbuild@0.17.16)
/terser-webpack-plugin@5.3.7(esbuild@0.17.16)(webpack@5.86.0):
resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==}
@@ -22617,6 +22758,7 @@ packages:
acorn: 8.8.2
commander: 2.20.3
source-map-support: 0.5.21
+ dev: true
/terser@5.16.5:
resolution: {integrity: sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==}
@@ -22624,7 +22766,7 @@ packages:
hasBin: true
dependencies:
'@jridgewell/source-map': 0.3.2
- acorn: 8.11.2
+ acorn: 8.8.2
commander: 2.20.3
source-map-support: 0.5.21
@@ -22806,7 +22948,7 @@ packages:
- supports-color
dev: true
- /ts-jest@28.0.8(@babel/core@7.23.3)(jest@28.1.3)(typescript@4.9.5):
+ /ts-jest@28.0.8(@babel/core@7.21.0)(jest@28.1.3)(typescript@4.9.5):
resolution: {integrity: sha512-5FaG0lXmRPzApix8oFG8RKjAz4ehtm8yMKOTy5HX3fY6W8kmvOrmcY0hKDElW52FJov+clhUbrKAqofnj4mXTg==}
engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0}
hasBin: true
@@ -22827,7 +22969,7 @@ packages:
esbuild:
optional: true
dependencies:
- '@babel/core': 7.23.3
+ '@babel/core': 7.21.0
bs-logger: 0.2.6
fast-json-stable-stringify: 2.1.0
jest: 28.1.3(@types/node@17.0.45)
@@ -22860,7 +23002,7 @@ packages:
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.3
'@types/node': 17.0.45
- acorn: 8.11.2
+ acorn: 8.8.2
acorn-walk: 8.2.0
arg: 4.1.3
create-require: 1.1.1
@@ -23068,7 +23210,7 @@ packages:
/unconfig@0.3.11:
resolution: {integrity: sha512-bV/nqePAKv71v3HdVUn6UefbsDKQWRX+bJIkiSm0+twIds6WiD2bJLWWT3i214+J/B4edufZpG2w7Y63Vbwxow==}
dependencies:
- '@antfu/utils': 0.7.6
+ '@antfu/utils': 0.7.7
defu: 6.1.3
jiti: 1.21.0
mlly: 1.4.2
@@ -23121,18 +23263,20 @@ packages:
trough: 1.0.5
vfile: 4.2.1
- /unimport@3.5.0:
- resolution: {integrity: sha512-0Ei1iTeSYxs7oxxUf79/KaBc2dPjZxe7qdVpw7yIz5YcdTZjmBYO6ToLDW+fX9QOHiueZ3xtwb5Z/wqaSfXx6A==}
+ /unimport@3.7.0:
+ resolution: {integrity: sha512-vesCVjU3CYk41UZNY10kwii7l77vcP4IxPbBMgpve+vean7g7zJWrcCqSoG7u0eB9LZ5bM5BP+3vr3W2uYk0Yg==}
dependencies:
'@rollup/pluginutils': 5.1.0
+ acorn: 8.11.2
escape-string-regexp: 5.0.0
+ estree-walker: 3.0.3
fast-glob: 3.3.2
local-pkg: 0.5.0
magic-string: 0.30.5
mlly: 1.4.2
pathe: 1.1.1
pkg-types: 1.0.3
- scule: 1.1.0
+ scule: 1.1.1
strip-literal: 1.3.0
unplugin: 1.5.1(patch_hash=eanypstkeladyqkfllfbryx6lu)
transitivePeerDependencies:
@@ -23293,11 +23437,11 @@ packages:
resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
engines: {node: '>= 10.0.0'}
- /unocss@0.57.6(@unocss/webpack@0.57.6)(postcss@8.4.31)(vite@3.2.5):
- resolution: {integrity: sha512-z3a4Z8lGRVawr2A/1U0FuP1M9tuT6bs2RcIJ6kLBz5FC/XlLTGtUek6sadrKA0IMq7RWkgDRhdt8xQV0lh6TaA==}
+ /unocss@0.57.7(@unocss/webpack@0.57.7)(postcss@8.4.31)(vite@3.2.5):
+ resolution: {integrity: sha512-Z99ZZPkbkjIUXEM7L+K/7Y5V5yqUS0VigG7ZIFzLf/npieKmXHKlrPyvQWFQaf3OqooMFuKBQivh75TwvSOkcQ==}
engines: {node: '>=14'}
peerDependencies:
- '@unocss/webpack': 0.57.6
+ '@unocss/webpack': 0.57.7
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
peerDependenciesMeta:
'@unocss/webpack':
@@ -23305,27 +23449,27 @@ packages:
vite:
optional: true
dependencies:
- '@unocss/astro': 0.57.6(vite@3.2.5)
- '@unocss/cli': 0.57.6
- '@unocss/core': 0.57.6
- '@unocss/extractor-arbitrary-variants': 0.57.6
- '@unocss/postcss': 0.57.6(postcss@8.4.31)
- '@unocss/preset-attributify': 0.57.6
- '@unocss/preset-icons': 0.57.6
- '@unocss/preset-mini': 0.57.6
- '@unocss/preset-tagify': 0.57.6
- '@unocss/preset-typography': 0.57.6
- '@unocss/preset-uno': 0.57.6
- '@unocss/preset-web-fonts': 0.57.6
- '@unocss/preset-wind': 0.57.6
- '@unocss/reset': 0.57.6
- '@unocss/transformer-attributify-jsx': 0.57.6
- '@unocss/transformer-attributify-jsx-babel': 0.57.6
- '@unocss/transformer-compile-class': 0.57.6
- '@unocss/transformer-directives': 0.57.6
- '@unocss/transformer-variant-group': 0.57.6
- '@unocss/vite': 0.57.6(vite@3.2.5)
- '@unocss/webpack': 0.57.6(webpack@5.88.2)
+ '@unocss/astro': 0.57.7(vite@3.2.5)
+ '@unocss/cli': 0.57.7
+ '@unocss/core': 0.57.7
+ '@unocss/extractor-arbitrary-variants': 0.57.7
+ '@unocss/postcss': 0.57.7(postcss@8.4.31)
+ '@unocss/preset-attributify': 0.57.7
+ '@unocss/preset-icons': 0.57.7
+ '@unocss/preset-mini': 0.57.7
+ '@unocss/preset-tagify': 0.57.7
+ '@unocss/preset-typography': 0.57.7
+ '@unocss/preset-uno': 0.57.7
+ '@unocss/preset-web-fonts': 0.57.7
+ '@unocss/preset-wind': 0.57.7
+ '@unocss/reset': 0.57.7
+ '@unocss/transformer-attributify-jsx': 0.57.7
+ '@unocss/transformer-attributify-jsx-babel': 0.57.7
+ '@unocss/transformer-compile-class': 0.57.7
+ '@unocss/transformer-directives': 0.57.7
+ '@unocss/transformer-variant-group': 0.57.7
+ '@unocss/vite': 0.57.7(vite@3.2.5)
+ '@unocss/webpack': 0.57.7(webpack@5.88.2)
vite: 3.2.5(@types/node@17.0.45)
transitivePeerDependencies:
- postcss
@@ -23343,7 +23487,7 @@ packages:
acorn: 8.11.2
chokidar: 3.5.3
webpack-sources: 3.2.3
- webpack-virtual-modules: 0.6.0
+ webpack-virtual-modules: 0.6.1
patched: true
/unquote@1.1.1:
@@ -23354,13 +23498,13 @@ packages:
resolution: {integrity: sha512-Egkr/s4zcMTEuulcIb7dgURS6QpN7DyqQYdf+jBtiaJvQ+eRsrtWUoX84SbvQWuLkXsOjM+8sJC9u6KoMK/U7Q==}
hasBin: true
dependencies:
- '@babel/core': 7.23.3
- '@babel/standalone': 7.23.4
- '@babel/types': 7.23.4
+ '@babel/core': 7.23.6
+ '@babel/standalone': 7.23.6
+ '@babel/types': 7.23.6
defu: 6.1.3
jiti: 1.21.0
mri: 1.2.0
- scule: 1.1.0
+ scule: 1.1.1
transitivePeerDependencies:
- supports-color
dev: true
@@ -23375,13 +23519,13 @@ packages:
escalade: 3.1.1
picocolors: 1.0.0
- /update-browserslist-db@1.0.13(browserslist@4.22.1):
+ /update-browserslist-db@1.0.13(browserslist@4.22.2):
resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
dependencies:
- browserslist: 4.22.1
+ browserslist: 4.22.2
escalade: 3.1.1
picocolors: 1.0.0
@@ -23851,7 +23995,7 @@ packages:
hasBin: true
dependencies:
'@discoveryjs/json-ext': 0.5.7
- acorn: 8.11.2
+ acorn: 8.8.2
acorn-walk: 8.2.0
chalk: 4.1.2
commander: 7.2.0
@@ -23875,7 +24019,7 @@ packages:
mime-types: 2.1.35
range-parser: 1.2.1
schema-utils: 4.0.0
- webpack: 5.76.0(@swc/core@1.3.80)(esbuild@0.17.16)
+ webpack: 5.76.0(@swc/core@1.3.85)(esbuild@0.17.16)
dev: true
/webpack-dev-middleware@5.3.3(webpack@5.86.0):
@@ -23903,7 +24047,7 @@ packages:
mime-types: 2.1.35
range-parser: 1.2.1
schema-utils: 4.0.0
- webpack: 5.88.2(@swc/core@1.3.80)(esbuild@0.17.16)
+ webpack: 5.88.2(@swc/core@1.3.85)(esbuild@0.17.16)
/webpack-dev-middleware@6.0.2(webpack@5.76.0):
resolution: {integrity: sha512-iOddiJzPcQC6lwOIu60vscbGWth8PCRcWRCwoQcTQf9RMoOWBHg5EyzpGdtSmGMrSPd5vHEfFXmVErQEmkRngQ==}
@@ -23914,12 +24058,12 @@ packages:
webpack:
optional: true
dependencies:
- colorette: 2.0.20
+ colorette: 2.0.19
memfs: 3.4.13
mime-types: 2.1.35
range-parser: 1.2.1
schema-utils: 4.0.0
- webpack: 5.76.0(@swc/core@1.3.80)(esbuild@0.17.16)
+ webpack: 5.76.0(@swc/core@1.3.85)(esbuild@0.17.16)
dev: true
/webpack-dev-server@4.13.1(webpack@5.76.0):
@@ -23945,7 +24089,7 @@ packages:
ansi-html-community: 0.0.8
bonjour-service: 1.1.0
chokidar: 3.5.3
- colorette: 2.0.20
+ colorette: 2.0.19
compression: 1.7.4
connect-history-api-fallback: 2.0.0
default-gateway: 6.0.3
@@ -23963,7 +24107,7 @@ packages:
serve-index: 1.9.1
sockjs: 0.3.24
spdy: 4.0.2
- webpack: 5.76.0(@swc/core@1.3.80)(esbuild@0.17.16)
+ webpack: 5.76.0(@swc/core@1.3.85)(esbuild@0.17.16)
webpack-dev-middleware: 5.3.3(webpack@5.76.0)
ws: 8.13.0
transitivePeerDependencies:
@@ -24116,7 +24260,7 @@ packages:
serve-index: 1.9.1
sockjs: 0.3.24
spdy: 4.0.2
- webpack: 5.88.2(@swc/core@1.3.80)(esbuild@0.17.16)
+ webpack: 5.88.2(@swc/core@1.3.85)(esbuild@0.17.16)
webpack-dev-middleware: 5.3.3(webpack@5.88.2)
ws: 8.13.0
transitivePeerDependencies:
@@ -24144,10 +24288,10 @@ packages:
resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
engines: {node: '>=10.13.0'}
- /webpack-virtual-modules@0.6.0:
- resolution: {integrity: sha512-KnaMTE6EItz/f2q4Gwg5/rmeKVi79OR58NoYnwDJqCk9ywMtTGbBnBcfoBtN4QbYu0lWXvyMoH2Owxuhe4qI6Q==}
+ /webpack-virtual-modules@0.6.1:
+ resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==}
- /webpack@5.76.0(@swc/core@1.3.80)(esbuild@0.17.16):
+ /webpack@5.76.0(@swc/core@1.3.85)(esbuild@0.17.16):
resolution: {integrity: sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==}
engines: {node: '>=10.13.0'}
hasBin: true
@@ -24162,9 +24306,9 @@ packages:
'@webassemblyjs/ast': 1.11.1
'@webassemblyjs/wasm-edit': 1.11.1
'@webassemblyjs/wasm-parser': 1.11.1
- acorn: 8.11.2
- acorn-import-assertions: 1.9.0(acorn@8.11.2)
- browserslist: 4.22.1
+ acorn: 8.8.2
+ acorn-import-assertions: 1.9.0(acorn@8.8.2)
+ browserslist: 4.22.2
chrome-trace-event: 1.0.3
enhanced-resolve: 5.12.0
es-module-lexer: 0.9.3
@@ -24178,7 +24322,7 @@ packages:
neo-async: 2.6.2
schema-utils: 3.3.0
tapable: 2.2.1
- terser-webpack-plugin: 5.3.5(@swc/core@1.3.80)(esbuild@0.17.16)(webpack@5.76.0)
+ terser-webpack-plugin: 5.3.5(@swc/core@1.3.85)(esbuild@0.17.16)(webpack@5.76.0)
watchpack: 2.4.0
webpack-sources: 3.2.3
transitivePeerDependencies:
@@ -24202,9 +24346,9 @@ packages:
'@webassemblyjs/ast': 1.11.1
'@webassemblyjs/wasm-edit': 1.11.1
'@webassemblyjs/wasm-parser': 1.11.1
- acorn: 8.11.2
- acorn-import-assertions: 1.9.0(acorn@8.11.2)
- browserslist: 4.22.1
+ acorn: 8.8.2
+ acorn-import-assertions: 1.9.0(acorn@8.8.2)
+ browserslist: 4.22.2
chrome-trace-event: 1.0.3
enhanced-resolve: 5.12.0
es-module-lexer: 0.9.3
@@ -24244,7 +24388,7 @@ packages:
'@webassemblyjs/wasm-parser': 1.11.5
acorn: 8.8.2
acorn-import-assertions: 1.9.0(acorn@8.8.2)
- browserslist: 4.22.1
+ browserslist: 4.22.2
chrome-trace-event: 1.0.3
enhanced-resolve: 5.15.0
es-module-lexer: 1.2.1
@@ -24282,8 +24426,8 @@ packages:
'@webassemblyjs/ast': 1.11.5
'@webassemblyjs/wasm-edit': 1.11.5
'@webassemblyjs/wasm-parser': 1.11.5
- acorn: 8.11.2
- acorn-import-assertions: 1.9.0(acorn@8.11.2)
+ acorn: 8.8.2
+ acorn-import-assertions: 1.9.0(acorn@8.8.2)
browserslist: 4.21.5
chrome-trace-event: 1.0.3
enhanced-resolve: 5.15.0
@@ -24306,7 +24450,7 @@ packages:
- esbuild
- uglify-js
- /webpack@5.88.2(@swc/core@1.3.80)(esbuild@0.17.16):
+ /webpack@5.88.2(@swc/core@1.3.85)(esbuild@0.17.16):
resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==}
engines: {node: '>=10.13.0'}
hasBin: true
@@ -24321,9 +24465,9 @@ packages:
'@webassemblyjs/ast': 1.11.5
'@webassemblyjs/wasm-edit': 1.11.5
'@webassemblyjs/wasm-parser': 1.11.5
- acorn: 8.11.2
- acorn-import-assertions: 1.9.0(acorn@8.11.2)
- browserslist: 4.21.5
+ acorn: 8.8.2
+ acorn-import-assertions: 1.9.0(acorn@8.8.2)
+ browserslist: 4.22.2
chrome-trace-event: 1.0.3
enhanced-resolve: 5.15.0
es-module-lexer: 1.2.1
@@ -24337,7 +24481,7 @@ packages:
neo-async: 2.6.2
schema-utils: 3.3.0
tapable: 2.2.1
- terser-webpack-plugin: 5.3.7(@swc/core@1.3.80)(esbuild@0.17.16)(webpack@5.88.2)
+ terser-webpack-plugin: 5.3.7(@swc/core@1.3.85)(esbuild@0.17.16)(webpack@5.88.2)
watchpack: 2.4.0
webpack-sources: 3.2.3
transitivePeerDependencies:
@@ -24360,9 +24504,9 @@ packages:
'@webassemblyjs/ast': 1.11.5
'@webassemblyjs/wasm-edit': 1.11.5
'@webassemblyjs/wasm-parser': 1.11.5
- acorn: 8.11.2
- acorn-import-assertions: 1.9.0(acorn@8.11.2)
- browserslist: 4.21.5
+ acorn: 8.8.2
+ acorn-import-assertions: 1.9.0(acorn@8.8.2)
+ browserslist: 4.22.2
chrome-trace-event: 1.0.3
enhanced-resolve: 5.15.0
es-module-lexer: 1.2.1
@@ -24772,26 +24916,26 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
- /zod-validation-error@1.2.0(zod@3.22.3):
+ /zod-validation-error@1.2.0(zod@3.22.4):
resolution: {integrity: sha512-laJkD/ugwEh8CpuH+xXv5L9Z+RLz3lH8alNxolfaHZJck611OJj97R4Rb+ZqA7WNly2kNtTo4QwjdjXw9scpiw==}
engines: {node: ^14.17 || >=16.0.0}
peerDependencies:
zod: ^3.18.0
dependencies:
- zod: 3.22.3
+ zod: 3.22.4
dev: false
- /zod-validation-error@1.3.1(zod@3.22.3):
+ /zod-validation-error@1.3.1(zod@3.22.4):
resolution: {integrity: sha512-cNEXpla+tREtNdAnNKY4xKY1SGOn2yzyuZMu4O0RQylX9apRpUjNcPkEc3uHIAr5Ct7LenjZt6RzjEH6+JsqVQ==}
engines: {node: '>=16.0.0'}
peerDependencies:
zod: ^3.18.0
dependencies:
- zod: 3.22.3
+ zod: 3.22.4
dev: true
- /zod@3.22.3:
- resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==}
+ /zod@3.22.4:
+ resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==}
/zwitch@1.0.5:
resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==}