diff --git a/.changesets/10867.md b/.changesets/10867.md new file mode 100644 index 000000000000..264f1687b18f --- /dev/null +++ b/.changesets/10867.md @@ -0,0 +1,17 @@ +- breaking: remove webpack (#10867) by @Josh-Walker-GM + +This PR removes support for webpack. + +--- +To the person releasing, the follow are the breaking changes I have identified: +1. `prebuildWebFile` is function no longer exported from `@redwoodjs/babel-config` package +2. `@redwoodjs/cli-storybook` has been removed +3. `yarn rw build` no longer accepts the `--stats` flag +4. `yarn rw dev` no longer accepts the `--watchNodeModules` flag +5. `yarn rw setup custom-web-index` command has been removed +6. `yarn rw setup webpack` has been removed +7. `@redwoodjs/core` no longer provides `@redwoodjs/core/config/*` files +8. The `web.bundler` TOML config option has been removed +9. `@redwoodjs/testing` no longer provides storybook config files +10. `@redwoodjs/testing` no longer provides a `StorybookProvider` +11. The `webpack` bin has been removed from `@redwoodjs/web` diff --git a/.github/actions/set-up-test-project/action.yaml b/.github/actions/set-up-test-project/action.yaml index 0c0e623056a5..78afea244e22 100644 --- a/.github/actions/set-up-test-project/action.yaml +++ b/.github/actions/set-up-test-project/action.yaml @@ -6,9 +6,6 @@ runs: main: 'setUpTestProject.mjs' inputs: - bundler: - description: The bundler to use (vite or webpack) - default: vite canary: description: Upgrade the project to canary? default: "false" diff --git a/.github/actions/set-up-test-project/setUpTestProject.mjs b/.github/actions/set-up-test-project/setUpTestProject.mjs index 160d6b8a457b..eb6cbb55e3a1 100644 --- a/.github/actions/set-up-test-project/setUpTestProject.mjs +++ b/.github/actions/set-up-test-project/setUpTestProject.mjs @@ -20,13 +20,8 @@ const TEST_PROJECT_PATH = path.join( core.setOutput('test-project-path', TEST_PROJECT_PATH) -const bundler = core.getInput('bundler') - const canary = core.getInput('canary') === 'true' - - console.log({ - bundler, canary }) @@ -73,22 +68,6 @@ const execInProject = createExecWithEnvInCwd(TEST_PROJECT_PATH) * @returns {Promise} */ async function sharedTasks() { - console.log({ bundler }) - console.log() - - if (bundler === 'webpack') { - console.log(`Setting the bundler to ${bundler}`) - console.log() - - const redwoodTOMLPath = path.join(TEST_PROJECT_PATH, 'redwood.toml') - const redwoodTOML = fs.readFileSync(redwoodTOMLPath, 'utf-8') - const redwoodTOMLWithWebpack = redwoodTOML.replace('[web]\n', '[web]\n bundler = "webpack"\n') - fs.writeFileSync(redwoodTOMLPath, redwoodTOMLWithWebpack) - - // There's an empty line at the end of the redwood.toml file, so no need to console.log after. - console.log(fs.readFileSync(redwoodTOMLPath, 'utf-8')) - } - console.log('Generating dbAuth secret') const { stdout } = await execInProject( 'yarn rw g secret --raw', diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3ae9f0b3ce87..fc7749fafec4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -121,11 +121,7 @@ jobs: tutorial-e2e: needs: check - strategy: - matrix: - bundler: [vite, webpack] - - name: 🌲 Tutorial E2E / ${{ matrix.bundler }} / node 20 latest + name: 🌲 Tutorial E2E / node 20 latest runs-on: ubuntu-latest steps: @@ -148,7 +144,6 @@ jobs: git config --global user.name "Your Name" ./tasks/run-e2e "$project_path" \ - --bundler ${{ matrix.bundler }} \ --no-build-framework \ --no-start @@ -173,7 +168,7 @@ jobs: - uses: actions/upload-artifact@v4 if: always() with: - name: ${{ matrix.bundler }}-logs + name: logs path: | ${{ steps.crwa.outputs.project-path }}/dev_server.log ${{ steps.crwa.outputs.project-path }}/e2e.log @@ -182,11 +177,7 @@ jobs: needs: detect-changes if: needs.detect-changes.outputs.code == 'false' - strategy: - matrix: - bundler: [vite, webpack] - - name: 🌲 Tutorial E2E / ${{ matrix.bundler }} / node 20 latest + name: 🌲 Tutorial E2E / node 20 latest runs-on: ubuntu-latest steps: @@ -198,9 +189,8 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest] - bundler: [vite, webpack] - name: πŸ”„ Smoke tests / ${{ matrix.os }} / ${{ matrix.bundler }} / node 20 latest + name: πŸ”„ Smoke tests / ${{ matrix.os }} / node 20 latest runs-on: ${{ matrix.os }} env: @@ -217,8 +207,6 @@ jobs: - name: 🌲 Set up test project id: set-up-test-project uses: ./.github/actions/set-up-test-project - with: - bundler: ${{ matrix.bundler }} env: REDWOOD_DISABLE_TELEMETRY: 1 YARN_ENABLE_IMMUTABLE_INSTALLS: false @@ -278,9 +266,8 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest] - bundler: [vite, webpack] - name: πŸ”„ Smoke tests / ${{ matrix.os }} / ${{ matrix.bundler }} / node 20 latest + name: πŸ”„ Smoke tests / ${{ matrix.os }} / node 20 latest runs-on: ${{ matrix.os }} steps: @@ -292,9 +279,8 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest] - bundler: [vite, webpack] - name: πŸ”„ Smoke tests React 18 / ${{ matrix.os }} / ${{ matrix.bundler }} / node 20 latest + name: πŸ”„ Smoke tests React 18 / ${{ matrix.os }} / node 20 latest runs-on: ${{ matrix.os }} env: @@ -330,8 +316,6 @@ jobs: - name: 🌲 Set up test project for React 18 id: set-up-test-project-react-18 uses: ./.github/actions/set-up-test-project - with: - bundler: ${{ matrix.bundler }} env: REDWOOD_DISABLE_TELEMETRY: 1 YARN_ENABLE_IMMUTABLE_INSTALLS: false @@ -391,9 +375,8 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest] - bundler: [vite, webpack] - name: πŸ”„ Smoke tests React 18 / ${{ matrix.os }} / ${{ matrix.bundler }} / node 20 latest + name: πŸ”„ Smoke tests React 18 / ${{ matrix.os }} / node 20 latest runs-on: ${{ matrix.os }} steps: @@ -446,7 +429,7 @@ jobs: working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }} - name: Run "rw storybook" - run: yarn rw sb --smoke-test + run: yarn rw sbv --smoke-test working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }} - name: Run "rw exec" @@ -667,7 +650,6 @@ jobs: id: set-up-test-project uses: ./.github/actions/set-up-test-project with: - bundler: vite canary: true env: REDWOOD_DISABLE_TELEMETRY: 1 @@ -739,7 +721,6 @@ jobs: id: set-up-test-project uses: ./.github/actions/set-up-test-project with: - bundler: vite canary: true env: REDWOOD_DISABLE_TELEMETRY: 1 diff --git a/docs/docs/builds.md b/docs/docs/builds.md index 6af668900a27..7303f1872814 100644 --- a/docs/docs/builds.md +++ b/docs/docs/builds.md @@ -34,4 +34,4 @@ Each lambda function in `./api/dist/functions` is parsed by zip-it-and-ship-it r ## Web -The web side of Redwood is packaged by Webpack into the `./web/dist` folder. +The web side of Redwood is built by Vite into the `./web/dist` folder. diff --git a/docs/docs/cli-commands.md b/docs/docs/cli-commands.md index c28ac5e290f7..f09be28f7a42 100644 --- a/docs/docs/cli-commands.md +++ b/docs/docs/cli-commands.md @@ -69,7 +69,7 @@ Build for production. yarn redwood build [side..] ``` -We use Babel to transpile the api side into `./api/dist` and Webpack to package the web side into `./web/dist`. +We use Babel to transpile the api side into `./api/dist` and Vite to package the web side into `./web/dist`. | Arguments & Options | Description | | :------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -190,7 +190,7 @@ Start development servers for api and web. yarn redwood dev [side..] ``` -`yarn redwood dev api` starts the Redwood dev server and `yarn redwood dev web` starts the Webpack dev server with Redwood's config. +`yarn redwood dev api` starts the Redwood dev server and `yarn redwood dev web` starts the Vite dev server with Redwood's config. | Argument | Description | | :----------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | @@ -214,7 +214,7 @@ $ /redwood-app/node_modules/.bin/dev-server 15:04:51 api | β–Ί http://localhost:8911/graphql/ ``` -Using `--forward` (alias `--fwd`), you can pass one or more Webpack Dev Server [config options](https://webpack.js.org/configuration/dev-server/). The following will run the dev server, set the port to `1234`, and disable automatic browser opening. +Using `--forward` (alias `--fwd`), you can pass one or more Vite Dev Server [config options](https://vitejs.dev/guide/cli#vite). The following will run the dev server, set the port to `1234`, and disable automatic browser opening. ```bash ~/redwood-app$ yarn redwood dev --fwd="--port=1234 --open=false" @@ -226,7 +226,7 @@ You may need to access your dev application from a different host, like your mob ~/redwood-app$ yarn redwood dev --fwd="--allowed-hosts all" ``` -For the full list of Webpack Dev Server settings, see [this documentation](https://webpack.js.org/configuration/dev-server/). +For the full list of Vite Dev Server settings, see [this documentation](https://vitejs.dev/guide/cli#vite). For the full list of Server Configuration settings, see [this documentation](app-configuration-redwood-toml.md#api). @@ -1756,7 +1756,6 @@ yarn redwood setup | `package` | Peform setup actions by running a third-party npm package | | `tsconfig` | Add relevant tsconfig so you can start using TypeScript | | `ui` | Set up a UI design or style library | -| `webpack` | Set up a webpack config file in your project so you can add custom config | ### setup auth @@ -1788,25 +1787,6 @@ yarn redwood setup cache | `client` | Name of the client to configure, `memcached` or `redis` | | `--force, -f` | Overwrite existing files | -### setup custom-web-index - -:::warning This command only applies to projects using Webpack - -As of v6, all Redwood projects use Vite by default. -When switching projects to Vite, we made the decision to add the the entry file, `web/src/entry.client.{jsx,tsx}`, back to projects. - -::: - -Redwood automatically mounts your `` to the DOM, but if you want to customize how that happens, you can use this setup command to generate an `index.js` file in `web/src`. - -``` -yarn redwood setup custom-web-index -``` - -| Arguments & Options | Description | -| :------------------ | :----------------------- | -| `--force, -f` | Overwrite existing files | - ### setup generator Copies a given generator's template files to your local app for customization. The next time you generate that type again, it will use your custom template instead of Redwood's default. diff --git a/docs/docs/custom-web-index.md b/docs/docs/custom-web-index.md deleted file mode 100644 index 0832596980a3..000000000000 --- a/docs/docs/custom-web-index.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -description: Change how App mounts to the DOM ---- - -# Custom Web Index - -:::warning This doc only applies to projects using Webpack - -As of v6, all Redwood projects use Vite by default. -When switching projects to Vite, we made the decision to add the the entry file, `web/src/entry.client.{jsx,tsx}`, back to projects. - -If you're using Webpack, this is all still applicableβ€”keep reading. - -::: - -You may have noticed that there's no call to `ReactDOM.render` in your Redwood app. -That's because Redwood automatically mounts the `App` component in `web/src/App.js` to the DOM. -But if you need to customize how this happens, you can provide a file named `index.js` in `web/src` and Redwood will use that instead. - -## Setup - -To make this easy, there's a setup command that'll give you the file you need where you need it: - -``` -yarn rw setup custom-web-index -``` - -This generates a file named `index.js` in `web/src` that looks like this: - -```jsx title="web/src/index.js" -import { hydrateRoot, createRoot } from 'react-dom/client' - -import App from './App' -/** - * When `#redwood-app` isn't empty then it's very likely that you're using - * prerendering. So React attaches event listeners to the existing markup - * rather than replacing it. - * https://react.dev/reference/react-dom/client/hydrateRoot - */ -const rootElement = document.getElementById('redwood-app') - -if (rootElement.hasChildNodes()) { - hydrateRoot(redwoodAppElement, ) -} else { - const root = createRoot(redwoodAppElement) - root.render() -} -``` - -This's actually the same file Redwood uses [internally](https://github.com/redwoodjs/redwood/blob/main/packages/web/src/entry/index.js). -So even if you don't customize anything, things still work the way they did. diff --git a/docs/sidebars.js b/docs/sidebars.js index e5041318e477..d20bb4ce2912 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -105,7 +105,6 @@ module.exports = { 'contributing-walkthrough', 'cors', 'create-redwood-app', - 'custom-web-index', 'data-migrations', { type: 'category', diff --git a/packages/auth-providers/supabase/web/ambient.d.ts b/packages/auth-providers/supabase/web/ambient.d.ts index 57b65671d0c0..ed582f79051c 100644 --- a/packages/auth-providers/supabase/web/ambient.d.ts +++ b/packages/auth-providers/supabase/web/ambient.d.ts @@ -1,7 +1,7 @@ /* eslint-disable no-var */ declare global { - // Provided by Vite.config, or Webpack in the user's project + // Provided by Vite.config var RWJS_ENV: { RWJS_API_GRAPHQL_URL: string /** URL or absolute path to serverless functions */ diff --git a/packages/babel-config/dist.test.ts b/packages/babel-config/dist.test.ts index bb2a74869b3e..419c35a6d9af 100644 --- a/packages/babel-config/dist.test.ts +++ b/packages/babel-config/dist.test.ts @@ -31,7 +31,6 @@ describe('dist', () => { "getWebSideDefaultBabelConfig": [Function], "getWebSideOverrides": [Function], "parseTypeScriptConfigFiles": [Function], - "prebuildWebFile": [Function], "registerApiSideBabelHook": [Function], "registerBabel": [Function], "registerWebSideBabelHook": [Function], diff --git a/packages/babel-config/src/common.ts b/packages/babel-config/src/common.ts index b55a2d336f14..bd57ef78a9ed 100644 --- a/packages/babel-config/src/common.ts +++ b/packages/babel-config/src/common.ts @@ -7,6 +7,7 @@ import { parseConfigFileTextToJson } from 'typescript' import { getPaths } from '@redwoodjs/project-config' import { getWebSideBabelPlugins } from './web' +import type { Flags as WebFlags } from './web' const pkgJson = require('../package.json') @@ -17,6 +18,7 @@ export interface RegisterHookOptions { */ plugins?: PluginItem[] overrides?: TransformOptions['overrides'] + options?: WebFlags } interface BabelRegisterOptions extends TransformOptions { @@ -76,9 +78,7 @@ export const getCommonPlugins = (): Array<[string, PluginOptions]> => { // It's related to yarn workspaces to be or not to be export const getRouteHookBabelPlugins = () => { return [ - ...getWebSideBabelPlugins({ - forVite: true, - }), + ...getWebSideBabelPlugins(), [ 'babel-plugin-module-resolver', { diff --git a/packages/babel-config/src/index.ts b/packages/babel-config/src/index.ts index 7658f3e7a67c..b8a81d201786 100644 --- a/packages/babel-config/src/index.ts +++ b/packages/babel-config/src/index.ts @@ -19,7 +19,6 @@ export { getWebSideBabelPresets, getWebSideDefaultBabelConfig, getWebSideOverrides, - prebuildWebFile, registerWebSideBabelHook, } from './web' diff --git a/packages/babel-config/src/plugins/__tests__/babel-plugin-redwood-routes-auto-loader.test.ts b/packages/babel-config/src/plugins/__tests__/babel-plugin-redwood-routes-auto-loader.test.ts index 2e1cd8b9b45e..c53b180b0363 100644 --- a/packages/babel-config/src/plugins/__tests__/babel-plugin-redwood-routes-auto-loader.test.ts +++ b/packages/babel-config/src/plugins/__tests__/babel-plugin-redwood-routes-auto-loader.test.ts @@ -6,17 +6,13 @@ import * as babel from '@babel/core' import { getPaths } from '@redwoodjs/project-config' import babelRoutesAutoLoader from '../babel-plugin-redwood-routes-auto-loader' -import type { PluginOptions as RoutesAutoLoaderOptions } from '../babel-plugin-redwood-routes-auto-loader' -const transform = ( - filename: string, - pluginOptions?: RoutesAutoLoaderOptions, -) => { +const transform = (filename: string) => { const code = fs.readFileSync(filename, 'utf-8') return babel.transform(code, { filename, presets: ['@babel/preset-react'], - plugins: [[babelRoutesAutoLoader, pluginOptions]], + plugins: [[babelRoutesAutoLoader]], }) } @@ -37,7 +33,7 @@ describe('mulitiple files ending in Page.{js,jsx,ts,tsx}', () => { test('Fails with appropriate message', () => { expect(() => { transform(getPaths().web.routes) - }).toThrowError( + }).toThrow( "Unable to find only a single file ending in 'Page.{js,jsx,ts,tsx}' " + "in the following page directories: 'HomePage'", ) @@ -64,8 +60,10 @@ describe('page auto loader correctly imports pages', () => { test('Pages get both a LazyComponent and a prerenderLoader', () => { expect(result?.code).toContain(`const HomePage = { name: "HomePage", - prerenderLoader: name => __webpack_require__(require.resolveWeak("./pages/HomePage/HomePage")), - LazyComponent: lazy(() => import( /* webpackChunkName: "HomePage" */"./pages/HomePage/HomePage")) + prerenderLoader: name => ({ + default: globalThis.__REDWOOD__PRERENDER_PAGES[name] + }), + LazyComponent: lazy(() => import("./pages/HomePage/HomePage")) `) }) diff --git a/packages/babel-config/src/plugins/babel-plugin-redwood-routes-auto-loader.ts b/packages/babel-config/src/plugins/babel-plugin-redwood-routes-auto-loader.ts index 09cdf0cca8d2..6e60aa587d0c 100644 --- a/packages/babel-config/src/plugins/babel-plugin-redwood-routes-auto-loader.ts +++ b/packages/babel-config/src/plugins/babel-plugin-redwood-routes-auto-loader.ts @@ -12,7 +12,6 @@ import { export interface PluginOptions { forPrerender?: boolean - forVite?: boolean } /** @@ -38,7 +37,7 @@ export const withRelativeImports = (page: PagesDependency) => { export default function ( { types: t }: { types: typeof types }, - { forPrerender = false, forVite = false }: PluginOptions, + { forPrerender = false }: PluginOptions, ): PluginObj { // @NOTE: This var gets mutated inside the visitors let pages = processPagesDir().map(withRelativeImports) @@ -152,7 +151,7 @@ export default function ( // const = { // name: , // prerenderLoader: (name) => prerenderLoaderImpl - // LazyComponent: lazy(() => import(/* webpackChunkName: "..." */ ) + // LazyComponent: lazy(() => import() // } // @@ -160,15 +159,9 @@ export default function ( // const LoginPage = { // name: "LoginPage", // prerenderLoader: () => __webpack_require__(require.resolveWeak("./pages/LoginPage/LoginPage")), - // LazyComponent: lazy(() => import("/* webpackChunkName: "LoginPage" *//pages/LoginPage/LoginPage.tsx")) + // LazyComponent: lazy(() => import("/pages/LoginPage/LoginPage.tsx")) // } // - importArgument.leadingComments = [ - { - type: 'CommentBlock', - value: ` webpackChunkName: "${importName}" `, - }, - ] nodes.push( t.variableDeclaration('const', [ @@ -186,12 +179,7 @@ export default function ( t.identifier('prerenderLoader'), t.arrowFunctionExpression( [t.identifier('name')], - prerenderLoaderImpl( - forPrerender, - forVite, - relativeImport, - t, - ), + prerenderLoaderImpl(forPrerender, relativeImport, t), ), ), t.objectProperty( @@ -221,12 +209,10 @@ export default function ( function prerenderLoaderImpl( forPrerender: boolean, - forVite: boolean, relativeImport: string, t: typeof types, ) { if (forPrerender) { - // This works for both vite and webpack return t.callExpression(t.identifier('require'), [ t.stringLiteral(relativeImport), ]) @@ -238,26 +224,14 @@ function prerenderLoaderImpl( // first load of a prerendered page // Manually imported pages will be bundled in the main bundle and will be // loaded by the code in `normalizePage` in util.ts - let implForBuild - if (forVite) { - implForBuild = t.objectExpression([ - t.objectProperty( - t.identifier('default'), - t.memberExpression( - t.identifier('globalThis.__REDWOOD__PRERENDER_PAGES'), - t.identifier('name'), - true, - ), + return t.objectExpression([ + t.objectProperty( + t.identifier('default'), + t.memberExpression( + t.identifier('globalThis.__REDWOOD__PRERENDER_PAGES'), + t.identifier('name'), + true, ), - ]) - } else { - // Use __webpack_require__ otherwise all pages will be bundled - implForBuild = t.callExpression(t.identifier('__webpack_require__'), [ - t.callExpression(t.identifier('require.resolveWeak'), [ - t.stringLiteral(relativeImport), - ]), - ]) - } - - return implForBuild + ), + ]) } diff --git a/packages/babel-config/src/web.ts b/packages/babel-config/src/web.ts index 6c8a46e58beb..5c959fa14755 100644 --- a/packages/babel-config/src/web.ts +++ b/packages/babel-config/src/web.ts @@ -1,7 +1,6 @@ import fs from 'fs' import path from 'path' -import * as babel from '@babel/core' import type { TransformOptions } from '@babel/core' // This import is for types safety. Its just a type, no harm importing from src. @@ -11,7 +10,6 @@ import { getConfig, getPaths } from '@redwoodjs/project-config' import type { RegisterHookOptions } from './common' import { CORE_JS_VERSION, - getCommonPlugins, registerBabel, parseTypeScriptConfigFiles, getPathsFromTypeScriptConfig, @@ -21,12 +19,11 @@ import { export interface Flags { forJest?: boolean // will change the alias for module-resolver plugin forPrerender?: boolean // changes what babel-plugin-redwood-routes-auto-loader does - forVite?: boolean forRsc?: boolean } export const getWebSideBabelPlugins = ( - { forJest, forVite }: Flags = { forJest: false, forVite: false }, + { forJest }: Flags = { forJest: false }, ) => { // Need the project config to know if trusted graphql documents is being used and decide to use // the gql tag import or the trusted document gql function generated by code gen client preset @@ -44,8 +41,6 @@ export const getWebSideBabelPlugins = ( // Get the TS configs in the api and web sides as an object const tsConfigs = parseTypeScriptConfigFiles() - // Vite does not need these plugins - const commonPlugins = forVite ? [] : getCommonPlugins() const plugins = [ // It is important that this plugin run first, as noted here: https://react.dev/learn/react-compiler useReactCompiler && [ @@ -54,7 +49,6 @@ export const getWebSideBabelPlugins = ( // No specific config at this time... }, ], - ...commonPlugins, // === Import path handling [ 'babel-plugin-module-resolver', @@ -122,9 +116,8 @@ export const getWebSideBabelPlugins = ( } export const getWebSideOverrides = ( - { forPrerender, forVite, forRsc }: Flags = { + { forPrerender, forRsc }: Flags = { forPrerender: false, - forVite: false, forRsc: false, }, ): Array => { @@ -148,7 +141,6 @@ export const getWebSideOverrides = ( // context we're building for { forPrerender, - forVite, } satisfies RoutesAutoLoaderOptions, ], ], @@ -172,53 +164,55 @@ export const getWebSideOverrides = ( } export const getWebSideBabelPresets = (options: Flags) => { - if (options.forVite) { - return [] - } - - let reactPresetConfig: babel.PluginItem = { runtime: 'automatic' } + // When we perform prerendering we don't use vite, so we need to add the + // appropriate presets for react, env, and typescript, etc. + if (options.forPrerender || options.forJest) { + let reactPresetConfig: babel.PluginItem = { runtime: 'automatic' } - // This is a special case, where @babel/preset-react needs config - // And using extends doesn't work - if (getWebSideBabelConfigPath()) { - const userProjectConfig = require(getWebSideBabelConfigPath() as string) + // This is a special case, where @babel/preset-react needs config + // And using extends doesn't work + if (getWebSideBabelConfigPath()) { + const userProjectConfig = require(getWebSideBabelConfigPath() as string) - userProjectConfig.presets?.forEach( - (preset: TransformOptions['presets']) => { - // If it isn't a preset with special config ignore it - if (!Array.isArray(preset)) { - return - } + userProjectConfig.presets?.forEach( + (preset: TransformOptions['presets']) => { + // If it isn't a preset with special config ignore it + if (!Array.isArray(preset)) { + return + } - const [presetName, presetConfig] = preset - if (presetName === '@babel/preset-react') { - reactPresetConfig = presetConfig - } - }, - ) - } - return [ - ['@babel/preset-react', reactPresetConfig], - [ - '@babel/preset-env', - { - // the targets are set in /web/package.json - useBuiltIns: 'usage', - corejs: { - version: CORE_JS_VERSION, - proposals: true, + const [presetName, presetConfig] = preset + if (presetName === '@babel/preset-react') { + reactPresetConfig = presetConfig + } }, - exclude: [ - // Remove class-properties from preset-env, and include separately - // https://github.com/webpack/webpack/issues/9708 - '@babel/plugin-transform-class-properties', - '@babel/plugin-transform-private-methods', - ], - }, - 'rwjs-babel-preset-env', - ], - ['@babel/preset-typescript', undefined, 'rwjs-babel-preset-typescript'], - ] + ) + } + return [ + ['@babel/preset-react', reactPresetConfig], + [ + '@babel/preset-env', + { + // the targets are set in /web/package.json + useBuiltIns: 'usage', + corejs: { + version: CORE_JS_VERSION, + proposals: true, + }, + exclude: [ + // Remove class-properties from preset-env, and include separately + // https://github.com/webpack/webpack/issues/9708 + '@babel/plugin-transform-class-properties', + '@babel/plugin-transform-private-methods', + ], + }, + 'rwjs-babel-preset-env', + ], + ['@babel/preset-typescript', undefined, 'rwjs-babel-preset-typescript'], + ] + } + + return [] } export const getWebSideBabelConfigPath = () => { @@ -247,11 +241,11 @@ export const getWebSideDefaultBabelConfig = (options: Flags = {}) => { // Used in prerender only currently export const registerWebSideBabelHook = ({ - forVite = false, plugins = [], overrides = [], -}: RegisterHookOptions & { forVite?: boolean } = {}) => { - const defaultOptions = getWebSideDefaultBabelConfig() + options = {}, +}: RegisterHookOptions = {}) => { + const defaultOptions = getWebSideDefaultBabelConfig(options) registerBabel({ ...defaultOptions, root: getPaths().base, @@ -260,23 +254,6 @@ export const registerWebSideBabelHook = ({ cache: false, // We only register for prerender currently // Static importing pages makes sense - overrides: [ - ...getWebSideOverrides({ forPrerender: true, forVite }), - ...overrides, - ], - }) -} - -// @MARK -// Currently only used in testing -export const prebuildWebFile = (srcPath: string, flags: Flags = {}) => { - const code = fs.readFileSync(srcPath, 'utf-8') - const defaultOptions = getWebSideDefaultBabelConfig(flags) - - const result = babel.transform(code, { - ...defaultOptions, - cwd: getPaths().web.base, - filename: srcPath, + overrides: [...getWebSideOverrides({ forPrerender: true }), ...overrides], }) - return result } diff --git a/packages/cli-packages/storybook/README.md b/packages/cli-packages/storybook/README.md deleted file mode 100644 index 6c3b4e496888..000000000000 --- a/packages/cli-packages/storybook/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# CLI Packages - Storybook - -**WIP**: This package is the first example of extracting a command from `@redwoodjs/cli` into it's own CLI plugin package. - - - - - -## Dependency graphs - -### src - -![src](./dependencyGraph.src.svg) - -### dist - -![dist](./dependencyGraph.dist.svg) diff --git a/packages/cli-packages/storybook/build.mts b/packages/cli-packages/storybook/build.mts deleted file mode 100644 index 16175a6725c0..000000000000 --- a/packages/cli-packages/storybook/build.mts +++ /dev/null @@ -1,3 +0,0 @@ -import { build } from '@redwoodjs/framework-tools' - -await build() diff --git a/packages/cli-packages/storybook/dependencyGraph.dist.svg b/packages/cli-packages/storybook/dependencyGraph.dist.svg deleted file mode 100644 index 4caa2cb553d4..000000000000 --- a/packages/cli-packages/storybook/dependencyGraph.dist.svg +++ /dev/null @@ -1,1080 +0,0 @@ - - - - - - -dependency-cruiser output - - -cluster_node_modules - -node_modules - - -cluster_node_modules/@babel - -@babel - - -cluster_node_modules/@iarna - -@iarna - - -cluster_node_modules/@opentelemetry - -@opentelemetry - - -cluster_packages - -packages - - -cluster_packages/project-config - -project-config - - -cluster_packages/project-config/dist - -dist - - -cluster_packages/telemetry - -telemetry - - -cluster_packages/telemetry/dist - -dist - - -cluster_packages/cli-helpers - -cli-helpers - - -cluster_packages/cli-helpers/dist - -dist - - -cluster_packages/cli-helpers/dist/telemetry - -telemetry - - -cluster_packages/cli-helpers/dist/auth - -auth - - -cluster_packages/cli-helpers/dist/lib - -lib - - -cluster_packages/cli-packages - -cli-packages - - -cluster_packages/cli-packages/storybook - -storybook - - -cluster_packages/cli-packages/storybook/dist - -dist - - -cluster_packages/cli-packages/storybook/dist/commands - -commands - - -cluster_packages/cli-packages/storybook/dist/lib - -lib - - - -child_process - - -child_process - - - - - -fs - - -fs - - - - - -node_modules/@babel/core - - - - - -core - - - - - -node_modules/@babel/runtime-corejs3 - - - - - -runtime-corejs3 - - - - - -node_modules/@iarna/toml - - - - - -toml - - - - - -node_modules/@opentelemetry/api - - - - - -api - - - - - -node_modules/chalk - - - - - -chalk - - - - - -node_modules/core-js - - - - - -core-js - - - - - -node_modules/deepmerge - - - - - -deepmerge - - - - - -node_modules/execa - - - - - -execa - - - - - -node_modules/fast-glob - - - - - -fast-glob - - - - - -node_modules/listr2 - - - - - -listr2 - - - - - -node_modules/pascalcase - - - - - -pascalcase - - - - - -node_modules/prettier - - - - - -prettier - - - - - -node_modules/string-env-interpolation - - - - - -string-env-interpolation - - - - - -node_modules/terminal-link - - - - - -terminal-link - - - - - -node_modules/yargs - - - - - -yargs - - - - - -os - - -os - - - - - -packages/cli-helpers/dist/auth/authFiles.js - - -authFiles.js -94% - - - - - -packages/cli-helpers/dist/auth/authFiles.js->fs - - - - - -packages/cli-helpers/dist/auth/authFiles.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/cli-helpers/dist/auth/authFiles.js->node_modules/pascalcase - - - - - -packages/cli-helpers/dist/lib/index.js - - -index.js -80% - - - - - -packages/cli-helpers/dist/auth/authFiles.js->packages/cli-helpers/dist/lib/index.js - - - - - -packages/cli-helpers/dist/lib/paths.js - - -paths.js -33% - - - - - -packages/cli-helpers/dist/auth/authFiles.js->packages/cli-helpers/dist/lib/paths.js - - - - - -packages/cli-helpers/dist/lib/project.js - - -project.js -75% - - - - - -packages/cli-helpers/dist/auth/authFiles.js->packages/cli-helpers/dist/lib/project.js - - - - - -path - - -path - - - - - -packages/cli-helpers/dist/auth/authFiles.js->path - - - - - -packages/cli-helpers/dist/lib/index.js->fs - - - - - -packages/cli-helpers/dist/lib/index.js->node_modules/@babel/core - - - - - -packages/cli-helpers/dist/lib/index.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/cli-helpers/dist/lib/index.js->node_modules/listr2 - - - - - -packages/cli-helpers/dist/lib/index.js->node_modules/prettier - - - - - -packages/cli-helpers/dist/lib/index.js->packages/cli-helpers/dist/lib/paths.js - - - - - -packages/cli-helpers/dist/lib/index.js->path - - - - - -packages/cli-helpers/dist/lib/colors.js - - -colors.js -33% - - - - - -packages/cli-helpers/dist/lib/index.js->packages/cli-helpers/dist/lib/colors.js - - - - - -packages/cli-helpers/dist/lib/paths.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/cli-helpers/dist/lib/paths.js->packages/cli-helpers/dist/lib/colors.js - - - - - -packages/project-config/dist/index.js - - -index.js -55% - - - - - -packages/cli-helpers/dist/lib/paths.js->packages/project-config/dist/index.js - - - - - -packages/cli-helpers/dist/lib/project.js->fs - - - - - -packages/cli-helpers/dist/lib/project.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/cli-helpers/dist/lib/project.js->packages/cli-helpers/dist/lib/paths.js - - - - - -packages/cli-helpers/dist/lib/project.js->path - - - - - -packages/cli-helpers/dist/lib/project.js->packages/cli-helpers/dist/lib/colors.js - - - - - -packages/cli-helpers/dist/lib/project.js->packages/project-config/dist/index.js - - - - - -packages/cli-helpers/package.json - - -package.json -0% - - - - - -packages/cli-helpers/dist/lib/project.js->packages/cli-helpers/package.json - - - - - -packages/cli-helpers/dist/auth/authTasks.js - - -authTasks.js -95% - - - - - -packages/cli-helpers/dist/auth/authTasks.js->fs - - - - - -packages/cli-helpers/dist/auth/authTasks.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/cli-helpers/dist/auth/authTasks.js->node_modules/core-js - - - - - -packages/cli-helpers/dist/auth/authTasks.js->packages/cli-helpers/dist/auth/authFiles.js - - - - - -packages/cli-helpers/dist/auth/authTasks.js->packages/cli-helpers/dist/lib/index.js - - - - - -packages/cli-helpers/dist/auth/authTasks.js->packages/cli-helpers/dist/lib/paths.js - - - - - -packages/cli-helpers/dist/auth/authTasks.js->packages/cli-helpers/dist/lib/project.js - - - - - -packages/cli-helpers/dist/auth/authTasks.js->path - - - - - -packages/cli-helpers/dist/auth/authTasks.js->packages/cli-helpers/dist/lib/colors.js - - - - - -packages/cli-helpers/dist/auth/authTasks.js->packages/project-config/dist/index.js - - - - - -packages/cli-helpers/dist/lib/colors.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/cli-helpers/dist/lib/colors.js->node_modules/chalk - - - - - -packages/project-config/dist/index.js->fs - - - - - -packages/project-config/dist/index.js->node_modules/@iarna/toml - - - - - -packages/project-config/dist/index.js->node_modules/deepmerge - - - - - -packages/project-config/dist/index.js->node_modules/fast-glob - - - - - -packages/project-config/dist/index.js->node_modules/string-env-interpolation - - - - - -packages/project-config/dist/index.js->path - - - - - -packages/cli-helpers/dist/auth/setupHelpers.js - - -setupHelpers.js -91% - - - - - -packages/cli-helpers/dist/auth/setupHelpers.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/cli-helpers/dist/auth/setupHelpers.js->node_modules/core-js - - - - - -packages/cli-helpers/dist/auth/setupHelpers.js->node_modules/listr2 - - - - - -packages/cli-helpers/dist/auth/setupHelpers.js->node_modules/terminal-link - - - - - -packages/cli-helpers/dist/auth/setupHelpers.js->packages/cli-helpers/dist/auth/authTasks.js - - - - - -packages/cli-helpers/dist/auth/setupHelpers.js->packages/cli-helpers/dist/lib/colors.js - - - - - -packages/cli-helpers/dist/lib/installHelpers.js - - -installHelpers.js -67% - - - - - -packages/cli-helpers/dist/auth/setupHelpers.js->packages/cli-helpers/dist/lib/installHelpers.js - - - - - -packages/telemetry/dist/index.js - - -index.js -67% - - - - - -packages/cli-helpers/dist/auth/setupHelpers.js->packages/telemetry/dist/index.js - - - - - -packages/cli-helpers/dist/lib/installHelpers.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/cli-helpers/dist/lib/installHelpers.js->node_modules/execa - - - - - -packages/cli-helpers/dist/lib/installHelpers.js->packages/cli-helpers/dist/lib/paths.js - - - - - -packages/telemetry/dist/index.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/telemetry/dist/telemetry.js - - -telemetry.js -88% - - - - - -packages/telemetry/dist/index.js->packages/telemetry/dist/telemetry.js - - - - - -packages/cli-helpers/dist/index.js - - -index.js -91% - - - - - -packages/cli-helpers/dist/index.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/cli-helpers/dist/index.js->packages/cli-helpers/dist/lib/index.js - - - - - -packages/cli-helpers/dist/index.js->packages/cli-helpers/dist/lib/paths.js - - - - - -packages/cli-helpers/dist/index.js->packages/cli-helpers/dist/lib/project.js - - - - - -packages/cli-helpers/dist/index.js->packages/cli-helpers/dist/lib/colors.js - - - - - -packages/cli-helpers/dist/index.js->packages/cli-helpers/dist/auth/setupHelpers.js - - - - - -packages/cli-helpers/dist/index.js->packages/cli-helpers/dist/lib/installHelpers.js - - - - - -packages/cli-helpers/dist/telemetry/index.js - - -index.js -83% - - - - - -packages/cli-helpers/dist/index.js->packages/cli-helpers/dist/telemetry/index.js - - - - - -packages/cli-helpers/dist/telemetry/index.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/cli-helpers/dist/telemetry/index.js->node_modules/@opentelemetry/api - - - - - -packages/cli-packages/storybook/dist/commands/storybook.d.ts - - -storybook.d.ts -100% - - - - - -packages/cli-packages/storybook/dist/commands/storybook.d.ts->node_modules/yargs - - - - - -packages/cli-packages/storybook/dist/types.js - - -types.js -0% - - - - - -packages/cli-packages/storybook/dist/commands/storybook.d.ts->packages/cli-packages/storybook/dist/types.js - - - - - -packages/cli-packages/storybook/dist/commands/storybook.js - - -storybook.js -60% - - - - - -packages/cli-packages/storybook/dist/commands/storybook.js->node_modules/terminal-link - - - - - -packages/cli-packages/storybook/dist/commands/storybook.js->packages/cli-helpers/dist/index.js - - - - - -packages/cli-packages/storybook/dist/commands/storybookHandler.js - - -storybookHandler.js -83% - - - - - -packages/cli-packages/storybook/dist/commands/storybook.js->packages/cli-packages/storybook/dist/commands/storybookHandler.js - - - - - -packages/cli-packages/storybook/dist/commands/storybookHandler.js->node_modules/execa - - - - - -packages/cli-packages/storybook/dist/commands/storybookHandler.js->path - - - - - -packages/cli-packages/storybook/dist/commands/storybookHandler.js->packages/project-config/dist/index.js - - - - - -packages/cli-packages/storybook/dist/commands/storybookHandler.js->packages/telemetry/dist/index.js - - - - - -packages/cli-packages/storybook/dist/lib/colors.js - - -colors.js -50% - - - - - -packages/cli-packages/storybook/dist/commands/storybookHandler.js->packages/cli-packages/storybook/dist/lib/colors.js - - - - - -packages/cli-packages/storybook/dist/commands/storybookHandler.d.ts - - -storybookHandler.d.ts -100% - - - - - -packages/cli-packages/storybook/dist/commands/storybookHandler.d.ts->packages/cli-packages/storybook/dist/types.js - - - - - -packages/cli-packages/storybook/dist/lib/colors.js->node_modules/chalk - - - - - -packages/cli-packages/storybook/dist/index.d.ts - - -index.d.ts -100% - - - - - -packages/cli-packages/storybook/dist/index.d.ts->packages/cli-packages/storybook/dist/commands/storybook.js - - - - - -packages/cli-packages/storybook/dist/index.js - - -index.js -100% - - - - - -packages/cli-packages/storybook/dist/index.js->packages/cli-packages/storybook/dist/commands/storybook.js - - - - - -packages/cli-packages/storybook/dist/lib/colors.d.ts - - -colors.d.ts -100% - - - - - -packages/cli-packages/storybook/dist/lib/colors.d.ts->node_modules/chalk - - - - - -packages/cli-packages/storybook/dist/types.d.ts - - -types.d.ts -0% - - - - - -packages/telemetry/dist/telemetry.js->child_process - - - - - -packages/telemetry/dist/telemetry.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/telemetry/dist/telemetry.js->os - - - - - -packages/telemetry/dist/telemetry.js->path - - - - - -packages/telemetry/dist/telemetry.js->packages/project-config/dist/index.js - - - - - diff --git a/packages/cli-packages/storybook/dependencyGraph.src.svg b/packages/cli-packages/storybook/dependencyGraph.src.svg deleted file mode 100644 index 903d3717fba0..000000000000 --- a/packages/cli-packages/storybook/dependencyGraph.src.svg +++ /dev/null @@ -1,1018 +0,0 @@ - - - - - - -dependency-cruiser output - - -cluster_node_modules - -node_modules - - -cluster_node_modules/@babel - -@babel - - -cluster_node_modules/@iarna - -@iarna - - -cluster_node_modules/@opentelemetry - -@opentelemetry - - -cluster_packages - -packages - - -cluster_packages/cli-helpers - -cli-helpers - - -cluster_packages/cli-helpers/dist - -dist - - -cluster_packages/cli-helpers/dist/auth - -auth - - -cluster_packages/cli-helpers/dist/lib - -lib - - -cluster_packages/cli-helpers/dist/telemetry - -telemetry - - -cluster_packages/cli-packages - -cli-packages - - -cluster_packages/cli-packages/storybook - -storybook - - -cluster_packages/cli-packages/storybook/src - -src - - -cluster_packages/cli-packages/storybook/src/commands - -commands - - -cluster_packages/cli-packages/storybook/src/lib - -lib - - -cluster_packages/project-config - -project-config - - -cluster_packages/project-config/dist - -dist - - -cluster_packages/telemetry - -telemetry - - -cluster_packages/telemetry/dist - -dist - - - -child_process - - -child_process - - - - - -fs - - -fs - - - - - -node_modules/@babel/core - - - - - -core - - - - - -node_modules/@babel/runtime-corejs3 - - - - - -runtime-corejs3 - - - - - -node_modules/@iarna/toml - - - - - -toml - - - - - -node_modules/@opentelemetry/api - - - - - -api - - - - - -node_modules/chalk - - - - - -chalk - - - - - -node_modules/core-js - - - - - -core-js - - - - - -node_modules/deepmerge - - - - - -deepmerge - - - - - -node_modules/execa - - - - - -execa - - - - - -node_modules/fast-glob - - - - - -fast-glob - - - - - -node_modules/listr2 - - - - - -listr2 - - - - - -node_modules/pascalcase - - - - - -pascalcase - - - - - -node_modules/prettier - - - - - -prettier - - - - - -node_modules/string-env-interpolation - - - - - -string-env-interpolation - - - - - -node_modules/terminal-link - - - - - -terminal-link - - - - - -node_modules/yargs - - - - - -yargs - - - - - -os - - -os - - - - - -packages/cli-helpers/dist/auth/authFiles.js - - -authFiles.js -94% - - - - - -packages/cli-helpers/dist/auth/authFiles.js->fs - - - - - -packages/cli-helpers/dist/auth/authFiles.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/cli-helpers/dist/auth/authFiles.js->node_modules/pascalcase - - - - - -packages/cli-helpers/dist/lib/index.js - - -index.js -80% - - - - - -packages/cli-helpers/dist/auth/authFiles.js->packages/cli-helpers/dist/lib/index.js - - - - - -packages/cli-helpers/dist/lib/paths.js - - -paths.js -33% - - - - - -packages/cli-helpers/dist/auth/authFiles.js->packages/cli-helpers/dist/lib/paths.js - - - - - -packages/cli-helpers/dist/lib/project.js - - -project.js -75% - - - - - -packages/cli-helpers/dist/auth/authFiles.js->packages/cli-helpers/dist/lib/project.js - - - - - -path - - -path - - - - - -packages/cli-helpers/dist/auth/authFiles.js->path - - - - - -packages/cli-helpers/dist/lib/index.js->fs - - - - - -packages/cli-helpers/dist/lib/index.js->node_modules/@babel/core - - - - - -packages/cli-helpers/dist/lib/index.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/cli-helpers/dist/lib/index.js->node_modules/listr2 - - - - - -packages/cli-helpers/dist/lib/index.js->node_modules/prettier - - - - - -packages/cli-helpers/dist/lib/index.js->packages/cli-helpers/dist/lib/paths.js - - - - - -packages/cli-helpers/dist/lib/index.js->path - - - - - -packages/cli-helpers/dist/lib/colors.js - - -colors.js -33% - - - - - -packages/cli-helpers/dist/lib/index.js->packages/cli-helpers/dist/lib/colors.js - - - - - -packages/cli-helpers/dist/lib/paths.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/cli-helpers/dist/lib/paths.js->packages/cli-helpers/dist/lib/colors.js - - - - - -packages/project-config/dist/index.js - - -index.js -55% - - - - - -packages/cli-helpers/dist/lib/paths.js->packages/project-config/dist/index.js - - - - - -packages/cli-helpers/dist/lib/project.js->fs - - - - - -packages/cli-helpers/dist/lib/project.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/cli-helpers/dist/lib/project.js->packages/cli-helpers/dist/lib/paths.js - - - - - -packages/cli-helpers/dist/lib/project.js->path - - - - - -packages/cli-helpers/dist/lib/project.js->packages/cli-helpers/dist/lib/colors.js - - - - - -packages/cli-helpers/dist/lib/project.js->packages/project-config/dist/index.js - - - - - -packages/cli-helpers/package.json - - -package.json -0% - - - - - -packages/cli-helpers/dist/lib/project.js->packages/cli-helpers/package.json - - - - - -packages/cli-helpers/dist/auth/authTasks.js - - -authTasks.js -95% - - - - - -packages/cli-helpers/dist/auth/authTasks.js->fs - - - - - -packages/cli-helpers/dist/auth/authTasks.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/cli-helpers/dist/auth/authTasks.js->node_modules/core-js - - - - - -packages/cli-helpers/dist/auth/authTasks.js->packages/cli-helpers/dist/auth/authFiles.js - - - - - -packages/cli-helpers/dist/auth/authTasks.js->packages/cli-helpers/dist/lib/index.js - - - - - -packages/cli-helpers/dist/auth/authTasks.js->packages/cli-helpers/dist/lib/paths.js - - - - - -packages/cli-helpers/dist/auth/authTasks.js->packages/cli-helpers/dist/lib/project.js - - - - - -packages/cli-helpers/dist/auth/authTasks.js->path - - - - - -packages/cli-helpers/dist/auth/authTasks.js->packages/cli-helpers/dist/lib/colors.js - - - - - -packages/cli-helpers/dist/auth/authTasks.js->packages/project-config/dist/index.js - - - - - -packages/cli-helpers/dist/lib/colors.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/cli-helpers/dist/lib/colors.js->node_modules/chalk - - - - - -packages/project-config/dist/index.js->fs - - - - - -packages/project-config/dist/index.js->node_modules/@iarna/toml - - - - - -packages/project-config/dist/index.js->node_modules/deepmerge - - - - - -packages/project-config/dist/index.js->node_modules/fast-glob - - - - - -packages/project-config/dist/index.js->node_modules/string-env-interpolation - - - - - -packages/project-config/dist/index.js->path - - - - - -packages/cli-helpers/dist/auth/setupHelpers.js - - -setupHelpers.js -91% - - - - - -packages/cli-helpers/dist/auth/setupHelpers.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/cli-helpers/dist/auth/setupHelpers.js->node_modules/core-js - - - - - -packages/cli-helpers/dist/auth/setupHelpers.js->node_modules/listr2 - - - - - -packages/cli-helpers/dist/auth/setupHelpers.js->node_modules/terminal-link - - - - - -packages/cli-helpers/dist/auth/setupHelpers.js->packages/cli-helpers/dist/auth/authTasks.js - - - - - -packages/cli-helpers/dist/auth/setupHelpers.js->packages/cli-helpers/dist/lib/colors.js - - - - - -packages/cli-helpers/dist/lib/installHelpers.js - - -installHelpers.js -67% - - - - - -packages/cli-helpers/dist/auth/setupHelpers.js->packages/cli-helpers/dist/lib/installHelpers.js - - - - - -packages/telemetry/dist/index.js - - -index.js -67% - - - - - -packages/cli-helpers/dist/auth/setupHelpers.js->packages/telemetry/dist/index.js - - - - - -packages/cli-helpers/dist/lib/installHelpers.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/cli-helpers/dist/lib/installHelpers.js->node_modules/execa - - - - - -packages/cli-helpers/dist/lib/installHelpers.js->packages/cli-helpers/dist/lib/paths.js - - - - - -packages/telemetry/dist/index.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/telemetry/dist/telemetry.js - - -telemetry.js -88% - - - - - -packages/telemetry/dist/index.js->packages/telemetry/dist/telemetry.js - - - - - -packages/cli-helpers/dist/index.js - - -index.js -91% - - - - - -packages/cli-helpers/dist/index.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/cli-helpers/dist/index.js->packages/cli-helpers/dist/lib/index.js - - - - - -packages/cli-helpers/dist/index.js->packages/cli-helpers/dist/lib/paths.js - - - - - -packages/cli-helpers/dist/index.js->packages/cli-helpers/dist/lib/project.js - - - - - -packages/cli-helpers/dist/index.js->packages/cli-helpers/dist/lib/colors.js - - - - - -packages/cli-helpers/dist/index.js->packages/cli-helpers/dist/auth/setupHelpers.js - - - - - -packages/cli-helpers/dist/index.js->packages/cli-helpers/dist/lib/installHelpers.js - - - - - -packages/cli-helpers/dist/telemetry/index.js - - -index.js -83% - - - - - -packages/cli-helpers/dist/index.js->packages/cli-helpers/dist/telemetry/index.js - - - - - -packages/cli-helpers/dist/telemetry/index.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/cli-helpers/dist/telemetry/index.js->node_modules/@opentelemetry/api - - - - - -packages/cli-packages/storybook/src/commands/storybook.ts - - -storybook.ts -83% - - - - - -packages/cli-packages/storybook/src/commands/storybook.ts->node_modules/terminal-link - - - - - -packages/cli-packages/storybook/src/commands/storybook.ts->node_modules/yargs - - - - - -packages/cli-packages/storybook/src/commands/storybook.ts->packages/cli-helpers/dist/index.js - - - - - -packages/cli-packages/storybook/src/types.ts - - -types.ts -0% - - - - - -packages/cli-packages/storybook/src/commands/storybook.ts->packages/cli-packages/storybook/src/types.ts - - - - - -packages/cli-packages/storybook/src/commands/storybookHandler.ts - - -storybookHandler.ts -86% - - - - - -packages/cli-packages/storybook/src/commands/storybook.ts->packages/cli-packages/storybook/src/commands/storybookHandler.ts - - - - - -packages/cli-packages/storybook/src/commands/storybookHandler.ts->node_modules/execa - - - - - -packages/cli-packages/storybook/src/commands/storybookHandler.ts->path - - - - - -packages/cli-packages/storybook/src/commands/storybookHandler.ts->packages/project-config/dist/index.js - - - - - -packages/cli-packages/storybook/src/commands/storybookHandler.ts->packages/telemetry/dist/index.js - - - - - -packages/cli-packages/storybook/src/commands/storybookHandler.ts->packages/cli-packages/storybook/src/types.ts - - - - - -packages/cli-packages/storybook/src/lib/colors.ts - - -colors.ts -50% - - - - - -packages/cli-packages/storybook/src/commands/storybookHandler.ts->packages/cli-packages/storybook/src/lib/colors.ts - - - - - -packages/cli-packages/storybook/src/lib/colors.ts->node_modules/chalk - - - - - -packages/cli-packages/storybook/src/index.ts - - -index.ts -100% - - - - - -packages/cli-packages/storybook/src/index.ts->packages/cli-packages/storybook/src/commands/storybook.ts - - - - - -packages/telemetry/dist/telemetry.js->child_process - - - - - -packages/telemetry/dist/telemetry.js->node_modules/@babel/runtime-corejs3 - - - - - -packages/telemetry/dist/telemetry.js->os - - - - - -packages/telemetry/dist/telemetry.js->path - - - - - -packages/telemetry/dist/telemetry.js->packages/project-config/dist/index.js - - - - - diff --git a/packages/cli-packages/storybook/package.json b/packages/cli-packages/storybook/package.json deleted file mode 100644 index feaf1be6d2c0..000000000000 --- a/packages/cli-packages/storybook/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "@redwoodjs/cli-storybook", - "version": "7.0.0", - "repository": { - "type": "git", - "url": "git+https://github.com/redwoodjs/redwood.git", - "directory": "packages/cli-packages/storybook" - }, - "license": "MIT", - "main": "./dist/index.js", - "types": "./dist/index.d.ts", - "files": [ - "dist" - ], - "scripts": { - "build": "tsx ./build.mts && yarn build:types", - "build:pack": "yarn pack -o redwoodjs-cli-storybook.tgz", - "build:types": "tsc --build --verbose", - "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx\" --ignore dist --exec \"yarn build\"", - "prepublishOnly": "NODE_ENV=production yarn build" - }, - "dependencies": { - "@redwoodjs/cli-helpers": "workspace:*", - "@redwoodjs/project-config": "workspace:*", - "@redwoodjs/telemetry": "workspace:*", - "@storybook/addon-a11y": "7.6.17", - "@storybook/addon-docs": "7.6.17", - "@storybook/addon-essentials": "7.6.17", - "@storybook/react-webpack5": "7.6.17", - "chalk": "4.1.2", - "execa": "5.1.1", - "storybook": "7.6.17", - "terminal-link": "2.1.1", - "yargs": "17.7.2" - }, - "devDependencies": { - "@redwoodjs/framework-tools": "workspace:*", - "@types/yargs": "17.0.32", - "tsx": "4.15.6", - "typescript": "5.4.5" - }, - "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" -} diff --git a/packages/cli-packages/storybook/src/commands/storybook.ts b/packages/cli-packages/storybook/src/commands/storybook.ts deleted file mode 100644 index 50a3da337439..000000000000 --- a/packages/cli-packages/storybook/src/commands/storybook.ts +++ /dev/null @@ -1,82 +0,0 @@ -import terminalLink from 'terminal-link' -import type { Argv } from 'yargs' - -import { recordTelemetryAttributes } from '@redwoodjs/cli-helpers' - -import type { StorybookYargsOptions } from '../types' - -export const command = 'storybook' -export const aliases = ['sb'] -export const description = - 'Launch Storybook: a tool for building UI components and pages in isolation' - -export const defaultOptions: StorybookYargsOptions = { - open: true, - build: false, - ci: false, - port: 7910, - buildDirectory: 'public/storybook', - smokeTest: false, -} - -export function builder( - yargs: Argv, -): Argv { - return yargs - .option('build', { - describe: 'Build Storybook', - type: 'boolean', - default: defaultOptions.build, - }) - .option('build-directory', { - describe: 'Directory in web/ to store static files', - type: 'string', - default: defaultOptions.buildDirectory, - }) - .option('ci', { - describe: 'Start server in CI mode, with no interactive prompts', - type: 'boolean', - default: defaultOptions.ci, - }) - .option('open', { - describe: 'Open storybook in your browser on start', - type: 'boolean', - default: defaultOptions.open, - }) - .option('port', { - describe: 'Which port to run storybook on', - type: 'number', - default: defaultOptions.port, - }) - .option('smoke-test', { - describe: - "CI mode plus smoke-test (skip prompts; don't open browser; exit after successful start)", - type: 'boolean', - default: defaultOptions.smokeTest, - }) - - .epilogue( - `Also see the ${terminalLink( - 'Redwood CLI Reference', - 'https://redwoodjs.com/docs/cli-commands#storybook', - )}`, - ) -} - -export async function handler(options: StorybookYargsOptions): Promise { - // NOTE: We should provide some visual output before the import to increase - // the perceived performance of the command as there will be delay while we - // load the handler. - recordTelemetryAttributes({ - command: 'storybook', - build: options.build, - ci: options.ci, - open: options.open, - smokeTest: options.smokeTest, - }) - // @ts-expect-error - Custom workaround for storybook telemetry - process.emit('shutdown-telemetry') - - const { handler: storybookHandler } = await import('./storybookHandler.js') - await storybookHandler(options) -} diff --git a/packages/cli-packages/storybook/src/commands/storybookHandler.ts b/packages/cli-packages/storybook/src/commands/storybookHandler.ts deleted file mode 100644 index 86a7fa023816..000000000000 --- a/packages/cli-packages/storybook/src/commands/storybookHandler.ts +++ /dev/null @@ -1,117 +0,0 @@ -import fs from 'node:fs' -import path from 'node:path' - -import type { ExecaError } from 'execa' -import execa from 'execa' - -import { BundlerEnum, getConfig, getPaths } from '@redwoodjs/project-config' -// Allow import of untyped package -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { errorTelemetry } from '@redwoodjs/telemetry' - -import c from '../lib/colors' -import type { StorybookYargsOptions } from '../types' - -export async function handler({ - build, - buildDirectory, - ci, - open, - port, - smokeTest, -}: StorybookYargsOptions) { - // Notice to vite users to try `yarn rw storybook-vite`. This will eventually be the default - // once we have removed webpack. Until then we give a small nudge to vite users to try it out. - if (getConfig().web.bundler === BundlerEnum.VITE) { - console.log( - c.bold( - `\nIt looks like you're using vite, please try:\n\n yarn rw storybook-vite\n\nThis will run storybook using vite which should be a much nicer experience for you.\nYou can find out more at: https://community.redwoodjs.com/t/7212\n\n`, - ), - ) - } - - // We add a stub file to type generation because users don't have Storybook - // installed when they first start a project. We need to remove the file once - // they install Storybook so that the real types come through. - fs.rmSync( - path.join(getPaths().generated.types.includes, 'web-storybook.d.ts'), - { force: true }, - ) - - // Check for conflicting options - if (build && smokeTest) { - throw new Error('Can not provide both "--build" and "--smoke-test"') - } - - if (build && open) { - console.warn( - c.warning( - 'Warning: --open option has no effect when running Storybook build', - ), - ) - } - - const cwd = getPaths().web.base - const staticAssetsFolder = path.join(cwd, 'public') - const execaOptions: Partial = { - stdio: 'inherit', - shell: true, - cwd, - } - - // Create the `MockServiceWorker.js` file. See https://mswjs.io/docs/cli/init. - await execa.command( - `yarn msw init "${staticAssetsFolder}" --no-save`, - execaOptions, - ) - - const storybookConfigPath = path.dirname( - require.resolve('@redwoodjs/testing/config/storybook/main.js'), - ) - - let command = '' - const flags = [ - `--config-dir "${storybookConfigPath}"`, - '--webpack-stats-json', - ] - - if (build) { - command = `yarn storybook build ${[ - ...flags, - `--output-dir "${buildDirectory}"`, - ] - .filter(Boolean) - .join(' ')}` - } else if (smokeTest) { - command = `yarn storybook dev ${[ - ...flags, - `--port ${port}`, - `--smoke-test`, - `--ci`, - `--no-version-updates`, - ] - .filter(Boolean) - .join(' ')}` - } else { - command = `yarn storybook dev ${[ - ...flags, - `--port ${port}`, - `--no-version-updates`, - ci && '--ci', - !open && `--no-open`, - ] - .filter(Boolean) - .join(' ')}` - } - - try { - await execa.command(command, execaOptions) - } catch (e) { - if ((e as ExecaError).signal !== 'SIGINT') { - console.log(c.error((e as Error).message)) - errorTelemetry(process.argv, (e as Error).message) - } - process.exit((e as ExecaError).exitCode ?? 1) - } -} diff --git a/packages/cli-packages/storybook/src/index.ts b/packages/cli-packages/storybook/src/index.ts deleted file mode 100644 index 3706aa9c55f5..000000000000 --- a/packages/cli-packages/storybook/src/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { - command, - aliases, - description, - builder, - handler, -} from './commands/storybook' - -export const commands = [ - { - command, - aliases, - description, - builder, - handler, - }, -] diff --git a/packages/cli-packages/storybook/src/lib/colors.ts b/packages/cli-packages/storybook/src/lib/colors.ts deleted file mode 100644 index e6abe0edcdbf..000000000000 --- a/packages/cli-packages/storybook/src/lib/colors.ts +++ /dev/null @@ -1,21 +0,0 @@ -import chalk from 'chalk' - -/** - * To keep a consistent color/style palette between cli packages, such as - * \@redwood/cli and \@redwood/create-redwood-app, please keep them compatible - * with one and another. We'll might split up and refactor these into a - * separate package when there is a strong motivation behind it. - * - * Current files: - * - * - packages/cli/src/lib/colors.js (this file) - * - packages/create-redwood-app/src/create-redwood-app.js - */ -export default { - error: chalk.bold.red, - warning: chalk.keyword('orange'), - green: chalk.green, - info: chalk.grey, - bold: chalk.bold, - underline: chalk.underline, -} diff --git a/packages/cli-packages/storybook/src/types.ts b/packages/cli-packages/storybook/src/types.ts deleted file mode 100644 index 505798eabbe4..000000000000 --- a/packages/cli-packages/storybook/src/types.ts +++ /dev/null @@ -1,8 +0,0 @@ -export interface StorybookYargsOptions { - open: boolean - build: boolean - ci: boolean - port: number - buildDirectory: string - smokeTest: boolean -} diff --git a/packages/cli-packages/storybook/tsconfig.json b/packages/cli-packages/storybook/tsconfig.json deleted file mode 100644 index dd7dbdbcd0ae..000000000000 --- a/packages/cli-packages/storybook/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "../../../tsconfig.compilerOption.json", - "compilerOptions": { - "rootDir": "src", - "outDir": "dist" - }, - "include": ["src"], -} diff --git a/packages/cli/src/commands/__tests__/build.test.js b/packages/cli/src/commands/__tests__/build.test.js index d6b4ab32b7d6..a7b140ac5a26 100644 --- a/packages/cli/src/commands/__tests__/build.test.js +++ b/packages/cli/src/commands/__tests__/build.test.js @@ -16,9 +16,8 @@ vi.mock('@redwoodjs/project-config', async (importOriginal) => { }, getConfig: () => { return { - web: { - bundler: 'webpack', - }, + // The build command needs nothing in this config as all + // the values it currently reads are optional. } }, } @@ -66,7 +65,6 @@ test('the build tasks are in the correct sequence', async () => { "Generating Prisma Client...", "Verifying graphql schema...", "Building API...", - "Cleaning Web...", "Building Web...", ] `) @@ -82,7 +80,6 @@ test('Should run prerender for web', async () => { await handler({ side: ['web'], prerender: true }) expect(Listr.mock.calls[0][0].map((x) => x.title)).toMatchInlineSnapshot(` [ - "Cleaning Web...", "Building Web...", ] `) diff --git a/packages/cli/src/commands/__tests__/dev.test.js b/packages/cli/src/commands/__tests__/dev.test.js index e14ac9023546..2bbec2a62c72 100644 --- a/packages/cli/src/commands/__tests__/dev.test.js +++ b/packages/cli/src/commands/__tests__/dev.test.js @@ -216,33 +216,4 @@ describe('yarn rw dev', () => { expect(apiCommand.command).not.toContain('--debug-port') }) - - it('Will run vite, via rw-vite-dev bin if config has bundler set to Vite', async () => { - getConfig.mockReturnValue({ - web: { - port: 8910, - bundler: 'vite', // <-- enable vite mode - }, - api: { - port: 8911, - }, - experimental: { - streamingSsr: { - enabled: false, - }, - }, - }) - - await handler({ - side: ['web'], - }) - - const concurrentlyArgs = concurrently.mock.lastCall[0] - - const webCommand = find(concurrentlyArgs, { name: 'web' }) - - expect(webCommand.command).toContain( - 'yarn cross-env NODE_ENV=development rw-vite-dev', - ) - }) }) diff --git a/packages/cli/src/commands/build.js b/packages/cli/src/commands/build.js index 9f5e946753a8..c17005bd12cd 100644 --- a/packages/cli/src/commands/build.js +++ b/packages/cli/src/commands/build.js @@ -18,14 +18,6 @@ export const builder = (yargs) => { description: 'Which side(s) to build', type: 'array', }) - .option('stats', { - default: false, - description: `Use ${terminalLink( - 'Webpack Bundle Analyzer', - 'https://github.com/webpack-contrib/webpack-bundle-analyzer', - )}`, - type: 'boolean', - }) .option('verbose', { alias: 'v', default: false, diff --git a/packages/cli/src/commands/buildHandler.js b/packages/cli/src/commands/buildHandler.js index debc844275d6..1ba64615cf1f 100644 --- a/packages/cli/src/commands/buildHandler.js +++ b/packages/cli/src/commands/buildHandler.js @@ -3,7 +3,6 @@ import path from 'path' import execa from 'execa' import fs from 'fs-extra' import { Listr } from 'listr2' -import { rimraf } from 'rimraf' import terminalLink from 'terminal-link' import { recordTelemetryAttributes } from '@redwoodjs/cli-helpers' @@ -19,7 +18,6 @@ import { generatePrismaCommand } from '../lib/generatePrismaClient' export const handler = async ({ side = ['api', 'web'], verbose = false, - stats = false, prisma = true, prerender, }) => { @@ -27,7 +25,6 @@ export const handler = async ({ command: 'build', side: JSON.stringify(side), verbose, - stats, prisma, prerender, }) @@ -37,18 +34,6 @@ export const handler = async ({ const useFragments = rwjsConfig.graphql?.fragments const useTrustedDocuments = rwjsConfig.graphql?.trustedDocuments - if (stats) { - console.log('Building Web Stats...') - execa.sync( - `yarn cross-env NODE_ENV=production webpack --config ${require.resolve( - '@redwoodjs/core/config/webpack.stats.js', - )}`, - { stdio: 'inherit', shell: true, cwd: rwjsPaths.web.base }, - ) - // We do not want to continue building... - return - } - const prismaSchemaExists = fs.existsSync(rwjsPaths.api.dbSchema) const prerenderRoutes = prerender && side.includes('web') ? detectPrerenderRoutes() : [] @@ -101,57 +86,35 @@ export const handler = async ({ } }, }, - side.includes('web') && { - // Clean web/dist before building - // Vite handles this internally - title: 'Cleaning Web...', - task: () => { - return rimraf(rwjsPaths.web.dist) - }, - enabled: getConfig().web.bundler === 'webpack', - }, side.includes('web') && { title: 'Building Web...', task: async () => { - if (getConfig().web.bundler !== 'webpack') { - // @NOTE: we're using the vite build command here, instead of the - // buildWeb function directly because we want the process.cwd to be - // the web directory, not the root of the project. - // This is important for postcss/tailwind to work correctly - // Having a separate binary lets us contain the change of cwd to that - // process only. If we changed cwd here, or in the buildWeb function, - // it could affect other things that run in parallel while building. - // We don't have any parallel tasks right now, but someone might add - // one in the future as a performance optimization. - // - // Disable the new warning in Vite v5 about the CJS build being deprecated - // so that users don't have to see it when this command is called with --verbose - process.env.VITE_CJS_IGNORE_WARNING = 'true' - await execa( - `node ${require.resolve( - '@redwoodjs/vite/bins/rw-vite-build.mjs', - )} --webDir="${rwjsPaths.web.base}" --verbose=${verbose}`, - { - stdio: verbose ? 'inherit' : 'pipe', - shell: true, - // `cwd` is needed for yarn to find the rw-vite-build binary - // It won't change process.cwd for anything else here, in this - // process - cwd: rwjsPaths.web.base, - }, - ) - } else { - await execa( - `yarn cross-env NODE_ENV=production webpack --config ${require.resolve( - '@redwoodjs/core/config/webpack.production.js', - )}`, - { - stdio: verbose ? 'inherit' : 'pipe', - shell: true, - cwd: rwjsPaths.web.base, - }, - ) - } + // @NOTE: we're using the vite build command here, instead of the + // buildWeb function directly because we want the process.cwd to be + // the web directory, not the root of the project. + // This is important for postcss/tailwind to work correctly + // Having a separate binary lets us contain the change of cwd to that + // process only. If we changed cwd here, or in the buildWeb function, + // it could affect other things that run in parallel while building. + // We don't have any parallel tasks right now, but someone might add + // one in the future as a performance optimization. + // + // Disable the new warning in Vite v5 about the CJS build being deprecated + // so that users don't have to see it when this command is called with --verbose + process.env.VITE_CJS_IGNORE_WARNING = 'true' + await execa( + `node ${require.resolve( + '@redwoodjs/vite/bins/rw-vite-build.mjs', + )} --webDir="${rwjsPaths.web.base}" --verbose=${verbose}`, + { + stdio: verbose ? 'inherit' : 'pipe', + shell: true, + // `cwd` is needed for yarn to find the rw-vite-build binary + // It won't change process.cwd for anything else here, in this + // process + cwd: rwjsPaths.web.base, + }, + ) // Streaming SSR does not use the index.html file. if (!getConfig().experimental?.streamingSsr?.enabled) { diff --git a/packages/cli/src/commands/dev.js b/packages/cli/src/commands/dev.js index 696c74e06b60..815bd90c1252 100644 --- a/packages/cli/src/commands/dev.js +++ b/packages/cli/src/commands/dev.js @@ -1,6 +1,5 @@ import terminalLink from 'terminal-link' -import { getConfig } from '../lib' import c from '../lib/colors' import { checkNodeVersion } from '../middleware/checkNodeVersion' @@ -8,11 +7,8 @@ export const command = 'dev [side..]' export const description = 'Start development servers for api, and web' export const builder = (yargs) => { - // We hide some options based on the bundler being used. - // Note that `watchNodeModules` is webpack specific, but `forward` isn't. - // The reason it's also hidden is that it's been broken with Vite + // The reason `forward` is hidden is that it's been broken with Vite // and it's not clear how to fix it. - const isUsingWebpack = getConfig().web.bundler === 'webpack' yargs .positional('side', { @@ -24,20 +20,15 @@ export const builder = (yargs) => { .option('forward', { alias: 'fwd', description: - 'String of one or more Webpack DevServer config options, for example: `--fwd="--port=1234 --no-open"`', + 'String of one or more vite dev server config options, for example: `--fwd="--port=1234 --open=false"`', type: 'string', - hidden: !isUsingWebpack, + hidden: true, }) .option('generate', { type: 'boolean', default: true, description: 'Generate artifacts', }) - .option('watchNodeModules', { - type: 'boolean', - description: 'Reload on changes to node_modules', - hidden: !isUsingWebpack, - }) .option('apiDebugPort', { type: 'number', description: diff --git a/packages/cli/src/commands/devHandler.js b/packages/cli/src/commands/devHandler.js index 1fdeb54fbb62..90f31950a23a 100644 --- a/packages/cli/src/commands/devHandler.js +++ b/packages/cli/src/commands/devHandler.js @@ -21,14 +21,12 @@ export const handler = async ({ side = ['api', 'web'], forward = '', generate = true, - watchNodeModules = process.env.RWJS_WATCH_NODE_MODULES === '1', apiDebugPort, }) => { recordTelemetryAttributes({ command: 'dev', side: JSON.stringify(side), generate, - watchNodeModules, }) const rwjsPaths = getPaths() @@ -60,7 +58,7 @@ export const handler = async ({ // Check web port if (side.includes('web')) { - // Extract any ports the user forwarded to the webpack server and prefer that instead + // Extract any ports the user forwarded to the dev server and prefer that instead const forwardedPortMatches = [ ...forward.matchAll(/\-\-port(\=|\s)(?[^\s]*)/g), ] @@ -140,10 +138,6 @@ export const handler = async ({ } } - const webpackDevConfig = require.resolve( - '@redwoodjs/core/config/webpack.development.js', - ) - const getApiDebugFlag = () => { // Passed in flag takes precedence if (apiDebugPort) { @@ -180,19 +174,6 @@ export const handler = async ({ webCommand = `yarn cross-env NODE_ENV=development rw-dev-fe ${forward}` } - // 3. Webpack (SPA): we will remove this override after v7 - if (getConfig().web.bundler === 'webpack') { - if (streamingSsrEnabled) { - throw new Error( - 'Webpack does not support SSR. Please switch your bundler to Vite in redwood.toml first', - ) - } else { - webCommand = `yarn cross-env NODE_ENV=development RWJS_WATCH_NODE_MODULES=${ - watchNodeModules ? '1' : '' - } webpack serve --config "${webpackDevConfig}" ${forward}` - } - } - /** @type {Record} */ const jobs = { api: { diff --git a/packages/cli/src/commands/setup/custom-web-index/custom-web-index-handler.js b/packages/cli/src/commands/setup/custom-web-index/custom-web-index-handler.js deleted file mode 100644 index 1da59693a20e..000000000000 --- a/packages/cli/src/commands/setup/custom-web-index/custom-web-index-handler.js +++ /dev/null @@ -1,68 +0,0 @@ -import path from 'path' - -import fs from 'fs-extra' -import { Listr } from 'listr2' - -import { errorTelemetry } from '@redwoodjs/telemetry' - -import { getPaths, writeFile } from '../../../lib' -import c from '../../../lib/colors' - -export const handler = async ({ force }) => { - if (getPaths().web.viteConfig) { - console.warn( - c.warning('Warning: This command only applies to projects using webpack'), - ) - return - } - - const tasks = new Listr( - [ - { - title: 'Creating new entry point in `web/src/index.js`.', - task: () => { - // @TODO figure out how we're handling typescript - // In this file, we're setting everything to js - // @Note, getPaths.web.index is null, when it doesn't exist - const entryPointFile = - getPaths().web.index ?? path.join(getPaths().web.src, 'index.js') - - return writeFile( - entryPointFile, - fs - .readFileSync( - path.join( - getPaths().base, - // NOTE we're copying over the index.js before babel transform - 'node_modules/@redwoodjs/web/src/entry/index.jsx', - ), - ) - .toString() - .replace('~redwood-app-root', './App'), - { overwriteExisting: force }, - ) - }, - }, - { - title: 'One more thing...', - task: (_ctx, task) => { - task.title = `One more thing...\n - ${c.tip( - 'Quick link to the docs on configuring a custom entry point for your RW app', - )} - ${c.link('https://redwoodjs.com/docs/custom-web-index')} - ` - }, - }, - ], - { rendererOptions: { collapseSubtasks: false } }, - ) - - try { - await tasks.run() - } catch (e) { - errorTelemetry(process.argv, e.message) - console.error(c.error(e.message)) - process.exit(e?.exitCode || 1) - } -} diff --git a/packages/cli/src/commands/setup/custom-web-index/custom-web-index.js b/packages/cli/src/commands/setup/custom-web-index/custom-web-index.js deleted file mode 100644 index e49709bc684c..000000000000 --- a/packages/cli/src/commands/setup/custom-web-index/custom-web-index.js +++ /dev/null @@ -1,24 +0,0 @@ -import { recordTelemetryAttributes } from '@redwoodjs/cli-helpers' - -export const command = 'custom-web-index' - -export const description = - 'Set up a custom index.js file, so you can customise how Redwood web is mounted in your browser (webpack only)' - -export const builder = (yargs) => { - yargs.option('force', { - alias: 'f', - default: false, - description: 'Overwrite existing index.js file', - type: 'boolean', - }) -} - -export const handler = async (options) => { - recordTelemetryAttributes({ - command: 'setup custom-web-index', - force: options.force, - }) - const { handler } = await import('./custom-web-index-handler.js') - return handler(options) -} diff --git a/packages/cli/src/commands/setup/vite/vite.js b/packages/cli/src/commands/setup/vite/vite.js index 74e85ccc40bc..13720674e358 100644 --- a/packages/cli/src/commands/setup/vite/vite.js +++ b/packages/cli/src/commands/setup/vite/vite.js @@ -2,8 +2,7 @@ import { recordTelemetryAttributes } from '@redwoodjs/cli-helpers' export const command = 'vite' -export const description = - 'Configure the web side to use Vite, instead of Webpack' +export const description = 'Configure the web side to use Vite' export const builder = (yargs) => { yargs.option('force', { diff --git a/packages/cli/src/commands/setup/vite/viteHandler.js b/packages/cli/src/commands/setup/vite/viteHandler.js index cccf196944df..e740a14f3011 100644 --- a/packages/cli/src/commands/setup/vite/viteHandler.js +++ b/packages/cli/src/commands/setup/vite/viteHandler.js @@ -4,7 +4,6 @@ import fs from 'fs-extra' import { Listr } from 'listr2' import { addWebPackages } from '@redwoodjs/cli-helpers' -import { getConfigPath } from '@redwoodjs/project-config' import { errorTelemetry } from '@redwoodjs/telemetry' import { getPaths, transformTSToJS, writeFile } from '../../../lib' @@ -42,21 +41,6 @@ export const handler = async ({ force, verbose, addPackage }) => { }) }, }, - { - title: "Checking bundler isn't set to webpack...", - task: (_ctx, task) => { - const redwoodTomlPath = getConfigPath() - const configContent = fs.readFileSync(redwoodTomlPath, 'utf-8') - - if (configContent.includes('bundler = "webpack"')) { - throw new Error( - 'You have the bundler set to webpack in your redwood.toml. Remove this line, or change it to "vite" and try again.', - ) - } else { - task.skip('Vite already configured as the bundler') - } - }, - }, { title: 'Creating new entry point in `web/src/entry.client.{jsx,tsx}`...', diff --git a/packages/cli/src/commands/setup/webpack/templates/webpack.config.js.template b/packages/cli/src/commands/setup/webpack/templates/webpack.config.js.template deleted file mode 100644 index a38ffcb928e1..000000000000 --- a/packages/cli/src/commands/setup/webpack/templates/webpack.config.js.template +++ /dev/null @@ -1,14 +0,0 @@ -/** @returns {import('webpack').Configuration} Webpack Configuration */ -module.exports = (config, { mode }) => { - if (mode === 'development') { - // Add dev plugin - } - - // Add custom rules for your project - // config.module.rules.push(YOUR_RULE) - - // Add custom plugins for your project - // config.plugins.push(YOUR_PLUGIN) - - return config -} diff --git a/packages/cli/src/commands/setup/webpack/webpack.js b/packages/cli/src/commands/setup/webpack/webpack.js deleted file mode 100644 index 26ce703e85bb..000000000000 --- a/packages/cli/src/commands/setup/webpack/webpack.js +++ /dev/null @@ -1,22 +0,0 @@ -import { recordTelemetryAttributes } from '@redwoodjs/cli-helpers' - -export const command = 'webpack' -export const description = - 'Set up webpack in your project so you can add custom config' -export const builder = (yargs) => { - yargs.option('force', { - alias: 'f', - default: false, - description: 'Overwrite existing configuration', - type: 'boolean', - }) -} - -export const handler = async (options) => { - recordTelemetryAttributes({ - command: 'setup webpack', - force: options.force, - }) - const { handler } = await import('./webpackHandler.js') - return handler(options) -} diff --git a/packages/cli/src/commands/setup/webpack/webpackHandler.js b/packages/cli/src/commands/setup/webpack/webpackHandler.js deleted file mode 100644 index d0acc643aaf1..000000000000 --- a/packages/cli/src/commands/setup/webpack/webpackHandler.js +++ /dev/null @@ -1,58 +0,0 @@ -import path from 'path' - -import fs from 'fs-extra' -import { Listr } from 'listr2' - -import { errorTelemetry } from '@redwoodjs/telemetry' - -import { getPaths, writeFile } from '../../../lib' -import c from '../../../lib/colors' - -export const handler = async ({ force }) => { - const tasks = new Listr( - [ - { - title: 'Adding webpack file to your web folder...', - task: () => { - const webpackConfigFile = `${getPaths().web.config}/webpack.config.js` - - return writeFile( - webpackConfigFile, - fs - .readFileSync( - path.resolve( - __dirname, - 'templates', - 'webpack.config.js.template', - ), - ) - .toString(), - { overwriteExisting: force }, - ) - }, - }, - { - title: 'One more thing...', - task: (_ctx, task) => { - task.title = `One more thing...\n - ${c.tip( - 'Quick link to the docs on configuring custom webpack config:', - )} - ${c.link( - 'https://redwoodjs.com/docs/webpack-configuration#configuring-webpack', - )} - ` - }, - }, - ], - { rendererOptions: { collapseSubtasks: false } }, - ) - - try { - await tasks.run() - } catch (e) { - errorTelemetry(process.argv, e.message) - console.error(c.error(e.message)) - process.exit(e?.exitCode || 1) - } -} diff --git a/packages/cli/src/lib/plugin.js b/packages/cli/src/lib/plugin.js index 9aa5c6ef8a93..bbd54c3b01a0 100644 --- a/packages/cli/src/lib/plugin.js +++ b/packages/cli/src/lib/plugin.js @@ -24,13 +24,6 @@ const PLUGIN_CACHE_FILENAME = 'commandCache.json' * incorrect. */ export const PLUGIN_CACHE_DEFAULT = { - '@redwoodjs/cli-storybook': { - storybook: { - aliases: ['sb'], - description: - 'Launch Storybook: a tool for building UI components and pages in isolation', - }, - }, '@redwoodjs/cli-storybook-vite': { 'storybook-vite': { aliases: ['storybook-vite', 'sbv'], diff --git a/packages/cli/src/telemetry/resource.js b/packages/cli/src/telemetry/resource.js index 7667cb6845cd..8fdc40b57630 100644 --- a/packages/cli/src/telemetry/resource.js +++ b/packages/cli/src/telemetry/resource.js @@ -7,7 +7,7 @@ import fs from 'fs-extra' import system from 'systeminformation' import { v4 as uuidv4, validate as validateUUID } from 'uuid' -import { getPaths, getConfig, getRawConfig } from '@redwoodjs/project-config' +import { getPaths, getRawConfig } from '@redwoodjs/project-config' import { DefaultHost } from '@redwoodjs/structure/dist/hosts' import { RWProject } from '@redwoodjs/structure/dist/model/RWProject' @@ -66,19 +66,10 @@ export async function getResources() { developmentEnvironment = 'gitpod' } - // Must only call getConfig() once the project is setup - so not within telemetry for CRWA - // Default to 'webpack' for new projects - const webBundler = getConfig().web.bundler - // Returns a list of all enabled experiments // This detects all top level [experimental.X] and returns all X's, ignoring all Y's for any [experimental.X.Y] const experiments = Object.keys(getRawConfig()['experimental'] || {}) - // NOTE: Added this way to avoid the need to disturb the existing toml structure - if (webBundler !== 'webpack') { - experiments.push(webBundler) - } - // Project complexity metric const project = new RWProject({ host: new DefaultHost(), @@ -115,7 +106,7 @@ export async function getResources() { complexity, sides, experiments: JSON.stringify(experiments), - webBundler, + webBundler: 'vite', // Hardcoded because this is now the only supported bundler uid: UID, } } diff --git a/packages/core/config/__tests__/webpack.common.test.js b/packages/core/config/__tests__/webpack.common.test.js deleted file mode 100644 index d52ce266642a..000000000000 --- a/packages/core/config/__tests__/webpack.common.test.js +++ /dev/null @@ -1,41 +0,0 @@ -// @NOTE -// No babel in the package, so use standard node syntax - -const { getEnvVars } = require('../webpack.common') - -jest.mock('@redwoodjs/project-config', () => { - return { - getConfigPath: () => '/path/to/project/redwood.toml', - getConfig: () => ({ - web: { - includeEnvironmentVariables: ['API_KEY', 'API_SECRET'], - }, - }), - getPaths: () => ({ - web: {}, - }), - } -}) - -describe('getEnvVars', () => { - beforeEach(() => {}) - - it('REDWOOD_ENV_ is filtered and transformed', () => { - process.env.REDWOOD_ENV_TEST = 1234 - process.env.REDWOOD_X = false - expect(getEnvVars()).toEqual({ 'process.env.REDWOOD_ENV_TEST': '"1234"' }) - - delete process.env.REDWOOD_ENV_TEST - delete process.env.REDWOOD_X - }) - - it('transforms and passes env vars defined in `redwood.toml`', () => { - process.env.API_KEY = 'dog' - process.env.API_SECRET = 'cat' - process.env.API_SECRET2 = 'chicken' - expect(getEnvVars()).toEqual({ - 'process.env.API_KEY': '"dog"', - 'process.env.API_SECRET': '"cat"', - }) - }) -}) diff --git a/packages/core/config/webpack.common.js b/packages/core/config/webpack.common.js deleted file mode 100644 index 9ce17b462a30..000000000000 --- a/packages/core/config/webpack.common.js +++ /dev/null @@ -1,404 +0,0 @@ -const fs = require('fs') -const path = require('path') - -const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin') -const CopyPlugin = require('copy-webpack-plugin') -const CssMinimizerPlugin = require('css-minimizer-webpack-plugin') -const Dotenv = require('dotenv-webpack') -const HtmlWebpackPlugin = require('html-webpack-plugin') -const MiniCssExtractPlugin = require('mini-css-extract-plugin') -const webpack = require('webpack') -const { WebpackManifestPlugin } = require('webpack-manifest-plugin') -const { merge } = require('webpack-merge') -const { RetryChunkLoadPlugin } = require('webpack-retry-chunk-load-plugin') - -const { getWebSideDefaultBabelConfig } = require('@redwoodjs/babel-config') -const { - ChunkReferencesPlugin, -} = require('@redwoodjs/internal/dist/webpackPlugins/ChunkReferencesPlugin') -const { getConfig, getPaths } = require('@redwoodjs/project-config') - -const redwoodConfig = getConfig() -const redwoodPaths = getPaths() - -const isUsingVite = redwoodConfig.web.bundler !== 'webpack' - -/** @returns {{[key: string]: string}} Env vars */ -const getEnvVars = () => { - const redwoodEnvPrefix = 'REDWOOD_ENV_' - const includeEnvKeys = redwoodConfig.web.includeEnvironmentVariables - const redwoodEnvKeys = Object.keys(process.env).reduce((prev, next) => { - if ( - next.startsWith(redwoodEnvPrefix) || - (includeEnvKeys && includeEnvKeys.includes(next)) - ) { - prev[`process.env.${next}`] = JSON.stringify(process.env[next]) - } - return prev - }, {}) - - return redwoodEnvKeys -} - -/** @returns {import('webpack').RuleSetLoader[]} */ -const getStyleLoaders = (isEnvProduction) => { - const styleOrExtractLoader = isEnvProduction - ? MiniCssExtractPlugin.loader - : require.resolve('style-loader') - - const cssLoader = (withModules, importLoaders) => { - // Obscured classnames in production, more expressive classnames in development. - const localIdentName = isEnvProduction - ? '[contenthash:base64]' - : '[path][name]__[local]--[contenthash:base64:5]' - - const loaderConfig = { - loader: require.resolve('css-loader'), - options: { - sourceMap: !isEnvProduction, - importLoaders, - }, - } - - // Enables CSS modules - if (withModules) { - loaderConfig.options.modules = { localIdentName } - } - - return loaderConfig - } - - const resolveUrlLoader = { - loader: require.resolve('resolve-url-loader'), - options: { - root: path.join(redwoodPaths.web.base, '/public'), - }, - } - - const paths = getPaths() - const hasPostCssConfig = fs.existsSync(paths.web.postcss) - - // We only use the postcss-loader if there is a postcss config file - // at web/config/postcss.config.js - const postCssLoader = hasPostCssConfig - ? { - loader: require.resolve('postcss-loader'), - options: { - postcssOptions: { - config: paths.web.postcss, - }, - sourceMap: true, // required for resolve-url-loader - }, - } - : null - - const numImportLoadersForCSS = hasPostCssConfig ? 1 : 0 - const numImportLoadersForSCSS = hasPostCssConfig ? 2 : 1 - - const sassLoader = { - loader: 'sass-loader', - options: { - sourceMap: true, // required for resolve-url-loader - }, - } - - return [ - { - test: /\.module\.css$/, - use: [ - styleOrExtractLoader, - cssLoader(true, numImportLoadersForCSS), - isUsingVite && resolveUrlLoader, - postCssLoader, - ].filter(Boolean), - }, - { - test: /\.css$/, - use: [ - styleOrExtractLoader, - cssLoader(false, numImportLoadersForCSS), - isUsingVite && resolveUrlLoader, - postCssLoader, - ].filter(Boolean), - sideEffects: true, - }, - { - test: /\.module\.scss$/, - use: [ - styleOrExtractLoader, - cssLoader(true, numImportLoadersForSCSS), - isUsingVite && resolveUrlLoader, - postCssLoader, - sassLoader, - ].filter(Boolean), - }, - { - test: /\.scss$/, - use: [ - styleOrExtractLoader, - cssLoader(false, numImportLoadersForSCSS), - isUsingVite && resolveUrlLoader, - postCssLoader, - sassLoader, - ].filter(Boolean), - sideEffects: true, - }, - ] -} - -/** @returns {import('webpack').Plugin[]} Plugins shared with storybook, as well as the RW app */ -const getSharedPlugins = (isEnvProduction) => { - const shouldIncludeFastRefresh = - redwoodConfig.web.fastRefresh !== false && !isEnvProduction - - const devTimeAutoImports = isEnvProduction - ? {} - : { - mockGraphQLQuery: ['@redwoodjs/testing/web', 'mockGraphQLQuery'], - mockGraphQLMutation: ['@redwoodjs/testing/web', 'mockGraphQLMutation'], - mockCurrentUser: ['@redwoodjs/testing/web', 'mockCurrentUser'], - } - - return [ - isEnvProduction && - new MiniCssExtractPlugin({ - filename: 'static/css/[name].[contenthash:8].css', - chunkFilename: 'static/css/[name].[contenthash:8].css', - }), - shouldIncludeFastRefresh && - // 06-2021 bug with Webpack v5 and sockjs-client dependency conflict - // https://github.com/pmmmwh/react-refresh-webpack-plugin/issues/396 - new ReactRefreshWebpackPlugin({ overlay: false }), - new webpack.ProvidePlugin({ - React: 'react', - gql: 'graphql-tag', - ...devTimeAutoImports, - }), - // The define plugin will replace these keys with their values during build - // time. Note that they're used in packages/web/src/config.ts, and made available in globalThis - new webpack.DefinePlugin({ - ['RWJS_ENV']: JSON.stringify({ - RWJS_API_GRAPHQL_URL: - redwoodConfig.web.apiGraphQLUrl ?? - `${redwoodConfig.web.apiUrl}/graphql`, - RWJS_API_URL: redwoodConfig.web.apiUrl, - __REDWOOD__APP_TITLE: - redwoodConfig.web.title || path.basename(redwoodPaths.base), - }), - ['RWJS_DEBUG_ENV']: JSON.stringify({ - RWJS_SRC_ROOT: redwoodPaths.base, - REDWOOD_ENV_EDITOR: process.env.REDWOOD_ENV_EDITOR, - }), - ...getEnvVars(), - }), - new Dotenv({ - path: path.resolve(redwoodPaths.base, '.env'), - silent: true, - // ignoreStub: true, // FIXME: this might not be necessary once the storybook webpack 4/5 stuff is ironed out. See also: https://github.com/mrsteele/dotenv-webpack#processenv-stubbing--replacing - }), - ].filter(Boolean) -} - -// I've borrowed and learnt extensively from the `create-react-app` repo: -// https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/config/webpack.config.js -module.exports = (webpackEnv) => { - const isEnvProduction = webpackEnv === 'production' - - const shouldIncludeFastRefresh = - redwoodConfig.web.experimentalFastRefresh && !isEnvProduction - - const webBabelOptions = getWebSideDefaultBabelConfig() - - return { - mode: isEnvProduction ? 'production' : 'development', - ...(isEnvProduction - ? { - // this is so that users can debug a production build by setting sourceMap = true in redwood.toml - devtool: redwoodConfig.web.sourceMap ? 'source-map' : false, - } - : { - devtool: 'cheap-module-source-map', - }), - entry: { - /** - * Prerender requires a top-level component. - * Before we had `ReactDOM` and a top-level component in the same file (web/index.js). - * If index.js is defined in the user's project, use that, if not - * use the one provided in web/dist/entry/index.js - */ - app: - redwoodPaths.web.index || - require.resolve('@redwoodjs/web/webpackEntry'), - }, - resolve: { - extensions: ['.wasm', '.mjs', '.js', '.jsx', '.ts', '.tsx', '.json'], - alias: { - // https://www.styled-components.com/docs/faqs#duplicated-module-in-node_modules - 'styled-components': path.resolve( - redwoodPaths.base, - 'node_modules', - 'styled-components', - ), - '~redwood-app-root': path.resolve(redwoodPaths.web.app), - '~redwood-app-routes': path.resolve(redwoodPaths.web.routes), - react: path.resolve(redwoodPaths.base, 'node_modules', 'react'), - 'react-hook-form': path.resolve( - redwoodPaths.base, - 'node_modules', - 'react-hook-form', - ), - }, - }, - plugins: [ - !isEnvProduction && new webpack.HotModuleReplacementPlugin(), - new HtmlWebpackPlugin({ - template: path.resolve(redwoodPaths.base, 'web/src/index.html'), - scriptLoading: 'defer', - inject: true, - chunks: 'all', - }), - new CopyPlugin({ - patterns: [ - { - from: path.join(redwoodPaths.web.base, 'public'), - to: '', - globOptions: { - ignore: [ - path.join(redwoodPaths.web.base, 'public/README.md'), - path.join(redwoodPaths.web.base, 'public/mockServiceWorker.js'), - ], - }, - }, - ], - }), - isEnvProduction && - new RetryChunkLoadPlugin({ - cacheBust: `function() { - return Date.now(); - }`, - maxRetries: 5, - // @TODO: Add redirect to fatalErrorPage - // lastResortScript: "window.location.href='/500.html';" - }), - isEnvProduction && - new WebpackManifestPlugin({ - fileName: 'client-build-manifest.json', - }), - isEnvProduction && new ChunkReferencesPlugin(), - ...getSharedPlugins(isEnvProduction), - ].filter(Boolean), - module: { - rules: [ - // ** NOTE ** People usually overwrite these loaders via index, - // so it's important to try and keep those indexes stable. - { - oneOf: [ - // (0) - { - test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/, /\.svg$/], - type: 'asset', - parser: { - dataUrlCondition: { - maxSize: 10_000, - }, - }, - generator: { - filename: 'static/media/[name].[contenthash:8][ext]', - }, - }, - // (1) - { - test: /\.(js|mjs|jsx|ts|tsx)$/, - exclude: /(node_modules)/, - use: [ - { - loader: require.resolve('babel-loader'), - options: { - ...webBabelOptions, - cwd: redwoodPaths.base, - plugins: [ - shouldIncludeFastRefresh && - require.resolve('react-refresh/babel'), - ...webBabelOptions.plugins, - ].filter(Boolean), - }, - }, - ].filter(Boolean), - }, - // (2) - // .module.css (2), .css (3), .module.scss (4), .scss (5) - ...getStyleLoaders(isEnvProduction), - // (6) - isEnvProduction && { - test: require.resolve('@redwoodjs/router/dist/splash-page'), - use: require.resolve('null-loader'), - }, - // (7) - { - test: /\.(svg|ico|jpg|jpeg|png|gif|eot|otf|webp|ttf|woff|woff2|cur|ani|pdf)(\?.*)?$/, - type: 'asset/resource', - generator: { - filename: 'static/media/[name].[contenthash:8][ext]', - }, - }, - // (8) - !redwoodConfig.experimental.realtime.enabled && { - test: require.resolve('@redwoodjs/web/dist/apollo/sseLink'), - use: require.resolve('null-loader'), - }, - ].filter(Boolean), - }, - ], - }, - optimization: { - mergeDuplicateChunks: true, - splitChunks: { - chunks: 'all', - minChunks: 2, - }, - runtimeChunk: { - name: (entrypoint) => `runtime-${entrypoint.name}`, - }, - // This doesn't get used when mode !== 'production' - // Because minimize gets set to false, see https://webpack.js.org/configuration/mode/#usage - minimizer: ['...', new CssMinimizerPlugin()], - }, - output: { - pathinfo: true, - filename: isEnvProduction - ? 'static/js/[name].[contenthash:8].js' - : 'static/js/[name].bundle.js', - chunkFilename: isEnvProduction - ? 'static/js/[name].[contenthash:8].chunk.js' - : 'static/js/[name].chunk.js', - path: path.resolve(redwoodPaths.base, 'web/dist'), - publicPath: '/', - devtoolModuleFilenameTemplate: isEnvProduction - ? (info) => - path - .relative(redwoodPaths.web.src, info.absoluteResourcePath) - .replace(/\\/g, '/') - : (info) => path.resolve(info.absoluteResourcePath).replace(/\\/g, '/'), - }, - } -} - -/** @returns {import('webpack').Configuration} */ -module.exports.mergeUserWebpackConfig = (mode, baseConfig) => { - const redwoodPaths = getPaths() - const hasCustomConfig = fs.existsSync(redwoodPaths.web.webpack) - if (!hasCustomConfig) { - return baseConfig - } - const userWebpackConfig = require(redwoodPaths.web.webpack) - - if (typeof userWebpackConfig === 'function') { - return userWebpackConfig(baseConfig, { mode }) - } - - return merge(baseConfig, userWebpackConfig) -} - -module.exports.getEnvVars = getEnvVars -module.exports.getSharedPlugins = getSharedPlugins -module.exports.getStyleLoaders = getStyleLoaders diff --git a/packages/core/config/webpack.development.js b/packages/core/config/webpack.development.js deleted file mode 100644 index f132c3926fe7..000000000000 --- a/packages/core/config/webpack.development.js +++ /dev/null @@ -1,127 +0,0 @@ -const { escapeRegExp } = require('lodash') -const { merge } = require('webpack-merge') - -const { getConfig } = require('@redwoodjs/project-config') - -const webpackConfig = require('./webpack.common') - -const { mergeUserWebpackConfig } = webpackConfig -const redwoodConfig = getConfig() - -const getProxyConfig = () => { - const { apiUrl } = redwoodConfig.web - const { port } = redwoodConfig.api - - if (apiUrl.startsWith('/')) { - // Redwood only proxies absolute paths. - return { - [apiUrl]: { - target: `${process.env.RWJS_DEV_API_URL ?? 'http://localhost'}:${port}`, - pathRewrite: { - // Eg: Rewrite `/.netlify/functions/graphql` to `/graphql`, which the api-server expects - [`^${escapeRegExp(apiUrl)}`]: '', - }, - headers: { - Connection: 'keep-alive', - }, - onError: function (err, req, res) { - if (err.code === 'ECONNRESET' || err.code === 'ECONNREFUSED') { - const msg = { - errors: [ - { - message: - 'The RedwoodJS API server is not available or is currently reloading. Please refresh.', - }, - ], - } - // https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/203 - // The HTTP 203 Non-Authoritative Information response status indicates that the request was successful - // but the enclosed payload has been modified by a transforming proxy from that of the origin server's 200 (OK) response - res.writeHead(203, { - 'Content-Type': 'application/json', - 'Cache-Control': 'no-cache', - }) - res.write(JSON.stringify(msg)) - res.end() - } else { - const msg = { - errors: [ - { - message: - 'An error occurred. Please check your dev console for logs, or restart your RedwoodJS api server.', - }, - ], - } - res.writeHead(203, { - 'Content-Type': 'application/json', - 'Cache-Control': 'no-cache', - }) - res.write(JSON.stringify(msg)) - res.end() - } - }, - }, - } - } - - if (apiUrl.includes('://')) { - // A developer may want to point their development environment to a staging or production GraphQL server. - // They have specified an absolute URI, - // which would contain `://`, `http://`, or `https://` - // - // So don't proxy anything. - return undefined - } - - console.error('Error: `apiUrl` is configured incorrectly.') - console.error( - 'It should be an absolute path (thats starts with `/`) or an absolute URI that starts with `http[s]://`', - ) - process.exit(1) -} - -/** @type {import('webpack').Configuration} */ -const baseConfig = merge(webpackConfig('development'), { - devServer: { - // `runtimeErrors` became true by default in webpack-dev-server v4.15.0 and interferes with . - client: { - overlay: { - runtimeErrors: false, - }, - }, - // https://webpack.js.org/configuration/dev-server/ - // note: docs not yet updated for webpack-dev-server v4 - devMiddleware: { - writeToDisk: false, - }, - compress: true, - historyApiFallback: { - disableDotRule: true, - }, - host: redwoodConfig.web.host || 'localhost', - port: redwoodConfig.web.port, - proxy: getProxyConfig(), - open: redwoodConfig.browser.open, - }, - watchOptions: { - ignored: ['**/*.d.ts'], - }, - optimization: { - removeAvailableModules: false, - removeEmptyChunks: false, - splitChunks: false, - }, - infrastructureLogging: { - level: 'error', // new in v4; previously we used quiet - }, - ...(process.env.RWJS_WATCH_NODE_MODULES === '1' && { - snapshot: { - managedPaths: [], - }, - }), - // TODO plugin does not yet work with Webpack 5: https://github.com/smooth-code/error-overlay-webpack-plugin/issues/67 - // plugins: [new ErrorOverlayPlugin()].filter(Boolean), - // webpack-dev-server v4 enables an overlay by default, it's just not as pretty -}) - -module.exports = mergeUserWebpackConfig('development', baseConfig) diff --git a/packages/core/config/webpack.production.js b/packages/core/config/webpack.production.js deleted file mode 100644 index a7253381ad94..000000000000 --- a/packages/core/config/webpack.production.js +++ /dev/null @@ -1,6 +0,0 @@ -const webpackConfig = require('./webpack.common') -const { mergeUserWebpackConfig } = webpackConfig -const baseConfig = webpackConfig('production') - -/** @type {import('webpack').Configuration} */ -module.exports = mergeUserWebpackConfig('production', baseConfig) diff --git a/packages/core/config/webpack.stats.js b/packages/core/config/webpack.stats.js deleted file mode 100644 index e27f5803d665..000000000000 --- a/packages/core/config/webpack.stats.js +++ /dev/null @@ -1,15 +0,0 @@ -const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer') -const { merge } = require('webpack-merge') - -const webpackProduction = require('./webpack.production') - -// https://github.com/webpack-contrib/webpack-bundle-analyzer -/** @type {import('webpack').Configuration} Configuration with webpack bundler analyzer config */ -module.exports = merge(webpackProduction, { - plugins: [ - new BundleAnalyzerPlugin({ - generateStatsFile: true, - analyzerMode: 'static', - }), - ], -}) diff --git a/packages/core/jest.config.js b/packages/core/jest.config.js deleted file mode 100644 index 861a636d98c0..000000000000 --- a/packages/core/jest.config.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - testMatch: ['**/__tests__/**/*.[jt]s?(x)', '**/*.test.[jt]s?(x)'], - testPathIgnorePatterns: ['fixtures', 'dist'], - testTimeout: 15000, -} diff --git a/packages/core/package.json b/packages/core/package.json index 993e3224e53a..97c44776063f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -26,21 +26,17 @@ "rwfw": "./dist/bins/rwfw.js" }, "files": [ - "config", "dist" ], "scripts": { "build": "yarn build:js", "build:js": "babel src -d dist --extensions \".js,.jsx,.ts,.tsx\"", "build:pack": "yarn pack -o redwoodjs-core.tgz", - "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest", - "test:watch": "yarn test --watch" + "prepublishOnly": "NODE_ENV=production yarn build" }, "dependencies": { "@babel/cli": "7.24.5", "@babel/runtime-corejs3": "7.24.5", - "@pmmmwh/react-refresh-webpack-plugin": "0.5.13", "@redwoodjs/cli": "workspace:*", "@redwoodjs/eslint-config": "workspace:*", "@redwoodjs/internal": "workspace:*", @@ -48,13 +44,9 @@ "@redwoodjs/testing": "workspace:*", "@redwoodjs/web-server": "workspace:*", "babel-loader": "^9.1.3", - "copy-webpack-plugin": "11.0.0", "core-js": "3.37.1", "css-loader": "6.11.0", - "css-minimizer-webpack-plugin": "5.0.1", - "dotenv-webpack": "8.1.0", "graphql-tag": "2.12.6", - "html-webpack-plugin": "5.6.0", "lodash": "4.17.21", "mini-css-extract-plugin": "2.9.0", "nodemon": "3.1.3", @@ -64,18 +56,10 @@ "rimraf": "5.0.7", "style-loader": "3.3.4", "typescript": "5.4.5", - "url-loader": "4.1.1", - "webpack": "5.92.0", - "webpack-bundle-analyzer": "4.10.2", - "webpack-cli": "5.1.4", - "webpack-dev-server": "4.15.2", - "webpack-manifest-plugin": "5.0.0", - "webpack-merge": "5.10.0", - "webpack-retry-chunk-load-plugin": "3.1.1" + "url-loader": "4.1.1" }, "devDependencies": { - "@types/lodash": "4.17.5", - "jest": "29.7.0" + "@types/lodash": "4.17.5" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/internal/src/__tests__/nestedPages.test.ts b/packages/internal/src/__tests__/nestedPages.test.ts deleted file mode 100644 index c7af79c393e1..000000000000 --- a/packages/internal/src/__tests__/nestedPages.test.ts +++ /dev/null @@ -1,266 +0,0 @@ -import path from 'path' - -import { expect, describe, it, beforeEach, afterAll, beforeAll } from 'vitest' - -import { prebuildWebFile } from '@redwoodjs/babel-config' -import { getPaths } from '@redwoodjs/project-config' - -import { cleanWebBuild } from '../build/web' - -const FIXTURE_PATH = path.join(__dirname, 'fixtures/nestedPages') - -function normalizeStr(str: string) { - return str - .split('\n') - .map((line) => line.trim()) - .join('\n') - .trim() -} - -describe('User specified imports, with static imports', () => { - let outputWithStaticImports: string | null | undefined - let outputNoStaticImports: string | null | undefined - - beforeEach(() => { - process.env.RWJS_CWD = FIXTURE_PATH - cleanWebBuild() - }) - - afterAll(() => { - delete process.env.RWJS_CWD - }) - - beforeAll(() => { - process.env.RWJS_CWD = FIXTURE_PATH - const routesFile = getPaths().web.routes - - outputWithStaticImports = prebuildWebFile(routesFile, { - forPrerender: true, - forJest: true, - })?.code - outputWithStaticImports &&= normalizeStr(outputWithStaticImports) - - outputNoStaticImports = prebuildWebFile(routesFile, { - forJest: true, - })?.code - outputNoStaticImports &&= normalizeStr(outputNoStaticImports) - }) - - it('Imports layouts correctly', () => { - // Note avoid checking the full require path because windows paths have unusual slashes - expect(outputWithStaticImports).toContain( - `var _AdminLayout = _interopRequireDefault(require("`, - ) - expect(outputWithStaticImports).toContain( - `var _MainLayout = _interopRequireDefault(require("`, - ) - - expect(outputNoStaticImports).toContain( - `var _AdminLayout = _interopRequireDefault(require("`, - ) - expect(outputNoStaticImports).toContain( - `var _MainLayout = _interopRequireDefault(require("`, - ) - }) - - describe('pages without explicit import', () => { - describe('static prerender imports', () => { - it('Adds loaders for non-nested pages', () => { - expect(outputWithStaticImports).toContain( - normalizeStr( - `const LoginPage = { - name: "LoginPage", - prerenderLoader: name => require("./pages/LoginPage/LoginPage"), - LazyComponent: (0, _react.lazy)(() => import( /* webpackChunkName: "LoginPage" */"./pages/LoginPage/LoginPage")) - }`, - ), - ) - - expect(outputWithStaticImports).toContain( - normalizeStr( - `const HomePage = { - name: "HomePage", - prerenderLoader: name => require("./pages/HomePage/HomePage"), - LazyComponent: (0, _react.lazy)(() => import( /* webpackChunkName: "HomePage" */"./pages/HomePage/HomePage")) - };`, - ), - ) - }) - }) - - describe('dynamic build imports', () => { - it('Adds loaders for non-nested pages with __webpack_require__ and require.resolveWeak in prerenderLoader to not bundle the pages', () => { - expect(outputNoStaticImports).toContain( - normalizeStr( - `const LoginPage = { - name: "LoginPage", - prerenderLoader: name => __webpack_require__(require.resolveWeak("./pages/LoginPage/LoginPage")), - LazyComponent: (0, _react.lazy)(() => import( /* webpackChunkName: "LoginPage" */"./pages/LoginPage/LoginPage")) - }`, - ), - ) - - expect(outputNoStaticImports).toContain( - normalizeStr( - `const HomePage = { - name: "HomePage", - prerenderLoader: name => __webpack_require__(require.resolveWeak("./pages/HomePage/HomePage")), - LazyComponent: (0, _react.lazy)(() => import( /* webpackChunkName: "HomePage" */"./pages/HomePage/HomePage")) - }`, - ), - ) - }) - }) - }) - - describe('pages with explicit import', () => { - describe('static prerender imports', () => { - it('Uses the user specified name for nested page', () => { - // Import statement: import NewJobPage from 'src/pages/Jobs/NewJobPage' - expect(outputWithStaticImports).toContain( - normalizeStr( - `const NewJobPage = { - name: "NewJobPage", - prerenderLoader: name => require("./pages/Jobs/NewJobPage/NewJobPage"), - LazyComponent: (0, _react.lazy)(() => import( /* webpackChunkName: "NewJobPage" */"./pages/Jobs/NewJobPage/NewJobPage")) - }`, - ), - ) - }) - - it('Uses the user specified custom default export import name for nested page', () => { - // Import statement: import BazingaJobProfilePageWithFunnyName from 'src/pages/Jobs/JobProfilePage' - expect(outputWithStaticImports).toContain( - normalizeStr( - `const BazingaJobProfilePageWithFunnyName = { - name: "BazingaJobProfilePageWithFunnyName", - prerenderLoader: name => require("./pages/Jobs/JobProfilePage/JobProfilePage"), - LazyComponent: (0, _react.lazy)(() => import( /* webpackChunkName: "BazingaJobProfilePageWithFunnyName" */"./pages/Jobs/JobProfilePage/JobProfilePage")) - }`, - ), - ) - }) - - it('Removes explicit imports when prerendering', () => { - expect(outputWithStaticImports).not.toContain( - `var _NewJobPage = _interopRequireDefault`, - ) - - expect(outputWithStaticImports).not.toContain( - `var _JobProfilePage = _interopRequireDefault`, - ) - }) - - it('Keeps using the user specified name when generating React component', () => { - // Generate react component still uses the user specified name - expect(outputWithStaticImports).toContain( - normalizeStr( - `}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_router.Route, { - path: "/job-profiles/{id:Int}", - page: BazingaJobProfilePageWithFunnyName, - name: "jobProfile"`, - ), - ) - }) - }) - - describe('dynamic build imports', () => { - it('Directly uses the import when page is explicitly imported', () => { - // Explicit import uses the specified import - // Has statement: import BazingaJobProfilePageWithFunnyName from 'src/pages/Jobs/JobProfilePage' - // The name of the import is not important without static imports - expect(outputNoStaticImports).toContain( - normalizeStr( - `}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_router.Route, { - path: "/job-profiles/{id:Int}", - page: _JobProfilePage["default"], - name: "jobProfile" - })`, - ), - ) - }) - - it("Uses the LazyComponent for a page that isn't imported", () => { - expect(outputNoStaticImports).toContain( - normalizeStr( - `const HomePage = { - name: "HomePage", - prerenderLoader: name => __webpack_require__(require.resolveWeak("./pages/HomePage/HomePage")), - LazyComponent: (0, _react.lazy)(() => import( /* webpackChunkName: "HomePage" */"./pages/HomePage/HomePage")) - }`, - ), - ) - - expect(outputNoStaticImports).toContain( - normalizeStr( - `}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_router.Route, { - path: "/", - page: HomePage, - name: "home" - })`, - ), - ) - }) - - it('Should NOT add a LazyComponent for pages that have been explicitly loaded', () => { - expect(outputNoStaticImports).not.toContain( - normalizeStr( - `const JobsJobPage = { - name: "JobsJobPage"`, - ), - ) - - expect(outputNoStaticImports).not.toContain( - normalizeStr( - `const JobsNewJobPage = { - name: "JobsNewJobPage"`, - ), - ) - - expect(outputNoStaticImports).toContain( - normalizeStr( - `}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_router.Route, { - path: "/jobs", - page: _JobsPage["default"], - name: "jobs" - })`, - ), - ) - }) - }) - }) - - it('Handles when imports from a page include non-default imports too', () => { - // Because we import import EditJobPage, πŸ‘‰ { NonDefaultExport } from 'src/pages/Jobs/EditJobPage' - - expect(outputWithStaticImports).toContain('var _EditJobPage = require("') - - expect(outputWithStaticImports).toContain( - normalizeStr( - `const EditJobPage = { - name: "EditJobPage", - prerenderLoader: name => require("./pages/Jobs/EditJobPage/EditJobPage"), - LazyComponent: (0, _react.lazy)(() => import( /* webpackChunkName: "EditJobPage" */"./pages/Jobs/EditJobPage/EditJobPage")) - }`, - ), - ) - - expect(outputNoStaticImports).toContain( - 'var _EditJobPage = _interopRequireWildcard(', - ) - - expect(outputNoStaticImports).toContain( - normalizeStr( - `}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_router.Route, { - path: "/jobs/{id:Int}/edit", - page: _EditJobPage["default"], - name: "editJob"`, - ), - ) - - // Should not generate a loader, because page was explicitly imported - expect(outputNoStaticImports).not.toMatch( - /import\(.*"\.\/pages\/Jobs\/EditJobPage\/EditJobPage"\)/, - ) - }) -}) diff --git a/packages/internal/src/build/web.ts b/packages/internal/src/build/web.ts deleted file mode 100644 index 08ee80a02907..000000000000 --- a/packages/internal/src/build/web.ts +++ /dev/null @@ -1,75 +0,0 @@ -import fs from 'fs' -import path from 'path' - -import { removeSync } from 'fs-extra' - -import type { Flags } from '@redwoodjs/babel-config' -import { prebuildWebFile } from '@redwoodjs/babel-config' -import { getPaths } from '@redwoodjs/project-config' - -// @MARK -// This whole file is currently only used in testing -// we may eventually use this to pretranspile the web side - -export const cleanWebBuild = () => { - const rwjsPaths = getPaths() - removeSync(rwjsPaths.web.dist) - removeSync(path.join(rwjsPaths.generated.prebuild, 'web')) -} - -/** - * Remove RedwoodJS "magic" from a user's code leaving JavaScript behind. - * - * Currently only used for debugging purposes - */ -export const prebuildWebFiles = (srcFiles: string[], flags?: Flags) => { - const rwjsPaths = getPaths() - - return srcFiles.map((srcPath) => { - const relativePathFromSrc = path.relative(rwjsPaths.base, srcPath) - const dstPath = path - .join(rwjsPaths.generated.prebuild, relativePathFromSrc) - .replace(/\.(ts)$/, '.js') - - const result = prebuildWebFile(srcPath, flags) - if (!result?.code) { - console.warn('Error:', srcPath, 'could not prebuilt.') - return undefined - } - - fs.mkdirSync(path.dirname(dstPath), { recursive: true }) - fs.writeFileSync(dstPath, result.code) - - return dstPath - }) -} - -interface BuildOptions { - verbose?: boolean -} - -/** - * Builds the web side with Vite, but not used in the buildHandler currently - * because we want to set the process.cwd to web.base - */ -export const buildWeb = async ({ verbose }: BuildOptions) => { - // @NOTE: Using dynamic import, because vite is still opt-in - const { build } = await import('vite') - const viteConfig = getPaths().web.viteConfig - - if (process.cwd() !== getPaths().web.base) { - throw new Error( - 'Looks like you are running the command from the wrong dir, this can lead to unintended consequences on CSS processing', - ) - } - - if (!viteConfig) { - throw new Error('Could not locate your web/vite.config.{js,ts} file') - } - - return build({ - configFile: viteConfig, - envFile: false, - logLevel: verbose ? 'info' : 'warn', - }) -} diff --git a/packages/internal/src/webpackPlugins/ChunkReferencesPlugin.ts b/packages/internal/src/webpackPlugins/ChunkReferencesPlugin.ts deleted file mode 100644 index b7fdc47fbff4..000000000000 --- a/packages/internal/src/webpackPlugins/ChunkReferencesPlugin.ts +++ /dev/null @@ -1,44 +0,0 @@ -import type { Compiler, Chunk } from 'webpack' - -export class ChunkReferencesPlugin { - static defaultOptions = { - outputFile: 'chunk-references.json', - } - - options: typeof ChunkReferencesPlugin.defaultOptions - - constructor(options = {}) { - this.options = { ...ChunkReferencesPlugin.defaultOptions, ...options } - } - - apply(compiler: Compiler) { - compiler.hooks.emit.tap('ChunkReferencesPlugin', (compilation) => { - const output: Array<{ - name: string | undefined - id: string | number - files: Array - referencedChunks: Array - }> = [] - - compilation.chunks.forEach((chunk) => { - if (chunk.id) { - output.push({ - name: chunk.name, - id: chunk.id, - files: Array.from(chunk.files).map((f) => '/' + f), - referencedChunks: Array.from(chunk.getAllReferencedChunks()) - .filter((c): c is Chunk & { id: string | number } => { - return !!c.id && c.id !== chunk.id - }) - .map((referencedChunk) => referencedChunk.id), - }) - } - }) - - compilation.emitAsset( - this.options.outputFile, - new compiler.webpack.sources.RawSource(JSON.stringify(output, null, 2)), - ) - }) - } -} diff --git a/packages/prerender/src/babelPlugins/__tests__/__fixtures__/webpackDistDir/client-build-manifest.json b/packages/prerender/src/babelPlugins/__tests__/__fixtures__/webpackDistDir/client-build-manifest.json deleted file mode 100644 index 3def058780ca..000000000000 --- a/packages/prerender/src/babelPlugins/__tests__/__fixtures__/webpackDistDir/client-build-manifest.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "vendors.js": "/static/js/vendors.3faf0127.chunk.js", - "vendors.js.map": "/static/js/vendors.3faf0127.chunk.js.map", - "static/media/image1.jpg": "/static/media/myImageOne.hash.jpg", - "static/media/image2.jpeg": "/static/media/myImageTwo.hash.jpeg", - "static/media/image3.png": "/static/media/myImageThree.hash.png", - "static/media/image4.bmp": "/static/media/myImageFour.hash.bmp", - "static/media/terms.pdf": "/static/media/terms.pdf", - "static/media/nyan.gif": "/static/media/nyanKitty.gif" -} diff --git a/packages/prerender/src/babelPlugins/__tests__/babel-plugin-redwood-prerender-media-imports.test.ts b/packages/prerender/src/babelPlugins/__tests__/babel-plugin-redwood-prerender-media-imports.test.ts index fd8e6c7f81bf..f2c0bc06b675 100644 --- a/packages/prerender/src/babelPlugins/__tests__/babel-plugin-redwood-prerender-media-imports.test.ts +++ b/packages/prerender/src/babelPlugins/__tests__/babel-plugin-redwood-prerender-media-imports.test.ts @@ -3,7 +3,6 @@ import path from 'path' import pluginTester from 'babel-plugin-tester' import { vi, describe, beforeEach, afterAll } from 'vitest' -import { BundlerEnum } from '@redwoodjs/project-config' import type projectConfig from '@redwoodjs/project-config' import plugin from '../babel-plugin-redwood-prerender-media-imports' @@ -34,86 +33,6 @@ vi.mock('../utils', () => { } }) -describe('Webpack bundler', () => { - beforeEach(() => { - mockDistDir = path.resolve(__dirname, './__fixtures__/webpackDistDir') - mockSrcDir = path.resolve(__dirname, './__fixtures__/webpackSrcDir') - }) - - describe('Should replace larger imports based on generated manifest', () => { - pluginTester({ - plugin, - pluginName: 'babel-plugin-redwood-prerender-media-imports', - pluginOptions: { - bundler: BundlerEnum.WEBPACK, - }, - tests: [ - { - title: 'Handle jpgs', - code: `import img1 from './image1.jpg'`, - output: `const img1 = '/static/media/myImageOne.hash.jpg'`, - }, - { - title: 'Handle jpegs', - - code: `import img2 from './image2.jpeg'`, - output: `const img2 = '/static/media/myImageTwo.hash.jpeg'`, - }, - { - title: 'Handle pngs', - - code: `import img3 from './image3.png'`, - output: `const img3 = '/static/media/myImageThree.hash.png'`, - }, - { - title: 'Handle bmps', - code: `import img4 from './image4.bmp'`, - output: `const img4 = '/static/media/myImageFour.hash.bmp'`, - }, - { - title: 'Handle pdfs', - code: `import pdfDoc from './terms.pdf'`, - output: `const pdfDoc = '/static/media/terms.pdf'`, - }, - { - title: 'Handle gifs', - code: `import nyanCat from './nyan.gif'`, - output: `const nyanCat = '/static/media/nyanKitty.gif'`, - }, - ], - }) - - afterAll(() => { - vi.clearAllMocks() - }) - }) - - describe('Should replace small img sources with blank data url', () => { - // These imports aren't in the manifest - // which simulates that they were handled by the url loader - pluginTester({ - plugin, - // disable formatter for this test - formatResult: (r) => r, - pluginName: 'babel-plugin-redwood-prerender-media-imports', - pluginOptions: { - bundler: BundlerEnum.WEBPACK, - }, - tests: [ - { - title: 'Url loaded image', - code: `import img1 from './small.jpg'`, - output: `const img1 = "data:image/jpg;base64,xxx-mock-b64-small.jpg";`, - }, - ], - }) - - afterAll(() => { - vi.clearAllMocks() - }) - }) -}) - describe('Vite bundler', () => { beforeEach(() => { mockDistDir = path.resolve(__dirname, './__fixtures__/viteDistDir') @@ -124,9 +43,6 @@ describe('Vite bundler', () => { pluginTester({ plugin, pluginName: 'babel-plugin-redwood-prerender-media-imports', - pluginOptions: { - bundler: BundlerEnum.VITE, - }, filepath: path.resolve( __dirname, './__fixtures__/viteSrcDir/pages/HomePage/HomePage.js', @@ -180,9 +96,6 @@ describe('Vite bundler', () => { // disable formatter for this test formatResult: (r) => r, pluginName: 'babel-plugin-redwood-prerender-media-imports', - pluginOptions: { - bundler: BundlerEnum.VITE, - }, filepath: path.resolve( __dirname, './__fixtures__/viteSrcDir/pages/HomePage/HomePage.js', diff --git a/packages/prerender/src/babelPlugins/babel-plugin-redwood-prerender-media-imports.ts b/packages/prerender/src/babelPlugins/babel-plugin-redwood-prerender-media-imports.ts index f88184ec36e9..c8e06788f26c 100644 --- a/packages/prerender/src/babelPlugins/babel-plugin-redwood-prerender-media-imports.ts +++ b/packages/prerender/src/babelPlugins/babel-plugin-redwood-prerender-media-imports.ts @@ -1,19 +1,14 @@ -import { extname, basename, join, relative, dirname } from 'path' +import { extname, join, relative, dirname } from 'path' import type { PluginObj, types, NodePath } from '@babel/core' import type { ManifestChunk as ViteManifestChunk } from 'vite' -import { - BundlerEnum, - ensurePosixPath, - getPaths, -} from '@redwoodjs/project-config' +import { ensurePosixPath, getPaths } from '@redwoodjs/project-config' import { convertToDataUrl } from './utils' const defaultOptions = { // This list of extensions matches config for file-loader in - // packages/core/config/webpack.common.js extensions: [ '.ico', '.jpg', @@ -43,10 +38,7 @@ function getVariableName(p: NodePath) { return null } -export default function ( - { types: t }: { types: typeof types }, - { bundler }: { bundler: BundlerEnum }, -): PluginObj { +export default function ({ types: t }: { types: typeof types }): PluginObj { const manifestPath = join(getPaths().web.dist, 'client-build-manifest.json') const buildManifest = require(manifestPath) @@ -63,32 +55,22 @@ export default function ( if (ext && options.extensions.includes(ext)) { const importConstName = getVariableName(p) - let copiedAssetPath - if (bundler !== BundlerEnum.WEBPACK) { - if (state.filename === undefined) { - return - } - const absPath = join(dirname(state.filename), p.node.source.value) - const viteManifestKey = ensurePosixPath( - relative(getPaths().web.src, absPath), - ) - - // Note: The entry will not exist if vite has inlined a small asset - copiedAssetPath = (buildManifest as ViteManifest)[viteManifestKey] - ?.file - } else if (bundler === BundlerEnum.WEBPACK) { - const webpackManifestKey = `static/media/${basename( - p.node.source.value, - )}` - copiedAssetPath = buildManifest[webpackManifestKey] - } else { - // We really shouldn't get here, but just in case - throw new Error(`Unknown bundler used: ${bundler}`) + if (state.filename === undefined) { + return } + const absPath = join(dirname(state.filename), p.node.source.value) + const viteManifestKey = ensurePosixPath( + relative(getPaths().web.src, absPath), + ) + + // Note: The entry will not exist if vite has inlined a small asset + const copiedAssetPath = (buildManifest as ViteManifest)[ + viteManifestKey + ]?.file - // If webpack has copied it over, use the path from the asset manifest - // Otherwise convert it to a base64 encoded data uri + // If the bundler has copied it over, use the path from the asset + // manifest. Otherwise convert it to a base64 encoded data uri const assetSrc = copiedAssetPath ?? convertToDataUrl( diff --git a/packages/prerender/src/runPrerender.tsx b/packages/prerender/src/runPrerender.tsx index cce03e057784..eade48aa5e8d 100644 --- a/packages/prerender/src/runPrerender.tsx +++ b/packages/prerender/src/runPrerender.tsx @@ -12,7 +12,7 @@ import { registerApiSideBabelHook, registerWebSideBabelHook, } from '@redwoodjs/babel-config' -import { getConfig, getPaths, ensurePosixPath } from '@redwoodjs/project-config' +import { getPaths, ensurePosixPath } from '@redwoodjs/project-config' import { LocationProvider } from '@redwoodjs/router' import { matchPath } from '@redwoodjs/router/dist/util' import type { QueryInfo } from '@redwoodjs/web' @@ -27,13 +27,6 @@ import { import { executeQuery, getGqlHandler } from './graphql/graphql' import { getRootHtmlPath, registerShims, writeToDist } from './internal' -interface ChunkReference { - name?: string - id: string | number - files: Array - referencedChunks: Array -} - // Create an apollo client that we can use to prepopulate the cache and restore it client-side const prerenderApolloClient = new ApolloClient({ cache: new InMemoryCache() }) @@ -161,7 +154,6 @@ async function recursivelyRender( function insertChunkLoadingScript( indexHtmlTree: CheerioAPI, renderPath: string, - forVite: boolean, ) { const prerenderRoutes = detectPrerenderRoutes() @@ -186,51 +178,7 @@ function insertChunkLoadingScript( const chunkPaths: Array = [] - if (!forVite) { - // Webpack - - const pageChunkPath = buildManifest[`${route?.pageIdentifier}.js`] - - if (pageChunkPath) { - chunkPaths.push(pageChunkPath) - - const chunkReferencesJson: Array = JSON.parse( - fs.readFileSync( - path.join(getPaths().web.dist, 'chunk-references.json'), - 'utf-8', - ), - ) - - const chunkReferences = chunkReferencesJson.find((chunkRef) => { - return chunkRef.name === route?.pageIdentifier - }) - - if (chunkReferences?.referencedChunks) { - chunkReferences.referencedChunks.forEach((chunkId) => { - const chunkRef = chunkReferencesJson.find((chunkRef) => { - return chunkRef.id === chunkId - }) - - // Some chunks also produces css files, and maybe other files as well - // We're only interested in the .js files - const chunkRefJsFiles: string[] = - chunkRef?.files.filter((file) => { - return file.endsWith('.js') - }) || [] - - chunkRefJsFiles.forEach((file) => { - chunkPaths.push(file) - }) - - const chunkPath = buildManifest[`${chunkId}.js`] - - if (chunkPath) { - chunkPaths.push(chunkPath) - } - }) - } - } - } else if (forVite && route?.filePath) { + if (route?.filePath) { const pagesIndex = route.filePath.indexOf(path.join('web', 'src', 'pages')) + 8 const pagePath = ensurePosixPath(route.filePath.slice(pagesIndex)) @@ -246,8 +194,7 @@ function insertChunkLoadingScript( if (chunkPaths.length === 0) { // This happens when the page is manually imported in Routes.tsx // (as opposed to being auto-imported) - // It also happens for the page at '/' with Webpack - // It could also be that Webpack or Vite for some reason didn't create a + // It could also be that Vite for some reason didn't create a // chunk for this page. In that case it'd be nice to throw an error, but // there's no easy way to differentiate between the two cases. return @@ -255,18 +202,10 @@ function insertChunkLoadingScript( chunkPaths.forEach((chunkPath) => { indexHtmlTree('head').prepend( - ``, + ``, ) }) - if (!forVite) { - return - } - - // This is not needed for WebPack - chunkPaths.forEach((chunkPath) => { const fullChunkPath = path.join(getPaths().web.dist, chunkPath) const jsChunk = fs.readFileSync(fullChunkPath, 'utf-8') @@ -334,20 +273,21 @@ export const runPrerender = async ({ }) const gqlHandler = await getGqlHandler() - const forVite = getConfig().web.bundler !== 'webpack' // Prerender specific configuration // extends projects web/babelConfig registerWebSideBabelHook({ - forVite, overrides: [ { plugins: [ ['ignore-html-and-css-imports'], // webpack/postcss handles CSS imports - [mediaImportsPlugin, { bundler: getConfig().web.bundler }], + [mediaImportsPlugin], ], }, ], + options: { + forPrerender: true, + }, }) const indexContent = fs.readFileSync(getRootHtmlPath()).toString() @@ -413,7 +353,7 @@ export const runPrerender = async ({ // or possible cache merge conflicts prerenderApolloClient.resetStore() - insertChunkLoadingScript(indexHtmlTree, renderPath, forVite) + insertChunkLoadingScript(indexHtmlTree, renderPath) indexHtmlTree('#redwood-app').append(componentAsHtml) diff --git a/packages/project-config/src/__tests__/config.test.ts b/packages/project-config/src/__tests__/config.test.ts index a3b7973860c4..ff8de1065ad3 100644 --- a/packages/project-config/src/__tests__/config.test.ts +++ b/packages/project-config/src/__tests__/config.test.ts @@ -47,9 +47,6 @@ describe('getConfig', () => { "cli": { "autoInstall": true, "plugins": [ - { - "package": "@redwoodjs/cli-storybook", - }, { "package": "@redwoodjs/cli-storybook-vite", }, @@ -103,7 +100,6 @@ describe('getConfig', () => { "web": { "a11y": true, "apiUrl": "/.redwood/functions", - "bundler": "vite", "fastRefresh": true, "includeEnvironmentVariables": [], "path": "./web", diff --git a/packages/project-config/src/__tests__/paths.test.ts b/packages/project-config/src/__tests__/paths.test.ts index 8a30d1a7c33c..6f85bf54a312 100644 --- a/packages/project-config/src/__tests__/paths.test.ts +++ b/packages/project-config/src/__tests__/paths.test.ts @@ -112,15 +112,8 @@ describe('paths', () => { generators: path.join(FIXTURE_BASEDIR, 'web', 'generators'), document: null, // this fixture doesnt have a document app: path.join(FIXTURE_BASEDIR, 'web', 'src', 'App.tsx'), - index: null, html: path.join(FIXTURE_BASEDIR, 'web', 'src', 'index.html'), config: path.join(FIXTURE_BASEDIR, 'web', 'config'), - webpack: path.join( - FIXTURE_BASEDIR, - 'web', - 'config', - 'webpack.config.js', - ), postcss: path.join( FIXTURE_BASEDIR, 'web', @@ -388,16 +381,8 @@ describe('paths', () => { generators: path.join(FIXTURE_BASEDIR, 'web', 'generators'), app: path.join(FIXTURE_BASEDIR, 'web', 'src', 'App.js'), document: null, // this fixture doesnt have a document - index: null, html: path.join(FIXTURE_BASEDIR, 'web', 'src', 'index.html'), config: path.join(FIXTURE_BASEDIR, 'web', 'config'), - webpack: path.join( - FIXTURE_BASEDIR, - 'web', - 'config', - 'webpack.config.js', - ), - postcss: path.join( FIXTURE_BASEDIR, 'web', @@ -711,15 +696,8 @@ describe('paths', () => { document: null, // this fixture doesnt have a document generators: path.join(FIXTURE_BASEDIR, 'web', 'generators'), app: null, - index: path.join(FIXTURE_BASEDIR, 'web', 'src', 'index.js'), html: path.join(FIXTURE_BASEDIR, 'web', 'src', 'index.html'), config: path.join(FIXTURE_BASEDIR, 'web', 'config'), - webpack: path.join( - FIXTURE_BASEDIR, - 'web', - 'config', - 'webpack.config.js', - ), viteConfig: null, // no vite config in example-todo-main-with-errors postcss: path.join( FIXTURE_BASEDIR, @@ -992,15 +970,8 @@ describe('paths', () => { src: path.join(FIXTURE_BASEDIR, 'web', 'src'), generators: path.join(FIXTURE_BASEDIR, 'web', 'generators'), app: path.join(FIXTURE_BASEDIR, 'web', 'src', 'App.tsx'), - index: null, html: path.join(FIXTURE_BASEDIR, 'web', 'src', 'index.html'), config: path.join(FIXTURE_BASEDIR, 'web', 'config'), - webpack: path.join( - FIXTURE_BASEDIR, - 'web', - 'config', - 'webpack.config.js', - ), postcss: path.join( FIXTURE_BASEDIR, 'web', diff --git a/packages/project-config/src/config.ts b/packages/project-config/src/config.ts index 71a2a7e89d2c..623f897ec2d9 100644 --- a/packages/project-config/src/config.ts +++ b/packages/project-config/src/config.ts @@ -13,11 +13,6 @@ export enum TargetEnum { ELECTRON = 'electron', } -export enum BundlerEnum { - WEBPACK = 'webpack', - VITE = 'vite', -} - export interface NodeTargetConfig { title: string name?: string @@ -37,7 +32,6 @@ interface BrowserTargetConfig { port: number path: string target: TargetEnum.BROWSER - bundler: BundlerEnum includeEnvironmentVariables: string[] /** * Specify the URL to your api-server. @@ -130,15 +124,12 @@ export interface CLIPlugin { enabled?: boolean } -// Note that web's includeEnvironmentVariables is handled in `webpack.common.js` -// https://github.com/redwoodjs/redwood/blob/d51ade08118c17459cebcdb496197ea52485364a/packages/core/config/webpack.common.js#L19 const DEFAULT_CONFIG: Config = { web: { title: 'Redwood App', port: 8910, path: './web', target: TargetEnum.BROWSER, - bundler: BundlerEnum.VITE, includeEnvironmentVariables: [], apiUrl: '/.redwood/functions', fastRefresh: true, @@ -185,9 +176,6 @@ const DEFAULT_CONFIG: Config = { cli: { autoInstall: true, plugins: [ - { - package: '@redwoodjs/cli-storybook', - }, { package: '@redwoodjs/cli-storybook-vite', }, diff --git a/packages/project-config/src/paths.ts b/packages/project-config/src/paths.ts index dbe18b882800..40e26b104d91 100644 --- a/packages/project-config/src/paths.ts +++ b/packages/project-config/src/paths.ts @@ -32,15 +32,13 @@ export interface WebPaths { app: string document: string generators: string - index: string | null html: string routes: string pages: string components: string layouts: string config: string - webpack: string - viteConfig: string | null // because vite is opt-in only + viteConfig: string entryClient: string | null entryServer: string | null postcss: string @@ -109,11 +107,9 @@ const PATH_WEB_DIR_STORYBOOK_CONFIG = 'web/.storybook' const PATH_WEB_DIR_SRC = 'web/src' const PATH_WEB_DIR_SRC_APP = 'web/src/App' const PATH_WEB_DIR_SRC_DOCUMENT = 'web/src/Document' -const PATH_WEB_DIR_SRC_INDEX = 'web/src/index' // .jsx|.tsx const PATH_WEB_INDEX_HTML = 'web/src/index.html' const PATH_WEB_DIR_GENERATORS = 'web/generators' const PATH_WEB_DIR_CONFIG = 'web/config' -const PATH_WEB_DIR_CONFIG_WEBPACK = 'web/config/webpack.config.js' const PATH_WEB_DIR_CONFIG_VITE = 'web/vite.config' // .js,.ts const PATH_WEB_DIR_ENTRY_CLIENT = 'web/src/entry.client' // .jsx,.tsx const PATH_WEB_DIR_ENTRY_SERVER = 'web/src/entry.server' // .jsx,.tsx @@ -176,6 +172,9 @@ export const getPaths = (BASE_DIR: string = getBaseDir()): Paths => { const routes = resolveFile(path.join(BASE_DIR, PATH_WEB_ROUTES)) as string const { schemaPath } = getConfig(getConfigPath(BASE_DIR)).api const schemaDir = path.dirname(schemaPath) + const viteConfig = resolveFile( + path.join(BASE_DIR, PATH_WEB_DIR_CONFIG_VITE), + ) as string const paths = { base: BASE_DIR, @@ -225,11 +224,9 @@ export const getPaths = (BASE_DIR: string = getBaseDir()): Paths => { document: resolveFile( path.join(BASE_DIR, PATH_WEB_DIR_SRC_DOCUMENT), ) as string, - index: resolveFile(path.join(BASE_DIR, PATH_WEB_DIR_SRC_INDEX)), // old webpack entry point html: path.join(BASE_DIR, PATH_WEB_INDEX_HTML), config: path.join(BASE_DIR, PATH_WEB_DIR_CONFIG), - webpack: path.join(BASE_DIR, PATH_WEB_DIR_CONFIG_WEBPACK), - viteConfig: resolveFile(path.join(BASE_DIR, PATH_WEB_DIR_CONFIG_VITE)), + viteConfig, postcss: path.join(BASE_DIR, PATH_WEB_DIR_CONFIG_POSTCSS), storybookConfig: path.join( BASE_DIR, diff --git a/packages/storybook/preset.js b/packages/storybook/preset.js new file mode 100644 index 000000000000..e948e495d655 --- /dev/null +++ b/packages/storybook/preset.js @@ -0,0 +1 @@ +export * from './dist/preset' diff --git a/packages/telemetry/src/sendTelemetry.ts b/packages/telemetry/src/sendTelemetry.ts index 2dbb7093bc8e..68b5a6ecdda9 100644 --- a/packages/telemetry/src/sendTelemetry.ts +++ b/packages/telemetry/src/sendTelemetry.ts @@ -8,7 +8,7 @@ import envinfo from 'envinfo' import system from 'systeminformation' import { v4 as uuidv4 } from 'uuid' -import { getConfig, getRawConfig } from '@redwoodjs/project-config' +import { getRawConfig } from '@redwoodjs/project-config' import type { RWRoute } from '@redwoodjs/structure/dist/model/RWRoute' // circular dependency when trying to import @redwoodjs/structure so lets do it @@ -105,21 +105,10 @@ const getInfo = async (presets: Args = {}) => { const cpu = await system.cpu() const mem = await system.mem() - // Must only call getConfig() once the project is setup - so not within telemetry for CRWA - // Default to 'webpack' for new projects - const webBundler = presets.command?.startsWith('create redwood-app') - ? 'webpack' - : getConfig().web.bundler - // Returns a list of all enabled experiments // This detects all top level [experimental.X] and returns all X's, ignoring all Y's for any [experimental.X.Y] const experiments = Object.keys(getRawConfig()['experimental'] || {}) - // NOTE: Added this way to avoid the need to disturb the existing toml structure - if (webBundler !== 'webpack') { - experiments.push(webBundler) - } - return { os: info.System?.OS?.split(' ')[0], osVersion: info.System?.OS?.split(' ')[1], @@ -131,7 +120,7 @@ const getInfo = async (presets: Args = {}) => { redwoodVersion: presets.redwoodVersion || info.npmPackages['@redwoodjs/core']?.installed, system: `${cpu.physicalCores}.${Math.round(mem.total / 1073741824)}`, - webBundler, + webBundler: 'vite', // Hardcoded as this is now the only supported bundler experiments, } } diff --git a/packages/testing/README.md b/packages/testing/README.md index 07735b52f099..4622cf45d481 100644 --- a/packages/testing/README.md +++ b/packages/testing/README.md @@ -1,24 +1,3 @@ # @redwoodjs/testing -This package includes Redwood's Jest and Storybook config. - -## Notes on Storybook - -This section contains some working notes on Redwood's Storybook config, mainly the `webpackFinal` prop. - -- `staticDirs` - - ```js - ...(process.env.NODE_ENV !== 'production' && { - staticDirs: [path.join(redwoodProjectPaths.web.base, 'public')], - }), - ``` - - We only set `staticDirs` when running Storybook process; will fail if set for SB --build. - -- resolve extensions and plugins - - ```js - sbConfig.resolve.extensions = rwConfig.resolve.extensions - sbConfig.resolve.plugins = rwConfig.resolve.plugins // Directory Named Plugin - ``` +This package includes Redwood's Jest config. diff --git a/packages/testing/config/storybook/main.js b/packages/testing/config/storybook/main.js deleted file mode 100644 index 83d6b013b015..000000000000 --- a/packages/testing/config/storybook/main.js +++ /dev/null @@ -1,211 +0,0 @@ -const fs = require('fs') -const path = require('path') - -const { mergeWithCustomize } = require('webpack-merge') - -const { getSharedPlugins } = require('@redwoodjs/core/config/webpack.common.js') -const { - getConfig, - getPaths, - importStatementPath, -} = require('@redwoodjs/project-config') - -const redwoodProjectConfig = getConfig() -const redwoodProjectPaths = getPaths() - -/** @type { import('@storybook/react-webpack5').StorybookConfig } */ -const baseConfig = { - framework: { - name: '@storybook/react-webpack5', - // This empty object is actually necessary. - options: {}, - }, - - stories: [ - `${importStatementPath( - redwoodProjectPaths.web.src, - )}/**/*.stories.@(js|jsx|ts|tsx|mdx)`, - ], - - // See https://storybook.js.org/docs/react/configure/storybook-addons. - addons: [ - '@storybook/addon-essentials', - redwoodProjectConfig.web.a11y && '@storybook/addon-a11y', - ].filter(Boolean), - - // Only set staticDirs when running Storybook process; will fail if set for SB --build - ...(process.env.NODE_ENV !== 'production' && { - staticDirs: [path.join(redwoodProjectPaths.web.base, 'public')], - }), - - webpackFinal(sbConfig, { configType }) { - const isEnvProduction = - configType && configType.toLowerCase() === 'production' - - const rwConfig = isEnvProduction - ? require('@redwoodjs/core/config/webpack.production') - : require('@redwoodjs/core/config/webpack.development') - - // We replace imports to "@redwoodjs/router" with our own implementation in "@redwoodjs/testing" - sbConfig.resolve.alias['@redwoodjs/router$'] = require.resolve( - '@redwoodjs/testing/dist/web/MockRouter.js', - ) - // This allows us to mock `createAuthentication` which is used by auth - // clients, which in turn lets us mock `useAuth` in tests - sbConfig.resolve.alias['@redwoodjs/auth$'] = require.resolve( - '@redwoodjs/testing/dist/web/mockAuth.js', - ) - - // Force loading the ESM version of ApolloProvider in Storybook - // I'm unsure why storybook-webpack does not work with the CJS version - // All other cases are fine with the CJS import. - sbConfig.resolve.alias['@redwoodjs/web/apollo$'] = require.resolve( - '@redwoodjs/web/forceEsmApollo', - ) - - sbConfig.resolve.alias['~__REDWOOD__USER_ROUTES_FOR_MOCK'] = - redwoodProjectPaths.web.routes - sbConfig.resolve.alias['~__REDWOOD__USER_WEB_SRC'] = - redwoodProjectPaths.web.src - - // Determine the default storybook style file to use. - // If one isn't provided, set the alias to `false` to tell webpack to ignore it. - // See https://webpack.js.org/configuration/resolve/#resolvealias. - sbConfig.resolve.alias['~__REDWOOD__USER_WEB_DEFAULT_CSS'] = false - - const supportedStyleIndexFiles = ['index.scss', 'index.sass', 'index.css'] - for (const file of supportedStyleIndexFiles) { - const filePath = path.join(redwoodProjectPaths.web.src, file) - if (fs.existsSync(filePath)) { - sbConfig.resolve.alias['~__REDWOOD__USER_WEB_DEFAULT_CSS'] = filePath - break - } - } - - let userPreviewPath = './preview.example.js' - - if (redwoodProjectPaths.web.storybookPreviewConfig) { - userPreviewPath = redwoodProjectPaths.web.storybookPreviewConfig - } - - sbConfig.resolve.alias['~__REDWOOD__USER_STORYBOOK_PREVIEW_CONFIG'] = - userPreviewPath - - sbConfig.resolve.extensions = rwConfig.resolve.extensions - sbConfig.resolve.plugins = rwConfig.resolve.plugins // Directory Named Plugin - - // Webpack v5 does not include polyfills. Will error without these: - sbConfig.resolve.fallback = { - http: false, - https: false, - timers: false, - os: false, - tty: false, - crypto: false, - stream: false, - zlib: false, - path: false, - } - - // ** PLUGINS ** - sbConfig.plugins = [ - ...sbConfig.plugins, - ...getSharedPlugins(isEnvProduction), - ] - - // ** LOADERS ** - const sbMdxRule = sbConfig.module.rules.find( - (rule) => rule.test.toString() === /(stories|story)\.mdx$/.toString(), - ) - console.assert(sbMdxRule, 'Storybook MDX rule not found') - sbConfig.module.rules = [...rwConfig.module.rules, sbMdxRule].filter( - Boolean, - ) - - // See https://community.redwoodjs.com/t/mocking-node-modules-on-the-web-side-with-webpack-config-in-storybook/1392. - sbConfig.node = rwConfig.node - - // Performance Improvements: - // https://webpack.js.org/guides/build-performance/#avoid-extra-optimization-steps - sbConfig.optimization = { - removeAvailableModules: false, - removeEmptyChunks: false, - splitChunks: false, - } - // https://webpack.js.org/guides/build-performance/#output-without-path-info - sbConfig.output.pathinfo = false - - return sbConfig - }, -} - -function mergeUserStorybookConfig(baseConfig) { - const hasCustomConfig = fs.existsSync(redwoodProjectPaths.web.storybookConfig) - - if (!hasCustomConfig) { - return baseConfig - } - - const userStorybookConfig = require(redwoodProjectPaths.web.storybookConfig) - - const { webpackFinal: baseWebpackFinal, ...baseConfigRest } = baseConfig - - const { - webpackFinal: userStorybookConfigWebpackFinal, - ...userStorybookConfigRest - } = userStorybookConfig - - const mergedConfig = mergeWithCustomize({ - // https://github.com/survivejs/webpack-merge#mergewithcustomize-customizearray-customizeobject-configuration--configuration - customizeArray(baseConfig, userStorybookConfig, key) { - if (key === 'addons' || key === 'stories') { - // Allows userStorybookConfig to override baseConfig. - // Since this is an array, we spread the user config first (so that it comes first) - // Also, arrays don't dedupe the way objects do when spreading, so we do a conversion to and from a Set in order to remove duplicates. - let combinedArrays = [ - ...new Set([...userStorybookConfig, ...baseConfig]), - ] - // To avoid `WARN Expected '@storybook/addon-actions' (or '@storybook/addon-essentials') to be listed before '@storybook/addon-interactions' in main Storybook config.` - if (key === 'addons') { - let key = '@storybook/addon-actions' - combinedArrays = moveKeyToFrontOfArray(combinedArrays, key) - key = '@storybook/addon-essentials' - combinedArrays = moveKeyToFrontOfArray(combinedArrays, key) - } - return combinedArrays - } - // Fall back to default merging - return undefined - }, - })(baseConfigRest, userStorybookConfigRest) - - mergedConfig.webpackFinal = async (config, options) => { - let configFinal = await baseWebpackFinal(config, options) - - if (userStorybookConfigWebpackFinal) { - configFinal = await userStorybookConfigWebpackFinal(configFinal, options) - } - - return configFinal - } - - return mergedConfig -} - -/** - * - * @param {string[]} configs - * @param {string} key - * @returns modified configs with key moved to front of array if it exists in original - */ -function moveKeyToFrontOfArray(configs, key) { - if (configs.includes(key)) { - const filteredArrayOfConfigs = configs.filter((c) => c !== key) - return [key, ...filteredArrayOfConfigs] - } else { - return configs - } -} - -/** @returns {import('webpack').Configuration} Webpack Configuration with storybook config */ -module.exports = mergeUserStorybookConfig(baseConfig) diff --git a/packages/testing/config/storybook/preview.example.js b/packages/testing/config/storybook/preview.example.js deleted file mode 100644 index 11956e5a4e54..000000000000 --- a/packages/testing/config/storybook/preview.example.js +++ /dev/null @@ -1,8 +0,0 @@ -// This is an example of a custom preview.js file. If you'd like to -// customize your own, copy this file to web/config/storybook.preview.js -// and restart your Storybook server. -// For more information see https://storybook.js.org/docs/react/configure/overview#configure-story-rendering - -// export const decorators = [ -// Story =>
-// ] diff --git a/packages/testing/config/storybook/preview.js b/packages/testing/config/storybook/preview.js deleted file mode 100644 index 72a6f33d7296..000000000000 --- a/packages/testing/config/storybook/preview.js +++ /dev/null @@ -1,28 +0,0 @@ -const React = require('react') - -const { merge } = require('webpack-merge') - -// The StorybookProvider is responsible for importing all the mock files, -// booting up the mock server workers, and mocking the router. -const { - StorybookProvider, - MockingLoader, -} = require('@redwoodjs/testing/dist/web/StorybookProvider') - -// Import the user's default CSS file -require('~__REDWOOD__USER_WEB_DEFAULT_CSS') - -// The base config provides Redwood-specific integrations. User config values -// will be merged into this. -const baseConfig = { - decorators: [ - (storyFn, { id }) => - React.createElement(StorybookProvider, { storyFn, id }), - ], - loaders: [MockingLoader], -} - -const userConfig = require('~__REDWOOD__USER_STORYBOOK_PREVIEW_CONFIG') - -/** @returns {import('webpack').Configuration} Webpack Configuration with storybook provider */ -module.exports = merge(baseConfig, userConfig) diff --git a/packages/testing/package.json b/packages/testing/package.json index 5fc6f64b74ff..7726150727d8 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -43,8 +43,6 @@ "@types/babel-core": "6.25.10", "@types/jest": "29.5.12", "@types/node": "20.12.12", - "@types/webpack": "5.28.5", - "@types/webpack-env": "1.18.5", "babel-jest": "^29.7.0", "core-js": "3.37.1", "fast-glob": "3.3.2", diff --git a/packages/testing/src/web/StorybookProvider.tsx b/packages/testing/src/web/StorybookProvider.tsx deleted file mode 100644 index 648b4611051d..000000000000 --- a/packages/testing/src/web/StorybookProvider.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import type { ReactNode, ReactPortal } from 'react' -import * as React from 'react' - -import { MockProviders } from './MockProviders' -import { setupRequestHandlers, startMSW, mockCurrentUser } from './mockRequests' - -export const MockingLoader = async () => { - const reqs = require.context( - '~__REDWOOD__USER_WEB_SRC', - true, - /.+(mock).(js|ts)$/, - ) - reqs.keys().forEach(reqs) - - await startMSW('browsers') - setupRequestHandlers() - - return {} -} - -export const StorybookProvider: React.FunctionComponent<{ - storyFn: () => ReactNode | ReactPortal - id: string -}> = ({ storyFn }) => { - // default to a non-existent user at the beginning of each story - mockCurrentUser(null) - - return {storyFn()} -} diff --git a/packages/testing/src/web/fileMock.ts b/packages/testing/src/web/fileMock.ts index acbb0c1245cb..70f54ebd24b1 100644 --- a/packages/testing/src/web/fileMock.ts +++ b/packages/testing/src/web/fileMock.ts @@ -1,6 +1,7 @@ /** * configure Jest to gracefully handle asset files such as stylesheets and images. * Usually, these files aren't particularly useful in tests so we can safely mock them out. - * https://jestjs.io/docs/en/webpack#handling-static-assets + * See: https://jestjs.io/docs/en/webpack#handling-static-assets + * See: https://github.com/redwoodjs/redwood/blob/4637f61d5e6aeb907d4a17217ab643cfb4d4ebe4/packages/testing/config/jest/web/jest-preset.js#L77-L78 */ export default 'fileMock' diff --git a/packages/testing/src/web/mockRequests.ts b/packages/testing/src/web/mockRequests.ts index a871eeca554e..4a3d5d2aa081 100644 --- a/packages/testing/src/web/mockRequests.ts +++ b/packages/testing/src/web/mockRequests.ts @@ -1,4 +1,4 @@ -// MSW is shared by Jest (NodeJS) and Storybook (Webpack) +// MSW is used by Jest (NodeJS) import { setupWorker, graphql } from 'msw' import type { StartOptions as StartMSWWorkerOptions, diff --git a/packages/vite/ambient.d.ts b/packages/vite/ambient.d.ts index a08e82f4c947..75ed8e8fed2c 100644 --- a/packages/vite/ambient.d.ts +++ b/packages/vite/ambient.d.ts @@ -3,7 +3,7 @@ import type { HelmetServerState } from 'react-helmet-async' declare global { - // Provided by Vite.config, or Webpack in the user's project + // Provided by Vite.config // but "regsitered" in packages/vite/src/streaming/registerGlobals.ts // for it to be available to framework code var RWJS_ENV: { @@ -27,6 +27,11 @@ declare global { var __REDWOOD__HELMET_CONTEXT: { helmet?: HelmetServerState } var __rw_module_cache__: Map + + var __webpack_chunk_load__: ( + id: string, + ) => Promise + var __webpack_require__: (id: string) => unknown } export {} diff --git a/packages/vite/bins/rw-vite-build.mjs b/packages/vite/bins/rw-vite-build.mjs index 33eeeaf3192e..a343182dd071 100755 --- a/packages/vite/bins/rw-vite-build.mjs +++ b/packages/vite/bins/rw-vite-build.mjs @@ -3,8 +3,8 @@ import fs from 'node:fs' import yargsParser from 'yargs-parser' -import { buildWeb } from '@redwoodjs/internal/dist/build/web.js' import { getConfig, getPaths } from '@redwoodjs/project-config' +import { buildWeb } from '@redwoodjs/vite/build' import { buildFeServer } from '@redwoodjs/vite/buildFeServer' const rwPaths = getPaths() @@ -16,7 +16,7 @@ const { webDir, verbose } = yargsParser(process.argv.slice(2), { if (!webDir) { console.error( - 'Please pass the full path to the web side using the --webDir argument' + 'Please pass the full path to the web side using the --webDir argument', ) process.exit(1) } diff --git a/packages/vite/build.mts b/packages/vite/build.mts index 72551f2cf916..b670113cdda2 100644 --- a/packages/vite/build.mts +++ b/packages/vite/build.mts @@ -67,3 +67,4 @@ writeFileSync('dist/cjs/buildFeServer.d.ts', 'export type * from "../buildFeServ writeFileSync('dist/cjs/client.d.ts', 'export type * from "../client.d.ts"') writeFileSync('dist/cjs/clientSsr.d.ts', 'export type * from "../clientSsr.d.ts"') writeFileSync('dist/cjs/ClientRouter.d.ts', 'export type * from "../ClientRouter.d.ts"') +writeFileSync('dist/cjs/build/build.d.ts', 'export type * from "../../build/build.d.ts"') diff --git a/packages/vite/package.json b/packages/vite/package.json index dec67fce1c7c..3ddadfbdef95 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -45,6 +45,10 @@ "./react-node-loader": { "default": "./dist/react-server-dom-webpack/node-loader.js" }, + "./build": { + "import": "./dist/build/build.js", + "default": "./dist/cjs/build/build.js" + }, "./bins/rw-vite-build.mjs": "./bins/rw-vite-build.mjs" }, "bin": { @@ -90,6 +94,7 @@ "dotenv-defaults": "5.0.2", "express": "4.19.2", "find-my-way": "8.2.0", + "fs-extra": "11.2.0", "http-proxy-middleware": "2.0.6", "isbot": "5.1.9", "react": "19.0.0-beta-04b058868c-20240508", @@ -105,6 +110,7 @@ "@types/busboy": "^1", "@types/cookie": "^0", "@types/express": "4", + "@types/fs-extra": "11.0.4", "@types/react": "^18.2.55", "@types/yargs-parser": "21.0.3", "concurrently": "8.2.2", diff --git a/packages/internal/src/__tests__/build_web.test.ts b/packages/vite/src/build/__tests__/buildWeb.test.ts similarity index 85% rename from packages/internal/src/__tests__/build_web.test.ts rename to packages/vite/src/build/__tests__/buildWeb.test.ts index 7298c833cf93..612b0f5e1e17 100644 --- a/packages/internal/src/__tests__/build_web.test.ts +++ b/packages/vite/src/build/__tests__/buildWeb.test.ts @@ -2,15 +2,14 @@ import path from 'path' import { beforeEach, test, expect, afterAll } from 'vitest' -import { prebuildWebFile } from '@redwoodjs/babel-config' +import { findWebFiles } from '@redwoodjs/internal/dist/files.js' import { ensurePosixPath, getPaths } from '@redwoodjs/project-config' -import { prebuildWebFiles, cleanWebBuild } from '../build/web' -import { findWebFiles } from '../files' +import { prebuildWebFiles, prebuildWebFile, cleanWebBuild } from '../build.js' const FIXTURE_PATH = path.resolve( __dirname, - '../../../../__fixtures__/example-todo-main', + '../../../../../__fixtures__/example-todo-main', ) const cleanPaths = (p) => { @@ -27,20 +26,20 @@ afterAll(() => { test('web files are prebuilt (no prerender)', async () => { const webFiles = findWebFiles() - const prebuiltFiles = prebuildWebFiles(webFiles) + const prebuiltFiles = await prebuildWebFiles(webFiles, { + forJest: true, + }) const relativePaths = prebuiltFiles .filter((x) => typeof x !== 'undefined') .map(cleanPaths) + .sort() + // Builds non-nested functions expect(relativePaths).toMatchInlineSnapshot(` [ ".redwood/prebuild/web/src/App.js", ".redwood/prebuild/web/src/Routes.js", - ".redwood/prebuild/web/src/graphql/fragment-masking.js", - ".redwood/prebuild/web/src/graphql/gql.js", - ".redwood/prebuild/web/src/graphql/graphql.js", - ".redwood/prebuild/web/src/graphql/index.js", ".redwood/prebuild/web/src/components/AddTodo/AddTodo.js", ".redwood/prebuild/web/src/components/AddTodoControl/AddTodoControl.js", ".redwood/prebuild/web/src/components/Check/Check.js", @@ -49,6 +48,10 @@ test('web files are prebuilt (no prerender)', async () => { ".redwood/prebuild/web/src/components/TableCell/TableCell.js", ".redwood/prebuild/web/src/components/TodoItem/TodoItem.js", ".redwood/prebuild/web/src/components/TodoListCell/TodoListCell.tsx", + ".redwood/prebuild/web/src/graphql/fragment-masking.js", + ".redwood/prebuild/web/src/graphql/gql.js", + ".redwood/prebuild/web/src/graphql/graphql.js", + ".redwood/prebuild/web/src/graphql/index.js", ".redwood/prebuild/web/src/layouts/SetLayout/SetLayout.js", ".redwood/prebuild/web/src/pages/BarPage/BarPage.tsx", ".redwood/prebuild/web/src/pages/FatalErrorPage/FatalErrorPage.js", @@ -62,13 +65,14 @@ test('web files are prebuilt (no prerender)', async () => { `) }) -test('Check routes are imported with require when staticImports flag is enabled', () => { +test('Check routes are imported with require when staticImports flag is enabled', async () => { const routesFile = getPaths().web.routes - const prerendered = prebuildWebFile(routesFile, { + const built = await prebuildWebFile(routesFile, { forPrerender: true, forJest: true, - })?.code + }) + const prerendered = built?.code /* Check that imports have the form `const HomePage = { @@ -90,12 +94,13 @@ test('Check routes are imported with require when staticImports flag is enabled' ) }) -test('Check routes are imported with "import" when staticImports flag is NOT passed', () => { +test('Check routes are imported with "import" when staticImports flag is NOT passed', async () => { const routesFile = getPaths().web.routes - const withoutStaticImports = prebuildWebFile(routesFile, { + const built = await prebuildWebFile(routesFile, { forJest: true, - })?.code + }) + const withoutStaticImports = built?.code /* Check that imports have the form `const HomePage = { @@ -108,12 +113,7 @@ test('Check routes are imported with "import" when staticImports flag is NOT pas /* πŸ‘‡ Foo page is an explicitly imported page, so it should - var _FooPage = _interopRequireDefault(require(\\"./pages/FooPage/FooPage\\")) - (inverse of the static imports one) - . - . - . - page: _FooPage[\\"default\\"], + import FooPage from "..."; */ expect(withoutStaticImports).not.toContain(`const FooPage = {`) expect(withoutStaticImports).toContain( diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/redwood.toml b/packages/vite/src/build/__tests__/fixtures/nestedPages/redwood.toml similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/redwood.toml rename to packages/vite/src/build/__tests__/fixtures/nestedPages/redwood.toml diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/Routes.js b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/Routes.js similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/Routes.js rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/Routes.js diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/auth.ts b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/auth.ts similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/auth.ts rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/auth.ts diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/index.html b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/index.html similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/index.html rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/index.html diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/layouts/AdminLayout/AdminLayout.tsx b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/layouts/AdminLayout/AdminLayout.tsx similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/layouts/AdminLayout/AdminLayout.tsx rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/layouts/AdminLayout/AdminLayout.tsx diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/layouts/MainLayout/MainLayout.tsx b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/layouts/MainLayout/MainLayout.tsx similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/layouts/MainLayout/MainLayout.tsx rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/layouts/MainLayout/MainLayout.tsx diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/layouts/ShowcaseLayout/ShowcaseLayout.tsx b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/layouts/ShowcaseLayout/ShowcaseLayout.tsx similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/layouts/ShowcaseLayout/ShowcaseLayout.tsx rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/layouts/ShowcaseLayout/ShowcaseLayout.tsx diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Admin/User/EditUserPage/EditUserPage.tsx b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Admin/User/EditUserPage/EditUserPage.tsx similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Admin/User/EditUserPage/EditUserPage.tsx rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Admin/User/EditUserPage/EditUserPage.tsx diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Admin/User/NewUserPage/NewUserPage.tsx b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Admin/User/NewUserPage/NewUserPage.tsx similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Admin/User/NewUserPage/NewUserPage.tsx rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Admin/User/NewUserPage/NewUserPage.tsx diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Admin/User/UserPage/UserPage.tsx b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Admin/User/UserPage/UserPage.tsx similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Admin/User/UserPage/UserPage.tsx rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Admin/User/UserPage/UserPage.tsx diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Admin/User/UsersPage/UsersPage.tsx b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Admin/User/UsersPage/UsersPage.tsx similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Admin/User/UsersPage/UsersPage.tsx rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Admin/User/UsersPage/UsersPage.tsx diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/FatalErrorPage/FatalErrorPage.tsx b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/FatalErrorPage/FatalErrorPage.tsx similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/FatalErrorPage/FatalErrorPage.tsx rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/FatalErrorPage/FatalErrorPage.tsx diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/ForgotPasswordPage/ForgotPasswordPage.js b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/ForgotPasswordPage/ForgotPasswordPage.js similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/ForgotPasswordPage/ForgotPasswordPage.js rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/ForgotPasswordPage/ForgotPasswordPage.js diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/HomePage/HomePage.js b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/HomePage/HomePage.js similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/HomePage/HomePage.js rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/HomePage/HomePage.js diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/HomePage/HomePage.stories.js b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/HomePage/HomePage.stories.js similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/HomePage/HomePage.stories.js rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/HomePage/HomePage.stories.js diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/HomePage/HomePage.test.js b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/HomePage/HomePage.test.js similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/HomePage/HomePage.test.js rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/HomePage/HomePage.test.js diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Jobs/AllJobProfilesPage/AllJobProfilesPage.tsx b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Jobs/AllJobProfilesPage/AllJobProfilesPage.tsx similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Jobs/AllJobProfilesPage/AllJobProfilesPage.tsx rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Jobs/AllJobProfilesPage/AllJobProfilesPage.tsx diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Jobs/AllJobsPage/AllJobsPage.tsx b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Jobs/AllJobsPage/AllJobsPage.tsx similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Jobs/AllJobsPage/AllJobsPage.tsx rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Jobs/AllJobsPage/AllJobsPage.tsx diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Jobs/EditJobPage/EditJobPage.tsx b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Jobs/EditJobPage/EditJobPage.tsx similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Jobs/EditJobPage/EditJobPage.tsx rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Jobs/EditJobPage/EditJobPage.tsx diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Jobs/EditJobProfilePage/EditJobProfilePage.tsx b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Jobs/EditJobProfilePage/EditJobProfilePage.tsx similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Jobs/EditJobProfilePage/EditJobProfilePage.tsx rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Jobs/EditJobProfilePage/EditJobProfilePage.tsx diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Jobs/JobPage/JobPage.tsx b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Jobs/JobPage/JobPage.tsx similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Jobs/JobPage/JobPage.tsx rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Jobs/JobPage/JobPage.tsx diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Jobs/JobProfilePage/JobProfilePage.tsx b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Jobs/JobProfilePage/JobProfilePage.tsx similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Jobs/JobProfilePage/JobProfilePage.tsx rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Jobs/JobProfilePage/JobProfilePage.tsx diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Jobs/JobsPage/JobsPage.tsx b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Jobs/JobsPage/JobsPage.tsx similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Jobs/JobsPage/JobsPage.tsx rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Jobs/JobsPage/JobsPage.tsx diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Jobs/NewJobPage/NewJobPage.tsx b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Jobs/NewJobPage/NewJobPage.tsx similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Jobs/NewJobPage/NewJobPage.tsx rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Jobs/NewJobPage/NewJobPage.tsx diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Jobs/NewJobProfilePage/NewJobProfilePage.tsx b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Jobs/NewJobProfilePage/NewJobProfilePage.tsx similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/Jobs/NewJobProfilePage/NewJobProfilePage.tsx rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/Jobs/NewJobProfilePage/NewJobProfilePage.tsx diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/LoginPage/LoginPage.js b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/LoginPage/LoginPage.js similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/LoginPage/LoginPage.js rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/LoginPage/LoginPage.js diff --git a/packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/NotFoundPage/NotFoundPage.js b/packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/NotFoundPage/NotFoundPage.js similarity index 100% rename from packages/vite/src/__tests__/fixtures/nestedPages/web/src/pages/NotFoundPage/NotFoundPage.js rename to packages/vite/src/build/__tests__/fixtures/nestedPages/web/src/pages/NotFoundPage/NotFoundPage.js diff --git a/packages/vite/src/__tests__/viteNestedPages.test.mts b/packages/vite/src/build/__tests__/nestedPages.test.ts similarity index 53% rename from packages/vite/src/__tests__/viteNestedPages.test.mts rename to packages/vite/src/build/__tests__/nestedPages.test.ts index 983ec22b3d3c..2f280d3ffd2b 100644 --- a/packages/vite/src/__tests__/viteNestedPages.test.mts +++ b/packages/vite/src/build/__tests__/nestedPages.test.ts @@ -2,41 +2,20 @@ import fs from 'node:fs' import path from 'node:path' import { fileURLToPath } from 'url' -import { transformWithEsbuild } from 'vite' -import { test, describe, beforeEach, afterAll, beforeAll, it, expect, vi } from 'vitest' - -import * as babel from '@babel/core' -import { getPaths } from '@redwoodjs/project-config' - import { - Flags, - getWebSideDefaultBabelConfig, -} from '@redwoodjs/babel-config' - -async function vitePrebuildWebFile( - srcPath: string, - flags: Flags = {} -) { - const code = await transform(srcPath) - const config = getWebSideDefaultBabelConfig(flags) - const result = babel.transform(code, { - ...config, - cwd: getPaths().web.base, - filename: srcPath, - }) - - return result -} + test, + describe, + beforeEach, + afterAll, + beforeAll, + it, + expect, + vi, +} from 'vitest' -async function transform(srcPath: string) { - const code = fs.readFileSync(srcPath, 'utf-8') - - const transformed = await transformWithEsbuild(code, srcPath, { - loader: 'jsx', - }) +import { getPaths } from '@redwoodjs/project-config' - return transformed.code -} +import { transform, prebuildWebFile } from '../build.js' const __filename = fileURLToPath(import.meta.url) const __dirname = path.dirname(__filename) @@ -50,11 +29,11 @@ test('transform', async () => { const transformed = await transform('Router.jsx') expect(transformed).toEqual( - '/* @__PURE__ */ React.createElement(Router, null, /* @__PURE__ */ React.createElement(Route, { path: "/", page: HomePage, name: "home" }));\n' + '/* @__PURE__ */ React.createElement(Router, null, /* @__PURE__ */ React.createElement(Route, { path: "/", page: HomePage, name: "home" }));\n', ) }) -describe('User specified imports, with static imports', () => { +describe('Nested pages transforms', () => { let outputWithStaticImports: string | null | undefined let outputNoStaticImports: string | null | undefined @@ -70,72 +49,112 @@ describe('User specified imports, with static imports', () => { process.env.RWJS_CWD = FIXTURE_PATH const routesFile = getPaths().web.routes - const prerenderResult = await vitePrebuildWebFile(routesFile, { + const prerenderResult = await prebuildWebFile(routesFile, { forPrerender: true, forJest: true, - forVite: true, }) outputWithStaticImports = prerenderResult?.code - const buildResult = await vitePrebuildWebFile(routesFile, { + const buildResult = await prebuildWebFile(routesFile, { + // If we don't set forJest, this is simulating a vite build + // @MARK: How did we manage to compile JSX without presets before? forJest: true, - forVite: true, }) outputNoStaticImports = buildResult?.code }) it('Imports layouts correctly', () => { // Note avoid checking the full require path because windows paths have unusual slashes - expect(outputWithStaticImports).toContain('import AdminLayout from "') - expect(outputWithStaticImports).toContain('import MainLayout from "') + expect(outputWithStaticImports).toContain( + 'var _AdminLayout = _interopRequireDefault(require(', + ) + expect(outputWithStaticImports).toContain( + 'var _MainLayout = _interopRequireDefault(require(', + ) - expect(outputNoStaticImports).toContain('import AdminLayout from "') - expect(outputNoStaticImports).toContain('import MainLayout from "') + expect(outputNoStaticImports).toContain( + 'var _AdminLayout = _interopRequireDefault(require(', + ) + expect(outputNoStaticImports).toContain( + 'var _MainLayout = _interopRequireDefault(require(', + ) }) + it('Handles when imports from a page include non-default imports too', () => { + // Because we import import EditJobPage, πŸ‘‰ { NonDefaultExport } from 'src/pages/Jobs/EditJobPage' + + expect(outputWithStaticImports).toContain('var _EditJobPage = require(') + expect(outputWithStaticImports).toContain( + 'console.log(_EditJobPage.NonDefaultExport)', + ) + + expect(outputWithStaticImports).toContain(`const EditJobPage = { + name: "EditJobPage", + prerenderLoader: name => require("./pages/Jobs/EditJobPage/EditJobPage"), + LazyComponent: (0, _react.lazy)(() => import("./pages/Jobs/EditJobPage/EditJobPage")) +};`) + + // Check that NonDefaultExport is still imported + expect(outputNoStaticImports).toContain( + 'var _EditJobPage = _interopRequireWildcard', + ) + expect(outputNoStaticImports).toContain( + 'console.log(_EditJobPage.NonDefaultExport)', + ) + + expect(outputNoStaticImports) + .toContain(`(0, _jsxRuntime.jsx)(_router.Route, { + path: "/jobs/{id:Int}/edit", + page: _EditJobPage["default"], + name: "editJob"`) + + // Should not generate a loader, because page was explicitly imported + // @TODO check this again + expect(outputNoStaticImports).not.toMatch( + /import\(.*"\.\/pages\/Jobs\/EditJobPage\/EditJobPage"\)/, + ) + }) + + // LoginPage and HomePage not imported in Routes.js describe('pages without explicit import', () => { - describe('static prerender imports', () => { - it('Adds loaders for non-nested pages', () => { - expect(outputWithStaticImports).toContain( - `const LoginPage = { + it('Adds loaders for non-nested pages', () => { + expect(outputWithStaticImports).toContain( + `const LoginPage = { name: "LoginPage", prerenderLoader: name => require("./pages/LoginPage/LoginPage"), - LazyComponent: lazy(() => import( /* webpackChunkName: "LoginPage" */"./pages/LoginPage/LoginPage")) -}` - ) + LazyComponent: (0, _react.lazy)(() => import("./pages/LoginPage/LoginPage")) +}`, + ) - expect(outputWithStaticImports).toContain( - `const HomePage = { + expect(outputWithStaticImports).toContain( + `const HomePage = { name: "HomePage", prerenderLoader: name => require("./pages/HomePage/HomePage"), - LazyComponent: lazy(() => import( /* webpackChunkName: "HomePage" */"./pages/HomePage/HomePage")) -}` - ) - }) + LazyComponent: (0, _react.lazy)(() => import("./pages/HomePage/HomePage")) +}`, + ) }) - describe('dynamic build imports', () => { - it('Adds loaders for non-nested pages that reads from globalThis in prerenderLoader', () => { - expect(outputNoStaticImports).toContain( - `const LoginPage = { + it('dynamic build imports: Adds loaders for non-nested pages that reads from globalThis in prerenderLoader', () => { + expect(outputNoStaticImports).toContain( + `const LoginPage = { name: "LoginPage", prerenderLoader: name => ({ default: globalThis.__REDWOOD__PRERENDER_PAGES[name] }), - LazyComponent: lazy(() => import( /* webpackChunkName: "LoginPage" */"./pages/LoginPage/LoginPage")) -}` - ) + LazyComponent: (0, _react.lazy)(() => import("./pages/LoginPage/LoginPage")) +}`, + ) - expect(outputNoStaticImports).toContain( - `const HomePage = { + expect(outputNoStaticImports).toContain( + `const HomePage = { name: "HomePage", prerenderLoader: name => ({ default: globalThis.__REDWOOD__PRERENDER_PAGES[name] }), - LazyComponent: lazy(() => import( /* webpackChunkName: "HomePage" */"./pages/HomePage/HomePage")) -}` - ) - }) + LazyComponent: (0, _react.lazy)(() => import("./pages/HomePage/HomePage")) +}`, + ) }) }) @@ -147,8 +166,8 @@ describe('User specified imports, with static imports', () => { `const NewJobPage = { name: "NewJobPage", prerenderLoader: name => require("./pages/Jobs/NewJobPage/NewJobPage"), - LazyComponent: lazy(() => import( /* webpackChunkName: "NewJobPage" */"./pages/Jobs/NewJobPage/NewJobPage")) -}` + LazyComponent: (0, _react.lazy)(() => import("./pages/Jobs/NewJobPage/NewJobPage")) +}`, ) }) @@ -158,28 +177,29 @@ describe('User specified imports, with static imports', () => { `const BazingaJobProfilePageWithFunnyName = { name: "BazingaJobProfilePageWithFunnyName", prerenderLoader: name => require("./pages/Jobs/JobProfilePage/JobProfilePage"), - LazyComponent: lazy(() => import( /* webpackChunkName: "BazingaJobProfilePageWithFunnyName" */"./pages/Jobs/JobProfilePage/JobProfilePage")) -}` + LazyComponent: (0, _react.lazy)(() => import("./pages/Jobs/JobProfilePage/JobProfilePage")) +}`, ) }) it('Removes explicit imports when prerendering', () => { expect(outputWithStaticImports).not.toContain( - `var _NewJobPage = _interopRequireDefault` + `var _NewJobPage = _interopRequireDefault`, ) expect(outputWithStaticImports).not.toContain( - `var _JobProfilePage = _interopRequireDefault` + `var _JobProfilePage = _interopRequireDefault`, ) }) it('Keeps using the user specified name when generating React component', () => { // Generate react component still uses the user specified name - expect(outputWithStaticImports).toContain(`React.createElement(Route, { - path: "/job-profiles/{id:Int}", - page: BazingaJobProfilePageWithFunnyName, - name: "jobProfile" - })`) + expect(outputWithStaticImports) + .toContain(`(0, _jsxRuntime.jsx)(_router.Route, { + path: "/job-profiles/{id:Int}", + page: BazingaJobProfilePageWithFunnyName, + name: "jobProfile" + })`) }) }) @@ -187,13 +207,16 @@ describe('User specified imports, with static imports', () => { it('Directly uses the import when page is explicitly imported', () => { // Explicit import uses the specified import // Has statement: import BazingaJobProfilePageWithFunnyName from 'src/pages/Jobs/JobProfilePage' - // The name of the import is not important without static imports - // Webpack will generate a name. Vite will use the name in the import statement - expect(outputNoStaticImports).toContain(`React.createElement(Route, { - path: "/job-profiles/{id:Int}", - page: BazingaJobProfilePageWithFunnyName, - name: "jobProfile" - })`) + + // @MARK: am not sure this is correct + // Double check please! + + expect(outputNoStaticImports) + .toContain(`(0, _jsxRuntime.jsx)(_router.Route, { + path: "/job-profiles/{id:Int}", + page: _JobProfilePage["default"], + name: "jobProfile" + })`) }) it("Uses the LazyComponent for a page that isn't imported", () => { @@ -202,13 +225,14 @@ describe('User specified imports, with static imports', () => { prerenderLoader: name => ({ default: globalThis.__REDWOOD__PRERENDER_PAGES[name] }), - LazyComponent: lazy(() => import( /* webpackChunkName: "HomePage" */"./pages/HomePage/HomePage")) + LazyComponent: (0, _react.lazy)(() => import("./pages/HomePage/HomePage")) }`) - expect(outputNoStaticImports).toContain(`React.createElement(Route, { - path: "/", - page: HomePage, - name: "home" - })`) + expect(outputNoStaticImports) + .toContain(`(0, _jsxRuntime.jsx)(_router.Route, { + path: "/", + page: HomePage, + name: "home" + })`) }) it('Should NOT add a LazyComponent for pages that have been explicitly loaded', () => { @@ -218,40 +242,13 @@ describe('User specified imports, with static imports', () => { expect(outputNoStaticImports).not.toContain(`const JobsNewJobPage = { name: "JobsNewJobPage"`) - expect(outputNoStaticImports).toContain(`React.createElement(Route, { - path: "/jobs", - page: JobsPage, - name: "jobs" - })`) + expect(outputNoStaticImports) + .toContain(`(0, _jsxRuntime.jsx)(_router.Route, { + path: "/jobs", + page: _JobsPage["default"], + name: "jobs" + })`) }) }) }) - - it('Handles when imports from a page include non-default imports too', () => { - // Because we import import EditJobPage, πŸ‘‰ { NonDefaultExport } from 'src/pages/Jobs/EditJobPage' - - expect(outputWithStaticImports).toContain( - 'import { NonDefaultExport } from "' - ) - - expect(outputWithStaticImports).toContain(`const EditJobPage = { - name: "EditJobPage", - prerenderLoader: name => require("./pages/Jobs/EditJobPage/EditJobPage"), - LazyComponent: lazy(() => import( /* webpackChunkName: "EditJobPage" */"./pages/Jobs/EditJobPage/EditJobPage")) -}`) - - expect(outputNoStaticImports).toContain( - 'import EditJobPage, { NonDefaultExport } from "' - ) - - expect(outputNoStaticImports).toContain(`React.createElement(Route, { - path: "/jobs/{id:Int}/edit", - page: EditJobPage, - name: "editJob"`) - - // Should not generate a loader, because page was explicitly imported - expect(outputNoStaticImports).not.toMatch( - /import\(.*"\.\/pages\/Jobs\/EditJobPage\/EditJobPage"\)/ - ) - }) }) diff --git a/packages/vite/src/build/build.ts b/packages/vite/src/build/build.ts new file mode 100644 index 000000000000..666229448fcc --- /dev/null +++ b/packages/vite/src/build/build.ts @@ -0,0 +1,106 @@ +import fs from 'node:fs' +import path from 'node:path' + +import * as babel from '@babel/core' +import fse from 'fs-extra' +import { transformWithEsbuild } from 'vite' + +import type { Flags } from '@redwoodjs/babel-config' +import { getWebSideDefaultBabelConfig } from '@redwoodjs/babel-config' +import { getPaths } from '@redwoodjs/project-config' + +export const cleanWebBuild = () => { + const rwjsPaths = getPaths() + fse.removeSync(rwjsPaths.web.dist) + fse.removeSync(path.join(rwjsPaths.generated.prebuild, 'web')) +} + +export async function prebuildWebFile(srcPath: string, flags: Flags = {}) { + const code = fs.readFileSync(srcPath, 'utf-8') + const config = getWebSideDefaultBabelConfig(flags) + const result = babel.transform(code, { + ...config, + cwd: getPaths().web.base, + filename: srcPath, + }) + + return result +} + +export async function transform(srcPath: string) { + const code = fs.readFileSync(srcPath, 'utf-8') + + const loader = path.extname(srcPath).match(/^\.m?ts/) ? 'tsx' : 'jsx' + const transformed = await transformWithEsbuild(code, srcPath, { + loader, + }) + + return transformed.code +} + +/** + * Remove RedwoodJS "magic" from a user's code leaving JavaScript behind. + * + * Currently only used for debugging purposes + */ +export const prebuildWebFiles = async (srcFiles: string[], flags?: Flags) => { + const rwjsPaths = getPaths() + + const processFile = async (srcPath: string) => { + const relativePathFromSrc = path.relative(rwjsPaths.base, srcPath) + const dstPath = path + .join(rwjsPaths.generated.prebuild, relativePathFromSrc) + .replace(/\.(ts)$/, '.js') + + try { + const result = await prebuildWebFile(srcPath, flags) + if (!result?.code) { + throw new Error('No code returned from prebuildWebFile') + } + + fs.mkdirSync(path.dirname(dstPath), { recursive: true }) + fs.writeFileSync(dstPath, result.code) + } catch (_error) { + console.warn('Error:', srcPath, 'could not prebuilt.') + return undefined + } + + return dstPath + } + + const promises = [] + for (const srcPath of srcFiles) { + promises.push(processFile(srcPath)) + } + return await Promise.all(promises) +} + +interface BuildOptions { + verbose?: boolean +} + +/** + * Builds the web side with Vite, but not used in the buildHandler currently + * because we want to set the process.cwd to web.base + */ +export const buildWeb = async ({ verbose }: BuildOptions) => { + // @NOTE: Using dynamic import, because vite is still opt-in + const { build } = await import('vite') + const viteConfig = getPaths().web.viteConfig + + if (process.cwd() !== getPaths().web.base) { + throw new Error( + 'Looks like you are running the command from the wrong dir, this can lead to unintended consequences on CSS processing', + ) + } + + if (!viteConfig) { + throw new Error('Could not locate your web/vite.config.{js,ts} file') + } + + return build({ + configFile: viteConfig, + envFile: false, + logLevel: verbose ? 'info' : 'warn', + }) +} diff --git a/packages/vite/src/buildFeServer.ts b/packages/vite/src/buildFeServer.ts index 0b147bd77318..2639cdbc98d6 100644 --- a/packages/vite/src/buildFeServer.ts +++ b/packages/vite/src/buildFeServer.ts @@ -1,6 +1,6 @@ -import { buildWeb } from '@redwoodjs/internal/dist/build/web.js' import { getConfig, getPaths } from '@redwoodjs/project-config' +import { buildWeb } from './build/build.js' import { buildRouteHooks } from './buildRouteHooks.js' import { buildRouteManifest } from './buildRouteManifest.js' import { buildRscClientAndServer } from './buildRscClientAndServer.js' diff --git a/packages/vite/src/index.ts b/packages/vite/src/index.ts index 386848f6f9ab..9e47b57c0fce 100644 --- a/packages/vite/src/index.ts +++ b/packages/vite/src/index.ts @@ -152,7 +152,6 @@ export default function redwoodPluginVite(): PluginOption[] { react({ babel: { ...getWebSideDefaultBabelConfig({ - forVite: true, forRsc: rscEnabled, }), }, diff --git a/packages/vite/src/lib/envVarDefinitions.ts b/packages/vite/src/lib/envVarDefinitions.ts index 8a12d7b9eaf5..490690ce58d4 100644 --- a/packages/vite/src/lib/envVarDefinitions.ts +++ b/packages/vite/src/lib/envVarDefinitions.ts @@ -8,7 +8,6 @@ export function getEnvVarDefinitions() { return { RWJS_ENV: { - // @NOTE we're avoiding process.env here, unlike webpack RWJS_API_GRAPHQL_URL: rwConfig.web.apiGraphQLUrl ?? rwConfig.web.apiUrl + '/graphql', RWJS_API_URL: rwConfig.web.apiUrl, diff --git a/packages/vite/src/lib/registerFwGlobalsAndShims.ts b/packages/vite/src/lib/registerFwGlobalsAndShims.ts index 10b63aebce6d..eec59c07d57b 100644 --- a/packages/vite/src/lib/registerFwGlobalsAndShims.ts +++ b/packages/vite/src/lib/registerFwGlobalsAndShims.ts @@ -22,7 +22,6 @@ function registerFwGlobals() { const rwPaths = getPaths() globalThis.RWJS_ENV = { - // @NOTE we're avoiding process.env here, unlike webpack RWJS_API_GRAPHQL_URL: rwConfig.web.apiGraphQLUrl ?? rwConfig.web.apiUrl + '/graphql', RWJS_API_URL: rwConfig.web.apiUrl, diff --git a/packages/web/ambient.d.ts b/packages/web/ambient.d.ts index 992775f1cce1..fb3c8fce9f89 100644 --- a/packages/web/ambient.d.ts +++ b/packages/web/ambient.d.ts @@ -8,7 +8,7 @@ declare global { var __REDWOOD__APP_TITLE: string var __REDWOOD__APOLLO_STATE: NormalizedCacheObject - // Provided by Vite.config, or Webpack in the user's project + // Provided by Vite.config var RWJS_ENV: { RWJS_API_GRAPHQL_URL: string /** URL or absolute path to serverless functions */ diff --git a/packages/web/package.json b/packages/web/package.json index bd44ef560960..093030bf2314 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -17,8 +17,7 @@ "rw": "./dist/cjs/bins/redwood.js", "rwfw": "./dist/cjs/bins/rwfw.js", "storybook": "./dist/cjs/bins/storybook.js", - "tsc": "./dist/cjs/bins/tsc.js", - "webpack": "./dist/cjs/bins/webpack.js" + "tsc": "./dist/cjs/bins/tsc.js" }, "exports": { ".": { diff --git a/packages/web/src/bins/webpack.ts b/packages/web/src/bins/webpack.ts deleted file mode 100644 index 000cd7246bcf..000000000000 --- a/packages/web/src/bins/webpack.ts +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env node -import { createRequire } from 'module' - -const requireFromWebpack = createRequire( - require.resolve('webpack/package.json'), -) - -const bins = requireFromWebpack('./package.json')['bin'] - -requireFromWebpack(`./${bins['webpack']}`) diff --git a/packages/web/src/components/DevFatalErrorPage.tsx b/packages/web/src/components/DevFatalErrorPage.tsx index 236bb7d84d3a..4b7ef8ca57d7 100644 --- a/packages/web/src/components/DevFatalErrorPage.tsx +++ b/packages/web/src/components/DevFatalErrorPage.tsx @@ -8,7 +8,7 @@ import React, { useState } from 'react' import type { GraphQLError } from 'graphql' import StackTracey from 'stacktracey' -// RWJS_SRC_ROOT is defined and defaulted in webpack+vite to the base path +// RWJS_SRC_ROOT is defined and defaulted in vite to the base path let srcRoot = '' if (typeof RWJS_DEBUG_ENV !== 'undefined') { srcRoot = RWJS_DEBUG_ENV?.RWJS_SRC_ROOT @@ -213,7 +213,7 @@ function StackEntry({ function toVSCodeURL(entry: StackTracey.Entry) { // To account for folks using vscode-insiders etc - // This is defined by webpack and vite from .env + // This is defined by vite from .env const scheme = RWJS_DEBUG_ENV.REDWOOD_ENV_EDITOR || 'vscode' return `${scheme}://file/${entry.fileShort}:${entry.line}:${entry.column}` } diff --git a/packages/web/src/config.ts b/packages/web/src/config.ts index 59f3fb10493f..59d21de33d80 100644 --- a/packages/web/src/config.ts +++ b/packages/web/src/config.ts @@ -1,12 +1,11 @@ // RWJS_ENV and RWJS_DEBUG_ENV -// are defined in Webpack.common.js and Vite.config.js +// are defined in Vite.config.js // Note: These lines are useful during RSC/SSR development but will execute for all projects, even those without RSC/SSR // console.log('config.ts') // console.log('config.ts', RWJS_ENV) // console.log('config.ts') -// @NOTE: do not use globalThis on the right side, because webpack cannot access these vars then globalThis.RWJS_API_GRAPHQL_URL = RWJS_ENV.RWJS_API_GRAPHQL_URL as string globalThis.RWJS_API_URL = RWJS_ENV.RWJS_API_URL as string globalThis.__REDWOOD__APP_TITLE = RWJS_ENV.__REDWOOD__APP_TITLE as string diff --git a/tasks/run-e2e b/tasks/run-e2e index e162069068fd..73dcafec914c 100755 --- a/tasks/run-e2e +++ b/tasks/run-e2e @@ -49,7 +49,7 @@ const buildRedwoodFramework = () => { } } -const createRedwoodJSApp = ({ typescript, bundler }) => { +const createRedwoodJSApp = ({ typescript }) => { try { execa.sync( 'yarn node dist/create-redwood-app.js', @@ -98,18 +98,6 @@ const createRedwoodJSApp = ({ typescript, bundler }) => { } fs.writeFileSync(packageJSONPath, JSON.stringify(packageJSON, null, 2)) - - if (bundler === 'webpack') { - const redwoodTOMLPath = path.join( - REDWOOD_PROJECT_DIRECTORY, - 'redwood.toml', - ) - const redwoodTOML = fs.readFileSync(redwoodTOMLPath, 'utf-8') - fs.writeFileSync( - redwoodTOMLPath, - redwoodTOML.replace('[web]\n', '[web]\n bundler = "webpack"\n'), - ) - } } catch (e) { if (e.signal !== 'SIGINT') { console.error('Error: Could not create Redwood Project') @@ -220,11 +208,6 @@ const args = yargs(hideBin(process.argv)) .option('typescript', { default: false, type: 'boolean', alias: 'ts' }) .option('auto-start', { default: true, type: 'boolean', alias: 'start' }) .option('clean-files', { default: true, type: 'boolean' }) - .option('bundler', { - default: 'vite', - type: 'string', - choices: ['vite', 'webpack'], - }) .scriptName('run-e2e') .example('run-e2e') .example('run-e2e /tmp/redwood-app --ts') @@ -253,13 +236,12 @@ let { copyFramework, createProject, typescript, - bundler, autoStart, cleanFiles, } = args const tasks = [ buildFramework && buildRedwoodFramework, - createProject && (() => createRedwoodJSApp({ typescript, bundler })), + createProject && (() => createRedwoodJSApp({ typescript })), copyFramework && runTarsync, // copyFramework && addFrameworkDepsToProject, // copyFramework && runYarnInstall, diff --git a/tasks/smoke-tests/storybook/playwright.config.ts b/tasks/smoke-tests/storybook/playwright.config.ts index 2138097df0c5..586f77dc3e7f 100644 --- a/tasks/smoke-tests/storybook/playwright.config.ts +++ b/tasks/smoke-tests/storybook/playwright.config.ts @@ -12,7 +12,7 @@ export default defineConfig({ // Run your local dev server before starting the tests webServer: { - command: 'yarn redwood storybook --ci --no-open', + command: 'yarn redwood storybook-vite --ci --no-open', cwd: process.env.REDWOOD_TEST_PROJECT_PATH, url: 'http://localhost:7910', reuseExistingServer: !process.env.CI, diff --git a/tasks/smoke-tests/storybook/tests/storybook.spec.ts b/tasks/smoke-tests/storybook/tests/storybook.spec.ts index 7703dc91df14..05a5736bcbe2 100644 --- a/tasks/smoke-tests/storybook/tests/storybook.spec.ts +++ b/tasks/smoke-tests/storybook/tests/storybook.spec.ts @@ -12,46 +12,48 @@ test('Loads Cell stories', async ({ page }: PlaywrightTestArgs) => { await page.getByRole('link', { name: 'Loading' }).click() await expect(page).toHaveURL( - `http://localhost:7910/?path=/story/cells-blogpostcell--loading` + `http://localhost:7910/?path=/story/cells-blogpostcell--loading`, ) await expect( - page.frameLocator('#storybook-preview-iframe').locator('body') - ).toContainText('Loading...') + page.frameLocator('#storybook-preview-iframe').locator('body'), + ).toContainText('Loading...', { + timeout: 15_000, + }) // Click text=Failure await page.locator('text=Failure').click() await expect(page).toHaveURL( - `http://localhost:7910/?path=/story/cells-blogpostcell--failure` + `http://localhost:7910/?path=/story/cells-blogpostcell--failure`, ) await expect( - page.frameLocator('#storybook-preview-iframe').locator('body') + page.frameLocator('#storybook-preview-iframe').locator('body'), ).toContainText('Error: Oh no') // Check Loading await page.locator('text=Empty').click() await expect(page).toHaveURL( - `http://localhost:7910/?path=/story/cells-blogpostcell--empty` + `http://localhost:7910/?path=/story/cells-blogpostcell--empty`, ) await expect( - page.frameLocator('#storybook-preview-iframe').locator('body') + page.frameLocator('#storybook-preview-iframe').locator('body'), ).toContainText('Empty') // Check Success // And make sure MSW Cell mocks are loaded as expected await page.locator('text=Success').click() await expect(page).toHaveURL( - `http://localhost:7910/?path=/story/cells-blogpostcell--success` + `http://localhost:7910/?path=/story/cells-blogpostcell--success`, ) await expect( - page.frameLocator('#storybook-preview-iframe').locator('body') + page.frameLocator('#storybook-preview-iframe').locator('body'), ).toContainText('Mocked title') await expect( - page.frameLocator('#storybook-preview-iframe').locator('body') + page.frameLocator('#storybook-preview-iframe').locator('body'), ).toContainText('Mocked body') }) @@ -65,15 +67,15 @@ test('Loads Cell mocks when Cell is nested in another story', async ({ // Click text=Empty await expect(page).toHaveURL( - `http://localhost:7910/?path=/story/pages-blogpostpage--primary` + `http://localhost:7910/?path=/story/pages-blogpostpage--primary`, ) await expect( - page.frameLocator('#storybook-preview-iframe').locator('body') + page.frameLocator('#storybook-preview-iframe').locator('body'), ).toContainText('Mocked title') await expect( - page.frameLocator('#storybook-preview-iframe').locator('body') + page.frameLocator('#storybook-preview-iframe').locator('body'), ).toContainText('Mocked body') }) @@ -82,7 +84,7 @@ test('Mocks current user, and updates UI while dev server is running', async ({ }: PlaywrightTestArgs) => { const profileStoryPath = path.join( process.env.REDWOOD_TEST_PROJECT_PATH as string, - 'web/src/pages/ProfilePage/ProfilePage.stories.tsx' + 'web/src/pages/ProfilePage/ProfilePage.stories.tsx', ) // Modify profile page stories to mockCurrentUser @@ -91,7 +93,7 @@ test('Mocks current user, and updates UI while dev server is running', async ({ if (!profilePageStoryContent.includes('mockCurrentUser')) { const contentWithMockCurrentUser = profilePageStoryContent.replace( 'export const Primary: Story = {}', - MOCK_CURRENT_USER_CONTENT + MOCK_CURRENT_USER_CONTENT, ) fs.writeFileSync(profileStoryPath, contentWithMockCurrentUser) @@ -119,21 +121,21 @@ test('Mocks current user, and updates UI while dev server is running', async ({ .frameLocator('#storybook-preview-iframe') .locator('*css=tr >> text=EMAIL') await expect(await usernameRow.innerHTML()).toBe( - 'EMAILba@zinga.com' + 'EMAILba@zinga.com', ) const isAuthenticatedRow = await page .frameLocator('#storybook-preview-iframe') .locator('*css=tr >> text=isAuthenticated') await expect(await isAuthenticatedRow.innerHTML()).toBe( - 'isAuthenticatedtrue' + 'isAuthenticatedtrue', ) const isAdminRow = await page .frameLocator('#storybook-preview-iframe') .locator('*css=tr >> text=Is Admin') await expect(await isAdminRow.innerHTML()).toBe( - 'Is Admintrue' + 'Is Admintrue', ) }) @@ -158,12 +160,12 @@ test('Loads MDX Stories', async ({ page }: PlaywrightTestArgs) => { await page.locator('id=redwood--docs').click() await expect(page).toHaveURL( - `http://localhost:7910/?path=/docs/redwood--docs` + `http://localhost:7910/?path=/docs/redwood--docs`, ) await expect( - page.frameLocator('#storybook-preview-iframe').locator('body') + page.frameLocator('#storybook-preview-iframe').locator('body'), ).toContainText( - 'Redwood is an opinionated, full-stack, JavaScript/TypeScript web application framework designed to keep you moving fast as your app grows from side project to startup.' + 'Redwood is an opinionated, full-stack, JavaScript/TypeScript web application framework designed to keep you moving fast as your app grows from side project to startup.', ) }) diff --git a/yarn.lock b/yarn.lock index 5b55bd1b0862..97d40b1add47 100644 --- a/yarn.lock +++ b/yarn.lock @@ -420,7 +420,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.7, @babel/code-frame@npm:^7.24.7": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.24.7": version: 7.24.7 resolution: "@babel/code-frame@npm:7.24.7" dependencies: @@ -2329,7 +2329,7 @@ __metadata: languageName: node linkType: hard -"@discoveryjs/json-ext@npm:0.5.7, @discoveryjs/json-ext@npm:^0.5.0, @discoveryjs/json-ext@npm:^0.5.3": +"@discoveryjs/json-ext@npm:^0.5.3": version: 0.5.7 resolution: "@discoveryjs/json-ext@npm:0.5.7" checksum: 10c0/e10f1b02b78e4812646ddf289b7d9f2cb567d336c363b266bd50cd223cf3de7c2c74018d91cd2613041568397ef3a4a2b500aba588c6e5bd78c38374ba68f38c @@ -5203,16 +5203,6 @@ __metadata: languageName: node linkType: hard -"@jridgewell/source-map@npm:^0.3.3": - version: 0.3.5 - resolution: "@jridgewell/source-map@npm:0.3.5" - dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.0" - "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: 10c0/b985d9ebd833a21a6e9ace820c8a76f60345a34d9e28d98497c16b6e93ce1f131bff0abd45f8585f14aa382cce678ed680d628c631b40a9616a19cfbc2049b68 - languageName: node - linkType: hard - "@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.13, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15": version: 1.4.15 resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" @@ -5230,7 +5220,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.20, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.9": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.25 resolution: "@jridgewell/trace-mapping@npm:0.3.25" dependencies: @@ -5293,13 +5283,6 @@ __metadata: languageName: node linkType: hard -"@leichtgewicht/ip-codec@npm:^2.0.1": - version: 2.0.4 - resolution: "@leichtgewicht/ip-codec@npm:2.0.4" - checksum: 10c0/3b0d8844d1d47c0a5ed7267c2964886adad3a642b85d06f95c148eeefd80cdabbd6aa0d63ccde8239967a2e9b6bb734a16bd57e1fda3d16bf56d50a7e7ec131b - languageName: node - linkType: hard - "@lerna/create@npm:8.1.3": version: 8.1.3 resolution: "@lerna/create@npm:8.1.3" @@ -6397,50 +6380,6 @@ __metadata: languageName: node linkType: hard -"@pmmmwh/react-refresh-webpack-plugin@npm:0.5.13, @pmmmwh/react-refresh-webpack-plugin@npm:^0.5.11": - version: 0.5.13 - resolution: "@pmmmwh/react-refresh-webpack-plugin@npm:0.5.13" - dependencies: - ansi-html-community: "npm:^0.0.8" - core-js-pure: "npm:^3.23.3" - error-stack-parser: "npm:^2.0.6" - html-entities: "npm:^2.1.0" - loader-utils: "npm:^2.0.4" - schema-utils: "npm:^3.0.0" - source-map: "npm:^0.7.3" - peerDependencies: - "@types/webpack": 4.x || 5.x - react-refresh: ">=0.10.0 <1.0.0" - sockjs-client: ^1.4.0 - type-fest: ">=0.17.0 <5.0.0" - webpack: ">=4.43.0 <6.0.0" - webpack-dev-server: 3.x || 4.x || 5.x - webpack-hot-middleware: 2.x - webpack-plugin-serve: 0.x || 1.x - peerDependenciesMeta: - "@types/webpack": - optional: true - sockjs-client: - optional: true - type-fest: - optional: true - webpack-dev-server: - optional: true - webpack-hot-middleware: - optional: true - webpack-plugin-serve: - optional: true - checksum: 10c0/2aa713ce0979bfe508fc8a4605eaf39be2ee8f3d8e53d0dd7af1eab1249c7782e95aa644938210c86a654570ea355659a228c150b3fde51f2831211be8e4a0cc - languageName: node - linkType: hard - -"@polka/url@npm:^1.0.0-next.20": - version: 1.0.0-next.21 - resolution: "@polka/url@npm:1.0.0-next.21" - checksum: 10c0/53c1f28683a075aac41f8ce2a54eb952b6bc67a03494b2dca1cb63d833a6da898cea6a92df8e1e6b680db985fb7f9c16e11c20afa6584bcdda68a16fb4c18737 - languageName: node - linkType: hard - "@prisma/client@npm:5.15.1": version: 5.15.1 resolution: "@prisma/client@npm:5.15.1" @@ -7961,29 +7900,6 @@ __metadata: languageName: unknown linkType: soft -"@redwoodjs/cli-storybook@workspace:packages/cli-packages/storybook": - version: 0.0.0-use.local - resolution: "@redwoodjs/cli-storybook@workspace:packages/cli-packages/storybook" - dependencies: - "@redwoodjs/cli-helpers": "workspace:*" - "@redwoodjs/framework-tools": "workspace:*" - "@redwoodjs/project-config": "workspace:*" - "@redwoodjs/telemetry": "workspace:*" - "@storybook/addon-a11y": "npm:7.6.17" - "@storybook/addon-docs": "npm:7.6.17" - "@storybook/addon-essentials": "npm:7.6.17" - "@storybook/react-webpack5": "npm:7.6.17" - "@types/yargs": "npm:17.0.32" - chalk: "npm:4.1.2" - execa: "npm:5.1.1" - storybook: "npm:7.6.17" - terminal-link: "npm:2.1.1" - tsx: "npm:4.15.6" - typescript: "npm:5.4.5" - yargs: "npm:17.7.2" - languageName: unknown - linkType: soft - "@redwoodjs/cli@workspace:*, @redwoodjs/cli@workspace:packages/cli": version: 0.0.0-use.local resolution: "@redwoodjs/cli@workspace:packages/cli" @@ -8126,7 +8042,6 @@ __metadata: dependencies: "@babel/cli": "npm:7.24.5" "@babel/runtime-corejs3": "npm:7.24.5" - "@pmmmwh/react-refresh-webpack-plugin": "npm:0.5.13" "@redwoodjs/cli": "workspace:*" "@redwoodjs/eslint-config": "workspace:*" "@redwoodjs/internal": "workspace:*" @@ -8135,14 +8050,9 @@ __metadata: "@redwoodjs/web-server": "workspace:*" "@types/lodash": "npm:4.17.5" babel-loader: "npm:^9.1.3" - copy-webpack-plugin: "npm:11.0.0" core-js: "npm:3.37.1" css-loader: "npm:6.11.0" - css-minimizer-webpack-plugin: "npm:5.0.1" - dotenv-webpack: "npm:8.1.0" graphql-tag: "npm:2.12.6" - html-webpack-plugin: "npm:5.6.0" - jest: "npm:29.7.0" lodash: "npm:4.17.21" mini-css-extract-plugin: "npm:2.9.0" nodemon: "npm:3.1.3" @@ -8153,13 +8063,6 @@ __metadata: style-loader: "npm:3.3.4" typescript: "npm:5.4.5" url-loader: "npm:4.1.1" - webpack: "npm:5.92.0" - webpack-bundle-analyzer: "npm:4.10.2" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:4.15.2" - webpack-manifest-plugin: "npm:5.0.0" - webpack-merge: "npm:5.10.0" - webpack-retry-chunk-load-plugin: "npm:3.1.1" bin: cross-env: ./dist/bins/cross-env.js eslint: ./dist/bins/eslint.js @@ -8702,8 +8605,6 @@ __metadata: "@types/babel-core": "npm:6.25.10" "@types/jest": "npm:29.5.12" "@types/node": "npm:20.12.12" - "@types/webpack": "npm:5.28.5" - "@types/webpack-env": "npm:1.18.5" babel-jest: "npm:^29.7.0" core-js: "npm:3.37.1" fast-glob: "npm:3.3.2" @@ -8753,6 +8654,7 @@ __metadata: "@types/busboy": "npm:^1" "@types/cookie": "npm:^0" "@types/express": "npm:4" + "@types/fs-extra": "npm:11.0.4" "@types/react": "npm:^18.2.55" "@types/yargs-parser": "npm:21.0.3" "@vitejs/plugin-react": "npm:4.2.1" @@ -8767,6 +8669,7 @@ __metadata: dotenv-defaults: "npm:5.0.2" express: "npm:4.19.2" find-my-way: "npm:8.2.0" + fs-extra: "npm:11.2.0" glob: "npm:10.3.15" http-proxy-middleware: "npm:2.0.6" isbot: "npm:5.1.9" @@ -8859,7 +8762,6 @@ __metadata: rwfw: ./dist/cjs/bins/rwfw.js storybook: ./dist/cjs/bins/storybook.js tsc: ./dist/cjs/bins/tsc.js - webpack: ./dist/cjs/bins/webpack.js languageName: unknown linkType: soft @@ -9229,16 +9131,6 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-a11y@npm:7.6.17": - version: 7.6.17 - resolution: "@storybook/addon-a11y@npm:7.6.17" - dependencies: - "@storybook/addon-highlight": "npm:7.6.17" - axe-core: "npm:^4.2.0" - checksum: 10c0/2784a9caea452eff3101605bf1fa5a7b992340ecc13d6edc7965fcfbf4d3b4249ede6d111e9d4a6cff1434064c9d3c3d65481ef68c9312dc8b46419217bf7725 - languageName: node - linkType: hard - "@storybook/addon-actions@npm:7.6.17": version: 7.6.17 resolution: "@storybook/addon-actions@npm:7.6.17" @@ -9469,55 +9361,6 @@ __metadata: languageName: node linkType: hard -"@storybook/builder-webpack5@npm:7.6.17": - version: 7.6.17 - resolution: "@storybook/builder-webpack5@npm:7.6.17" - dependencies: - "@babel/core": "npm:^7.23.2" - "@storybook/channels": "npm:7.6.17" - "@storybook/client-logger": "npm:7.6.17" - "@storybook/core-common": "npm:7.6.17" - "@storybook/core-events": "npm:7.6.17" - "@storybook/core-webpack": "npm:7.6.17" - "@storybook/node-logger": "npm:7.6.17" - "@storybook/preview": "npm:7.6.17" - "@storybook/preview-api": "npm:7.6.17" - "@swc/core": "npm:^1.3.82" - "@types/node": "npm:^18.0.0" - "@types/semver": "npm:^7.3.4" - babel-loader: "npm:^9.0.0" - browser-assert: "npm:^1.2.1" - case-sensitive-paths-webpack-plugin: "npm:^2.4.0" - cjs-module-lexer: "npm:^1.2.3" - constants-browserify: "npm:^1.0.0" - css-loader: "npm:^6.7.1" - es-module-lexer: "npm:^1.4.1" - express: "npm:^4.17.3" - fork-ts-checker-webpack-plugin: "npm:^8.0.0" - fs-extra: "npm:^11.1.0" - html-webpack-plugin: "npm:^5.5.0" - magic-string: "npm:^0.30.5" - path-browserify: "npm:^1.0.1" - process: "npm:^0.11.10" - semver: "npm:^7.3.7" - style-loader: "npm:^3.3.1" - swc-loader: "npm:^0.2.3" - terser-webpack-plugin: "npm:^5.3.1" - ts-dedent: "npm:^2.0.0" - url: "npm:^0.11.0" - util: "npm:^0.12.4" - util-deprecate: "npm:^1.0.2" - webpack: "npm:5" - webpack-dev-middleware: "npm:^6.1.1" - webpack-hot-middleware: "npm:^2.25.1" - webpack-virtual-modules: "npm:^0.5.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/5d5eb4cefb8e52119c3d0ef7f6b13557c00ebad80af8f35482bcd7d55ce50575d33dc12a66a0844f0171619174c7021489cfcf3b8cc128e0f05da6ff2b14e819 - languageName: node - linkType: hard - "@storybook/channels@npm:7.6.17": version: 7.6.17 resolution: "@storybook/channels@npm:7.6.17" @@ -9734,19 +9577,6 @@ __metadata: languageName: node linkType: hard -"@storybook/core-webpack@npm:7.6.17": - version: 7.6.17 - resolution: "@storybook/core-webpack@npm:7.6.17" - dependencies: - "@storybook/core-common": "npm:7.6.17" - "@storybook/node-logger": "npm:7.6.17" - "@storybook/types": "npm:7.6.17" - "@types/node": "npm:^18.0.0" - ts-dedent: "npm:^2.0.0" - checksum: 10c0/dad0817906effbd833939ed3cfdd9ae6e3fecd74b77e367f1c140f297ac20d551a609bde2363f8690649bee680ea5136bf2ee258e1034f4a30ff46d88ea1cf64 - languageName: node - linkType: hard - "@storybook/csf-plugin@npm:7.6.17": version: 7.6.17 resolution: "@storybook/csf-plugin@npm:7.6.17" @@ -9862,40 +9692,6 @@ __metadata: languageName: node linkType: hard -"@storybook/preset-react-webpack@npm:7.6.17": - version: 7.6.17 - resolution: "@storybook/preset-react-webpack@npm:7.6.17" - dependencies: - "@babel/preset-flow": "npm:^7.22.15" - "@babel/preset-react": "npm:^7.22.15" - "@pmmmwh/react-refresh-webpack-plugin": "npm:^0.5.11" - "@storybook/core-webpack": "npm:7.6.17" - "@storybook/docs-tools": "npm:7.6.17" - "@storybook/node-logger": "npm:7.6.17" - "@storybook/react": "npm:7.6.17" - "@storybook/react-docgen-typescript-plugin": "npm:1.0.6--canary.9.0c3f3b7.0" - "@types/node": "npm:^18.0.0" - "@types/semver": "npm:^7.3.4" - babel-plugin-add-react-displayname: "npm:^0.0.5" - fs-extra: "npm:^11.1.0" - magic-string: "npm:^0.30.5" - react-docgen: "npm:^7.0.0" - react-refresh: "npm:^0.14.0" - semver: "npm:^7.3.7" - webpack: "npm:5" - peerDependencies: - "@babel/core": ^7.22.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@babel/core": - optional: true - typescript: - optional: true - checksum: 10c0/092af3e2fed5fd17750dea11809981e9baa2d02f69f1fcc66da21e49aec006820ad72a45d53f96bdfee1c6481370c2a15d9bda626681d7ac09d2c22e7eb1e77d - languageName: node - linkType: hard - "@storybook/preview-api@npm:7.6.17": version: 7.6.17 resolution: "@storybook/preview-api@npm:7.6.17" @@ -9925,24 +9721,6 @@ __metadata: languageName: node linkType: hard -"@storybook/react-docgen-typescript-plugin@npm:1.0.6--canary.9.0c3f3b7.0": - version: 1.0.6--canary.9.0c3f3b7.0 - resolution: "@storybook/react-docgen-typescript-plugin@npm:1.0.6--canary.9.0c3f3b7.0" - dependencies: - debug: "npm:^4.1.1" - endent: "npm:^2.0.1" - find-cache-dir: "npm:^3.3.1" - flat-cache: "npm:^3.0.4" - micromatch: "npm:^4.0.2" - react-docgen-typescript: "npm:^2.2.2" - tslib: "npm:^2.0.0" - peerDependencies: - typescript: ">= 4.x" - webpack: ">= 4" - checksum: 10c0/505a728f36df3f519f4985bdf18f2078ea18a1a8f7f837fc831f971363fb7643a182f01a6857a9729ac5a1246d370526fca5a19017f82e7493af4ca945cb7235 - languageName: node - linkType: hard - "@storybook/react-dom-shim@https://verdaccio.tobbe.dev/@storybook/react-dom-shim/-/react-dom-shim-8.0.8.tgz": version: 8.0.8 resolution: "@storybook/react-dom-shim@https://verdaccio.tobbe.dev/@storybook/react-dom-shim/-/react-dom-shim-8.0.8.tgz" @@ -9953,28 +9731,6 @@ __metadata: languageName: node linkType: hard -"@storybook/react-webpack5@npm:7.6.17": - version: 7.6.17 - resolution: "@storybook/react-webpack5@npm:7.6.17" - dependencies: - "@storybook/builder-webpack5": "npm:7.6.17" - "@storybook/preset-react-webpack": "npm:7.6.17" - "@storybook/react": "npm:7.6.17" - "@types/node": "npm:^18.0.0" - peerDependencies: - "@babel/core": ^7.22.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - typescript: "*" - peerDependenciesMeta: - "@babel/core": - optional: true - typescript: - optional: true - checksum: 10c0/c95317c225fba4ae0cd93f3b602d758adb598dd8952ea0fee425809ba991086a0260a64eb3e6f815a8c99a877cc97af9a2d21862b178f4e0249818e3454d0193 - languageName: node - linkType: hard - "@storybook/react@npm:7.6.17": version: 7.6.17 resolution: "@storybook/react@npm:7.6.17" @@ -10345,7 +10101,7 @@ __metadata: languageName: node linkType: hard -"@swc/core@npm:1.5.27, @swc/core@npm:^1.3.82": +"@swc/core@npm:1.5.27": version: 1.5.27 resolution: "@swc/core@npm:1.5.27" dependencies: @@ -10511,13 +10267,6 @@ __metadata: languageName: node linkType: hard -"@trysound/sax@npm:0.2.0": - version: 0.2.0 - resolution: "@trysound/sax@npm:0.2.0" - checksum: 10c0/44907308549ce775a41c38a815f747009ac45929a45d642b836aa6b0a536e4978d30b8d7d680bbd116e9dd73b7dbe2ef0d1369dcfc2d09e83ba381e485ecbe12 - languageName: node - linkType: hard - "@ts-morph/common@npm:~0.16.0": version: 0.16.0 resolution: "@ts-morph/common@npm:0.16.0" @@ -10745,15 +10494,6 @@ __metadata: languageName: node linkType: hard -"@types/bonjour@npm:^3.5.9": - version: 3.5.10 - resolution: "@types/bonjour@npm:3.5.10" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/5a3d70695a8dfe79c020579fcbf18d7dbb89b8f061dd388c76b68c4797c0fccd71f3e8a9e2bea00afffdb9b37a49dd0ac0a192829d5b655a5b49c66f313a7be8 - languageName: node - linkType: hard - "@types/busboy@npm:^1": version: 1.5.4 resolution: "@types/busboy@npm:1.5.4" @@ -10770,16 +10510,6 @@ __metadata: languageName: node linkType: hard -"@types/connect-history-api-fallback@npm:^1.3.5": - version: 1.5.0 - resolution: "@types/connect-history-api-fallback@npm:1.5.0" - dependencies: - "@types/express-serve-static-core": "npm:*" - "@types/node": "npm:*" - checksum: 10c0/176362698eb68cfbd0517c015fc089fd764d5d35f07230238bb57f833d24a4737f46b4d78dfc225809e7324729d360b831567d1dff17639d576ad85f5b86743d - languageName: node - linkType: hard - "@types/connect@npm:*": version: 3.4.35 resolution: "@types/connect@npm:3.4.35" @@ -10892,17 +10622,7 @@ __metadata: languageName: node linkType: hard -"@types/eslint-scope@npm:^3.7.3": - version: 3.7.4 - resolution: "@types/eslint-scope@npm:3.7.4" - dependencies: - "@types/eslint": "npm:*" - "@types/estree": "npm:*" - checksum: 10c0/f8a19cddf9d402f079bcc261958fff5ff2616465e4fb4cd423aa966a6a32bf5d3c65ca3ca0fbe824776b48c5cd525efbaf927b98b8eeef093aa68a1a2ba19359 - languageName: node - linkType: hard - -"@types/eslint@npm:*, @types/eslint@npm:8.56.10": +"@types/eslint@npm:8.56.10": version: 8.56.10 resolution: "@types/eslint@npm:8.56.10" dependencies: @@ -10912,7 +10632,7 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:1.0.5, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.5": +"@types/estree@npm:*, @types/estree@npm:1.0.5, @types/estree@npm:^1.0.0": version: 1.0.5 resolution: "@types/estree@npm:1.0.5" checksum: 10c0/b3b0e334288ddb407c7b3357ca67dbee75ee22db242ca7c56fe27db4e1a31989cb8af48a84dd401deb787fe10cc6b2ab1ee82dc4783be87ededbe3d53c79c70d @@ -10926,7 +10646,7 @@ __metadata: languageName: node linkType: hard -"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.18, @types/express-serve-static-core@npm:^4.17.33": +"@types/express-serve-static-core@npm:^4.17.18, @types/express-serve-static-core@npm:^4.17.33": version: 4.17.35 resolution: "@types/express-serve-static-core@npm:4.17.35" dependencies: @@ -10938,7 +10658,7 @@ __metadata: languageName: node linkType: hard -"@types/express@npm:*, @types/express@npm:4, @types/express@npm:^4.17.13, @types/express@npm:^4.17.17, @types/express@npm:^4.7.0": +"@types/express@npm:*, @types/express@npm:4, @types/express@npm:^4.17.17, @types/express@npm:^4.7.0": version: 4.17.21 resolution: "@types/express@npm:4.17.21" dependencies: @@ -10998,13 +10718,6 @@ __metadata: languageName: node linkType: hard -"@types/html-minifier-terser@npm:^6.0.0": - version: 6.1.0 - resolution: "@types/html-minifier-terser@npm:6.1.0" - checksum: 10c0/a62fb8588e2f3818d82a2d7b953ad60a4a52fd767ae04671de1c16f5788bd72f1ed3a6109ed63fd190c06a37d919e3c39d8adbc1793a005def76c15a3f5f5dab - languageName: node - linkType: hard - "@types/http-errors@npm:*": version: 2.0.1 resolution: "@types/http-errors@npm:2.0.1" @@ -11464,13 +11177,6 @@ __metadata: languageName: node linkType: hard -"@types/retry@npm:0.12.0": - version: 0.12.0 - resolution: "@types/retry@npm:0.12.0" - checksum: 10c0/7c5c9086369826f569b83a4683661557cab1361bac0897a1cefa1a915ff739acd10ca0d62b01071046fe3f5a3f7f2aec80785fe283b75602dc6726781ea3e328 - languageName: node - linkType: hard - "@types/scheduler@npm:*": version: 0.16.3 resolution: "@types/scheduler@npm:0.16.3" @@ -11495,16 +11201,7 @@ __metadata: languageName: node linkType: hard -"@types/serve-index@npm:^1.9.1": - version: 1.9.1 - resolution: "@types/serve-index@npm:1.9.1" - dependencies: - "@types/express": "npm:*" - checksum: 10c0/ed1ac8407101a787ebf09164a81bc24248ccf9d9789cd4eaa360a9a06163e5d2168c46ab0ddf2007e47b455182ecaa7632a886639919d9d409a27f7aef4e847a - languageName: node - linkType: hard - -"@types/serve-static@npm:*, @types/serve-static@npm:^1.13.10": +"@types/serve-static@npm:*": version: 1.15.2 resolution: "@types/serve-static@npm:1.15.2" dependencies: @@ -11538,15 +11235,6 @@ __metadata: languageName: node linkType: hard -"@types/sockjs@npm:^0.3.33": - version: 0.3.33 - resolution: "@types/sockjs@npm:0.3.33" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/75b9b2839970ebab3e557955b9e2b1091d87cefabee1023e566bccc093411acc4a1402f3da4fde18aca44f5b9c42fe0626afd073a2140002b9b53eb71a084e4d - languageName: node - linkType: hard - "@types/split2@npm:4.2.3": version: 4.2.3 resolution: "@types/split2@npm:4.2.3" @@ -11600,25 +11288,7 @@ __metadata: languageName: node linkType: hard -"@types/webpack-env@npm:1.18.5": - version: 1.18.5 - resolution: "@types/webpack-env@npm:1.18.5" - checksum: 10c0/b9e4876e8c7cae419896249f9ed795db283c008fe1d38efa679cbbf05194fc2eea2a5bfb4ff4393d109e3a9895416dadf5f3ddd5c22931b678062230f860454e - languageName: node - linkType: hard - -"@types/webpack@npm:5.28.5": - version: 5.28.5 - resolution: "@types/webpack@npm:5.28.5" - dependencies: - "@types/node": "npm:*" - tapable: "npm:^2.2.0" - webpack: "npm:^5" - checksum: 10c0/d1fec1f678af79dd0d84333740bdd2ce128c7f4fd1f8d14bb0ec0f4c5af70580af68350f677e3696003a8cb2e2b5f510f8c0ed7ee5ad2bc7874c87f80ecd7c8d - languageName: node - linkType: hard - -"@types/ws@npm:^8.0.0, @types/ws@npm:^8.5.10, @types/ws@npm:^8.5.5": +"@types/ws@npm:^8.0.0, @types/ws@npm:^8.5.10": version: 8.5.10 resolution: "@types/ws@npm:8.5.10" dependencies: @@ -11885,278 +11555,94 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/ast@npm:1.12.1, @webassemblyjs/ast@npm:^1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/ast@npm:1.12.1" - dependencies: - "@webassemblyjs/helper-numbers": "npm:1.11.6" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - checksum: 10c0/ba7f2b96c6e67e249df6156d02c69eb5f1bd18d5005303cdc42accb053bebbbde673826e54db0437c9748e97abd218366a1d13fa46859b23cde611b6b409998c - languageName: node - linkType: hard - -"@webassemblyjs/floating-point-hex-parser@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.6" - checksum: 10c0/37fe26f89e18e4ca0e7d89cfe3b9f17cfa327d7daf906ae01400416dbb2e33c8a125b4dc55ad7ff405e5fcfb6cf0d764074c9bc532b9a31a71e762be57d2ea0a +"@whatwg-node/events@npm:^0.0.3": + version: 0.0.3 + resolution: "@whatwg-node/events@npm:0.0.3" + checksum: 10c0/87ac0854f84650ce016ccd82a6c087eac1c6204eeb80cf358737ce7757a345e3a4ba19e9b1815b326eb1451d49878785aa9dc426631f4ea47dedbcfc51b56977 languageName: node linkType: hard -"@webassemblyjs/helper-api-error@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-api-error@npm:1.11.6" - checksum: 10c0/a681ed51863e4ff18cf38d223429f414894e5f7496856854d9a886eeddcee32d7c9f66290f2919c9bb6d2fc2b2fae3f989b6a1e02a81e829359738ea0c4d371a +"@whatwg-node/events@npm:^0.1.0": + version: 0.1.1 + resolution: "@whatwg-node/events@npm:0.1.1" + checksum: 10c0/7e4678c8c092484dc248f4a229a398de30d21190b94ebebc333c2187180207a18e257c4588d0910e872251b3089007f4a2a3ff8b9a4d057fae94db8da28be467 languageName: node linkType: hard -"@webassemblyjs/helper-buffer@npm:1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/helper-buffer@npm:1.12.1" - checksum: 10c0/0270724afb4601237410f7fd845ab58ccda1d5456a8783aadfb16eaaf3f2c9610c28e4a5bcb6ad880cde5183c82f7f116d5ccfc2310502439d33f14b6888b48a +"@whatwg-node/fetch@npm:0.9.17, @whatwg-node/fetch@npm:^0.9.17": + version: 0.9.17 + resolution: "@whatwg-node/fetch@npm:0.9.17" + dependencies: + "@whatwg-node/node-fetch": "npm:^0.5.7" + urlpattern-polyfill: "npm:^10.0.0" + checksum: 10c0/6638f1d456d17c9eab55f6278aa8045157ceb43a27acc65def1b7a2a3b80ef1b79f4c203e523865c9bcf1236ef64e1378ab0627e91932c97e9f1f3a129b17195 languageName: node linkType: hard -"@webassemblyjs/helper-numbers@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-numbers@npm:1.11.6" +"@whatwg-node/fetch@npm:^0.8.0, @whatwg-node/fetch@npm:^0.8.1, @whatwg-node/fetch@npm:^0.8.2": + version: 0.8.8 + resolution: "@whatwg-node/fetch@npm:0.8.8" dependencies: - "@webassemblyjs/floating-point-hex-parser": "npm:1.11.6" - "@webassemblyjs/helper-api-error": "npm:1.11.6" - "@xtuc/long": "npm:4.2.2" - checksum: 10c0/c7d5afc0ff3bd748339b466d8d2f27b908208bf3ff26b2e8e72c39814479d486e0dca6f3d4d776fd9027c1efe05b5c0716c57a23041eb34473892b2731c33af3 + "@peculiar/webcrypto": "npm:^1.4.0" + "@whatwg-node/node-fetch": "npm:^0.3.6" + busboy: "npm:^1.6.0" + urlpattern-polyfill: "npm:^8.0.0" + web-streams-polyfill: "npm:^3.2.1" + checksum: 10c0/37d882bf85764aec7541cda1008099ab4d695971608946ec9b9e40326eedfd4c49507fbcc8765ebe3e9241f4dc9d1e970e0b3501a814d721c40c721d313c5d50 languageName: node linkType: hard -"@webassemblyjs/helper-wasm-bytecode@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6" - checksum: 10c0/79d2bebdd11383d142745efa32781249745213af8e022651847382685ca76709f83e1d97adc5f0d3c2b8546bf02864f8b43a531fdf5ca0748cb9e4e0ef2acaa5 +"@whatwg-node/node-fetch@npm:^0.3.6": + version: 0.3.6 + resolution: "@whatwg-node/node-fetch@npm:0.3.6" + dependencies: + "@whatwg-node/events": "npm:^0.0.3" + busboy: "npm:^1.6.0" + fast-querystring: "npm:^1.1.1" + fast-url-parser: "npm:^1.1.3" + tslib: "npm:^2.3.1" + checksum: 10c0/49e4fd5e682d1fa1229b2c13c06074c6a633eddbe61be162fd213ddb85d6d27d51554b3cced5f6b7f3be1722a64cca7f5ffe0722d08b3285fe2f289d8d5a045d languageName: node linkType: hard -"@webassemblyjs/helper-wasm-section@npm:1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/helper-wasm-section@npm:1.12.1" +"@whatwg-node/node-fetch@npm:^0.5.7": + version: 0.5.10 + resolution: "@whatwg-node/node-fetch@npm:0.5.10" dependencies: - "@webassemblyjs/ast": "npm:1.12.1" - "@webassemblyjs/helper-buffer": "npm:1.12.1" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - "@webassemblyjs/wasm-gen": "npm:1.12.1" - checksum: 10c0/0546350724d285ae3c26e6fc444be4c3b5fb824f3be0ec8ceb474179dc3f4430336dd2e36a44b3e3a1a6815960e5eec98cd9b3a8ec66dc53d86daedd3296a6a2 + "@kamilkisiela/fast-url-parser": "npm:^1.1.4" + "@whatwg-node/events": "npm:^0.1.0" + busboy: "npm:^1.6.0" + fast-querystring: "npm:^1.1.1" + tslib: "npm:^2.3.1" + checksum: 10c0/7b11e8848433bda4f9f9c5030df04f7a830555b36cd8b21fbdc33492d4f0f394f83e4a981d33d35d7dee54becae7cd71e8153d5a19512f2cd2d91868bf6c97a0 languageName: node linkType: hard -"@webassemblyjs/ieee754@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/ieee754@npm:1.11.6" +"@whatwg-node/server@npm:0.9.36, @whatwg-node/server@npm:^0.9.33": + version: 0.9.36 + resolution: "@whatwg-node/server@npm:0.9.36" dependencies: - "@xtuc/ieee754": "npm:^1.2.0" - checksum: 10c0/59de0365da450322c958deadade5ec2d300c70f75e17ae55de3c9ce564deff5b429e757d107c7ec69bd0ba169c6b6cc2ff66293ab7264a7053c829b50ffa732f + "@whatwg-node/fetch": "npm:^0.9.17" + tslib: "npm:^2.3.1" + checksum: 10c0/62d50ac4a1f41fddee4ff370f9b565a9a384c897c079595faba7ee1a62d8b30f4b6497c37b0d1d07d806cad38117fef8b77bf144ecd1d0cb6578ded47328ee49 languageName: node linkType: hard -"@webassemblyjs/leb128@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/leb128@npm:1.11.6" +"@wry/caches@npm:^1.0.0": + version: 1.0.1 + resolution: "@wry/caches@npm:1.0.1" dependencies: - "@xtuc/long": "npm:4.2.2" - checksum: 10c0/cb344fc04f1968209804de4da018679c5d4708a03b472a33e0fa75657bb024978f570d3ccf9263b7f341f77ecaa75d0e051b9cd4b7bb17a339032cfd1c37f96e + tslib: "npm:^2.3.0" + checksum: 10c0/a7bca3377f1131d3f1080f2e39d0692c9d1ca86bfd55734786f167f46aad28a4c8e772107324e8319843fb8068fdf98abcdea376d8a589316b1f0cdadf81f8b1 languageName: node linkType: hard -"@webassemblyjs/utf8@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/utf8@npm:1.11.6" - checksum: 10c0/14d6c24751a89ad9d801180b0d770f30a853c39f035a15fbc96266d6ac46355227abd27a3fd2eeaa97b4294ced2440a6b012750ae17bafe1a7633029a87b6bee - languageName: node - linkType: hard - -"@webassemblyjs/wasm-edit@npm:^1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/wasm-edit@npm:1.12.1" - dependencies: - "@webassemblyjs/ast": "npm:1.12.1" - "@webassemblyjs/helper-buffer": "npm:1.12.1" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - "@webassemblyjs/helper-wasm-section": "npm:1.12.1" - "@webassemblyjs/wasm-gen": "npm:1.12.1" - "@webassemblyjs/wasm-opt": "npm:1.12.1" - "@webassemblyjs/wasm-parser": "npm:1.12.1" - "@webassemblyjs/wast-printer": "npm:1.12.1" - checksum: 10c0/972f5e6c522890743999e0ed45260aae728098801c6128856b310dd21f1ee63435fc7b518e30e0ba1cdafd0d1e38275829c1e4451c3536a1d9e726e07a5bba0b - languageName: node - linkType: hard - -"@webassemblyjs/wasm-gen@npm:1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/wasm-gen@npm:1.12.1" - dependencies: - "@webassemblyjs/ast": "npm:1.12.1" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - "@webassemblyjs/ieee754": "npm:1.11.6" - "@webassemblyjs/leb128": "npm:1.11.6" - "@webassemblyjs/utf8": "npm:1.11.6" - checksum: 10c0/1e257288177af9fa34c69cab94f4d9036ebed611f77f3897c988874e75182eeeec759c79b89a7a49dd24624fc2d3d48d5580b62b67c4a1c9bfbdcd266b281c16 - languageName: node - linkType: hard - -"@webassemblyjs/wasm-opt@npm:1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/wasm-opt@npm:1.12.1" - dependencies: - "@webassemblyjs/ast": "npm:1.12.1" - "@webassemblyjs/helper-buffer": "npm:1.12.1" - "@webassemblyjs/wasm-gen": "npm:1.12.1" - "@webassemblyjs/wasm-parser": "npm:1.12.1" - checksum: 10c0/992a45e1f1871033c36987459436ab4e6430642ca49328e6e32a13de9106fe69ae6c0ac27d7050efd76851e502d11cd1ac0e06b55655dfa889ad82f11a2712fb - languageName: node - linkType: hard - -"@webassemblyjs/wasm-parser@npm:1.12.1, @webassemblyjs/wasm-parser@npm:^1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/wasm-parser@npm:1.12.1" - dependencies: - "@webassemblyjs/ast": "npm:1.12.1" - "@webassemblyjs/helper-api-error": "npm:1.11.6" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - "@webassemblyjs/ieee754": "npm:1.11.6" - "@webassemblyjs/leb128": "npm:1.11.6" - "@webassemblyjs/utf8": "npm:1.11.6" - checksum: 10c0/e85cec1acad07e5eb65b92d37c8e6ca09c6ca50d7ca58803a1532b452c7321050a0328c49810c337cc2dfd100c5326a54d5ebd1aa5c339ebe6ef10c250323a0e - languageName: node - linkType: hard - -"@webassemblyjs/wast-printer@npm:1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/wast-printer@npm:1.12.1" - dependencies: - "@webassemblyjs/ast": "npm:1.12.1" - "@xtuc/long": "npm:4.2.2" - checksum: 10c0/39bf746eb7a79aa69953f194943bbc43bebae98bd7cadd4d8bc8c0df470ca6bf9d2b789effaa180e900fab4e2691983c1f7d41571458bd2a26267f2f0c73705a - languageName: node - linkType: hard - -"@webpack-cli/configtest@npm:^2.1.1": - version: 2.1.1 - resolution: "@webpack-cli/configtest@npm:2.1.1" - peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x - checksum: 10c0/a8da1f15702cb289807da99235ed95326ed7dabeb1a36ca59bd3a5dbe6adcc946a9a2767936050fc4d5ed14efab0e5b5a641dfe8e3d862c36caa5791ac12759d - languageName: node - linkType: hard - -"@webpack-cli/info@npm:^2.0.2": - version: 2.0.2 - resolution: "@webpack-cli/info@npm:2.0.2" - peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x - checksum: 10c0/ca88a35604dc9aedac7c26e8f6793c5039dc1eea2b12a85fbfd669a5f21ecf9cf169d7fd157ea366a62666e3fa05b776306a96742ac61a9868f44fdce6b40f7d - languageName: node - linkType: hard - -"@webpack-cli/serve@npm:^2.0.5": - version: 2.0.5 - resolution: "@webpack-cli/serve@npm:2.0.5" - peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x - peerDependenciesMeta: - webpack-dev-server: - optional: true - checksum: 10c0/36079d34971ff99a58b66b13f4184dcdd8617853c48cccdbc3f9ab7ea9e5d4fcf504e873c298ea7aa15e0b51ad2c4aee4d7a70bd7d9364e60f57b0eb93ca15fc - languageName: node - linkType: hard - -"@whatwg-node/events@npm:^0.0.3": - version: 0.0.3 - resolution: "@whatwg-node/events@npm:0.0.3" - checksum: 10c0/87ac0854f84650ce016ccd82a6c087eac1c6204eeb80cf358737ce7757a345e3a4ba19e9b1815b326eb1451d49878785aa9dc426631f4ea47dedbcfc51b56977 - languageName: node - linkType: hard - -"@whatwg-node/events@npm:^0.1.0": - version: 0.1.1 - resolution: "@whatwg-node/events@npm:0.1.1" - checksum: 10c0/7e4678c8c092484dc248f4a229a398de30d21190b94ebebc333c2187180207a18e257c4588d0910e872251b3089007f4a2a3ff8b9a4d057fae94db8da28be467 - languageName: node - linkType: hard - -"@whatwg-node/fetch@npm:0.9.17, @whatwg-node/fetch@npm:^0.9.17": - version: 0.9.17 - resolution: "@whatwg-node/fetch@npm:0.9.17" - dependencies: - "@whatwg-node/node-fetch": "npm:^0.5.7" - urlpattern-polyfill: "npm:^10.0.0" - checksum: 10c0/6638f1d456d17c9eab55f6278aa8045157ceb43a27acc65def1b7a2a3b80ef1b79f4c203e523865c9bcf1236ef64e1378ab0627e91932c97e9f1f3a129b17195 - languageName: node - linkType: hard - -"@whatwg-node/fetch@npm:^0.8.0, @whatwg-node/fetch@npm:^0.8.1, @whatwg-node/fetch@npm:^0.8.2": - version: 0.8.8 - resolution: "@whatwg-node/fetch@npm:0.8.8" - dependencies: - "@peculiar/webcrypto": "npm:^1.4.0" - "@whatwg-node/node-fetch": "npm:^0.3.6" - busboy: "npm:^1.6.0" - urlpattern-polyfill: "npm:^8.0.0" - web-streams-polyfill: "npm:^3.2.1" - checksum: 10c0/37d882bf85764aec7541cda1008099ab4d695971608946ec9b9e40326eedfd4c49507fbcc8765ebe3e9241f4dc9d1e970e0b3501a814d721c40c721d313c5d50 - languageName: node - linkType: hard - -"@whatwg-node/node-fetch@npm:^0.3.6": - version: 0.3.6 - resolution: "@whatwg-node/node-fetch@npm:0.3.6" - dependencies: - "@whatwg-node/events": "npm:^0.0.3" - busboy: "npm:^1.6.0" - fast-querystring: "npm:^1.1.1" - fast-url-parser: "npm:^1.1.3" - tslib: "npm:^2.3.1" - checksum: 10c0/49e4fd5e682d1fa1229b2c13c06074c6a633eddbe61be162fd213ddb85d6d27d51554b3cced5f6b7f3be1722a64cca7f5ffe0722d08b3285fe2f289d8d5a045d - languageName: node - linkType: hard - -"@whatwg-node/node-fetch@npm:^0.5.7": - version: 0.5.10 - resolution: "@whatwg-node/node-fetch@npm:0.5.10" - dependencies: - "@kamilkisiela/fast-url-parser": "npm:^1.1.4" - "@whatwg-node/events": "npm:^0.1.0" - busboy: "npm:^1.6.0" - fast-querystring: "npm:^1.1.1" - tslib: "npm:^2.3.1" - checksum: 10c0/7b11e8848433bda4f9f9c5030df04f7a830555b36cd8b21fbdc33492d4f0f394f83e4a981d33d35d7dee54becae7cd71e8153d5a19512f2cd2d91868bf6c97a0 - languageName: node - linkType: hard - -"@whatwg-node/server@npm:0.9.36, @whatwg-node/server@npm:^0.9.33": - version: 0.9.36 - resolution: "@whatwg-node/server@npm:0.9.36" - dependencies: - "@whatwg-node/fetch": "npm:^0.9.17" - tslib: "npm:^2.3.1" - checksum: 10c0/62d50ac4a1f41fddee4ff370f9b565a9a384c897c079595faba7ee1a62d8b30f4b6497c37b0d1d07d806cad38117fef8b77bf144ecd1d0cb6578ded47328ee49 - languageName: node - linkType: hard - -"@wry/caches@npm:^1.0.0": - version: 1.0.1 - resolution: "@wry/caches@npm:1.0.1" - dependencies: - tslib: "npm:^2.3.0" - checksum: 10c0/a7bca3377f1131d3f1080f2e39d0692c9d1ca86bfd55734786f167f46aad28a4c8e772107324e8319843fb8068fdf98abcdea376d8a589316b1f0cdadf81f8b1 - languageName: node - linkType: hard - -"@wry/context@npm:^0.7.0": - version: 0.7.3 - resolution: "@wry/context@npm:0.7.3" - dependencies: - tslib: "npm:^2.3.0" - checksum: 10c0/c18d8e1579770db5aabe86b7ee9d5c36a8e3b974b56efbe72a3dc53771a6385467a23a8c7e1280f46c5d3e76569a429345df0d59ba598876eb56c6424dd65f06 +"@wry/context@npm:^0.7.0": + version: 0.7.3 + resolution: "@wry/context@npm:0.7.3" + dependencies: + tslib: "npm:^2.3.0" + checksum: 10c0/c18d8e1579770db5aabe86b7ee9d5c36a8e3b974b56efbe72a3dc53771a6385467a23a8c7e1280f46c5d3e76569a429345df0d59ba598876eb56c6424dd65f06 languageName: node linkType: hard @@ -12194,20 +11680,6 @@ __metadata: languageName: node linkType: hard -"@xtuc/ieee754@npm:^1.2.0": - version: 1.2.0 - resolution: "@xtuc/ieee754@npm:1.2.0" - checksum: 10c0/a8565d29d135039bd99ae4b2220d3e167d22cf53f867e491ed479b3f84f895742d0097f935b19aab90265a23d5d46711e4204f14c479ae3637fbf06c4666882f - languageName: node - linkType: hard - -"@xtuc/long@npm:4.2.2": - version: 4.2.2 - resolution: "@xtuc/long@npm:4.2.2" - checksum: 10c0/8582cbc69c79ad2d31568c412129bf23d2b1210a1dfb60c82d5a1df93334da4ee51f3057051658569e2c196d8dc33bc05ae6b974a711d0d16e801e1d0647ccd1 - languageName: node - linkType: hard - "@yarnpkg/esbuild-plugin-pnp@npm:^3.0.0-rc.10": version: 3.0.0-rc.15 resolution: "@yarnpkg/esbuild-plugin-pnp@npm:3.0.0-rc.15" @@ -12323,7 +11795,7 @@ __metadata: languageName: node linkType: hard -"accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.8": +"accepts@npm:~1.3.5, accepts@npm:~1.3.8": version: 1.3.8 resolution: "accepts@npm:1.3.8" dependencies: @@ -12352,15 +11824,6 @@ __metadata: languageName: node linkType: hard -"acorn-import-attributes@npm:^1.9.5": - version: 1.9.5 - resolution: "acorn-import-attributes@npm:1.9.5" - peerDependencies: - acorn: ^8 - checksum: 10c0/5926eaaead2326d5a86f322ff1b617b0f698aa61dc719a5baa0e9d955c9885cc71febac3fb5bacff71bbf2c4f9c12db2056883c68c53eb962c048b952e1e013d - languageName: node - linkType: hard - "acorn-jsx-walk@npm:2.0.0": version: 2.0.0 resolution: "acorn-jsx-walk@npm:2.0.0" @@ -12386,7 +11849,7 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:8.3.2, acorn-walk@npm:^8.0.0, acorn-walk@npm:^8.0.2, acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.3.2": +"acorn-walk@npm:8.3.2, acorn-walk@npm:^8.0.2, acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.3.2": version: 8.3.2 resolution: "acorn-walk@npm:8.3.2" checksum: 10c0/7e2a8dad5480df7f872569b9dccff2f3da7e65f5353686b1d6032ab9f4ddf6e3a2cb83a9b52cf50b1497fd522154dda92f0abf7153290cc79cd14721ff121e52 @@ -12400,7 +11863,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:8.11.3, acorn@npm:^8.0.4, acorn@npm:^8.1.0, acorn@npm:^8.10.0, acorn@npm:^8.11.0, acorn@npm:^8.11.2, acorn@npm:^8.11.3, acorn@npm:^8.4.1, acorn@npm:^8.7.1, acorn@npm:^8.8.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": +"acorn@npm:8.11.3, acorn@npm:^8.1.0, acorn@npm:^8.10.0, acorn@npm:^8.11.0, acorn@npm:^8.11.2, acorn@npm:^8.11.3, acorn@npm:^8.4.1, acorn@npm:^8.8.1, acorn@npm:^8.9.0": version: 8.11.3 resolution: "acorn@npm:8.11.3" bin: @@ -12611,15 +12074,6 @@ __metadata: languageName: node linkType: hard -"ansi-html-community@npm:0.0.8, ansi-html-community@npm:^0.0.8": - version: 0.0.8 - resolution: "ansi-html-community@npm:0.0.8" - bin: - ansi-html: bin/ansi-html - checksum: 10c0/45d3a6f0b4f10b04fdd44bef62972e2470bfd917bf00439471fa7473d92d7cbe31369c73db863cc45dda115cb42527f39e232e9256115534b8ee5806b0caeed4 - languageName: node - linkType: hard - "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -12832,13 +12286,6 @@ __metadata: languageName: node linkType: hard -"array-flatten@npm:^2.1.2": - version: 2.1.2 - resolution: "array-flatten@npm:2.1.2" - checksum: 10c0/bdc1cee68e41bec9cfc1161408734e2269428ef371445606bce4e6241001e138a94b9a617cc9a5b4b7fe6a3a51e3d5a942646975ce82a2e202ccf3e9b478c82f - languageName: node - linkType: hard - "array-ify@npm:^1.0.0": version: 1.0.0 resolution: "array-ify@npm:1.0.0" @@ -13194,13 +12641,6 @@ __metadata: languageName: node linkType: hard -"axe-core@npm:^4.2.0": - version: 4.7.2 - resolution: "axe-core@npm:4.7.2" - checksum: 10c0/8dfc61f038fbd9623ae8a264c8a475d887113a027fb440a2b377b82ffd300e71d1a0bcf042ff13b517a8d548b34c44b4159eff693725c5d7cde240d0aa68feac - languageName: node - linkType: hard - "axios@npm:^1.6.0": version: 1.6.7 resolution: "axios@npm:1.6.7" @@ -13267,7 +12707,7 @@ __metadata: languageName: node linkType: hard -"babel-loader@npm:^9.0.0, babel-loader@npm:^9.1.3": +"babel-loader@npm:^9.1.3": version: 9.1.3 resolution: "babel-loader@npm:9.1.3" dependencies: @@ -13280,13 +12720,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-add-react-displayname@npm:^0.0.5": - version: 0.0.5 - resolution: "babel-plugin-add-react-displayname@npm:0.0.5" - checksum: 10c0/96b363d613e3d25e55606546874f3ab34b45088ac5143a64e417976f1eb29ed3e4df90400daa5edb2026d6088ed172f7af469d89838aac4bc810ede377b63c63 - languageName: node - linkType: hard - "babel-plugin-auto-import@npm:1.1.0": version: 1.1.0 resolution: "babel-plugin-auto-import@npm:1.1.0" @@ -13514,13 +12947,6 @@ __metadata: languageName: node linkType: hard -"batch@npm:0.6.1": - version: 0.6.1 - resolution: "batch@npm:0.6.1" - checksum: 10c0/925a13897b4db80d4211082fe287bcf96d297af38e26448c857cee3e095c9792e3b8f26b37d268812e7f38a589f694609de8534a018b1937d7dc9f84e6b387c5 - languageName: node - linkType: hard - "bcrypt-pbkdf@npm:^1.0.0": version: 1.0.2 resolution: "bcrypt-pbkdf@npm:1.0.2" @@ -13656,18 +13082,6 @@ __metadata: languageName: node linkType: hard -"bonjour-service@npm:^1.0.11": - version: 1.1.1 - resolution: "bonjour-service@npm:1.1.1" - dependencies: - array-flatten: "npm:^2.1.2" - dns-equal: "npm:^1.0.0" - fast-deep-equal: "npm:^3.1.3" - multicast-dns: "npm:^7.2.5" - checksum: 10c0/8dd3fef3ff8a11678d8f586be03c85004a45bae4353c55d7dbffe288cad73ddb38dee08b57425b9945c9a3a840d50bd40ae5aeda0066186dabe4b84a315b4e05 - languageName: node - linkType: hard - "boolbase@npm:^1.0.0": version: 1.0.0 resolution: "boolbase@npm:1.0.0" @@ -13834,7 +13248,7 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.21.10, browserslist@npm:^4.21.4, browserslist@npm:^4.22.2, browserslist@npm:^4.23.0": +"browserslist@npm:^4.22.2, browserslist@npm:^4.23.0": version: 4.23.0 resolution: "browserslist@npm:4.23.0" dependencies: @@ -14111,19 +13525,7 @@ __metadata: languageName: node linkType: hard -"caniuse-api@npm:^3.0.0": - version: 3.0.0 - resolution: "caniuse-api@npm:3.0.0" - dependencies: - browserslist: "npm:^4.0.0" - caniuse-lite: "npm:^1.0.0" - lodash.memoize: "npm:^4.1.2" - lodash.uniq: "npm:^4.5.0" - checksum: 10c0/60f9e85a3331e6d761b1b03eec71ca38ef7d74146bece34694853033292156b815696573ed734b65583acf493e88163618eda915c6c826d46a024c71a9572b4c - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001587": +"caniuse-lite@npm:^1.0.30001587": version: 1.0.30001600 resolution: "caniuse-lite@npm:1.0.30001600" checksum: 10c0/b4f764db5d4f8cb3eb2827a170a20e6b2f4b8c3d80169efcf56bf3d6b8b3e6dd1c740141f0d0b10b2233f49ee8b496e2d1e044a36c54750a106bad2f6477f2db @@ -14153,13 +13555,6 @@ __metadata: languageName: node linkType: hard -"case-sensitive-paths-webpack-plugin@npm:^2.4.0": - version: 2.4.0 - resolution: "case-sensitive-paths-webpack-plugin@npm:2.4.0" - checksum: 10c0/310dab619b661a7fa44ed773870be6d6d7373faff6953ad92720f9553e2579e46dda5b9a79eae6d25ff3733cc15aa466b96e5811af16213f23c115aa220b4ab4 - languageName: node - linkType: hard - "caseless@npm:~0.12.0": version: 0.12.0 resolution: "caseless@npm:0.12.0" @@ -14465,13 +13860,6 @@ __metadata: languageName: node linkType: hard -"chrome-trace-event@npm:^1.0.2": - version: 1.0.3 - resolution: "chrome-trace-event@npm:1.0.3" - checksum: 10c0/080ce2d20c2b9e0f8461a380e9585686caa768b1c834a464470c9dc74cda07f27611c7b727a2cd768a9cecd033297fdec4ce01f1e58b62227882c1059dec321c - languageName: node - linkType: hard - "ci-info@npm:4.0.0": version: 4.0.0 resolution: "ci-info@npm:4.0.0" @@ -14496,7 +13884,7 @@ __metadata: languageName: node linkType: hard -"cjs-module-lexer@npm:^1.0.0, cjs-module-lexer@npm:^1.2.3": +"cjs-module-lexer@npm:^1.0.0": version: 1.2.3 resolution: "cjs-module-lexer@npm:1.2.3" checksum: 10c0/0de9a9c3fad03a46804c0d38e7b712fb282584a9c7ef1ed44cae22fb71d9bb600309d66a9711ac36a596fd03422f5bb03e021e8f369c12a39fa1786ae531baab @@ -14512,15 +13900,6 @@ __metadata: languageName: node linkType: hard -"clean-css@npm:^5.2.2": - version: 5.3.2 - resolution: "clean-css@npm:5.3.2" - dependencies: - source-map: "npm:~0.6.0" - checksum: 10c0/315e0e81306524bd2c1905fa6823bf7658be40799b78f446e5e6922808718d2b80266fb3e96842a06176fa683bc2c1a0d2827b08d154e2f9cf136d7bda909d33 - languageName: node - linkType: hard - "clean-stack@npm:^2.0.0": version: 2.2.0 resolution: "clean-stack@npm:2.2.0" @@ -14750,14 +14129,7 @@ __metadata: languageName: node linkType: hard -"colord@npm:^2.9.1": - version: 2.9.3 - resolution: "colord@npm:2.9.3" - checksum: 10c0/9699e956894d8996b28c686afe8988720785f476f59335c80ce852ded76ab3ebe252703aec53d9bef54f6219aea6b960fb3d9a8300058a1d0c0d4026460cd110 - languageName: node - linkType: hard - -"colorette@npm:^2.0.10, colorette@npm:^2.0.14, colorette@npm:^2.0.16, colorette@npm:^2.0.19, colorette@npm:^2.0.20": +"colorette@npm:^2.0.16, colorette@npm:^2.0.19, colorette@npm:^2.0.20": version: 2.0.20 resolution: "colorette@npm:2.0.20" checksum: 10c0/e94116ff33b0ff56f3b83b9ace895e5bf87c2a7a47b3401b8c3f3226e050d5ef76cf4072fb3325f9dc24d1698f9b730baf4e05eeaf861d74a1883073f4c98a40 @@ -14797,7 +14169,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.19.0, commander@npm:^2.20.0": +"commander@npm:^2.19.0": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 @@ -14818,20 +14190,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:^7.2.0": - version: 7.2.0 - resolution: "commander@npm:7.2.0" - checksum: 10c0/8d690ff13b0356df7e0ebbe6c59b4712f754f4b724d4f473d3cc5b3fdcf978e3a5dc3078717858a2ceb50b0f84d0660a7f22a96cdc50fb877d0c9bb31593d23a - languageName: node - linkType: hard - -"commander@npm:^8.3.0": - version: 8.3.0 - resolution: "commander@npm:8.3.0" - checksum: 10c0/8b043bb8322ea1c39664a1598a95e0495bfe4ca2fad0d84a92d7d1d8d213e2a155b441d2470c8e08de7c4a28cf2bc6e169211c49e1b21d9f7edc6ae4d9356060 - languageName: node - linkType: hard - "common-ancestor-path@npm:^1.0.1": version: 1.0.1 resolution: "common-ancestor-path@npm:1.0.1" @@ -14993,13 +14351,6 @@ __metadata: languageName: node linkType: hard -"connect-history-api-fallback@npm:^2.0.0": - version: 2.0.0 - resolution: "connect-history-api-fallback@npm:2.0.0" - checksum: 10c0/90fa8b16ab76e9531646cc70b010b1dbd078153730c510d3142f6cf07479ae8a812c5a3c0e40a28528dd1681a62395d0cfdef67da9e914c4772ac85d69a3ed87 - languageName: node - linkType: hard - "console-browserify@npm:^1.1.0": version: 1.2.0 resolution: "console-browserify@npm:1.2.0" @@ -15192,22 +14543,6 @@ __metadata: languageName: node linkType: hard -"copy-webpack-plugin@npm:11.0.0": - version: 11.0.0 - resolution: "copy-webpack-plugin@npm:11.0.0" - dependencies: - fast-glob: "npm:^3.2.11" - glob-parent: "npm:^6.0.1" - globby: "npm:^13.1.1" - normalize-path: "npm:^3.0.0" - schema-utils: "npm:^4.0.0" - serialize-javascript: "npm:^6.0.0" - peerDependencies: - webpack: ^5.1.0 - checksum: 10c0/a667dd226b26f148584a35fb705f5af926d872584912cf9fd203c14f2b3a68f473a1f5cf768ec1dd5da23820823b850e5d50458b685c468e4a224b25c12a15b4 - languageName: node - linkType: hard - "core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.36.1": version: 3.36.1 resolution: "core-js-compat@npm:3.36.1" @@ -15217,7 +14552,7 @@ __metadata: languageName: node linkType: hard -"core-js-pure@npm:^3.23.3, core-js-pure@npm:^3.30.2": +"core-js-pure@npm:^3.30.2": version: 3.31.1 resolution: "core-js-pure@npm:3.31.1" checksum: 10c0/58e126c2fb3d2758f29f947edc9a561b367189d158f98bfdf6169a7fafbbafc61ae4a9c69df6ed48a7b3985727c60eead82b2072f66f5ca0d911b9b4c74cbb8c @@ -15257,7 +14592,7 @@ __metadata: languageName: node linkType: hard -"cosmiconfig@npm:^7.0.0, cosmiconfig@npm:^7.0.1": +"cosmiconfig@npm:^7.0.0": version: 7.1.0 resolution: "cosmiconfig@npm:7.1.0" dependencies: @@ -15477,16 +14812,7 @@ __metadata: languageName: node linkType: hard -"css-declaration-sorter@npm:^6.3.1": - version: 6.4.0 - resolution: "css-declaration-sorter@npm:6.4.0" - peerDependencies: - postcss: ^8.0.9 - checksum: 10c0/aef4d5927e576bae04349457be0607af44525cf5f4b28a91843c7b7f28fcbb302ba149385bb0e2172380556994e31680c5177b42d03502c417789b139e20cbc2 - languageName: node - linkType: hard - -"css-loader@npm:6.11.0, css-loader@npm:^6.7.1": +"css-loader@npm:6.11.0": version: 6.11.0 resolution: "css-loader@npm:6.11.0" dependencies: @@ -15510,48 +14836,6 @@ __metadata: languageName: node linkType: hard -"css-minimizer-webpack-plugin@npm:5.0.1": - version: 5.0.1 - resolution: "css-minimizer-webpack-plugin@npm:5.0.1" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.18" - cssnano: "npm:^6.0.1" - jest-worker: "npm:^29.4.3" - postcss: "npm:^8.4.24" - schema-utils: "npm:^4.0.1" - serialize-javascript: "npm:^6.0.1" - peerDependencies: - webpack: ^5.0.0 - peerDependenciesMeta: - "@parcel/css": - optional: true - "@swc/css": - optional: true - clean-css: - optional: true - csso: - optional: true - esbuild: - optional: true - lightningcss: - optional: true - checksum: 10c0/1792259e18f7c5ee25b6bbf60b38b64201747add83d1f751c8c654159b46ebacd0d1103d35f17d97197033e21e02d2ba4a4e9aa14c9c0d067b7c7653c721814e - languageName: node - linkType: hard - -"css-select@npm:^4.1.3": - version: 4.3.0 - resolution: "css-select@npm:4.3.0" - dependencies: - boolbase: "npm:^1.0.0" - css-what: "npm:^6.0.1" - domhandler: "npm:^4.3.1" - domutils: "npm:^2.8.0" - nth-check: "npm:^2.0.1" - checksum: 10c0/a489d8e5628e61063d5a8fe0fa1cc7ae2478cb334a388a354e91cf2908154be97eac9fa7ed4dffe87a3e06cf6fcaa6016553115335c4fd3377e13dac7bd5a8e1 - languageName: node - linkType: hard - "css-select@npm:^5.1.0": version: 5.1.0 resolution: "css-select@npm:5.1.0" @@ -15565,27 +14849,7 @@ __metadata: languageName: node linkType: hard -"css-tree@npm:^2.2.1": - version: 2.3.1 - resolution: "css-tree@npm:2.3.1" - dependencies: - mdn-data: "npm:2.0.30" - source-map-js: "npm:^1.0.1" - checksum: 10c0/6f8c1a11d5e9b14bf02d10717fc0351b66ba12594166f65abfbd8eb8b5b490dd367f5c7721db241a3c792d935fc6751fbc09f7e1598d421477ad9fadc30f4f24 - languageName: node - linkType: hard - -"css-tree@npm:~2.2.0": - version: 2.2.1 - resolution: "css-tree@npm:2.2.1" - dependencies: - mdn-data: "npm:2.0.28" - source-map-js: "npm:^1.0.1" - checksum: 10c0/47e87b0f02f8ac22f57eceb65c58011dd142d2158128882a0bf963cf2eabb81a4ebbc2e3790c8289be7919fa8b83750c7b69272bd66772c708143b772ba3c186 - languageName: node - linkType: hard - -"css-what@npm:^6.0.1, css-what@npm:^6.1.0": +"css-what@npm:^6.1.0": version: 6.1.0 resolution: "css-what@npm:6.1.0" checksum: 10c0/a09f5a6b14ba8dcf57ae9a59474722e80f20406c53a61e9aedb0eedc693b135113ffe2983f4efc4b5065ae639442e9ae88df24941ef159c218b231011d733746 @@ -15608,75 +14872,6 @@ __metadata: languageName: node linkType: hard -"cssnano-preset-default@npm:^6.0.1": - version: 6.0.1 - resolution: "cssnano-preset-default@npm:6.0.1" - dependencies: - css-declaration-sorter: "npm:^6.3.1" - cssnano-utils: "npm:^4.0.0" - postcss-calc: "npm:^9.0.0" - postcss-colormin: "npm:^6.0.0" - postcss-convert-values: "npm:^6.0.0" - postcss-discard-comments: "npm:^6.0.0" - postcss-discard-duplicates: "npm:^6.0.0" - postcss-discard-empty: "npm:^6.0.0" - postcss-discard-overridden: "npm:^6.0.0" - postcss-merge-longhand: "npm:^6.0.0" - postcss-merge-rules: "npm:^6.0.1" - postcss-minify-font-values: "npm:^6.0.0" - postcss-minify-gradients: "npm:^6.0.0" - postcss-minify-params: "npm:^6.0.0" - postcss-minify-selectors: "npm:^6.0.0" - postcss-normalize-charset: "npm:^6.0.0" - postcss-normalize-display-values: "npm:^6.0.0" - postcss-normalize-positions: "npm:^6.0.0" - postcss-normalize-repeat-style: "npm:^6.0.0" - postcss-normalize-string: "npm:^6.0.0" - postcss-normalize-timing-functions: "npm:^6.0.0" - postcss-normalize-unicode: "npm:^6.0.0" - postcss-normalize-url: "npm:^6.0.0" - postcss-normalize-whitespace: "npm:^6.0.0" - postcss-ordered-values: "npm:^6.0.0" - postcss-reduce-initial: "npm:^6.0.0" - postcss-reduce-transforms: "npm:^6.0.0" - postcss-svgo: "npm:^6.0.0" - postcss-unique-selectors: "npm:^6.0.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/401a8d0712cca6577df52cf4aac234ff4a946f0f51c0d09e7c518fff389706cff54d702ff22762e834b23401a89b836aef113e69cc66fa5dfa1f361bdd932495 - languageName: node - linkType: hard - -"cssnano-utils@npm:^4.0.0": - version: 4.0.0 - resolution: "cssnano-utils@npm:4.0.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/ca5cb2be5ec8ea624c28f5f54c00a440557afd3c2b25cb568517db44d230833743f3db30729126efe4d7fc616a42718dd76255bbefcb7d3cc7e3ff5989d907b3 - languageName: node - linkType: hard - -"cssnano@npm:^6.0.1": - version: 6.0.1 - resolution: "cssnano@npm:6.0.1" - dependencies: - cssnano-preset-default: "npm:^6.0.1" - lilconfig: "npm:^2.1.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/b73a3a257dd32201ce504cb34b08f1259c8a260b063f58d33e03283149d94ee2ba938d7f9beae1413f0f34e06828759575ade6ae95fa01d199f291e1d4f6d2c2 - languageName: node - linkType: hard - -"csso@npm:^5.0.5": - version: 5.0.5 - resolution: "csso@npm:5.0.5" - dependencies: - css-tree: "npm:~2.2.0" - checksum: 10c0/ab4beb1e97dd7e207c10e9925405b45f15a6cd1b4880a8686ad573aa6d476aed28b4121a666cffd26c37a26179f7b54741f7c257543003bfb244d06a62ad569b - languageName: node - linkType: hard - "cssom@npm:^0.5.0": version: 0.5.0 resolution: "cssom@npm:0.5.0" @@ -15907,7 +15102,7 @@ __metadata: languageName: node linkType: hard -"debounce@npm:^1.2.0, debounce@npm:^1.2.1": +"debounce@npm:^1.2.0": version: 1.2.1 resolution: "debounce@npm:1.2.1" checksum: 10c0/6c9320aa0973fc42050814621a7a8a78146c1975799b5b3cc1becf1f77ba9a5aa583987884230da0842a03f385def452fad5d60db97c3d1c8b824e38a8edf500 @@ -16002,7 +15197,7 @@ __metadata: languageName: node linkType: hard -"dedent@npm:0.7.0, dedent@npm:^0.7.0": +"dedent@npm:0.7.0": version: 0.7.0 resolution: "dedent@npm:0.7.0" checksum: 10c0/7c3aa00ddfe3e5fcd477958e156156a5137e3bb6ff1493ca05edff4decf29a90a057974cc77e75951f8eb801c1816cb45aea1f52d628cdd000b82b36ab839d1b @@ -16094,15 +15289,6 @@ __metadata: languageName: node linkType: hard -"default-gateway@npm:^6.0.3": - version: 6.0.3 - resolution: "default-gateway@npm:6.0.3" - dependencies: - execa: "npm:^5.0.0" - checksum: 10c0/5184f9e6e105d24fb44ade9e8741efa54bb75e84625c1ea78c4ef8b81dff09ca52d6dbdd1185cf0dc655bb6b282a64fffaf7ed2dd561b8d9ad6f322b1f039aba - languageName: node - linkType: hard - "defaults@npm:^1.0.3": version: 1.0.4 resolution: "defaults@npm:1.0.4" @@ -16199,13 +15385,6 @@ __metadata: languageName: node linkType: hard -"depd@npm:~1.1.2": - version: 1.1.2 - resolution: "depd@npm:1.1.2" - checksum: 10c0/acb24aaf936ef9a227b6be6d495f0d2eb20108a9a6ad40585c5bda1a897031512fef6484e4fdbb80bd249fdaa82841fa1039f416ece03188e677ba11bcfda249 - languageName: node - linkType: hard - "dependency-cruiser@npm:16.3.2": version: 16.3.2 resolution: "dependency-cruiser@npm:16.3.2" @@ -16400,22 +15579,6 @@ __metadata: languageName: node linkType: hard -"dns-equal@npm:^1.0.0": - version: 1.0.0 - resolution: "dns-equal@npm:1.0.0" - checksum: 10c0/da966e5275ac50546e108af6bc29aaae2164d2ae96d60601b333c4a3aff91f50b6ca14929cf91f20a9cad1587b356323e300cea3ff6588a6a816988485f445f1 - languageName: node - linkType: hard - -"dns-packet@npm:^5.2.2": - version: 5.6.0 - resolution: "dns-packet@npm:5.6.0" - dependencies: - "@leichtgewicht/ip-codec": "npm:^2.0.1" - checksum: 10c0/b458d9c8c9f346fdf1d6e88998dc29815f1eac51c05061510b903b9b882d48cac95b132c5c33eeb330665a7c85227a922767a3eb72ce7be143964a1cce63b770 - languageName: node - linkType: hard - "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -16448,15 +15611,6 @@ __metadata: languageName: node linkType: hard -"dom-converter@npm:^0.2.0": - version: 0.2.0 - resolution: "dom-converter@npm:0.2.0" - dependencies: - utila: "npm:~0.4" - checksum: 10c0/e96aa63bd8c6ee3cd9ce19c3aecfc2c42e50a460e8087114794d4f5ecf3a4f052b34ea3bf2d73b5d80b4da619073b49905e6d7d788ceb7814ca4c29be5354a11 - languageName: node - linkType: hard - "dom-serializer@npm:^1.0.1": version: 1.4.1 resolution: "dom-serializer@npm:1.4.1" @@ -16511,7 +15665,7 @@ __metadata: languageName: node linkType: hard -"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.3.1": +"domhandler@npm:^4.2.0": version: 4.3.1 resolution: "domhandler@npm:4.3.1" dependencies: @@ -16529,7 +15683,7 @@ __metadata: languageName: node linkType: hard -"domutils@npm:^2.4.2, domutils@npm:^2.5.2, domutils@npm:^2.8.0": +"domutils@npm:^2.4.2": version: 2.8.0 resolution: "domutils@npm:2.8.0" dependencies: @@ -16588,15 +15742,6 @@ __metadata: languageName: node linkType: hard -"dotenv-defaults@npm:^2.0.2": - version: 2.0.2 - resolution: "dotenv-defaults@npm:2.0.2" - dependencies: - dotenv: "npm:^8.2.0" - checksum: 10c0/14b7b8f6c21a30404106384398728746e63405bfeabe47ef7aadd0e81de49986d5896a612e5b1acddf655af6472a24947b7b113aa3ef3270a2877afa9c5bd287 - languageName: node - linkType: hard - "dotenv-expand@npm:^10.0.0, dotenv-expand@npm:~10.0.0": version: 10.0.0 resolution: "dotenv-expand@npm:10.0.0" @@ -16604,17 +15749,6 @@ __metadata: languageName: node linkType: hard -"dotenv-webpack@npm:8.1.0": - version: 8.1.0 - resolution: "dotenv-webpack@npm:8.1.0" - dependencies: - dotenv-defaults: "npm:^2.0.2" - peerDependencies: - webpack: ^4 || ^5 - checksum: 10c0/7a64587fc96eba8e4ffccf56d6af09606611a32bc5cf04a37057b8c2881bcd11bf43c3395404581be734ae7fd2788471ceac76cb3d0ba1283e675223f98e5816 - languageName: node - linkType: hard - "dotenv@npm:16.4.5, dotenv@npm:^16.0.0": version: 16.4.5 resolution: "dotenv@npm:16.4.5" @@ -16657,7 +15791,7 @@ __metadata: languageName: node linkType: hard -"duplexer@npm:^0.1.1, duplexer@npm:^0.1.2": +"duplexer@npm:^0.1.1": version: 0.1.2 resolution: "duplexer@npm:0.1.2" checksum: 10c0/c57bcd4bdf7e623abab2df43a7b5b23d18152154529d166c1e0da6bee341d84c432d157d7e97b32fecb1bf3a8b8857dd85ed81a915789f550637ed25b8e64fc2 @@ -16835,17 +15969,6 @@ __metadata: languageName: node linkType: hard -"endent@npm:^2.0.1": - version: 2.1.0 - resolution: "endent@npm:2.1.0" - dependencies: - dedent: "npm:^0.7.0" - fast-json-parse: "npm:^1.0.3" - objectorarray: "npm:^1.0.5" - checksum: 10c0/8cd6dae45e693ae2b2cbff2384348d3a5e2a06cc0396dddca8165e46bd2fd8d5394d44d338ba653bbfce4aead90eca1ec1abe7203843c84155c645d283b6b884 - languageName: node - linkType: hard - "enhanced-resolve@npm:5.16.1": version: 5.16.1 resolution: "enhanced-resolve@npm:5.16.1" @@ -16856,7 +15979,7 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.17.0, enhanced-resolve@npm:^5.7.0": +"enhanced-resolve@npm:^5.7.0": version: 5.17.0 resolution: "enhanced-resolve@npm:5.17.0" dependencies: @@ -16940,15 +16063,6 @@ __metadata: languageName: node linkType: hard -"error-stack-parser@npm:^2.0.6": - version: 2.1.4 - resolution: "error-stack-parser@npm:2.1.4" - dependencies: - stackframe: "npm:^1.3.4" - checksum: 10c0/7679b780043c98b01fc546725484e0cfd3071bf5c906bbe358722972f04abf4fc3f0a77988017665bab367f6ef3fc2d0185f7528f45966b83e7c99c02d5509b9 - languageName: node - linkType: hard - "es-abstract@npm:^1.20.4, es-abstract@npm:^1.21.2, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3": version: 1.23.3 resolution: "es-abstract@npm:1.23.3" @@ -17072,13 +16186,6 @@ __metadata: languageName: node linkType: hard -"es-module-lexer@npm:^1.2.1, es-module-lexer@npm:^1.4.1": - version: 1.4.1 - resolution: "es-module-lexer@npm:1.4.1" - checksum: 10c0/b7260a138668554d3f0ddcc728cb4b60c2fa463f15545cf155ecbdd5450a1348952d58298a7f48642e900ee579f21d7f5304b6b3c61b3d9fc2d4b2109b5a9dff - languageName: node - linkType: hard - "es-object-atoms@npm:^1.0.0": version: 1.0.0 resolution: "es-object-atoms@npm:1.0.0" @@ -17822,7 +16929,7 @@ __metadata: languageName: node linkType: hard -"events@npm:^3.0.0, events@npm:^3.2.0, events@npm:^3.3.0": +"events@npm:^3.0.0, events@npm:^3.3.0": version: 3.3.0 resolution: "events@npm:3.3.0" checksum: 10c0/d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 @@ -18115,7 +17222,7 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:3.3.2, fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.12, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0, fast-glob@npm:^3.3.2": +"fast-glob@npm:3.3.2, fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.12, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": version: 3.3.2 resolution: "fast-glob@npm:3.3.2" dependencies: @@ -18128,7 +17235,7 @@ __metadata: languageName: node linkType: hard -"fast-json-parse@npm:1.0.3, fast-json-parse@npm:^1.0.3": +"fast-json-parse@npm:1.0.3": version: 1.0.3 resolution: "fast-json-parse@npm:1.0.3" checksum: 10c0/2c58c7a0f7f1725c9da1272839f9bee3ccc13b77672b18ab4ac470c707999bca39828cd7e79b87c73017f21c3ddff37992d03fa2fd2da124d9bd06c1d02c9b7e @@ -18207,13 +17314,6 @@ __metadata: languageName: node linkType: hard -"fastest-levenshtein@npm:^1.0.12": - version: 1.0.16 - resolution: "fastest-levenshtein@npm:1.0.16" - checksum: 10c0/7e3d8ae812a7f4fdf8cad18e9cde436a39addf266a5986f653ea0d81e0de0900f50c0f27c6d5aff3f686bcb48acbd45be115ae2216f36a6a13a7dbbf5cad878b - languageName: node - linkType: hard - "fastify-plugin@npm:^4.0.0, fastify-plugin@npm:^4.5.0": version: 4.5.0 resolution: "fastify-plugin@npm:4.5.0" @@ -18265,7 +17365,7 @@ __metadata: languageName: node linkType: hard -"faye-websocket@npm:0.11.4, faye-websocket@npm:^0.11.3": +"faye-websocket@npm:0.11.4": version: 0.11.4 resolution: "faye-websocket@npm:0.11.4" dependencies: @@ -18429,7 +17529,7 @@ __metadata: languageName: node linkType: hard -"find-cache-dir@npm:^3.0.0, find-cache-dir@npm:^3.3.1": +"find-cache-dir@npm:^3.0.0": version: 3.3.2 resolution: "find-cache-dir@npm:3.3.2" dependencies: @@ -18638,29 +17738,6 @@ __metadata: languageName: node linkType: hard -"fork-ts-checker-webpack-plugin@npm:^8.0.0": - version: 8.0.0 - resolution: "fork-ts-checker-webpack-plugin@npm:8.0.0" - dependencies: - "@babel/code-frame": "npm:^7.16.7" - chalk: "npm:^4.1.2" - chokidar: "npm:^3.5.3" - cosmiconfig: "npm:^7.0.1" - deepmerge: "npm:^4.2.2" - fs-extra: "npm:^10.0.0" - memfs: "npm:^3.4.1" - minimatch: "npm:^3.0.4" - node-abort-controller: "npm:^3.0.1" - schema-utils: "npm:^3.1.1" - semver: "npm:^7.3.5" - tapable: "npm:^2.2.1" - peerDependencies: - typescript: ">3.6.0" - webpack: ^5.11.0 - checksum: 10c0/1a2bb9bbd3e943e3b3a45d7fa9e8383698f5fea1ba28f7d18c8372c804460c2f13af53f791360b973fddafd3e88de7af59082c3cb3375f4e7c3365cd85accedc - languageName: node - linkType: hard - "form-data@npm:^2.5.0": version: 2.5.1 resolution: "form-data@npm:2.5.1" @@ -18748,17 +17825,6 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^10.0.0": - version: 10.1.0 - resolution: "fs-extra@npm:10.1.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/5f579466e7109719d162a9249abbeffe7f426eb133ea486e020b89bc6d67a741134076bf439983f2eb79276ceaf6bd7b7c1e43c3fd67fe889863e69072fb0a5e - languageName: node - linkType: hard - "fs-extra@npm:^9.1.0": version: 9.1.0 resolution: "fs-extra@npm:9.1.0" @@ -18789,13 +17855,6 @@ __metadata: languageName: node linkType: hard -"fs-monkey@npm:^1.0.4": - version: 1.0.4 - resolution: "fs-monkey@npm:1.0.4" - checksum: 10c0/eeb2457ec50f7202c44273de2a42b50868c8e6b2ab4825d517947143d4e727c028e24f6d0f46e6f3e7a149a1c9e7d8b3ca28243c3b10366d280a08016483e829 - languageName: node - linkType: hard - "fs-readdir-recursive@npm:^1.1.0": version: 1.1.0 resolution: "fs-readdir-recursive@npm:1.1.0" @@ -19207,7 +18266,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^6.0.1, glob-parent@npm:^6.0.2": +"glob-parent@npm:^6.0.2": version: 6.0.2 resolution: "glob-parent@npm:6.0.2" dependencies: @@ -19345,19 +18404,6 @@ __metadata: languageName: node linkType: hard -"globby@npm:^13.1.1": - version: 13.2.2 - resolution: "globby@npm:13.2.2" - dependencies: - dir-glob: "npm:^3.0.1" - fast-glob: "npm:^3.3.0" - ignore: "npm:^5.2.4" - merge2: "npm:^1.4.1" - slash: "npm:^4.0.0" - checksum: 10c0/a8d7cc7cbe5e1b2d0f81d467bbc5bc2eac35f74eaded3a6c85fc26d7acc8e6de22d396159db8a2fc340b8a342e74cac58de8f4aee74146d3d146921a76062664 - languageName: node - linkType: hard - "goober@npm:^2.1.10": version: 2.1.13 resolution: "goober@npm:2.1.13" @@ -19429,7 +18475,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:4.2.11, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:4.2.11, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 @@ -19585,22 +18631,6 @@ __metadata: languageName: node linkType: hard -"gzip-size@npm:^6.0.0": - version: 6.0.0 - resolution: "gzip-size@npm:6.0.0" - dependencies: - duplexer: "npm:^0.1.2" - checksum: 10c0/4ccb924626c82125897a997d1c84f2377846a6ef57fbee38f7c0e6b41387fba4d00422274440747b58008b5d60114bac2349c2908e9aba55188345281af40a3f - languageName: node - linkType: hard - -"handle-thing@npm:^2.0.0": - version: 2.0.1 - resolution: "handle-thing@npm:2.0.1" - checksum: 10c0/7ae34ba286a3434f1993ebd1cc9c9e6b6d8ea672182db28b1afc0a7119229552fa7031e3e5f3cd32a76430ece4e94b7da6f12af2eb39d6239a7693e4bd63a998 - languageName: node - linkType: hard - "handlebars@npm:^4.7.7": version: 4.7.7 resolution: "handlebars@npm:4.7.7" @@ -19824,18 +18854,6 @@ __metadata: languageName: node linkType: hard -"hpack.js@npm:^2.1.6": - version: 2.1.6 - resolution: "hpack.js@npm:2.1.6" - dependencies: - inherits: "npm:^2.0.1" - obuf: "npm:^1.0.0" - readable-stream: "npm:^2.0.1" - wbuf: "npm:^1.1.0" - checksum: 10c0/55b9e824430bab82a19d079cb6e33042d7d0640325678c9917fcc020c61d8a08ca671b6c942c7f0aae9bb6e4b67ffb50734a72f9e21d66407c3138c1983b70f0 - languageName: node - linkType: hard - "html-encoding-sniffer@npm:^3.0.0": version: 3.0.0 resolution: "html-encoding-sniffer@npm:3.0.0" @@ -19854,37 +18872,20 @@ __metadata: languageName: node linkType: hard -"html-entities@npm:^2.1.0, html-entities@npm:^2.3.2, html-entities@npm:^2.5.2": +"html-entities@npm:^2.5.2": version: 2.5.2 resolution: "html-entities@npm:2.5.2" checksum: 10c0/f20ffb4326606245c439c231de40a7c560607f639bf40ffbfb36b4c70729fd95d7964209045f1a4e62fe17f2364cef3d6e49b02ea09016f207fde51c2211e481 languageName: node linkType: hard -"html-escaper@npm:^2.0.0, html-escaper@npm:^2.0.2": +"html-escaper@npm:^2.0.0": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" checksum: 10c0/208e8a12de1a6569edbb14544f4567e6ce8ecc30b9394fcaa4e7bb1e60c12a7c9a1ed27e31290817157e8626f3a4f29e76c8747030822eb84a6abb15c255f0a0 languageName: node linkType: hard -"html-minifier-terser@npm:^6.0.2": - version: 6.1.0 - resolution: "html-minifier-terser@npm:6.1.0" - dependencies: - camel-case: "npm:^4.1.2" - clean-css: "npm:^5.2.2" - commander: "npm:^8.3.0" - he: "npm:^1.2.0" - param-case: "npm:^3.0.4" - relateurl: "npm:^0.2.7" - terser: "npm:^5.10.0" - bin: - html-minifier-terser: cli.js - checksum: 10c0/1aa4e4f01cf7149e3ac5ea84fb7a1adab86da40d38d77a6fff42852b5ee3daccb78b615df97264e3a6a5c33e57f0c77f471d607ca1e1debd1dab9b58286f4b5a - languageName: node - linkType: hard - "html-minifier@npm:^4.0.0": version: 4.0.0 resolution: "html-minifier@npm:4.0.0" @@ -19935,27 +18936,6 @@ __metadata: languageName: node linkType: hard -"html-webpack-plugin@npm:5.6.0, html-webpack-plugin@npm:^5.5.0": - version: 5.6.0 - resolution: "html-webpack-plugin@npm:5.6.0" - dependencies: - "@types/html-minifier-terser": "npm:^6.0.0" - html-minifier-terser: "npm:^6.0.2" - lodash: "npm:^4.17.21" - pretty-error: "npm:^4.0.0" - tapable: "npm:^2.0.0" - peerDependencies: - "@rspack/core": 0.x || 1.x - webpack: ^5.20.0 - peerDependenciesMeta: - "@rspack/core": - optional: true - webpack: - optional: true - checksum: 10c0/50d1a0f90d512463ea8d798985d91a7ccc9d5e461713dedb240125b2ff0671f58135dd9355f7969af341ff4725e73b2defbc0984cfdce930887a48506d970002 - languageName: node - linkType: hard - "htmlparser2@npm:^5.0.0": version: 5.0.1 resolution: "htmlparser2@npm:5.0.1" @@ -19968,18 +18948,6 @@ __metadata: languageName: node linkType: hard -"htmlparser2@npm:^6.1.0": - version: 6.1.0 - resolution: "htmlparser2@npm:6.1.0" - dependencies: - domelementtype: "npm:^2.0.1" - domhandler: "npm:^4.0.0" - domutils: "npm:^2.5.2" - entities: "npm:^2.0.0" - checksum: 10c0/3058499c95634f04dc66be8c2e0927cd86799413b2d6989d8ae542ca4dbf5fa948695d02c27d573acf44843af977aec6d9a7bdd0f6faa6b2d99e2a729b2a31b6 - languageName: node - linkType: hard - "htmlparser2@npm:^8.0.1, htmlparser2@npm:^8.0.2": version: 8.0.2 resolution: "htmlparser2@npm:8.0.2" @@ -20011,13 +18979,6 @@ __metadata: languageName: node linkType: hard -"http-deceiver@npm:^1.2.7": - version: 1.2.7 - resolution: "http-deceiver@npm:1.2.7" - checksum: 10c0/8bb9b716f5fc55f54a451da7f49b9c695c3e45498a789634daec26b61e4add7c85613a4a9e53726c39d09de7a163891ecd6eb5809adb64500a840fd86fe81d03 - languageName: node - linkType: hard - "http-errors@npm:2.0.0": version: 2.0.0 resolution: "http-errors@npm:2.0.0" @@ -20031,18 +18992,6 @@ __metadata: languageName: node linkType: hard -"http-errors@npm:~1.6.2": - version: 1.6.3 - resolution: "http-errors@npm:1.6.3" - dependencies: - depd: "npm:~1.1.2" - inherits: "npm:2.0.3" - setprototypeof: "npm:1.1.0" - statuses: "npm:>= 1.4.0 < 2" - checksum: 10c0/17ec4046ee974477778bfdd525936c254b872054703ec2caa4d6f099566b8adade636ae6aeeacb39302c5cd6e28fb407ebd937f500f5010d0b6850750414ff78 - languageName: node - linkType: hard - "http-parser-js@npm:>=0.5.1": version: 0.5.8 resolution: "http-parser-js@npm:0.5.8" @@ -20081,7 +19030,7 @@ __metadata: languageName: node linkType: hard -"http-proxy-middleware@npm:2.0.6, http-proxy-middleware@npm:^2.0.3": +"http-proxy-middleware@npm:2.0.6": version: 2.0.6 resolution: "http-proxy-middleware@npm:2.0.6" dependencies: @@ -20364,16 +19313,9 @@ __metadata: linkType: hard "inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3, inherits@npm:~2.0.4": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 - languageName: node - linkType: hard - -"inherits@npm:2.0.3": - version: 2.0.3 - resolution: "inherits@npm:2.0.3" - checksum: 10c0/6e56402373149ea076a434072671f9982f5fad030c7662be0332122fe6c0fa490acb3cc1010d90b6eff8d640b1167d77674add52dfd1bb85d545cf29e80e73e7 + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 languageName: node linkType: hard @@ -21751,18 +20693,7 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^27.4.5": - version: 27.5.1 - resolution: "jest-worker@npm:27.5.1" - dependencies: - "@types/node": "npm:*" - merge-stream: "npm:^2.0.0" - supports-color: "npm:^8.0.0" - checksum: 10c0/8c4737ffd03887b3c6768e4cc3ca0269c0336c1e4b1b120943958ddb035ed2a0fc6acab6dc99631720a3720af4e708ff84fb45382ad1e83c27946adf3623969b - languageName: node - linkType: hard - -"jest-worker@npm:^29.4.3, jest-worker@npm:^29.7.0": +"jest-worker@npm:^29.7.0": version: 29.7.0 resolution: "jest-worker@npm:29.7.0" dependencies: @@ -22094,7 +21025,7 @@ __metadata: languageName: node linkType: hard -"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": +"json-parse-even-better-errors@npm:^2.3.0": version: 2.3.1 resolution: "json-parse-even-better-errors@npm:2.3.1" checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 @@ -22437,16 +21368,6 @@ __metadata: languageName: node linkType: hard -"launch-editor@npm:^2.6.0": - version: 2.6.0 - resolution: "launch-editor@npm:2.6.0" - dependencies: - picocolors: "npm:^1.0.0" - shell-quote: "npm:^1.7.3" - checksum: 10c0/4802b9569d8a1d477f8279a994094b415d89eb39dadbc568193bc366d64ac13827c8860539ee336fa6135a06596a9b8c8265cebac35c3fa36a2214d0eea38890 - languageName: node - linkType: hard - "lazy-ass@npm:^1.6.0": version: 1.6.0 resolution: "lazy-ass@npm:1.6.0" @@ -22626,13 +21547,6 @@ __metadata: languageName: node linkType: hard -"lilconfig@npm:^2.1.0": - version: 2.1.0 - resolution: "lilconfig@npm:2.1.0" - checksum: 10c0/64645641aa8d274c99338e130554abd6a0190533c0d9eb2ce7ebfaf2e05c7d9961f3ffe2bfa39efd3b60c521ba3dd24fa236fe2775fc38501bf82bf49d4678b8 - languageName: node - linkType: hard - "limiter@npm:^1.1.5": version: 1.1.5 resolution: "limiter@npm:1.1.5" @@ -22749,14 +21663,7 @@ __metadata: languageName: node linkType: hard -"loader-runner@npm:^4.2.0": - version: 4.3.0 - resolution: "loader-runner@npm:4.3.0" - checksum: 10c0/a44d78aae0907a72f73966fe8b82d1439c8c485238bd5a864b1b9a2a3257832effa858790241e6b37876b5446a78889adf2fcc8dd897ce54c089ecc0a0ce0bf0 - languageName: node - linkType: hard - -"loader-utils@npm:^2.0.0, loader-utils@npm:^2.0.4": +"loader-utils@npm:^2.0.0": version: 2.0.4 resolution: "loader-utils@npm:2.0.4" dependencies: @@ -22926,13 +21833,6 @@ __metadata: languageName: node linkType: hard -"lodash.memoize@npm:^4.1.2": - version: 4.1.2 - resolution: "lodash.memoize@npm:4.1.2" - checksum: 10c0/c8713e51eccc650422716a14cece1809cfe34bc5ab5e242b7f8b4e2241c2483697b971a604252807689b9dd69bfe3a98852e19a5b89d506b000b4187a1285df8 - languageName: node - linkType: hard - "lodash.merge@npm:4.6.2, lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -22961,13 +21861,6 @@ __metadata: languageName: node linkType: hard -"lodash.uniq@npm:^4.5.0": - version: 4.5.0 - resolution: "lodash.uniq@npm:4.5.0" - checksum: 10c0/262d400bb0952f112162a320cc4a75dea4f66078b9e7e3075ffbc9c6aa30b3e9df3cf20e7da7d566105e1ccf7804e4fbd7d804eee0b53de05d83f16ffbf41c5e - languageName: node - linkType: hard - "lodash@npm:4.17.21, lodash@npm:^4.11.2, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:~4.17.0": version: 4.17.21 resolution: "lodash@npm:4.17.21" @@ -23386,20 +22279,6 @@ __metadata: languageName: node linkType: hard -"mdn-data@npm:2.0.28": - version: 2.0.28 - resolution: "mdn-data@npm:2.0.28" - checksum: 10c0/20000932bc4cd1cde9cba4e23f08cc4f816398af4c15ec81040ed25421d6bf07b5cf6b17095972577fb498988f40f4cb589e3169b9357bb436a12d8e07e5ea7b - languageName: node - linkType: hard - -"mdn-data@npm:2.0.30": - version: 2.0.30 - resolution: "mdn-data@npm:2.0.30" - checksum: 10c0/a2c472ea16cee3911ae742593715aa4c634eb3d4b9f1e6ada0902aa90df13dcbb7285d19435f3ff213ebaa3b2e0c0265c1eb0e3fb278fda7f8919f046a410cd9 - languageName: node - linkType: hard - "media-typer@npm:0.3.0": version: 0.3.0 resolution: "media-typer@npm:0.3.0" @@ -23419,15 +22298,6 @@ __metadata: languageName: node linkType: hard -"memfs@npm:^3.4.1, memfs@npm:^3.4.12, memfs@npm:^3.4.3": - version: 3.5.3 - resolution: "memfs@npm:3.5.3" - dependencies: - fs-monkey: "npm:^1.0.4" - checksum: 10c0/038fc81bce17ea92dde15aaa68fa0fdaf4960c721ce3ffc7c2cb87a259333f5159784ea48b3b72bf9e054254d9d0d0d5209d0fdc3d07d08653a09933b168fbd7 - languageName: node - linkType: hard - "memjs@npm:1.3.2": version: 1.3.2 resolution: "memjs@npm:1.3.2" @@ -23568,7 +22438,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:2.1.35, mime-types@npm:^2.1.12, mime-types@npm:^2.1.25, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:2.1.35, mime-types@npm:^2.1.12, mime-types@npm:^2.1.25, mime-types@npm:^2.1.27, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -24353,13 +23223,6 @@ __metadata: languageName: node linkType: hard -"mrmime@npm:^1.0.0": - version: 1.0.1 - resolution: "mrmime@npm:1.0.1" - checksum: 10c0/ab071441da76fd23b3b0d1823d77aacf8679d379a4a94cacd83e487d3d906763b277f3203a594c613602e31ab5209c26a8119b0477c4541ef8555b293a9db6d3 - languageName: node - linkType: hard - "ms@npm:2.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" @@ -24415,18 +23278,6 @@ __metadata: languageName: node linkType: hard -"multicast-dns@npm:^7.2.5": - version: 7.2.5 - resolution: "multicast-dns@npm:7.2.5" - dependencies: - dns-packet: "npm:^5.2.2" - thunky: "npm:^1.0.2" - bin: - multicast-dns: cli.js - checksum: 10c0/5120171d4bdb1577764c5afa96e413353bff530d1b37081cb29cccc747f989eb1baf40574fe8e27060fc1aef72b59c042f72b9b208413de33bcf411343c69057 - languageName: node - linkType: hard - "multimatch@npm:5.0.0": version: 5.0.0 resolution: "multimatch@npm:5.0.0" @@ -24493,7 +23344,7 @@ __metadata: languageName: node linkType: hard -"neo-async@npm:^2.5.0, neo-async@npm:^2.6.0, neo-async@npm:^2.6.1, neo-async@npm:^2.6.2": +"neo-async@npm:^2.5.0, neo-async@npm:^2.6.0, neo-async@npm:^2.6.1": version: 2.6.2 resolution: "neo-async@npm:2.6.2" checksum: 10c0/c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d @@ -24528,13 +23379,6 @@ __metadata: languageName: node linkType: hard -"node-abort-controller@npm:^3.0.1": - version: 3.1.1 - resolution: "node-abort-controller@npm:3.1.1" - checksum: 10c0/f7ad0e7a8e33809d4f3a0d1d65036a711c39e9d23e0319d80ebe076b9a3b4432b4d6b86a7fab65521de3f6872ffed36fc35d1327487c48eb88c517803403eda3 - languageName: node - linkType: hard - "node-addon-api@npm:^5.1.0": version: 5.1.0 resolution: "node-addon-api@npm:5.1.0" @@ -24626,7 +23470,7 @@ __metadata: languageName: node linkType: hard -"node-forge@npm:^1, node-forge@npm:^1.3.1": +"node-forge@npm:^1.3.1": version: 1.3.1 resolution: "node-forge@npm:1.3.1" checksum: 10c0/e882819b251a4321f9fc1d67c85d1501d3004b4ee889af822fd07f64de3d1a8e272ff00b689570af0465d65d6bf5074df9c76e900e0aff23e60b847f2a46fbe8 @@ -25335,20 +24179,6 @@ __metadata: languageName: node linkType: hard -"objectorarray@npm:^1.0.5": - version: 1.0.5 - resolution: "objectorarray@npm:1.0.5" - checksum: 10c0/3d3db66e2052df85617ac31b98f8e51a7a883ebce24123018dacf286712aa513a0a84e82b4a6bef68889d5fc39cf08e630ee78df013023fc5161e1fdf3eaaa5a - languageName: node - linkType: hard - -"obuf@npm:^1.0.0, obuf@npm:^1.1.2": - version: 1.1.2 - resolution: "obuf@npm:1.1.2" - checksum: 10c0/520aaac7ea701618eacf000fc96ae458e20e13b0569845800fc582f81b386731ab22d55354b4915d58171db00e79cfcd09c1638c02f89577ef092b38c65b7d81 - languageName: node - linkType: hard - "on-exit-leak-free@npm:^2.1.0": version: 2.1.0 resolution: "on-exit-leak-free@npm:2.1.0" @@ -25399,7 +24229,7 @@ __metadata: languageName: node linkType: hard -"open@npm:^8.0.4, open@npm:^8.0.9, open@npm:^8.4.0": +"open@npm:^8.0.4, open@npm:^8.4.0": version: 8.4.2 resolution: "open@npm:8.4.2" dependencies: @@ -25410,15 +24240,6 @@ __metadata: languageName: node linkType: hard -"opener@npm:^1.5.2": - version: 1.5.2 - resolution: "opener@npm:1.5.2" - bin: - opener: bin/opener-bin.js - checksum: 10c0/dd56256ab0cf796585617bc28e06e058adf09211781e70b264c76a1dbe16e90f868c974e5bf5309c93469157c7d14b89c35dc53fe7293b0e40b4d2f92073bc79 - languageName: node - linkType: hard - "optimism@npm:^0.18.0": version: 0.18.0 resolution: "optimism@npm:0.18.0" @@ -25667,16 +24488,6 @@ __metadata: languageName: node linkType: hard -"p-retry@npm:^4.5.0": - version: 4.6.2 - resolution: "p-retry@npm:4.6.2" - dependencies: - "@types/retry": "npm:0.12.0" - retry: "npm:^0.13.1" - checksum: 10c0/d58512f120f1590cfedb4c2e0c42cb3fa66f3cea8a4646632fcb834c56055bb7a6f138aa57b20cc236fb207c9d694e362e0b5c2b14d9b062f67e8925580c73b0 - languageName: node - linkType: hard - "p-timeout@npm:^3.2.0": version: 3.2.0 resolution: "p-timeout@npm:3.2.0" @@ -25947,7 +24758,7 @@ __metadata: languageName: node linkType: hard -"parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": +"parseurl@npm:~1.3.3": version: 1.3.3 resolution: "parseurl@npm:1.3.3" checksum: 10c0/90dd4760d6f6174adb9f20cf0965ae12e23879b5f5464f38e92fce8073354341e4b3b76fa3d878351efe7d01e617121955284cfd002ab087fba1a0726ec0b4f5 @@ -26404,154 +25215,6 @@ __metadata: languageName: node linkType: hard -"postcss-calc@npm:^9.0.0": - version: 9.0.1 - resolution: "postcss-calc@npm:9.0.1" - dependencies: - postcss-selector-parser: "npm:^6.0.11" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.2 - checksum: 10c0/e0df07337162dbcaac5d6e030c7fd289e21da8766a9daca5d6b2b3c8094bb524ae5d74c70048ea7fe5fe4960ce048c60ac97922d917c3bbff34f58e9d2b0eb0e - languageName: node - linkType: hard - -"postcss-colormin@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-colormin@npm:6.0.0" - dependencies: - browserslist: "npm:^4.21.4" - caniuse-api: "npm:^3.0.0" - colord: "npm:^2.9.1" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/b05763b68f7f23333f408734f13be4bde641934ecbde25ac7d7fa648ab5e826716bffac0193067b317e861c6dabad81db9c012e865a83f81b6bce5c7e25c0fdd - languageName: node - linkType: hard - -"postcss-convert-values@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-convert-values@npm:6.0.0" - dependencies: - browserslist: "npm:^4.21.4" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/8c20d31a39e0ddf7db4fde0da62e293279b5ee84c36919f2e5760650fa6f2984f1a40bfdbe8d1f7829bd37b17e5e589535f0aaaf71d4df29ad203cef830b9d7a - languageName: node - linkType: hard - -"postcss-discard-comments@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-discard-comments@npm:6.0.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/c8792cd99c7696b21917d55937e02fb854a82ee308edf7564f18ad19bec4abf4756ba234e17f7d129d6b0dbaf6253bcddc435b1aeee190d4d26dcc2448f5453a - languageName: node - linkType: hard - -"postcss-discard-duplicates@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-discard-duplicates@npm:6.0.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/5fb0de3b187b09538a8c10f25bcc3e7b0865337a96a0599f8213864f0d52812f6c90142d170258293a30484b95e096dee28fc8fddb302016f93d4a8d269bb18f - languageName: node - linkType: hard - -"postcss-discard-empty@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-discard-empty@npm:6.0.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/5dfe01f93ee2bb85e71f7832498bd051b772b9c724a5630f749237b07a14b47c2b2800b4215ab4cf0d8cba29552725b40334f3ef9d349f7aacf410ad351715dc - languageName: node - linkType: hard - -"postcss-discard-overridden@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-discard-overridden@npm:6.0.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/3a0c91241a95a887ef10227c761fb2c48870966bda5530de635002e485abc2743dfbfdc96e3b6a21f10c6231f0cfbe1a0eae0a01a89629d64a711eab3ee008c6 - languageName: node - linkType: hard - -"postcss-merge-longhand@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-merge-longhand@npm:6.0.0" - dependencies: - postcss-value-parser: "npm:^4.2.0" - stylehacks: "npm:^6.0.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/0b67c590d301ab7f087ea7421e1eac0cccd2ff1c146a2dfa16d3f32b770d12a5999b8c6ea177efc443f4fb9df13b941c401365c634533878eef1982ad9d0bb98 - languageName: node - linkType: hard - -"postcss-merge-rules@npm:^6.0.1": - version: 6.0.1 - resolution: "postcss-merge-rules@npm:6.0.1" - dependencies: - browserslist: "npm:^4.21.4" - caniuse-api: "npm:^3.0.0" - cssnano-utils: "npm:^4.0.0" - postcss-selector-parser: "npm:^6.0.5" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/b6a2a196905cd170757aa7b8bc74dab1fc7e2b2ca6a19c6d355fb7c41ff736023b4176c1008a7049f6a1b24a94a30d066c4e51229c1282a941f7fd6056085af7 - languageName: node - linkType: hard - -"postcss-minify-font-values@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-minify-font-values@npm:6.0.0" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/6b74b1ec19bf76dcae7947c42145cb200b38767680512728f76168ae246db453798760e56111bd28ade9011d3655a79da4b33a93e5349f98fb0c1b22cc65ff36 - languageName: node - linkType: hard - -"postcss-minify-gradients@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-minify-gradients@npm:6.0.0" - dependencies: - colord: "npm:^2.9.1" - cssnano-utils: "npm:^4.0.0" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/59046acd470bee151291ba99421846d776c4ed243acb05a005e74f64f92b968d712d35e727f5e4a90e632d6d6aeb3a01083469f50bfdf1fb9ecae7f4ae52d9b8 - languageName: node - linkType: hard - -"postcss-minify-params@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-minify-params@npm:6.0.0" - dependencies: - browserslist: "npm:^4.21.4" - cssnano-utils: "npm:^4.0.0" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/d4d1469b7ad7fe53900eb19c156ec6dcfeaf71641d29ba4df31f47d8fa8ac700df5b8d3e3768e66d695d5356ed348cea901314653046c8e48422962f165a1933 - languageName: node - linkType: hard - -"postcss-minify-selectors@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-minify-selectors@npm:6.0.0" - dependencies: - postcss-selector-parser: "npm:^6.0.5" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/1cdd3bd231cf25f54ab370d959f727dfcbe839a1d97bcfd65add9df73747a45d299a009ff16111bbe78943e8f81dcf5f84ae4106847b23dd3652de7aadc0b297 - languageName: node - linkType: hard - "postcss-modules-extract-imports@npm:^3.1.0": version: 3.1.0 resolution: "postcss-modules-extract-imports@npm:3.1.0" @@ -26587,178 +25250,22 @@ __metadata: "postcss-modules-values@npm:^4.0.0": version: 4.0.0 - resolution: "postcss-modules-values@npm:4.0.0" - dependencies: - icss-utils: "npm:^5.0.0" - peerDependencies: - postcss: ^8.1.0 - checksum: 10c0/dd18d7631b5619fb9921b198c86847a2a075f32e0c162e0428d2647685e318c487a2566cc8cc669fc2077ef38115cde7a068e321f46fb38be3ad49646b639dbc - languageName: node - linkType: hard - -"postcss-normalize-charset@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-normalize-charset@npm:6.0.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/5232eac7f62097b1d349546182af2db7db34989867c147517cd407ab23c8450558a7f858eb8dac130959dae2d02d3460c5afa510e0ffe22221cb218f2bd79adb - languageName: node - linkType: hard - -"postcss-normalize-display-values@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-normalize-display-values@npm:6.0.0" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/58163258a52610fa0d2b61bd6e872b9a2b25da1f2209cbf34fad3b62a4139fff9e0e6b298dcd1adfe6ac556098aad8b79c387280f3a949180f8fb12e6b41fecf - languageName: node - linkType: hard - -"postcss-normalize-positions@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-normalize-positions@npm:6.0.0" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/de2ced6cfdf2931d7cbc8f9c96bb12487119dba1b454c7ac01fd19f7afdaa9bf6c63f59624281293379ead5a3d5e883007a3f192f02c40ab41528ccc5a399f5c - languageName: node - linkType: hard - -"postcss-normalize-repeat-style@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-normalize-repeat-style@npm:6.0.0" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/1643132094067709ca7d1fa2beededd28565c83bc8a6c2a4dec879a97e1d425ca1293a8832a45732eef12b52960f024330cfb654a8a222fb7ea768a75989c31e - languageName: node - linkType: hard - -"postcss-normalize-string@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-normalize-string@npm:6.0.0" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/d586ce274451229c6a3d625edef882b342ab7702babb632845c8c201c7bcc08481f282000d19d17edb7b5ef0b1982e715a16ab60990d124e937c4aef3304151e - languageName: node - linkType: hard - -"postcss-normalize-timing-functions@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-normalize-timing-functions@npm:6.0.0" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/a70742648cec15eea031096f2ad99c21c79228ce4c4ccc9f63c277c07e9e3add96298cc67b0b1797896507248153e0a662f85f490f53147ded7008b459dd5ba3 - languageName: node - linkType: hard - -"postcss-normalize-unicode@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-normalize-unicode@npm:6.0.0" - dependencies: - browserslist: "npm:^4.21.4" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/cd9b06ed09c29ccc0b2cb222044d7ec49fb710fdd6f0878b26d7f3324478d8271a555ba3d82fc8d9fdcf8671a83c499cdfa09c0e73d4dee928adff4042ed8b22 - languageName: node - linkType: hard - -"postcss-normalize-url@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-normalize-url@npm:6.0.0" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/719a7feee4adf638cc0b4bc204d89485388ca81f0ad0a181a225122f488f956abd29f429d69e5a57fffe93fbd2a22eab7737bd8b55b19979efba26e008b2ec11 - languageName: node - linkType: hard - -"postcss-normalize-whitespace@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-normalize-whitespace@npm:6.0.0" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/8421dd5813c1e555d7c2847dd8b71a5138ee2091341ebd1ea686d5b00cd46d249a29027e142289f873ca7f5fc995b51eb68f9693fec6d61cf951c759d109c37d - languageName: node - linkType: hard - -"postcss-ordered-values@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-ordered-values@npm:6.0.0" - dependencies: - cssnano-utils: "npm:^4.0.0" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/b01352b0ea014e0037a5b8b3bd866696924bfb2cf3b47b73547786a1954e6771c04790fbe4c651bf029bafdbfde70f49e611f9ef309e945f753425841f343017 - languageName: node - linkType: hard - -"postcss-reduce-initial@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-reduce-initial@npm:6.0.0" - dependencies: - browserslist: "npm:^4.21.4" - caniuse-api: "npm:^3.0.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/7cf6340bde9f70c7d9b20bc3ee53e883bf27ed56fcc3bb2a2c736b311d977098a7c3a6b9e4be4d2c159d0042bf7742bb5af59628cd89cf838968dacc5ae15c80 - languageName: node - linkType: hard - -"postcss-reduce-transforms@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-reduce-transforms@npm:6.0.0" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/6da900d22dd8760b8a2ace32013036e3c4c4d9d560c31255eceea54563e3ddb2ca830bc9072fe2a1abacb8c48a008656887fc2f6ba1873e590342ad8e6bc269d - languageName: node - linkType: hard - -"postcss-selector-parser@npm:^6.0.10, postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5": - version: 6.0.13 - resolution: "postcss-selector-parser@npm:6.0.13" - dependencies: - cssesc: "npm:^3.0.0" - util-deprecate: "npm:^1.0.2" - checksum: 10c0/51f099b27f7c7198ea1826470ef0adfa58b3bd3f59b390fda123baa0134880a5fa9720137b6009c4c1373357b144f700b0edac73335d0067422063129371444e - languageName: node - linkType: hard - -"postcss-svgo@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-svgo@npm:6.0.0" + resolution: "postcss-modules-values@npm:4.0.0" dependencies: - postcss-value-parser: "npm:^4.2.0" - svgo: "npm:^3.0.2" + icss-utils: "npm:^5.0.0" peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/ec567cd5e982e3c0393695628bc508b87dcfe4e4b2049930e79e6c629c349fad19403f0d39d76ceda3e0f15ffd065304e76152f397fae2f3f848cdb847a0b564 + postcss: ^8.1.0 + checksum: 10c0/dd18d7631b5619fb9921b198c86847a2a075f32e0c162e0428d2647685e318c487a2566cc8cc669fc2077ef38115cde7a068e321f46fb38be3ad49646b639dbc languageName: node linkType: hard -"postcss-unique-selectors@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-unique-selectors@npm:6.0.0" +"postcss-selector-parser@npm:^6.0.10, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4": + version: 6.0.13 + resolution: "postcss-selector-parser@npm:6.0.13" dependencies: - postcss-selector-parser: "npm:^6.0.5" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/63e81a7965ff8874fdf39ef0ae0f12cc21352548733538f52eda73f0ed5a7fab7fda9090facf50395d07873c5a6f02d31a6171fd476c80858b03090ec4c61d31 + cssesc: "npm:^3.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 10c0/51f099b27f7c7198ea1826470ef0adfa58b3bd3f59b390fda123baa0134880a5fa9720137b6009c4c1373357b144f700b0edac73335d0067422063129371444e languageName: node linkType: hard @@ -26769,7 +25276,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.2.14, postcss@npm:^8.4.24, postcss@npm:^8.4.33, postcss@npm:^8.4.38": +"postcss@npm:^8.2.14, postcss@npm:^8.4.33, postcss@npm:^8.4.38": version: 8.4.38 resolution: "postcss@npm:8.4.38" dependencies: @@ -26834,7 +25341,7 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^2, prettier@npm:^2.6.2, prettier@npm:^2.8.0, prettier@npm:^2.8.3": +"prettier@npm:^2, prettier@npm:^2.8.0, prettier@npm:^2.8.3": version: 2.8.8 resolution: "prettier@npm:2.8.8" bin: @@ -26850,16 +25357,6 @@ __metadata: languageName: node linkType: hard -"pretty-error@npm:^4.0.0": - version: 4.0.0 - resolution: "pretty-error@npm:4.0.0" - dependencies: - lodash: "npm:^4.17.20" - renderkid: "npm:^3.0.0" - checksum: 10c0/dc292c087e2857b2e7592784ab31e37a40f3fa918caa11eba51f9fb2853e1d4d6e820b219917e35f5721d833cfd20fdf4f26ae931a90fd1ad0cae2125c345138 - languageName: node - linkType: hard - "pretty-format@npm:^27.0.2": version: 27.5.1 resolution: "pretty-format@npm:27.5.1" @@ -27382,7 +25879,7 @@ __metadata: languageName: node linkType: hard -"randombytes@npm:^2.0.0, randombytes@npm:^2.0.1, randombytes@npm:^2.0.5, randombytes@npm:^2.1.0": +"randombytes@npm:^2.0.0, randombytes@npm:^2.0.1, randombytes@npm:^2.0.5": version: 2.1.0 resolution: "randombytes@npm:2.1.0" dependencies: @@ -27401,7 +25898,7 @@ __metadata: languageName: node linkType: hard -"range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": +"range-parser@npm:~1.2.1": version: 1.2.1 resolution: "range-parser@npm:1.2.1" checksum: 10c0/96c032ac2475c8027b7a4e9fe22dc0dfe0f6d90b85e496e0f016fbdb99d6d066de0112e680805075bd989905e2123b3b3d002765149294dce0c1f7f01fcc2ea0 @@ -27820,7 +26317,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.5, readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.8, readable-stream@npm:~2.3.6": +"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.5, readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.8, readable-stream@npm:~2.3.6": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" dependencies: @@ -27835,7 +26332,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": +"readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -28179,19 +26676,6 @@ __metadata: languageName: node linkType: hard -"renderkid@npm:^3.0.0": - version: 3.0.0 - resolution: "renderkid@npm:3.0.0" - dependencies: - css-select: "npm:^4.1.3" - dom-converter: "npm:^0.2.0" - htmlparser2: "npm:^6.1.0" - lodash: "npm:^4.17.21" - strip-ansi: "npm:^6.0.1" - checksum: 10c0/24a9fae4cc50e731d059742d1b3eec163dc9e3872b12010d120c3fcbd622765d9cda41f79a1bbb4bf63c1d3442f18a08f6e1642cb5d7ebf092a0ce3f7a3bd143 - languageName: node - linkType: hard - "request-progress@npm:^3.0.0": version: 3.0.0 resolution: "request-progress@npm:3.0.0" @@ -28409,7 +26893,7 @@ __metadata: languageName: node linkType: hard -"retry@npm:0.13.1, retry@npm:^0.13.1": +"retry@npm:0.13.1": version: 0.13.1 resolution: "retry@npm:0.13.1" checksum: 10c0/9ae822ee19db2163497e074ea919780b1efa00431d197c7afdb950e42bf109196774b92a49fc9821f0b8b328a98eea6017410bfc5e8a0fc19c85c6d11adb3772 @@ -28810,7 +27294,7 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": +"schema-utils@npm:^3.0.0": version: 3.3.0 resolution: "schema-utils@npm:3.3.0" dependencies: @@ -28821,7 +27305,7 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^4.0.0, schema-utils@npm:^4.0.1": +"schema-utils@npm:^4.0.0": version: 4.2.0 resolution: "schema-utils@npm:4.2.0" dependencies: @@ -28872,22 +27356,6 @@ __metadata: languageName: node linkType: hard -"select-hose@npm:^2.0.0": - version: 2.0.0 - resolution: "select-hose@npm:2.0.0" - checksum: 10c0/01cc52edd29feddaf379efb4328aededa633f0ac43c64b11a8abd075ff34f05b0d280882c4fbcbdf1a0658202c9cd2ea8d5985174dcf9a2dac7e3a4996fa9b67 - languageName: node - linkType: hard - -"selfsigned@npm:^2.1.1": - version: 2.1.1 - resolution: "selfsigned@npm:2.1.1" - dependencies: - node-forge: "npm:^1" - checksum: 10c0/4a2509c8a5bd49c3630a799de66b317352b52746bec981133d4f8098365da35d2344f0fbedf14aacf2cd1e88682048e2df11ad9dc59331d3b1c0a5ec3e6e16ad - languageName: node - linkType: hard - "semver-try-require@npm:7.0.0": version: 7.0.0 resolution: "semver-try-require@npm:7.0.0" @@ -28956,30 +27424,6 @@ __metadata: languageName: node linkType: hard -"serialize-javascript@npm:^6.0.0, serialize-javascript@npm:^6.0.1": - version: 6.0.1 - resolution: "serialize-javascript@npm:6.0.1" - dependencies: - randombytes: "npm:^2.1.0" - checksum: 10c0/1af427f4fee3fee051f54ffe15f77068cff78a3c96d20f5c1178d20630d3ab122d8350e639d5e13cde8111ef9db9439b871305ffb185e24be0a2149cec230988 - languageName: node - linkType: hard - -"serve-index@npm:^1.9.1": - version: 1.9.1 - resolution: "serve-index@npm:1.9.1" - dependencies: - accepts: "npm:~1.3.4" - batch: "npm:0.6.1" - debug: "npm:2.6.9" - escape-html: "npm:~1.0.3" - http-errors: "npm:~1.6.2" - mime-types: "npm:~2.1.17" - parseurl: "npm:~1.3.2" - checksum: 10c0/a666471a24196f74371edf2c3c7bcdd82adbac52f600804508754b5296c3567588bf694258b19e0cb23a567acfa20d9721bfdaed3286007b81f9741ada8a3a9c - languageName: node - linkType: hard - "serve-static@npm:1.15.0": version: 1.15.0 resolution: "serve-static@npm:1.15.0" @@ -29039,13 +27483,6 @@ __metadata: languageName: node linkType: hard -"setprototypeof@npm:1.1.0": - version: 1.1.0 - resolution: "setprototypeof@npm:1.1.0" - checksum: 10c0/a77b20876689c6a89c3b42f0c3596a9cae02f90fc902570cbd97198e9e8240382086c9303ad043e88cee10f61eae19f1004e51d885395a1e9bf49f9ebed12872 - languageName: node - linkType: hard - "setprototypeof@npm:1.2.0": version: 1.2.0 resolution: "setprototypeof@npm:1.2.0" @@ -29205,17 +27642,6 @@ __metadata: languageName: node linkType: hard -"sirv@npm:^2.0.3": - version: 2.0.3 - resolution: "sirv@npm:2.0.3" - dependencies: - "@polka/url": "npm:^1.0.0-next.20" - mrmime: "npm:^1.0.0" - totalist: "npm:^3.0.0" - checksum: 10c0/333bd665ee5ac3805047ea47757e04e2b18ca562749b9a07f5bbbee6dabd99ff00011604689b1ada3d22e46a4198c61e05e2d1abd5454d94da483ce3a3813205 - languageName: node - linkType: hard - "sisteransi@npm:^1.0.5": version: 1.0.5 resolution: "sisteransi@npm:1.0.5" @@ -29246,13 +27672,6 @@ __metadata: languageName: node linkType: hard -"slash@npm:^4.0.0": - version: 4.0.0 - resolution: "slash@npm:4.0.0" - checksum: 10c0/b522ca75d80d107fd30d29df0549a7b2537c83c4c4ecd12cd7d4ea6c8aaca2ab17ada002e7a1d78a9d736a0261509f26ea5b489082ee443a3a810586ef8eff18 - languageName: node - linkType: hard - "slash@npm:^5.0.0": version: 5.1.0 resolution: "slash@npm:5.1.0" @@ -29344,17 +27763,6 @@ __metadata: languageName: node linkType: hard -"sockjs@npm:^0.3.24": - version: 0.3.24 - resolution: "sockjs@npm:0.3.24" - dependencies: - faye-websocket: "npm:^0.11.3" - uuid: "npm:^8.3.2" - websocket-driver: "npm:^0.7.4" - checksum: 10c0/aa102c7d921bf430215754511c81ea7248f2dcdf268fbdb18e4d8183493a86b8793b164c636c52f474a886f747447c962741df2373888823271efdb9d2594f33 - languageName: node - linkType: hard - "socks-proxy-agent@npm:^7.0.0": version: 7.0.0 resolution: "socks-proxy-agent@npm:7.0.0" @@ -29414,14 +27822,7 @@ __metadata: languageName: node linkType: hard -"source-list-map@npm:^2.0.1": - version: 2.0.1 - resolution: "source-list-map@npm:2.0.1" - checksum: 10c0/2e5e421b185dcd857f46c3c70e2e711a65d717b78c5f795e2e248c9d67757882ea989b80ebc08cf164eeeda5f4be8aa95d3b990225070b2daaaf3257c5958149 - languageName: node - linkType: hard - -"source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.0": +"source-map-js@npm:^1.2.0": version: 1.2.0 resolution: "source-map-js@npm:1.2.0" checksum: 10c0/7e5f896ac10a3a50fe2898e5009c58ff0dc102dcb056ed27a354623a0ece8954d4b2649e1a1b2b52ef2e161d26f8859c7710350930751640e71e374fe2d321a4 @@ -29438,7 +27839,7 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:^0.5.16, source-map-support@npm:~0.5.20": +"source-map-support@npm:^0.5.16": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" dependencies: @@ -29455,7 +27856,7 @@ __metadata: languageName: node linkType: hard -"source-map@npm:0.7.4, source-map@npm:^0.7.3": +"source-map@npm:0.7.4": version: 0.7.4 resolution: "source-map@npm:0.7.4" checksum: 10c0/dc0cf3768fe23c345ea8760487f8c97ef6fca8a73c83cd7c9bf2fde8bc2c34adb9c0824d6feb14bc4f9e37fb522e18af621543f1289038a66ac7586da29aa7dc @@ -29510,33 +27911,6 @@ __metadata: languageName: node linkType: hard -"spdy-transport@npm:^3.0.0": - version: 3.0.0 - resolution: "spdy-transport@npm:3.0.0" - dependencies: - debug: "npm:^4.1.0" - detect-node: "npm:^2.0.4" - hpack.js: "npm:^2.1.6" - obuf: "npm:^1.1.2" - readable-stream: "npm:^3.0.6" - wbuf: "npm:^1.7.3" - checksum: 10c0/eaf7440fa90724fffc813c386d4a8a7427d967d6e46d7c51d8f8a533d1a6911b9823ea9218703debbae755337e85f110185d7a00ae22ec5c847077b908ce71bb - languageName: node - linkType: hard - -"spdy@npm:^4.0.2": - version: 4.0.2 - resolution: "spdy@npm:4.0.2" - dependencies: - debug: "npm:^4.1.0" - handle-thing: "npm:^2.0.0" - http-deceiver: "npm:^1.2.7" - select-hose: "npm:^2.0.0" - spdy-transport: "npm:^3.0.0" - checksum: 10c0/983509c0be9d06fd00bb9dff713c5b5d35d3ffd720db869acdd5ad7aa6fc0e02c2318b58f75328957d8ff772acdf1f7d19382b6047df342044ff3e2d6805ccdf - languageName: node - linkType: hard - "split2@npm:4.2.0, split2@npm:^4.0.0": version: 4.2.0 resolution: "split2@npm:4.2.0" @@ -29633,13 +28007,6 @@ __metadata: languageName: node linkType: hard -"stackframe@npm:^1.3.4": - version: 1.3.4 - resolution: "stackframe@npm:1.3.4" - checksum: 10c0/18410f7a1e0c5d211a4effa83bdbf24adbe8faa8c34db52e1cd3e89837518c592be60b60d8b7270ac53eeeb8b807cd11b399a41667f6c9abb41059c3ccc8a989 - languageName: node - linkType: hard - "stacktracey@npm:2.1.8": version: 2.1.8 resolution: "stacktracey@npm:2.1.8" @@ -29664,13 +28031,6 @@ __metadata: languageName: node linkType: hard -"statuses@npm:>= 1.4.0 < 2": - version: 1.5.0 - resolution: "statuses@npm:1.5.0" - checksum: 10c0/e433900956357b3efd79b1c547da4d291799ac836960c016d10a98f6a810b1b5c0dcc13b5a7aa609a58239b5190e1ea176ad9221c2157d2fd1c747393e6b2940 - languageName: node - linkType: hard - "std-env@npm:^3.5.0": version: 3.7.0 resolution: "std-env@npm:3.7.0" @@ -30090,7 +28450,7 @@ __metadata: languageName: node linkType: hard -"style-loader@npm:3.3.4, style-loader@npm:^3.3.1": +"style-loader@npm:3.3.4": version: 3.3.4 resolution: "style-loader@npm:3.3.4" peerDependencies: @@ -30099,18 +28459,6 @@ __metadata: languageName: node linkType: hard -"stylehacks@npm:^6.0.0": - version: 6.0.0 - resolution: "stylehacks@npm:6.0.0" - dependencies: - browserslist: "npm:^4.21.4" - postcss-selector-parser: "npm:^6.0.4" - peerDependencies: - postcss: ^8.2.15 - checksum: 10c0/6ce277c816dd826fdc765258d612a160bad03dae52ab51ef1676efae07e96923ebeb6880d6522eefc50d2e81cb90b632615120c73aed190f345e8d836def67b6 - languageName: node - linkType: hard - "superjson@npm:^1.12.2 || ^2.0.0": version: 2.2.1 resolution: "superjson@npm:2.2.1" @@ -30204,22 +28552,6 @@ __metadata: languageName: node linkType: hard -"svgo@npm:^3.0.2": - version: 3.0.2 - resolution: "svgo@npm:3.0.2" - dependencies: - "@trysound/sax": "npm:0.2.0" - commander: "npm:^7.2.0" - css-select: "npm:^5.1.0" - css-tree: "npm:^2.2.1" - csso: "npm:^5.0.5" - picocolors: "npm:^1.0.0" - bin: - svgo: bin/svgo - checksum: 10c0/d682d416dd68cdcbab5e1e77b93d621325480e97dfe87777e845ea9a0ce05d03fc837ce17080af67e787f6b24430b805ff79f4591dda30a0ab4060b6a3ac2adf - languageName: node - linkType: hard - "swap-case@npm:^2.0.2": version: 2.0.2 resolution: "swap-case@npm:2.0.2" @@ -30229,16 +28561,6 @@ __metadata: languageName: node linkType: hard -"swc-loader@npm:^0.2.3": - version: 0.2.3 - resolution: "swc-loader@npm:0.2.3" - peerDependencies: - "@swc/core": ^1.2.147 - webpack: ">=2" - checksum: 10c0/cb3f9b116fbd292b881e804a4fe66cd6d543a7de2572f5a68e067e4780ee2d59a8da87a90736ba6e8e286e4368c98214ae3486b1b872080292814e5d3062f09c - languageName: node - linkType: hard - "swr@npm:2.2.0": version: 2.2.0 resolution: "swr@npm:2.2.0" @@ -30291,7 +28613,7 @@ __metadata: languageName: node linkType: hard -"tapable@npm:^2.0.0, tapable@npm:^2.1.1, tapable@npm:^2.2.0, tapable@npm:^2.2.1": +"tapable@npm:^2.2.0, tapable@npm:^2.2.1": version: 2.2.1 resolution: "tapable@npm:2.2.1" checksum: 10c0/bc40e6efe1e554d075469cedaba69a30eeb373552aaf41caeaaa45bf56ffacc2674261b106245bd566b35d8f3329b52d838e851ee0a852120acae26e622925c9 @@ -30432,42 +28754,6 @@ __metadata: languageName: node linkType: hard -"terser-webpack-plugin@npm:^5.3.1, terser-webpack-plugin@npm:^5.3.10": - version: 5.3.10 - resolution: "terser-webpack-plugin@npm:5.3.10" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.20" - jest-worker: "npm:^27.4.5" - schema-utils: "npm:^3.1.1" - serialize-javascript: "npm:^6.0.1" - terser: "npm:^5.26.0" - peerDependencies: - webpack: ^5.1.0 - peerDependenciesMeta: - "@swc/core": - optional: true - esbuild: - optional: true - uglify-js: - optional: true - checksum: 10c0/66d1ed3174542560911cf96f4716aeea8d60e7caab212291705d50072b6ba844c7391442541b13c848684044042bea9ec87512b8506528c12854943da05faf91 - languageName: node - linkType: hard - -"terser@npm:^5.10.0, terser@npm:^5.26.0": - version: 5.27.0 - resolution: "terser@npm:5.27.0" - dependencies: - "@jridgewell/source-map": "npm:^0.3.3" - acorn: "npm:^8.8.2" - commander: "npm:^2.20.0" - source-map-support: "npm:~0.5.20" - bin: - terser: bin/terser - checksum: 10c0/bed0d39d9a7f2b82c87173e48081c46426a8820ba1dcb864bbfccd2df2b7fb8498a7ea4c8ef045ccce5713b23a6b4c3a784967f1b9f3115adaa7f51712f6e6ae - languageName: node - linkType: hard - "test-exclude@npm:^6.0.0": version: 6.0.0 resolution: "test-exclude@npm:6.0.0" @@ -30544,13 +28830,6 @@ __metadata: languageName: node linkType: hard -"thunky@npm:^1.0.2": - version: 1.1.0 - resolution: "thunky@npm:1.1.0" - checksum: 10c0/369764f39de1ce1de2ba2fa922db4a3f92e9c7f33bcc9a713241bc1f4a5238b484c17e0d36d1d533c625efb00e9e82c3e45f80b47586945557b45abb890156d2 - languageName: node - linkType: hard - "timers-browserify@npm:^2.0.4": version: 2.0.12 resolution: "timers-browserify@npm:2.0.12" @@ -30691,13 +28970,6 @@ __metadata: languageName: node linkType: hard -"totalist@npm:^3.0.0": - version: 3.0.1 - resolution: "totalist@npm:3.0.1" - checksum: 10c0/4bb1fadb69c3edbef91c73ebef9d25b33bbf69afe1e37ce544d5f7d13854cda15e47132f3e0dc4cafe300ddb8578c77c50a65004d8b6e97e77934a69aa924863 - languageName: node - linkType: hard - "touch@npm:^3.1.0": version: 3.1.0 resolution: "touch@npm:3.1.0" @@ -31683,13 +29955,6 @@ __metadata: languageName: node linkType: hard -"utila@npm:~0.4": - version: 0.4.0 - resolution: "utila@npm:0.4.0" - checksum: 10c0/2791604e09ca4f77ae314df83e80d1805f867eb5c7e13e7413caee01273c278cf2c9a3670d8d25c889a877f7b149d892fe61b0181a81654b425e9622ab23d42e - languageName: node - linkType: hard - "utils-merge@npm:1.0.1": version: 1.0.1 resolution: "utils-merge@npm:1.0.1" @@ -32024,7 +30289,7 @@ __metadata: languageName: node linkType: hard -"watchpack@npm:^2.2.0, watchpack@npm:^2.4.1": +"watchpack@npm:^2.2.0": version: 2.4.1 resolution: "watchpack@npm:2.4.1" dependencies: @@ -32043,15 +30308,6 @@ __metadata: languageName: node linkType: hard -"wbuf@npm:^1.1.0, wbuf@npm:^1.7.3": - version: 1.7.3 - resolution: "wbuf@npm:1.7.3" - dependencies: - minimalistic-assert: "npm:^1.0.0" - checksum: 10c0/56edcc5ef2b3d30913ba8f1f5cccc364d180670b24d5f3f8849c1e6fb514e5c7e3a87548ae61227a82859eba6269c11393ae24ce12a2ea1ecb9b465718ddced7 - languageName: node - linkType: hard - "wcwidth@npm:^1.0.0, wcwidth@npm:^1.0.1": version: 1.0.1 resolution: "wcwidth@npm:1.0.1" @@ -32122,195 +30378,6 @@ __metadata: languageName: node linkType: hard -"webpack-bundle-analyzer@npm:4.10.2": - version: 4.10.2 - resolution: "webpack-bundle-analyzer@npm:4.10.2" - dependencies: - "@discoveryjs/json-ext": "npm:0.5.7" - acorn: "npm:^8.0.4" - acorn-walk: "npm:^8.0.0" - commander: "npm:^7.2.0" - debounce: "npm:^1.2.1" - escape-string-regexp: "npm:^4.0.0" - gzip-size: "npm:^6.0.0" - html-escaper: "npm:^2.0.2" - opener: "npm:^1.5.2" - picocolors: "npm:^1.0.0" - sirv: "npm:^2.0.3" - ws: "npm:^7.3.1" - bin: - webpack-bundle-analyzer: lib/bin/analyzer.js - checksum: 10c0/00603040e244ead15b2d92981f0559fa14216381349412a30070a7358eb3994cd61a8221d34a3b3fb8202dc3d1c5ee1fbbe94c5c52da536e5b410aa1cf279a48 - languageName: node - linkType: hard - -"webpack-cli@npm:5.1.4": - version: 5.1.4 - resolution: "webpack-cli@npm:5.1.4" - dependencies: - "@discoveryjs/json-ext": "npm:^0.5.0" - "@webpack-cli/configtest": "npm:^2.1.1" - "@webpack-cli/info": "npm:^2.0.2" - "@webpack-cli/serve": "npm:^2.0.5" - colorette: "npm:^2.0.14" - commander: "npm:^10.0.1" - cross-spawn: "npm:^7.0.3" - envinfo: "npm:^7.7.3" - fastest-levenshtein: "npm:^1.0.12" - import-local: "npm:^3.0.2" - interpret: "npm:^3.1.1" - rechoir: "npm:^0.8.0" - webpack-merge: "npm:^5.7.3" - peerDependencies: - webpack: 5.x.x - peerDependenciesMeta: - "@webpack-cli/generators": - optional: true - webpack-bundle-analyzer: - optional: true - webpack-dev-server: - optional: true - bin: - webpack-cli: bin/cli.js - checksum: 10c0/4266909ae5e2e662c8790ac286e965b2c7fd5a4a2f07f48e28576234c9a5f631847ccddc18e1b3281c7b4be04a7ff4717d2636033a322dde13ac995fd0d9de10 - languageName: node - linkType: hard - -"webpack-dev-middleware@npm:^5.3.4": - version: 5.3.4 - resolution: "webpack-dev-middleware@npm:5.3.4" - dependencies: - colorette: "npm:^2.0.10" - memfs: "npm:^3.4.3" - mime-types: "npm:^2.1.31" - range-parser: "npm:^1.2.1" - schema-utils: "npm:^4.0.0" - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - checksum: 10c0/257df7d6bc5494d1d3cb66bba70fbdf5a6e0423e39b6420f7631aeb52435afbfbff8410a62146dcdf3d2f945c62e03193aae2ac1194a2f7d5a2523b9d194e9e1 - languageName: node - linkType: hard - -"webpack-dev-middleware@npm:^6.1.1": - version: 6.1.1 - resolution: "webpack-dev-middleware@npm:6.1.1" - dependencies: - colorette: "npm:^2.0.10" - memfs: "npm:^3.4.12" - mime-types: "npm:^2.1.31" - range-parser: "npm:^1.2.1" - schema-utils: "npm:^4.0.0" - peerDependencies: - webpack: ^5.0.0 - peerDependenciesMeta: - webpack: - optional: true - checksum: 10c0/f8f5b7f7591fa3e4d4008b28ab2b5c13367a24587257e3e37cff31e2d8a6c859de5294af83c79e8faf3137db194377f392fffacdf5010b5c1311eba6f9b71568 - languageName: node - linkType: hard - -"webpack-dev-server@npm:4.15.2": - version: 4.15.2 - resolution: "webpack-dev-server@npm:4.15.2" - dependencies: - "@types/bonjour": "npm:^3.5.9" - "@types/connect-history-api-fallback": "npm:^1.3.5" - "@types/express": "npm:^4.17.13" - "@types/serve-index": "npm:^1.9.1" - "@types/serve-static": "npm:^1.13.10" - "@types/sockjs": "npm:^0.3.33" - "@types/ws": "npm:^8.5.5" - ansi-html-community: "npm:^0.0.8" - bonjour-service: "npm:^1.0.11" - chokidar: "npm:^3.5.3" - colorette: "npm:^2.0.10" - compression: "npm:^1.7.4" - connect-history-api-fallback: "npm:^2.0.0" - default-gateway: "npm:^6.0.3" - express: "npm:^4.17.3" - graceful-fs: "npm:^4.2.6" - html-entities: "npm:^2.3.2" - http-proxy-middleware: "npm:^2.0.3" - ipaddr.js: "npm:^2.0.1" - launch-editor: "npm:^2.6.0" - open: "npm:^8.0.9" - p-retry: "npm:^4.5.0" - rimraf: "npm:^3.0.2" - schema-utils: "npm:^4.0.0" - selfsigned: "npm:^2.1.1" - serve-index: "npm:^1.9.1" - sockjs: "npm:^0.3.24" - spdy: "npm:^4.0.2" - webpack-dev-middleware: "npm:^5.3.4" - ws: "npm:^8.13.0" - peerDependencies: - webpack: ^4.37.0 || ^5.0.0 - peerDependenciesMeta: - webpack: - optional: true - webpack-cli: - optional: true - bin: - webpack-dev-server: bin/webpack-dev-server.js - checksum: 10c0/625bd5b79360afcf98782c8b1fd710b180bb0e96d96b989defff550c546890010ceea82ffbecb2a0a23f7f018bc72f2dee7b3070f7b448fb0110df6657fb2904 - languageName: node - linkType: hard - -"webpack-hot-middleware@npm:^2.25.1": - version: 2.25.4 - resolution: "webpack-hot-middleware@npm:2.25.4" - dependencies: - ansi-html-community: "npm:0.0.8" - html-entities: "npm:^2.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/c0702d308a39bdbc9277d66df50272e8c358c2238cecb0881df57136f54cb7a3d8291320b13075325b58f7a3cbf7a1ef10829554a5bc2ddfa3effbf416dc8e8c - languageName: node - linkType: hard - -"webpack-manifest-plugin@npm:5.0.0": - version: 5.0.0 - resolution: "webpack-manifest-plugin@npm:5.0.0" - dependencies: - tapable: "npm:^2.0.0" - webpack-sources: "npm:^2.2.0" - peerDependencies: - webpack: ^5.47.0 - checksum: 10c0/c6baed67855c48363a7bd677bc05ac532e2d817370894ec5a785524c1df08859330198eda419efb17d0e4233dc74d194f423a4ac5d34ab5521ba2617d14ea572 - languageName: node - linkType: hard - -"webpack-merge@npm:5.10.0, webpack-merge@npm:^5.7.3": - version: 5.10.0 - resolution: "webpack-merge@npm:5.10.0" - dependencies: - clone-deep: "npm:^4.0.1" - flat: "npm:^5.0.2" - wildcard: "npm:^2.0.0" - checksum: 10c0/b607c84cabaf74689f965420051a55a08722d897bdd6c29cb0b2263b451c090f962d41ecf8c9bf56b0ab3de56e65476ace0a8ecda4f4a4663684243d90e0512b - languageName: node - linkType: hard - -"webpack-retry-chunk-load-plugin@npm:3.1.1": - version: 3.1.1 - resolution: "webpack-retry-chunk-load-plugin@npm:3.1.1" - dependencies: - prettier: "npm:^2.6.2" - peerDependencies: - webpack: ">=5.0.0" - checksum: 10c0/62a4eda6a8d4c3a1169d41fd7d69902f06b4c39c76019f897ac3cb6958ecba5591c37386e303e7495859602386a61ac597fa970937099bcfc4f4b9a1027cece8 - languageName: node - linkType: hard - -"webpack-sources@npm:^2.2.0": - version: 2.3.1 - resolution: "webpack-sources@npm:2.3.1" - dependencies: - source-list-map: "npm:^2.0.1" - source-map: "npm:^0.6.1" - checksum: 10c0/caf56a9a478eca7e77feca2b6ddc7673f1384eb870280014b300c40cf42abca656f639ff58a8d55a889a92a810ae3c22e71e578aa38fde416e8c2e6827a6ddfd - languageName: node - linkType: hard - "webpack-sources@npm:^3.2.3": version: 3.2.3 resolution: "webpack-sources@npm:3.2.3" @@ -32318,13 +30385,6 @@ __metadata: languageName: node linkType: hard -"webpack-virtual-modules@npm:^0.5.0": - version: 0.5.0 - resolution: "webpack-virtual-modules@npm:0.5.0" - checksum: 10c0/0742e069cd49d91ccd0b59431b3666903d321582c1b1062fa6bdae005c3538af55ff8787ea5eafbf72662f3496d3a879e2c705d55ca0af8283548a925be18484 - languageName: node - linkType: hard - "webpack-virtual-modules@npm:^0.6.1": version: 0.6.1 resolution: "webpack-virtual-modules@npm:0.6.1" @@ -32332,44 +30392,7 @@ __metadata: languageName: node linkType: hard -"webpack@npm:5, webpack@npm:5.92.0, webpack@npm:^5": - version: 5.92.0 - resolution: "webpack@npm:5.92.0" - dependencies: - "@types/eslint-scope": "npm:^3.7.3" - "@types/estree": "npm:^1.0.5" - "@webassemblyjs/ast": "npm:^1.12.1" - "@webassemblyjs/wasm-edit": "npm:^1.12.1" - "@webassemblyjs/wasm-parser": "npm:^1.12.1" - acorn: "npm:^8.7.1" - acorn-import-attributes: "npm:^1.9.5" - browserslist: "npm:^4.21.10" - chrome-trace-event: "npm:^1.0.2" - enhanced-resolve: "npm:^5.17.0" - es-module-lexer: "npm:^1.2.1" - eslint-scope: "npm:5.1.1" - events: "npm:^3.2.0" - glob-to-regexp: "npm:^0.4.1" - graceful-fs: "npm:^4.2.11" - json-parse-even-better-errors: "npm:^2.3.1" - loader-runner: "npm:^4.2.0" - mime-types: "npm:^2.1.27" - neo-async: "npm:^2.6.2" - schema-utils: "npm:^3.2.0" - tapable: "npm:^2.1.1" - terser-webpack-plugin: "npm:^5.3.10" - watchpack: "npm:^2.4.1" - webpack-sources: "npm:^3.2.3" - peerDependenciesMeta: - webpack-cli: - optional: true - bin: - webpack: bin/webpack.js - checksum: 10c0/588de5ce6f1e8fb4fec7300c2c36a8fc844fe71f4c871b06aca1a68553bea8f6479697615abb53cbbeb2e3859fc1b982f2f48ff23dd0e60024f69bb3d46d0712 - languageName: node - linkType: hard - -"websocket-driver@npm:>=0.5.1, websocket-driver@npm:^0.7.4": +"websocket-driver@npm:>=0.5.1": version: 0.7.4 resolution: "websocket-driver@npm:0.7.4" dependencies: @@ -32573,13 +30596,6 @@ __metadata: languageName: node linkType: hard -"wildcard@npm:^2.0.0": - version: 2.0.1 - resolution: "wildcard@npm:2.0.1" - checksum: 10c0/08f70cd97dd9a20aea280847a1fe8148e17cae7d231640e41eb26d2388697cbe65b67fd9e68715251c39b080c5ae4f76d71a9a69fa101d897273efdfb1b58bf7 - languageName: node - linkType: hard - "wordwrap@npm:^1.0.0": version: 1.0.0 resolution: "wordwrap@npm:1.0.0" @@ -32718,22 +30734,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^7.3.1": - version: 7.5.10 - resolution: "ws@npm:7.5.10" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10c0/bd7d5f4aaf04fae7960c23dcb6c6375d525e00f795dd20b9385902bd008c40a94d3db3ce97d878acc7573df852056ca546328b27b39f47609f80fb22a0a9b61d - languageName: node - linkType: hard - -"ws@npm:^8.11.0, ws@npm:^8.12.0, ws@npm:^8.13.0, ws@npm:^8.14.2, ws@npm:^8.17.0, ws@npm:^8.2.3, ws@npm:^8.4.2": +"ws@npm:^8.11.0, ws@npm:^8.12.0, ws@npm:^8.14.2, ws@npm:^8.17.0, ws@npm:^8.2.3, ws@npm:^8.4.2": version: 8.17.1 resolution: "ws@npm:8.17.1" peerDependencies: