diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 74945cdeb6..ed15e14c8e 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -69,7 +69,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] - node-version: [18.x, 20.x, 22.x, 24.x] + node-version: [22.x, 24.x, 25.x] shard: ["1/4", "2/4", "3/4", "4/4"] webpack-version: [latest] @@ -91,12 +91,6 @@ jobs: - name: Install dependencies run: npm ci - - name: Install dependencies for Node.js@18 - run: | - npm i p-retry@^4.5.0 open@^8.0.9 - node ./scripts/prepare-test-for-old-node.js - if: matrix.node-version == '18.x' - - name: Setup firefox if: matrix.os != 'windows-latest' uses: browser-actions/setup-firefox@latest @@ -112,12 +106,7 @@ jobs: cp -R tmp-client client - name: Run tests for webpack version ${{ matrix.webpack-version }} - run: node_modules/.bin/jest --coverage --ci --shard=${{ matrix.shard }} - if: matrix.node-version == '18.x' - - - name: Run tests for webpack version ${{ matrix.webpack-version }} - run: npm run test:coverage -- --ci --shard=${{ matrix.shard }} - if: matrix.node-version != '18.x' + run: npm run test:coverage -- --test-shard=${{ matrix.shard }} - name: Submit coverage data to codecov uses: codecov/codecov-action@v5 diff --git a/.gitignore b/.gitignore index de3b694aec..8a1aee341d 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,9 @@ npm-debug.log client !/examples/client !/test/client + +examples/**/dist + coverage node_modules .vscode diff --git a/babel.config.js b/babel.config.js index 419046888f..49ff61255b 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,6 +1,4 @@ -"use strict"; - -module.exports = (api) => { +export default (api) => { api.cache(true); return { @@ -24,7 +22,7 @@ module.exports = (api) => { "@babel/preset-env", { targets: { - node: "18.12.0", + node: "22.15.0", }, }, ], diff --git a/bin/cli-flags.js b/bin/cli-flags.js deleted file mode 100644 index d32c38cbb0..0000000000 --- a/bin/cli-flags.js +++ /dev/null @@ -1,1294 +0,0 @@ -"use strict"; - -module.exports = { - "allowed-hosts": { - configs: [ - { - type: "string", - multiple: true, - description: - "Allows to enumerate the hosts from which access to the dev server are allowed (useful when you are proxying dev server, by default is 'auto').", - path: "allowedHosts[]", - }, - { - description: - "Allows to enumerate the hosts from which access to the dev server are allowed (useful when you are proxying dev server, by default is 'auto').", - multiple: false, - path: "allowedHosts", - type: "enum", - values: ["auto", "all"], - }, - ], - description: - "Allows to enumerate the hosts from which access to the dev server are allowed (useful when you are proxying dev server, by default is 'auto').", - multiple: true, - simpleType: "string", - }, - "allowed-hosts-reset": { - configs: [ - { - type: "reset", - multiple: false, - description: - "Clear all items provided in 'allowedHosts' configuration. Allows to enumerate the hosts from which access to the dev server are allowed (useful when you are proxying dev server, by default is 'auto').", - path: "allowedHosts", - }, - ], - description: - "Clear all items provided in 'allowedHosts' configuration. Allows to enumerate the hosts from which access to the dev server are allowed (useful when you are proxying dev server, by default is 'auto').", - simpleType: "boolean", - multiple: false, - }, - bonjour: { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Allows to broadcasts dev server via ZeroConf networking on start.", - negatedDescription: - "Disallows to broadcasts dev server via ZeroConf networking on start.", - path: "bonjour", - }, - ], - description: - "Allows to broadcasts dev server via ZeroConf networking on start.", - simpleType: "boolean", - multiple: false, - }, - client: { - configs: [ - { - description: - "Allows to specify options for client script in the browser or disable client script.", - negatedDescription: "Disables client script.", - multiple: false, - path: "client", - type: "enum", - values: [false], - }, - ], - description: - "Allows to specify options for client script in the browser or disable client script.", - multiple: false, - simpleType: "boolean", - }, - "client-logging": { - configs: [ - { - type: "enum", - values: ["none", "error", "warn", "info", "log", "verbose"], - multiple: false, - description: "Allows to set log level in the browser.", - path: "client.logging", - }, - ], - description: "Allows to set log level in the browser.", - simpleType: "string", - multiple: false, - }, - "client-overlay": { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Enables a full-screen overlay in the browser when there are compiler errors or warnings.", - negatedDescription: - "Disables the full-screen overlay in the browser when there are compiler errors or warnings.", - path: "client.overlay", - }, - ], - description: - "Enables a full-screen overlay in the browser when there are compiler errors or warnings.", - simpleType: "boolean", - multiple: false, - }, - "client-overlay-errors": { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Enables a full-screen overlay in the browser when there are compiler errors.", - negatedDescription: - "Disables the full-screen overlay in the browser when there are compiler errors.", - path: "client.overlay.errors", - }, - ], - description: - "Enables a full-screen overlay in the browser when there are compiler errors.", - simpleType: "boolean", - multiple: false, - }, - "client-overlay-trusted-types-policy-name": { - configs: [ - { - description: - "The name of a Trusted Types policy for the overlay. Defaults to 'webpack-dev-server#overlay'.", - multiple: false, - path: "client.overlay.trustedTypesPolicyName", - type: "string", - }, - ], - description: - "The name of a Trusted Types policy for the overlay. Defaults to 'webpack-dev-server#overlay'.", - multiple: false, - simpleType: "string", - }, - "client-overlay-warnings": { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Enables a full-screen overlay in the browser when there are compiler warnings.", - negatedDescription: - "Disables the full-screen overlay in the browser when there are compiler warnings.", - path: "client.overlay.warnings", - }, - ], - description: - "Enables a full-screen overlay in the browser when there are compiler warnings.", - simpleType: "boolean", - multiple: false, - }, - "client-overlay-runtime-errors": { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Enables a full-screen overlay in the browser when there are uncaught runtime errors.", - negatedDescription: - "Disables the full-screen overlay in the browser when there are uncaught runtime errors.", - path: "client.overlay.runtimeErrors", - }, - ], - description: - "Enables a full-screen overlay in the browser when there are uncaught runtime errors.", - simpleType: "boolean", - multiple: false, - }, - "client-progress": { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Prints compilation progress in percentage in the browser.", - negatedDescription: - "Does not print compilation progress in percentage in the browser.", - path: "client.progress", - }, - ], - description: "Prints compilation progress in percentage in the browser.", - simpleType: "boolean", - multiple: false, - }, - "client-reconnect": { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Tells dev-server the number of times it should try to reconnect the client.", - negatedDescription: - "Tells dev-server to not to try to reconnect the client.", - path: "client.reconnect", - }, - { - type: "number", - multiple: false, - description: - "Tells dev-server the number of times it should try to reconnect the client.", - path: "client.reconnect", - }, - ], - description: - "Tells dev-server the number of times it should try to reconnect the client.", - simpleType: "string", - multiple: false, - }, - "client-web-socket-transport": { - configs: [ - { - type: "enum", - values: ["sockjs", "ws"], - multiple: false, - description: - "Allows to set custom web socket transport to communicate with dev server.", - path: "client.webSocketTransport", - }, - { - type: "string", - multiple: false, - description: - "Allows to set custom web socket transport to communicate with dev server.", - path: "client.webSocketTransport", - }, - ], - description: - "Allows to set custom web socket transport to communicate with dev server.", - simpleType: "string", - multiple: false, - }, - "client-web-socket-url": { - configs: [ - { - type: "string", - multiple: false, - description: - "Allows to specify URL to web socket server (useful when you're proxying dev server and client script does not always know where to connect to).", - path: "client.webSocketURL", - }, - ], - description: - "Allows to specify URL to web socket server (useful when you're proxying dev server and client script does not always know where to connect to).", - simpleType: "string", - multiple: false, - }, - "client-web-socket-url-hostname": { - configs: [ - { - type: "string", - multiple: false, - description: - "Tells clients connected to devServer to use the provided hostname.", - path: "client.webSocketURL.hostname", - }, - ], - description: - "Tells clients connected to devServer to use the provided hostname.", - simpleType: "string", - multiple: false, - }, - "client-web-socket-url-password": { - configs: [ - { - type: "string", - multiple: false, - description: - "Tells clients connected to devServer to use the provided password to authenticate.", - path: "client.webSocketURL.password", - }, - ], - description: - "Tells clients connected to devServer to use the provided password to authenticate.", - simpleType: "string", - multiple: false, - }, - "client-web-socket-url-pathname": { - configs: [ - { - type: "string", - multiple: false, - description: - "Tells clients connected to devServer to use the provided path to connect.", - path: "client.webSocketURL.pathname", - }, - ], - description: - "Tells clients connected to devServer to use the provided path to connect.", - simpleType: "string", - multiple: false, - }, - "client-web-socket-url-port": { - configs: [ - { - type: "number", - multiple: false, - description: - "Tells clients connected to devServer to use the provided port.", - path: "client.webSocketURL.port", - }, - { - description: - "Tells clients connected to devServer to use the provided port.", - multiple: false, - path: "client.webSocketURL.port", - type: "string", - }, - ], - description: - "Tells clients connected to devServer to use the provided port.", - simpleType: "string", - multiple: false, - }, - "client-web-socket-url-protocol": { - configs: [ - { - description: - "Tells clients connected to devServer to use the provided protocol.", - multiple: false, - path: "client.webSocketURL.protocol", - type: "enum", - values: ["auto"], - }, - { - description: - "Tells clients connected to devServer to use the provided protocol.", - multiple: false, - path: "client.webSocketURL.protocol", - type: "string", - }, - ], - description: - "Tells clients connected to devServer to use the provided protocol.", - multiple: false, - simpleType: "string", - }, - "client-web-socket-url-username": { - configs: [ - { - type: "string", - multiple: false, - description: - "Tells clients connected to devServer to use the provided username to authenticate.", - path: "client.webSocketURL.username", - }, - ], - description: - "Tells clients connected to devServer to use the provided username to authenticate.", - simpleType: "string", - multiple: false, - }, - compress: { - configs: [ - { - type: "boolean", - multiple: false, - description: "Enables gzip compression for everything served.", - negatedDescription: "Disables gzip compression for everything served.", - path: "compress", - }, - ], - description: "Enables gzip compression for everything served.", - simpleType: "boolean", - multiple: false, - }, - "history-api-fallback": { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Allows to proxy requests through a specified index page (by default 'index.html'), useful for Single Page Applications that utilise the HTML5 History API.", - negatedDescription: - "Disallows to proxy requests through a specified index page.", - path: "historyApiFallback", - }, - ], - description: - "Allows to proxy requests through a specified index page (by default 'index.html'), useful for Single Page Applications that utilise the HTML5 History API.", - simpleType: "boolean", - multiple: false, - }, - host: { - configs: [ - { - description: "Allows to specify a hostname to use.", - multiple: false, - path: "host", - type: "enum", - values: ["local-ip", "local-ipv4", "local-ipv6"], - }, - { - description: "Allows to specify a hostname to use.", - multiple: false, - path: "host", - type: "string", - }, - ], - description: "Allows to specify a hostname to use.", - simpleType: "string", - multiple: false, - }, - hot: { - configs: [ - { - type: "boolean", - multiple: false, - description: "Enables Hot Module Replacement.", - negatedDescription: "Disables Hot Module Replacement.", - path: "hot", - }, - { - type: "enum", - values: ["only"], - multiple: false, - description: "Enables Hot Module Replacement.", - path: "hot", - }, - ], - description: "Enables Hot Module Replacement.", - simpleType: "string", - multiple: false, - }, - http2: { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Allows to serve over HTTP/2 using SPDY. Deprecated, use the `server` option.", - negatedDescription: "Does not serve over HTTP/2 using SPDY.", - path: "http2", - }, - ], - description: - "Allows to serve over HTTP/2 using SPDY. Deprecated, use the `server` option.", - simpleType: "boolean", - multiple: false, - }, - https: { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Allows to configure the server's listening socket for TLS (by default, dev server will be served over HTTP). Deprecated, use the `server` option.", - negatedDescription: - "Disallows to configure the server's listening socket for TLS (by default, dev server will be served over HTTP).", - path: "https", - }, - ], - description: - "Allows to configure the server's listening socket for TLS (by default, dev server will be served over HTTP). Deprecated, use the `server` option.", - simpleType: "boolean", - multiple: false, - }, - "https-ca": { - configs: [ - { - type: "string", - multiple: true, - description: - "Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - path: "https.ca[]", - }, - ], - description: - "Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - simpleType: "string", - multiple: true, - }, - "https-ca-reset": { - configs: [ - { - description: - "Clear all items provided in 'https.ca' configuration. Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - multiple: false, - path: "https.ca", - type: "reset", - }, - ], - description: - "Clear all items provided in 'https.ca' configuration. Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - multiple: false, - simpleType: "boolean", - }, - "https-cacert": { - configs: [ - { - type: "string", - multiple: true, - description: - "Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - path: "https.cacert[]", - }, - ], - description: - "Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - simpleType: "string", - multiple: true, - }, - "https-cacert-reset": { - configs: [ - { - description: - "Clear all items provided in 'https.cacert' configuration. Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - multiple: false, - path: "https.cacert", - type: "reset", - }, - ], - description: - "Clear all items provided in 'https.cacert' configuration. Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - multiple: false, - simpleType: "boolean", - }, - "https-cert": { - configs: [ - { - type: "string", - multiple: true, - description: - "Path to an SSL certificate or content of an SSL certificate. Deprecated, use the `server.options.cert` option.", - path: "https.cert[]", - }, - ], - description: - "Path to an SSL certificate or content of an SSL certificate. Deprecated, use the `server.options.cert` option.", - simpleType: "string", - multiple: true, - }, - "https-cert-reset": { - configs: [ - { - description: - "Clear all items provided in 'https.cert' configuration. Path to an SSL certificate or content of an SSL certificate. Deprecated, use the `server.options.cert` option.", - multiple: false, - path: "https.cert", - type: "reset", - }, - ], - description: - "Clear all items provided in 'https.cert' configuration. Path to an SSL certificate or content of an SSL certificate. Deprecated, use the `server.options.cert` option.", - multiple: false, - simpleType: "boolean", - }, - "https-crl": { - configs: [ - { - description: - "Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists). Deprecated, use the `server.options.crl` option.", - multiple: true, - path: "https.crl[]", - type: "string", - }, - ], - description: - "Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists). Deprecated, use the `server.options.crl` option.", - multiple: true, - simpleType: "string", - }, - "https-crl-reset": { - configs: [ - { - description: - "Clear all items provided in 'https.crl' configuration. Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists). Deprecated, use the `server.options.crl` option.", - multiple: false, - path: "https.crl", - type: "reset", - }, - ], - description: - "Clear all items provided in 'https.crl' configuration. Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists). Deprecated, use the `server.options.crl` option.", - multiple: false, - simpleType: "boolean", - }, - "https-key": { - configs: [ - { - type: "string", - multiple: true, - description: - "Path to an SSL key or content of an SSL key. Deprecated, use the `server.options.key` option.", - path: "https.key[]", - }, - ], - description: - "Path to an SSL key or content of an SSL key. Deprecated, use the `server.options.key` option.", - simpleType: "string", - multiple: true, - }, - "https-key-reset": { - configs: [ - { - description: - "Clear all items provided in 'https.key' configuration. Path to an SSL key or content of an SSL key. Deprecated, use the `server.options.key` option.", - multiple: false, - path: "https.key", - type: "reset", - }, - ], - description: - "Clear all items provided in 'https.key' configuration. Path to an SSL key or content of an SSL key. Deprecated, use the `server.options.key` option.", - multiple: false, - simpleType: "boolean", - }, - "https-passphrase": { - configs: [ - { - type: "string", - multiple: false, - description: - "Passphrase for a pfx file. Deprecated, use the `server.options.passphrase` option.", - path: "https.passphrase", - }, - ], - description: - "Passphrase for a pfx file. Deprecated, use the `server.options.passphrase` option.", - simpleType: "string", - multiple: false, - }, - "https-pfx": { - configs: [ - { - type: "string", - multiple: true, - description: - "Path to an SSL pfx file or content of an SSL pfx file. Deprecated, use the `server.options.pfx` option.", - path: "https.pfx[]", - }, - ], - description: - "Path to an SSL pfx file or content of an SSL pfx file. Deprecated, use the `server.options.pfx` option.", - simpleType: "string", - multiple: true, - }, - "https-pfx-reset": { - configs: [ - { - description: - "Clear all items provided in 'https.pfx' configuration. Path to an SSL pfx file or content of an SSL pfx file. Deprecated, use the `server.options.pfx` option.", - multiple: false, - path: "https.pfx", - type: "reset", - }, - ], - description: - "Clear all items provided in 'https.pfx' configuration. Path to an SSL pfx file or content of an SSL pfx file. Deprecated, use the `server.options.pfx` option.", - multiple: false, - simpleType: "boolean", - }, - "https-request-cert": { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Request for an SSL certificate. Deprecated, use the `server.options.requestCert` option.", - negatedDescription: "Does not request for an SSL certificate.", - path: "https.requestCert", - }, - ], - description: - "Request for an SSL certificate. Deprecated, use the `server.options.requestCert` option.", - simpleType: "boolean", - multiple: false, - }, - ipc: { - configs: [ - { - type: "string", - multiple: false, - description: "Listen to a unix socket.", - path: "ipc", - }, - { - type: "enum", - values: [true], - multiple: false, - description: "Listen to a unix socket.", - path: "ipc", - }, - ], - description: "Listen to a unix socket.", - simpleType: "string", - multiple: false, - }, - "live-reload": { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Enables reload/refresh the page(s) when file changes are detected (enabled by default).", - negatedDescription: - "Disables reload/refresh the page(s) when file changes are detected (enabled by default).", - path: "liveReload", - }, - ], - description: - "Enables reload/refresh the page(s) when file changes are detected (enabled by default).", - simpleType: "boolean", - multiple: false, - }, - "magic-html": { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Tells dev-server whether to enable magic HTML routes (routes corresponding to your webpack output, for example '/main' for 'main.js').", - negatedDescription: - "Disables magic HTML routes (routes corresponding to your webpack output, for example '/main' for 'main.js').", - path: "magicHtml", - }, - ], - description: - "Tells dev-server whether to enable magic HTML routes (routes corresponding to your webpack output, for example '/main' for 'main.js').", - simpleType: "boolean", - multiple: false, - }, - open: { - configs: [ - { - type: "string", - multiple: true, - description: - "Allows to configure dev server to open the browser(s) and page(s) after server had been started (set it to true to open your default browser).", - path: "open[]", - }, - { - type: "boolean", - multiple: false, - description: - "Allows to configure dev server to open the browser(s) and page(s) after server had been started (set it to true to open your default browser).", - negatedDescription: "Does not open the default browser.", - path: "open", - }, - ], - description: - "Allows to configure dev server to open the browser(s) and page(s) after server had been started (set it to true to open your default browser).", - simpleType: "string", - multiple: true, - }, - "open-app": { - configs: [ - { - type: "string", - multiple: true, - description: - "Open specified browser. Deprecated: please use '--open-app-name'.", - path: "open[].app", - }, - ], - description: - "Open specified browser. Deprecated: please use '--open-app-name'.", - simpleType: "string", - multiple: true, - }, - "open-app-name": { - configs: [ - { - type: "string", - multiple: true, - description: "Open specified browser.", - path: "open[].app.name", - }, - { - type: "string", - multiple: true, - description: "Open specified browser.", - path: "open.app.name[]", - }, - ], - description: "Open specified browser.", - simpleType: "string", - multiple: true, - }, - "open-app-name-reset": { - configs: [ - { - type: "reset", - multiple: false, - description: - "Clear all items provided in 'open.app.name' configuration. Open specified browser.", - path: "open.app.name", - }, - ], - description: - "Clear all items provided in 'open.app.name' configuration. Open specified browser.", - simpleType: "boolean", - multiple: false, - }, - "open-reset": { - configs: [ - { - type: "reset", - multiple: false, - description: - "Clear all items provided in 'open' configuration. Allows to configure dev server to open the browser(s) and page(s) after server had been started (set it to true to open your default browser).", - path: "open", - }, - ], - description: - "Clear all items provided in 'open' configuration. Allows to configure dev server to open the browser(s) and page(s) after server had been started (set it to true to open your default browser).", - simpleType: "boolean", - multiple: false, - }, - "open-target": { - configs: [ - { - type: "string", - multiple: true, - description: "Opens specified page in browser.", - path: "open[].target", - }, - { - type: "string", - multiple: true, - description: "Opens specified page in browser.", - path: "open.target[]", - }, - ], - description: "Opens specified page in browser.", - simpleType: "string", - multiple: true, - }, - "open-target-reset": { - configs: [ - { - type: "reset", - multiple: false, - description: - "Clear all items provided in 'open.target' configuration. Opens specified page in browser.", - path: "open.target", - }, - ], - description: - "Clear all items provided in 'open.target' configuration. Opens specified page in browser.", - simpleType: "boolean", - multiple: false, - }, - port: { - configs: [ - { - type: "number", - multiple: false, - description: "Allows to specify a port to use.", - path: "port", - }, - { - type: "string", - multiple: false, - description: "Allows to specify a port to use.", - path: "port", - }, - { - type: "enum", - values: ["auto"], - multiple: false, - description: "Allows to specify a port to use.", - path: "port", - }, - ], - description: "Allows to specify a port to use.", - simpleType: "string", - multiple: false, - }, - "server-options-ca": { - configs: [ - { - description: - "Path to an SSL CA certificate or content of an SSL CA certificate.", - multiple: true, - path: "server.options.ca[]", - type: "string", - }, - ], - description: - "Path to an SSL CA certificate or content of an SSL CA certificate.", - multiple: true, - simpleType: "string", - }, - "server-options-ca-reset": { - configs: [ - { - description: - "Clear all items provided in 'server.options.ca' configuration. Path to an SSL CA certificate or content of an SSL CA certificate.", - multiple: false, - path: "server.options.ca", - type: "reset", - }, - ], - description: - "Clear all items provided in 'server.options.ca' configuration. Path to an SSL CA certificate or content of an SSL CA certificate.", - multiple: false, - simpleType: "boolean", - }, - "server-options-cacert": { - configs: [ - { - description: - "Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - multiple: true, - path: "server.options.cacert[]", - type: "string", - }, - ], - description: - "Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - multiple: true, - simpleType: "string", - }, - "server-options-cacert-reset": { - configs: [ - { - description: - "Clear all items provided in 'server.options.cacert' configuration. Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - multiple: false, - path: "server.options.cacert", - type: "reset", - }, - ], - description: - "Clear all items provided in 'server.options.cacert' configuration. Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - multiple: false, - simpleType: "boolean", - }, - "server-options-cert": { - configs: [ - { - description: - "Path to an SSL certificate or content of an SSL certificate.", - multiple: true, - path: "server.options.cert[]", - type: "string", - }, - ], - description: "Path to an SSL certificate or content of an SSL certificate.", - multiple: true, - simpleType: "string", - }, - "server-options-cert-reset": { - configs: [ - { - description: - "Clear all items provided in 'server.options.cert' configuration. Path to an SSL certificate or content of an SSL certificate.", - multiple: false, - path: "server.options.cert", - type: "reset", - }, - ], - description: - "Clear all items provided in 'server.options.cert' configuration. Path to an SSL certificate or content of an SSL certificate.", - multiple: false, - simpleType: "boolean", - }, - "server-options-crl": { - configs: [ - { - description: - "Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists).", - multiple: true, - path: "server.options.crl[]", - type: "string", - }, - ], - description: - "Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists).", - multiple: true, - simpleType: "string", - }, - "server-options-crl-reset": { - configs: [ - { - description: - "Clear all items provided in 'server.options.crl' configuration. Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists).", - multiple: false, - path: "server.options.crl", - type: "reset", - }, - ], - description: - "Clear all items provided in 'server.options.crl' configuration. Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists).", - multiple: false, - simpleType: "boolean", - }, - "server-options-key": { - configs: [ - { - description: "Path to an SSL key or content of an SSL key.", - multiple: true, - path: "server.options.key[]", - type: "string", - }, - ], - description: "Path to an SSL key or content of an SSL key.", - multiple: true, - simpleType: "string", - }, - "server-options-key-reset": { - configs: [ - { - description: - "Clear all items provided in 'server.options.key' configuration. Path to an SSL key or content of an SSL key.", - multiple: false, - path: "server.options.key", - type: "reset", - }, - ], - description: - "Clear all items provided in 'server.options.key' configuration. Path to an SSL key or content of an SSL key.", - multiple: false, - simpleType: "boolean", - }, - "server-options-passphrase": { - configs: [ - { - description: "Passphrase for a pfx file.", - multiple: false, - path: "server.options.passphrase", - type: "string", - }, - ], - description: "Passphrase for a pfx file.", - multiple: false, - simpleType: "string", - }, - "server-options-pfx": { - configs: [ - { - description: "Path to an SSL pfx file or content of an SSL pfx file.", - multiple: true, - path: "server.options.pfx[]", - type: "string", - }, - ], - description: "Path to an SSL pfx file or content of an SSL pfx file.", - multiple: true, - simpleType: "string", - }, - "server-options-pfx-reset": { - configs: [ - { - description: - "Clear all items provided in 'server.options.pfx' configuration. Path to an SSL pfx file or content of an SSL pfx file.", - multiple: false, - path: "server.options.pfx", - type: "reset", - }, - ], - description: - "Clear all items provided in 'server.options.pfx' configuration. Path to an SSL pfx file or content of an SSL pfx file.", - multiple: false, - simpleType: "boolean", - }, - "server-options-request-cert": { - configs: [ - { - description: "Request for an SSL certificate.", - negatedDescription: "Does not request for an SSL certificate.", - multiple: false, - path: "server.options.requestCert", - type: "boolean", - }, - ], - description: "Request for an SSL certificate.", - multiple: false, - simpleType: "boolean", - }, - "server-type": { - configs: [ - { - description: "Allows to set server and options (by default 'http').", - multiple: false, - path: "server.type", - type: "enum", - values: ["http", "https", "spdy"], - }, - ], - description: "Allows to set server and options (by default 'http').", - multiple: false, - simpleType: "string", - }, - static: { - configs: [ - { - type: "string", - multiple: true, - description: - "Allows to configure options for serving static files from directory (by default 'public' directory).", - path: "static[]", - }, - { - type: "boolean", - multiple: false, - description: - "Allows to configure options for serving static files from directory (by default 'public' directory).", - negatedDescription: - "Disallows to configure options for serving static files from directory.", - path: "static", - }, - ], - description: - "Allows to configure options for serving static files from directory (by default 'public' directory).", - simpleType: "string", - multiple: true, - }, - "static-directory": { - configs: [ - { - type: "string", - multiple: true, - description: "Directory for static contents.", - path: "static[].directory", - }, - ], - description: "Directory for static contents.", - simpleType: "string", - multiple: true, - }, - "static-public-path": { - configs: [ - { - type: "string", - multiple: true, - description: - "The static files will be available in the browser under this public path.", - path: "static[].publicPath", - }, - { - type: "string", - multiple: true, - description: - "The static files will be available in the browser under this public path.", - path: "static.publicPath[]", - }, - ], - description: - "The static files will be available in the browser under this public path.", - simpleType: "string", - multiple: true, - }, - "static-public-path-reset": { - configs: [ - { - type: "reset", - multiple: false, - description: - "Clear all items provided in 'static.publicPath' configuration. The static files will be available in the browser under this public path.", - path: "static.publicPath", - }, - ], - description: - "Clear all items provided in 'static.publicPath' configuration. The static files will be available in the browser under this public path.", - simpleType: "boolean", - multiple: false, - }, - "static-reset": { - configs: [ - { - type: "reset", - multiple: false, - description: - "Clear all items provided in 'static' configuration. Allows to configure options for serving static files from directory (by default 'public' directory).", - path: "static", - }, - ], - description: - "Clear all items provided in 'static' configuration. Allows to configure options for serving static files from directory (by default 'public' directory).", - simpleType: "boolean", - multiple: false, - }, - "static-serve-index": { - configs: [ - { - type: "boolean", - multiple: true, - description: - "Tells dev server to use serveIndex middleware when enabled.", - negatedDescription: - "Does not tell dev server to use serveIndex middleware.", - path: "static[].serveIndex", - }, - ], - description: "Tells dev server to use serveIndex middleware when enabled.", - simpleType: "boolean", - multiple: true, - }, - "static-watch": { - configs: [ - { - type: "boolean", - multiple: true, - description: "Watches for files in static content directory.", - negatedDescription: - "Does not watch for files in static content directory.", - path: "static[].watch", - }, - ], - description: "Watches for files in static content directory.", - simpleType: "boolean", - multiple: true, - }, - "watch-files": { - configs: [ - { - type: "string", - multiple: true, - description: - "Allows to configure list of globs/directories/files to watch for file changes.", - path: "watchFiles[]", - }, - ], - description: - "Allows to configure list of globs/directories/files to watch for file changes.", - simpleType: "string", - multiple: true, - }, - "watch-files-reset": { - configs: [ - { - type: "reset", - multiple: false, - description: - "Clear all items provided in 'watchFiles' configuration. Allows to configure list of globs/directories/files to watch for file changes.", - path: "watchFiles", - }, - ], - description: - "Clear all items provided in 'watchFiles' configuration. Allows to configure list of globs/directories/files to watch for file changes.", - simpleType: "boolean", - multiple: false, - }, - "web-socket-server": { - configs: [ - { - description: - "Deprecated: please use '--web-socket-server-type' option.", - negatedDescription: "Disallows to set web socket server and options.", - multiple: false, - path: "webSocketServer", - type: "enum", - values: [false], - }, - { - description: - "Deprecated: please use '--web-socket-server-type' option.", - multiple: false, - path: "webSocketServer", - type: "enum", - values: ["sockjs", "ws"], - }, - { - description: - "Allows to set web socket server and options (by default 'ws').", - multiple: false, - path: "webSocketServer", - type: "string", - }, - ], - description: - "Deprecated: please use '--web-socket-server-type' option. Allows to set web socket server and options (by default 'ws').", - simpleType: "string", - multiple: false, - }, - "web-socket-server-type": { - configs: [ - { - description: - "Allows to set web socket server and options (by default 'ws').", - multiple: false, - path: "webSocketServer.type", - type: "enum", - values: ["sockjs", "ws"], - }, - { - description: - "Allows to set web socket server and options (by default 'ws').", - multiple: false, - path: "webSocketServer.type", - type: "string", - }, - ], - description: - "Allows to set web socket server and options (by default 'ws').", - simpleType: "string", - multiple: false, - }, -}; diff --git a/bin/webpack-dev-server.js b/bin/webpack-dev-server.js index de0cfd3b32..5e346d2ab4 100755 --- a/bin/webpack-dev-server.js +++ b/bin/webpack-dev-server.js @@ -2,17 +2,22 @@ /* Based on webpack/bin/webpack.js */ /* eslint-disable no-console */ -"use strict"; +import cp from "node:child_process"; +import { createRequire } from "node:module"; +import path from "node:path"; +import readLine from "node:readline"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import fs from "graceful-fs"; + +const require = createRequire(import.meta.url); /** * @param {string} command process to run * @param {string[]} args command line arguments * @returns {Promise} promise */ -const runCommand = (command, args) => { - const cp = require("node:child_process"); - - return new Promise((resolve, reject) => { +const runCommand = (command, args) => + new Promise((resolve, reject) => { const executedCommand = cp.spawn(command, args, { stdio: "inherit", shell: true, @@ -30,7 +35,6 @@ const runCommand = (command, args) => { } }); }); -}; /** * @param {string} packageName name of the package @@ -41,63 +45,30 @@ const isInstalled = (packageName) => { return true; } - const path = require("node:path"); - const fs = require("graceful-fs"); - - let dir = __dirname; - - do { - try { - if ( - fs.statSync(path.join(dir, "node_modules", packageName)).isDirectory() - ) { - return true; - } - } catch { - // Nothing - } - } while (dir !== (dir = path.dirname(dir))); - - // https://github.com/nodejs/node/blob/v18.9.1/lib/internal/modules/cjs/loader.js#L1274 - // @ts-expect-error - for (const internalPath of require("node:module").globalPaths) { - try { - if (fs.statSync(path.join(internalPath, packageName)).isDirectory()) { - return true; - } - } catch { - // Nothing - } + try { + require.resolve(packageName); + return true; + } catch { + return false; } - - return false; }; /** * @param {CliOption} cli options - * @returns {void} + * @returns {Promise} */ -const runCli = (cli) => { +const runCli = async (cli) => { if (cli.preprocess) { cli.preprocess(); } - const path = require("node:path"); - - const pkgPath = require.resolve(`${cli.package}/package.json`); + const pkgUrl = import.meta.resolve(`${cli.package}/package.json`); + const pkgPath = fileURLToPath(pkgUrl); + const pkg = (await import(pkgUrl, { with: { type: "json" } })).default; - const pkg = require(pkgPath); + const binPath = path.resolve(path.dirname(pkgPath), pkg.bin[cli.binName]); - if (pkg.type === "module" || /\.mjs/i.test(pkg.bin[cli.binName])) { - import(path.resolve(path.dirname(pkgPath), pkg.bin[cli.binName])).catch( - (error) => { - console.error(error); - process.exitCode = 1; - }, - ); - } else { - require(path.resolve(path.dirname(pkgPath), pkg.bin[cli.binName])); - } + await import(pathToFileURL(binPath).href); }; /** @@ -123,10 +94,6 @@ const cli = { }; if (!cli.installed) { - const path = require("node:path"); - const fs = require("graceful-fs"); - const readLine = require("node:readline"); - const notify = `CLI for webpack must be installed.\n ${cli.name} (${cli.url})\n`; console.error(notify); @@ -187,14 +154,17 @@ if (!cli.installed) { ); runCommand(packageManager, [...installOptions, cli.package]) - .then(() => { - runCli(cli); - }) + .then(() => runCli(cli)) .catch((error) => { console.error(error); process.exitCode = 1; }); }); } else { - runCli(cli); + try { + await runCli(cli); + } catch (error) { + console.error(error); + process.exitCode = 1; + } } diff --git a/client-src/clients/SockJSClient.js b/client-src/clients/SockJSClient.js deleted file mode 100644 index cd9d67ad48..0000000000 --- a/client-src/clients/SockJSClient.js +++ /dev/null @@ -1,46 +0,0 @@ -import SockJS from "../modules/sockjs-client/index.js"; -import { log } from "../utils/log.js"; - -/** @typedef {import("../index").EXPECTED_ANY} EXPECTED_ANY */ - -/** - * @implements {CommunicationClient} - */ -export default class SockJSClient { - /** - * @param {string} url url - */ - constructor(url) { - // SockJS requires `http` and `https` protocols - this.sock = new SockJS( - url.replace(/^ws:/i, "http:").replace(/^wss:/i, "https:"), - ); - this.sock.onerror = (error) => { - log.error(error); - }; - } - - /** - * @param {(...args: EXPECTED_ANY[]) => void} fn function - */ - onOpen(fn) { - this.sock.onopen = fn; - } - - /** - * @param {(...args: EXPECTED_ANY[]) => void} fn function - */ - onClose(fn) { - this.sock.onclose = fn; - } - - // call f with the message string as the first argument - /** - * @param {(...args: EXPECTED_ANY[]) => void} fn function - */ - onMessage(fn) { - this.sock.onmessage = (err) => { - fn(err.data); - }; - } -} diff --git a/client-src/clients/WebSocketClient.js b/client-src/clients/WebSocketClient.js index de7e0ea6a1..b9d1711031 100644 --- a/client-src/clients/WebSocketClient.js +++ b/client-src/clients/WebSocketClient.js @@ -1,6 +1,6 @@ import { log } from "../utils/log.js"; -/** @typedef {import("../index").EXPECTED_ANY} EXPECTED_ANY */ +/** @typedef {import("../index.js").EXPECTED_ANY} EXPECTED_ANY */ /** * @implements {CommunicationClient} diff --git a/client-src/globals.d.ts b/client-src/globals.d.ts index a6aeff9c99..bdf8a44f49 100644 --- a/client-src/globals.d.ts +++ b/client-src/globals.d.ts @@ -20,5 +20,5 @@ declare module "ansi-html-community" { function setColors(colors: Record): void; } - export = ansiHtmlCommunity; + export default ansiHtmlCommunity; } diff --git a/client-src/index.js b/client-src/index.js index 60527ef029..e8a650ea3d 100644 --- a/client-src/index.js +++ b/client-src/index.js @@ -9,7 +9,7 @@ import socket from "./socket.js"; import { log, setLogLevel } from "./utils/log.js"; import sendMessage from "./utils/sendMessage.js"; -// eslint-disable-next-line jsdoc/no-restricted-syntax +// eslint-disable-next-line jsdoc/reject-any-type /** @typedef {any} EXPECTED_ANY */ /** diff --git a/client-src/modules/sockjs-client/index.js b/client-src/modules/sockjs-client/index.js deleted file mode 100644 index 96035e03ab..0000000000 --- a/client-src/modules/sockjs-client/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from "sockjs-client"; diff --git a/client-src/overlay.js b/client-src/overlay.js index 0de01e9834..6003b6194b 100644 --- a/client-src/overlay.js +++ b/client-src/overlay.js @@ -3,7 +3,7 @@ import ansiHTML from "ansi-html-community"; -/** @typedef {import("./index").EXPECTED_ANY} EXPECTED_ANY */ +/** @typedef {import("./index.js").EXPECTED_ANY} EXPECTED_ANY */ /** * @type {(input: string, position: number) => number | undefined} @@ -79,16 +79,16 @@ function encode(text) { /** * @typedef {object} Context - * @property {'warning' | 'error'} level level - * @property {(string | Message)[]} messages messages - * @property {'build' | 'runtime'} messageSource message source + * @property {"warning" | "error"} level level + * @property {(string | Message)[]} messages messages + * @property {"build" | "runtime"} messageSource message source */ /** @typedef {{ type: string } & Record} Event */ /** * @typedef {object} Options - * @property {{ [state: string]: { on: Record }> } }} states states + * @property {{ [state: string]: { on: Record } }} states states * @property {Context} context context * @property {string} initial initial */ @@ -149,9 +149,9 @@ function createMachine({ states, context, initial }, { actions }) { /** * @typedef {object} ShowOverlayData - * @property {'warning' | 'error'} level level - * @property {(string | Message)[]} messages messages - * @property {'build' | 'runtime'} messageSource message source + * @property {"warning" | "error"} level level + * @property {(string | Message)[]} messages messages + * @property {"build" | "runtime"} messageSource message source */ /** @@ -390,7 +390,7 @@ const colors = { ansiHTML.setColors(colors); -/** @typedef {Error & { file?: string, moduleName?: string, moduleIdentifier?: string, loc?: string, message?: string; stack?: string | string[] }} Message */ +/** @typedef {Error & { file?: string, moduleName?: string, moduleIdentifier?: string, loc?: string, message?: string, stack?: string | string[] }} Message */ /** * @param {string} type type @@ -450,7 +450,7 @@ const createOverlay = (options) => { let containerElement; /** @type {HTMLDivElement | null | undefined} */ let headerElement; - /** @type {Array<(element: HTMLDivElement) => void>} */ + /** @type {((element: HTMLDivElement) => void)[]} */ let onLoadQueue = []; /** @type {Omit | undefined} */ let overlayTrustedTypesPolicy; @@ -589,7 +589,7 @@ const createOverlay = (options) => { * @param {string} type type * @param {(string | Message)[]} messages messages * @param {undefined | false | string} trustedTypesPolicyName trusted types policy name - * @param {'build' | 'runtime'} messageSource message source + * @param {"build" | "runtime"} messageSource message source */ function show(type, messages, trustedTypesPolicyName, messageSource) { ensureOverlayExists(() => { diff --git a/client-src/socket.js b/client-src/socket.js index 7fa045a06a..c44e633a3e 100644 --- a/client-src/socket.js +++ b/client-src/socket.js @@ -4,7 +4,7 @@ import WebSocketClient from "./clients/WebSocketClient.js"; import { log } from "./utils/log.js"; /** @typedef {import("./index.js").EXPECTED_ANY} EXPECTED_ANY */ -/** @typedef {import("./clients/SockJSClient")} SockJSClient */ +/** @typedef {WebSocketClient} */ // this WebsocketClient is here as a default fallback, in case the client is not injected /** @type {CommunicationClientConstructor} */ diff --git a/client-src/utils/sendMessage.js b/client-src/utils/sendMessage.js index 3da67069e0..4e4e7dc793 100644 --- a/client-src/utils/sendMessage.js +++ b/client-src/utils/sendMessage.js @@ -1,6 +1,6 @@ /* global WorkerGlobalScope */ -/** @typedef {import("../index").EXPECTED_ANY} EXPECTED_ANY */ +/** @typedef {import("../index.js").EXPECTED_ANY} EXPECTED_ANY */ // Send messages to the outside, so plugins can consume it. /** diff --git a/client-src/webpack.config.js b/client-src/webpack.config.js index 210f775f5c..e806f668c2 100644 --- a/client-src/webpack.config.js +++ b/client-src/webpack.config.js @@ -1,23 +1,22 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import webpack from "webpack"; +import { merge } from "webpack-merge"; -const path = require("node:path"); -const webpack = require("webpack"); -const { merge } = require("webpack-merge"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const library = { library: { - // type: "module", - type: "commonjs", + type: "module", }, }; const baseForModules = { devtool: false, mode: "development", - // TODO enable this in future after fix bug with `eval` in webpack - // experiments: { - // outputModule: true, - // }, + experiments: { + outputModule: true, + }, output: { path: path.resolve(__dirname, "../client/modules"), ...library, @@ -37,7 +36,7 @@ const baseForModules = { }, }; -module.exports = [ +export default [ merge(baseForModules, { entry: path.join(__dirname, "modules/logger/index.js"), output: { @@ -69,13 +68,4 @@ module.exports = [ ), ], }), - merge(baseForModules, { - entry: path.join(__dirname, "modules/sockjs-client/index.js"), - output: { - filename: "sockjs-client/index.js", - library: "SockJS", - libraryTarget: "umd", - globalObject: "(typeof self !== 'undefined' ? self : this)", - }, - }), ]; diff --git a/commitlint.config.js b/commitlint.config.js index 1698d22ed8..f0f7617e9e 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -1,6 +1,4 @@ -"use strict"; - -module.exports = { +export default { extends: ["@commitlint/config-conventional"], rules: { "header-max-length": [0], diff --git a/eslint.config.mjs b/eslint.config.mjs index 52ac3be3ee..bb93d5feb3 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -21,5 +21,19 @@ export default defineConfig([ { files: ["test/**/*"], extends: [configs["universal-recommended"]], + rules: { + // Test callbacks (it/test/subtest arrow functions) don't need JSDoc. + "jsdoc/require-jsdoc": "off", + // Tests legitimately log diagnostics (retry attempts, etc.). + "no-console": "off", + // node:test callbacks receive `t` (TestContext) as a parameter. + "id-length": "off", + }, + }, + { + files: ["scripts/node-test-setup.mjs", "scripts/run-tests.mjs"], + rules: { + "n/no-unsupported-features/node-builtins": "off", + }, }, ]); diff --git a/examples/README.md b/examples/README.md index 2fd15a53ed..ff19cd3746 100644 --- a/examples/README.md +++ b/examples/README.md @@ -16,6 +16,27 @@ An example should be as minimal as possible and consists of at least: API examples can be found in the `api` directory. These examples demonstrate how to access and run `webpack-dev-server` directly in your application / script. +## Module format + +Examples are written as ES modules (`import` / `export`) because the project's +`package.json` sets `"type": "module"`. The shared helper `util.js` exports a +`setup` function that each `webpack.config.js` calls like this: + +```js +import { setup } from "../util.js"; + +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + }, + import.meta.url, +); +``` + +If you still need a CommonJS configuration, see [`default-cjs/`](./default-cjs) +for a minimal CJS example using a `.cjs` extension. + ## Notes - Each example's `webpack` config is wrapped with `util.setup`; a helper function diff --git a/examples/api/internal-ip/README.md b/examples/api/find-ip/README.md similarity index 65% rename from examples/api/internal-ip/README.md rename to examples/api/find-ip/README.md index 07c1446444..00e67e7da6 100644 --- a/examples/api/internal-ip/README.md +++ b/examples/api/find-ip/README.md @@ -1,13 +1,13 @@ -# internalIP(family: "v4" | "v6") +# findIp(family: "v4" | "v6") -Returns the internal IP address asynchronously. +Returns the internal IP address. ```js const WebpackDevServer = require("webpack-dev-server"); const logInternalIPs = async () => { - const localIPv4 = await WebpackDevServer.internalIP("v4"); - const localIPv6 = await WebpackDevServer.internalIP("v6"); + const localIPv4 = WebpackDevServer.findIp("v4", false); + const localIPv6 = WebpackDevServer.findIp("v6", false); console.log("Local IPv4 address:", localIPv4); console.log("Local IPv6 address:", localIPv6); diff --git a/examples/api/find-ip/app.js b/examples/api/find-ip/app.js new file mode 100644 index 0000000000..32aabd0995 --- /dev/null +++ b/examples/api/find-ip/app.js @@ -0,0 +1,11 @@ +import WebpackDevServer from "../../../lib/Server.js"; + +const logInternalIPs = async () => { + const localIPv4 = WebpackDevServer.findIp("v4", false); + const localIPv6 = WebpackDevServer.findIp("v6", false); + + console.log("Local IPv4 address:", localIPv4); + console.log("Local IPv6 address:", localIPv6); +}; + +logInternalIPs(); diff --git a/examples/api/internal-ip-sync/README.md b/examples/api/internal-ip-sync/README.md deleted file mode 100644 index 6c880a4e7d..0000000000 --- a/examples/api/internal-ip-sync/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# internalIPSync(family: "v4" | "v6") - -Returns the internal IP address synchronously. - -```js -const WebpackDevServer = require("webpack-dev-server"); - -const localIPv4 = WebpackDevServer.internalIPSync("v4"); -const localIPv6 = WebpackDevServer.internalIPSync("v6"); - -console.log("Local IPv4 address:", localIPv4); -console.log("Local IPv6 address:", localIPv6); -``` - -Use the following command to run this example: - -```console -node app.js -``` - -## What Should Happen - -- The script should log your local IPv4 and IPv6 address. diff --git a/examples/api/internal-ip-sync/app.js b/examples/api/internal-ip-sync/app.js deleted file mode 100644 index ecf504551c..0000000000 --- a/examples/api/internal-ip-sync/app.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; - -const WebpackDevServer = require("../../../lib/Server"); - -const localIPv4 = WebpackDevServer.internalIPSync("v4"); -const localIPv6 = WebpackDevServer.internalIPSync("v6"); - -console.log("Local IPv4 address:", localIPv4); -console.log("Local IPv6 address:", localIPv6); diff --git a/examples/api/internal-ip/app.js b/examples/api/internal-ip/app.js deleted file mode 100644 index 5b95533e56..0000000000 --- a/examples/api/internal-ip/app.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -const WebpackDevServer = require("../../../lib/Server"); - -const logInternalIPs = async () => { - const localIPv4 = await WebpackDevServer.internalIP("v4"); - const localIPv6 = await WebpackDevServer.internalIP("v6"); - - console.log("Local IPv4 address:", localIPv4); - console.log("Local IPv6 address:", localIPv6); -}; - -logInternalIPs(); diff --git a/examples/api/middleware/app.js b/examples/api/middleware/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/api/middleware/app.js +++ b/examples/api/middleware/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/api/middleware/server.js b/examples/api/middleware/server.js index 9102416371..9540272bb7 100644 --- a/examples/api/middleware/server.js +++ b/examples/api/middleware/server.js @@ -1,8 +1,6 @@ -"use strict"; - -const Webpack = require("webpack"); -const WebpackDevServer = require("../../../lib/Server"); -const webpackConfig = require("./webpack.config"); +import Webpack from "webpack"; +import WebpackDevServer from "../../../lib/Server.js"; +import webpackConfig from "./webpack.config.js"; const compiler = Webpack(webpackConfig); const devServerOptions = webpackConfig.devServer; diff --git a/examples/api/middleware/webpack.config.js b/examples/api/middleware/webpack.config.js index 74e736ae9a..2a3bc16cc8 100644 --- a/examples/api/middleware/webpack.config.js +++ b/examples/api/middleware/webpack.config.js @@ -1,16 +1,17 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - output: { - filename: "bundle.js", - }, - stats: { - colors: true, +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + output: { + filename: "bundle.js", + }, + stats: { + colors: true, + }, }, -}); + import.meta.url, +); diff --git a/examples/api/simple/app.js b/examples/api/simple/app.js index 550a73c229..cf3af3c2ea 100644 --- a/examples/api/simple/app.js +++ b/examples/api/simple/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/api/simple/server.js b/examples/api/simple/server.js index 6aa74ce368..cc66e7166c 100644 --- a/examples/api/simple/server.js +++ b/examples/api/simple/server.js @@ -1,8 +1,6 @@ -"use strict"; - -const Webpack = require("webpack"); -const WebpackDevServer = require("../../../lib/Server"); -const webpackConfig = require("./webpack.config"); +import Webpack from "webpack"; +import WebpackDevServer from "../../../lib/Server.js"; +import webpackConfig from "./webpack.config.js"; const compiler = Webpack(webpackConfig); const devServerOptions = { ...webpackConfig.devServer, open: true }; diff --git a/examples/api/simple/webpack.config.js b/examples/api/simple/webpack.config.js index 74e736ae9a..2a3bc16cc8 100644 --- a/examples/api/simple/webpack.config.js +++ b/examples/api/simple/webpack.config.js @@ -1,16 +1,17 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - output: { - filename: "bundle.js", - }, - stats: { - colors: true, +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + output: { + filename: "bundle.js", + }, + stats: { + colors: true, + }, }, -}); + import.meta.url, +); diff --git a/examples/api/start-callback/app.js b/examples/api/start-callback/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/api/start-callback/app.js +++ b/examples/api/start-callback/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/api/start-callback/server.js b/examples/api/start-callback/server.js index 116ef47ad5..832b4c680f 100644 --- a/examples/api/start-callback/server.js +++ b/examples/api/start-callback/server.js @@ -1,8 +1,6 @@ -"use strict"; - -const Webpack = require("webpack"); -const WebpackDevServer = require("../../../lib/Server"); -const webpackConfig = require("./webpack.config"); +import Webpack from "webpack"; +import WebpackDevServer from "../../../lib/Server.js"; +import webpackConfig from "./webpack.config.js"; const compiler = Webpack(webpackConfig); const devServerOptions = { ...webpackConfig.devServer, open: true }; diff --git a/examples/api/start-callback/webpack.config.js b/examples/api/start-callback/webpack.config.js index 74e736ae9a..2a3bc16cc8 100644 --- a/examples/api/start-callback/webpack.config.js +++ b/examples/api/start-callback/webpack.config.js @@ -1,16 +1,17 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - output: { - filename: "bundle.js", - }, - stats: { - colors: true, +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + output: { + filename: "bundle.js", + }, + stats: { + colors: true, + }, }, -}); + import.meta.url, +); diff --git a/examples/api/start/app.js b/examples/api/start/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/api/start/app.js +++ b/examples/api/start/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/api/start/server.js b/examples/api/start/server.js index 11659156e2..313e6e60bd 100644 --- a/examples/api/start/server.js +++ b/examples/api/start/server.js @@ -1,8 +1,6 @@ -"use strict"; - -const Webpack = require("webpack"); -const WebpackDevServer = require("../../../lib/Server"); -const webpackConfig = require("./webpack.config"); +import Webpack from "webpack"; +import WebpackDevServer from "../../../lib/Server.js"; +import webpackConfig from "./webpack.config.js"; const compiler = Webpack(webpackConfig); const devServerOptions = { ...webpackConfig.devServer, open: true }; diff --git a/examples/api/start/webpack.config.js b/examples/api/start/webpack.config.js index 74e736ae9a..2a3bc16cc8 100644 --- a/examples/api/start/webpack.config.js +++ b/examples/api/start/webpack.config.js @@ -1,16 +1,17 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - output: { - filename: "bundle.js", - }, - stats: { - colors: true, +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + output: { + filename: "bundle.js", + }, + stats: { + colors: true, + }, }, -}); + import.meta.url, +); diff --git a/examples/api/stop-callback/app.js b/examples/api/stop-callback/app.js index 8ac9db4eaf..7fb3dafe4e 100644 --- a/examples/api/stop-callback/app.js +++ b/examples/api/stop-callback/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/api/stop-callback/server.js b/examples/api/stop-callback/server.js index 09656cd418..ab83622c54 100644 --- a/examples/api/stop-callback/server.js +++ b/examples/api/stop-callback/server.js @@ -1,8 +1,6 @@ -"use strict"; - -const Webpack = require("webpack"); -const WebpackDevServer = require("../../../lib/Server"); -const webpackConfig = require("./webpack.config"); +import Webpack from "webpack"; +import WebpackDevServer from "../../../lib/Server.js"; +import webpackConfig from "./webpack.config.js"; const compiler = Webpack(webpackConfig); const devServerOptions = { ...webpackConfig.devServer, open: true }; diff --git a/examples/api/stop-callback/webpack.config.js b/examples/api/stop-callback/webpack.config.js index 74e736ae9a..2a3bc16cc8 100644 --- a/examples/api/stop-callback/webpack.config.js +++ b/examples/api/stop-callback/webpack.config.js @@ -1,16 +1,17 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - output: { - filename: "bundle.js", - }, - stats: { - colors: true, +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + output: { + filename: "bundle.js", + }, + stats: { + colors: true, + }, }, -}); + import.meta.url, +); diff --git a/examples/api/stop/app.js b/examples/api/stop/app.js index 8ac9db4eaf..7fb3dafe4e 100644 --- a/examples/api/stop/app.js +++ b/examples/api/stop/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/api/stop/server.js b/examples/api/stop/server.js index 6439456ff2..d7bf6bf5ae 100644 --- a/examples/api/stop/server.js +++ b/examples/api/stop/server.js @@ -1,8 +1,6 @@ -"use strict"; - -const Webpack = require("webpack"); -const WebpackDevServer = require("../../../lib/Server"); -const webpackConfig = require("./webpack.config"); +import Webpack from "webpack"; +import WebpackDevServer from "../../../lib/Server.js"; +import webpackConfig from "./webpack.config.js"; const compiler = Webpack(webpackConfig); const devServerOptions = { ...webpackConfig.devServer, open: true }; diff --git a/examples/api/stop/webpack.config.js b/examples/api/stop/webpack.config.js index 74e736ae9a..2a3bc16cc8 100644 --- a/examples/api/stop/webpack.config.js +++ b/examples/api/stop/webpack.config.js @@ -1,16 +1,17 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - output: { - filename: "bundle.js", - }, - stats: { - colors: true, +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + output: { + filename: "bundle.js", + }, + stats: { + colors: true, + }, }, -}); + import.meta.url, +); diff --git a/examples/app/connect/app.js b/examples/app/connect/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/app/connect/app.js +++ b/examples/app/connect/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/app/connect/webpack.config.js b/examples/app/connect/webpack.config.js index 0b7dd7bc23..f54d6f5bc4 100644 --- a/examples/app/connect/webpack.config.js +++ b/examples/app/connect/webpack.config.js @@ -1,14 +1,15 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const connect = require("connect"); -const { setup } = require("../../util"); +import connect from "connect"; +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - app: () => connect(), +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + app: () => connect(), + }, }, -}); + import.meta.url, +); diff --git a/examples/app/hono/app.js b/examples/app/hono/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/app/hono/app.js +++ b/examples/app/hono/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/app/hono/webpack.config.js b/examples/app/hono/webpack.config.js index dff0e98988..7a9682ea46 100644 --- a/examples/app/hono/webpack.config.js +++ b/examples/app/hono/webpack.config.js @@ -1,55 +1,56 @@ -"use strict"; - -const { createAdaptorServer } = require("@hono/node-server"); +import { createAdaptorServer } from "@hono/node-server"; // eslint-disable-next-line import/no-unresolved -const { serveStatic } = require("@hono/node-server/serve-static"); -const { Hono } = require("hono"); -const wdm = require("webpack-dev-middleware"); -const { setup } = require("../../util"); +import { serveStatic } from "@hono/node-server/serve-static"; +import { Hono } from "hono"; +import wdm from "webpack-dev-middleware"; +import { setup } from "../../util.js"; // our setup function adds behind-the-scenes bits to the config that all of our // examples need -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - // WARNING: - // - // You always need to set up middlewares which you required for your app, - // built-in middlewares (like `history-api-fallback`/etc) doesn't work by default with `hono` - setupMiddlewares: (_, devServer) => [ - { - name: "webpack-dev-middleware", - middleware: wdm.honoWrapper(devServer.compiler), - }, - { - name: "static", - path: "/.assets/*", - middleware: serveStatic({ - root: "../../.assets", - rewriteRequestPath: (item) => item.replace(/^\/\.assets\//, "/"), +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + // WARNING: + // + // You always need to set up middlewares which you required for your app, + // built-in middlewares (like `history-api-fallback`/etc) doesn't work by default with `hono` + setupMiddlewares: (_, devServer) => [ + { + name: "webpack-dev-middleware", + middleware: wdm.honoWrapper(devServer.compiler), + }, + { + name: "static", + path: "/.assets/*", + middleware: serveStatic({ + root: "../../.assets", + rewriteRequestPath: (item) => item.replace(/^\/\.assets\//, "/"), + }), + }, + ], + app: () => new Hono(), + server: (_, app) => + createAdaptorServer({ + fetch: app.fetch, + // + // Uncomment for `https` + // createServer: require('node:https').createServer, + // serverOptions: { + // key: fs.readFileSync("./ssl/localhost-privkey.pem"), + // cert: fs.readFileSync("./ssl/localhost-cert.pem"), + // }, + // + // Uncomment for `http2` + // createServer: require("node:http2").createSecureServer, + // serverOptions: { + // allowHTTP1: true, + // key: require("fs").readFileSync("./ssl/localhost-privkey.pem"), + // cert: require("fs").readFileSync("./ssl/localhost-cert.pem"), + // }, }), - }, - ], - app: () => new Hono(), - server: (_, app) => - createAdaptorServer({ - fetch: app.fetch, - // - // Uncomment for `https` - // createServer: require('node:https').createServer, - // serverOptions: { - // key: fs.readFileSync("./ssl/localhost-privkey.pem"), - // cert: fs.readFileSync("./ssl/localhost-cert.pem"), - // }, - // - // Uncomment for `http2` - // createServer: require("node:http2").createSecureServer, - // serverOptions: { - // allowHTTP1: true, - // key: require("fs").readFileSync("./ssl/localhost-privkey.pem"), - // cert: require("fs").readFileSync("./ssl/localhost-cert.pem"), - // }, - }), + }, }, -}); + import.meta.url, +); diff --git a/examples/bonjour/boolean/app.js b/examples/bonjour/boolean/app.js index f8e58b3b28..38f92d6076 100644 --- a/examples/bonjour/boolean/app.js +++ b/examples/bonjour/boolean/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.innerHTML = "Please check your Zeroconf service."; diff --git a/examples/bonjour/boolean/webpack.config.js b/examples/bonjour/boolean/webpack.config.js index 34550ba9a1..fa0c4e0c13 100644 --- a/examples/bonjour/boolean/webpack.config.js +++ b/examples/bonjour/boolean/webpack.config.js @@ -1,13 +1,14 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - bonjour: true, +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + bonjour: true, + }, }, -}); + import.meta.url, +); diff --git a/examples/bonjour/object/app.js b/examples/bonjour/object/app.js index f8e58b3b28..38f92d6076 100644 --- a/examples/bonjour/object/app.js +++ b/examples/bonjour/object/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.innerHTML = "Please check your Zeroconf service."; diff --git a/examples/bonjour/object/webpack.config.js b/examples/bonjour/object/webpack.config.js index 80e0150a65..da7b85af49 100644 --- a/examples/bonjour/object/webpack.config.js +++ b/examples/bonjour/object/webpack.config.js @@ -1,17 +1,18 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - bonjour: { - name: "webpack-dev-server", - type: "https", - subtype: "webpack", +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + bonjour: { + name: "webpack-dev-server", + type: "https", + subtype: "webpack", + }, }, }, -}); + import.meta.url, +); diff --git a/examples/client/logging/app.js b/examples/client/logging/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/client/logging/app.js +++ b/examples/client/logging/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/client/logging/webpack.config.js b/examples/client/logging/webpack.config.js index c5f88ce70e..cb3ccb99d7 100644 --- a/examples/client/logging/webpack.config.js +++ b/examples/client/logging/webpack.config.js @@ -1,29 +1,30 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - plugins: [ - { - apply(compiler) { - compiler.hooks.thisCompilation.tap( - "warnings-webpack-plugin", - (compilation) => { - compilation.warnings.push( - new Error("Manual warnings produced during compilation."), - ); - }, - ); +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + plugins: [ + { + apply(compiler) { + compiler.hooks.thisCompilation.tap( + "warnings-webpack-plugin", + (compilation) => { + compilation.warnings.push( + new Error("Manual warnings produced during compilation."), + ); + }, + ); + }, + }, + ], + devServer: { + client: { + logging: "info", }, - }, - ], - devServer: { - client: { - logging: "info", }, }, -}); + import.meta.url, +); diff --git a/examples/client/overlay/app.js b/examples/client/overlay/app.js index 0303b0653f..6ff0610231 100644 --- a/examples/client/overlay/app.js +++ b/examples/client/overlay/app.js @@ -1,6 +1,6 @@ -"use strict"; - -const createButton = require("./create-button"); +import createButton from "./create-button.js"; +// eslint-disable-next-line import/no-unresolved, import/extensions +import invalid from "./invalid.js"; /** * @param {string} errorMessage @@ -46,9 +46,6 @@ target.insertAdjacentElement( }), ); -// eslint-disable-next-line import/no-unresolved, import/extensions -const invalid = require("./invalid.js"); - console.log(invalid); target.classList.add("pass"); target.innerHTML = "Success!"; diff --git a/examples/client/overlay/create-button.js b/examples/client/overlay/create-button.js index 4631083de9..06019deacd 100644 --- a/examples/client/overlay/create-button.js +++ b/examples/client/overlay/create-button.js @@ -1,15 +1,13 @@ -"use strict"; - /** * @param {string} label * @param {() => void} onClick * @returns HTMLButtonElement */ -module.exports = function createButton(label, onClick) { +export default function createButton(label, onClick) { const button = document.createElement("button"); button.addEventListener("click", onClick); button.innerHTML = label; return button; -}; +} diff --git a/examples/client/overlay/webpack.config.js b/examples/client/overlay/webpack.config.js index 46d34de85f..9b87039cd6 100644 --- a/examples/client/overlay/webpack.config.js +++ b/examples/client/overlay/webpack.config.js @@ -1,41 +1,42 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - // create error for overlay - entry: "./app.js", - devServer: { - client: { - overlay: { - warnings: false, - runtimeErrors: (msg) => { - if (msg) { - if (msg instanceof DOMException && msg.name === "AbortError") { - return false; - } +export default setup( + { + context: import.meta.dirname, + // create error for overlay + entry: "./app.js", + devServer: { + client: { + overlay: { + warnings: false, + runtimeErrors: (msg) => { + if (msg) { + if (msg instanceof DOMException && msg.name === "AbortError") { + return false; + } - let msgString; + let msgString; - if (msg instanceof Error) { - msgString = msg.message; - } else if (typeof msg === "string") { - msgString = msg; - } + if (msg instanceof Error) { + msgString = msg.message; + } else if (typeof msg === "string") { + msgString = msg; + } - if (msgString) { - return !/something/i.test(msgString); + if (msgString) { + return !/something/i.test(msgString); + } } - } - return true; + return true; + }, }, }, }, + // uncomment to test for IE + // target: ["web", "es5"], }, - // uncomment to test for IE - // target: ["web", "es5"], -}); + import.meta.url, +); diff --git a/examples/client/progress/app.js b/examples/client/progress/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/client/progress/app.js +++ b/examples/client/progress/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/client/progress/webpack.config.js b/examples/client/progress/webpack.config.js index d3f044a064..018f022ed7 100644 --- a/examples/client/progress/webpack.config.js +++ b/examples/client/progress/webpack.config.js @@ -1,15 +1,16 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - client: { - progress: true, +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + client: { + progress: true, + }, }, }, -}); + import.meta.url, +); diff --git a/examples/client/reconnect/false/app.js b/examples/client/reconnect/false/app.js index f489bd6f33..f6b8a060fb 100644 --- a/examples/client/reconnect/false/app.js +++ b/examples/client/reconnect/false/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/client/reconnect/false/webpack.config.js b/examples/client/reconnect/false/webpack.config.js index 4d9ffc4eaa..11d38a5b52 100644 --- a/examples/client/reconnect/false/webpack.config.js +++ b/examples/client/reconnect/false/webpack.config.js @@ -1,15 +1,16 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../../util"); +import { setup } from "../../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - client: { - reconnect: false, +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + client: { + reconnect: false, + }, }, }, -}); + import.meta.url, +); diff --git a/examples/client/reconnect/number/app.js b/examples/client/reconnect/number/app.js index f489bd6f33..f6b8a060fb 100644 --- a/examples/client/reconnect/number/app.js +++ b/examples/client/reconnect/number/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/client/reconnect/number/webpack.config.js b/examples/client/reconnect/number/webpack.config.js index 831deb76ff..aa4c65072a 100644 --- a/examples/client/reconnect/number/webpack.config.js +++ b/examples/client/reconnect/number/webpack.config.js @@ -1,15 +1,16 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../../util"); +import { setup } from "../../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - client: { - reconnect: 2, +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + client: { + reconnect: 2, + }, }, }, -}); + import.meta.url, +); diff --git a/examples/client/reconnect/true/app.js b/examples/client/reconnect/true/app.js index f489bd6f33..f6b8a060fb 100644 --- a/examples/client/reconnect/true/app.js +++ b/examples/client/reconnect/true/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/client/reconnect/true/webpack.config.js b/examples/client/reconnect/true/webpack.config.js index abb446d1a9..e57b74f940 100644 --- a/examples/client/reconnect/true/webpack.config.js +++ b/examples/client/reconnect/true/webpack.config.js @@ -1,15 +1,16 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../../util"); +import { setup } from "../../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - client: { - reconnect: true, +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + client: { + reconnect: true, + }, }, }, -}); + import.meta.url, +); diff --git a/examples/client/trusted-types-overlay/app.js b/examples/client/trusted-types-overlay/app.js index 130fdcd715..567986ed77 100644 --- a/examples/client/trusted-types-overlay/app.js +++ b/examples/client/trusted-types-overlay/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/client/trusted-types-overlay/webpack.config.js b/examples/client/trusted-types-overlay/webpack.config.js index af962f1ff8..75b1fdfc68 100644 --- a/examples/client/trusted-types-overlay/webpack.config.js +++ b/examples/client/trusted-types-overlay/webpack.config.js @@ -1,35 +1,36 @@ -"use strict"; - -const path = require("node:path"); -const HtmlWebpackPlugin = require("html-webpack-plugin"); +import path from "node:path"; +import HtmlWebpackPlugin from "html-webpack-plugin"; // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -const config = setup({ - context: __dirname, - // create error for overlay - entry: "./app.js", - output: { - trustedTypes: { policyName: "webpack" }, - }, - devServer: { - headers: { - "Content-Security-Policy": "require-trusted-types-for 'script'", +const config = setup( + { + context: import.meta.dirname, + // create error for overlay + entry: "./app.js", + output: { + trustedTypes: { policyName: "webpack" }, }, - client: { - overlay: { - trustedTypesPolicyName: "webpack#dev-overlay", + devServer: { + headers: { + "Content-Security-Policy": "require-trusted-types-for 'script'", + }, + client: { + overlay: { + trustedTypesPolicyName: "webpack#dev-overlay", + }, }, }, }, -}); + import.meta.url, +); // overwrite the index.html with our own to enable Trusted Types config.plugins[0] = new HtmlWebpackPlugin({ filename: "index.html", - template: path.join(__dirname, "./layout.html"), + template: path.join(import.meta.dirname, "./layout.html"), title: "trusted types overlay", }); -module.exports = config; +export default config; diff --git a/examples/client/web-socket-url/app.js b/examples/client/web-socket-url/app.js index b5ea7b6280..1d4fc6f47f 100644 --- a/examples/client/web-socket-url/app.js +++ b/examples/client/web-socket-url/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.innerHTML = diff --git a/examples/client/web-socket-url/webpack.config.js b/examples/client/web-socket-url/webpack.config.js index 8fe4b5d921..9b626dbbb7 100644 --- a/examples/client/web-socket-url/webpack.config.js +++ b/examples/client/web-socket-url/webpack.config.js @@ -1,17 +1,18 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - host: "0.0.0.0", - client: { - webSocketURL: "ws://localhost:8080", +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + host: "0.0.0.0", + client: { + webSocketURL: "ws://localhost:8080", + }, + allowedHosts: "all", }, - allowedHosts: "all", }, -}); + import.meta.url, +); diff --git a/examples/compression/false/app.js b/examples/compression/false/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/compression/false/app.js +++ b/examples/compression/false/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/compression/false/webpack.config.js b/examples/compression/false/webpack.config.js index 1f76cb6172..25bc281a4c 100644 --- a/examples/compression/false/webpack.config.js +++ b/examples/compression/false/webpack.config.js @@ -1,13 +1,14 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - compress: false, +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + compress: false, + }, }, -}); + import.meta.url, +); diff --git a/examples/compression/true/app.js b/examples/compression/true/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/compression/true/app.js +++ b/examples/compression/true/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/compression/true/webpack.config.js b/examples/compression/true/webpack.config.js index fb66c73b76..a2c8117666 100644 --- a/examples/compression/true/webpack.config.js +++ b/examples/compression/true/webpack.config.js @@ -1,13 +1,14 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - compress: true, +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + compress: true, + }, }, -}); + import.meta.url, +); diff --git a/examples/default-cjs/README.md b/examples/default-cjs/README.md new file mode 100644 index 0000000000..b5f50c35f5 --- /dev/null +++ b/examples/default-cjs/README.md @@ -0,0 +1,19 @@ +## CommonJS Example + +This example demonstrates that `webpack-dev-server` still works with a +CommonJS configuration. The rest of the examples have been migrated to +ESM; this one is intentionally kept in CJS for users who haven't migrated +yet. + +The webpack config is named `webpack.config.cjs` (with the explicit `.cjs` +extension) because the project's `package.json` has `"type": "module"`, +which makes plain `.js` files ESM by default. + +```console +npx webpack serve --open --config webpack.config.cjs +``` + +## What Should Happen + +1. The script should open `http://localhost:8080/` in your default browser. +2. You should see the text on the page change to `Success from CommonJS example!`. diff --git a/examples/server/spdy/app.js b/examples/default-cjs/app.js similarity index 60% rename from examples/server/spdy/app.js rename to examples/default-cjs/app.js index 51cf4a396b..79dbc3e7cb 100644 --- a/examples/server/spdy/app.js +++ b/examples/default-cjs/app.js @@ -1,6 +1,4 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); -target.innerHTML = "Success!"; +target.innerHTML = "Success from CommonJS example!"; diff --git a/examples/default-cjs/webpack.config.cjs b/examples/default-cjs/webpack.config.cjs new file mode 100644 index 0000000000..7533a297b6 --- /dev/null +++ b/examples/default-cjs/webpack.config.cjs @@ -0,0 +1,32 @@ +"use strict"; + +// CommonJS variant of the default example. +// Demonstrates that webpack-dev-server still supports CJS configs even +// though the rest of the examples use ESM. +// +// The file uses the `.cjs` extension because the project's package.json +// has `"type": "module"`, which makes plain `.js` files ESM by default. + +const path = require("node:path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); + +module.exports = { + mode: "development", + context: __dirname, + entry: "./app.js", + output: { + path: path.join(__dirname, "dist"), + publicPath: "/", + filename: "bundle.js", + }, + plugins: [ + new HtmlWebpackPlugin({ + filename: "index.html", + template: path.join(__dirname, "../.assets/layout.html"), + title: "CommonJS example", + }), + ], + stats: { + colors: true, + }, +}; diff --git a/examples/default/app.js b/examples/default/app.js index 6b9de75e76..e8b1817d31 100644 --- a/examples/default/app.js +++ b/examples/default/app.js @@ -1,6 +1,5 @@ -"use strict"; - -require("./style.less"); +import "./style.less"; +import svgUrl from "./svg.svg"; const target = document.querySelector("#target"); @@ -8,7 +7,7 @@ target.classList.add("pass"); target.innerHTML = "Success!"; const img = document.createElement("img"); -img.src = "/svg.svg"; +img.src = svgUrl; img.style = "width: 200px;"; document.body.appendChild(img); diff --git a/examples/default/webpack.config.js b/examples/default/webpack.config.js index c9fc70748f..a0226b350c 100644 --- a/examples/default/webpack.config.js +++ b/examples/default/webpack.config.js @@ -1,29 +1,26 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../util"); - -const moduleRuleForPNG = { - test: /\.png$/, - type: "asset/resource", - generator: { - filename: "images/[hash][ext][query]", - }, -}; +import { setup } from "../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - module: { - rules: [ - { - test: /\.less$/, - use: ["style-loader", "css-loader", "less-loader"], - }, - { - ...moduleRuleForPNG, - }, - ], +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + module: { + rules: [ + { + test: /\.less$/, + use: ["style-loader", "css-loader", "less-loader"], + }, + { + test: /\.(png|svg)$/, + type: "asset/resource", + generator: { + filename: "images/[hash][ext][query]", + }, + }, + ], + }, }, -}); + import.meta.url, +); diff --git a/examples/dev-middleware/app.js b/examples/dev-middleware/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/dev-middleware/app.js +++ b/examples/dev-middleware/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/dev-middleware/webpack.config.js b/examples/dev-middleware/webpack.config.js index 6df62b5fe1..bcd8cd0ed0 100644 --- a/examples/dev-middleware/webpack.config.js +++ b/examples/dev-middleware/webpack.config.js @@ -1,18 +1,19 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../util"); +import { setup } from "../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - devMiddleware: { - index: false, - headers: { - "X-Custom-Header": "yes", +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + devMiddleware: { + index: false, + headers: { + "X-Custom-Header": "yes", + }, }, }, }, -}); + import.meta.url, +); diff --git a/examples/general/config-array/app.js b/examples/general/config-array/app.js index 95630d3839..1b4ddf4b1f 100644 --- a/examples/general/config-array/app.js +++ b/examples/general/config-array/app.js @@ -1,6 +1,4 @@ -"use strict"; - -require("./style.less"); +import "./style.less"; const target = document.querySelector("#target"); diff --git a/examples/general/config-array/webpack.config.js b/examples/general/config-array/webpack.config.js index 3c15ca173b..ea5a08b496 100644 --- a/examples/general/config-array/webpack.config.js +++ b/examples/general/config-array/webpack.config.js @@ -1,8 +1,6 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; const moduleRuleForPNG = { test: /\.png$/, @@ -12,24 +10,27 @@ const moduleRuleForPNG = { }, }; -module.exports = [ - setup({ - context: __dirname, - entry: "./app.js", - module: { - rules: [ - { - test: /\.less$/, - use: ["style-loader", "css-loader", "less-loader"], - }, - { - ...moduleRuleForPNG, - }, - ], +export default [ + setup( + { + context: import.meta.dirname, + entry: "./app.js", + module: { + rules: [ + { + test: /\.less$/, + use: ["style-loader", "css-loader", "less-loader"], + }, + { + ...moduleRuleForPNG, + }, + ], + }, }, - }), + import.meta.url, + ), { - context: __dirname, + context: import.meta.dirname, entry: "./app.js", output: { filename: "bundle2.js", diff --git a/examples/general/config-promise/app.js b/examples/general/config-promise/app.js index 048032a34a..38f6b57f1e 100644 --- a/examples/general/config-promise/app.js +++ b/examples/general/config-promise/app.js @@ -1,5 +1,3 @@ -"use strict"; - // Change the following line and save to see the compilation status const target = document.querySelector("#target"); diff --git a/examples/general/config-promise/webpack.config.js b/examples/general/config-promise/webpack.config.js index d6aef14331..045776d650 100644 --- a/examples/general/config-promise/webpack.config.js +++ b/examples/general/config-promise/webpack.config.js @@ -1,15 +1,16 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = new Promise((resolve) => { +export default new Promise((resolve) => { resolve( - setup({ - context: __dirname, - entry: "./app.js", - devServer: {}, - }), + setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: {}, + }, + import.meta.url, + ), ); }); diff --git a/examples/general/proxy-advanced/app.js b/examples/general/proxy-advanced/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/general/proxy-advanced/app.js +++ b/examples/general/proxy-advanced/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/general/proxy-advanced/webpack.config.js b/examples/general/proxy-advanced/webpack.config.js index 215ab84a01..80a54c08d7 100644 --- a/examples/general/proxy-advanced/webpack.config.js +++ b/examples/general/proxy-advanced/webpack.config.js @@ -1,26 +1,32 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - proxy: { - "/api": { - target: "http://jsonplaceholder.typicode.com/", - changeOrigin: true, - pathRewrite: { - "^/api": "", +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + port: 8080, + static: { + directory: ".", + }, + proxy: [ + { + context: "/api/nope", + router: () => "http://localhost:8080", + pathRewrite: () => "/bypass.html", }, - bypass(req) { - if (req.url === "/api/nope") { - return "/bypass.html"; - } + { + context: "/api", + target: "http://jsonplaceholder.typicode.com/", + changeOrigin: true, + pathRewrite: { + "^/api": "", + }, }, - }, + ], }, }, -}); + import.meta.url, +); diff --git a/examples/general/proxy-hot-reload/app.js b/examples/general/proxy-hot-reload/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/general/proxy-hot-reload/app.js +++ b/examples/general/proxy-hot-reload/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/general/proxy-hot-reload/proxy-config.js b/examples/general/proxy-hot-reload/proxy-config.js index f023c51ffb..65d5e3ba3e 100644 --- a/examples/general/proxy-hot-reload/proxy-config.js +++ b/examples/general/proxy-hot-reload/proxy-config.js @@ -1,7 +1,5 @@ -"use strict"; - /**/ -module.exports = { +export default { target: "http://jsonplaceholder.typicode.com/", pathRewrite: { "^/api": "", @@ -15,7 +13,7 @@ module.exports = { /** * / - * module.exports = { + * export default { * target: 'http://reqres.in/' * }; * /* diff --git a/examples/general/proxy-hot-reload/webpack.config.js b/examples/general/proxy-hot-reload/webpack.config.js index 50e4530a23..afcdeafc88 100644 --- a/examples/general/proxy-hot-reload/webpack.config.js +++ b/examples/general/proxy-hot-reload/webpack.config.js @@ -1,10 +1,10 @@ -"use strict"; - -const fs = require("node:fs"); +import fs from "node:fs"; +import path from "node:path"; +import { pathToFileURL } from "node:url"; // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); -const proxyConfig = require("./proxy-config"); +import { setup } from "../../util.js"; +import proxyConfig from "./proxy-config.js"; let proxyOptions = { context: "/api", @@ -13,10 +13,12 @@ let proxyOptions = { changeOrigin: true, }; -fs.watch("./proxy-config.js", () => { - delete require.cache[require.resolve("./proxy-config")]; +fs.watch("./proxy-config.js", async () => { try { - const newProxyConfig = require("./proxy-config"); + const cacheBustingUrl = `${ + pathToFileURL(path.resolve(import.meta.dirname, "./proxy-config.js")).href + }?t=${Date.now()}`; + const { default: newProxyConfig } = await import(cacheBustingUrl); if (proxyOptions.target !== newProxyConfig.target) { console.log("Proxy target changed:", newProxyConfig.target); @@ -32,14 +34,17 @@ fs.watch("./proxy-config.js", () => { } }); -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - proxy: [ - function proxy() { - return proxyOptions; - }, - ], +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + proxy: [ + function proxy() { + return proxyOptions; + }, + ], + }, }, -}); + import.meta.url, +); diff --git a/examples/general/proxy-simple/app.js b/examples/general/proxy-simple/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/general/proxy-simple/app.js +++ b/examples/general/proxy-simple/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/general/proxy-simple/webpack.config.js b/examples/general/proxy-simple/webpack.config.js index 6c600f15f3..44c1237201 100644 --- a/examples/general/proxy-simple/webpack.config.js +++ b/examples/general/proxy-simple/webpack.config.js @@ -1,15 +1,16 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - proxy: { - "/api": "http://127.0.0.1:50545", +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + proxy: { + "/api": "http://127.0.0.1:50545", + }, }, }, -}); + import.meta.url, +); diff --git a/examples/general/universal-config/client.js b/examples/general/universal-config/client.js index bfae6682f6..a3c4af2f8d 100644 --- a/examples/general/universal-config/client.js +++ b/examples/general/universal-config/client.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); if (!globalThis.fetch) { diff --git a/examples/general/universal-config/server.js b/examples/general/universal-config/server.js index e865358b35..3c11a3524c 100644 --- a/examples/general/universal-config/server.js +++ b/examples/general/universal-config/server.js @@ -1,3 +1 @@ -"use strict"; - console.log("webpack-dev-server/server"); diff --git a/examples/general/universal-config/webpack.config.js b/examples/general/universal-config/webpack.config.js index cbf9a8ec7c..e37a6833f4 100644 --- a/examples/general/universal-config/webpack.config.js +++ b/examples/general/universal-config/webpack.config.js @@ -1,16 +1,17 @@ -"use strict"; +import { setup } from "../../util.js"; -const { setup } = require("../../util"); - -module.exports = [ - setup({ - mode: "development", - entry: "./client.js", - output: { - filename: "client.js", +export default [ + setup( + { + mode: "development", + entry: "./client.js", + output: { + filename: "client.js", + }, + context: import.meta.dirname, }, - context: __dirname, - }), + import.meta.url, + ), { mode: "development", target: "node", @@ -18,7 +19,7 @@ module.exports = [ output: { filename: "server.js", }, - context: __dirname, + context: import.meta.dirname, node: false, }, ]; diff --git a/examples/general/webworker/web.js b/examples/general/webworker/web.js index 058353d668..84155b0a98 100644 --- a/examples/general/webworker/web.js +++ b/examples/general/webworker/web.js @@ -1,5 +1,3 @@ -"use strict"; - /* eslint-env browser */ const worker = new Worker("worker.bundle.js"); diff --git a/examples/general/webworker/webpack.config.js b/examples/general/webworker/webpack.config.js index 9bee0a16d3..b332f30654 100644 --- a/examples/general/webworker/webpack.config.js +++ b/examples/general/webworker/webpack.config.js @@ -1,22 +1,23 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = [ - setup({ - devtool: "source-map", - target: "web", - entry: "./web.js", - }), +export default [ + setup( + { + devtool: "source-map", + target: "web", + entry: "./web.js", + }, + import.meta.url, + ), { devtool: "source-map", target: "webworker", entry: "./worker.js", output: { filename: "worker.bundle.js", - path: __dirname, + path: import.meta.dirname, }, }, ]; diff --git a/examples/general/webworker/worker.js b/examples/general/webworker/worker.js index d799292230..49b08817ca 100644 --- a/examples/general/webworker/worker.js +++ b/examples/general/webworker/worker.js @@ -1,5 +1,3 @@ -"use strict"; - /* eslint-env worker */ globalThis.onmessage = function onMessage(e) { diff --git a/examples/headers/array/app.js b/examples/headers/array/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/headers/array/app.js +++ b/examples/headers/array/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/headers/array/webpack.config.js b/examples/headers/array/webpack.config.js index e2ad9d34a0..72fc5767c5 100644 --- a/examples/headers/array/webpack.config.js +++ b/examples/headers/array/webpack.config.js @@ -1,22 +1,23 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - headers: [ - { - key: "X-Foo", - value: "value1", - }, - { - key: "X-Bar", - value: "value2", - }, - ], +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + headers: [ + { + key: "X-Foo", + value: "value1", + }, + { + key: "X-Bar", + value: "value2", + }, + ], + }, }, -}); + import.meta.url, +); diff --git a/examples/headers/function/app.js b/examples/headers/function/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/headers/function/app.js +++ b/examples/headers/function/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/headers/function/webpack.config.js b/examples/headers/function/webpack.config.js index 9ae00dcd3d..fa917298d3 100644 --- a/examples/headers/function/webpack.config.js +++ b/examples/headers/function/webpack.config.js @@ -1,13 +1,14 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - headers: () => ({ "X-Custom-Header": ["key1=value1", "key2=value2"] }), +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + headers: () => ({ "X-Custom-Header": ["key1=value1", "key2=value2"] }), + }, }, -}); + import.meta.url, +); diff --git a/examples/headers/object/app.js b/examples/headers/object/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/headers/object/app.js +++ b/examples/headers/object/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/headers/object/webpack.config.js b/examples/headers/object/webpack.config.js index 20cb07cf7a..20502a6ba6 100644 --- a/examples/headers/object/webpack.config.js +++ b/examples/headers/object/webpack.config.js @@ -1,15 +1,16 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - headers: { - "X-Custom-Header": "yes", +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + headers: { + "X-Custom-Header": "yes", + }, }, }, -}); + import.meta.url, +); diff --git a/examples/history-api-fallback/app.js b/examples/history-api-fallback/app.js index d940d46306..0538ceaa0b 100644 --- a/examples/history-api-fallback/app.js +++ b/examples/history-api-fallback/app.js @@ -1,5 +1,3 @@ -"use strict"; - const path = document.location.pathname; const target = document.querySelector("#target"); const style = document.createElement("style"); diff --git a/examples/history-api-fallback/webpack.config.js b/examples/history-api-fallback/webpack.config.js index 78d6bc2345..5c35aff9da 100644 --- a/examples/history-api-fallback/webpack.config.js +++ b/examples/history-api-fallback/webpack.config.js @@ -1,13 +1,14 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../util"); +import { setup } from "../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - historyApiFallback: true, +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + historyApiFallback: true, + }, }, -}); + import.meta.url, +); diff --git a/examples/hmr/boolean/app.js b/examples/hmr/boolean/app.js index 3dff1ef2ee..5f6b32aee4 100644 --- a/examples/hmr/boolean/app.js +++ b/examples/hmr/boolean/app.js @@ -1,9 +1,7 @@ -"use strict"; +import "./example.js"; -require("./example"); - -if (module.hot) { - module.hot.accept((err) => { +if (import.meta.webpackHot) { + import.meta.webpackHot.accept((err) => { if (err) { console.error("Cannot apply HMR update.", err); } diff --git a/examples/hmr/boolean/example.js b/examples/hmr/boolean/example.js index 77f80b74a7..d47c8ea843 100644 --- a/examples/hmr/boolean/example.js +++ b/examples/hmr/boolean/example.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.innerHTML = diff --git a/examples/hmr/boolean/webpack.config.js b/examples/hmr/boolean/webpack.config.js index be0e606ce5..271f80da96 100644 --- a/examples/hmr/boolean/webpack.config.js +++ b/examples/hmr/boolean/webpack.config.js @@ -1,13 +1,14 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - hot: true, +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + hot: true, + }, }, -}); + import.meta.url, +); diff --git a/examples/hmr/only/app.js b/examples/hmr/only/app.js index 3dff1ef2ee..5f6b32aee4 100644 --- a/examples/hmr/only/app.js +++ b/examples/hmr/only/app.js @@ -1,9 +1,7 @@ -"use strict"; +import "./example.js"; -require("./example"); - -if (module.hot) { - module.hot.accept((err) => { +if (import.meta.webpackHot) { + import.meta.webpackHot.accept((err) => { if (err) { console.error("Cannot apply HMR update.", err); } diff --git a/examples/hmr/only/example.js b/examples/hmr/only/example.js index 77f80b74a7..d47c8ea843 100644 --- a/examples/hmr/only/example.js +++ b/examples/hmr/only/example.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.innerHTML = diff --git a/examples/hmr/only/webpack.config.js b/examples/hmr/only/webpack.config.js index e84cfe130a..c117f01e21 100644 --- a/examples/hmr/only/webpack.config.js +++ b/examples/hmr/only/webpack.config.js @@ -1,13 +1,14 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - hot: "only", +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + hot: "only", + }, }, -}); + import.meta.url, +); diff --git a/examples/host-and-port/app.js b/examples/host-and-port/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/host-and-port/app.js +++ b/examples/host-and-port/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/host-and-port/webpack.config.js b/examples/host-and-port/webpack.config.js index 564acff99e..e70cf5183f 100644 --- a/examples/host-and-port/webpack.config.js +++ b/examples/host-and-port/webpack.config.js @@ -1,10 +1,11 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../util"); +import { setup } from "../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", -}); +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + }, + import.meta.url, +); diff --git a/examples/ipc/app.js b/examples/ipc/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/ipc/app.js +++ b/examples/ipc/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/ipc/webpack.config.js b/examples/ipc/webpack.config.js index ea85092a65..32df532c3b 100644 --- a/examples/ipc/webpack.config.js +++ b/examples/ipc/webpack.config.js @@ -1,34 +1,35 @@ -"use strict"; - -const http = require("node:http"); -const httpProxy = require("http-proxy"); +import http from "node:http"; +import httpProxy from "http-proxy"; // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../util"); +import { setup } from "../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - webSocketServer: "ws", - onAfterSetupMiddleware: (server) => { - const proxyPort = 8080; - const proxyHost = "127.0.0.1"; - const proxy = httpProxy.createProxyServer({ - target: { socketPath: server.options.ipc }, - }); +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + webSocketServer: "ws", + onAfterSetupMiddleware: (server) => { + const proxyPort = 8080; + const proxyHost = "127.0.0.1"; + const proxy = httpProxy.createProxyServer({ + target: { socketPath: server.options.ipc }, + }); - const proxyServer = http.createServer((request, response) => { - // You can define here your custom logic to handle the request - // and then proxy the request. - proxy.web(request, response); - }); + const proxyServer = http.createServer((request, response) => { + // You can define here your custom logic to handle the request + // and then proxy the request. + proxy.web(request, response); + }); - proxyServer.on("upgrade", (request, socket, head) => { - proxy.ws(request, socket, head); - }); + proxyServer.on("upgrade", (request, socket, head) => { + proxy.ws(request, socket, head); + }); - proxyServer.listen(proxyPort, proxyHost); + proxyServer.listen(proxyPort, proxyHost); + }, }, }, -}); + import.meta.url, +); diff --git a/examples/multi-compiler/app.js b/examples/multi-compiler/app.js index 97c93a7f44..322023e617 100644 --- a/examples/multi-compiler/app.js +++ b/examples/multi-compiler/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/multi-compiler/webpack.config.js b/examples/multi-compiler/webpack.config.js index 6366f481c2..4025c3284b 100644 --- a/examples/multi-compiler/webpack.config.js +++ b/examples/multi-compiler/webpack.config.js @@ -1,12 +1,13 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../util"); +import { setup } from "../util.js"; -module.exports = [ - setup({ - context: __dirname, - entry: "./app.js", - }), +export default [ + setup( + { + context: import.meta.dirname, + entry: "./app.js", + }, + import.meta.url, + ), ]; diff --git a/examples/node-false/app.js b/examples/node-false/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/node-false/app.js +++ b/examples/node-false/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/node-false/webpack.config.js b/examples/node-false/webpack.config.js index 0dd23f9c7c..a3966cc65d 100644 --- a/examples/node-false/webpack.config.js +++ b/examples/node-false/webpack.config.js @@ -1,11 +1,12 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../util"); +import { setup } from "../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - node: false, -}); +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + node: false, + }, + import.meta.url, +); diff --git a/examples/on-listening/app.js b/examples/on-listening/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/on-listening/app.js +++ b/examples/on-listening/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/on-listening/webpack.config.js b/examples/on-listening/webpack.config.js index 8c9481746d..a863c5b38f 100644 --- a/examples/on-listening/webpack.config.js +++ b/examples/on-listening/webpack.config.js @@ -1,16 +1,17 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../util"); +import { setup } from "../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - onListening: (devServer) => { - const { port } = devServer.server.address(); - console.log("Listening on port:", port); +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + onListening: (devServer) => { + const { port } = devServer.server.address(); + console.log("Listening on port:", port); + }, }, }, -}); + import.meta.url, +); diff --git a/examples/open-target-multiple/app1.js b/examples/open-target-multiple/app1.js index 09a8c2b001..b14d6ac504 100644 --- a/examples/open-target-multiple/app1.js +++ b/examples/open-target-multiple/app1.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); if (globalThis.location.href.endsWith("example1.html")) { diff --git a/examples/open-target-multiple/app2.js b/examples/open-target-multiple/app2.js index 69297e2b2b..f6f61a8163 100644 --- a/examples/open-target-multiple/app2.js +++ b/examples/open-target-multiple/app2.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); if (globalThis.location.href.endsWith("example2.html")) { diff --git a/examples/open-target-multiple/webpack.config.js b/examples/open-target-multiple/webpack.config.js index 6f3de30cb6..b9c6e0c6c5 100644 --- a/examples/open-target-multiple/webpack.config.js +++ b/examples/open-target-multiple/webpack.config.js @@ -1,37 +1,41 @@ -"use strict"; - -const HtmlWebpackPlugin = require("html-webpack-plugin"); +import HtmlWebpackPlugin from "html-webpack-plugin"; // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../util"); +import { setup } from "../util.js"; -module.exports = [ - setup({ - context: __dirname, - entry: "./app1.js", - output: { - filename: "app1.js", +export default [ + setup( + { + context: import.meta.dirname, + entry: "./app1.js", + output: { + filename: "app1.js", + }, + plugins: [ + new HtmlWebpackPlugin({ + filename: "example1.html", + template: "../.assets/layout.html", + title: "Open Target (Multiple) / Example / Page 1", + }), + ], }, - plugins: [ - new HtmlWebpackPlugin({ - filename: "example1.html", - template: "../.assets/layout.html", - title: "Open Target (Multiple) / Example / Page 1", - }), - ], - }), - setup({ - context: __dirname, - entry: "./app2.js", - output: { - filename: "app2.js", + import.meta.url, + ), + setup( + { + context: import.meta.dirname, + entry: "./app2.js", + output: { + filename: "app2.js", + }, + plugins: [ + new HtmlWebpackPlugin({ + filename: "example2.html", + template: "../.assets/layout.html", + title: "Open Target (Multiple) / Example / Page 2", + }), + ], }, - plugins: [ - new HtmlWebpackPlugin({ - filename: "example2.html", - template: "../.assets/layout.html", - title: "Open Target (Multiple) / Example / Page 2", - }), - ], - }), + import.meta.url, + ), ]; diff --git a/examples/open-target/app.js b/examples/open-target/app.js index 7d91e11582..5ee0912ea7 100644 --- a/examples/open-target/app.js +++ b/examples/open-target/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); if (globalThis.location.href.endsWith("example.html#page1")) { diff --git a/examples/open-target/webpack.config.js b/examples/open-target/webpack.config.js index 18c9b29139..28b306cd92 100644 --- a/examples/open-target/webpack.config.js +++ b/examples/open-target/webpack.config.js @@ -1,18 +1,19 @@ -"use strict"; - -const HtmlWebpackPlugin = require("html-webpack-plugin"); +import HtmlWebpackPlugin from "html-webpack-plugin"; // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../util"); +import { setup } from "../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - plugins: [ - new HtmlWebpackPlugin({ - filename: "example.html", - template: "../.assets/layout.html", - title: "Open Target / Example", - }), - ], -}); +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + plugins: [ + new HtmlWebpackPlugin({ + filename: "example.html", + template: "../.assets/layout.html", + title: "Open Target / Example", + }), + ], + }, + import.meta.url, +); diff --git a/examples/proxy/app.js b/examples/proxy/app.js index 85698e7be9..6000403620 100644 --- a/examples/proxy/app.js +++ b/examples/proxy/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/proxy/webpack.config.js b/examples/proxy/webpack.config.js index 0b550270a2..e73519b971 100644 --- a/examples/proxy/webpack.config.js +++ b/examples/proxy/webpack.config.js @@ -1,9 +1,7 @@ -"use strict"; - -const express = require("express"); +import express from "express"; // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../util"); +import { setup } from "../util.js"; /** * @@ -22,17 +20,21 @@ async function listenProxyServer() { }); } -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - onBeforeSetupMiddleware: async () => { - await listenProxyServer(); - }, - proxy: { - "/proxy": { - target: "http://localhost:5000", +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + onBeforeSetupMiddleware: async () => { + await listenProxyServer(); }, + proxy: [ + { + context: "/proxy", + target: "http://localhost:5000", + }, + ], }, }, -}); + import.meta.url, +); diff --git a/examples/server/http2/app.js b/examples/server/http2/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/server/http2/app.js +++ b/examples/server/http2/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/server/http2/webpack.config.js b/examples/server/http2/webpack.config.js index 4c29be511c..4d042b93be 100644 --- a/examples/server/http2/webpack.config.js +++ b/examples/server/http2/webpack.config.js @@ -1,16 +1,17 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const connect = require("connect"); -const { setup } = require("../../util"); +import connect from "connect"; +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - server: "http2", - // Only `connect` supports `http2` - app: () => connect(), +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + server: "http2", + // Only `connect` supports `http2` + app: () => connect(), + }, }, -}); + import.meta.url, +); diff --git a/examples/server/https/app.js b/examples/server/https/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/server/https/app.js +++ b/examples/server/https/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/server/https/webpack.config.js b/examples/server/https/webpack.config.js index 6e3a7f753a..a8f10872eb 100644 --- a/examples/server/https/webpack.config.js +++ b/examples/server/https/webpack.config.js @@ -1,22 +1,23 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - server: { - type: "https", - options: { - key: "./ssl/server.key", - pfx: "./ssl/server.pfx", - cert: "./ssl/server.crt", - ca: "./ssl/ca.pem", - passphrase: "webpack-dev-server", +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + server: { + type: "https", + options: { + key: "./ssl/server.key", + pfx: "./ssl/server.pfx", + cert: "./ssl/server.crt", + ca: "./ssl/ca.pem", + passphrase: "webpack-dev-server", + }, }, }, }, -}); + import.meta.url, +); diff --git a/examples/server/spdy/README.md b/examples/server/spdy/README.md deleted file mode 100644 index 9759544498..0000000000 --- a/examples/server/spdy/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# spdy server - -Serve over HTTP/2 using [spdy](https://www.npmjs.com/package/spdy). This option is ignored for Node 15.0.0 and above, as `spdy` is broken for those versions. - -## HTTP/2 with a custom certificate: - -Provide your own certificate using the `server.options` configuration: - -- `key`: Path to an SSL key. -- `pfx`: Path to an SSL pfx file. -- `cert`: Path to an SSL certificate or content of an SSL certificate. -- `ca`: Path to an SSL CA certificate or content of an SSL CA certificate. -- `crl`: Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists). -- `passphrase`: Passphrase for a pfx file. -- `requestCert`: Request for an SSL certificate. - -```js -module.exports = { - // ... - devServer: { - server: { - type: "spdy", - options: { - key: "./ssl/server.key", - pfx: "./ssl/server.pfx", - cert: "./ssl/server.crt", - ca: "./ssl/ca.pem", - passphrase: "webpack-dev-server", - }, - }, - }, -}; -``` - -Usage via CLI: - -```console -npx webpack serve --open --server-type spdy --server-options-key ./ssl/server.key --server-options-cert ./ssl/server.crt --server-options-ca ./ssl/ca.pem --server-options-passphrase webpack-dev-server -``` - -## What Should Happen - -1. The script should open `https://localhost:8080/` in your default browser. -2. You should see the text on the page itself change to read `Success!`. diff --git a/examples/server/spdy/ssl/ca.pem b/examples/server/spdy/ssl/ca.pem deleted file mode 100644 index 05b314535b..0000000000 --- a/examples/server/spdy/ssl/ca.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEAxAUVLFM+K3XDLQkBi7xt0s1Ip7JoHYDskzUDQNHjjMkUq5kv -C/hf5Ei1J6qruJs3Xqg86Nl4+ed4ynUajAkRRibhp0P1SG1tgPssIK6iC7g8heYu -Dy9WkFuMie0513zjSn6bMEAK5TegxYAWCbaCZX/Fw9bDniabL/zuOv4sf8J4EPhs -EENnH6sUE9HxPUgQmNt1Tbd0j1Cd5PXrSTLyfVPRh0m9QhXTUHuxsse8XSn9U2sw -duxJTWRINmhffYn+O7kbJGI77xYr8u58Rsf3HCMI8DTKZNvQLChvvtLJ9ckyu7Q+ -T8emgklStASm3V2UtnriaK/IQEhgSdxqVRib3QIDAQABAoIBAGqWKPE1QnT3T+3J -G+ITz9P0dDFbvWltlTZmeSJh/s2q+WZloUNtBxdmwbqT/1QecnkyGgyzVCjvSKsu -CgVjWNVAhysgtNtxRT4BVflffBXLVH2qsBjpsLRGU6EcMXuPGTiEp3YRHNuO6Aj8 -oP8fEsCGPc9DlJMGgxQRAKlrVF8TN/0j6Qk+YpS4MZ0YFQfBY+WdKu04Z8TVTplQ -tTkiGpBI+Oj85jF59aQiizglJgADkAZ6zmbrctm/G9jPxh7JLS2cKI0ECZgK5yAc -pk10E1YWhoCksjr9arxy6fS9TiX9P15vv06k+s7c4c5X7XDm3X0GWeSbqBMJb8q7 -BhZQNzECgYEA4kAtymDBvFYiZFq7+lzQBRKAI1RCq7YqxlieumH0PSkie2bba3dW -NVdTi7at8+GDB9/cHUPKzg/skfJllek57MZmusiVwB/Lmp/IlW8YyGShdYZ7zQsV -KMWJljpky3BEDM5sb08wIkfrOkelI/S4Bqqabd9JzOMJzoTiVOlMam8CgYEA3ctN -yonWz2bsnCUstQvQCLdI5a8Q7GJvlH2awephxGXIKGUuRmyyop0AnRnIBEWtOQV7 -yZjW32bU+Wt+2BJ247EyJiIQ4gT+T51t+v/Wt1YNbL3dSj9ttOvwYd4H2W4E7EIO -GKIF4I39FM7r8NfG7YE7S1aVcnrqs01N3nhd9HMCgYEAjepbzpmqbAxLPk97oase -AFB+d6qetz5ozklAJwDSRprKukTmVR5hwMup5/UKX/OQURwl4WVojKCIb3NwLPxC -DTbVsUuoQv6uo6qeEr3A+dHFRQa6GP9eolhl2Ql/t+wPg0jn01oEgzxBXCkceNVD -qUrR2yE4FYBD4nqPzVsZR5kCgYEA1yTi7NkQeldIpZ6Z43T18753A/Xx4JsLyWqd -uAT3mV9x7V1Yqg++qGbLtZjQoPRFt85N6ZxMsqA5b0iK3mXq1auJDdx1rAlT9z6q -9JM/YNAkbZsvEVq9vIYxw31w98T1GYhpzBM+yDhzir+9tv5YhQKa1dXDWi1JhWwz -YN45pWkCgYEAxuVsJ4D4Th5o050ppWpnxM/WuMhIUKqaoFTVucMKFzn+g24y9pv5 -miYdNYIk4Y+4pzHG6ZGZSHJcQ9BLui6H/nLQnqkgCb2lT5nfp7/GKdus7BdcjPGs -fcV46yL7/X0m8nDb3hkwwrDTU4mKFkMrzKpjdZBsttEmW0Aw/3y36gU= ------END RSA PRIVATE KEY----- diff --git a/examples/server/spdy/ssl/server.crt b/examples/server/spdy/ssl/server.crt deleted file mode 100644 index 1992bb1610..0000000000 --- a/examples/server/spdy/ssl/server.crt +++ /dev/null @@ -1,21 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDXTCCAkWgAwIBAgIJALz8gD/gAt0OMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV -BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX -aWRnaXRzIFB0eSBMdGQwHhcNMTgxMDIzMTgyMTQ5WhcNMTkxMDIzMTgyMTQ5WjBF -MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50 -ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAxAUVLFM+K3XDLQkBi7xt0s1Ip7JoHYDskzUDQNHjjMkUq5kvC/hf5Ei1 -J6qruJs3Xqg86Nl4+ed4ynUajAkRRibhp0P1SG1tgPssIK6iC7g8heYuDy9WkFuM -ie0513zjSn6bMEAK5TegxYAWCbaCZX/Fw9bDniabL/zuOv4sf8J4EPhsEENnH6sU -E9HxPUgQmNt1Tbd0j1Cd5PXrSTLyfVPRh0m9QhXTUHuxsse8XSn9U2swduxJTWRI -NmhffYn+O7kbJGI77xYr8u58Rsf3HCMI8DTKZNvQLChvvtLJ9ckyu7Q+T8emgklS -tASm3V2UtnriaK/IQEhgSdxqVRib3QIDAQABo1AwTjAdBgNVHQ4EFgQUDZBhVKdb -3BRhLIhuuE522Vsul0IwHwYDVR0jBBgwFoAUDZBhVKdb3BRhLIhuuE522Vsul0Iw -DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEABh9WWZwWLgb9/DcTxL72 -6pI96t4jiF79Q+pPefkaIIi0mE6yodWrTAsBQu9I6bNRaEcCSoiXkP2bqskD/UGg -LwUFgSrDOAA3UjdHw3QU5g2NocduG7mcFwA40TB98sOsxsUyYlzSyWzoiQWwPYwb -hek1djuWkqPXsTjlj54PTPN/SjTFmo4p5Ip6nbRf2nOREl7v0rJpGbJvXiCMYyd+ -Zv+j4mRjCGo8ysMR2HjCUGkYReLAgKyyz3M7i8vevJhKslyOmy6Txn4F0nPVumaU -DDIy4xXPW1STWfsmSYJfYW3wa0wk+pJQ3j2cTzkPQQ8gwpvM3U9DJl43uwb37v6I -7Q== ------END CERTIFICATE----- diff --git a/examples/server/spdy/ssl/server.key b/examples/server/spdy/ssl/server.key deleted file mode 100644 index c002d19e49..0000000000 --- a/examples/server/spdy/ssl/server.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDEBRUsUz4rdcMt -CQGLvG3SzUinsmgdgOyTNQNA0eOMyRSrmS8L+F/kSLUnqqu4mzdeqDzo2Xj553jK -dRqMCRFGJuGnQ/VIbW2A+ywgrqILuDyF5i4PL1aQW4yJ7TnXfONKfpswQArlN6DF -gBYJtoJlf8XD1sOeJpsv/O46/ix/wngQ+GwQQ2cfqxQT0fE9SBCY23VNt3SPUJ3k -9etJMvJ9U9GHSb1CFdNQe7Gyx7xdKf1TazB27ElNZEg2aF99if47uRskYjvvFivy -7nxGx/ccIwjwNMpk29AsKG++0sn1yTK7tD5Px6aCSVK0BKbdXZS2euJor8hASGBJ -3GpVGJvdAgMBAAECggEAapYo8TVCdPdP7ckb4hPP0/R0MVu9aW2VNmZ5ImH+zar5 -ZmWhQ20HF2bBupP/VB5yeTIaDLNUKO9Iqy4KBWNY1UCHKyC023FFPgFV+V98FctU -faqwGOmwtEZToRwxe48ZOISndhEc247oCPyg/x8SwIY9z0OUkwaDFBEAqWtUXxM3 -/SPpCT5ilLgxnRgVB8Fj5Z0q7ThnxNVOmVC1OSIakEj46PzmMXn1pCKLOCUmAAOQ -BnrOZuty2b8b2M/GHsktLZwojQQJmArnIBymTXQTVhaGgKSyOv1qvHLp9L1OJf0/ -Xm+/TqT6ztzhzlftcObdfQZZ5JuoEwlvyrsGFlA3MQKBgQDiQC3KYMG8ViJkWrv6 -XNAFEoAjVEKrtirGWJ66YfQ9KSJ7Zttrd1Y1V1OLtq3z4YMH39wdQ8rOD+yR8mWV -6Tnsxma6yJXAH8uan8iVbxjIZKF1hnvNCxUoxYmWOmTLcEQMzmxvTzAiR+s6R6Uj -9LgGqppt30nM4wnOhOJU6UxqbwKBgQDdy03KidbPZuycJSy1C9AIt0jlrxDsYm+U -fZrB6mHEZcgoZS5GbLKinQCdGcgERa05BXvJmNbfZtT5a37YEnbjsTImIhDiBP5P -nW36/9a3Vg1svd1KP2206/Bh3gfZbgTsQg4YogXgjf0Uzuvw18btgTtLVpVyeuqz -TU3eeF30cwKBgQCN6lvOmapsDEs+T3uhqx4AUH53qp63PmjOSUAnANJGmsq6ROZV -HmHAy6nn9Qpf85BRHCXhZWiMoIhvc3As/EINNtWxS6hC/q6jqp4SvcD50cVFBroY -/16iWGXZCX+37A+DSOfTWgSDPEFcKRx41UOpStHbITgVgEPieo/NWxlHmQKBgQDX -JOLs2RB6V0ilnpnjdPXzvncD9fHgmwvJap24BPeZX3HtXViqD76oZsu1mNCg9EW3 -zk3pnEyyoDlvSIreZerVq4kN3HWsCVP3Pqr0kz9g0CRtmy8RWr28hjHDfXD3xPUZ -iGnMEz7IOHOKv722/liFAprV1cNaLUmFbDNg3jmlaQKBgQDG5WwngPhOHmjTnSml -amfEz9a4yEhQqpqgVNW5wwoXOf6DbjL2m/maJh01giThj7inMcbpkZlIclxD0Eu6 -Lof+ctCeqSAJvaVPmd+nv8Yp26zsF1yM8ax9xXjrIvv9fSbycNveGTDCsNNTiYoW -QyvMqmN1kGy20SZbQDD/fLfqBQ== ------END PRIVATE KEY----- diff --git a/examples/server/spdy/ssl/server.pfx b/examples/server/spdy/ssl/server.pfx deleted file mode 100644 index 4645e131de..0000000000 Binary files a/examples/server/spdy/ssl/server.pfx and /dev/null differ diff --git a/examples/server/spdy/webpack.config.js b/examples/server/spdy/webpack.config.js deleted file mode 100644 index c8680e19b3..0000000000 --- a/examples/server/spdy/webpack.config.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; - -// our setup function adds behind-the-scenes bits to the config that all of our -// examples need -const { setup } = require("../../util"); - -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - server: { - type: "spdy", - options: { - key: "./ssl/server.key", - pfx: "./ssl/server.pfx", - cert: "./ssl/server.crt", - ca: "./ssl/ca.pem", - passphrase: "webpack-dev-server", - }, - }, - }, -}); diff --git a/examples/setup-middlewares/app.js b/examples/setup-middlewares/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/setup-middlewares/app.js +++ b/examples/setup-middlewares/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/setup-middlewares/webpack.config.js b/examples/setup-middlewares/webpack.config.js index df9d9fb74a..d5bc264efc 100644 --- a/examples/setup-middlewares/webpack.config.js +++ b/examples/setup-middlewares/webpack.config.js @@ -1,36 +1,37 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../util"); +import { setup } from "../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - setupMiddlewares: (middlewares, devServer) => { - if (!devServer) { - throw new Error("webpack-dev-server is not defined"); - } +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + setupMiddlewares: (middlewares, devServer) => { + if (!devServer) { + throw new Error("webpack-dev-server is not defined"); + } - devServer.app.get("/setup-middleware/some/path", (_, response) => { - response.send("setup-middlewares option GET"); - }); + devServer.app.get("/setup-middleware/some/path", (_, response) => { + response.send("setup-middlewares option GET"); + }); - middlewares.push({ - name: "hello-world-test-one", - // `path` is optional - path: "/foo/bar", - middleware: (req, res) => { - res.send("Foo Bar!"); - }, - }); + middlewares.push({ + name: "hello-world-test-one", + // `path` is optional + path: "/foo/bar", + middleware: (req, res) => { + res.send("Foo Bar!"); + }, + }); - middlewares.push((req, res) => { - res.send("Hello World!"); - }); + middlewares.push((req, res) => { + res.send("Hello World!"); + }); - return middlewares; + return middlewares; + }, }, }, -}); + import.meta.url, +); diff --git a/examples/util.js b/examples/util.js index dc1d97f771..83a741dc6d 100644 --- a/examples/util.js +++ b/examples/util.js @@ -1,104 +1,109 @@ -"use strict"; - -const path = require("node:path"); -const fs = require("graceful-fs"); -const HtmlWebpackPlugin = require("html-webpack-plugin"); -const { marked } = require("marked"); -const mime = require("mime"); - -module.exports = { - setup(config) { - const defaults = { mode: "development", plugins: [], devServer: {} }; - - if (config.entry) { - if (typeof config.entry === "string") { - config.entry = path.resolve(config.entry); - } else if (Array.isArray(config.entry)) { - config.entry = config.entry.map((entry) => path.resolve(entry)); - } else if (typeof config.entry === "object") { - for (const [key, value] of Object.entries(config.entry)) { - config.entry[key] = path.resolve(value); - } +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import fs from "graceful-fs"; +import HtmlWebpackPlugin from "html-webpack-plugin"; +import { marked } from "marked"; +import mime from "mime"; + +const __dirname = import.meta.dirname; + +/** + * @param {object} config webpack config + * @param {string} callerUrl `import.meta.url` of the calling webpack config — used to derive `output.path` + * @returns {object} normalized webpack config + */ +export function setup(config, callerUrl) { + const defaults = { mode: "development", plugins: [], devServer: {} }; + + if (config.entry) { + if (typeof config.entry === "string") { + config.entry = path.resolve(config.entry); + } else if (Array.isArray(config.entry)) { + config.entry = config.entry.map((entry) => path.resolve(entry)); + } else if (typeof config.entry === "object") { + for (const [key, value] of Object.entries(config.entry)) { + config.entry[key] = path.resolve(value); } } + } + + const result = { ...defaults, ...config }; + const onBeforeSetupMiddleware = ({ app }) => { + app.use("/.assets/", (req, res, next) => { + if (req.method !== "GET" && req.method !== "HEAD") { + next(); + return; + } - const result = { ...defaults, ...config }; - const onBeforeSetupMiddleware = ({ app }) => { - app.use("/.assets/", (req, res, next) => { - if (req.method !== "GET" && req.method !== "HEAD") { - next(); - return; - } - - res.setHeader("Content-Type", mime.lookup(req.url)); + res.setHeader("Content-Type", mime.lookup(req.url)); + + const filename = path.join(__dirname, "/.assets/", req.url); + const stream = fs.createReadStream(filename); + + stream.pipe(res); + }); + }; + const renderer = new marked.Renderer(); + const { heading } = renderer; + const markedOptions = { + gfm: true, + tables: true, + breaks: false, + pedantic: false, + sanitize: false, + sanitizer: null, + mangle: true, + smartLists: false, + silent: false, + langPrefix: "lang-", + smartypants: false, + headerPrefix: "", + renderer, + xhtml: false, + }; + const readme = fs.readFileSync("README.md", "utf8"); + + let exampleTitle = ""; + + renderer.heading = function headingProxy(text, level, raw, slugger) { + if (level === 1 && !exampleTitle) { + exampleTitle = text; + } - const filename = path.join(__dirname, "/.assets/", req.url); - const stream = fs.createReadStream(filename); + return heading.call(this, text, level, raw, slugger); + }; - stream.pipe(res); - }); - }; - const renderer = new marked.Renderer(); - const { heading } = renderer; - const markedOptions = { - gfm: true, - tables: true, - breaks: false, - pedantic: false, - sanitize: false, - sanitizer: null, - mangle: true, - smartLists: false, - silent: false, - langPrefix: "lang-", - smartypants: false, - headerPrefix: "", - renderer, - xhtml: false, - }; - const readme = fs.readFileSync("README.md", "utf8"); + marked.setOptions(markedOptions); - let exampleTitle = ""; + marked(readme, { renderer }); - renderer.heading = function headingProxy(text, level, raw, slugger) { - if (level === 1 && !exampleTitle) { - exampleTitle = text; - } + result.plugins.push( + new HtmlWebpackPlugin({ + filename: "index.html", + template: path.join(__dirname, ".assets/layout.html"), + title: exampleTitle, + }), + ); - return heading.call(this, text, level, raw, slugger); + if (result.devServer.setupMiddlewares) { + const proxy = result.devServer.setupMiddlewares; + result.devServer.setupMiddlewares = (middlewares, devServer) => { + onBeforeSetupMiddleware(devServer); + return proxy(middlewares, devServer); }; - - marked.setOptions(markedOptions); - - marked(readme, { renderer }); - - result.plugins.push( - new HtmlWebpackPlugin({ - filename: "index.html", - template: path.join(__dirname, ".assets/layout.html"), - title: exampleTitle, - }), - ); - - if (result.devServer.setupMiddlewares) { - const proxy = result.devServer.setupMiddlewares; - result.devServer.setupMiddlewares = (middlewares, devServer) => { - onBeforeSetupMiddleware(devServer); - return proxy(middlewares, devServer); - }; - } else { - result.devServer.setupMiddlewares = (middlewares, devServer) => { - onBeforeSetupMiddleware(devServer); - return middlewares; - }; - } - - const output = { - path: path.dirname(module.parent.filename), + } else { + result.devServer.setupMiddlewares = (middlewares, devServer) => { + onBeforeSetupMiddleware(devServer); + return middlewares; }; + } + + const output = { + path: path.join(path.dirname(fileURLToPath(callerUrl)), "dist"), + publicPath: "/", + }; - result.output = result.output ? { ...result.output, ...output } : output; + result.output = result.output ? { ...result.output, ...output } : output; - return result; - }, -}; + return result; +} diff --git a/examples/watch-static/app.js b/examples/watch-static/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/watch-static/app.js +++ b/examples/watch-static/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/watch-static/webpack.config.js b/examples/watch-static/webpack.config.js index 438cff8ada..a40485612e 100644 --- a/examples/watch-static/webpack.config.js +++ b/examples/watch-static/webpack.config.js @@ -1,13 +1,14 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../util"); +import { setup } from "../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - static: ["assets", "css"], +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + static: ["assets", "css"], + }, }, -}); + import.meta.url, +); diff --git a/examples/web-socket-server/sockjs/README.md b/examples/web-socket-server/sockjs/README.md deleted file mode 100644 index a69a36ad9a..0000000000 --- a/examples/web-socket-server/sockjs/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# web-socket-server (sockjs) - -To create a custom server implementation. - -## sockjs - -This mode uses [SockJS-node](https://github.com/sockjs/sockjs-node) as a server. - -**webpack.config.js** - -```js -module.exports = { - // ... - devServer: { - webSocketServer: "sockjs", - }, -}; -``` - -Usage via CLI: - -```console -npx webpack serve --web-socket-server-type sockjs --open -``` - -### What Should Happen - -1. The script should open `http://localhost:8080/` in your default browser. -2. You should see the text on the page itself change to read `Success!`. diff --git a/examples/web-socket-server/sockjs/app.js b/examples/web-socket-server/sockjs/app.js deleted file mode 100644 index 51cf4a396b..0000000000 --- a/examples/web-socket-server/sockjs/app.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -const target = document.querySelector("#target"); - -target.classList.add("pass"); -target.innerHTML = "Success!"; diff --git a/examples/web-socket-server/sockjs/webpack.config.js b/examples/web-socket-server/sockjs/webpack.config.js deleted file mode 100644 index 4740693e79..0000000000 --- a/examples/web-socket-server/sockjs/webpack.config.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -// our setup function adds behind-the-scenes bits to the config that all of our -// examples need -const { setup } = require("../../util"); - -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - webSocketServer: "sockjs", - }, -}); diff --git a/examples/web-socket-server/ws/README.md b/examples/web-socket-server/ws/README.md index b87604dfae..9056033858 100644 --- a/examples/web-socket-server/ws/README.md +++ b/examples/web-socket-server/ws/README.md @@ -9,10 +9,12 @@ This mode uses [ws](https://github.com/websockets/ws) as a server. **webpack.config.js** ```js -module.exports = { +export default { // ... devServer: { - webSocketServer: "ws", + webSocketServer: { + type: "ws", + }, }, }; ``` diff --git a/examples/web-socket-server/ws/app.js b/examples/web-socket-server/ws/app.js index 51cf4a396b..bb080674bb 100644 --- a/examples/web-socket-server/ws/app.js +++ b/examples/web-socket-server/ws/app.js @@ -1,5 +1,3 @@ -"use strict"; - const target = document.querySelector("#target"); target.classList.add("pass"); diff --git a/examples/web-socket-server/ws/webpack.config.js b/examples/web-socket-server/ws/webpack.config.js index 98d34d1f9b..a9a3d88d4c 100644 --- a/examples/web-socket-server/ws/webpack.config.js +++ b/examples/web-socket-server/ws/webpack.config.js @@ -1,13 +1,16 @@ -"use strict"; - // our setup function adds behind-the-scenes bits to the config that all of our // examples need -const { setup } = require("../../util"); +import { setup } from "../../util.js"; -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - webSocketServer: "ws", +export default setup( + { + context: import.meta.dirname, + entry: "./app.js", + devServer: { + webSocketServer: { + type: "ws", + }, + }, }, -}); + import.meta.url, +); diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 197b147833..0000000000 --- a/jest.config.js +++ /dev/null @@ -1,34 +0,0 @@ -"use strict"; - -module.exports = { - testEnvironmentOptions: { - url: "http://localhost/", - }, - collectCoverage: false, - coveragePathIgnorePatterns: [ - "/node_modules/", - "/test/", - "/client/", - ], - testPathIgnorePatterns: ["/bin/this/process-arguments.js"], - snapshotResolver: "/test/helpers/snapshotResolver.js", - setupFilesAfterEnv: ["/scripts/setupTest.js"], - globalSetup: "/scripts/globalSetupTest.js", - moduleNameMapper: { - // This forces Jest/jest-environment-jsdom to use a Node+CommonJS version of uuid, not a Browser+ESM one - // See https://github.com/uuidjs/uuid/pull/616 - // - // WARNING: if your dependency tree has multiple paths leading to uuid, this will force all of them to resolve to - // whichever one happens to be hoisted to your root node_modules folder. This makes it much more dangerous - // to consume future uuid upgrades. Consider using a custom resolver instead of moduleNameMapper. - // - // More: - // https://jestjs.io/docs/upgrading-to-jest28#packagejson-exports - // https://github.com/microsoft/accessibility-insights-web/pull/5421#issuecomment-1109168149 - // - // FIXME: this uuid moduleNameMapper workaround can be removed after sockjs > uuid@v9 release - // https://github.com/uuidjs/uuid/pull/616#issuecomment-1206283882 - // eslint-disable-next-line n/no-extraneous-require - "^uuid$": require.resolve("uuid"), - }, -}; diff --git a/lib/Server.js b/lib/Server.js index 87c4edb347..1e693d097c 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -1,15 +1,29 @@ -"use strict"; - -const os = require("node:os"); -const path = require("node:path"); -const url = require("node:url"); -const util = require("node:util"); -const fs = require("graceful-fs"); -const ipaddr = require("ipaddr.js"); -const { validate } = require("schema-utils"); -const schema = require("./options.json"); - -/** @typedef {import("schema-utils/declarations/validate").Schema} Schema */ +import { createRequire } from "node:module"; +import os from "node:os"; +import path from "node:path"; +import url, { fileURLToPath } from "node:url"; +import fs from "graceful-fs"; +import ipaddr from "ipaddr.js"; +import { validate } from "schema-utils"; +import schema from "./options.json" with { type: "json" }; + +const require = createRequire(import.meta.url); + +/** @type {Promise | undefined} */ +let webpackPeer; + +/** + * Lazily load the optional `webpack` peer dependency. + * @returns {Promise} resolved webpack module, or undefined when not installed + */ +function loadWebpackPeer() { + webpackPeer ??= import("webpack") + .then((m) => m.default) + .catch(() => undefined); + return webpackPeer; +} + +/** @typedef {import("schema-utils").Schema} Schema */ /** @typedef {import("webpack").Compiler} Compiler */ /** @typedef {import("webpack").MultiCompiler} MultiCompiler */ /** @typedef {import("webpack").Configuration} WebpackConfiguration */ @@ -18,7 +32,7 @@ const schema = require("./options.json"); /** @typedef {import("webpack").Stats} Stats */ /** @typedef {import("webpack").MultiStats} MultiStats */ /** @typedef {import("os").NetworkInterfaceInfo} NetworkInterfaceInfo */ -/** @typedef {import("chokidar").WatchOptions} WatchOptions */ +/** @typedef {import("chokidar").ChokidarOptions} WatchOptions */ /** @typedef {import("chokidar").FSWatcher} FSWatcher */ /** @typedef {import("connect-history-api-fallback").Options} ConnectHistoryApiFallbackOptions */ /** @typedef {import("bonjour-service").Bonjour} Bonjour */ @@ -41,7 +55,7 @@ const schema = require("./options.json"); /** @typedef {import("express").Request} ExpressRequest */ /** @typedef {import("express").Response} ExpressResponse */ -// eslint-disable-next-line jsdoc/no-restricted-syntax +// eslint-disable-next-line jsdoc/reject-any-type /** @typedef {any} EXPECTED_ANY */ /** @typedef {(err?: EXPECTED_ANY) => void} NextFunction */ @@ -50,7 +64,7 @@ const schema = require("./options.json"); /** @typedef {(err: EXPECTED_ANY, req: IncomingMessage, res: ServerResponse, next: NextFunction) => void} ErrorHandleFunction */ /** @typedef {SimpleHandleFunction | NextHandleFunction | ErrorHandleFunction} HandleFunction */ -/** @typedef {import("https").ServerOptions & { spdy?: { plain?: boolean | undefined, ssl?: boolean | undefined, 'x-forwarded-for'?: string | undefined, protocol?: string | undefined, protocols?: string[] | undefined }}} ServerOptions */ +/** @typedef {import("https").ServerOptions} ServerOptions */ /** * @template {BasicApplication} [T=ExpressApplication] @@ -108,7 +122,7 @@ const schema = require("./options.json"); /** * @template {BasicApplication} [A=ExpressApplication] * @template {BasicServer} [S=import("http").Server] - * @typedef {"http" | "https" | "spdy" | "http2" | string | ((serverOptions: ServerOptions, application: A) => S)} ServerType + * @typedef {"http" | "https" | "http2" | string | ((serverOptions: ServerOptions, application: A) => S)} ServerType */ /** @@ -121,16 +135,16 @@ const schema = require("./options.json"); /** * @typedef {object} WebSocketServerConfiguration - * @property {("sockjs" | "ws" | string | (() => WebSocketServerConfiguration))=} type type + * @property {("ws" | string | (() => WebSocketServerConfiguration))=} type type * @property {Record=} options options */ /** - * @typedef {(import("ws").WebSocket | import("sockjs").Connection & { send: import("ws").WebSocket["send"], terminate: import("ws").WebSocket["terminate"], ping: import("ws").WebSocket["ping"] }) & { isAlive?: boolean }} ClientConnection + * @typedef {(import("ws").WebSocket & { send: import("ws").WebSocket["send"], terminate: import("ws").WebSocket["terminate"], ping: import("ws").WebSocket["ping"] }) & { isAlive?: boolean }} ClientConnection */ /** - * @typedef {import("ws").WebSocketServer | import("sockjs").Server & { close: import("ws").WebSocketServer["close"] }} WebSocketServer + * @typedef {import("ws").WebSocketServer & { close: import("ws").WebSocketServer["close"] }} WebSocketServer */ /** @@ -138,14 +152,7 @@ const schema = require("./options.json"); */ /** - * @callback ByPass - * @param {Request} req - * @param {Response} res - * @param {ProxyConfigArrayItem} proxyConfig - */ - -/** - * @typedef {{ path?: HttpProxyMiddlewareOptionsFilter | undefined, context?: HttpProxyMiddlewareOptionsFilter | undefined } & { bypass?: ByPass } & HttpProxyMiddlewareOptions } ProxyConfigArrayItem + * @typedef {{ path?: HttpProxyMiddlewareOptionsFilter | undefined, context?: HttpProxyMiddlewareOptionsFilter | undefined } & HttpProxyMiddlewareOptions} ProxyConfigArrayItem */ /** @@ -190,12 +197,12 @@ const schema = require("./options.json"); * @property {(boolean | { warnings?: OverlayMessageOptions, errors?: OverlayMessageOptions, runtimeErrors?: OverlayMessageOptions })=} overlay overlay * @property {boolean=} progress progress * @property {(boolean | number)=} reconnect reconnect - * @property {("ws" | "sockjs" | string)=} webSocketTransport web socket transport + * @property {("ws" | string)=} webSocketTransport web socket transport * @property {(string | WebSocketURL)=} webSocketURL web socket URL */ /** - * @typedef {Array<{ key: string; value: string }> | Record} Headers + * @typedef {{ key: string, value: string }[] | Record} Headers */ /** @@ -208,7 +215,7 @@ const schema = require("./options.json"); */ /** - * @typedef {MiddlewareObject | MiddlewareHandler } Middleware + * @typedef {MiddlewareObject | MiddlewareHandler} Middleware */ /** @typedef {import("net").Server | import("tls").Server} BasicServer */ @@ -227,13 +234,13 @@ const schema = require("./options.json"); * @property {("auto" | "all" | string | string[])=} allowedHosts * @property {(boolean | ConnectHistoryApiFallbackOptions)=} historyApiFallback * @property {(boolean | Record | BonjourOptions)=} bonjour - * @property {(string | string[] | WatchFiles | Array)=} watchFiles - * @property {(boolean | string | Static | Array)=} static + * @property {(string | string[] | WatchFiles | (string | WatchFiles)[])=} watchFiles + * @property {(boolean | string | Static | (string | Static)[])=} static * @property {(ServerType | ServerConfiguration)=} server * @property {(() => Promise)=} app - * @property {(boolean | "sockjs" | "ws" | string | WebSocketServerConfiguration)=} webSocketServer + * @property {(boolean | "ws" | string | WebSocketServerConfiguration)=} webSocketServer * @property {ProxyConfigArray=} proxy - * @property {(boolean | string | Open | Array)=} open + * @property {(boolean | string | Open | (string | Open)[])=} open * @property {boolean=} setupExitSignals * @property {(boolean | ClientConfiguration)=} client * @property {(Headers | ((req: Request, res: Response, context: DevMiddlewareContext | undefined) => Headers))=} headers @@ -274,7 +281,7 @@ const memoize = (fn) => { }; }; -const getExpress = memoize(() => require("express")); +const getExpress = memoize(async () => (await import("express")).default); /** * @param {OverlayMessageOptions=} setting overlay settings @@ -346,7 +353,7 @@ class Server { this.staticWatchers = []; /** * @private - * @type {{ name: string | symbol, listener: (...args: EXPECTED_ANY[]) => void}[] }} + * @type {{ name: string | symbol, listener: (...args: EXPECTED_ANY[]) => void }[]} } */ this.listeners = []; // Keep track of websocket proxies for external websocket upgrade. @@ -475,24 +482,6 @@ class Server { } } - // TODO remove me in the next major release, we have `findIp` - /** - * @param {"v4" | "v6"} family family - * @returns {Promise} internal API - */ - static async internalIP(family) { - return Server.findIp(family, false); - } - - // TODO remove me in the next major release, we have `findIp` - /** - * @param {"v4" | "v6"} family family - * @returns {string | undefined} internal IP - */ - static internalIPSync(family) { - return Server.findIp(family, false); - } - /** * @param {Host} hostname hostname * @returns {Promise} resolved hostname @@ -521,9 +510,8 @@ class Server { return port; } - const pRetry = (await import("p-retry")).default; - - const getPort = require("./getPort"); + const { default: pRetry } = await import("p-retry"); + const { default: getPort } = await import("./getPort.js"); const basePort = typeof process.env.WEBPACK_DEV_SERVER_BASE_PORT !== "undefined" @@ -586,49 +574,15 @@ class Server { * @returns {boolean} true when target is `web`, otherwise false */ static isWebTarget(compiler) { - if (compiler.platform && compiler.platform.web) { - return compiler.platform.web; - } - - // TODO improve for the next major version and keep only `webTargets` to fallback for old versions - if ( - compiler.options.externalsPresets && - compiler.options.externalsPresets.web - ) { - return true; - } - - if ( - compiler.options.resolve.conditionNames && - compiler.options.resolve.conditionNames.includes("browser") - ) { - return true; - } - - const webTargets = [ - "web", - "webworker", - "electron-preload", - "electron-renderer", - "nwjs", - "node-webkit", - - undefined, - null, - ]; - - if (Array.isArray(compiler.options.target)) { - return compiler.options.target.some((r) => webTargets.includes(r)); - } - - return webTargets.includes(/** @type {string} */ (compiler.options.target)); + return compiler.platform.web || false; } /** * @private * @param {Compiler} compiler compiler + * @returns {Promise} */ - addAdditionalEntries(compiler) { + async addAdditionalEntries(compiler) { /** * @type {string[]} */ @@ -674,28 +628,17 @@ class Server { /** @type {string} */ let hostname; - // SockJS is not supported server mode, so `hostname` and `port` can't specified, let's ignore them - const isSockJSType = webSocketServer.type === "sockjs"; const isWebSocketServerHostDefined = typeof webSocketServer.options.host !== "undefined"; const isWebSocketServerPortDefined = typeof webSocketServer.options.port !== "undefined"; - if ( - isSockJSType && - (isWebSocketServerHostDefined || isWebSocketServerPortDefined) - ) { - this.logger.warn( - "SockJS only supports client mode and does not support custom hostname and port options. Please consider using 'ws' if you need to customize these options.", - ); - } - // We are proxying dev server and need to specify custom `hostname` if (typeof webSocketURL.hostname !== "undefined") { hostname = webSocketURL.hostname; } // Web socket server works on custom `hostname`, only for `ws` because `sock-js` is not support custom `hostname` - else if (isWebSocketServerHostDefined && !isSockJSType) { + else if (isWebSocketServerHostDefined) { hostname = webSocketServer.options.host; } // The `host` option is specified @@ -717,7 +660,7 @@ class Server { port = webSocketURL.port; } // Web socket server works on custom `port`, only for `ws` because `sock-js` is not support custom `port` - else if (isWebSocketServerPortDefined && !isSockJSType) { + else if (isWebSocketServerPortDefined) { port = webSocketServer.options.port; } // The `port` option is specified @@ -810,7 +753,11 @@ class Server { additionalEntries.push(clientHotEntry); } - const webpack = compiler.webpack || require("webpack"); + const webpack = + compiler.webpack || + /** @type {NonNullable>>} */ ( + await loadWebpackPeer() + ); // use a hook to add entries if available for (const additionalEntry of additionalEntries) { @@ -848,21 +795,7 @@ class Server { // Configuration with `web` preset const compilerWithWebPreset = /** @type {MultiCompiler} */ - (this.compiler).compilers.find( - (config) => - (config.options.externalsPresets && - config.options.externalsPresets.web) || - [ - "web", - "webworker", - "electron-preload", - "electron-renderer", - "node-webkit", - - undefined, - null, - ].includes(/** @type {string} */ (config.options.target)), - ); + (this.compiler).compilers.find((config) => Server.isWebTarget(config)); if (compilerWithWebPreset) { return compilerWithWebPreset.options; @@ -919,7 +852,7 @@ class Server { const usePolling = getPolling(); const interval = getInterval(); - const { poll, ...rest } = watchOptions; + const { poll: _poll, interval: _interval, ...rest } = watchOptions; return { ignoreInitial: true, @@ -930,9 +863,7 @@ class Server { ignorePermissionErrors: true, // Respect options from compiler watchOptions usePolling, - interval, - ignored: watchOptions.ignored, - // TODO: we respect these options for all watch options and allow developers to pass them to chokidar, but chokidar doesn't have these options maybe we need revisit that in future + ...(interval !== undefined ? { interval } : {}), ...rest, }; }; @@ -1136,24 +1067,13 @@ class Server { const serverOptions = /** @type {ServerOptions} */ (options.server.options); - if ( - options.server.type === "spdy" && - typeof serverOptions.spdy === "undefined" - ) { - serverOptions.spdy = { protocols: ["h2", "http/1.1"] }; - } - - if ( - options.server.type === "https" || - options.server.type === "http2" || - options.server.type === "spdy" - ) { + if (options.server.type === "https" || options.server.type === "http2") { if (typeof serverOptions.requestCert === "undefined") { serverOptions.requestCert = false; } const httpsProperties = - /** @type {Array} */ + /** @type {(keyof ServerOptions)[]} */ (["ca", "cert", "crl", "key", "pfx"]); for (const property_ of httpsProperties) { @@ -1238,7 +1158,7 @@ class Server { if (!certificateExists) { this.logger.info("Generating SSL certificate..."); - const selfsigned = require("selfsigned"); + const { default: selfsigned } = await import("selfsigned"); const attributes = [{ name: "commonName", value: "localhost" }]; const notBeforeDate = new Date(); @@ -1420,36 +1340,8 @@ class Server { return item; } - /** - * @param {"info" | "warn" | "error" | "debug" | "silent" | undefined | "none" | "log" | "verbose"} level level - * @returns {"info" | "warn" | "error" | "debug" | "silent" | undefined} log level for proxy - */ - const getLogLevelForProxy = (level) => { - if (level === "none") { - return "silent"; - } - - if (level === "log") { - return "info"; - } - - if (level === "verbose") { - return "debug"; - } - - return level; - }; - - if (typeof item.logLevel === "undefined") { - item.logLevel = getLogLevelForProxy( - compilerOptions.infrastructureLogging - ? compilerOptions.infrastructureLogging.level - : "info", - ); - } - - if (typeof item.logProvider === "undefined") { - item.logProvider = () => this.logger; + if (typeof item.logger === "undefined") { + item.logger = this.logger; } return item; @@ -1545,6 +1437,23 @@ class Server { } } + /** + * @returns {{ isColorSupported: () => boolean, colors: import("webpack").Colors }} colors support + */ + #getColors() { + const compilerOptions = + /** @type {MultiCompiler} */ + (this.compiler).compilers + ? /** @type {MultiCompiler} */ (this.compiler).compilers[0].webpack + : /** @type {Compiler} */ (this.compiler).webpack; + + const colors = compilerOptions.cli.createColors({ + useColor: compilerOptions.cli.isColorSupported(), + }); + + return { isColorSupported: compilerOptions.cli.isColorSupported, colors }; + } + /** * @private * @returns {string} client transport @@ -1560,9 +1469,7 @@ class Server { (this.options.webSocketServer).type ) === "string" && // @ts-expect-error - (this.options.webSocketServer.type === "ws" || - /** @type {WebSocketServerConfiguration} */ - (this.options.webSocketServer).type === "sockjs"); + this.options.webSocketServer.type === "ws"; let clientTransport; @@ -1589,14 +1496,10 @@ class Server { switch (typeof clientTransport) { case "string": - // could be 'sockjs', 'ws', or a path that should be required - if (clientTransport === "sockjs") { - clientImplementation = require.resolve( - "../client/clients/SockJSClient", - ); - } else if (clientTransport === "ws") { - clientImplementation = require.resolve( - "../client/clients/WebSocketClient", + // could be 'ws', or a path that should be resolved + if (clientTransport === "ws") { + clientImplementation = fileURLToPath( + import.meta.resolve("../client/clients/WebSocketClient.js"), ); } else { try { @@ -1616,7 +1519,7 @@ class Server { !isKnownWebSocketServerImplementation ? "When you use custom web socket implementation you must explicitly specify client.webSocketTransport. " : "" - }client.webSocketTransport must be a string denoting a default implementation (e.g. 'sockjs', 'ws') or a full path to a JS file via require.resolve(...) which exports a class `, + }client.webSocketTransport must be a string denoting a default implementation (e.g. 'ws') or a resolvable module specifier or absolute file path which exports a class `, ); } @@ -1626,9 +1529,9 @@ class Server { /** * @template T * @private - * @returns {T} server transport + * @returns {Promise} server transport */ - getServerTransport() { + async getServerTransport() { let implementation; let implementationFound = true; @@ -1639,25 +1542,24 @@ class Server { ) ) { case "string": - // Could be 'sockjs', in the future 'ws', or a path that should be required + // Could be 'ws', or a path that should be required if ( - /** @type {WebSocketServerConfiguration} */ ( - this.options.webSocketServer - ).type === "sockjs" - ) { - implementation = require("./servers/SockJSServer"); - } else if ( /** @type {WebSocketServerConfiguration} */ ( this.options.webSocketServer ).type === "ws" ) { - implementation = require("./servers/WebsocketServer"); + implementation = (await import("./servers/WebsocketServer.js")) + .default; } else { try { - implementation = require( - /** @type {WebSocketServerConfiguration} */ - (this.options.webSocketServer).type, + const mod = require( + /** @type {string} */ ( + /** @type {WebSocketServerConfiguration} */ + (this.options.webSocketServer).type + ), ); + + implementation = mod.default || mod; } catch { implementationFound = false; } @@ -1674,9 +1576,9 @@ class Server { if (!implementationFound) { throw new Error( - "webSocketServer (webSocketServer.type) must be a string denoting a default implementation (e.g. 'ws', 'sockjs'), a full path to " + - "a JS file which exports a class extending BaseServer (webpack-dev-server/lib/servers/BaseServer.js) " + - "via require.resolve(...), or the class itself which extends BaseServer", + "webSocketServer (webSocketServer.type) must be a string denoting a default implementation (e.g. 'ws'), a resolvable module specifier or absolute file path " + + "which exports a class extending BaseServer (webpack-dev-server/lib/servers/BaseServer.js), " + + "or the class itself which extends BaseServer", ); } @@ -1688,7 +1590,7 @@ class Server { */ getClientEntry() { - return require.resolve("../client/index.js"); + return fileURLToPath(import.meta.resolve("../client/index.js")); } /** @@ -1696,9 +1598,9 @@ class Server { */ getClientHotEntry() { if (this.options.hot === "only") { - return require.resolve("webpack/hot/only-dev-server"); + return fileURLToPath(import.meta.resolve("webpack/hot/only-dev-server")); } else if (this.options.hot) { - return require.resolve("webpack/hot/dev-server"); + return fileURLToPath(import.meta.resolve("webpack/hot/dev-server")); } } @@ -1766,9 +1668,13 @@ class Server { continue; } - this.addAdditionalEntries(compiler); + await this.addAdditionalEntries(compiler); - const webpack = compiler.webpack || require("webpack"); + const webpack = + compiler.webpack || + /** @type {NonNullable>>} */ ( + await loadWebpackPeer() + ); new webpack.ProvidePlugin({ __webpack_dev_server_client__: this.getClientTransport(), @@ -1802,9 +1708,9 @@ class Server { } } - this.setupWatchFiles(); - this.setupWatchStaticFiles(); - this.setupMiddlewares(); + await this.setupWatchFiles(); + await this.setupWatchStaticFiles(); + await this.setupMiddlewares(); if (this.options.setupExitSignals) { const signals = ["SIGINT", "SIGTERM"]; @@ -1871,7 +1777,7 @@ class Server { ( typeof this.options.app === "function" ? await this.options.app() - : getExpress()() + : (await getExpress())() ); } @@ -1927,15 +1833,15 @@ class Server { /** * @private - * @returns {void} + * @returns {Promise} */ - setupWatchStaticFiles() { + async setupWatchStaticFiles() { const watchFiles = /** @type {NormalizedStatic[]} */ (this.options.static); if (watchFiles.length > 0) { for (const item of watchFiles) { if (item.watch) { - this.watchFiles(item.directory, item.watch); + await this.watchFiles(item.directory, item.watch); } } } @@ -1943,25 +1849,25 @@ class Server { /** * @private - * @returns {void} + * @returns {Promise} */ - setupWatchFiles() { + async setupWatchFiles() { const watchFiles = /** @type {WatchFiles[]} */ (this.options.watchFiles); if (watchFiles.length > 0) { for (const item of watchFiles) { - this.watchFiles(item.paths, item.options); + await this.watchFiles(item.paths, item.options); } } } /** * @private - * @returns {void} + * @returns {Promise} */ - setupMiddlewares() { + async setupMiddlewares() { /** - * @type {Array} + * @type {Middleware[]} */ let middlewares = []; @@ -2047,8 +1953,8 @@ class Server { } // compress is placed last and uses unshift so that it will be the first middleware used - if (this.options.compress && !isHTTP2) { - const compression = require("compression"); + if (this.options.compress) { + const { default: compression } = await import("compression"); middlewares.push({ name: "compression", middleware: compression() }); } @@ -2065,56 +1971,6 @@ class Server { middleware: /** @type {MiddlewareHandler} */ (this.middleware), }); - // Should be after `webpack-dev-middleware`, otherwise other middlewares might rewrite response - middlewares.push({ - name: "webpack-dev-server-sockjs-bundle", - path: "/__webpack_dev_server__/sockjs.bundle.js", - /** - * @param {Request} req request - * @param {Response} res response - * @param {NextFunction} next next function - * @returns {void} - */ - middleware: (req, res, next) => { - if (req.method !== "GET" && req.method !== "HEAD") { - next(); - return; - } - - const clientPath = path.join( - __dirname, - "..", - "client/modules/sockjs-client/index.js", - ); - - // Express send Etag and other headers by default, so let's keep them for compatibility reasons - if (typeof res.sendFile === "function") { - res.sendFile(clientPath); - return; - } - - let stats; - - try { - // TODO implement `inputFileSystem.createReadStream` in webpack - stats = fs.statSync(clientPath); - } catch { - next(); - return; - } - - res.setHeader("Content-Type", "application/javascript; charset=UTF-8"); - res.setHeader("Content-Length", stats.size); - - if (req.method === "HEAD") { - res.end(); - return; - } - - fs.createReadStream(clientPath).pipe(res); - }, - }); - middlewares.push({ name: "webpack-dev-server-invalidate", path: "/webpack-dev-server/invalidate", @@ -2143,9 +1999,9 @@ class Server { * @param {Request} req request * @param {Response} res response * @param {NextFunction} next next function - * @returns {void} + * @returns {Promise} */ - middleware: (req, res, next) => { + middleware: async (req, res, next) => { if (req.method !== "GET" && req.method !== "HEAD") { next(); return; @@ -2161,7 +2017,7 @@ class Server { const fileName = params.get("fileName"); if (typeof fileName === "string") { - const launchEditor = require("launch-editor"); + const { default: launchEditor } = await import("launch-editor"); launchEditor(fileName); } @@ -2254,36 +2110,20 @@ class Server { }); if (this.options.proxy) { - const { createProxyMiddleware } = require("http-proxy-middleware"); + const { createProxyMiddleware } = await import("http-proxy-middleware"); /** * @param {ProxyConfigArrayItem} proxyConfig proxy config * @returns {RequestHandler | undefined} request handler */ const getProxyMiddleware = (proxyConfig) => { - // It is possible to use the `bypass` method without a `target` or `router`. - // However, the proxy middleware has no use in this case, and will fail to instantiate. - if (proxyConfig.target) { - const context = proxyConfig.context || proxyConfig.path; - - return createProxyMiddleware( - /** @type {string} */ (context), - proxyConfig, - ); - } - - if (proxyConfig.router) { - return createProxyMiddleware(proxyConfig); - } + const context = + proxyConfig.context || proxyConfig.path || proxyConfig.pathFilter; - // TODO improve me after drop `bypass` to always generate error when configuration is bad - if (!proxyConfig.bypass) { - util.deprecate( - () => {}, - `Invalid proxy configuration:\n\n${JSON.stringify(proxyConfig, null, 2)}\n\nThe use of proxy object notation as proxy routes has been removed.\nPlease use the 'router' or 'context' options. Read more at https://github.com/chimurai/http-proxy-middleware/tree/v2.0.6#http-proxy-middleware-options`, - "DEP_WEBPACK_DEV_SERVER_PROXY_ROUTES_ARGUMENT", - )(); - } + return createProxyMiddleware({ + ...proxyConfig, + pathFilter: /** @type {string} */ (context), + }); }; /** @@ -2349,40 +2189,7 @@ class Server { } } - // - Check if we have a bypass function defined - // - In case the bypass function is defined we'll retrieve the - // bypassUrl from it otherwise bypassUrl would be null - // TODO remove in the next major in favor `context` and `router` options - const isByPassFuncDefined = typeof proxyConfig.bypass === "function"; - if (isByPassFuncDefined) { - util.deprecate( - () => {}, - "Using the 'bypass' option is deprecated. Please use the 'router' or 'context' options. Read more at https://github.com/chimurai/http-proxy-middleware/tree/v2.0.6#http-proxy-middleware-options", - "DEP_WEBPACK_DEV_SERVER_PROXY_BYPASS_ARGUMENT", - )(); - } - const bypassUrl = isByPassFuncDefined - ? await /** @type {ByPass} */ (proxyConfig.bypass)( - req, - res, - proxyConfig, - ) - : null; - - if (typeof bypassUrl === "boolean") { - // skip the proxy - res.statusCode = 404; - req.url = ""; - next(); - } else if (typeof bypassUrl === "string") { - // byPass to that url - req.url = bypassUrl; - next(); - } else if (proxyMiddleware) { - return proxyMiddleware(req, res, next); - } else { - next(); - } + return proxyMiddleware(req, res, next); }; middlewares.push({ @@ -2421,7 +2228,7 @@ class Server { middlewares.push({ name: "express-static", path: publicPath, - middleware: getExpress().static( + middleware: (await getExpress()).static( staticOption.directory, staticOption.staticOptions, ), @@ -2431,7 +2238,9 @@ class Server { } if (this.options.historyApiFallback) { - const connectHistoryApiFallback = require("connect-history-api-fallback"); + const { default: connectHistoryApiFallback } = await import( + "connect-history-api-fallback" + ); const { historyApiFallback } = this.options; @@ -2474,7 +2283,7 @@ class Server { middlewares.push({ name: "express-static", path: publicPath, - middleware: getExpress().static( + middleware: (await getExpress()).static( staticOption.directory, staticOption.staticOptions, ), @@ -2485,7 +2294,7 @@ class Server { } if (staticOptions.length > 0) { - const serveIndex = require("serve-index"); + const { default: serveIndex } = await import("serve-index"); for (const staticOption of staticOptions) { for (const publicPath of staticOption.publicPath) { @@ -2543,9 +2352,11 @@ class Server { } // Lazy init webpack dev middleware - const lazyInitDevMiddleware = () => { + const lazyInitDevMiddleware = async () => { if (!this.middleware) { - const webpackDevMiddleware = require("webpack-dev-middleware"); + const { default: webpackDevMiddleware } = await import( + "webpack-dev-middleware" + ); // middleware for serving webpack bundle /** @type {import("webpack-dev-middleware").API} */ @@ -2563,7 +2374,7 @@ class Server { const item = /** @type {MiddlewareObject} */ (i); if (typeof item.middleware === "undefined") { - item.middleware = lazyInitDevMiddleware(); + item.middleware = await lazyInitDevMiddleware(); } } } @@ -2610,7 +2421,9 @@ class Server { (this.app), ); } else { - const serverType = require(/** @type {string} */ (type)); + const mod = require(/** @type {string} */ (type)); + + const serverType = mod.default || mod; /** @type {S | undefined} */ this.server = @@ -2658,11 +2471,11 @@ class Server { /** * @private - * @returns {void} + * @returns {Promise} */ - createWebSocketServer() { + async createWebSocketServer() { /** @type {WebSocketServerImplementation | undefined | null} */ - this.webSocketServer = new (this.getServerTransport())(this); + this.webSocketServer = new (await this.getServerTransport())(this); /** @type {WebSocketServerImplementation} */ (this.webSocketServer).implementation.on( @@ -2677,11 +2490,7 @@ class Server { typeof request !== "undefined" ? /** @type {{ [key: string]: string | undefined }} */ (request.headers) - : typeof ( - /** @type {import("sockjs").Connection} */ (client).headers - ) !== "undefined" - ? /** @type {import("sockjs").Connection} */ (client).headers - : undefined; + : undefined; if (!headers) { this.logger.warn( @@ -2826,10 +2635,10 @@ class Server { /** * @private - * @returns {void} + * @returns {Promise} */ - runBonjour() { - const { Bonjour } = require("bonjour-service"); + async runBonjour() { + const { Bonjour } = await import("bonjour-service"); const type = this.isTlsServer ? "https" : "http"; @@ -2869,7 +2678,10 @@ class Server { * @returns {Promise} */ async logStatus() { - const { cyan, isColorSupported, red } = require("colorette"); + const { + isColorSupported, + colors: { cyan, red }, + } = this.#getColors(); /** * @param {Compiler["options"]} compilerOptions compiler options @@ -2890,7 +2702,7 @@ class Server { /** @type {boolean} */ (/** @type {StatsOptions} */ (compilerOptions.stats).colors); } else { - colorsEnabled = isColorSupported; + colorsEnabled = isColorSupported(); } return colorsEnabled; @@ -3184,6 +2996,32 @@ class Server { return false; } + /** + * Extracts and normalizes the hostname from a header, removing brackets for IPv6. + * @param {string} header header value + * @returns {string | null} hostname or null + */ + #parseHostnameFromHeader = function (header) { + if (!header) return null; + try { + // If the header does not have a scheme, prepend // so URL can parse it + const parseUrl = new URL( + /^(.+:)?\/\//.test(header) ? header : `//${header}`, + "http://localhost/", + ); + + let hostname = parseUrl.hostname; + // Normalize IPv6: remove brackets if present + if (hostname.startsWith("[") && hostname.endsWith("]")) { + hostname = hostname.slice(1, -1); + } + + return hostname; + } catch { + return null; + } + }; + /** * @private * @param {{ [key: string]: string | undefined }} headers headers @@ -3208,15 +3046,7 @@ class Server { return true; } - // use the node url-parser to retrieve the hostname from the host-header. - // TODO resolve me in the next major release - // eslint-disable-next-line n/no-deprecated-api - const { hostname } = url.parse( - // if header doesn't have scheme, add // for parsing. - /^(.+:)?\/\//.test(header) ? header : `//${header}`, - false, - true, - ); + const hostname = this.#parseHostnameFromHeader(header); if (hostname === null) { return false; @@ -3230,8 +3060,7 @@ class Server { // A note on IPv6 addresses: // header will always contain the brackets denoting // an IPv6-address in URLs, - // these are removed from the hostname in url.parse(), - // so we have the pure IPv6-address in hostname. + // these aren't removed from the hostname in new URL(), // For convenience, always allow localhost (hostname === 'localhost') // and its subdomains (hostname.endsWith(".localhost")). // allow hostname of listening address (hostname === this.options.host) @@ -3266,9 +3095,7 @@ class Server { return true; } - // TODO resolve me in the next major release - // eslint-disable-next-line n/no-deprecated-api - const origin = url.parse(originHeader, false, true).hostname; + const origin = this.#parseHostnameFromHeader(originHeader); if (origin === null) { return false; @@ -3288,13 +3115,7 @@ class Server { return true; } - // eslint-disable-next-line n/no-deprecated-api - const host = url.parse( - // if hostHeader doesn't have scheme, add // for parsing. - /^(.+:)?\/\//.test(hostHeader) ? hostHeader : `//${hostHeader}`, - false, - true, - ).hostname; + const host = this.#parseHostnameFromHeader(hostHeader); if (host === null) { return false; @@ -3304,6 +3125,18 @@ class Server { return true; } + // Treat all loopback aliases as equivalent: localhost may resolve to + // 127.0.0.1 or ::1 depending on the OS, causing a false mismatch. + // Only widen when allowedHosts is "auto" (default) or already permits a + // loopback alias, so an explicit allow-list excluding loopback is honored. + const loopbacks = new Set(["localhost", "127.0.0.1", "::1"]); + const loopbackPermitted = + this.options.allowedHosts === "auto" || + [...loopbacks].some((alias) => this.isHostAllowed(alias)); + if (loopbacks.has(origin) && loopbacks.has(host) && loopbackPermitted) { + return true; + } + return origin === host; } @@ -3315,8 +3148,7 @@ class Server { */ sendMessage(clients, type, data, params) { for (const client of clients) { - // `sockjs` uses `1` to indicate client is ready to accept data - // `ws` uses `WebSocket.OPEN`, but it is mean `1` too + // `ws` uses `WebSocket.OPEN`, which is `1` if (client.readyState === 1) { client.send(JSON.stringify({ type, data, params })); } @@ -3384,11 +3216,43 @@ class Server { /** * @param {string | string[]} watchPath watch path * @param {WatchOptions=} watchOptions watch options + * @returns {Promise} */ - watchFiles(watchPath, watchOptions) { - const chokidar = require("chokidar"); + async watchFiles(watchPath, watchOptions = {}) { + const { default: chokidar } = await import("chokidar"); + const { globSync, isDynamicPattern } = await import("tinyglobby"); + + const isWin = path.sep === "\\"; + const toPosix = (/** @type {string} */ filePath) => + isWin ? filePath.split(path.sep).join("/") : filePath; + const toNative = (/** @type {string} */ filePath) => + isWin ? filePath.split("/").join(path.sep) : filePath; + + const cwd = watchOptions.cwd ? toPosix(watchOptions.cwd) : undefined; + + const expand = (/** @type {string} */ item) => { + const posix = toPosix(item); + return isDynamicPattern(posix) + ? globSync(posix, { cwd, absolute: true }).map(toNative) + : item; + }; + + const resolveGlobs = (/** @type {string | string[]} */ input) => + (Array.isArray(input) ? input : [input]).flatMap((item) => + typeof item === "string" ? expand(item) : item, + ); + + const resolvedPaths = resolveGlobs(watchPath); + + if (typeof watchOptions.ignored === "string") { + watchOptions.ignored = resolveGlobs(watchOptions.ignored); + } else if (Array.isArray(watchOptions.ignored)) { + watchOptions.ignored = watchOptions.ignored.flatMap((item) => + typeof item === "string" ? expand(item) : item, + ); + } - const watcher = chokidar.watch(watchPath, watchOptions); + const watcher = chokidar.watch(resolvedPaths, watchOptions); // disabling refreshing on changing the content if (this.options.liveReload) { @@ -3422,10 +3286,10 @@ class Server { await this.normalizeOptions(); if (this.options.ipc) { + const { default: net } = await import("node:net"); + await /** @type {Promise} */ ( new Promise((resolve, reject) => { - const net = require("node:net"); - const socket = new net.Socket(); socket.on( @@ -3495,11 +3359,11 @@ class Server { } if (this.options.webSocketServer) { - this.createWebSocketServer(); + await this.createWebSocketServer(); } if (this.options.bonjour) { - this.runBonjour(); + await this.runBonjour(); } await this.logStatus(); @@ -3574,6 +3438,17 @@ class Server { } this.sockets = []; + + // Force-close any remaining connections that aren't in `this.sockets` + // (HTTP keep-alive idle connections from upstream clients, + // long-poll requests, sockets that were upgraded out of `connection` + // tracking, etc). Without this, `server.close()`'s callback can hang + // indefinitely waiting for connections that never close on their own + // — a problem that surfaces in test suites that rapidly start/stop + // servers on the same port (next start hits EADDRINUSE). + // `closeAllConnections` is available since Node.js 18.2. + /** @type {S & { closeAllConnections?: () => void }} */ + (this.server).closeAllConnections?.(); }) ); @@ -3613,4 +3488,4 @@ class Server { } } -module.exports = Server; +export default Server; diff --git a/lib/getPort.js b/lib/getPort.js index 23bc4e348a..bb44cddb02 100644 --- a/lib/getPort.js +++ b/lib/getPort.js @@ -1,13 +1,11 @@ -"use strict"; - /* * Based on the packages get-port https://www.npmjs.com/package/get-port * and portfinder https://www.npmjs.com/package/portfinder * The code structure is similar to get-port, but it searches * ports deterministically like portfinder */ -const net = require("node:net"); -const os = require("node:os"); +import net from "node:net"; +import os from "node:os"; const minPort = 1024; const maxPort = 65_535; @@ -58,7 +56,7 @@ const checkAvailablePort = (basePort, host) => /** * @param {number} port port - * @param {Set} hosts hosts + * @param {Set} hosts hosts * @returns {Promise} resolved port */ const getAvailablePort = async (port, hosts) => { @@ -129,4 +127,4 @@ async function getPorts(basePort, host) { throw new Error("No available ports found"); } -module.exports = getPorts; +export default getPorts; diff --git a/lib/options.json b/lib/options.json index f5fa540624..683f383cc5 100644 --- a/lib/options.json +++ b/lib/options.json @@ -193,7 +193,7 @@ "link": "https://webpack.js.org/configuration/dev-server/#websockettransport" }, "ClientWebSocketTransportEnum": { - "enum": ["sockjs", "ws"] + "enum": ["ws"] }, "ClientWebSocketTransportString": { "type": "string", @@ -529,13 +529,13 @@ "description": "Allows to set server and options (by default 'http')." }, "ServerType": { - "enum": ["http", "https", "spdy", "http2"] + "enum": ["http", "https", "http2"] }, "ServerFn": { "instanceof": "Function" }, "ServerEnum": { - "enum": ["http", "https", "spdy", "http2"], + "enum": ["http", "https", "http2"], "cli": { "exclude": true } @@ -907,7 +907,7 @@ "link": "https://webpack.js.org/configuration/dev-server/#devserverwebsocketserver" }, "WebSocketServerType": { - "enum": ["sockjs", "ws"] + "enum": ["ws"] }, "WebSocketServerEnum": { "anyOf": [ @@ -918,7 +918,7 @@ } }, { - "enum": ["sockjs", "ws"], + "enum": ["ws"], "cli": { "exclude": true } diff --git a/lib/servers/BaseServer.js b/lib/servers/BaseServer.js index 9f5a18f4e0..13079303b8 100644 --- a/lib/servers/BaseServer.js +++ b/lib/servers/BaseServer.js @@ -1,18 +1,16 @@ -"use strict"; - -/** @typedef {import("../Server").ClientConnection} ClientConnection */ +/** @typedef {import("../Server.js").ClientConnection} ClientConnection */ // base class that users should extend if they are making their own // server implementation -module.exports = class BaseServer { +export default class BaseServer { /** - * @param {import("../Server")} server server + * @param {import("../Server.js").default} server server */ constructor(server) { - /** @type {import("../Server")} */ + /** @type {import("../Server.js").default} */ this.server = server; /** @type {ClientConnection[]} */ this.clients = []; } -}; +} diff --git a/lib/servers/SockJSServer.js b/lib/servers/SockJSServer.js deleted file mode 100644 index 5468355bd7..0000000000 --- a/lib/servers/SockJSServer.js +++ /dev/null @@ -1,128 +0,0 @@ -"use strict"; - -const sockjs = require("sockjs"); -const BaseServer = require("./BaseServer"); - -/** @typedef {import("../Server").WebSocketServerConfiguration} WebSocketServerConfiguration */ -/** @typedef {import("../Server").ClientConnection} ClientConnection */ - -// Workaround for sockjs@~0.3.19 -// sockjs will remove Origin header, however Origin header is required for checking host. -// See https://github.com/webpack/webpack-dev-server/issues/1604 for more information -{ - // @ts-expect-error - const SockjsSession = require("sockjs/lib/transport").Session; - - const { decorateConnection } = SockjsSession.prototype; - - /** - * @param {import("http").IncomingMessage} req request - */ - // eslint-disable-next-line func-names - SockjsSession.prototype.decorateConnection = function (req) { - decorateConnection.call(this, req); - - const { connection } = this; - - if ( - connection.headers && - !("origin" in connection.headers) && - "origin" in req.headers - ) { - connection.headers.origin = req.headers.origin; - } - }; -} - -module.exports = class SockJSServer extends BaseServer { - // options has: error (function), debug (function), server (http/s server), path (string) - /** - * @param {import("../Server")} server server - */ - constructor(server) { - super(server); - - const webSocketServerOptions = - /** @type {NonNullable} */ - ( - /** @type {WebSocketServerConfiguration} */ - (this.server.options.webSocketServer).options - ); - - /** - * @param {NonNullable} options options - * @returns {string} sockjs URL - */ - const getSockjsUrl = (options) => { - if (typeof options.sockjsUrl !== "undefined") { - return options.sockjsUrl; - } - - return "/__webpack_dev_server__/sockjs.bundle.js"; - }; - - this.implementation = sockjs.createServer({ - // Use provided up-to-date sockjs-client - // eslint-disable-next-line camelcase - sockjs_url: getSockjsUrl(webSocketServerOptions), - // Default logger is very annoy. Limit useless logs. - /** - * @param {string} severity severity - * @param {string} line line - */ - log: (severity, line) => { - if (severity === "error") { - this.server.logger.error(line); - } else if (severity === "info") { - this.server.logger.log(line); - } else { - this.server.logger.debug(line); - } - }, - }); - - /** - * @param {import("sockjs").ServerOptions & { path?: string }} options options - * @returns {string | undefined} prefix - */ - const getPrefix = (options) => { - if (typeof options.prefix !== "undefined") { - return options.prefix; - } - - return options.path; - }; - - const options = { - ...webSocketServerOptions, - prefix: getPrefix(webSocketServerOptions), - }; - - this.implementation.installHandlers( - /** @type {import("http").Server} */ (this.server.server), - options, - ); - - this.implementation.on("connection", (client) => { - // @ts-expect-error - // Implement the the same API as for `ws` - client.send = client.write; - // @ts-expect-error - client.terminate = client.close; - - this.clients.push(/** @type {ClientConnection} */ (client)); - - client.on("close", () => { - this.clients.splice( - this.clients.indexOf(/** @type {ClientConnection} */ (client)), - 1, - ); - }); - }); - - // @ts-expect-error - this.implementation.close = (callback) => { - callback(); - }; - } -}; diff --git a/lib/servers/WebsocketServer.js b/lib/servers/WebsocketServer.js index b9071f4bd3..cc3f7b635b 100644 --- a/lib/servers/WebsocketServer.js +++ b/lib/servers/WebsocketServer.js @@ -1,16 +1,14 @@ -"use strict"; +import { WebSocketServer as WsServer } from "ws"; +import BaseServer from "./BaseServer.js"; -const WebSocket = require("ws"); -const BaseServer = require("./BaseServer"); +/** @typedef {import("../Server.js").WebSocketServerConfiguration} WebSocketServerConfiguration */ +/** @typedef {import("../Server.js").ClientConnection} ClientConnection */ -/** @typedef {import("../Server").WebSocketServerConfiguration} WebSocketServerConfiguration */ -/** @typedef {import("../Server").ClientConnection} ClientConnection */ - -module.exports = class WebsocketServer extends BaseServer { +export default class WebsocketServer extends BaseServer { static heartbeatInterval = 1000; /** - * @param {import("../Server")} server server + * @param {import("../Server.js").default} server server */ constructor(server) { super(server); @@ -29,7 +27,7 @@ module.exports = class WebsocketServer extends BaseServer { options.noServer = true; } - this.implementation = new WebSocket.Server(options); + this.implementation = new WsServer(options); /** @type {import("http").Server} */ (this.server.server).on( @@ -108,4 +106,4 @@ module.exports = class WebsocketServer extends BaseServer { clearInterval(interval); }); } -}; +} diff --git a/lint-staged.config.js b/lint-staged.config.js index 2d40a32b75..50d30973d9 100644 --- a/lint-staged.config.js +++ b/lint-staged.config.js @@ -1,6 +1,4 @@ -"use strict"; - -module.exports = { +export default { "*": [ "prettier --cache --write --ignore-unknown", "cspell --cache --no-must-find-files", diff --git a/migration-v6.md b/migration-v6.md new file mode 100644 index 0000000000..5c768ab123 --- /dev/null +++ b/migration-v6.md @@ -0,0 +1,102 @@ +# Migration guide + +This document serves as a migration guide for `webpack-dev-server@6.0.0`. + +## ⚠ Breaking Changes + +- Minimum supported `Node.js` version is `20.9.0`. +- Minimum supported `webpack` version is `5.101.0`. +- Support for **SockJS** in the WebSocket transport has been removed. Now, only **native WebSocket** is supported, or **custom** client and server implementations can be used. +- The options for passing to the `proxy` have changed. Please refer to the [http-proxy-middleware migration guide](https://github.com/chimurai/http-proxy-middleware/blob/master/MIGRATION.md) for details. +- Remove support for the spdy server type. Use the http2 server type instead; however, since Express does not work correctly with it, a custom server (e.g., Connect or Hono) should be used. + + v4: + + ```js + module.exports = { + // ... + devServer: { + server: "spdy", + }, + }; + ``` + + v5: + + ```js + const connect = require("connect"); + + module.exports = { + // ... + devServer: { + server: { + server: "http2", + app: () => connect(), + }, + }, + }; + ``` + +- Now, webpack-dev-server adds WebSocket communication only when the `target` is set to a web-compatible environment. Previously, it also injected WebSocket communication if `resolve` contained a `conditionNames` entry with `browser` or if `externalsPresets.web` existed. + +- When retrieving the configuration in a multi-compiler setup, it will look for one that has a target compatible with a web environment. If it doesn’t find one, it will fall back to the first compiler found by webpack. + +## Deprecations + +- The static methods `internalIP` and `internalIPSync` were removed. Use `findIp` instead. + + v4: + + ```js + const ip = Server.internalIP("v4"); + ``` + + v5: + + ```js + const ip = Server.findIp("v4", true); + ``` + +- Support for webpack-dev-server using CLI flags has been removed. Please use the latest version of webpack-cli. +- The bypass function in the proxy configuration was removed. Use the `pathFilter` and `router` for similar functionality. See the example below. + + v4: + + ```js + module.exports = { + // ... + devServer: { + proxy: [ + { + context: "/api", + bypass(req, res, proxyOptions) { + if (req.url.startsWith("/api/special")) { + return "/special.html"; + } + }, + }, + ], + }, + }; + ``` + + v5: + + ```js + module.exports = { + // ... + devServer: { + proxy: [ + { + pathFilter: "/api/special", + router: () => "http://localhost:3000", // Original Server + pathRewrite: () => "/special.html", + }, + ], + }, + }; + ``` + + When `bypass` was used and that function returned a boolean, it would automatically result in a `404` request. This can’t be achieved in a similar way now, or, if it returned a string, you can do what was done in the example above. + + `bypass` also allowed sending data; this can no longer be done. If you really need to do it, you’d have to create a new route in the proxy that sends the same data, or alternatively create a new route on the main server and, following the example above, send the data you wanted. diff --git a/package-lock.json b/package-lock.json index 9680dbf5e1..232b1596ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,56 +11,52 @@ "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", - "@types/express": "^4.17.25", - "@types/express-serve-static-core": "^4.17.21", + "@types/express": "^5.0.6", + "@types/express-serve-static-core": "^5.1.1", "@types/serve-index": "^1.9.4", - "@types/serve-static": "^1.15.5", - "@types/sockjs": "^0.3.36", - "@types/ws": "^8.5.10", + "@types/serve-static": "^2.2.0", + "@types/ws": "^8.18.1", "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.2.1", - "chokidar": "^3.6.0", - "colorette": "^2.0.10", + "bonjour-service": "^1.3.0", + "chokidar": "^5.0.0", "compression": "^1.8.1", "connect-history-api-fallback": "^2.0.0", - "express": "^4.22.1", - "graceful-fs": "^4.2.6", - "http-proxy-middleware": "^2.0.9", - "ipaddr.js": "^2.1.0", - "launch-editor": "^2.6.1", - "open": "^10.0.3", - "p-retry": "^6.2.0", - "schema-utils": "^4.2.0", + "express": "^5.2.1", + "graceful-fs": "^4.2.11", + "http-proxy-middleware": "^3.0.5", + "ipaddr.js": "^2.3.0", + "launch-editor": "^2.13.2", + "open": "^11.0.0", + "p-retry": "^8.0.0", + "schema-utils": "^4.3.3", "selfsigned": "^5.5.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^7.4.2", - "ws": "^8.18.0" + "serve-index": "^1.9.2", + "tinyglobby": "^0.2.15", + "webpack-dev-middleware": "^8.0.3", + "ws": "^8.20.0" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" }, "devDependencies": { - "@babel/cli": "^7.25.9", - "@babel/core": "^7.25.9", - "@babel/eslint-parser": "^7.25.9", - "@babel/plugin-transform-object-assign": "^7.25.9", - "@babel/plugin-transform-runtime": "^7.25.9", - "@babel/preset-env": "^7.25.9", - "@babel/runtime": "^7.25.9", + "@babel/cli": "^7.28.6", + "@babel/core": "^7.29.0", + "@babel/eslint-parser": "^7.28.6", + "@babel/plugin-transform-object-assign": "^7.27.1", + "@babel/plugin-transform-runtime": "^7.29.0", + "@babel/preset-env": "^7.29.2", + "@babel/runtime": "^7.29.2", "@commitlint/cli": "^19.5.0", "@commitlint/config-conventional": "^19.5.0", "@eslint/markdown": "^7.0.0", - "@hono/node-server": "^1.13.3", + "@hono/node-server": "^1.19.12", "@types/compression": "^1.7.2", "@types/graceful-fs": "^4.1.9", "@types/node": "^24.0.14", "@types/node-forge": "^1.3.1", - "@types/sockjs-client": "^1.5.1", + "@types/picomatch": "^4.0.2", "@types/trusted-types": "^2.0.7", "acorn": "^8.14.0", - "babel-jest": "^30.0.4", "babel-loader": "^10.0.0", "connect": "^3.7.0", "core-js": "^3.38.1", @@ -68,18 +64,18 @@ "css-loader": "^7.1.1", "eslint": "^9.30.1", "eslint-config-prettier": "^10.1.5", - "eslint-config-webpack": "^4.4.0", + "eslint-config-webpack": "^4.9.6", "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jest": "^29.0.1", "eslint-plugin-jsdoc": "^51.3.4", "eslint-plugin-n": "^17.21.0", "execa": "^5.1.1", - "hono": "^4.6.8", + "expect": "^30.4.1", + "hono": "^4.12.9", "html-webpack-plugin": "^5.6.3", "http-proxy": "^1.18.1", "husky": "^9.1.6", - "jest": "^30.0.4", - "jest-environment-jsdom": "^29.7.0", + "jest-mock": "^30.4.1", + "jsdom": "^29.1.1", "klona": "^2.0.4", "less": "^4.1.1", "less-loader": "^12.1.0", @@ -88,11 +84,11 @@ "memfs": "^4.14.0", "npm-run-all": "^4.1.5", "prettier": "^3.2.4", - "puppeteer": "^24.10.0", + "pretty-format": "^30.4.1", + "puppeteer": "^24.35.0", "readable-stream": "^4.5.2", "require-from-string": "^2.0.2", "rimraf": "^5.0.5", - "sockjs-client": "^1.6.1", "standard-version": "^9.3.0", "style-loader": "^4.0.0", "supertest": "^7.2.2", @@ -100,19 +96,19 @@ "typescript": "^5.7.2", "typescript-eslint": "^8.36.0", "wait-for-expect": "^3.0.2", - "webpack": "^5.94.0", - "webpack-cli": "^6.0.1", + "webpack": "^5.105.4", + "webpack-cli": "^7.0.2", "webpack-merge": "^6.0.1" }, "engines": { - "node": ">= 18.12.0" + "node": ">= 22.15.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^5.0.0" + "webpack": "^5.101.0" }, "peerDependenciesMeta": { "webpack": { @@ -123,10 +119,61 @@ } } }, + "node_modules/@asamuzakjp/css-color": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.11.tgz", + "integrity": "sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/generational-cache": "^1.0.1", + "@csstools/css-calc": "^3.2.0", + "@csstools/css-color-parser": "^4.1.0", + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-7.1.1.tgz", + "integrity": "sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/generational-cache": "^1.0.1", + "@asamuzakjp/nwsapi": "^2.3.9", + "bidi-js": "^1.0.3", + "css-tree": "^3.2.1", + "is-potential-custom-element-name": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/generational-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/generational-cache/-/generational-cache-1.0.1.tgz", + "integrity": "sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/nwsapi": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@babel/cli": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.28.3.tgz", - "integrity": "sha512-n1RU5vuCX0CsaqaXm9I0KUCNKNQMy5epmzl/xdSSm70bSqhg9GWhgeosypyQLc0bK24+Xpk1WGzZlI9pJtkZdg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.28.6.tgz", + "integrity": "sha512-6EUNcuBbNkj08Oj4gAZ+BUU8yLCgKzgVX4gaTh09Ya2C8ICM4P+G30g4m3akRxSYAp3A/gnWchrNst7px4/nUQ==", "dev": true, "license": "MIT", "dependencies": { @@ -153,14 +200,82 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/cli/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/@babel/cli/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@babel/cli/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@babel/cli/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -169,9 +284,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "dev": true, "license": "MIT", "engines": { @@ -179,22 +294,22 @@ } }, "node_modules/@babel/core": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -211,9 +326,9 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.5.tgz", - "integrity": "sha512-fcdRcWahONYo+JRnJg1/AekOacGvKx12Gu0qXJXFi2WBqQA1i7+O5PaxRB7kxE/Op94dExnCiiar6T09pvdHpA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.6.tgz", + "integrity": "sha512-QGmsKi2PBO/MHSQk+AAgA9R6OHQr+VqnniFE0eMWZcVcfBZoA2dKn2hUsl3Csg/Plt9opRUWdY7//VXsrIlEiA==", "dev": true, "license": "MIT", "dependencies": { @@ -230,14 +345,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -260,13 +375,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -277,18 +392,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz", - "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.28.3", + "@babel/traverse": "^7.28.6", "semver": "^6.3.1" }, "engines": { @@ -299,14 +414,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", - "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "regexpu-core": "^6.2.0", + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, "engines": { @@ -317,17 +432,17 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", - "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz", + "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "debug": "^4.4.1", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", "lodash.debounce": "^4.0.8", - "resolve": "^1.22.10" + "resolve": "^1.22.11" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -344,43 +459,43 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", - "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -403,9 +518,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", "dev": true, "license": "MIT", "engines": { @@ -431,15 +546,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", - "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -493,42 +608,42 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", - "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz", + "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.3", - "@babel/types": "^7.28.2" + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -605,14 +720,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", - "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz", + "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -634,65 +749,59 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz", + "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.28.6" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-syntax-import-assertions": { + "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", - "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "dev": true, "license": "MIT", "dependencies": { @@ -705,14 +814,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", - "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", + "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -721,36 +832,28 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", + "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-remap-async-to-generator": "^7.27.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-jsx": { + "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", - "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", "dev": true, "license": "MIT", "dependencies": { @@ -763,92 +866,103 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", + "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.28.6" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz", + "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", + "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.12.0" } }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", + "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", + "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/template": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -857,14 +971,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz", + "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -873,10 +988,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-typescript": { + "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", - "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", "dev": true, "license": "MIT", "dependencies": { @@ -889,15 +1004,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -906,10 +1021,10 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { + "node_modules/@babel/plugin-transform-dynamic-import": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", - "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", "dev": true, "license": "MIT", "dependencies": { @@ -922,16 +1037,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", - "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz", + "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.28.0" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -940,16 +1054,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", - "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz", + "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-remap-async-to-generator": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -958,10 +1070,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { + "node_modules/@babel/plugin-transform-export-namespace-from": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", - "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -974,14 +1086,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz", - "integrity": "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==", + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -990,15 +1103,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-class-properties": { + "node_modules/@babel/plugin-transform-function-name": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", - "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1007,236 +1121,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", - "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz", + "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.3", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", - "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-globals": "^7.28.0", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.28.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", - "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/template": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", - "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", - "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", - "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", - "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-explicit-resource-management": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", - "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz", - "integrity": "sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", - "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", - "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", - "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", - "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1262,13 +1154,13 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz", - "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", + "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1311,14 +1203,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", - "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1328,16 +1220,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", - "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz", + "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.5" + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -1364,14 +1256,14 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1397,13 +1289,13 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", - "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz", + "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1413,13 +1305,13 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", - "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", + "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1445,17 +1337,17 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", - "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", + "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.28.4" + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1482,13 +1374,13 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", - "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", + "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1498,13 +1390,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz", - "integrity": "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", + "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { @@ -1531,14 +1423,14 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", - "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", + "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1548,15 +1440,15 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", - "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", + "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1582,13 +1474,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", - "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", + "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1598,14 +1490,14 @@ } }, "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", - "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz", + "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1631,14 +1523,14 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz", - "integrity": "sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz", + "integrity": "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "babel-plugin-polyfill-corejs2": "^0.4.14", "babel-plugin-polyfill-corejs3": "^0.13.0", "babel-plugin-polyfill-regenerator": "^0.6.5", @@ -1668,13 +1560,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", - "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", + "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { @@ -1749,14 +1641,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", - "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz", + "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1783,14 +1675,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", - "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz", + "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1800,81 +1692,81 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.5.tgz", - "integrity": "sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.2.tgz", + "integrity": "sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/compat-data": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.27.1", - "@babel/plugin-syntax-import-attributes": "^7.27.1", + "@babel/plugin-syntax-import-assertions": "^7.28.6", + "@babel/plugin-syntax-import-attributes": "^7.28.6", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.28.0", - "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.29.0", + "@babel/plugin-transform-async-to-generator": "^7.28.6", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.28.5", - "@babel/plugin-transform-class-properties": "^7.27.1", - "@babel/plugin-transform-class-static-block": "^7.28.3", - "@babel/plugin-transform-classes": "^7.28.4", - "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.6", + "@babel/plugin-transform-class-properties": "^7.28.6", + "@babel/plugin-transform-class-static-block": "^7.28.6", + "@babel/plugin-transform-classes": "^7.28.6", + "@babel/plugin-transform-computed-properties": "^7.28.6", "@babel/plugin-transform-destructuring": "^7.28.5", - "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-dotall-regex": "^7.28.6", "@babel/plugin-transform-duplicate-keys": "^7.27.1", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-dynamic-import": "^7.27.1", - "@babel/plugin-transform-explicit-resource-management": "^7.28.0", - "@babel/plugin-transform-exponentiation-operator": "^7.28.5", + "@babel/plugin-transform-explicit-resource-management": "^7.28.6", + "@babel/plugin-transform-exponentiation-operator": "^7.28.6", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", "@babel/plugin-transform-function-name": "^7.27.1", - "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.28.6", "@babel/plugin-transform-literals": "^7.27.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.28.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-modules-systemjs": "^7.28.5", + "@babel/plugin-transform-modules-commonjs": "^7.28.6", + "@babel/plugin-transform-modules-systemjs": "^7.29.0", "@babel/plugin-transform-modules-umd": "^7.27.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-new-target": "^7.27.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", - "@babel/plugin-transform-numeric-separator": "^7.27.1", - "@babel/plugin-transform-object-rest-spread": "^7.28.4", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", + "@babel/plugin-transform-numeric-separator": "^7.28.6", + "@babel/plugin-transform-object-rest-spread": "^7.28.6", "@babel/plugin-transform-object-super": "^7.27.1", - "@babel/plugin-transform-optional-catch-binding": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.28.5", + "@babel/plugin-transform-optional-catch-binding": "^7.28.6", + "@babel/plugin-transform-optional-chaining": "^7.28.6", "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/plugin-transform-private-methods": "^7.27.1", - "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-private-methods": "^7.28.6", + "@babel/plugin-transform-private-property-in-object": "^7.28.6", "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.28.4", - "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.29.0", + "@babel/plugin-transform-regexp-modifiers": "^7.28.6", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", - "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-spread": "^7.28.6", "@babel/plugin-transform-sticky-regex": "^7.27.1", "@babel/plugin-transform-template-literals": "^7.27.1", "@babel/plugin-transform-typeof-symbol": "^7.27.1", "@babel/plugin-transform-unicode-escapes": "^7.27.1", - "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.28.6", "@babel/plugin-transform-unicode-regex": "^7.27.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.14", - "babel-plugin-polyfill-corejs3": "^0.13.0", - "babel-plugin-polyfill-regenerator": "^0.6.5", - "core-js-compat": "^3.43.0", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", "semver": "^6.3.1" }, "engines": { @@ -1884,6 +1776,20 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz", + "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.8", + "core-js-compat": "^3.48.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", @@ -1900,9 +1806,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", "dev": true, "license": "MIT", "engines": { @@ -1910,33 +1816,33 @@ } }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -1944,9 +1850,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "dev": true, "license": "MIT", "dependencies": { @@ -1957,12 +1863,18 @@ "node": ">=6.9.0" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "node_modules/@bramus/specificity": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", + "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0" + }, + "bin": { + "specificity": "bin/cli.js" + } }, "node_modules/@commitlint/cli": { "version": "19.8.1", @@ -2826,48 +2738,156 @@ "node": ">=18.0" } }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", - "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", + "node_modules/@csstools/color-helpers": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.0.2.tgz", + "integrity": "sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@csstools/css-calc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.2.0.tgz", + "integrity": "sha512-bR9e6o2BDB12jzN/gIbjHa5wLJ4UjD1CB9pM7ehlc0ddk6EBz+yYS1EV2MF55/HUxrHcB/hehAyt5vhsA3hx7w==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", "engines": { - "node": ">=14.17.0" + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" } }, - "node_modules/@emnapi/core": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", - "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", + "node_modules/@csstools/css-color-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.1.0.tgz", + "integrity": "sha512-U0KhLYmy2GVj6q4T3WaAe6NPuFYCPQoE3b0dRGxejWDgcPp8TP7S5rVdM5ZrFaqu4N67X8YaPBw14dQSYx3IyQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", - "optional": true, "dependencies": { - "@emnapi/wasi-threads": "1.1.0", - "tslib": "^2.4.0" + "@csstools/color-helpers": "^6.0.2", + "@csstools/css-calc": "^3.2.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" } }, - "node_modules/@emnapi/runtime": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", - "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", + "node_modules/@csstools/css-parser-algorithms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", + "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" + "peer": true, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^4.0.0" } }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", - "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.3.tgz", + "integrity": "sha512-SH60bMfrRCJF3morcdk57WklujF4Jr/EsQUzqkarfHXEFcAR1gg7fS/chAE922Sehgzc1/+Tz5H3Ypa1HiEKrg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peerDependencies": { + "css-tree": "^3.2.1" + }, + "peerDependenciesMeta": { + "css-tree": { + "optional": true + } + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", + "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" + "peer": true, + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-1.0.0.tgz", + "integrity": "sha512-dDlz3W405VMFO4w5kIP9DOmELBcvFQGmLoKSdIRstBDubKFYwaNHV1NnlzMCQpXQFGWVALmeMORAuiLx18AvZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17.0" } }, "node_modules/@es-joy/jsdoccomment": { @@ -2887,10 +2907,20 @@ "node": ">=20.11.0" } }, + "node_modules/@es-joy/resolve.exports": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@es-joy/resolve.exports/-/resolve.exports-1.2.0.tgz", + "integrity": "sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2920,9 +2950,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { @@ -2971,16 +3001,16 @@ } }, "node_modules/@eslint/core": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", - "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", "dev": true, "license": "Apache-2.0", "dependencies": { "@types/json-schema": "^7.0.15" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, "node_modules/@eslint/eslintrc": { @@ -3008,9 +3038,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", "dependencies": { @@ -3070,7 +3100,6 @@ "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -3140,23 +3169,41 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", - "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.1.tgz", + "integrity": "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.2", + "@eslint/core": "^1.1.1", "levn": "^0.4.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@exodus/bytes": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.0.tgz", + "integrity": "sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@noble/hashes": "^1.8.0 || ^2.0.0" + }, + "peerDependenciesMeta": { + "@noble/hashes": { + "optional": true + } } }, "node_modules/@hono/node-server": { - "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.6.tgz", - "integrity": "sha512-Shz/KjlIeAhfiuE93NDKVdZ7HdBVLQAfdbaXEaoAVO3ic9ibRSLGIQGkcBbFyuLr+7/1D5ZCINM8B+6IvXeMtw==", + "version": "1.19.12", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.12.tgz", + "integrity": "sha512-txsUW4SQ1iilgE0l9/e9VQWmELXifEFvmdA1j6WFh/aFPj99hIntrSsq/if0UWyGVkmrRPKA1wCeP+UCr1B9Uw==", "dev": true, "license": "MIT", "engines": { @@ -3302,5738 +3349,3206 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/@jest/get-type": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "devOptional": true, "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, "license": "MIT", "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "devOptional": true, "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "devOptional": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "devOptional": true, + "license": "MIT" }, - "node_modules/@jest/console": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.2.0.tgz", - "integrity": "sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==", - "dev": true, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "devOptional": true, "license": "MIT", "dependencies": { - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "jest-message-util": "30.2.0", - "jest-util": "30.2.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "node_modules/@jsonjoy.com/buffers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.0.0.tgz", + "integrity": "sha512-NDigYR3PHqCnQLXYyoLbnEdzMMvzeiCWo1KOut7Q0CoIqg9tUAPKJ1iq/2nFhc5kZtexzutNY0LFjdwWL3Dw3Q==", + "license": "Apache-2.0", "engines": { - "node": ">=10" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" + "type": "github", + "url": "https://github.com/sponsors/streamich" }, - "engines": { - "node": ">=7.0.0" + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/console/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "license": "Apache-2.0", "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.2.0.tgz", - "integrity": "sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "30.2.0", - "@jest/pattern": "30.0.1", - "@jest/reporters": "30.2.0", - "@jest/test-result": "30.2.0", - "@jest/transform": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "exit-x": "^0.2.2", - "graceful-fs": "^4.2.11", - "jest-changed-files": "30.2.0", - "jest-config": "30.2.0", - "jest-haste-map": "30.2.0", - "jest-message-util": "30.2.0", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.2.0", - "jest-resolve-dependencies": "30.2.0", - "jest-runner": "30.2.0", - "jest-runtime": "30.2.0", - "jest-snapshot": "30.2.0", - "jest-util": "30.2.0", - "jest-validate": "30.2.0", - "jest-watcher": "30.2.0", - "micromatch": "^4.0.8", - "pretty-format": "30.2.0", - "slash": "^3.0.0" + "node": ">=10.0" }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "tslib": "2" } }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-core": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.1.tgz", + "integrity": "sha512-YrEi/ZPmgc+GfdO0esBF04qv8boK9Dg9WpRQw/+vM8Qt3nnVIJWIa8HwZ/LXVZ0DB11XUROM8El/7yYTJX+WtA==", + "license": "Apache-2.0", "dependencies": { - "color-convert": "^2.0.1" + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "thingies": "^2.5.0" }, "engines": { - "node": ">=8" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-fsa": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.1.tgz", + "integrity": "sha512-ooEPvSW/HQDivPDPZMibHGKZf/QS4WRir1czGZmXmp3MsQqLECZEpN0JobrD8iV9BzsuwdIv+PxtWX9WpPLsIA==", + "license": "Apache-2.0", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "thingies": "^2.5.0" }, "engines": { - "node": ">=10" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-node": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.1.tgz", + "integrity": "sha512-3YaKhP8gXEKN+2O49GLNfNb5l2gbnCFHyAaybbA2JkkbQP3dpdef7WcUaHAulg/c5Dg4VncHsA3NWAUSZMR5KQ==", + "license": "Apache-2.0", "dependencies": { - "color-name": "~1.1.4" + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/fs-print": "4.57.1", + "@jsonjoy.com/fs-snapshot": "4.57.1", + "glob-to-regex.js": "^1.0.0", + "thingies": "^2.5.0" }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/core/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/diff-sequences": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", - "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-node-builtins": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.1.tgz", + "integrity": "sha512-XHkFKQ5GSH3uxm8c3ZYXVrexGdscpWKIcMWKFQpMpMJc8gA3AwOMBJXJlgpdJqmrhPyQXxaY9nbkNeYpacC0Og==", + "license": "Apache-2.0", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/environment": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.2.0.tgz", - "integrity": "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-node-to-fsa": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.1.tgz", + "integrity": "sha512-pqGHyWWzNck4jRfaGV39hkqpY5QjRUQ/nRbNT7FYbBa0xf4bDG+TE1Gt2KWZrSkrkZZDE3qZUjYMbjwSliX6pg==", + "license": "Apache-2.0", "dependencies": { - "@jest/fake-timers": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "jest-mock": "30.2.0" + "@jsonjoy.com/fs-fsa": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/expect": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.2.0.tgz", - "integrity": "sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-node-utils": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.1.tgz", + "integrity": "sha512-vp+7ZzIB8v43G+GLXTS4oDUSQmhAsRz532QmmWBbdYA20s465JvwhkSFvX9cVTqRRAQg+vZ7zWDaIEh0lFe2gw==", + "license": "Apache-2.0", "dependencies": { - "expect": "30.2.0", - "jest-snapshot": "30.2.0" + "@jsonjoy.com/fs-node-builtins": "4.57.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/expect-utils": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.2.0.tgz", - "integrity": "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-print": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.1.tgz", + "integrity": "sha512-Ynct7ZJmfk6qoXDOKfpovNA36ITUx8rChLmRQtW08J73VOiuNsU8PB6d/Xs7fxJC2ohWR3a5AqyjmLojfrw5yw==", + "license": "Apache-2.0", "dependencies": { - "@jest/get-type": "30.1.0" + "@jsonjoy.com/fs-node-utils": "4.57.1", + "tree-dump": "^1.1.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/fake-timers": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.2.0.tgz", - "integrity": "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-snapshot": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.1.tgz", + "integrity": "sha512-/oG8xBNFMbDXTq9J7vepSA1kerS5vpgd3p5QZSPd+nX59uwodGJftI51gDYyHRpP57P3WCQf7LHtBYPqwUg2Bg==", + "license": "Apache-2.0", "dependencies": { - "@jest/types": "30.2.0", - "@sinonjs/fake-timers": "^13.0.0", - "@types/node": "*", - "jest-message-util": "30.2.0", - "jest-mock": "30.2.0", - "jest-util": "30.2.0" + "@jsonjoy.com/buffers": "^17.65.0", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/json-pack": "^17.65.0", + "@jsonjoy.com/util": "^17.65.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/get-type": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", - "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", + "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", + "license": "Apache-2.0", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.2.0.tgz", - "integrity": "sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "30.2.0", - "@jest/expect": "30.2.0", - "@jest/types": "30.2.0", - "jest-mock": "30.2.0" + "node": ">=10.0" }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/pattern": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", - "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-regex-util": "30.0.1" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/reporters": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.2.0.tgz", - "integrity": "sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "30.2.0", - "@jest/test-result": "30.2.0", - "@jest/transform": "30.2.0", - "@jest/types": "30.2.0", - "@jridgewell/trace-mapping": "^0.3.25", - "@types/node": "*", - "chalk": "^4.1.2", - "collect-v8-coverage": "^1.0.2", - "exit-x": "^0.2.2", - "glob": "^10.3.10", - "graceful-fs": "^4.2.11", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^5.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "30.2.0", - "jest-util": "30.2.0", - "jest-worker": "30.2.0", - "slash": "^3.0.0", - "string-length": "^4.0.2", - "v8-to-istanbul": "^9.0.1" - }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/buffers": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", + "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", + "license": "Apache-2.0", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", + "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", + "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", + "license": "Apache-2.0", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jsonjoy.com/base64": "17.67.0", + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0", + "@jsonjoy.com/json-pointer": "17.67.0", + "@jsonjoy.com/util": "17.67.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" }, "engines": { - "node": ">=10" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" + "type": "github", + "url": "https://github.com/sponsors/streamich" }, - "engines": { - "node": ">=7.0.0" + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "dev": true, - "license": "ISC", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", + "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", + "license": "Apache-2.0", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "@jsonjoy.com/util": "17.67.0" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": ">=10.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/reporters/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", + "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", + "license": "Apache-2.0", "dependencies": { - "brace-expansion": "^2.0.1" + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/reporters/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/schemas": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", - "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" + "type": "github", + "url": "https://github.com/sponsors/streamich" }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/snapshot-utils": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz", - "integrity": "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.11.0.tgz", + "integrity": "sha512-nLqSTAYwpk+5ZQIoVp7pfd/oSKNWlEdvTq2LzVA4r2wtWZg6v+5u0VgBOaDJuUfNOuw/4Ysq6glN5QKSrOCgrA==", + "license": "Apache-2.0", "dependencies": { - "@jest/types": "30.2.0", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "natural-compare": "^1.4.0" + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.1", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/snapshot-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "license": "Apache-2.0", "dependencies": { - "color-convert": "^2.0.1" + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" }, "engines": { - "node": ">=8" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/snapshot-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "license": "Apache-2.0", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/snapshot-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" + "type": "github", + "url": "https://github.com/sponsors/streamich" }, - "engines": { - "node": ">=7.0.0" + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/snapshot-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "license": "MIT" }, - "node_modules/@jest/source-map": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", - "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", + "node_modules/@nicolo-ribaudo/chokidar-2": { + "version": "2.1.8-no-fsevents.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", + "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "callsites": "^3.1.0", - "graceful-fs": "^4.2.11" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "eslint-scope": "5.1.1" } }, - "node_modules/@jest/test-result": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.2.0.tgz", - "integrity": "sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==", + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/console": "30.2.0", - "@jest/types": "30.2.0", - "@types/istanbul-lib-coverage": "^2.0.6", - "collect-v8-coverage": "^1.0.2" - }, + "peer": true, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@jest/test-sequencer": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.2.0.tgz", - "integrity": "sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==", + "node_modules/@paralleldrive/cuid2": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz", + "integrity": "sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.2.0", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.2.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "@noble/hashes": "^1.1.5" } }, - "node_modules/@jest/test-sequencer/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "node_modules/@peculiar/asn1-cms": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.6.0.tgz", + "integrity": "sha512-2uZqP+ggSncESeUF/9Su8rWqGclEfEiz1SyU02WX5fUONFfkjzS2Z/F1Li0ofSmf4JqYXIOdCAZqIXAIBAT1OA==", "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "@peculiar/asn1-x509-attr": "^2.6.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@jest/transform": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.2.0.tgz", - "integrity": "sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==", - "dev": true, + "node_modules/@peculiar/asn1-csr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.6.0.tgz", + "integrity": "sha512-BeWIu5VpTIhfRysfEp73SGbwjjoLL/JWXhJ/9mo4vXnz3tRGm+NGm3KNcRzQ9VMVqwYS2RHlolz21svzRXIHPQ==", "license": "MIT", "dependencies": { - "@babel/core": "^7.27.4", - "@jest/types": "30.2.0", - "@jridgewell/trace-mapping": "^0.3.25", - "babel-plugin-istanbul": "^7.0.1", - "chalk": "^4.1.2", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.2.0", - "jest-regex-util": "30.0.1", - "jest-util": "30.2.0", - "micromatch": "^4.0.8", - "pirates": "^4.0.7", - "slash": "^3.0.0", - "write-file-atomic": "^5.0.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/transform/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz", - "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.5", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jsonjoy.com/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/buffers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.0.0.tgz", - "integrity": "sha512-NDigYR3PHqCnQLXYyoLbnEdzMMvzeiCWo1KOut7Q0CoIqg9tUAPKJ1iq/2nFhc5kZtexzutNY0LFjdwWL3Dw3Q==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/codegen": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", - "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/json-pack": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.11.0.tgz", - "integrity": "sha512-nLqSTAYwpk+5ZQIoVp7pfd/oSKNWlEdvTq2LzVA4r2wtWZg6v+5u0VgBOaDJuUfNOuw/4Ysq6glN5QKSrOCgrA==", - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/base64": "^1.1.2", - "@jsonjoy.com/buffers": "^1.0.0", - "@jsonjoy.com/codegen": "^1.0.0", - "@jsonjoy.com/json-pointer": "^1.0.1", - "@jsonjoy.com/util": "^1.9.0", - "hyperdyperid": "^1.2.0", - "thingies": "^2.5.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/json-pointer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", - "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/codegen": "^1.0.0", - "@jsonjoy.com/util": "^1.9.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/util": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", - "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/buffers": "^1.0.0", - "@jsonjoy.com/codegen": "^1.0.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "license": "MIT" - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", - "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.10.0" - } - }, - "node_modules/@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", - "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-scope": "5.1.1" - } - }, - "node_modules/@noble/hashes": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@paralleldrive/cuid2": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz", - "integrity": "sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "^1.1.5" - } - }, - "node_modules/@peculiar/asn1-cms": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.6.0.tgz", - "integrity": "sha512-2uZqP+ggSncESeUF/9Su8rWqGclEfEiz1SyU02WX5fUONFfkjzS2Z/F1Li0ofSmf4JqYXIOdCAZqIXAIBAT1OA==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.0", - "@peculiar/asn1-x509-attr": "^2.6.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-csr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.6.0.tgz", - "integrity": "sha512-BeWIu5VpTIhfRysfEp73SGbwjjoLL/JWXhJ/9mo4vXnz3tRGm+NGm3KNcRzQ9VMVqwYS2RHlolz21svzRXIHPQ==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-ecc": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.6.0.tgz", - "integrity": "sha512-FF3LMGq6SfAOwUG2sKpPXblibn6XnEIKa+SryvUl5Pik+WR9rmRA3OCiwz8R3lVXnYnyRkSZsSLdml8H3UiOcw==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-pfx": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.6.0.tgz", - "integrity": "sha512-rtUvtf+tyKGgokHHmZzeUojRZJYPxoD/jaN1+VAB4kKR7tXrnDCA/RAWXAIhMJJC+7W27IIRGe9djvxKgsldCQ==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-cms": "^2.6.0", - "@peculiar/asn1-pkcs8": "^2.6.0", - "@peculiar/asn1-rsa": "^2.6.0", - "@peculiar/asn1-schema": "^2.6.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-pkcs8": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.0.tgz", - "integrity": "sha512-KyQ4D8G/NrS7Fw3XCJrngxmjwO/3htnA0lL9gDICvEQ+GJ+EPFqldcJQTwPIdvx98Tua+WjkdKHSC0/Km7T+lA==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-pkcs9": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.0.tgz", - "integrity": "sha512-b78OQ6OciW0aqZxdzliXGYHASeCvvw5caqidbpQRYW2mBtXIX2WhofNXTEe7NyxTb0P6J62kAAWLwn0HuMF1Fw==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-cms": "^2.6.0", - "@peculiar/asn1-pfx": "^2.6.0", - "@peculiar/asn1-pkcs8": "^2.6.0", - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.0", - "@peculiar/asn1-x509-attr": "^2.6.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-rsa": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.6.0.tgz", - "integrity": "sha512-Nu4C19tsrTsCp9fDrH+sdcOKoVfdfoQQ7S3VqjJU6vedR7tY3RLkQ5oguOIB3zFW33USDUuYZnPEQYySlgha4w==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-schema": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz", - "integrity": "sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==", - "license": "MIT", - "dependencies": { - "asn1js": "^3.0.6", - "pvtsutils": "^1.3.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-x509": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.6.0.tgz", - "integrity": "sha512-uzYbPEpoQiBoTq0/+jZtpM6Gq6zADBx+JNFP3yqRgziWBxQ/Dt/HcuvRfm9zJTPdRcBqPNdaRHTVwpyiq6iNMA==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "asn1js": "^3.0.6", - "pvtsutils": "^1.3.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-x509-attr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.0.tgz", - "integrity": "sha512-MuIAXFX3/dc8gmoZBkwJWxUWOSvG4MMDntXhrOZpJVMkYX+MYc/rUAU2uJOved9iJEoiUx7//3D8oG83a78UJA==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/x509": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.2.tgz", - "integrity": "sha512-r2w1Hg6pODDs0zfAKHkSS5HLkOLSeburtcgwvlLLWWCixw+MmW3U6kD5ddyvc2Y2YdbGuVwCF2S2ASoU1cFAag==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-cms": "^2.6.0", - "@peculiar/asn1-csr": "^2.6.0", - "@peculiar/asn1-ecc": "^2.6.0", - "@peculiar/asn1-pkcs9": "^2.6.0", - "@peculiar/asn1-rsa": "^2.6.0", - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.0", - "pvtsutils": "^1.3.6", - "reflect-metadata": "^0.2.2", - "tslib": "^2.8.1", - "tsyringe": "^4.10.0" - }, - "engines": { - "node": ">=22.0.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } - }, - "node_modules/@puppeteer/browsers": { - "version": "2.10.13", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.13.tgz", - "integrity": "sha512-a9Ruw3j3qlnB5a/zHRTkruppynxqaeE4H9WNj5eYGRWqw0ZauZ23f4W2ARf3hghF5doozyD+CRtt7XSYuYRI/Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "debug": "^4.4.3", - "extract-zip": "^2.0.1", - "progress": "^2.0.3", - "proxy-agent": "^6.5.0", - "semver": "^7.7.3", - "tar-fs": "^3.1.1", - "yargs": "^17.7.2" - }, - "bin": { - "browsers": "lib/cjs/main-cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@puppeteer/browsers/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinclair/typebox": { - "version": "0.34.41", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz", - "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "13.0.5", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", - "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1" - } - }, - "node_modules/@stylistic/eslint-plugin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.3.1.tgz", - "integrity": "sha512-Ykums1VYonM0TgkD0VteVq9mrlO2FhF48MDJnPyv3MktIB2ydtuhlO0AfWm7xnW1kyf5bjOqA6xc7JjviuVTxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/types": "^8.41.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "estraverse": "^5.3.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "peerDependencies": { - "eslint": ">=9.0.0" - } - }, - "node_modules/@stylistic/eslint-plugin/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tootallnate/quickjs-emscripten": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", - "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.2" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", - "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/compression": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@types/compression/-/compression-1.8.1.tgz", - "integrity": "sha512-kCFuWS0ebDbmxs0AXYn6e2r2nrGAb5KwQhknjSPSPgJcGd8+HVSILlUyFhGqML2gk39HcG7D1ydW9/qpYkN00Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/express": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "license": "MIT", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/conventional-commits-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz", - "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "devOptional": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "4.17.25", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", - "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "^1" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.19.7", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz", - "integrity": "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/http-errors": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", - "license": "MIT" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.16", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", - "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jsdom": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", - "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^7.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "license": "MIT" - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "24.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", - "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "undici-types": "~7.16.0" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.14", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", - "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "license": "MIT" - }, - "node_modules/@types/retry": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", - "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", - "license": "MIT", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", - "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "<1" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/sockjs-client": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/sockjs-client/-/sockjs-client-1.5.4.tgz", - "integrity": "sha512-zk+uFZeWyvJ5ZFkLIwoGA/DfJ+pYzcZ8eH4H/EILCm2OBZyHH6Hkdna1/UWL/CFruh5wj6ES7g75SvUB0VsH5w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.48.0.tgz", - "integrity": "sha512-XxXP5tL1txl13YFtrECECQYeZjBZad4fyd3cFV4a19LkAY/bIp9fev3US4S5fDVV2JaYFiKAZ/GRTOLer+mbyQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.48.0", - "@typescript-eslint/type-utils": "8.48.0", - "@typescript-eslint/utils": "8.48.0", - "@typescript-eslint/visitor-keys": "8.48.0", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.48.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.48.0.tgz", - "integrity": "sha512-jCzKdm/QK0Kg4V4IK/oMlRZlY+QOcdjv89U2NgKHZk1CYTj82/RVSx1mV/0gqCVMJ/DA+Zf/S4NBWNF8GQ+eqQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@typescript-eslint/scope-manager": "8.48.0", - "@typescript-eslint/types": "8.48.0", - "@typescript-eslint/typescript-estree": "8.48.0", - "@typescript-eslint/visitor-keys": "8.48.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.48.0.tgz", - "integrity": "sha512-Ne4CTZyRh1BecBf84siv42wv5vQvVmgtk8AuiEffKTUo3DrBaGYZueJSxxBZ8fjk/N3DrgChH4TOdIOwOwiqqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.48.0", - "@typescript-eslint/types": "^8.48.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.48.0.tgz", - "integrity": "sha512-uGSSsbrtJrLduti0Q1Q9+BF1/iFKaxGoQwjWOIVNJv0o6omrdyR8ct37m4xIl5Zzpkp69Kkmvom7QFTtue89YQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.48.0", - "@typescript-eslint/visitor-keys": "8.48.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.48.0.tgz", - "integrity": "sha512-WNebjBdFdyu10sR1M4OXTt2OkMd5KWIL+LLfeH9KhgP+jzfDV/LI3eXzwJ1s9+Yc0Kzo2fQCdY/OpdusCMmh6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.48.0.tgz", - "integrity": "sha512-zbeVaVqeXhhab6QNEKfK96Xyc7UQuoFWERhEnj3mLVnUWrQnv15cJNseUni7f3g557gm0e46LZ6IJ4NJVOgOpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.48.0", - "@typescript-eslint/typescript-estree": "8.48.0", - "@typescript-eslint/utils": "8.48.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.48.0.tgz", - "integrity": "sha512-cQMcGQQH7kwKoVswD1xdOytxQR60MWKM1di26xSUtxehaDs/32Zpqsu5WJlXTtTTqyAVK8R7hvsUnIXRS+bjvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.48.0.tgz", - "integrity": "sha512-ljHab1CSO4rGrQIAyizUS6UGHHCiAYhbfcIZ1zVJr5nMryxlXMVWS3duFPSKvSUbFPwkXMFk1k0EMIjub4sRRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.48.0", - "@typescript-eslint/tsconfig-utils": "8.48.0", - "@typescript-eslint/types": "8.48.0", - "@typescript-eslint/visitor-keys": "8.48.0", - "debug": "^4.3.4", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.48.0.tgz", - "integrity": "sha512-yTJO1XuGxCsSfIVt1+1UrLHtue8xz16V8apzPYI06W0HbEbEWHxHXgZaAgavIkoh+GeV6hKKd5jm0sS6OYxWXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.48.0", - "@typescript-eslint/types": "8.48.0", - "@typescript-eslint/typescript-estree": "8.48.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.48.0.tgz", - "integrity": "sha512-T0XJMaRPOH3+LBbAfzR2jalckP1MSG/L9eUtY0DEzUyVaXJ/t6zN0nR7co5kz0Jko/nkSYCBRkz1djvjajVTTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.48.0", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true, - "license": "ISC" - }, - "node_modules/@unrs/resolver-binding-android-arm-eabi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", - "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-android-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", - "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", - "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", - "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", - "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", - "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", - "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", - "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", - "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", - "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", - "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", - "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", - "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", - "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", - "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", - "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.11" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", - "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", - "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", - "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "devOptional": true, - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", - "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", - "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", - "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "devOptional": true, - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "devOptional": true, - "license": "Apache-2.0" - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "devOptional": true, - "license": "MIT", - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" - } - }, - "node_modules/acorn-import-phases": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", - "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "acorn": "^8.14.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/are-docs-informative": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", - "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true, - "license": "MIT" - }, - "node_modules/array-includes": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.0", - "es-object-atoms": "^1.1.1", - "get-intrinsic": "^1.3.0", - "is-string": "^1.1.1", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-timsort": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", - "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-shim-unscopables": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/asn1js": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.7.tgz", - "integrity": "sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==", - "license": "BSD-3-Clause", - "dependencies": { - "pvtsutils": "^1.3.6", - "pvutils": "^1.1.3", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "asn1js": "^3.0.6", "tslib": "^2.8.1" - }, - "engines": { - "node": ">=12.0.0" } }, - "node_modules/ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "dev": true, + "node_modules/@peculiar/asn1-ecc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.6.0.tgz", + "integrity": "sha512-FF3LMGq6SfAOwUG2sKpPXblibn6XnEIKa+SryvUl5Pik+WR9rmRA3OCiwz8R3lVXnYnyRkSZsSLdml8H3UiOcw==", "license": "MIT", "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, + "node_modules/@peculiar/asn1-pfx": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.6.0.tgz", + "integrity": "sha512-rtUvtf+tyKGgokHHmZzeUojRZJYPxoD/jaN1+VAB4kKR7tXrnDCA/RAWXAIhMJJC+7W27IIRGe9djvxKgsldCQ==", "license": "MIT", "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/b4a": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", - "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", - "dev": true, - "license": "Apache-2.0", - "peerDependencies": { - "react-native-b4a": "*" - }, - "peerDependenciesMeta": { - "react-native-b4a": { - "optional": true - } + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-pkcs8": "^2.6.0", + "@peculiar/asn1-rsa": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/babel-jest": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.2.0.tgz", - "integrity": "sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==", - "dev": true, + "node_modules/@peculiar/asn1-pkcs8": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.0.tgz", + "integrity": "sha512-KyQ4D8G/NrS7Fw3XCJrngxmjwO/3htnA0lL9gDICvEQ+GJ+EPFqldcJQTwPIdvx98Tua+WjkdKHSC0/Km7T+lA==", "license": "MIT", "dependencies": { - "@jest/transform": "30.2.0", - "@types/babel__core": "^7.20.5", - "babel-plugin-istanbul": "^7.0.1", - "babel-preset-jest": "30.2.0", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "slash": "^3.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0 || ^8.0.0-0" + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/@peculiar/asn1-pkcs9": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.0.tgz", + "integrity": "sha512-b78OQ6OciW0aqZxdzliXGYHASeCvvw5caqidbpQRYW2mBtXIX2WhofNXTEe7NyxTb0P6J62kAAWLwn0HuMF1Fw==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-pfx": "^2.6.0", + "@peculiar/asn1-pkcs8": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "@peculiar/asn1-x509-attr": "^2.6.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@peculiar/asn1-rsa": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.6.0.tgz", + "integrity": "sha512-Nu4C19tsrTsCp9fDrH+sdcOKoVfdfoQQ7S3VqjJU6vedR7tY3RLkQ5oguOIB3zFW33USDUuYZnPEQYySlgha4w==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/@peculiar/asn1-schema": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz", + "integrity": "sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-jest/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" } }, - "node_modules/babel-loader": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.0.0.tgz", - "integrity": "sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==", - "dev": true, + "node_modules/@peculiar/asn1-x509": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.6.0.tgz", + "integrity": "sha512-uzYbPEpoQiBoTq0/+jZtpM6Gq6zADBx+JNFP3yqRgziWBxQ/Dt/HcuvRfm9zJTPdRcBqPNdaRHTVwpyiq6iNMA==", "license": "MIT", "dependencies": { - "find-up": "^5.0.0" - }, - "engines": { - "node": "^18.20.0 || ^20.10.0 || >=22.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5.61.0" + "@peculiar/asn1-schema": "^2.6.0", + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" } }, - "node_modules/babel-loader/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, + "node_modules/@peculiar/asn1-x509-attr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.0.tgz", + "integrity": "sha512-MuIAXFX3/dc8gmoZBkwJWxUWOSvG4MMDntXhrOZpJVMkYX+MYc/rUAU2uJOved9iJEoiUx7//3D8oG83a78UJA==", "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/babel-loader/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, + "node_modules/@peculiar/x509": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.2.tgz", + "integrity": "sha512-r2w1Hg6pODDs0zfAKHkSS5HLkOLSeburtcgwvlLLWWCixw+MmW3U6kD5ddyvc2Y2YdbGuVwCF2S2ASoU1cFAag==", "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-csr": "^2.6.0", + "@peculiar/asn1-ecc": "^2.6.0", + "@peculiar/asn1-pkcs9": "^2.6.0", + "@peculiar/asn1-rsa": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "pvtsutils": "^1.3.6", + "reflect-metadata": "^0.2.2", + "tslib": "^2.8.1", + "tsyringe": "^4.10.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=22.0.0" } }, - "node_modules/babel-loader/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, + "optional": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14" } }, - "node_modules/babel-loader/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" } }, - "node_modules/babel-plugin-istanbul": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", - "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", + "node_modules/@puppeteer/browsers": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.11.1.tgz", + "integrity": "sha512-YmhAxs7XPuxN0j7LJloHpfD1ylhDuFmmwMvfy/+6nBSrETT2ycL53LrhgPtR+f+GcPSybQVuQ5inWWu5MrWCpA==", "dev": true, - "license": "BSD-3-Clause", - "workspaces": [ - "test/babel-8" - ], + "license": "Apache-2.0", "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-instrument": "^6.0.2", - "test-exclude": "^6.0.0" + "debug": "^4.4.3", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.7.3", + "tar-fs": "^3.1.1", + "yargs": "^17.7.2" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" }, "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.2.0.tgz", - "integrity": "sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==", + "node_modules/@puppeteer/browsers/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/babel__core": "^7.20.5" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10" } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", - "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.27.7", - "@babel/helper-define-polyfill-provider": "^0.6.5", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } + "license": "MIT" }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", - "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "node_modules/@sinclair/typebox": { + "version": "0.34.41", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz", + "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5", - "core-js-compat": "^3.43.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } + "license": "MIT" }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", - "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "node_modules/@sindresorhus/base62": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/base62/-/base62-1.0.0.tgz", + "integrity": "sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==", "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", - "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" + "engines": { + "node": ">=18" }, - "peerDependencies": { - "@babel/core": "^7.0.0 || ^8.0.0-0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-preset-jest": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.2.0.tgz", - "integrity": "sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==", + "node_modules/@stylistic/eslint-plugin": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.10.0.tgz", + "integrity": "sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==", "dev": true, "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "30.2.0", - "babel-preset-current-node-syntax": "^1.2.0" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/types": "^8.56.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "estraverse": "^5.3.0", + "picomatch": "^4.0.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "peerDependencies": { - "@babel/core": "^7.11.0 || ^8.0.0-beta.1" + "eslint": "^9.0.0 || ^10.0.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/bare-events": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", - "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", + "node_modules/@stylistic/eslint-plugin/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", - "peerDependencies": { - "bare-abort-controller": "*" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "peerDependenciesMeta": { - "bare-abort-controller": { - "optional": true - } + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/bare-fs": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.1.tgz", - "integrity": "sha512-zGUCsm3yv/ePt2PHNbVxjjn0nNB1MkIaR4wOCxJ2ig5pCf5cCVAYJXVhQg/3OhhJV6DB1ts7Hv0oUaElc2TPQg==", + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", "dev": true, - "license": "Apache-2.0", - "optional": true, + "license": "MIT" + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "license": "MIT", "dependencies": { - "bare-events": "^2.5.4", - "bare-path": "^3.0.0", - "bare-stream": "^2.6.4", - "bare-url": "^2.2.2", - "fast-fifo": "^1.3.2" - }, - "engines": { - "bare": ">=1.16.0" - }, - "peerDependencies": { - "bare-buffer": "*" - }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - } + "@types/connect": "*", + "@types/node": "*" } }, - "node_modules/bare-os": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", - "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "engines": { - "bare": ">=1.14.0" + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" } }, - "node_modules/bare-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", - "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "node_modules/@types/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@types/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-kCFuWS0ebDbmxs0AXYn6e2r2nrGAb5KwQhknjSPSPgJcGd8+HVSILlUyFhGqML2gk39HcG7D1ydW9/qpYkN00Q==", "dev": true, - "license": "Apache-2.0", - "optional": true, + "license": "MIT", "dependencies": { - "bare-os": "^3.0.1" + "@types/express": "*", + "@types/node": "*" } }, - "node_modules/bare-stream": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz", - "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "streamx": "^2.21.0" - }, - "peerDependencies": { - "bare-buffer": "*", - "bare-events": "*" - }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - }, - "bare-events": { - "optional": true - } + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" } }, - "node_modules/bare-url": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz", - "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==", + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/conventional-commits-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz", + "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==", "dev": true, - "license": "Apache-2.0", - "optional": true, + "license": "MIT", "dependencies": { - "bare-path": "^3.0.0" + "@types/node": "*" } }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } }, - "node_modules/baseline-browser-mapping": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.29.tgz", - "integrity": "sha512-sXdt2elaVnhpDNRDz+1BDx1JQoJRuNk7oVlAlbGiFkLikHCAQiccexF/9e91zVi6RCgqspl04aP+6Cnl9zRLrA==", + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "devOptional": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.js" + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" } }, - "node_modules/basic-ftp": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", - "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", - "dev": true, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "devOptional": true, "license": "MIT", - "engines": { - "node": ">=10.0.0" + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" } }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "devOptional": true, "license": "MIT" }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "node_modules/@types/express": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^2" } }, - "node_modules/body-parser": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", - "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "node_modules/@types/express-serve-static-core": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", "license": "MIT", "dependencies": { - "bytes": "~3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "~1.2.0", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "on-finished": "~2.4.1", - "qs": "~6.14.0", - "raw-body": "~2.5.3", - "type-is": "~1.6.18", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "@types/node": "*" } }, - "node_modules/body-parser/node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, "license": "MIT", "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "@types/unist": "*" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true, "license": "MIT" }, - "node_modules/body-parser/node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "license": "MIT" }, - "node_modules/bonjour-service": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", - "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "node_modules/@types/http-proxy": { + "version": "1.17.16", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", + "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" + "@types/node": "*" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, "license": "MIT", "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" + "@types/istanbul-lib-report": "*" } }, - "node_modules/browserslist": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", - "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", - "devOptional": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "baseline-browser-mapping": "^2.8.25", - "caniuse-lite": "^1.0.30001754", - "electron-to-chromium": "^1.5.249", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.1.4" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT" + }, + "node_modules/@types/katex": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.8.tgz", + "integrity": "sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", "dependencies": { - "node-int64": "^0.4.0" + "@types/unist": "*" } }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", + "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", "license": "MIT", + "peer": true, "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "undici-types": "~7.16.0" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "node_modules/@types/node-forge": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", "dev": true, "license": "MIT", - "engines": { - "node": "*" + "dependencies": { + "@types/node": "*" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "devOptional": true, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true, "license": "MIT" }, - "node_modules/builtin-modules": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-5.0.0.tgz", - "integrity": "sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==", + "node_modules/@types/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-qHHxQ+P9PysNEGbALT8f8YOSHW0KJu6l2xU8DYY0fu/EmGxXdVnuTLvFUvBgPJMSqXq29SYHveejeAha+4AYgA==", "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", "license": "MIT", - "engines": { - "node": ">=18.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" } }, - "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "license": "MIT", "dependencies": { - "run-applescript": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@types/express": "*" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/@types/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", "license": "MIT", - "engines": { - "node": ">= 0.8" + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*" } }, - "node_modules/bytestreamjs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", - "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=6.0.0" + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" } }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/yargs-parser": "*" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" + "@types/node": "*" } }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.3.tgz", + "integrity": "sha512-PwFvSKsXGShKGW6n5bZOhGHEcCZXM8HofLK9fNsEwZXzFRjoY+XT1Vsf1zgyXdwTr0ZYz1/2tkZ0DBTT9jZjhw==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.59.3", + "@typescript-eslint/type-utils": "8.59.3", + "@typescript-eslint/utils": "8.59.3", + "@typescript-eslint/visitor-keys": "8.59.3", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.59.3", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 4" } }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "node_modules/@typescript-eslint/parser": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.3.tgz", + "integrity": "sha512-HPwA+hVkfcriajbNvTmZv4VRauibay+cWArYUYq7u7W7PmGShMxbPxLvrwDme55a6d5alG3nrYfhyJ/G28XlLg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", + "@typescript-eslint/scope-manager": "8.59.3", + "@typescript-eslint/types": "8.59.3", + "@typescript-eslint/typescript-estree": "8.59.3", + "@typescript-eslint/visitor-keys": "8.59.3", + "debug": "^4.4.3" + }, "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.3.tgz", + "integrity": "sha512-ECiUWa/KYRGDFUqTNehaRgzDshnJfkTABJxVemHk4ko22gcr0ukloKjWvyQ64g8YCV/UI47kN1dbmjf/GaQYng==", "dev": true, "license": "MIT", "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" + "@typescript-eslint/tsconfig-utils": "^8.59.3", + "@typescript-eslint/types": "^8.59.3", + "debug": "^4.4.3" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001755", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001755.tgz", - "integrity": "sha512-44V+Jm6ctPj7R52Na4TLi3Zri4dWUljJd+RDm+j8LtNCc/ihLCT+X1TzoOAkRETEWqjuLnh9581Tl80FvK7jVA==", - "devOptional": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.3.tgz", + "integrity": "sha512-t2LvZnoEfzKtnPjgeEu41xw5gxq9mQVfYy4OoZ4Vlt0sk3JwxmhCca/AR7DwOiHrjWgjAj6as4AhRLKSDfvZIA==", "dev": true, "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.59.3", + "@typescript-eslint/visitor-keys": "8.59.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.3.tgz", + "integrity": "sha512-PcIJHjmaREXLgIAIzLnSY9VucEzz8FKXsRgFa1DmdGCK/5tJpW03TKJF01Q6VZd1lLdz2sIKPWaDUZN9dp//dw==", "dev": true, "license": "MIT", "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/chalk-template": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.2.tgz", - "integrity": "sha512-2bxTP2yUH7AJj/VAXfcA+4IcWGdQ87HwBANLt5XxGTeomo8yG0y95N1um9i5StvhT/Bl0/2cARA5v1PpPXUxUA==", + "node_modules/@typescript-eslint/type-utils": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.3.tgz", + "integrity": "sha512-g71d8QD8UaiHGvrJwyIS1hCX5r63w6Jll+4VEYhEAHXTDIqX1JgxhTAbEHtKntL9kuc4jRo7/GWw5xfCepSccQ==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^5.2.0" + "@typescript-eslint/types": "8.59.3", + "@typescript-eslint/typescript-estree": "8.59.3", + "@typescript-eslint/utils": "8.59.3", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" }, "engines": { - "node": ">=14.16" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/chalk/chalk-template?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/change-case": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", - "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "node_modules/@typescript-eslint/types": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.3.tgz", + "integrity": "sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "dev": true, - "license": "MIT", + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.3.tgz", + "integrity": "sha512-CbRjVRAf7Lr9Kr8RopKcbY45p2VfmmHrm0ygOCYFi7oU8q19m0Fs/6iHS7kNOmwpp+ob07ZVcAqlxUod9lYdmg==", + "dev": true, "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "@typescript-eslint/project-service": "8.59.3", + "@typescript-eslint/tsconfig-utils": "8.59.3", + "@typescript-eslint/types": "8.59.3", + "@typescript-eslint/visitor-keys": "8.59.3", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" }, "engines": { - "node": ">= 8.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://paulmillr.com/funding/" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "devOptional": true, + "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=6.0" + "node": "18 || 20 || >=22" } }, - "node_modules/chromium-bidi": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-11.0.0.tgz", - "integrity": "sha512-cM3DI+OOb89T3wO8cpPSro80Q9eKYJ7hGVXoGS3GkDPxnYSqiv+6xwpIf6XERyJ9Tdsl09hmNmY94BkgZdVekw==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "mitt": "^3.0.1", - "zod": "^3.24.1" + "balanced-match": "^4.0.2" }, - "peerDependencies": { - "devtools-protocol": "*" + "engines": { + "node": "18 || 20 || >=22" } }, - "node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, "engines": { - "node": ">=8" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cjs-module-lexer": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.1.tgz", - "integrity": "sha512-+CmxIZ/L2vNcEfvNtLdU0ZQ6mbq3FZnwAP2PPTiKP+1QOoKwlKlPgb8UKV0Dds7QVaMnHm+FwSft2VB0s/SLjQ==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", "dev": true, - "license": "MIT" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "node_modules/@typescript-eslint/utils": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.3.tgz", + "integrity": "sha512-JAvT14goBzRzzzZyqq3P9BLArIxTtQURUtFgQ/V7FO+eU+Gg6ES+5ymOPP1wRxXcxAYeivCk4uS3jCKWI1K8Zg==", "dev": true, "license": "MIT", "dependencies": { - "source-map": "~0.6.0" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.59.3", + "@typescript-eslint/types": "8.59.3", + "@typescript-eslint/typescript-estree": "8.59.3" }, "engines": { - "node": ">= 10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/clean-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", - "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.3.tgz", + "integrity": "sha512-f1UQF7ggd42YiwI5wGrRaPsa+P0CINBlrkLPmGfpq/u/I/oVtecoEIfFR9ag/oa1sLOsRNZ6xehf6qMZhQGBDg==", "dev": true, "license": "MIT", "dependencies": { - "escape-string-regexp": "^1.0.5" + "@typescript-eslint/types": "8.59.3", + "eslint-visitor-keys": "^5.0.0" }, "engines": { - "node": ">=4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/clean-regexp/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "devOptional": true, "license": "MIT", - "engines": { - "node": ">=0.8.0" + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, - "node_modules/clear-module": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/clear-module/-/clear-module-4.1.2.tgz", - "integrity": "sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw==", - "dev": true, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "devOptional": true, "license": "MIT", "dependencies": { - "parent-module": "^2.0.0", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@xtuc/ieee754": "^1.2.0" } }, - "node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", - "dev": true, - "license": "MIT", + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "devOptional": true, + "license": "Apache-2.0", "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@xtuc/long": "4.2.2" } }, - "node_modules/cli-truncate": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", - "dev": true, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "devOptional": true, "license": "MIT", "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "devOptional": true, + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "devOptional": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "devOptional": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, - "node_modules/cliui/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "devOptional": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" } }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "devOptional": true, + "license": "BSD-3-Clause" }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "devOptional": true, + "license": "Apache-2.0" }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "node_modules/abort-controller": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "event-target-shim": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=6.5" } }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">= 0.6" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "devOptional": true, "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "peer": true, + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=6" + "node": ">=0.4.0" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "devOptional": true, "license": "MIT", "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", - "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", - "dev": true, - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "1.1.3" + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "node_modules/add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", "dev": true, "license": "MIT" }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, + "node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", + "peer": true, "dependencies": { - "delayed-stream": "~1.0.0" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, - "engines": { - "node": ">= 0.8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "license": "MIT", - "engines": { - "node": ">= 6" + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "node_modules/comment-json": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", - "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", - "dev": true, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "license": "MIT", "dependencies": { - "array-timsort": "^1.0.3", - "core-util-is": "^1.0.3", - "esprima": "^4.0.1", - "has-own-prop": "^2.0.0", - "repeat-string": "^1.6.1" + "fast-deep-equal": "^3.1.3" }, - "engines": { - "node": ">= 6" + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/comment-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", - "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 12.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "license": "MIT", "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "license": "MIT", + "license": "ISC", + "optional": true, "dependencies": { - "mime-db": ">= 1.43.0 < 2" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">= 0.6" + "node": ">= 8" } }, - "node_modules/compression": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", - "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.1.0", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" + "optional": true, + "engines": { + "node": ">=8.6" }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">=14" } }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", "dev": true, "license": "MIT" }, - "node_modules/concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, - "engines": [ - "node >= 6.0" - ], "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, "license": "MIT", "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, "engines": { - "node": ">=0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, - "license": "MIT" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "license": "MIT", "dependencies": { - "safe-buffer": "5.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" } }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/conventional-changelog": { - "version": "3.1.25", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz", - "integrity": "sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==", + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, "license": "MIT", - "dependencies": { - "conventional-changelog-angular": "^5.0.12", - "conventional-changelog-atom": "^2.0.8", - "conventional-changelog-codemirror": "^2.0.8", - "conventional-changelog-conventionalcommits": "^4.5.0", - "conventional-changelog-core": "^4.2.1", - "conventional-changelog-ember": "^2.0.9", - "conventional-changelog-eslint": "^3.0.9", - "conventional-changelog-express": "^2.0.6", - "conventional-changelog-jquery": "^3.0.11", - "conventional-changelog-jshint": "^2.0.9", - "conventional-changelog-preset-loader": "^2.3.4" - }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/conventional-changelog-angular": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", - "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/asn1js": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.7.tgz", + "integrity": "sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==", + "license": "BSD-3-Clause", "dependencies": { - "compare-func": "^2.0.0" + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" }, "engines": { - "node": ">=16" + "node": ">=12.0.0" } }, - "node_modules/conventional-changelog-atom": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", - "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "q": "^1.5.1" + "tslib": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/conventional-changelog-codemirror": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", - "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, - "license": "ISC", - "dependencies": { - "q": "^1.5.1" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/conventional-changelog-config-spec": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz", - "integrity": "sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==", + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true, "license": "MIT" }, - "node_modules/conventional-changelog-conventionalcommits": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", - "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "compare-func": "^2.0.0" + "possible-typed-array-names": "^1.0.0" }, "engines": { - "node": ">=16" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/conventional-changelog-core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", - "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", + "node_modules/b4a": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", + "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", "dev": true, - "license": "MIT", - "dependencies": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-parser": "^3.2.0", - "dateformat": "^3.0.0", - "get-pkg-repo": "^4.0.0", - "git-raw-commits": "^2.0.8", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^4.1.1", - "lodash": "^4.17.15", - "normalize-package-data": "^3.0.0", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^4.0.0" + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } } }, - "node_modules/conventional-changelog-core/node_modules/conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "node_modules/babel-loader": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.0.0.tgz", + "integrity": "sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==", "dev": true, "license": "MIT", "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.js" + "find-up": "^5.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-core/node_modules/dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node": "^18.20.0 || ^20.10.0 || >=22.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5.61.0" } }, - "node_modules/conventional-changelog-core/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/babel-loader/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-core/node_modules/git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "node_modules/babel-loader/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.js" + "p-locate": "^5.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/babel-loader/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "p-limit": "^3.0.2" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-core/node_modules/is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "node_modules/babel-loader/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", - "dependencies": { - "text-extensions": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/conventional-changelog-core/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", + "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.8", + "semver": "^6.3.1" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/conventional-changelog-core/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/conventional-changelog-core/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz", + "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==", "dev": true, "license": "MIT", "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" + "@babel/helper-define-polyfill-provider": "^0.6.8" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/conventional-changelog-core/node_modules/meow/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/bare-events": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" }, - "engines": { - "node": ">=8" + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } } }, - "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "node_modules/bare-fs": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.2.tgz", + "integrity": "sha512-veTnRzkb6aPHOvSKIOy60KzURfBdUflr5VReI+NSaPL6xf+XLdONQgZgpYvUuZLVQ8dCqxpBAudaOM1+KpAUxw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" }, "engines": { - "node": ">=8" + "bare": ">=1.16.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } } }, - "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/bare-os": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", + "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "Apache-2.0", + "optional": true, "engines": { - "node": ">=8" + "bare": ">=1.14.0" } }, - "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz", + "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "streamx": "^2.21.0" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/bare-url": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz", + "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==", "dev": true, - "license": "BSD-2-Clause", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "bare-path": "^3.0.0" } }, - "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.16", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.16.tgz", + "integrity": "sha512-KeUZdBuxngy825i8xvzaK1Ncnkx0tBmb3k8DkEuqjKRkmtvNTjey2ZsNeh8Dw4lfKvbCOu9oeNx2TKm2vHqcRw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" } }, - "node_modules/conventional-changelog-core/node_modules/meow/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/basic-ftp": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.1.0.tgz", + "integrity": "sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "license": "MIT", + "engines": { + "node": ">=10.0.0" } }, - "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "license": "MIT" + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" + "require-from-string": "^2.0.2" } }, - "node_modules/conventional-changelog-core/node_modules/p-limit": { + "node_modules/binary-extensions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, + "optional": true, "engines": { - "node": ">=6" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-core/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-changelog-core/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/conventional-changelog-core/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" } }, - "node_modules/conventional-changelog-core/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "license": "ISC" }, - "node_modules/conventional-changelog-core/node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "readable-stream": "^3.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/conventional-changelog-core/node_modules/text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, "engines": { - "node": ">=0.10" + "node": ">=8" } }, - "node_modules/conventional-changelog-core/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "devOptional": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-changelog-core/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/conventional-changelog-core/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", "engines": { - "node": ">=10" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/conventional-changelog-ember": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", - "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, - "license": "ISC", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", "dependencies": { - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/conventional-changelog-eslint": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", - "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, - "license": "ISC", - "dependencies": { - "q": "^1.5.1" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": "*" } }, - "node_modules/conventional-changelog-express": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", - "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-5.2.0.tgz", + "integrity": "sha512-02yxLeyxF4dNl6SlY6/5HfRSrSdZ/sCPoxy2kZNP5dZZX8LSAD9aE2gtJIUgWrsQTiMPl3mxESyrobSwvRGisQ==", "dev": true, - "license": "ISC", - "dependencies": { - "q": "^1.5.1" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-jquery": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", - "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", - "dev": true, - "license": "ISC", + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", "dependencies": { - "q": "^1.5.1" + "run-applescript": "^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-jshint": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", - "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", - "dev": true, - "license": "ISC", - "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.8" } }, - "node_modules/conventional-changelog-preset-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", - "dev": true, - "license": "MIT", + "node_modules/bytestreamjs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", + "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==", + "license": "BSD-3-Clause", "engines": { - "node": ">=10" + "node": ">=6.0.0" } }, - "node_modules/conventional-changelog-writer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", - "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", "dev": true, "license": "MIT", "dependencies": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-changelog-writer": "cli.js" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/conventional-changelog-writer/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/conventional-changelog-writer/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "license": "ISC", + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/conventional-changelog-writer/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/conventional-changelog-writer/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" - }, + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/conventional-changelog-writer/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "license": "MIT", "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-writer/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } + "node_modules/caniuse-lite": { + "version": "1.0.30001766", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", + "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", + "devOptional": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" }, - "node_modules/conventional-changelog-writer/node_modules/normalize-package-data/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/conventional-changelog-writer/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, "engines": { - "node": ">=6" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/conventional-changelog-writer/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/chalk-template": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.2.tgz", + "integrity": "sha512-2bxTP2yUH7AJj/VAXfcA+4IcWGdQ87HwBANLt5XxGTeomo8yG0y95N1um9i5StvhT/Bl0/2cARA5v1PpPXUxUA==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "chalk": "^5.2.0" }, "engines": { - "node": ">=8" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/chalk/chalk-template?sponsor=1" } }, - "node_modules/conventional-changelog-writer/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "dev": true, "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", "license": "MIT", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "readdirp": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">= 20.19.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "devOptional": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6.0" } }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "license": "ISC" - }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/chromium-bidi": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-12.0.1.tgz", + "integrity": "sha512-fGg+6jr0xjQhzpy5N4ErZxQ4wF7KLEvhGZXD6EgvZKDhu7iOhZXnZhcDxPJDcwTcrD48NPzOCo84RP2lv3Z+Cg==", "dev": true, - "license": "BSD-2-Clause", + "license": "Apache-2.0", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "mitt": "^3.0.1", + "zod": "^3.24.1" + }, + "peerDependencies": { + "devtools-protocol": "*" } }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/conventional-changelog-writer/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 10.0" } }, - "node_modules/conventional-changelog-writer/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/clean-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", + "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/conventional-changelog-writer/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "node_modules/clean-regexp/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=0.8.0" } }, - "node_modules/conventional-changelog/node_modules/conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "node_modules/clear-module": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/clear-module/-/clear-module-4.1.2.tgz", + "integrity": "sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" + "parent-module": "^2.0.0", + "resolve-from": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog/node_modules/conventional-changelog-conventionalcommits": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", - "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "compare-func": "^2.0.0", - "lodash": "^4.17.15", - "q": "^1.5.1" + "restore-cursor": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, "license": "MIT", "dependencies": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-commits-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", - "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", - "dependencies": { - "is-text-path": "^2.0.0", - "JSONStream": "^1.3.5", - "meow": "^12.0.1", - "split2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.mjs" - }, "engines": { - "node": ">=16" + "node": ">=8" } }, - "node_modules/conventional-recommended-bump": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", - "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.3.4", - "conventional-commits-filter": "^2.0.7", - "conventional-commits-parser": "^3.2.0", - "git-raw-commits": "^2.0.8", - "git-semver-tags": "^4.1.1", - "meow": "^8.0.0", - "q": "^1.5.1" - }, - "bin": { - "conventional-recommended-bump": "cli.js" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/conventional-recommended-bump/node_modules/conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.js" + "color-name": "~1.1.4" }, "engines": { - "node": ">=10" + "node": ">=7.0.0" } }, - "node_modules/conventional-recommended-bump/node_modules/dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/conventional-recommended-bump/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/conventional-recommended-bump/node_modules/git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.js" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/conventional-recommended-bump/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/conventional-recommended-bump/node_modules/is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "license": "MIT", "dependencies": { - "text-extensions": "^1.0.0" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/conventional-recommended-bump/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" + "color-name": "1.1.3" } }, - "node_modules/conventional-recommended-bump/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "delayed-stream": "~1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.8" } }, - "node_modules/conventional-recommended-bump/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true, "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 6" } }, - "node_modules/conventional-recommended-bump/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "node_modules/comment-json": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", + "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.3", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" }, "engines": { - "node": ">=10" + "node": ">= 6" } }, - "node_modules/conventional-recommended-bump/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/comment-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", "dev": true, "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 12.0.0" } }, - "node_modules/conventional-recommended-bump/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" } }, - "node_modules/conventional-recommended-bump/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "license": "MIT", "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "mime-db": ">= 1.43.0 < 2" }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", "license": "MIT", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "license": "ISC" - }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "ms": "2.0.0" } }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } + "license": "MIT" }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" } }, - "node_modules/conventional-recommended-bump/node_modules/readable-stream": { + "node_modules/concat-stream/node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", @@ -9048,1515 +6563,1320 @@ "node": ">= 6" } }, - "node_modules/conventional-recommended-bump/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-recommended-bump/node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "license": "ISC", - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/conventional-recommended-bump/node_modules/text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/conventional-recommended-bump/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-recommended-bump/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/conventional-recommended-bump/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", "engines": { - "node": ">=10" + "node": ">= 0.10.0" } }, - "node_modules/convert-source-map": { + "node_modules/connect-history-api-fallback": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=0.8" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "dev": true, - "license": "MIT" - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" + "ms": "2.0.0" } }, - "node_modules/core-js": { - "version": "3.47.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz", - "integrity": "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==", + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", "license": "MIT", + "engines": { + "node": ">=18" + }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://opencollective.com/express" } }, - "node_modules/core-js-compat": { - "version": "3.45.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.1.tgz", - "integrity": "sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==", + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/conventional-changelog": { + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz", + "integrity": "sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.25.3" + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-atom": "^2.0.8", + "conventional-changelog-codemirror": "^2.0.8", + "conventional-changelog-conventionalcommits": "^4.5.0", + "conventional-changelog-core": "^4.2.1", + "conventional-changelog-ember": "^2.0.9", + "conventional-changelog-eslint": "^3.0.9", + "conventional-changelog-express": "^2.0.6", + "conventional-changelog-jquery": "^3.0.11", + "conventional-changelog-jshint": "^2.0.9", + "conventional-changelog-preset-loader": "^2.3.4" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "engines": { + "node": ">=10" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "node_modules/conventional-changelog-angular": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", + "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", "dev": true, - "license": "MIT", - "peer": true, + "license": "ISC", "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" + "compare-func": "^2.0.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=16" } }, - "node_modules/cosmiconfig-typescript-loader": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz", - "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==", + "node_modules/conventional-changelog-atom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", + "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "jiti": "^2.4.1" + "q": "^1.5.1" }, "engines": { - "node": ">=v18" + "node": ">=10" + } + }, + "node_modules/conventional-changelog-codemirror": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", + "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", + "dev": true, + "license": "ISC", + "dependencies": { + "q": "^1.5.1" }, - "peerDependencies": { - "@types/node": "*", - "cosmiconfig": ">=9", - "typescript": ">=5" + "engines": { + "node": ">=10" } }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/conventional-changelog-config-spec": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz", + "integrity": "sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==", "dev": true, - "license": "Python-2.0" + "license": "MIT" }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/conventional-changelog-conventionalcommits": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", + "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "argparse": "^2.0.1" + "compare-func": "^2.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=16" } }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/conventional-changelog-core": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", + "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": ">=10" } }, - "node_modules/cspell": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/cspell/-/cspell-8.19.4.tgz", - "integrity": "sha512-toaLrLj3usWY0Bvdi661zMmpKW2DVLAG3tcwkAv4JBTisdIRn15kN/qZDrhSieUEhVgJgZJDH4UKRiq29mIFxA==", + "node_modules/conventional-changelog-core/node_modules/conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-json-reporter": "8.19.4", - "@cspell/cspell-pipe": "8.19.4", - "@cspell/cspell-types": "8.19.4", - "@cspell/dynamic-import": "8.19.4", - "@cspell/url": "8.19.4", - "chalk": "^5.4.1", - "chalk-template": "^1.1.0", - "commander": "^13.1.0", - "cspell-dictionary": "8.19.4", - "cspell-gitignore": "8.19.4", - "cspell-glob": "8.19.4", - "cspell-io": "8.19.4", - "cspell-lib": "8.19.4", - "fast-json-stable-stringify": "^2.1.0", - "file-entry-cache": "^9.1.0", - "semver": "^7.7.1", - "tinyglobby": "^0.2.13" + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" }, "bin": { - "cspell": "bin.mjs", - "cspell-esm": "bin.mjs" + "conventional-commits-parser": "cli.js" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/streetsidesoftware/cspell?sponsor=1" + "node": ">=10" } }, - "node_modules/cspell-config-lib": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-8.19.4.tgz", - "integrity": "sha512-LtFNZEWVrnpjiTNgEDsVN05UqhhJ1iA0HnTv4jsascPehlaUYVoyucgNbFeRs6UMaClJnqR0qT9lnPX+KO1OLg==", + "node_modules/conventional-changelog-core/node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, "license": "MIT", - "dependencies": { - "@cspell/cspell-types": "8.19.4", - "comment-json": "^4.2.5", - "yaml": "^2.7.1" - }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/cspell-dictionary": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-8.19.4.tgz", - "integrity": "sha512-lr8uIm7Wub8ToRXO9f6f7in429P1Egm3I+Ps3ZGfWpwLTCUBnHvJdNF/kQqF7PL0Lw6acXcjVWFYT7l2Wdst2g==", + "node_modules/conventional-changelog-core/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "8.19.4", - "@cspell/cspell-types": "8.19.4", - "cspell-trie-lib": "8.19.4", - "fast-equals": "^5.2.2" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/cspell-gitignore": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-8.19.4.tgz", - "integrity": "sha512-KrViypPilNUHWZkMV0SM8P9EQVIyH8HvUqFscI7+cyzWnlglvzqDdV4N5f+Ax5mK+IqR6rTEX8JZbCwIWWV7og==", + "node_modules/conventional-changelog-core/node_modules/git-raw-commits": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "8.19.4", - "cspell-glob": "8.19.4", - "cspell-io": "8.19.4" + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" }, "bin": { - "cspell-gitignore": "bin.mjs" + "git-raw-commits": "cli.js" }, "engines": { - "node": ">=18" + "node": ">=10" } }, - "node_modules/cspell-glob": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-8.19.4.tgz", - "integrity": "sha512-042uDU+RjAz882w+DXKuYxI2rrgVPfRQDYvIQvUrY1hexH4sHbne78+OMlFjjzOCEAgyjnm1ktWUCCmh08pQUw==", + "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@cspell/url": "8.19.4", - "picomatch": "^4.0.2" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">=18" + "node": ">=10" } }, - "node_modules/cspell-grammar": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-8.19.4.tgz", - "integrity": "sha512-lzWgZYTu/L7DNOHjxuKf8H7DCXvraHMKxtFObf8bAzgT+aBmey5fW2LviXUkZ2Lb2R0qQY+TJ5VIGoEjNf55ow==", + "node_modules/conventional-changelog-core/node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "8.19.4", - "@cspell/cspell-types": "8.19.4" - }, - "bin": { - "cspell-grammar": "bin.mjs" + "text-extensions": "^1.0.0" }, "engines": { - "node": ">=18" + "node": ">=0.10.0" } }, - "node_modules/cspell-io": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-8.19.4.tgz", - "integrity": "sha512-W48egJqZ2saEhPWf5ftyighvm4mztxEOi45ILsKgFikXcWFs0H0/hLwqVFeDurgELSzprr12b6dXsr67dV8amg==", + "node_modules/conventional-changelog-core/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-service-bus": "8.19.4", - "@cspell/url": "8.19.4" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/cspell-lib": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-8.19.4.tgz", - "integrity": "sha512-NwfdCCYtIBNQuZcoMlMmL3HSv2olXNErMi/aOTI9BBAjvCHjhgX5hbHySMZ0NFNynnN+Mlbu5kooJ5asZeB3KA==", + "node_modules/conventional-changelog-core/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@cspell/cspell-bundled-dicts": "8.19.4", - "@cspell/cspell-pipe": "8.19.4", - "@cspell/cspell-resolver": "8.19.4", - "@cspell/cspell-types": "8.19.4", - "@cspell/dynamic-import": "8.19.4", - "@cspell/filetypes": "8.19.4", - "@cspell/strong-weak-map": "8.19.4", - "@cspell/url": "8.19.4", - "clear-module": "^4.1.2", - "comment-json": "^4.2.5", - "cspell-config-lib": "8.19.4", - "cspell-dictionary": "8.19.4", - "cspell-glob": "8.19.4", - "cspell-grammar": "8.19.4", - "cspell-io": "8.19.4", - "cspell-trie-lib": "8.19.4", - "env-paths": "^3.0.0", - "fast-equals": "^5.2.2", - "gensequence": "^7.0.0", - "import-fresh": "^3.3.1", - "resolve-from": "^5.0.0", - "vscode-languageserver-textdocument": "^1.0.12", - "vscode-uri": "^3.1.0", - "xdg-basedir": "^5.1.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=18" + "node": ">=10" } }, - "node_modules/cspell-lib/node_modules/env-paths": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", - "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "node_modules/conventional-changelog-core/node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cspell-trie-lib": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-8.19.4.tgz", - "integrity": "sha512-yIPlmGSP3tT3j8Nmu+7CNpkPh/gBO2ovdnqNmZV+LNtQmVxqFd2fH7XvR1TKjQyctSH1ip0P5uIdJmzY1uhaYg==", + "node_modules/conventional-changelog-core/node_modules/meow/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "8.19.4", - "@cspell/cspell-types": "8.19.4", - "gensequence": "^7.0.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/cspell/node_modules/commander": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "license": "MIT", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, "engines": { - "node": ">=18" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cspell/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/css-loader": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", - "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", + "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.27.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } + "node": ">=8" } }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/conventional-changelog-core/node_modules/meow/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "semver": "bin/semver" } }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", - "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", - "dev": true, - "license": "BSD-2-Clause", "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "node": ">=10" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "node_modules/conventional-changelog-core/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true, - "license": "MIT" - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "node_modules/conventional-changelog-core/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { - "cssom": "~0.3.6" + "p-limit": "^2.2.0" }, "engines": { "node": ">=8" } }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true, - "license": "MIT" - }, - "node_modules/dargs": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", - "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", + "node_modules/conventional-changelog-core/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/data-uri-to-buffer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", - "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "node_modules/conventional-changelog-core/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, "engines": { - "node": ">= 14" + "node": ">= 6" } }, - "node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "node_modules/conventional-changelog-core/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "node_modules/conventional-changelog-core/node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "readable-stream": "^3.0.0" } }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "node_modules/conventional-changelog-core/node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" + "node": ">=0.10" } }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "node_modules/conventional-changelog-core/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "node_modules/conventional-changelog-core/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/conventional-changelog-core/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", + "node_modules/conventional-changelog-ember": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", + "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", + "dev": true, + "license": "ISC", "dependencies": { - "ms": "^2.1.3" + "q": "^1.5.1" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=10" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "node_modules/conventional-changelog-eslint": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", + "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "q": "^1.5.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "node_modules/conventional-changelog-express": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", + "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" + "q": "^1.5.1" }, "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "node_modules/conventional-changelog-jquery": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", + "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "q": "^1.5.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/decimal.js": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "node_modules/conventional-changelog-jshint": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", + "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", "dev": true, - "license": "MIT" + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/decode-named-character-reference": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", - "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", + "node_modules/conventional-changelog-preset-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", "dev": true, "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=10" } }, - "node_modules/dedent": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz", - "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==", + "node_modules/conventional-changelog-writer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", + "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", "dev": true, "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" + "dependencies": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "node_modules/conventional-changelog-writer/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", - "license": "MIT", + "node_modules/conventional-changelog-writer/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/default-browser-id": { + "node_modules/conventional-changelog-writer/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "p-locate": "^4.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/conventional-changelog-writer/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "node_modules/conventional-changelog-writer/node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/degenerator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "node_modules/conventional-changelog-writer/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" }, "engines": { - "node": ">= 14" + "node": ">=10" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/conventional-changelog-writer/node_modules/normalize-package-data/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">= 0.8" + "node": ">=10" } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "node_modules/conventional-changelog-writer/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/conventional-changelog-writer/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=8" } }, - "node_modules/detect-indent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.1.tgz", - "integrity": "sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==", + "node_modules/conventional-changelog-writer/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { - "node": ">=12.20" + "node": ">=8" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "node_modules/conventional-changelog-writer/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, "engines": { "node": ">=8" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "license": "MIT" - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "node_modules/conventional-changelog-writer/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "license": "MIT", "dependencies": { - "dequal": "^2.0.0" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/devtools-protocol": { - "version": "0.0.1521046", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1521046.tgz", - "integrity": "sha512-vhE6eymDQSKWUXwwA37NtTTVEzjtGVfDr3pRbsWEQ5onH/Snp2c+2xZHWJJawG/0hCCJLRGt4xVtEVUVILol4w==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "node_modules/conventional-changelog-writer/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "license": "ISC", - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "license": "MIT", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "license": "Apache-2.0", + "license": "BSD-2-Clause", "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "MIT", - "dependencies": { - "utila": "~0.4" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" } }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "node_modules/conventional-changelog-writer/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, - "license": "BSD-2-Clause", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "node_modules/conventional-changelog-writer/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" + "license": "ISC" }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "deprecated": "Use your platform's native DOMException instead", + "node_modules/conventional-changelog-writer/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "license": "MIT", - "dependencies": { - "webidl-conversions": "^7.0.0" - }, + "license": "ISC", "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "node_modules/conventional-changelog/node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, - "license": "BSD-2-Clause", + "license": "ISC", "dependencies": { - "domelementtype": "^2.2.0" + "compare-func": "^2.0.0", + "q": "^1.5.1" }, "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "node": ">=10" } }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "node_modules/conventional-changelog/node_modules/conventional-changelog-conventionalcommits": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", + "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", "dev": true, - "license": "BSD-2-Clause", + "license": "ISC", "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "engines": { + "node": ">=10" } }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "node_modules/conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", "dev": true, "license": "MIT", "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "node_modules/conventional-commits-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", + "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", "dev": true, "license": "MIT", "dependencies": { - "is-obj": "^2.0.0" + "is-text-path": "^2.0.0", + "JSONStream": "^1.3.5", + "meow": "^12.0.1", + "split2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.mjs" }, "engines": { - "node": ">=8" + "node": ">=16" } }, - "node_modules/dotgitignore": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz", - "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==", + "node_modules/conventional-recommended-bump": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", + "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "find-up": "^3.0.0", - "minimatch": "^3.0.4" + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" + }, + "bin": { + "conventional-recommended-bump": "cli.js" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/dotgitignore/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "node_modules/conventional-recommended-bump/node_modules/conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^3.0.0" + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/dotgitignore/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "node_modules/conventional-recommended-bump/node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/dotgitignore/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/conventional-recommended-bump/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/dotgitignore/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "node_modules/conventional-recommended-bump/node_modules/git-raw-commits": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.0.0" + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/dotgitignore/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "node_modules/conventional-recommended-bump/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/dunder-proto": { + "node_modules/conventional-recommended-bump/node_modules/is-text-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" + "text-extensions": "^1.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.256", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.256.tgz", - "integrity": "sha512-uqYq1IQhpXXLX+HgiXdyOZml7spy4xfy42yPxcCCRjswp0fYM2X+JwCON07lqnpLEGVCj739B7Yr+FngmHBMEQ==", - "devOptional": true, - "license": "ISC" - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "node_modules/conventional-recommended-bump/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "p-locate": "^4.1.0" }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", - "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", - "dev": true, - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "node_modules/conventional-recommended-bump/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "once": "^1.4.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/enhanced-resolve": { - "version": "5.18.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", - "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", - "devOptional": true, + "node_modules/conventional-recommended-bump/node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "engines": { - "node": ">=10.13.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "node_modules/conventional-recommended-bump/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "engines": { + "node": ">=10" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "node_modules/conventional-recommended-bump/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/envinfo": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", - "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "node_modules/conventional-recommended-bump/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", - "bin": { - "envinfo": "dist/cli.js" + "dependencies": { + "p-limit": "^2.2.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "node_modules/conventional-recommended-bump/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "node_modules/conventional-recommended-bump/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "prr": "~1.0.1" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" + "engines": { + "node": ">=8" } }, - "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "node_modules/conventional-recommended-bump/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", + "node_modules/conventional-recommended-bump/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" + "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "devOptional": true, - "license": "MIT" + "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, + "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "node_modules/conventional-recommended-bump/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 6" } }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "node_modules/conventional-recommended-bump/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">= 0.4" + "node": ">=10" } }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "node_modules/conventional-recommended-bump/node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "readable-stream": "^3.0.0" } }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "devOptional": true, + "node_modules/conventional-recommended-bump/node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.10" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/conventional-recommended-bump/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, - "license": "MIT", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -10564,430 +7884,387 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "node_modules/conventional-recommended-bump/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, + "license": "ISC" + }, + "node_modules/conventional-recommended-bump/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" + "node": ">=10" } }, - "node_modules/eslint": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", - "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "license": "MIT", - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.1", - "@eslint/config-helpers": "^0.4.2", - "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.1", - "@eslint/plugin-kit": "^0.4.1", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" } }, - "node_modules/eslint-compat-utils": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", - "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", "dev": true, "license": "MIT", "dependencies": { - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12" + "is-what": "^3.14.1" }, - "peerDependencies": { - "eslint": ">=6.0.0" + "funding": { + "url": "https://github.com/sponsors/mesqueeb" } }, - "node_modules/eslint-compat-utils/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/core-js": { + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz", + "integrity": "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/eslint-config-prettier": { - "version": "10.1.8", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", - "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "node_modules/core-js-compat": { + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", + "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", "dev": true, "license": "MIT", - "peer": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" + "dependencies": { + "browserslist": "^4.28.1" }, "funding": { - "url": "https://opencollective.com/eslint-config-prettier" - }, - "peerDependencies": { - "eslint": ">=7.0.0" + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/eslint-config-webpack": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/eslint-config-webpack/-/eslint-config-webpack-4.6.3.tgz", - "integrity": "sha512-nKUWDmJ1SYwibd/zI5ntk6alKQ26e5ly0d5EQpDDRWtBJuBqvCyJtvphBtS0m58EsLLkQgCrSaWJVU4yGjSneg==", + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "detect-indent": "^7.0.1", - "jsonc-eslint-parser": "^2.4.0", - "semver": "^7.7.2", - "sort-package-json": "^3.4.0" + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" }, "engines": { - "node": ">= 20.9.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" }, "peerDependencies": { - "@eslint/js": ">= 9.28.0", - "@eslint/markdown": ">= 7.1.0", - "@stylistic/eslint-plugin": ">= 4.4.1", - "eslint": ">= 9.28.0", - "eslint-config-prettier": "^10.1.8", - "eslint-plugin-import": ">= 2.31.0", - "eslint-plugin-jest": ">= 28.12.0", - "eslint-plugin-jsdoc": ">= 50.7.1", - "eslint-plugin-n": ">= 17.19.0", - "eslint-plugin-prettier": ">= 5.5.3", - "eslint-plugin-react": ">= 7.37.5", - "eslint-plugin-unicorn": ">= 60.0.0", - "globals": ">= 16.2.0", - "prettier": ">= 3.5.3", - "typescript": ">= 5.0.0", - "typescript-eslint": ">= 8.34.0" + "typescript": ">=4.9.5" }, "peerDependenciesMeta": { - "@eslint/markdown": { - "optional": true - }, - "eslint-plugin-jest": { - "optional": true - }, - "eslint-plugin-jsdoc": { - "optional": true - }, - "eslint-plugin-n": { - "optional": true - }, - "eslint-plugin-react": { - "optional": true - }, "typescript": { "optional": true - }, - "typescript-eslint": { - "optional": true } } }, - "node_modules/eslint-config-webpack/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/cosmiconfig-typescript-loader": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz", + "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "jiti": "^2.4.1" }, "engines": { - "node": ">=10" + "node": ">=v18" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=9", + "typescript": ">=5" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } + "license": "Python-2.0" }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/eslint-module-utils": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", - "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^3.2.7" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "node": ">= 8" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/cspell": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell/-/cspell-8.19.4.tgz", + "integrity": "sha512-toaLrLj3usWY0Bvdi661zMmpKW2DVLAG3tcwkAv4JBTisdIRn15kN/qZDrhSieUEhVgJgZJDH4UKRiq29mIFxA==", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "@cspell/cspell-json-reporter": "8.19.4", + "@cspell/cspell-pipe": "8.19.4", + "@cspell/cspell-types": "8.19.4", + "@cspell/dynamic-import": "8.19.4", + "@cspell/url": "8.19.4", + "chalk": "^5.4.1", + "chalk-template": "^1.1.0", + "commander": "^13.1.0", + "cspell-dictionary": "8.19.4", + "cspell-gitignore": "8.19.4", + "cspell-glob": "8.19.4", + "cspell-io": "8.19.4", + "cspell-lib": "8.19.4", + "fast-json-stable-stringify": "^2.1.0", + "file-entry-cache": "^9.1.0", + "semver": "^7.7.1", + "tinyglobby": "^0.2.13" + }, + "bin": { + "cspell": "bin.mjs", + "cspell-esm": "bin.mjs" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/streetsidesoftware/cspell?sponsor=1" } }, - "node_modules/eslint-plugin-es-x": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", - "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", + "node_modules/cspell-config-lib": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-8.19.4.tgz", + "integrity": "sha512-LtFNZEWVrnpjiTNgEDsVN05UqhhJ1iA0HnTv4jsascPehlaUYVoyucgNbFeRs6UMaClJnqR0qT9lnPX+KO1OLg==", "dev": true, - "funding": [ - "https://github.com/sponsors/ota-meshi", - "https://opencollective.com/eslint" - ], "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.11.0", - "eslint-compat-utils": "^0.5.1" + "@cspell/cspell-types": "8.19.4", + "comment-json": "^4.2.5", + "yaml": "^2.7.1" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": ">=8" + "node": ">=18" } }, - "node_modules/eslint-plugin-import": { - "version": "2.32.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", - "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "node_modules/cspell-dictionary": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-8.19.4.tgz", + "integrity": "sha512-lr8uIm7Wub8ToRXO9f6f7in429P1Egm3I+Ps3ZGfWpwLTCUBnHvJdNF/kQqF7PL0Lw6acXcjVWFYT7l2Wdst2g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.9", - "array.prototype.findlastindex": "^1.2.6", - "array.prototype.flat": "^1.3.3", - "array.prototype.flatmap": "^1.3.3", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.1", - "hasown": "^2.0.2", - "is-core-module": "^2.16.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.1", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.9", - "tsconfig-paths": "^3.15.0" + "@cspell/cspell-pipe": "8.19.4", + "@cspell/cspell-types": "8.19.4", + "cspell-trie-lib": "8.19.4", + "fast-equals": "^5.2.2" }, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + "node": ">=18" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/cspell-gitignore": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-8.19.4.tgz", + "integrity": "sha512-KrViypPilNUHWZkMV0SM8P9EQVIyH8HvUqFscI7+cyzWnlglvzqDdV4N5f+Ax5mK+IqR6rTEX8JZbCwIWWV7og==", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "@cspell/url": "8.19.4", + "cspell-glob": "8.19.4", + "cspell-io": "8.19.4" + }, + "bin": { + "cspell-gitignore": "bin.mjs" + }, + "engines": { + "node": ">=18" } }, - "node_modules/eslint-plugin-jest": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.2.1.tgz", - "integrity": "sha512-0WLIezrIxitUGbjMIGwznVzSIp0uFJV0PZ2fiSvpyVcxe+QMXKUt7MRhUpzdbctnnLwiOTOFkACplgB0wAglFw==", + "node_modules/cspell-glob": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-8.19.4.tgz", + "integrity": "sha512-042uDU+RjAz882w+DXKuYxI2rrgVPfRQDYvIQvUrY1hexH4sHbne78+OMlFjjzOCEAgyjnm1ktWUCCmh08pQUw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@typescript-eslint/utils": "^8.0.0" + "@cspell/url": "8.19.4", + "picomatch": "^4.0.2" }, "engines": { - "node": "^20.12.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", - "jest": "*" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } + "node": ">=18" } }, - "node_modules/eslint-plugin-jsdoc": { - "version": "51.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-51.4.1.tgz", - "integrity": "sha512-y4CA9OkachG8v5nAtrwvcvjIbdcKgSyS6U//IfQr4FZFFyeBFwZFf/tfSsMr46mWDJgidZjBTqoCRlXywfFBMg==", + "node_modules/cspell-grammar": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-8.19.4.tgz", + "integrity": "sha512-lzWgZYTu/L7DNOHjxuKf8H7DCXvraHMKxtFObf8bAzgT+aBmey5fW2LviXUkZ2Lb2R0qQY+TJ5VIGoEjNf55ow==", "dev": true, - "license": "BSD-3-Clause", - "peer": true, + "license": "MIT", "dependencies": { - "@es-joy/jsdoccomment": "~0.52.0", - "are-docs-informative": "^0.0.2", - "comment-parser": "1.4.1", - "debug": "^4.4.1", - "escape-string-regexp": "^4.0.0", - "espree": "^10.4.0", - "esquery": "^1.6.0", - "parse-imports-exports": "^0.2.4", - "semver": "^7.7.2", - "spdx-expression-parse": "^4.0.0" + "@cspell/cspell-pipe": "8.19.4", + "@cspell/cspell-types": "8.19.4" }, - "engines": { - "node": ">=20.11.0" + "bin": { + "cspell-grammar": "bin.mjs" }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" + "engines": { + "node": ">=18" } }, - "node_modules/eslint-plugin-jsdoc/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/cspell-io": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-8.19.4.tgz", + "integrity": "sha512-W48egJqZ2saEhPWf5ftyighvm4mztxEOi45ILsKgFikXcWFs0H0/hLwqVFeDurgELSzprr12b6dXsr67dV8amg==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "@cspell/cspell-service-bus": "8.19.4", + "@cspell/url": "8.19.4" }, "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/eslint-plugin-n": { - "version": "17.23.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.23.1.tgz", - "integrity": "sha512-68PealUpYoHOBh332JLLD9Sj7OQUDkFpmcfqt8R9sySfFSeuGJjMTJQvCRRB96zO3A/PELRLkPrzsHmzEFQQ5A==", + "node_modules/cspell-lib": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-8.19.4.tgz", + "integrity": "sha512-NwfdCCYtIBNQuZcoMlMmL3HSv2olXNErMi/aOTI9BBAjvCHjhgX5hbHySMZ0NFNynnN+Mlbu5kooJ5asZeB3KA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.5.0", - "enhanced-resolve": "^5.17.1", - "eslint-plugin-es-x": "^7.8.0", - "get-tsconfig": "^4.8.1", - "globals": "^15.11.0", - "globrex": "^0.1.2", - "ignore": "^5.3.2", - "semver": "^7.6.3", - "ts-declaration-location": "^1.0.6" + "@cspell/cspell-bundled-dicts": "8.19.4", + "@cspell/cspell-pipe": "8.19.4", + "@cspell/cspell-resolver": "8.19.4", + "@cspell/cspell-types": "8.19.4", + "@cspell/dynamic-import": "8.19.4", + "@cspell/filetypes": "8.19.4", + "@cspell/strong-weak-map": "8.19.4", + "@cspell/url": "8.19.4", + "clear-module": "^4.1.2", + "comment-json": "^4.2.5", + "cspell-config-lib": "8.19.4", + "cspell-dictionary": "8.19.4", + "cspell-glob": "8.19.4", + "cspell-grammar": "8.19.4", + "cspell-io": "8.19.4", + "cspell-trie-lib": "8.19.4", + "env-paths": "^3.0.0", + "fast-equals": "^5.2.2", + "gensequence": "^7.0.0", + "import-fresh": "^3.3.1", + "resolve-from": "^5.0.0", + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-uri": "^3.1.0", + "xdg-basedir": "^5.1.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=18" + } + }, + "node_modules/cspell-lib/node_modules/env-paths": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cspell-trie-lib": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-8.19.4.tgz", + "integrity": "sha512-yIPlmGSP3tT3j8Nmu+7CNpkPh/gBO2ovdnqNmZV+LNtQmVxqFd2fH7XvR1TKjQyctSH1ip0P5uIdJmzY1uhaYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-pipe": "8.19.4", + "@cspell/cspell-types": "8.19.4", + "gensequence": "^7.0.0" }, - "peerDependencies": { - "eslint": ">=8.23.0" + "engines": { + "node": ">=18" } }, - "node_modules/eslint-plugin-n/node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "node_modules/cspell/node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", "dev": true, "license": "MIT", "engines": { "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-n/node_modules/semver": { + "node_modules/cspell/node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", @@ -11000,940 +8277,782 @@ "node": ">=10" } }, - "node_modules/eslint-plugin-prettier": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz", - "integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==", + "node_modules/css-loader": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.11.7" + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">= 18.12.0" }, "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", - "prettier": ">=3.0.0" + "@rspack/core": "0.x || 1.x", + "webpack": "^5.27.0" }, "peerDependenciesMeta": { - "@types/eslint": { + "@rspack/core": { "optional": true }, - "eslint-config-prettier": { + "webpack": { "optional": true } } }, - "node_modules/eslint-plugin-unicorn": { - "version": "61.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-61.0.2.tgz", - "integrity": "sha512-zLihukvneYT7f74GNbVJXfWIiNQmkc/a9vYBTE4qPkQZswolWNdu+Wsp9sIXno1JOzdn6OUwLPd19ekXVkahRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "@eslint-community/eslint-utils": "^4.7.0", - "@eslint/plugin-kit": "^0.3.3", - "change-case": "^5.4.4", - "ci-info": "^4.3.0", - "clean-regexp": "^1.0.0", - "core-js-compat": "^3.44.0", - "esquery": "^1.6.0", - "find-up-simple": "^1.0.1", - "globals": "^16.3.0", - "indent-string": "^5.0.0", - "is-builtin-module": "^5.0.0", - "jsesc": "^3.1.0", - "pluralize": "^8.0.0", - "regexp-tree": "^0.1.27", - "regjsparser": "^0.12.0", - "semver": "^7.7.2", - "strip-indent": "^4.0.0" - }, - "engines": { - "node": "^20.10.0 || >=21.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" - }, - "peerDependencies": { - "eslint": ">=9.29.0" - } - }, - "node_modules/eslint-plugin-unicorn/node_modules/semver": { + "node_modules/css-loader/node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "devOptional": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8.0.0" + "node": ">=10" } }, - "node_modules/eslint-scope/node_modules/estraverse": { + "node_modules/css-select": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "devOptional": true, + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, "engines": { - "node": ">=10" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, - "node_modules/eslint/node_modules/@eslint/core": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", - "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, + "license": "BSD-2-Clause", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/eslint/node_modules/@eslint/plugin-kit": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", - "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.17.0", - "levn": "^0.4.1" + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=4" } }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/dargs": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", + "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", "dev": true, "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "engines": { + "node": ">=12" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/data-urls": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", + "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" } }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": "*" } }, - "node_modules/eslint/node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { - "flat-cache": "^4.0.0" + "ms": "^2.1.3" }, "engines": { - "node": ">=16.0.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "license": "MIT", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" }, "engines": { - "node": ">=16" + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, + "license": "MIT", "engines": { - "node": ">=10.13.0" + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", "dev": true, "license": "MIT" }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/decode-named-character-reference": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" + "character-entities": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, + "license": "MIT" + }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=12" }, "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "estraverse": "^5.1.0" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "devOptional": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" + "node": ">= 0.4" }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "devOptional": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, "engines": { - "node": ">= 0.6" + "node": ">= 14" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.4.0" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "devOptional": true, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/events-universal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", - "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bare-events": "^2.7.0" + "node": ">= 0.8" } }, - "node_modules/eventsource": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", - "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, "license": "MIT", "engines": { - "node": ">=12.0.0" + "node": ">=6" } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/detect-indent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.2.tgz", + "integrity": "sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==", "dev": true, "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, "engines": { - "node": ">=10" + "node": ">=12.20" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit-x": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", - "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/expect": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz", - "integrity": "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==", + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/expect-utils": "30.2.0", - "@jest/get-type": "30.1.0", - "jest-matcher-utils": "30.2.0", - "jest-message-util": "30.2.0", - "jest-mock": "30.2.0", - "jest-util": "30.2.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=8" } }, - "node_modules/express": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", - "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", + "node_modules/devtools-protocol": { + "version": "0.0.1534754", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1534754.tgz", + "integrity": "sha512-26T91cV5dbOYnXdJi5qQHoTtUoNEqwkHcAyu/IKtjIAxiEqPMrDiRkDOPWVsGfNZGmlQVHQbZRSjD8sxagWVsQ==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "license": "ISC", "dependencies": { - "ms": "2.0.0" + "asap": "^2.0.0", + "wrappy": "1" } }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "@leichtgewicht/ip-codec": "^2.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">=6" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "BSD-2-Clause", + "license": "Apache-2.0", "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" + "esutils": "^2.0.2" }, "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" + "node": ">=0.10.0" } }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, "license": "MIT", "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "utila": "~0.4" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-equals": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz", - "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==", + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6.0.0" + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, - "license": "MIT" + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "funding": [ { "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" + "url": "https://github.com/sponsors/fb55" } ], - "license": "BSD-3-Clause" + "license": "BSD-2-Clause" }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, "engines": { - "node": ">= 4.9.1" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/fault": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "format": "^0.2.0" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "license": "Apache-2.0", + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "license": "MIT", "dependencies": { - "websocket-driver": ">=0.5.1" + "is-obj": "^2.0.0" }, "engines": { - "node": ">=0.8.0" + "node": ">=8" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "node_modules/dotgitignore": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz", + "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==", "dev": true, - "license": "Apache-2.0", + "license": "ISC", "dependencies": { - "bser": "2.1.1" + "find-up": "^3.0.0", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=6" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "node_modules/dotgitignore/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "license": "MIT", "dependencies": { - "pend": "~1.2.0" + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "node_modules/dotgitignore/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } + "engines": { + "node": ">=6" } }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/dotgitignore/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { - "escape-string-regexp": "^1.0.5" + "p-try": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/dotgitignore/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, "engines": { - "node": ">=0.8.0" + "node": ">=6" } }, - "node_modules/file-entry-cache": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz", - "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==", + "node_modules/dotgitignore/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, "license": "MIT", - "dependencies": { - "flat-cache": "^5.0.0" - }, "engines": { - "node": ">=18" + "node": ">=4" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.283", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.283.tgz", + "integrity": "sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", + "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, "engines": { "node": ">= 0.8" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "once": "^1.4.0" } }, - "node_modules/finalhandler/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, + "node_modules/enhanced-resolve": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", + "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", + "devOptional": true, "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=10.13.0" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, "engines": { - "node": ">= 0.8" + "node": ">=6" } }, - "node_modules/finalhandler/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "node_modules/envinfo": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", "dev": true, "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/find-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", - "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^7.2.0", - "path-exists": "^5.0.0", - "unicorn-magic": "^0.1.0" - }, "engines": { "node": ">=18" }, @@ -11941,954 +9060,1248 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-up-simple": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", - "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "optional": true, + "dependencies": { + "prr": "~1.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "errno": "cli.js" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/flat-cache": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", - "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", - "dev": true, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", - "dependencies": { - "flatted": "^3.3.1", - "keyv": "^4.5.4" - }, "engines": { - "node": ">=18" + "node": ">= 0.4" } }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "node": ">= 0.4" } }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "node_modules/es-iterator-helpers": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.2.tgz", + "integrity": "sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw==", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.2.7" + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.1.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.3.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.5", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", + "node_modules/es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" + "es-errors": "^1.3.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.4" } }, - "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" } }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, "engines": { - "node": ">=0.4.x" + "node": ">= 0.4" } }, - "node_modules/formidable": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", - "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { - "@paralleldrive/cuid2": "^2.2.2", - "dezalgo": "^1.0.4", - "once": "^1.4.0" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { - "node": ">=14.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "devOptional": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, - "license": "MIT" + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "node_modules/eslint": { + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", + "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.1", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "node_modules/eslint-compat-utils": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" + "semver": "^7.5.4" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "eslint": ">=6.0.0" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "node_modules/eslint-compat-utils/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/gensequence": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-7.0.0.tgz", - "integrity": "sha512-47Frx13aZh01afHJTB3zTtKIlFI6vWY+MYCN9Qpew6i52rfKjnhCF/l1YlC8UmEMvvntZZ6z4PiCcmyuedR2aQ==", + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "peer": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "node_modules/eslint-config-webpack": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/eslint-config-webpack/-/eslint-config-webpack-4.9.6.tgz", + "integrity": "sha512-4g1VqqOVgPrO/2bh17qNRKsQK26Aw1WF9mVTnvF+rNTDIUUTx+IaukXqXlumzwApQ1GfJlOsdLvT6WER1SPePg==", "dev": true, "license": "MIT", + "dependencies": { + "@eslint/js": "^9.39.2", + "@eslint/markdown": "^8.0.1", + "@stylistic/eslint-plugin": "^5.10.0", + "detect-indent": "^7.0.2", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jest": "^29.15.2", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-n": "^18.0.1", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-unicorn": "^64.0.0", + "globals": "^17.6.0", + "jsonc-eslint-parser": "^3.1.0", + "semver": "^7.8.0", + "sort-package-json": "^3.6.0", + "typescript-eslint": "^8.59.3" + }, "engines": { - "node": ">=6.9.0" + "node": ">= 20.9.0" + }, + "peerDependencies": { + "eslint": ">= 9.28.0", + "typescript": ">=4.8.4 <7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/eslint-config-webpack/node_modules/@es-joy/jsdoccomment": { + "version": "0.86.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.86.0.tgz", + "integrity": "sha512-ukZmRQ81WiTpDWO6D/cTBM7XbrNtutHKvAVnZN/8pldAwLoJArGOvkNyxPTBGsPjsoaQBJxlH+tE2TNA/92Qgw==", "dev": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.8", + "@typescript-eslint/types": "^8.58.0", + "comment-parser": "1.4.6", + "esquery": "^1.7.0", + "jsdoc-type-pratt-parser": "~7.2.0" + }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, - "node_modules/get-east-asian-width": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", - "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "node_modules/eslint-config-webpack/node_modules/@eslint/js": { + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", + "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://eslint.org/donate" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "node_modules/eslint-config-webpack/node_modules/@eslint/markdown": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@eslint/markdown/-/markdown-8.0.1.tgz", + "integrity": "sha512-WWKmld/EyNdEB8GMq7JMPX1SDWgyJAM1uhtCi5ySrqYQM4HQjmg11EX/q3ZpnpRXHfdccFtli3NBvvGaYjWyQw==", + "dev": true, "license": "MIT", + "workspaces": [ + "examples/*" + ], "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" + "@eslint/core": "^1.1.1", + "@eslint/plugin-kit": "^0.6.1", + "github-slugger": "^2.0.0", + "mdast-util-from-markdown": "^2.0.2", + "mdast-util-frontmatter": "^2.0.1", + "mdast-util-gfm": "^3.1.0", + "mdast-util-math": "^3.0.0", + "micromark-extension-frontmatter": "^2.0.0", + "micromark-extension-gfm": "^3.0.0", + "micromark-extension-math": "^3.1.0", + "micromark-util-normalize-identifier": "^2.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "node_modules/eslint-config-webpack/node_modules/comment-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.6.tgz", + "integrity": "sha512-ObxuY6vnbWTN6Od72xfwN9DbzC7Y2vv8u1Soi9ahRKL37gb6y1qk6/dgjs+3JWuXJHWvsg3BXIwzd/rkmAwavg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">= 12.0.0" } }, - "node_modules/get-pkg-repo": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", - "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", + "node_modules/eslint-config-webpack/node_modules/eslint-plugin-jsdoc": { + "version": "62.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-62.9.0.tgz", + "integrity": "sha512-PY7/X4jrVgoIDncUmITlUqK546Ltmx/Pd4Hdsu4CvSjryQZJI2mEV4vrdMufyTetMiZ5taNSqvK//BTgVUlNkA==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "@hutson/parse-repository-url": "^3.0.0", - "hosted-git-info": "^4.0.0", - "through2": "^2.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "get-pkg-repo": "src/cli.js" + "@es-joy/jsdoccomment": "~0.86.0", + "@es-joy/resolve.exports": "1.2.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.6", + "debug": "^4.4.3", + "escape-string-regexp": "^4.0.0", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "html-entities": "^2.6.0", + "object-deep-merge": "^2.0.0", + "parse-imports-exports": "^0.2.4", + "semver": "^7.7.4", + "spdx-expression-parse": "^4.0.0", + "to-valid-identifier": "^1.0.0" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-pkg-repo/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0" } }, - "node_modules/get-pkg-repo/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/eslint-config-webpack/node_modules/eslint-plugin-n": { + "version": "18.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-18.0.1.tgz", + "integrity": "sha512-q3ARhk+eZRc7myR0KHx+R3/GJeOHF+Ir6PK95Pu2tEX8Sl/4BIpmmVLva2kPrjC2gCmn6WHlHm+3yeo6Rxhycw==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@eslint-community/eslint-utils": "^4.5.0", + "enhanced-resolve": "^5.17.1", + "eslint-plugin-es-x": "^7.8.0", + "get-tsconfig": "^4.8.1", + "globals": "^15.11.0", + "globrex": "^0.1.2", + "ignore": "^5.3.2", + "semver": "^7.6.3" }, "engines": { - "node": ">=8" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/get-pkg-repo/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": ">=8.57.1", + "ts-declaration-location": "^1.0.6", + "typescript": ">=5.0.0" + }, + "peerDependenciesMeta": { + "ts-declaration-location": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "node_modules/get-pkg-repo/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/eslint-config-webpack/node_modules/eslint-plugin-n/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-pkg-repo/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/get-pkg-repo/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "node_modules/eslint-config-webpack/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, - "node_modules/get-pkg-repo/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/eslint-config-webpack/node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", "dev": true, - "license": "ISC", + "license": "BSD-2-Clause", "dependencies": { - "lru-cache": "^6.0.0" + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" }, "engines": { - "node": ">=10" + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/get-pkg-repo/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/eslint-config-webpack/node_modules/jsdoc-type-pratt-parser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-7.2.0.tgz", + "integrity": "sha512-dh140MMgjyg3JhJZY/+iEzW+NO5xR2gpbDFKHqotCmexElVntw7GjWjt511+C/Ef02RU5TKYrJo/Xlzk+OLaTw==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=20.0.0" } }, - "node_modules/get-pkg-repo/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/get-pkg-repo/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/eslint-config-webpack/node_modules/semver": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", "dev": true, "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, - "node_modules/get-pkg-repo/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "node_modules/get-pkg-repo/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } }, - "node_modules/get-pkg-repo/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/get-pkg-repo/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-es-x": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", + "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/ota-meshi", + "https://opencollective.com/eslint" + ], + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.11.0", + "eslint-compat-utils": "^0.5.1" }, "engines": { - "node": ">=8" + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": ">=8" } }, - "node_modules/get-pkg-repo/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" }, "engines": { - "node": ">=8" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, - "node_modules/get-pkg-repo/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "ms": "^2.1.1" } }, - "node_modules/get-pkg-repo/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/eslint-plugin-jest": { + "version": "29.15.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.15.2.tgz", + "integrity": "sha512-kEN4r9RZl1xcsb4arGq89LrcVdOUFII/JSCwtTPJyv16mDwmPrcuEQwpxqZHeINvcsd7oK5O/rhdGlxFRaZwvQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@typescript-eslint/utils": "^8.0.0" }, "engines": { - "node": ">=10" + "node": "^20.12.0 || ^22.0.0 || >=24.0.0" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^8.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "jest": "*", + "typescript": ">=4.8.4 <7.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "node_modules/get-pkg-repo/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/get-pkg-repo/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "node_modules/eslint-plugin-jsdoc": { + "version": "51.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-51.4.1.tgz", + "integrity": "sha512-y4CA9OkachG8v5nAtrwvcvjIbdcKgSyS6U//IfQr4FZFFyeBFwZFf/tfSsMr46mWDJgidZjBTqoCRlXywfFBMg==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "@es-joy/jsdoccomment": "~0.52.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.1", + "debug": "^4.4.1", + "escape-string-regexp": "^4.0.0", + "espree": "^10.4.0", + "esquery": "^1.6.0", + "parse-imports-exports": "^0.2.4", + "semver": "^7.7.2", + "spdx-expression-parse": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=20.11.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, - "node_modules/get-pkg-repo/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "node_modules/eslint-plugin-jsdoc/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { "node": ">=10" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "node_modules/eslint-plugin-n": { + "version": "17.23.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.23.1.tgz", + "integrity": "sha512-68PealUpYoHOBh332JLLD9Sj7OQUDkFpmcfqt8R9sySfFSeuGJjMTJQvCRRB96zO3A/PELRLkPrzsHmzEFQQ5A==", + "dev": true, "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" + "@eslint-community/eslint-utils": "^4.5.0", + "enhanced-resolve": "^5.17.1", + "eslint-plugin-es-x": "^7.8.0", + "get-tsconfig": "^4.8.1", + "globals": "^15.11.0", + "globrex": "^0.1.2", + "ignore": "^5.3.2", + "semver": "^7.6.3", + "ts-declaration-location": "^1.0.6" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": ">=8.23.0" } }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/eslint-plugin-n/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "node_modules/eslint-plugin-n/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/get-tsconfig": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", - "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", + "node_modules/eslint-plugin-prettier": { + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz", + "integrity": "sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==", "dev": true, "license": "MIT", "dependencies": { - "resolve-pkg-maps": "^1.0.0" + "prettier-linter-helpers": "^1.0.1", + "synckit": "^0.11.12" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/get-uri": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", - "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", "dev": true, "license": "MIT", "dependencies": { - "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4" + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" }, "engines": { - "node": ">= 14" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, - "node_modules/git-hooks-list": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.1.1.tgz", - "integrity": "sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==", + "node_modules/eslint-plugin-react-hooks": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/fisker/git-hooks-list?sponsor=1" + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" } }, - "node_modules/git-raw-commits": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", - "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.7.tgz", + "integrity": "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==", "dev": true, "license": "MIT", "dependencies": { - "dargs": "^8.0.0", - "meow": "^12.0.1", - "split2": "^4.0.0" + "es-errors": "^1.3.0", + "is-core-module": "^2.16.2", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { - "git-raw-commits": "cli.mjs" + "resolve": "bin/resolve" }, "engines": { - "node": ">=16" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", + "node_modules/eslint-plugin-unicorn": { + "version": "64.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-64.0.0.tgz", + "integrity": "sha512-rNZwalHh8i0UfPlhNwg5BTUO1CMdKNmjqe+TgzOTZnpKoi8VBgsW7u9qCHIdpxEzZ1uwrJrPF0uRb7l//K38gA==", "dev": true, "license": "MIT", "dependencies": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" + "@babel/helper-validator-identifier": "^7.28.5", + "@eslint-community/eslint-utils": "^4.9.1", + "change-case": "^5.4.4", + "ci-info": "^4.4.0", + "clean-regexp": "^1.0.0", + "core-js-compat": "^3.49.0", + "find-up-simple": "^1.0.1", + "globals": "^17.4.0", + "indent-string": "^5.0.0", + "is-builtin-module": "^5.0.0", + "jsesc": "^3.1.0", + "pluralize": "^8.0.0", + "regexp-tree": "^0.1.27", + "regjsparser": "^0.13.0", + "semver": "^7.7.4", + "strip-indent": "^4.1.1" }, "engines": { - "node": ">=4" + "node": "^20.10.0 || >=21.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" + }, + "peerDependencies": { + "eslint": ">=9.38.0" } }, - "node_modules/git-remote-origin-url/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "node_modules/eslint-plugin-unicorn/node_modules/regjsparser": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.1.tgz", + "integrity": "sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" } }, - "node_modules/git-semver-tags": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", - "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", + "node_modules/eslint-plugin-unicorn/node_modules/semver": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", "dev": true, - "license": "MIT", - "dependencies": { - "meow": "^8.0.0", - "semver": "^6.0.0" - }, + "license": "ISC", "bin": { - "git-semver-tags": "cli.js" + "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, - "node_modules/git-semver-tags/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "devOptional": true, + "license": "BSD-2-Clause", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/git-semver-tags/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "devOptional": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "Apache-2.0", "engines": { "node": ">=10" } }, - "node_modules/git-semver-tags/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/eslint/node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "p-locate": "^4.1.0" + "@types/json-schema": "^7.0.15" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/git-semver-tags/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/eslint/node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "yallist": "^4.0.0" + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/git-semver-tags/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "node_modules/eslint/node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/git-semver-tags/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" - } - }, - "node_modules/git-semver-tags/node_modules/normalize-package-data/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/git-semver-tags/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=7.0.0" } }, - "node_modules/git-semver-tags/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "p-limit": "^2.2.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/git-semver-tags/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/git-semver-tags/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/eslint/node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "flat-cache": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/git-semver-tags/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/git-semver-tags/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/eslint/node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, "engines": { - "node": ">=8" + "node": ">=16" } }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "license": "(MIT OR CC0-1.0)", + "p-locate": "^5.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/git-semver-tags/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { "node": ">=10" }, @@ -12896,927 +10309,1026 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/git-semver-tags/node_modules/yallist": { + "node_modules/eslint/node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/git-semver-tags/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, - "license": "BSD", + "license": "BSD-2-Clause", "dependencies": { - "ini": "^1.3.2" + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/gitconfiglocal/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, - "license": "ISC" + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, - "node_modules/github-slugger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "ISC" + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, - "license": "ISC", + "license": "BSD-3-Clause", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "estraverse": "^5.1.0" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=0.10" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "devOptional": true, + "license": "BSD-2-Clause", "dependencies": { - "is-glob": "^4.0.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 6" + "node": ">=4.0" } }, - "node_modules/glob-to-regex.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.0.1.tgz", - "integrity": "sha512-CG/iEvgQqfzoVsMUbxSJcwbG2JwyZ3naEqPkeltwl0BSS8Bp83k3xlGms+0QdWFUAwV+uvo80wNswKF6FWEkKg==", - "license": "Apache-2.0", + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "devOptional": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">=4.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "devOptional": true, - "license": "BSD-2-Clause" - }, - "node_modules/global-directory": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", - "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", - "dependencies": { - "ini": "4.1.1" - }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/globals": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", - "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "node_modules/expect": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.4.1.tgz", + "integrity": "sha512-PMARsyh/JtqC20HoGqlFcIlQAyqUtW4PlI1rup1uhYJtKuwAjbvWi3GQMAn+STdHum/dk8xrKfUM1+5SAwpolA==", "dev": true, - "license": "MIT" - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "@jest/expect-utils": "30.4.1", + "@jest/get-type": "30.1.0", + "jest-matcher-utils": "30.4.1", + "jest-message-util": "30.4.1", + "jest-mock": "30.4.1", + "jest-util": "30.4.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "node_modules/expect/node_modules/@jest/diff-sequences": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.4.0.tgz", + "integrity": "sha512-zOpzlfUs45l6u7jm39qr87JCHUDsaeCtvL+kQe/Vn9jSnRB4/5IPXISm0h9I1vZW/o00Kn4UTJ2MOlhnUGwv3g==", "dev": true, - "license": "MIT" - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "license": "MIT" + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "node_modules/expect/node_modules/@jest/expect-utils": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.4.1.tgz", + "integrity": "sha512-ZBn5CglH8fBsQsvs4VWNzD4aWfUYks+IdOOQU3MEK71ol/BcVm+P+rtb1KpiFBpSWSCE27uOahyyf1vfqOVbcQ==", "dev": true, "license": "MIT", "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" + "@jest/get-type": "30.1.0" }, "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "node_modules/expect/node_modules/@jest/pattern": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.4.0.tgz", + "integrity": "sha512-RAWn3+f9u8BsHijKJ71uHcFp6vmyEt6VvoWXkl6hKF3qVIuWNmudVjg12DlBPGup/frIl5UcUlH5HfEuvHpEXg==", "dev": true, "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-regex-util": "30.4.0" + }, "engines": { - "node": ">=6" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "node_modules/expect/node_modules/@jest/schemas": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.4.1.tgz", + "integrity": "sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "@sinclair/typebox": "^0.34.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, + "node_modules/expect/node_modules/@jest/types": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.4.1.tgz", + "integrity": "sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==", + "dev": true, "license": "MIT", + "dependencies": { + "@jest/pattern": "30.4.0", + "@jest/schemas": "30.4.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/has-own-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", - "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", + "node_modules/expect/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "node_modules/expect/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "node_modules/expect/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=7.0.0" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "node_modules/expect/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/expect/node_modules/jest-diff": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.4.1.tgz", + "integrity": "sha512-CRpFK0RtLriVDGcPPAnR6HMVI8bSR2jnUIgralhauzYQZIb4RH9AtEInTuQr65LmmGggGcRT6HIASxwqsVsmlA==", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "@jest/diff-sequences": "30.4.0", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.4.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/expect/node_modules/jest-matcher-utils": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.4.1.tgz", + "integrity": "sha512-zvYfX5CaeEkFrrLS9suWe9rvJrm9J1Iv3ua8kIBv9GEPzcnsfBf0bob37la7s67fs0nlBC3EuvkOLnXQKxtx4A==", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.3" + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "jest-diff": "30.4.1", + "pretty-format": "30.4.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/expect/node_modules/jest-message-util": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.4.1.tgz", + "integrity": "sha512-kwCKIvq0MCW1HzLoGola9Te6JUdzgV0loyKJ3Qghrkz9i5/RRIHsL95BMQc2HBBhlBKC4j22K9p11TGHH8RBpQ==", + "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.4.1", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-util": "30.4.1", + "picomatch": "^4.0.3", + "pretty-format": "30.4.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" }, "engines": { - "node": ">= 0.4" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "node_modules/expect/node_modules/jest-regex-util": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.4.0.tgz", + "integrity": "sha512-mWlvLviKIgIQ8VCuM1xRdD0TWp3zlzionlmDBjuXVBs+VkmXq6FgW9T4Emr7oGz/Rk6feDCGyiugolcQEyp3mg==", "dev": true, "license": "MIT", - "bin": { - "he": "bin/he" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/hono": { - "version": "4.10.7", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.10.7.tgz", - "integrity": "sha512-icXIITfw/07Q88nLSkB9aiUrd8rYzSweK681Kjo/TSggaGbOX4RRyxxm71v+3PC8C/j+4rlxGeoTRxQDkaJkUw==", + "node_modules/expect/node_modules/jest-util": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.4.1.tgz", + "integrity": "sha512-vjQb1sACEiv13DKJMDToJpzVW0joCsIQrmbg0fi7CyOOt+g9jTuQl2A216pWRBYhOVt53XbL/2LbMKg1BECWOw==", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.3" + }, "engines": { - "node": ">=16.9.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "node_modules/expect/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "license": "ISC" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/express/node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/express/node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dev": true, + "node_modules/express/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { - "whatwg-encoding": "^2.0.0" + "mime-db": "^1.54.0" }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" + "node_modules/express/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" }, "bin": { - "html-minifier-terser": "cli.js" + "extract-zip": "cli.js" }, "engines": { - "node": ">=12" + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" } }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-equals": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz", + "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 12" + "node": ">=6.0.0" } }, - "node_modules/html-webpack-plugin": { - "version": "5.6.5", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.5.tgz", - "integrity": "sha512-4xynFbKNNk+WlzXeQQ+6YYsH2g7mpfPszQZUi3ovKlj+pDmngQ7vRXjrrmGROabmKwyQkcgcX5hqfOwHbFmK5g==", + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.20.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } + "license": "MIT" }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", { "type": "github", - "url": "https://github.com/sponsors/fb55" + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" } ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } + "license": "BSD-3-Clause" }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, "engines": { - "node": ">= 0.8" + "node": ">= 4.9.1" } }, - "node_modules/http-parser-js": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", - "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "node_modules/fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", + "dev": true, "license": "MIT", "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "format": "^0.2.0" }, - "engines": { - "node": ">=8.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, "license": "MIT", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" + "pend": "~1.2.0" } }, - "node_modules/http-proxy-middleware": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", - "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, "engines": { "node": ">=12.0.0" }, "peerDependencies": { - "@types/express": "^4.17.13" + "picomatch": "^3 || ^4" }, "peerDependenciesMeta": { - "@types/express": { + "picomatch": { "optional": true } } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "6", - "debug": "4" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">= 6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "engines": { - "node": ">=10.17.0" + "node": ">=0.8.0" } }, - "node_modules/husky": { - "version": "9.1.7", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", - "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", + "node_modules/file-entry-cache": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz", + "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==", "dev": true, "license": "MIT", - "bin": { - "husky": "bin.js" + "dependencies": { + "flat-cache": "^5.0.0" }, "engines": { "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" } }, - "node_modules/hyperdyperid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", - "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, "engines": { - "node": ">=10.18" + "node": ">=8" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "license": "MIT", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "node_modules/finalhandler/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, "license": "MIT", "engines": { - "node": ">= 4" + "node": ">= 0.8" } }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dev": true, "license": "MIT", - "optional": true, - "bin": { - "image-size": "bin/image-size.js" + "dependencies": { + "ee-first": "1.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "node_modules/finalhandler/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/find-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", + "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", "dev": true, "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "locate-path": "^7.2.0", + "path-exists": "^5.0.0", + "unicorn-magic": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/node_modules/parent-module": { + "node_modules/find-up-simple": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", "dev": true, "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, "engines": { - "node": ">=6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" } }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "node_modules/flat-cache": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", + "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", "dev": true, "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "flatted": "^3.3.1", + "keyv": "^4.5.4" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/import-meta-resolve": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", - "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "license": "ISC" }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "license": "MIT", "engines": { - "node": ">=0.8.19" + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, "license": "ISC", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", - "side-channel": "^1.1.0" + "mime-types": "^2.1.12" }, "engines": { - "node": ">= 0.4" + "node": ">= 6" } }, - "node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", "dev": true, - "license": "MIT", "engines": { - "node": ">=10.13.0" + "node": ">=0.4.x" } }, - "node_modules/ip-address": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", - "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "node_modules/formidable": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", + "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", "dev": true, "license": "MIT", + "dependencies": { + "@paralleldrive/cuid2": "^2.2.2", + "dezalgo": "^1.0.4", + "once": "^1.4.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", "engines": { - "node": ">= 12" + "node": ">= 0.6" } }, - "node_modules/ip-regex": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "ISC" }, - "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 10" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { - "async-function": "^1.0.0", + "call-bind": "^1.0.8", "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -13825,106 +11337,75 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "node_modules/gensequence": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-7.0.0.tgz", + "integrity": "sha512-47Frx13aZh01afHJTB3zTtKIlFI6vWY+MYCN9Qpew6i52rfKjnhCF/l1YlC8UmEMvvntZZ6z4PiCcmyuedR2aQ==", "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=18" } }, - "node_modules/is-builtin-module": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-5.0.0.tgz", - "integrity": "sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "license": "MIT", - "dependencies": { - "builtin-modules": "^5.0.0" - }, "engines": { - "node": ">=18.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.9.0" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", "dev": true, "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -13933,311 +11414,295 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "node_modules/get-pkg-repo": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", + "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "license": "MIT", "bin": { - "is-docker": "cli.js" + "get-pkg-repo": "src/cli.js" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.9.0" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/get-pkg-repo/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "node_modules/get-pkg-repo/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "node_modules/get-pkg-repo/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "node_modules/get-pkg-repo/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=6" + "node": ">=7.0.0" } }, - "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "node_modules/get-pkg-repo/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/get-pkg-repo/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/get-pkg-repo/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/get-pkg-repo/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-inside-container": { + "node_modules/get-pkg-repo/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/get-pkg-repo/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" + "yallist": "^4.0.0" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "node_modules/get-pkg-repo/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "node_modules/get-pkg-repo/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-network-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", - "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/get-pkg-repo/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=0.12.0" + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "node_modules/get-pkg-repo/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "node_modules/get-pkg-repo/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { "node": ">=8" } }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "node_modules/get-pkg-repo/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/get-pkg-repo/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { - "isobject": "^3.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "node_modules/get-pkg-repo/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "node_modules/get-pkg-repo/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "node_modules/get-pkg-repo/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, + "node": ">=10" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -14246,195 +11711,199 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "node_modules/get-tsconfig": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", + "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" + "resolve-pkg-maps": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/is-text-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", - "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", + "node_modules/get-uri": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", "dev": true, "license": "MIT", "dependencies": { - "text-extensions": "^2.0.0" + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" }, "engines": { - "node": ">=8" + "node": ">= 14" } }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "node_modules/git-hooks-list": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.2.1.tgz", + "integrity": "sha512-WNvqJjOxxs/8ZP9+DWdwWJ7cDsd60NHf39XnD82pDVrKO5q7xfPqpkK6hwEAmBa/ZSEE4IOoR75EzbbIuwGlMw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/fisker/git-hooks-list?sponsor=1" + } + }, + "node_modules/git-raw-commits": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", + "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", "dev": true, "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.16" + "dargs": "^8.0.0", + "meow": "^12.0.1", + "split2": "^4.0.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "git-raw-commits": "cli.mjs" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=16" } }, - "node_modules/is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "node_modules/git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "node_modules/git-remote-origin-url/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "node_modules/git-semver-tags": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", + "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" + "meow": "^8.0.0", + "semver": "^6.0.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "git-semver-tags": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "node_modules/git-semver-tags/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "node_modules/git-semver-tags/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "license": "MIT" - }, - "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "license": "MIT", + "license": "ISC", "dependencies": { - "is-inside-container": "^1.0.0" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/is2": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz", - "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==", + "node_modules/git-semver-tags/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { - "deep-is": "^0.1.3", - "ip-regex": "^4.1.0", - "is-url": "^1.2.4" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=v0.10.0" + "node": ">=8" } }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "node_modules/git-semver-tags/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "node_modules/git-semver-tags/node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "node_modules/git-semver-tags/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "license": "BSD-3-Clause", + "license": "BSD-2-Clause", "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" }, "engines": { "node": ">=10" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { + "node_modules/git-semver-tags/node_modules/normalize-package-data/node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", @@ -14447,1774 +11916,1695 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "node_modules/git-semver-tags/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { - "semver": "^7.5.3" + "p-try": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "node_modules/git-semver-tags/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", - "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "node_modules/git-semver-tags/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.23", - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/istanbul-reports": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "node_modules/git-semver-tags/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "engines": { "node": ">=8" } }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "node_modules/git-semver-tags/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=8" }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-30.2.0.tgz", - "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", + "node_modules/git-semver-tags/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jest/core": "30.2.0", - "@jest/types": "30.2.0", - "import-local": "^3.2.0", - "jest-cli": "30.2.0" - }, - "bin": { - "jest": "bin/jest.js" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">=8" } }, - "node_modules/jest-changed-files": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.2.0.tgz", - "integrity": "sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==", + "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "execa": "^5.1.1", - "jest-util": "30.2.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/jest-circus": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.2.0.tgz", - "integrity": "sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==", + "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "30.2.0", - "@jest/expect": "30.2.0", - "@jest/test-result": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "co": "^4.6.0", - "dedent": "^1.6.0", - "is-generator-fn": "^2.1.0", - "jest-each": "30.2.0", - "jest-matcher-utils": "30.2.0", - "jest-message-util": "30.2.0", - "jest-runtime": "30.2.0", - "jest-snapshot": "30.2.0", - "jest-util": "30.2.0", - "p-limit": "^3.1.0", - "pretty-format": "30.2.0", - "pure-rand": "^7.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/git-semver-tags/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/git-semver-tags/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, + "license": "ISC" + }, + "node_modules/git-semver-tags/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=7.0.0" + "node": ">=10" } }, - "node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", "dev": true, - "license": "MIT" + "license": "BSD", + "dependencies": { + "ini": "^1.3.2" + } }, - "node_modules/jest-circus/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/gitconfiglocal/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "dev": true, + "license": "ISC" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-cli": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.2.0.tgz", - "integrity": "sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@jest/core": "30.2.0", - "@jest/test-result": "30.2.0", - "@jest/types": "30.2.0", - "chalk": "^4.1.2", - "exit-x": "^0.2.2", - "import-local": "^3.2.0", - "jest-config": "30.2.0", - "jest-util": "30.2.0", - "jest-validate": "30.2.0", - "yargs": "^17.7.2" - }, - "bin": { - "jest": "bin/jest.js" + "is-glob": "^4.0.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regex.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.0.1.tgz", + "integrity": "sha512-CG/iEvgQqfzoVsMUbxSJcwbG2JwyZ3naEqPkeltwl0BSS8Bp83k3xlGms+0QdWFUAwV+uvo80wNswKF6FWEkKg==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "peerDependencies": { + "tslib": "2" } }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "devOptional": true, + "license": "BSD-2-Clause" + }, + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "ini": "4.1.1" }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/globals": { + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.6.0.tgz", + "integrity": "sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", "dev": true, "license": "MIT" }, - "node_modules/jest-config": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.2.0.tgz", - "integrity": "sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==", - "dev": true, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", - "dependencies": { - "@babel/core": "^7.27.4", - "@jest/get-type": "30.1.0", - "@jest/pattern": "30.0.1", - "@jest/test-sequencer": "30.2.0", - "@jest/types": "30.2.0", - "babel-jest": "30.2.0", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "deepmerge": "^4.3.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.11", - "jest-circus": "30.2.0", - "jest-docblock": "30.2.0", - "jest-environment-node": "30.2.0", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.2.0", - "jest-runner": "30.2.0", - "jest-util": "30.2.0", - "jest-validate": "30.2.0", - "micromatch": "^4.0.8", - "parse-json": "^5.2.0", - "pretty-format": "30.2.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "esbuild-register": ">=3.4.0", - "ts-node": ">=9.0.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "esbuild-register": { - "optional": true - }, - "ts-node": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" }, "engines": { - "node": ">=8" + "node": ">=0.4.7" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/jest-config/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">=6" } }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "devOptional": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=8" } }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-config/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "node_modules/has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/jest-config/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" + "es-define-property": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-config/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-diff": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", - "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/diff-sequences": "30.0.1", - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "pretty-format": "30.2.0" + "dunder-proto": "^1.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "has-symbols": "^1.0.3" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/hasown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" } }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", "dev": true, "license": "MIT" }, - "node_modules/jest-docblock": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz", - "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==", + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", "dev": true, "license": "MIT", "dependencies": { - "detect-newline": "^3.1.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "hermes-estree": "0.25.1" } }, - "node_modules/jest-each": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.2.0.tgz", - "integrity": "sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==", + "node_modules/hono": { + "version": "4.12.9", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.9.tgz", + "integrity": "sha512-wy3T8Zm2bsEvxKZM5w21VdHDDcwVS1yUFFY6i8UobSsKfFceT7TOwhbhfKsDyx7tYQlmRM5FLpIuYvNFyjctiA==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/get-type": "30.1.0", - "@jest/types": "30.2.0", - "chalk": "^4.1.2", - "jest-util": "30.2.0", - "pretty-format": "30.2.0" - }, + "peer": true, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=16.9.0" } }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/html-encoding-sniffer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", + "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@exodus/bytes": "^1.6.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" }, - "engines": { - "node": ">=10" + "bin": { + "html-minifier-terser": "cli.js" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "engines": { + "node": ">=12" } }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">= 12" } }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-environment-jsdom": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", - "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", + "node_modules/html-webpack-plugin": { + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.5.tgz", + "integrity": "sha512-4xynFbKNNk+WlzXeQQ+6YYsH2g7mpfPszQZUi3ovKlj+pDmngQ7vRXjrrmGROabmKwyQkcgcX5hqfOwHbFmK5g==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/jsdom": "^20.0.0", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0", - "jsdom": "^20.0.0" + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" }, "peerDependencies": { - "canvas": "^2.5.0" + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" }, "peerDependenciesMeta": { - "canvas": { + "@rspack/core": { + "optional": true + }, + "webpack": { "optional": true } } }, - "node_modules/jest-environment-jsdom/node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "license": "MIT", "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "node_modules/htmlparser2/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/jest-environment-jsdom/node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "license": "MIT", "dependencies": { - "@sinclair/typebox": "^0.27.8" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, + "node_modules/http-proxy-middleware": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.5.tgz", + "integrity": "sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==", "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "@types/http-proxy": "^1.17.15", + "debug": "^4.3.6", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.3", + "is-plain-object": "^5.0.0", + "micromatch": "^4.0.8" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, - "license": "MIT" + "node_modules/http-proxy-middleware/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/jest-environment-jsdom/node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" } }, - "node_modules/jest-environment-jsdom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/husky": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" + "bin": { + "husky": "bin.js" }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/typicode" } }, - "node_modules/jest-environment-jsdom/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/jest-environment-jsdom/node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, "funding": [ { "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 4" } }, - "node_modules/jest-environment-jsdom/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" + "optional": true, + "bin": { + "image-size": "bin/image-size.js" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-environment-jsdom/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-environment-jsdom/node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-environment-jsdom/node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "node_modules/import-fresh/node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" + "callsites": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" } }, - "node_modules/jest-environment-jsdom/node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-environment-jsdom/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8.6" - }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/jest-environment-jsdom/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.8.19" } }, - "node_modules/jest-environment-jsdom/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-environment-jsdom/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/jest-environment-node": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.2.0.tgz", - "integrity": "sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==", + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.2.0", - "@jest/fake-timers": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "jest-mock": "30.2.0", - "jest-util": "30.2.0", - "jest-validate": "30.2.0" + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.4" } }, - "node_modules/jest-haste-map": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.2.0.tgz", - "integrity": "sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==", + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/types": "30.2.0", - "@types/node": "*", - "anymatch": "^3.1.3", - "fb-watchman": "^2.0.2", - "graceful-fs": "^4.2.11", - "jest-regex-util": "30.0.1", - "jest-util": "30.2.0", - "jest-worker": "30.2.0", - "micromatch": "^4.0.8", - "walker": "^1.0.8" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.3" + "node": ">=10.13.0" } }, - "node_modules/jest-leak-detector": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.2.0.tgz", - "integrity": "sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==", + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/get-type": "30.1.0", - "pretty-format": "30.2.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 12" } }, - "node_modules/jest-matcher-utils": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz", - "integrity": "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==", + "node_modules/ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "jest-diff": "30.2.0", - "pretty-format": "30.2.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=8" } }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/ipaddr.js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "has-bigints": "^1.0.2" }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/jest-message-util": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.2.0.tgz", - "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.2.0", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "pretty-format": "30.2.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" + "binary-extensions": "^2.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=8" } }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-builtin-module": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-5.0.0.tgz", + "integrity": "sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "builtin-modules": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18.20" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-message-util/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/is-core-module": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "dev": true, "license": "MIT", + "dependencies": { + "hasown": "^2.0.3" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-mock": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.2.0.tgz", - "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==", + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.2.0", - "@types/node": "*", - "jest-util": "30.2.0" + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, - "peerDependencies": { - "jest-resolve": "*" + "engines": { + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-regex-util": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", - "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", - "dev": true, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-resolve": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.2.0.tgz", - "integrity": "sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==", - "dev": true, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.2.0", - "jest-pnp-resolver": "^1.2.3", - "jest-util": "30.2.0", - "jest-validate": "30.2.0", - "slash": "^3.0.0", - "unrs-resolver": "^1.7.11" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-resolve-dependencies": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.2.0.tgz", - "integrity": "sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==", + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { - "jest-regex-util": "30.0.1", - "jest-snapshot": "30.2.0" + "call-bound": "^1.0.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-resolve/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "node_modules/is-in-ssh": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz", + "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.2.0.tgz", - "integrity": "sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==", - "dev": true, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "license": "MIT", "dependencies": { - "@jest/console": "30.2.0", - "@jest/environment": "30.2.0", - "@jest/test-result": "30.2.0", - "@jest/transform": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "emittery": "^0.13.1", - "exit-x": "^0.2.2", - "graceful-fs": "^4.2.11", - "jest-docblock": "30.2.0", - "jest-environment-node": "30.2.0", - "jest-haste-map": "30.2.0", - "jest-leak-detector": "30.2.0", - "jest-message-util": "30.2.0", - "jest-resolve": "30.2.0", - "jest-runtime": "30.2.0", - "jest-util": "30.2.0", - "jest-watcher": "30.2.0", - "jest-worker": "30.2.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/is-network-error": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.1.tgz", + "integrity": "sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw==", "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-runtime": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.2.0.tgz", - "integrity": "sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==", - "dev": true, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "license": "MIT", - "dependencies": { - "@jest/environment": "30.2.0", - "@jest/fake-timers": "30.2.0", - "@jest/globals": "30.2.0", - "@jest/source-map": "30.0.1", - "@jest/test-result": "30.2.0", - "@jest/transform": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "cjs-module-lexer": "^2.1.0", - "collect-v8-coverage": "^1.0.2", - "glob": "^10.3.10", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.2.0", - "jest-message-util": "30.2.0", - "jest-mock": "30.2.0", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.2.0", - "jest-snapshot": "30.2.0", - "jest-util": "30.2.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.12.0" } }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runtime/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "isobject": "^3.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true, "license": "MIT" }, - "node_modules/jest-runtime/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runtime/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, - "license": "ISC", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "call-bound": "^1.0.3" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runtime/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-snapshot": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.2.0.tgz", - "integrity": "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==", + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.27.4", - "@babel/generator": "^7.27.5", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1", - "@babel/types": "^7.27.3", - "@jest/expect-utils": "30.2.0", - "@jest/get-type": "30.1.0", - "@jest/snapshot-utils": "30.2.0", - "@jest/transform": "30.2.0", - "@jest/types": "30.2.0", - "babel-preset-current-node-syntax": "^1.2.0", - "chalk": "^4.1.2", - "expect": "30.2.0", - "graceful-fs": "^4.2.11", - "jest-diff": "30.2.0", - "jest-matcher-utils": "30.2.0", - "jest-message-util": "30.2.0", - "jest-util": "30.2.0", - "pretty-format": "30.2.0", - "semver": "^7.7.2", - "synckit": "^0.11.8" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-text-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", + "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "text-extensions": "^2.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=8" } }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "which-typed-array": "^1.1.16" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", "dev": true, "license": "MIT" }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-util": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz", - "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==", + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" + "call-bound": "^1.0.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", "dev": true, + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "is-inside-container": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=16" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/is2": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz", + "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "deep-is": "^0.1.3", + "ip-regex": "^4.1.0", + "is-url": "^1.2.4" }, "engines": { - "node": ">=7.0.0" + "node": ">=v0.10.0" } }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, - "node_modules/jest-validate": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.2.0.tgz", - "integrity": "sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/get-type": "30.1.0", - "@jest/types": "30.2.0", - "camelcase": "^6.3.0", - "chalk": "^4.1.2", - "leven": "^3.1.0", - "pretty-format": "30.2.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.4" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-mock": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.4.1.tgz", + "integrity": "sha512-/i8SVb8/NSB7RfNi8gfqu8gxLV23KaL5EpAttyb9iz8qWRIqXRLflycz/32wXsYkOnaUlx8NAKnJYtpsmXUmfw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jest/types": "30.4.1", + "@types/node": "*", + "jest-util": "30.4.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/jest-mock/node_modules/@jest/pattern": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.4.0.tgz", + "integrity": "sha512-RAWn3+f9u8BsHijKJ71uHcFp6vmyEt6VvoWXkl6hKF3qVIuWNmudVjg12DlBPGup/frIl5UcUlH5HfEuvHpEXg==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@types/node": "*", + "jest-regex-util": "30.4.0" }, "engines": { - "node": ">=7.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/jest-mock/node_modules/@jest/schemas": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.4.1.tgz", + "integrity": "sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } }, - "node_modules/jest-watcher": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.2.0.tgz", - "integrity": "sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==", + "node_modules/jest-mock/node_modules/@jest/types": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.4.1.tgz", + "integrity": "sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.2.0", - "@jest/types": "30.2.0", + "@jest/pattern": "30.4.0", + "@jest/schemas": "30.4.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", "@types/node": "*", - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "emittery": "^0.13.1", - "jest-util": "30.2.0", - "string-length": "^4.0.2" + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-watcher/node_modules/ansi-styles": { + "node_modules/jest-mock/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -16230,7 +13620,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-watcher/node_modules/chalk": { + "node_modules/jest-mock/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -16247,7 +13637,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-watcher/node_modules/color-convert": { + "node_modules/jest-mock/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -16260,44 +13650,39 @@ "node": ">=7.0.0" } }, - "node_modules/jest-watcher/node_modules/color-name": { + "node_modules/jest-mock/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, - "node_modules/jest-worker": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.2.0.tgz", - "integrity": "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==", + "node_modules/jest-mock/node_modules/jest-regex-util": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.4.0.tgz", + "integrity": "sha512-mWlvLviKIgIQ8VCuM1xRdD0TWp3zlzionlmDBjuXVBs+VkmXq6FgW9T4Emr7oGz/Rk6feDCGyiugolcQEyp3mg==", "dev": true, "license": "MIT", - "dependencies": { - "@types/node": "*", - "@ungap/structured-clone": "^1.3.0", - "jest-util": "30.2.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.1.1" - }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/jest-mock/node_modules/jest-util": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.4.1.tgz", + "integrity": "sha512-vjQb1sACEiv13DKJMDToJpzVW0joCsIQrmbg0fi7CyOOt+g9jTuQl2A216pWRBYhOVt53XbL/2LbMKg1BECWOw==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.3" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jiti": { @@ -16317,20 +13702,6 @@ "dev": true, "license": "MIT" }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/jsdoc-type-pratt-parser": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz", @@ -16342,44 +13713,39 @@ } }, "node_modules/jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.1.1.tgz", + "integrity": "sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^5.1.11", + "@asamuzakjp/dom-selector": "^7.1.1", + "@bramus/specificity": "^2.4.2", + "@csstools/css-syntax-patches-for-csstree": "^1.1.3", + "@exodus/bytes": "^1.15.0", + "css-tree": "^3.2.1", + "data-urls": "^7.0.0", + "decimal.js": "^10.6.0", + "html-encoding-sniffer": "^6.0.0", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", + "lru-cache": "^11.3.5", + "parse5": "^8.0.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", - "xml-name-validator": "^4.0.0" + "tough-cookie": "^6.0.1", + "undici": "^7.25.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^8.0.1", + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.1", + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=14" + "node": "^20.19.0 || ^22.13.0 || >=24.0.0" }, "peerDependencies": { - "canvas": "^2.5.0" + "canvas": "^3.0.0" }, "peerDependenciesMeta": { "canvas": { @@ -16387,6 +13753,42 @@ } } }, + "node_modules/jsdom/node_modules/entities": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/jsdom/node_modules/lru-cache": { + "version": "11.3.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.6.tgz", + "integrity": "sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/jsdom/node_modules/parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -16455,59 +13857,40 @@ } }, "node_modules/jsonc-eslint-parser": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz", - "integrity": "sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-3.1.0.tgz", + "integrity": "sha512-75EA7EWZExL/j+MDKQrRbdzcRI2HOkRlmUw8fZJc1ioqFEOvBsq7Rt+A6yCxOt9w/TYNpkt52gC6nm/g5tFIng==", "dev": true, "license": "MIT", "dependencies": { "acorn": "^8.5.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", + "eslint-visitor-keys": "^5.0.0", "semver": "^7.3.5" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://github.com/sponsors/ota-meshi" } }, "node_modules/jsonc-eslint-parser/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/jsonc-eslint-parser/node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/jsonc-eslint-parser/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", "dev": true, "license": "ISC", "bin": { @@ -16544,6 +13927,49 @@ "node": "*" } }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/katex": { + "version": "0.16.47", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.47.tgz", + "integrity": "sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==", + "dev": true, + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -16575,9 +14001,9 @@ } }, "node_modules/launch-editor": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", - "integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==", + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.13.2.tgz", + "integrity": "sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg==", "license": "MIT", "dependencies": { "picocolors": "^1.1.1", @@ -16639,16 +14065,6 @@ } } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -17147,6 +14563,19 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -17186,19 +14615,9 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, "node_modules/map-obj": { @@ -17441,6 +14860,26 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdast-util-math": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-3.0.0.tgz", + "integrity": "sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "longest-streak": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.1.0", + "unist-util-remove-position": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdast-util-phrasing": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", @@ -17492,21 +14931,36 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/memfs": { - "version": "4.51.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.51.0.tgz", - "integrity": "sha512-4zngfkVM/GpIhC8YazOsM6E8hoB33NP0BCESPOA6z7qaL6umPJNqkO8CNYaLV2FB2MV6H1O3x2luHHOSqppv+A==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.57.1.tgz", + "integrity": "sha512-WvzrWPwMQT+PtbX2Et64R4qXKK0fj/8pO85MrUCzymX3twwCiJCdvntW3HdhG1teLJcHDDLIKx5+c3HckWYZtQ==", "license": "Apache-2.0", "dependencies": { + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-fsa": "4.57.1", + "@jsonjoy.com/fs-node": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-to-fsa": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/fs-print": "4.57.1", + "@jsonjoy.com/fs-snapshot": "4.57.1", "@jsonjoy.com/json-pack": "^1.11.0", "@jsonjoy.com/util": "^1.9.0", "glob-to-regex.js": "^1.0.1", @@ -17517,6 +14971,9 @@ "funding": { "type": "github", "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, "node_modules/memorystream": { @@ -17542,10 +14999,13 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "license": "MIT", + "engines": { + "node": ">=18" + }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -17561,6 +15021,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -17782,6 +15243,26 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/micromark-extension-math": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", + "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/katex": "^0.16.0", + "devlop": "^1.0.0", + "katex": "^0.16.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/micromark-factory-destination": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", @@ -18188,9 +15669,9 @@ } }, "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "license": "MIT", "engines": { "node": ">=8.6" @@ -18203,7 +15684,9 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, "license": "MIT", + "optional": true, "bin": { "mime": "cli.js" }, @@ -18274,12 +15757,6 @@ "node": ">=4" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -18393,22 +15870,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/napi-postinstall": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", - "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", - "dev": true, - "license": "MIT", - "bin": { - "napi-postinstall": "lib/cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/napi-postinstall" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -18492,12 +15953,24 @@ "tslib": "^2.0.3" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "node_modules/node-exports-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", + "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "array.prototype.flatmap": "^1.3.3", + "es-errors": "^1.3.0", + "object.entries": "^1.1.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/node-releases": { "version": "2.0.27", @@ -18533,7 +16006,9 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "license": "MIT", + "optional": true, "engines": { "node": ">=0.10.0" } @@ -18724,10 +16199,20 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/nwsapi": { - "version": "2.2.22", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.22.tgz", - "integrity": "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-deep-merge": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/object-deep-merge/-/object-deep-merge-2.0.0.tgz", + "integrity": "sha512-3DC3UMpeffLTHiuXSy/UG4NOIYTLlY9u3V82+djSCLYClWobZiS4ivYzpIUWrRY/nfsJ8cWsKyG3QfyLePmhvg==", "dev": true, "license": "MIT" }, @@ -18774,6 +16259,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/object.fromentries": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", @@ -18827,12 +16328,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "license": "MIT" - }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -18858,7 +16353,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -18881,18 +16375,20 @@ } }, "node_modules/open": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", - "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz", + "integrity": "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==", "license": "MIT", "dependencies": { - "default-browser": "^5.2.1", + "default-browser": "^5.4.0", "define-lazy-prop": "^3.0.0", + "is-in-ssh": "^1.0.0", "is-inside-container": "^1.0.0", - "wsl-utils": "^0.1.0" + "powershell-utils": "^0.1.0", + "wsl-utils": "^0.3.0" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -18996,17 +16492,15 @@ } }, "node_modules/p-retry": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", - "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-8.0.0.tgz", + "integrity": "sha512-kFVqH1HxOHp8LupNsOys7bSV09VYTRLxarH/mokO4Rqhk6wGi70E0jh4VzvVGXfEVNggHoHLAMWsQqHyU1Ey9A==", "license": "MIT", "dependencies": { - "@types/retry": "0.12.2", - "is-network-error": "^1.0.0", - "retry": "^0.13.1" + "is-network-error": "^1.3.0" }, "engines": { - "node": ">=16.17" + "node": ">=22" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -19171,19 +16665,6 @@ "dev": true, "license": "MIT" }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -19266,10 +16747,14 @@ "license": "ISC" }, "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.0.tgz", + "integrity": "sha512-PuseHIvAnz3bjrM2rGJtSgo1zjgxapTLZ7x2pjhzWwlp4SJQgK3f3iZIQwkpEnBaKz6seKBADpM4B4ySkuYypg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } }, "node_modules/path-type": { "version": "3.0.0", @@ -19308,10 +16793,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "license": "MIT", "engines": { "node": ">=12" @@ -19343,16 +16827,6 @@ "node": ">=6" } }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -19595,6 +17069,18 @@ "dev": true, "license": "MIT" }, + "node_modules/powershell-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", + "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -19623,9 +17109,9 @@ } }, "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", + "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", "dev": true, "license": "MIT", "dependencies": { @@ -19647,15 +17133,29 @@ } }, "node_modules/pretty-format": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", - "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.4.1.tgz", + "integrity": "sha512-K6KiKMHTL4jjX4u3Kir2EW07nRfcqVTXIImx50wbjHQTcZPgg+gjVeNTIT3l3L1Rd4UefxfogquC9J37SoFyyw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/schemas": "30.0.5", + "@jest/schemas": "30.4.1", "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" + "react-is-18": "npm:react-is@^18.3.1", + "react-is-19": "npm:react-is@^19.2.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/pretty-format/node_modules/@jest/schemas": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.4.1.tgz", + "integrity": "sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -19688,6 +17188,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, "license": "MIT" }, "node_modules/progress": { @@ -19700,6 +17201,18 @@ "node": ">=0.4.0" } }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -19805,19 +17318,6 @@ "license": "MIT", "optional": true }, - "node_modules/psl": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", - "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, - "funding": { - "url": "https://github.com/sponsors/lupomontero" - } - }, "node_modules/pump": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", @@ -19840,18 +17340,18 @@ } }, "node_modules/puppeteer": { - "version": "24.31.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.31.0.tgz", - "integrity": "sha512-q8y5yLxLD8xdZdzNWqdOL43NbfvUOp60SYhaLZQwHC9CdKldxQKXOyJAciOr7oUJfyAH/KgB2wKvqT2sFKoVXA==", + "version": "24.35.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.35.0.tgz", + "integrity": "sha512-sbjB5JnJ+3nwgSdRM/bqkFXqLxRz/vsz0GRIeTlCk+j+fGpqaF2dId9Qp25rXz9zfhqnN9s0krek1M/C2GDKtA==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.10.13", - "chromium-bidi": "11.0.0", + "@puppeteer/browsers": "2.11.1", + "chromium-bidi": "12.0.1", "cosmiconfig": "^9.0.0", - "devtools-protocol": "0.0.1521046", - "puppeteer-core": "24.31.0", + "devtools-protocol": "0.0.1534754", + "puppeteer-core": "24.35.0", "typed-query-selector": "^2.12.0" }, "bin": { @@ -19862,41 +17362,24 @@ } }, "node_modules/puppeteer-core": { - "version": "24.31.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.31.0.tgz", - "integrity": "sha512-pnAohhSZipWQoFpXuGV7xCZfaGhqcBR9C4pVrU0QSrcMi7tQMH9J9lDBqBvyMAHQqe8HCARuREqFuVKRQOgTvg==", + "version": "24.35.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.35.0.tgz", + "integrity": "sha512-vt1zc2ME0kHBn7ZDOqLvgvrYD5bqNv5y2ZNXzYnCv8DEtZGw/zKhljlrGuImxptZ4rq+QI9dFGrUIYqG4/IQzA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.10.13", - "chromium-bidi": "11.0.0", + "@puppeteer/browsers": "2.11.1", + "chromium-bidi": "12.0.1", "debug": "^4.4.3", - "devtools-protocol": "0.0.1521046", + "devtools-protocol": "0.0.1534754", "typed-query-selector": "^2.12.0", - "webdriver-bidi-protocol": "0.3.9", - "ws": "^8.18.3" + "webdriver-bidi-protocol": "0.3.10", + "ws": "^8.19.0" }, "engines": { "node": ">=18" } }, - "node_modules/pure-rand": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", - "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, "node_modules/pvtsutils": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", @@ -19928,9 +17411,9 @@ } }, "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -19942,13 +17425,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true, - "license": "MIT" - }, "node_modules/quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", @@ -19959,16 +17435,6 @@ "node": ">=8" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -19979,56 +17445,43 @@ } }, "node_modules/raw-body": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "license": "MIT", "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", + "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/raw-body/node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" + "node": ">= 0.10" } }, "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/react-is-18": { + "name": "react-is", "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, "license": "MIT" }, + "node_modules/react-is-19": { + "name": "react-is", + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.6.tgz", + "integrity": "sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==", + "dev": true, + "license": "MIT" + }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -20149,27 +17602,16 @@ } }, "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">= 20.19.0" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, "node_modules/rechoir": { @@ -20435,14 +17877,28 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "license": "MIT" }, + "node_modules/reserved-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/reserved-identifiers/-/reserved-identifiers-1.2.0.tgz", + "integrity": "sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -20535,15 +17991,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/rfdc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", @@ -20614,6 +18061,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/run-applescript": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", @@ -20747,12 +18210,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "license": "MIT" - }, "node_modules/selfsigned": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-5.5.0.tgz", @@ -20777,79 +18234,67 @@ } }, "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/send/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", + "mime-db": "^1.54.0" + }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "devOptional": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==", "license": "MIT", "dependencies": { - "accepts": "~1.3.4", + "accepts": "~1.3.8", "batch": "0.6.1", "debug": "2.6.9", "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "http-errors": "~1.8.0", + "mime-types": "~2.1.35", + "parseurl": "~1.3.3" }, "engines": { "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/serve-index/node_modules/debug": { @@ -20871,38 +18316,27 @@ } }, "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "license": "MIT", "dependencies": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" }, "engines": { "node": ">= 0.6" } }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "license": "ISC" - }, "node_modules/serve-index/node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -20913,18 +18347,22 @@ } }, "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "license": "MIT", "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/set-function-length": { @@ -21160,47 +18598,6 @@ "npm": ">= 3.0.0" } }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "license": "MIT", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sockjs-client": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.6.1.tgz", - "integrity": "sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "eventsource": "^2.0.2", - "faye-websocket": "^0.11.4", - "inherits": "^2.0.4", - "url-parse": "^1.5.10" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://tidelift.com/funding/github/npm/sockjs-client" - } - }, - "node_modules/sockjs-client/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/socks": { "version": "2.8.7", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", @@ -21242,26 +18639,26 @@ } }, "node_modules/sort-object-keys": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.3.tgz", - "integrity": "sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-2.1.0.tgz", + "integrity": "sha512-SOiEnthkJKPv2L6ec6HMwhUcN0/lppkeYuN1x63PbyPRrgSPIuBJCiYxYyvWRTtjMlOi14vQUCGUJqS6PLVm8g==", "dev": true, "license": "MIT" }, "node_modules/sort-package-json": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-3.4.0.tgz", - "integrity": "sha512-97oFRRMM2/Js4oEA9LJhjyMlde+2ewpZQf53pgue27UkbEXfHJnDzHlUxQ/DWUkzqmp7DFwJp8D+wi/TYeQhpA==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-3.6.1.tgz", + "integrity": "sha512-Chgejw1+10p2D0U2tB7au1lHtz6TkFnxmvZktyBCRyV0GgmF6nl1IxXxAsPtJVsUyg/fo+BfCMAVVFUVRkAHrQ==", "dev": true, "license": "MIT", "dependencies": { - "detect-indent": "^7.0.1", + "detect-indent": "^7.0.2", "detect-newline": "^4.0.1", - "git-hooks-list": "^4.0.0", + "git-hooks-list": "^4.1.1", "is-plain-obj": "^4.1.0", - "semver": "^7.7.1", - "sort-object-keys": "^1.1.3", - "tinyglobby": "^0.2.12" + "semver": "^7.7.3", + "sort-object-keys": "^2.0.1", + "tinyglobby": "^0.2.15" }, "bin": { "sort-package-json": "cli.js" @@ -21283,23 +18680,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sort-package-json/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/sort-package-json/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", "dev": true, "license": "ISC", "bin": { @@ -21329,17 +18713,6 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -21387,50 +18760,6 @@ "dev": true, "license": "CC0-1.0" }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/spdy-transport/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", @@ -21454,13 +18783,6 @@ "node": ">= 10.x" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -21809,9 +19131,9 @@ } }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -21847,6 +19169,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -21862,43 +19185,6 @@ "node": ">=0.6.19" } }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-length/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-length/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", @@ -21973,6 +19259,34 @@ "node": ">=8" } }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.padend": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", @@ -21992,6 +19306,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.trim": { "version": "1.2.10", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", @@ -22099,16 +19424,6 @@ "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -22120,9 +19435,9 @@ } }, "node_modules/strip-indent": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.1.0.tgz", - "integrity": "sha512-OA95x+JPmL7kc7zCu+e+TeYxEiaIyndRx0OrBcK2QPPH09oAndr2ALvymxWA+Lx1PYYvFUm4O63pRkdJAaW96w==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.1.1.tgz", + "integrity": "sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==", "dev": true, "license": "MIT", "engines": { @@ -22203,22 +19518,12 @@ "dev": true, "license": "MIT", "dependencies": { - "cookie-signature": "^1.2.2", - "methods": "^1.1.2", - "superagent": "^10.3.0" - }, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/supertest/node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "dev": true, - "license": "MIT", + "cookie-signature": "^1.2.2", + "methods": "^1.1.2", + "superagent": "^10.3.0" + }, "engines": { - "node": ">=6.6.0" + "node": ">=14.18.0" } }, "node_modules/supports-color": { @@ -22255,9 +19560,9 @@ "license": "MIT" }, "node_modules/synckit": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", - "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", + "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -22367,16 +19672,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", - "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz", + "integrity": "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==", "devOptional": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "engines": { @@ -22450,21 +19754,6 @@ "source-map": "^0.6.0" } }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/text-decoder": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", @@ -22553,7 +19842,6 @@ "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", @@ -22566,12 +19854,25 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "node_modules/tldts": { + "version": "7.0.30", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.30.tgz", + "integrity": "sha512-ELrFxuqsDdHUwoh0XxDbxuLD3Wnz49Z57IFvTtvWy1hJdcMZjXLIuonjilCiWHlT2GbE4Wlv1wKVTzDFnXH1aw==", "dev": true, - "license": "BSD-3-Clause" + "license": "MIT", + "dependencies": { + "tldts-core": "^7.0.30" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.0.30", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.30.tgz", + "integrity": "sha512-uiHN8PIB1VmWyS98eZYja4xzlYqeFZVjb4OuYlJQnZAuJhMw4PbKQOKgHKhBdJR3FE/t5mUQ1Kd80++B+qhD1Q==", + "dev": true, + "license": "MIT" }, "node_modules/to-regex-range": { "version": "5.0.1", @@ -22585,6 +19886,23 @@ "node": ">=8.0" } }, + "node_modules/to-valid-identifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-valid-identifier/-/to-valid-identifier-1.0.0.tgz", + "integrity": "sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/base62": "^1.0.0", + "reserved-identifiers": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -22595,32 +19913,29 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz", + "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "tldts": "^7.0.5" }, "engines": { - "node": ">=6" + "node": ">=16" } }, "node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", + "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", "dev": true, "license": "MIT", "dependencies": { - "punycode": "^2.1.1" + "punycode": "^2.3.1" }, "engines": { - "node": ">=12" + "node": ">=20" } }, "node_modules/tree-dump": { @@ -22650,9 +19965,9 @@ } }, "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", "dev": true, "license": "MIT", "engines": { @@ -22678,6 +19993,7 @@ } ], "license": "BSD-3-Clause", + "peer": true, "dependencies": { "picomatch": "^4.0.2" }, @@ -22759,40 +20075,34 @@ "node": ">= 0.8.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.6" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/type-is/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/typed-array-buffer": { @@ -22903,17 +20213,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.48.0.tgz", - "integrity": "sha512-fcKOvQD9GUn3Xw63EgiDqhvWJ5jsyZUaekl3KVpGsDJnN46WJTe3jWxtQP9lMZm1LJNkFLlTaWAxK2vUQR+cqw==", + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.59.3.tgz", + "integrity": "sha512-KgusgyDgG4LI8Ih/sWaCtZ06tckLAS5CvT5A4D1Q7bYVoAAyzwiZvE4BmwDHkhRVkvhRBepKeASoFzQetha7Fg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@typescript-eslint/eslint-plugin": "8.48.0", - "@typescript-eslint/parser": "8.48.0", - "@typescript-eslint/typescript-estree": "8.48.0", - "@typescript-eslint/utils": "8.48.0" + "@typescript-eslint/eslint-plugin": "8.59.3", + "@typescript-eslint/parser": "8.59.3", + "@typescript-eslint/typescript-estree": "8.59.3", + "@typescript-eslint/utils": "8.59.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -22923,8 +20232,8 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/uglify-js": { @@ -22960,6 +20269,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.25.0.tgz", + "integrity": "sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, "node_modules/undici-types": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", @@ -23037,6 +20356,21 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/unist-util-stringify-position": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", @@ -23082,16 +20416,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -23101,45 +20425,10 @@ "node": ">= 0.8" } }, - "node_modules/unrs-resolver": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", - "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "napi-postinstall": "^0.3.0" - }, - "funding": { - "url": "https://opencollective.com/unrs-resolver" - }, - "optionalDependencies": { - "@unrs/resolver-binding-android-arm-eabi": "1.11.1", - "@unrs/resolver-binding-android-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-x64": "1.11.1", - "@unrs/resolver-binding-freebsd-x64": "1.11.1", - "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", - "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", - "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-musl": "1.11.1", - "@unrs/resolver-binding-wasm32-wasi": "1.11.1", - "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", - "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", - "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" - } - }, "node_modules/update-browserslist-db": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", - "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "devOptional": true, "funding": [ { @@ -23177,21 +20466,11 @@ "punycode": "^2.1.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, "license": "MIT" }, "node_modules/utila": { @@ -23205,35 +20484,12 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4.0" } }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -23280,16 +20536,16 @@ "license": "MIT" }, "node_modules/w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "dev": true, "license": "MIT", "dependencies": { - "xml-name-validator": "^4.0.0" + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/wait-for-expect": { @@ -23299,20 +20555,10 @@ "dev": true, "license": "MIT" }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, "node_modules/watchpack": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", - "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", "devOptional": true, "license": "MIT", "dependencies": { @@ -23323,36 +20569,27 @@ "node": ">=10.13.0" } }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, "node_modules/webdriver-bidi-protocol": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.3.9.tgz", - "integrity": "sha512-uIYvlRQ0PwtZR1EzHlTMol1G0lAlmOe6wPykF9a77AK3bkpvZHzIVxRE2ThOx5vjy2zISe0zhwf5rzuUfbo1PQ==", + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.3.10.tgz", + "integrity": "sha512-5LAE43jAVLOhB/QqX4bwSiv0Hg1HBfMmOuwBSXHdvg4GMGu9Y0lIq7p4R/yySu6w74WmaR4GM4H9t2IwLW7hgw==", "dev": true, "license": "Apache-2.0" }, "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", + "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==", "dev": true, "license": "BSD-2-Clause", "engines": { - "node": ">=12" + "node": ">=20" } }, "node_modules/webpack": { - "version": "5.103.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.103.0.tgz", - "integrity": "sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw==", + "version": "5.105.4", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.4.tgz", + "integrity": "sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==", "devOptional": true, "license": "MIT", "peer": true, @@ -23363,12 +20600,12 @@ "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.15.0", + "acorn": "^8.16.0", "acorn-import-phases": "^1.0.3", - "browserslist": "^4.26.3", + "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.3", - "es-module-lexer": "^1.2.1", + "enhanced-resolve": "^5.20.0", + "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", @@ -23379,9 +20616,9 @@ "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.4", - "webpack-sources": "^3.3.3" + "terser-webpack-plugin": "^5.3.17", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.4" }, "bin": { "webpack": "bin/webpack.js" @@ -23400,20 +20637,15 @@ } }, "node_modules/webpack-cli": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", - "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-7.0.2.tgz", + "integrity": "sha512-dB0R4T+C/8YuvM+fabdvil6QE44/ChDXikV5lOOkrUeCkW5hTJv2pGLE3keh+D5hjYw8icBaJkZzpFoaHV4T+g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@discoveryjs/json-ext": "^0.6.1", - "@webpack-cli/configtest": "^3.0.1", - "@webpack-cli/info": "^3.0.1", - "@webpack-cli/serve": "^3.0.1", - "colorette": "^2.0.14", - "commander": "^12.1.0", - "cross-spawn": "^7.0.3", + "@discoveryjs/json-ext": "^1.0.0", + "commander": "^14.0.3", + "cross-spawn": "^7.0.6", "envinfo": "^7.14.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", @@ -23425,14 +20657,16 @@ "webpack-cli": "bin/cli.js" }, "engines": { - "node": ">=18.12.0" + "node": ">=20.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^5.82.0" + "webpack": "^5.101.0", + "webpack-bundle-analyzer": "^4.0.0 || ^5.0.0", + "webpack-dev-server": "^5.0.0" }, "peerDependenciesMeta": { "webpack-bundle-analyzer": { @@ -23444,37 +20678,36 @@ } }, "node_modules/webpack-cli/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/webpack-dev-middleware": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", - "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-8.0.3.tgz", + "integrity": "sha512-zWrde9VZDiRaFuWsjHO40wm9LxxtXEk8DdzFXdU7eU5ZpiANnZZDBbZgN3guxbEoKqUHd9YupBmynyioz42nkA==", "license": "MIT", "dependencies": { - "colorette": "^2.0.10", - "memfs": "^4.43.1", - "mime-types": "^3.0.1", + "memfs": "^4.56.10", + "mime-types": "^3.0.2", "on-finished": "^2.4.1", "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" + "schema-utils": "^4.3.3" }, "engines": { - "node": ">= 18.12.0" + "node": ">= 20.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^5.0.0" + "webpack": "^5.101.0" }, "peerDependenciesMeta": { "webpack": { @@ -23483,15 +20716,19 @@ } }, "node_modules/webpack-dev-middleware/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/webpack-merge": { @@ -23510,86 +20747,38 @@ } }, "node_modules/webpack-sources": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", - "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz", + "integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==", "devOptional": true, "license": "MIT", "engines": { "node": ">=10.13.0" } }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "license": "Apache-2.0", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", + "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=20" } }, "node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.1.tgz", + "integrity": "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==", "dev": true, "license": "MIT", "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" + "@exodus/bytes": "^1.11.0", + "tr46": "^6.0.0", + "webidl-conversions": "^8.0.1" }, "engines": { - "node": ">=12" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, "node_modules/which": { @@ -23866,40 +21055,12 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, "license": "ISC" }, - "node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -23918,15 +21079,16 @@ } }, "node_modules/wsl-utils": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", - "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz", + "integrity": "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==", "license": "MIT", "dependencies": { - "is-wsl": "^3.1.0" + "is-wsl": "^3.1.0", + "powershell-utils": "^0.1.0" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -23946,13 +21108,13 @@ } }, "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", "dev": true, "license": "Apache-2.0", "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/xmlchars": { @@ -24116,10 +21278,24 @@ "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + }, "node_modules/zwitch": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", diff --git a/package.json b/package.json index 84d2d5b407..aaff3cd758 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ }, "license": "MIT", "author": "Tobias Koppers @sokra", + "type": "module", "main": "lib/Server.js", "types": "types/lib/Server.d.ts", "bin": "bin/webpack-dev-server.js", @@ -35,9 +36,9 @@ "build:client": "rimraf -g ./client/* && babel client-src/ --out-dir client/ --ignore \"client-src/webpack.config.js\" --ignore \"client-src/modules\" && webpack --config client-src/webpack.config.js", "build:types": "rimraf -g ./types/* && tsc --declaration --emitDeclarationOnly --outDir types && node ./scripts/extend-webpack-types.js && prettier \"types/**/*.ts\" --write && prettier \"types/**/*.ts\" --write", "build": "npm-run-all -p \"build:**\"", - "test:only": "node --experimental-vm-modules node_modules/jest/bin/jest.js", - "test:coverage": "npm run test:only -- --coverage", - "test:watch": "npm run test:coverage --watch", + "test:only": "node ./scripts/check-test-ports.mjs && node ./scripts/run-tests.mjs", + "test:coverage": "npm run test:only -- --experimental-test-coverage --test-coverage-include=lib/** --test-coverage-include=bin/** --test-coverage-include=client/** --test-coverage-include=client-src/** --test-reporter=spec --test-reporter-destination=stdout --test-reporter=lcov --test-reporter-destination=coverage/lcov.info", + "test:watch": "npm run test:only -- --watch", "test": "npm run test:coverage", "pretest": "npm run lint", "prepare": "husky && npm run build", @@ -46,53 +47,49 @@ "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", - "@types/express": "^4.17.25", - "@types/express-serve-static-core": "^4.17.21", + "@types/express": "^5.0.6", + "@types/express-serve-static-core": "^5.1.1", "@types/serve-index": "^1.9.4", - "@types/serve-static": "^1.15.5", - "@types/sockjs": "^0.3.36", - "@types/ws": "^8.5.10", + "@types/serve-static": "^2.2.0", + "@types/ws": "^8.18.1", "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.2.1", - "chokidar": "^3.6.0", - "colorette": "^2.0.10", + "bonjour-service": "^1.3.0", + "chokidar": "^5.0.0", "compression": "^1.8.1", "connect-history-api-fallback": "^2.0.0", - "express": "^4.22.1", - "graceful-fs": "^4.2.6", - "http-proxy-middleware": "^2.0.9", - "ipaddr.js": "^2.1.0", - "launch-editor": "^2.6.1", - "open": "^10.0.3", - "p-retry": "^6.2.0", - "schema-utils": "^4.2.0", + "express": "^5.2.1", + "graceful-fs": "^4.2.11", + "http-proxy-middleware": "^3.0.5", + "ipaddr.js": "^2.3.0", + "launch-editor": "^2.13.2", + "open": "^11.0.0", + "p-retry": "^8.0.0", + "schema-utils": "^4.3.3", "selfsigned": "^5.5.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^7.4.2", - "ws": "^8.18.0" + "serve-index": "^1.9.2", + "tinyglobby": "^0.2.15", + "webpack-dev-middleware": "^8.0.3", + "ws": "^8.20.0" }, "devDependencies": { - "@babel/cli": "^7.25.9", - "@babel/core": "^7.25.9", - "@babel/eslint-parser": "^7.25.9", - "@babel/plugin-transform-object-assign": "^7.25.9", - "@babel/plugin-transform-runtime": "^7.25.9", - "@babel/preset-env": "^7.25.9", - "@babel/runtime": "^7.25.9", + "@babel/cli": "^7.28.6", + "@babel/core": "^7.29.0", + "@babel/eslint-parser": "^7.28.6", + "@babel/plugin-transform-object-assign": "^7.27.1", + "@babel/plugin-transform-runtime": "^7.29.0", + "@babel/preset-env": "^7.29.2", + "@babel/runtime": "^7.29.2", "@commitlint/cli": "^19.5.0", "@commitlint/config-conventional": "^19.5.0", "@eslint/markdown": "^7.0.0", - "@hono/node-server": "^1.13.3", + "@hono/node-server": "^1.19.12", "@types/compression": "^1.7.2", "@types/graceful-fs": "^4.1.9", "@types/node": "^24.0.14", "@types/node-forge": "^1.3.1", - "@types/sockjs-client": "^1.5.1", + "@types/picomatch": "^4.0.2", "@types/trusted-types": "^2.0.7", "acorn": "^8.14.0", - "babel-jest": "^30.0.4", "babel-loader": "^10.0.0", "connect": "^3.7.0", "core-js": "^3.38.1", @@ -100,18 +97,18 @@ "css-loader": "^7.1.1", "eslint": "^9.30.1", "eslint-config-prettier": "^10.1.5", - "eslint-config-webpack": "^4.4.0", + "eslint-config-webpack": "^4.9.6", "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jest": "^29.0.1", "eslint-plugin-jsdoc": "^51.3.4", "eslint-plugin-n": "^17.21.0", "execa": "^5.1.1", - "hono": "^4.6.8", + "expect": "^30.4.1", + "hono": "^4.12.9", "html-webpack-plugin": "^5.6.3", "http-proxy": "^1.18.1", "husky": "^9.1.6", - "jest": "^30.0.4", - "jest-environment-jsdom": "^29.7.0", + "jest-mock": "^30.4.1", + "jsdom": "^29.1.1", "klona": "^2.0.4", "less": "^4.1.1", "less-loader": "^12.1.0", @@ -120,11 +117,11 @@ "memfs": "^4.14.0", "npm-run-all": "^4.1.5", "prettier": "^3.2.4", - "puppeteer": "^24.10.0", + "pretty-format": "^30.4.1", + "puppeteer": "^24.35.0", "readable-stream": "^4.5.2", "require-from-string": "^2.0.2", "rimraf": "^5.0.5", - "sockjs-client": "^1.6.1", "standard-version": "^9.3.0", "style-loader": "^4.0.0", "supertest": "^7.2.2", @@ -132,12 +129,12 @@ "typescript": "^5.7.2", "typescript-eslint": "^8.36.0", "wait-for-expect": "^3.0.2", - "webpack": "^5.94.0", - "webpack-cli": "^6.0.1", + "webpack": "^5.105.4", + "webpack-cli": "^7.0.2", "webpack-merge": "^6.0.1" }, "peerDependencies": { - "webpack": "^5.0.0" + "webpack": "^5.101.0" }, "peerDependenciesMeta": { "webpack-cli": { @@ -148,6 +145,6 @@ } }, "engines": { - "node": ">= 18.12.0" + "node": ">= 22.15.0" } } diff --git a/scripts/check-test-ports.mjs b/scripts/check-test-ports.mjs new file mode 100644 index 0000000000..1960c3144e --- /dev/null +++ b/scripts/check-test-ports.mjs @@ -0,0 +1,33 @@ +import tcpPortUsed from "tcp-port-used"; +import webpack from "webpack"; +import ports from "../test/ports-map.js"; + +const { version } = webpack; +// eslint-disable-next-line no-console +console.log(`\n Running tests for webpack @${version} \n`); + +const checks = []; +for (const key of Object.keys(ports)) { + const value = ports[key]; + const arr = Array.isArray(value) ? value : [value]; + + for (const port of arr) { + checks.push({ port, key }); + } +} + +try { + await Promise.all( + checks.map(async ({ port, key }) => { + const inUse = await tcpPortUsed.check(port, "localhost"); + if (inUse) { + throw new Error(`${port} has already used. [${key}]`); + } + }), + ); +} catch (err) { + // eslint-disable-next-line no-console + console.error(err); + // eslint-disable-next-line n/no-process-exit + process.exit(1); +} diff --git a/scripts/extend-webpack-types.js b/scripts/extend-webpack-types.js index 36a811a933..5125aa55ed 100644 --- a/scripts/extend-webpack-types.js +++ b/scripts/extend-webpack-types.js @@ -1,13 +1,15 @@ -"use strict"; - -const path = require("node:path"); -const fs = require("graceful-fs"); +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import fs from "graceful-fs"; /** * @returns {Promise} */ async function extendTypes() { - const typesPath = path.resolve(__dirname, "../types/lib/Server.d.ts"); + const typesPath = path.resolve( + path.dirname(fileURLToPath(import.meta.url)), + "../types/lib/Server.d.ts", + ); const content = await fs.promises.readFile(typesPath, "utf8"); const newContent = `${content} // DO NOT REMOVE THIS! @@ -26,10 +28,4 @@ declare module "webpack" { await fs.promises.writeFile(typesPath, newContent); } -// eslint-disable-next-line unicorn/prefer-top-level-await -Promise.resolve().then( - () => extendTypes(), - (error) => { - throw error; - }, -); +await extendTypes(); diff --git a/scripts/globalSetupTest.js b/scripts/globalSetupTest.js deleted file mode 100644 index e8ee1c86b3..0000000000 --- a/scripts/globalSetupTest.js +++ /dev/null @@ -1,41 +0,0 @@ -"use strict"; - -const tcpPortUsed = require("tcp-port-used"); -const { version } = require("webpack"); -const ports = require("../test/ports-map"); - -// eslint-disable-next-line no-console -console.log(`\n Running tests for webpack @${version} \n`); - -/** - * @returns {Promise} - */ -async function validatePorts() { - const samples = []; - - for (const key of Object.keys(ports)) { - const value = ports[key]; - const arr = Array.isArray(value) ? value : [value]; - - for (const port of arr) { - const check = tcpPortUsed.check(port, "localhost").then((inUse) => { - if (inUse) { - throw new Error(`${port} has already used. [${key}]`); - } - }); - - samples.push(check); - } - } - - try { - await Promise.all(samples); - } catch (err) { - // eslint-disable-next-line no-console - console.error(err); - // eslint-disable-next-line n/no-process-exit - process.exit(1); - } -} - -module.exports = validatePorts; diff --git a/scripts/node-test-setup.mjs b/scripts/node-test-setup.mjs new file mode 100644 index 0000000000..9775a39872 --- /dev/null +++ b/scripts/node-test-setup.mjs @@ -0,0 +1,29 @@ +import path from "node:path"; +import { snapshot } from "node:test"; +import { format } from "pretty-format"; +import webpack from "webpack"; + +process.env.CHOKIDAR_USEPOLLING = "true"; + +// Normalize "\r\n" and "\r" to "\n" so snapshots are platform-agnostic. +snapshot.setDefaultSnapshotSerializers([ + (value) => + format(value, { + escapeRegex: true, + escapeString: false, + indent: 2, + printBasicPrototype: false, + printFunctionName: false, + }).replaceAll(/\r\n|\r/g, "\n"), +]); + +const [webpackVersion] = webpack.version; +const snapshotExtension = `.snap.webpack${webpackVersion}`; + +snapshot.setResolveSnapshotPath((testPath) => + path.join( + path.dirname(testPath), + "__snapshots__", + `${path.basename(testPath)}${snapshotExtension}`, + ), +); diff --git a/scripts/prepare-test-for-old-node.js b/scripts/prepare-test-for-old-node.js deleted file mode 100644 index a5ef6dbfa1..0000000000 --- a/scripts/prepare-test-for-old-node.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; - -const fs = require("node:fs"); -const path = require("node:path"); - -/** - * @returns {Promise} - */ -async function setup() { - const serverCodePath = path.resolve(__dirname, "../lib/Server.js"); - let serverCode = await fs.promises.readFile(serverCodePath, "utf8"); - - serverCode = serverCode.replaceAll( - /\(await import\((".+")\)\)\.default/g, - "require($1)", - ); - - await fs.promises.writeFile(serverCodePath, serverCode); -} - -Promise.resolve() - .then(() => setup()) - // eslint-disable-next-line unicorn/prefer-top-level-await - .then( - () => { - // eslint-disable-next-line no-console - console.log("The setup was successful"); - }, - (error) => { - throw error; - }, - ); diff --git a/scripts/run-tests.mjs b/scripts/run-tests.mjs new file mode 100644 index 0000000000..53ed64ff83 --- /dev/null +++ b/scripts/run-tests.mjs @@ -0,0 +1,64 @@ +import { spawn } from "node:child_process"; +import { glob, mkdir } from "node:fs/promises"; +import path from "node:path"; + +const ROOT = path.resolve(import.meta.dirname, ".."); + +// Pre-create any directory referenced by `--test-reporter-destination` because +// Node's reporter stream opens the file with `fs.createWriteStream` and won't +// create missing parent directories. +for (let i = 0; i < process.argv.length; i++) { + const arg = process.argv[i]; + let destination; + if (arg === "--test-reporter-destination") { + destination = process.argv[i + 1]; + } else if (arg?.startsWith("--test-reporter-destination=")) { + destination = arg.slice("--test-reporter-destination=".length); + } + if (destination && destination !== "stdout" && destination !== "stderr") { + await mkdir(path.dirname(path.resolve(ROOT, destination)), { + recursive: true, + }); + } +} + +const PATTERNS = [ + "test/*.test.js", + "test/cli/**/*.test.js", + "test/client/**/*.test.js", + "test/e2e/**/*.test.js", + "test/server/**/*.test.js", +]; + +const files = new Set(); +for (const pattern of PATTERNS) { + for await (const file of glob(pattern, { cwd: ROOT })) { + files.add(file); + } +} + +const testFiles = [...files].toSorted(); + +const nodeArgs = [ + "--import", + "./scripts/node-test-setup.mjs", + "--experimental-test-module-mocks", + "--test", + "--test-timeout=400000", + "--test-force-exit", + ...process.argv.slice(2), + ...testFiles, +]; + +const child = spawn(process.execPath, nodeArgs, { + cwd: ROOT, + stdio: "inherit", +}); + +child.on("exit", (code, signal) => { + if (signal) { + process.kill(process.pid, signal); + } else { + process.exitCode = code ?? 1; + } +}); diff --git a/scripts/setupTest.js b/scripts/setupTest.js deleted file mode 100644 index 5e0aaeb46d..0000000000 --- a/scripts/setupTest.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; - -/* global jest */ - -process.env.CHOKIDAR_USEPOLLING = true; - -jest.setTimeout(400000); diff --git a/test/__snapshots__/normalize-options.test.js.snap.webpack5 b/test/__snapshots__/normalize-options.test.js.snap.webpack5 index 436119cd68..4d965b0a59 100644 --- a/test/__snapshots__/normalize-options.test.js.snap.webpack5 +++ b/test/__snapshots__/normalize-options.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`normalize options allowedHosts is array 1`] = ` +exports[`normalize options > allowedHosts is array 1`] = ` { "allowedHosts": "all", "bonjour": false, @@ -39,8 +37,6 @@ exports[`normalize options allowedHosts is array 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -56,7 +52,7 @@ exports[`normalize options allowedHosts is array 1`] = ` } `; -exports[`normalize options allowedHosts is string 1`] = ` +exports[`normalize options > allowedHosts is string 1`] = ` { "allowedHosts": "all", "bonjour": false, @@ -95,8 +91,6 @@ exports[`normalize options allowedHosts is string 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -112,7 +106,7 @@ exports[`normalize options allowedHosts is string 1`] = ` } `; -exports[`normalize options client custom webSocketTransport path 1`] = ` +exports[`normalize options > client custom webSocketTransport path 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -152,8 +146,6 @@ exports[`normalize options client custom webSocketTransport path 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -169,7 +161,7 @@ exports[`normalize options client custom webSocketTransport path 1`] = ` } `; -exports[`normalize options client host and port 1`] = ` +exports[`normalize options > client host and port 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -211,8 +203,6 @@ exports[`normalize options client host and port 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -228,7 +218,7 @@ exports[`normalize options client host and port 1`] = ` } `; -exports[`normalize options client host and string port 1`] = ` +exports[`normalize options > client host and string port 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -270,8 +260,6 @@ exports[`normalize options client host and string port 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -287,7 +275,7 @@ exports[`normalize options client host and string port 1`] = ` } `; -exports[`normalize options client path 1`] = ` +exports[`normalize options > client path 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -328,8 +316,6 @@ exports[`normalize options client path 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -345,7 +331,7 @@ exports[`normalize options client path 1`] = ` } `; -exports[`normalize options client path without leading/ending slashes 1`] = ` +exports[`normalize options > client path without leading/ending slashes 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -386,65 +372,6 @@ exports[`normalize options client path without leading/ending slashes 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, - "persistent": true, - "usePolling": false, - }, - }, - ], - "watchFiles": [], - "webSocketServer": { - "options": { - "path": "/ws", - }, - "type": "ws", - }, -} -`; - -exports[`normalize options client.webSocketTransport sockjs string 1`] = ` -{ - "allowedHosts": "auto", - "bonjour": false, - "client": { - "logging": "info", - "overlay": true, - "reconnect": 10, - "webSocketTransport": "sockjs", - "webSocketURL": {}, - }, - "compress": true, - "devMiddleware": {}, - "historyApiFallback": false, - "host": undefined, - "hot": true, - "liveReload": true, - "open": [], - "port": "", - "server": { - "options": {}, - "type": "http", - }, - "setupExitSignals": true, - "static": [ - { - "directory": "/public", - "publicPath": [ - "/", - ], - "serveIndex": { - "icons": true, - }, - "staticOptions": {}, - "watch": { - "alwaysStat": true, - "atomic": false, - "followSymlinks": false, - "ignoreInitial": true, - "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -460,7 +387,7 @@ exports[`normalize options client.webSocketTransport sockjs string 1`] = ` } `; -exports[`normalize options client.webSocketTransport ws string 1`] = ` +exports[`normalize options > client.webSocketTransport ws string 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -500,8 +427,6 @@ exports[`normalize options client.webSocketTransport ws string 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -517,7 +442,7 @@ exports[`normalize options client.webSocketTransport ws string 1`] = ` } `; -exports[`normalize options client.webSocketTransport ws string and webSocketServer object 1`] = ` +exports[`normalize options > client.webSocketTransport ws string and webSocketServer object 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -557,8 +482,6 @@ exports[`normalize options client.webSocketTransport ws string and webSocketServ "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -576,7 +499,7 @@ exports[`normalize options client.webSocketTransport ws string and webSocketServ } `; -exports[`normalize options client.webSocketTransport ws string and webSocketServer object with port as string 1`] = ` +exports[`normalize options > client.webSocketTransport ws string and webSocketServer object with port as string 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -616,8 +539,6 @@ exports[`normalize options client.webSocketTransport ws string and webSocketServ "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -635,7 +556,7 @@ exports[`normalize options client.webSocketTransport ws string and webSocketServ } `; -exports[`normalize options client.webSocketTransport ws string and webSocketServer ws string 1`] = ` +exports[`normalize options > client.webSocketTransport ws string and webSocketServer ws string 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -675,8 +596,6 @@ exports[`normalize options client.webSocketTransport ws string and webSocketServ "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -692,7 +611,7 @@ exports[`normalize options client.webSocketTransport ws string and webSocketServ } `; -exports[`normalize options dev is set 1`] = ` +exports[`normalize options > dev is set 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -733,8 +652,6 @@ exports[`normalize options dev is set 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -750,7 +667,7 @@ exports[`normalize options dev is set 1`] = ` } `; -exports[`normalize options hot is false 1`] = ` +exports[`normalize options > hot is false 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -789,8 +706,6 @@ exports[`normalize options hot is false 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -806,7 +721,7 @@ exports[`normalize options hot is false 1`] = ` } `; -exports[`normalize options hot is only 1`] = ` +exports[`normalize options > hot is only 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -845,8 +760,6 @@ exports[`normalize options hot is only 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -862,7 +775,7 @@ exports[`normalize options hot is only 1`] = ` } `; -exports[`normalize options hot is true 1`] = ` +exports[`normalize options > hot is true 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -901,8 +814,6 @@ exports[`normalize options hot is true 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -918,7 +829,7 @@ exports[`normalize options hot is true 1`] = ` } `; -exports[`normalize options liveReload is false 1`] = ` +exports[`normalize options > liveReload is false 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -957,8 +868,6 @@ exports[`normalize options liveReload is false 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -974,7 +883,7 @@ exports[`normalize options liveReload is false 1`] = ` } `; -exports[`normalize options liveReload is true 1`] = ` +exports[`normalize options > liveReload is true 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1013,8 +922,6 @@ exports[`normalize options liveReload is true 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1030,7 +937,7 @@ exports[`normalize options liveReload is true 1`] = ` } `; -exports[`normalize options multi compiler client.logging should override infrastructureLogging.level 1`] = ` +exports[`normalize options > multi compiler client.logging should override infrastructureLogging.level 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1069,8 +976,6 @@ exports[`normalize options multi compiler client.logging should override infrast "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1086,7 +991,7 @@ exports[`normalize options multi compiler client.logging should override infrast } `; -exports[`normalize options multi compiler client.logging should respect infrastructureLogging.level 1`] = ` +exports[`normalize options > multi compiler client.logging should respect infrastructureLogging.level 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1125,8 +1030,6 @@ exports[`normalize options multi compiler client.logging should respect infrastr "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1142,7 +1045,7 @@ exports[`normalize options multi compiler client.logging should respect infrastr } `; -exports[`normalize options multi compiler client.logging should respect infrastructureLogging.level 2`] = ` +exports[`normalize options > multi compiler client.logging should respect infrastructureLogging.level 2`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1181,8 +1084,6 @@ exports[`normalize options multi compiler client.logging should respect infrastr "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1198,7 +1099,7 @@ exports[`normalize options multi compiler client.logging should respect infrastr } `; -exports[`normalize options multi compiler client.logging should respect infrastructureLogging.level 3`] = ` +exports[`normalize options > multi compiler client.logging should respect infrastructureLogging.level 3`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1237,8 +1138,6 @@ exports[`normalize options multi compiler client.logging should respect infrastr "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1254,7 +1153,7 @@ exports[`normalize options multi compiler client.logging should respect infrastr } `; -exports[`normalize options multi compiler watchOptions is set 1`] = ` +exports[`normalize options > multi compiler watchOptions is set 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1293,8 +1192,6 @@ exports[`normalize options multi compiler watchOptions is set 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1310,7 +1207,7 @@ exports[`normalize options multi compiler watchOptions is set 1`] = ` } `; -exports[`normalize options no options 1`] = ` +exports[`normalize options > no options 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1349,8 +1246,6 @@ exports[`normalize options no options 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1366,7 +1261,7 @@ exports[`normalize options no options 1`] = ` } `; -exports[`normalize options port string 1`] = ` +exports[`normalize options > port string 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1405,8 +1300,6 @@ exports[`normalize options port string 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1422,7 +1315,7 @@ exports[`normalize options port string 1`] = ` } `; -exports[`normalize options single compiler client.logging should default to infrastructureLogging.level 1`] = ` +exports[`normalize options > single compiler client.logging should default to infrastructureLogging.level 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1461,8 +1354,6 @@ exports[`normalize options single compiler client.logging should default to infr "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1478,7 +1369,7 @@ exports[`normalize options single compiler client.logging should default to infr } `; -exports[`normalize options single compiler client.logging should override to infrastructureLogging.level 1`] = ` +exports[`normalize options > single compiler client.logging should override to infrastructureLogging.level 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1517,8 +1408,6 @@ exports[`normalize options single compiler client.logging should override to inf "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1534,7 +1423,7 @@ exports[`normalize options single compiler client.logging should override to inf } `; -exports[`normalize options single compiler watchOptions is object 1`] = ` +exports[`normalize options > single compiler watchOptions is object 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1573,8 +1462,6 @@ exports[`normalize options single compiler watchOptions is object 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1590,7 +1477,7 @@ exports[`normalize options single compiler watchOptions is object 1`] = ` } `; -exports[`normalize options single compiler watchOptions is object with static watch overriding it 1`] = ` +exports[`normalize options > single compiler watchOptions is object with static watch overriding it 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1629,7 +1516,6 @@ exports[`normalize options single compiler watchOptions is object with static wa "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, "interval": 500, "persistent": true, "usePolling": true, @@ -1646,7 +1532,7 @@ exports[`normalize options single compiler watchOptions is object with static wa } `; -exports[`normalize options single compiler watchOptions is object with static watch true 1`] = ` +exports[`normalize options > single compiler watchOptions is object with static watch true 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1685,8 +1571,6 @@ exports[`normalize options single compiler watchOptions is object with static wa "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1702,7 +1586,7 @@ exports[`normalize options single compiler watchOptions is object with static wa } `; -exports[`normalize options single compiler watchOptions is object with watch false 1`] = ` +exports[`normalize options > single compiler watchOptions is object with watch false 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1741,8 +1625,6 @@ exports[`normalize options single compiler watchOptions is object with watch fal "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1758,7 +1640,7 @@ exports[`normalize options single compiler watchOptions is object with watch fal } `; -exports[`normalize options static is an array of static objects 1`] = ` +exports[`normalize options > static is an array of static objects 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1797,8 +1679,6 @@ exports[`normalize options static is an array of static objects 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1818,8 +1698,6 @@ exports[`normalize options static is an array of static objects 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1835,7 +1713,7 @@ exports[`normalize options static is an array of static objects 1`] = ` } `; -exports[`normalize options static is an array of strings 1`] = ` +exports[`normalize options > static is an array of strings 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1874,8 +1752,6 @@ exports[`normalize options static is an array of strings 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1895,8 +1771,6 @@ exports[`normalize options static is an array of strings 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1912,7 +1786,7 @@ exports[`normalize options static is an array of strings 1`] = ` } `; -exports[`normalize options static is an array of strings and static objects 1`] = ` +exports[`normalize options > static is an array of strings and static objects 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1951,8 +1825,6 @@ exports[`normalize options static is an array of strings and static objects 1`] "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1972,8 +1844,6 @@ exports[`normalize options static is an array of strings and static objects 1`] "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1989,7 +1859,7 @@ exports[`normalize options static is an array of strings and static objects 1`] } `; -exports[`normalize options static is an object 1`] = ` +exports[`normalize options > static is an object 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2028,8 +1898,6 @@ exports[`normalize options static is an object 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2045,7 +1913,7 @@ exports[`normalize options static is an object 1`] = ` } `; -exports[`normalize options static is an object with staticOptions 1`] = ` +exports[`normalize options > static is an object with staticOptions 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2087,8 +1955,6 @@ exports[`normalize options static is an object with staticOptions 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2104,7 +1970,7 @@ exports[`normalize options static is an object with staticOptions 1`] = ` } `; -exports[`normalize options static is false 1`] = ` +exports[`normalize options > static is false 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2138,7 +2004,7 @@ exports[`normalize options static is false 1`] = ` } `; -exports[`normalize options static is string 1`] = ` +exports[`normalize options > static is string 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2177,8 +2043,6 @@ exports[`normalize options static is string 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2194,7 +2058,7 @@ exports[`normalize options static is string 1`] = ` } `; -exports[`normalize options static is true 1`] = ` +exports[`normalize options > static is true 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2233,8 +2097,6 @@ exports[`normalize options static is true 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2250,7 +2112,7 @@ exports[`normalize options static is true 1`] = ` } `; -exports[`normalize options static publicPath is a string 1`] = ` +exports[`normalize options > static publicPath is a string 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2289,8 +2151,6 @@ exports[`normalize options static publicPath is a string 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2306,7 +2166,7 @@ exports[`normalize options static publicPath is a string 1`] = ` } `; -exports[`normalize options static publicPath is an array 1`] = ` +exports[`normalize options > static publicPath is an array 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2346,8 +2206,6 @@ exports[`normalize options static publicPath is an array 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2363,7 +2221,7 @@ exports[`normalize options static publicPath is an array 1`] = ` } `; -exports[`normalize options static serveIndex is an object more options 1`] = ` +exports[`normalize options > static serveIndex is an object more options 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2405,8 +2263,6 @@ exports[`normalize options static serveIndex is an object more options 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2422,7 +2278,7 @@ exports[`normalize options static serveIndex is an object more options 1`] = ` } `; -exports[`normalize options static serveIndex is an object with icons false 1`] = ` +exports[`normalize options > static serveIndex is an object with icons false 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2461,8 +2317,6 @@ exports[`normalize options static serveIndex is an object with icons false 1`] = "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2478,7 +2332,7 @@ exports[`normalize options static serveIndex is an object with icons false 1`] = } `; -exports[`normalize options static serveIndex is false 1`] = ` +exports[`normalize options > static serveIndex is false 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2515,8 +2369,6 @@ exports[`normalize options static serveIndex is false 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2532,7 +2384,7 @@ exports[`normalize options static serveIndex is false 1`] = ` } `; -exports[`normalize options static serveIndex is true 1`] = ` +exports[`normalize options > static serveIndex is true 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2571,8 +2423,6 @@ exports[`normalize options static serveIndex is true 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2588,7 +2438,7 @@ exports[`normalize options static serveIndex is true 1`] = ` } `; -exports[`normalize options static watch is an object 1`] = ` +exports[`normalize options > static watch is an object 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2627,7 +2477,6 @@ exports[`normalize options static watch is an object 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, "interval": 500, "persistent": true, "usePolling": true, @@ -2644,7 +2493,7 @@ exports[`normalize options static watch is an object 1`] = ` } `; -exports[`normalize options static watch is false 1`] = ` +exports[`normalize options > static watch is false 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2690,7 +2539,7 @@ exports[`normalize options static watch is false 1`] = ` } `; -exports[`normalize options static watch is true 1`] = ` +exports[`normalize options > static watch is true 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2729,8 +2578,6 @@ exports[`normalize options static watch is true 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2746,7 +2593,7 @@ exports[`normalize options static watch is true 1`] = ` } `; -exports[`normalize options username and password 1`] = ` +exports[`normalize options > username and password 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2788,8 +2635,6 @@ exports[`normalize options username and password 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2805,7 +2650,7 @@ exports[`normalize options username and password 1`] = ` } `; -exports[`normalize options webSocketServer custom server class 1`] = ` +exports[`normalize options > webSocketServer custom server class 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2844,8 +2689,6 @@ exports[`normalize options webSocketServer custom server class 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2861,7 +2704,7 @@ exports[`normalize options webSocketServer custom server class 1`] = ` } `; -exports[`normalize options webSocketServer custom server path 1`] = ` +exports[`normalize options > webSocketServer custom server path 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2900,8 +2743,6 @@ exports[`normalize options webSocketServer custom server path 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, diff --git a/test/__snapshots__/validate-options.test.js.snap.webpack5 b/test/__snapshots__/validate-options.test.js.snap.webpack5 index 840a0143c1..43dbda2f6b 100644 --- a/test/__snapshots__/validate-options.test.js.snap.webpack5 +++ b/test/__snapshots__/validate-options.test.js.snap.webpack5 @@ -1,16 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`options validate should throw an error on the "allowedHosts" option with '[""]' value 1`] = ` -"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.allowedHosts[0] should be a non-empty string." -`; - -exports[`options validate should throw an error on the "allowedHosts" option with '[]' value 1`] = ` -"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.allowedHosts should be a non-empty array." -`; - -exports[`options validate should throw an error on the "allowedHosts" option with '123' value 1`] = ` +exports[`options > validate > should throw an error on the "allowedHosts" option with '123' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.allowedHosts should be one of these: [non-empty string, ...] (should not have fewer than 1 item) | "auto" | "all" | non-empty string @@ -24,7 +12,17 @@ exports[`options validate should throw an error on the "allowedHosts" option wit * options.allowedHosts should be a non-empty string." `; -exports[`options validate should throw an error on the "allowedHosts" option with 'false' value 1`] = ` +exports[`options > validate > should throw an error on the "allowedHosts" option with '[""]' value 1`] = ` +"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. + - options.allowedHosts[0] should be a non-empty string." +`; + +exports[`options > validate > should throw an error on the "allowedHosts" option with '[]' value 1`] = ` +"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. + - options.allowedHosts should be a non-empty array." +`; + +exports[`options > validate > should throw an error on the "allowedHosts" option with 'false' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.allowedHosts should be one of these: [non-empty string, ...] (should not have fewer than 1 item) | "auto" | "all" | non-empty string @@ -38,7 +36,7 @@ exports[`options validate should throw an error on the "allowedHosts" option wit * options.allowedHosts should be a non-empty string." `; -exports[`options validate should throw an error on the "allowedHosts" option with 'true' value 1`] = ` +exports[`options > validate > should throw an error on the "allowedHosts" option with 'true' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.allowedHosts should be one of these: [non-empty string, ...] (should not have fewer than 1 item) | "auto" | "all" | non-empty string @@ -52,21 +50,21 @@ exports[`options validate should throw an error on the "allowedHosts" option wit * options.allowedHosts should be a non-empty string." `; -exports[`options validate should throw an error on the "app" option with 'false' value 1`] = ` +exports[`options > validate > should throw an error on the "app" option with 'false' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.app should be an instance of function. -> Allows to use custom applications, such as 'connect', 'fastify', etc. -> Read more at https://webpack.js.org/configuration/dev-server/#devserverapp" `; -exports[`options validate should throw an error on the "app" option with 'test' value 1`] = ` +exports[`options > validate > should throw an error on the "app" option with 'test' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.app should be an instance of function. -> Allows to use custom applications, such as 'connect', 'fastify', etc. -> Read more at https://webpack.js.org/configuration/dev-server/#devserverapp" `; -exports[`options validate should throw an error on the "bonjour" option with '' value 1`] = ` +exports[`options > validate > should throw an error on the "bonjour" option with '' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.bonjour should be one of these: boolean | object { … } @@ -80,7 +78,19 @@ exports[`options validate should throw an error on the "bonjour" option with '' -> Read more at https://github.com/watson/bonjour#initializing" `; -exports[`options validate should throw an error on the "client" option with '{"logging":"silent"}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with 'whoops!' value 1`] = ` +"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. + - options.client should be one of these: + false | object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? } + -> Allows to specify options for client script in the browser or disable client script. + -> Read more at https://webpack.js.org/configuration/dev-server/#devserverclient + Details: + * options.client should be false. + * options.client should be an object: + object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? }" +`; + +exports[`options > validate > should throw an error on the "client" option with '{"logging":"silent"}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client.logging should be one of these: "none" | "error" | "warn" | "info" | "log" | "verbose" @@ -88,7 +98,7 @@ exports[`options validate should throw an error on the "client" option with '{"l -> Read more at https://webpack.js.org/configuration/dev-server/#logging" `; -exports[`options validate should throw an error on the "client" option with '{"logging":"whoops!"}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"logging":"whoops!"}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client.logging should be one of these: "none" | "error" | "warn" | "info" | "log" | "verbose" @@ -96,7 +106,7 @@ exports[`options validate should throw an error on the "client" option with '{"l -> Read more at https://webpack.js.org/configuration/dev-server/#logging" `; -exports[`options validate should throw an error on the "client" option with '{"overlay":""}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"overlay":""}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client should be one of these: false | object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? } @@ -113,13 +123,13 @@ exports[`options validate should throw an error on the "client" option with '{"o object { errors?, warnings?, runtimeErrors?, trustedTypesPolicyName? }" `; -exports[`options validate should throw an error on the "client" option with '{"overlay":{"arbitrary":""}}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"overlay":{"arbitrary":""}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client.overlay has an unknown property 'arbitrary'. These properties are valid: object { errors?, warnings?, runtimeErrors?, trustedTypesPolicyName? }" `; -exports[`options validate should throw an error on the "client" option with '{"overlay":{"errors":""}}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"overlay":{"errors":""}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client should be one of these: false | object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? } @@ -135,7 +145,7 @@ exports[`options validate should throw an error on the "client" option with '{"o -> Filter compiler errors. Return true to include and return false to exclude." `; -exports[`options validate should throw an error on the "client" option with '{"overlay":{"warnings":""}}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"overlay":{"warnings":""}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client should be one of these: false | object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? } @@ -151,7 +161,7 @@ exports[`options validate should throw an error on the "client" option with '{"o -> Filter compiler warnings. Return true to include and return false to exclude." `; -exports[`options validate should throw an error on the "client" option with '{"progress":""}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"progress":""}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client.progress should be one of these: true | false | "linear" | "circular" @@ -159,7 +169,7 @@ exports[`options validate should throw an error on the "client" option with '{"p -> Read more at https://webpack.js.org/configuration/dev-server/#progress" `; -exports[`options validate should throw an error on the "client" option with '{"reconnect":""}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"reconnect":""}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client should be one of these: false | object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? } @@ -175,13 +185,13 @@ exports[`options validate should throw an error on the "client" option with '{"r * options.client.reconnect should be a number (should be >= 0)." `; -exports[`options validate should throw an error on the "client" option with '{"unknownOption":true}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"unknownOption":true}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client has an unknown property 'unknownOption'. These properties are valid: object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? }" `; -exports[`options validate should throw an error on the "client" option with '{"webSocketTransport":true}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"webSocketTransport":true}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client should be one of these: false | object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? } @@ -189,39 +199,38 @@ exports[`options validate should throw an error on the "client" option with '{"w -> Read more at https://webpack.js.org/configuration/dev-server/#devserverclient Details: * options.client.webSocketTransport should be one of these: - "sockjs" | "ws" | non-empty string + "ws" | non-empty string -> Allows to set custom web socket transport to communicate with dev server. -> Read more at https://webpack.js.org/configuration/dev-server/#websockettransport Details: - * options.client.webSocketTransport should be one of these: - "sockjs" | "ws" + * options.client.webSocketTransport should be "ws". * options.client.webSocketTransport should be a non-empty string." `; -exports[`options validate should throw an error on the "client" option with '{"webSocketURL":{"hostname":""}}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"webSocketURL":{"hostname":""}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client.webSocketURL.hostname should be a non-empty string. -> Tells clients connected to devServer to use the provided hostname." `; -exports[`options validate should throw an error on the "client" option with '{"webSocketURL":{"hostname":true,"pathname":"","port":8080}}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"webSocketURL":{"hostname":true,"pathname":"","port":8080}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client.webSocketURL.hostname should be a non-empty string. -> Tells clients connected to devServer to use the provided hostname." `; -exports[`options validate should throw an error on the "client" option with '{"webSocketURL":{"pathname":true}}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"webSocketURL":{"pathname":true}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client.webSocketURL.pathname should be a string. -> Tells clients connected to devServer to use the provided path to connect." `; -exports[`options validate should throw an error on the "client" option with '{"webSocketURL":{"port":""}}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"webSocketURL":{"port":""}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client.webSocketURL.port should be a non-empty string." `; -exports[`options validate should throw an error on the "client" option with '{"webSocketURL":{"port":true}}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"webSocketURL":{"port":true}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client should be one of these: false | object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? } @@ -236,7 +245,7 @@ exports[`options validate should throw an error on the "client" option with '{"w * options.client.webSocketURL.port should be a non-empty string." `; -exports[`options validate should throw an error on the "client" option with '{"webSocketURL":{"username":123,"password":976}}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"webSocketURL":{"username":123,"password":976}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client should be one of these: false | object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? } @@ -249,26 +258,14 @@ exports[`options validate should throw an error on the "client" option with '{"w -> Tells clients connected to devServer to use the provided username to authenticate." `; -exports[`options validate should throw an error on the "client" option with 'whoops!' value 1`] = ` -"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.client should be one of these: - false | object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? } - -> Allows to specify options for client script in the browser or disable client script. - -> Read more at https://webpack.js.org/configuration/dev-server/#devserverclient - Details: - * options.client should be false. - * options.client should be an object: - object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? }" -`; - -exports[`options validate should throw an error on the "compress" option with '' value 1`] = ` +exports[`options > validate > should throw an error on the "compress" option with '' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.compress should be a boolean. -> Enables gzip compression for everything served. -> Read more at https://webpack.js.org/configuration/dev-server/#devservercompress" `; -exports[`options validate should throw an error on the "devMiddleware" option with '' value 1`] = ` +exports[`options > validate > should throw an error on the "devMiddleware" option with '' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.devMiddleware should be an object: object { … } @@ -276,18 +273,7 @@ exports[`options validate should throw an error on the "devMiddleware" option wi -> Read more at https://webpack.js.org/configuration/dev-server/#devserverdevmiddleware" `; -exports[`options validate should throw an error on the "headers" option with '[]' value 1`] = ` -"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.headers should be a non-empty array." -`; - -exports[`options validate should throw an error on the "headers" option with '[{"foo":"bar"}]' value 1`] = ` -"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.headers[0] has an unknown property 'foo'. These properties are valid: - object { key?, value? }" -`; - -exports[`options validate should throw an error on the "headers" option with '1' value 1`] = ` +exports[`options > validate > should throw an error on the "headers" option with '1' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.headers should be one of these: [object { key?, value? }, ...] (should not have fewer than 1 item) | object { … } | function @@ -301,7 +287,18 @@ exports[`options validate should throw an error on the "headers" option with '1' * options.headers should be an instance of function." `; -exports[`options validate should throw an error on the "headers" option with 'false' value 1`] = ` +exports[`options > validate > should throw an error on the "headers" option with '[]' value 1`] = ` +"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. + - options.headers should be a non-empty array." +`; + +exports[`options > validate > should throw an error on the "headers" option with '[{"foo":"bar"}]' value 1`] = ` +"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. + - options.headers[0] has an unknown property 'foo'. These properties are valid: + object { key?, value? }" +`; + +exports[`options > validate > should throw an error on the "headers" option with 'false' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.headers should be one of these: [object { key?, value? }, ...] (should not have fewer than 1 item) | object { … } | function @@ -315,7 +312,7 @@ exports[`options validate should throw an error on the "headers" option with 'fa * options.headers should be an instance of function." `; -exports[`options validate should throw an error on the "historyApiFallback" option with '' value 1`] = ` +exports[`options > validate > should throw an error on the "historyApiFallback" option with '' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.historyApiFallback should be one of these: boolean | object { … } @@ -329,12 +326,12 @@ exports[`options validate should throw an error on the "historyApiFallback" opti -> Read more at https://github.com/bripkens/connect-history-api-fallback#options" `; -exports[`options validate should throw an error on the "host" option with '' value 1`] = ` +exports[`options > validate > should throw an error on the "host" option with '' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.host should be a non-empty string." `; -exports[`options validate should throw an error on the "host" option with 'false' value 1`] = ` +exports[`options > validate > should throw an error on the "host" option with 'false' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.host should be one of these: "local-ip" | "local-ipv4" | "local-ipv6" | non-empty string @@ -346,7 +343,7 @@ exports[`options validate should throw an error on the "host" option with 'false * options.host should be a non-empty string." `; -exports[`options validate should throw an error on the "host" option with 'null' value 1`] = ` +exports[`options > validate > should throw an error on the "host" option with 'null' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.host should be one of these: "local-ip" | "local-ipv4" | "local-ipv6" | non-empty string @@ -358,7 +355,7 @@ exports[`options validate should throw an error on the "host" option with 'null' * options.host should be a non-empty string." `; -exports[`options validate should throw an error on the "hot" option with '' value 1`] = ` +exports[`options > validate > should throw an error on the "hot" option with '' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.hot should be one of these: boolean | "only" @@ -369,7 +366,7 @@ exports[`options validate should throw an error on the "hot" option with '' valu * options.hot should be "only"." `; -exports[`options validate should throw an error on the "hot" option with 'foo' value 1`] = ` +exports[`options > validate > should throw an error on the "hot" option with 'foo' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.hot should be one of these: boolean | "only" @@ -380,7 +377,7 @@ exports[`options validate should throw an error on the "hot" option with 'foo' v * options.hot should be "only"." `; -exports[`options validate should throw an error on the "ipc" option with '{}' value 1`] = ` +exports[`options > validate > should throw an error on the "ipc" option with 'false' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.ipc should be one of these: non-empty string | true @@ -388,11 +385,10 @@ exports[`options validate should throw an error on the "ipc" option with '{}' va -> Read more at https://webpack.js.org/configuration/dev-server/#devserveripc Details: * options.ipc should be a non-empty string. - * options.ipc should be a true. * options.ipc should be true." `; -exports[`options validate should throw an error on the "ipc" option with 'false' value 1`] = ` +exports[`options > validate > should throw an error on the "ipc" option with '{}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.ipc should be one of these: non-empty string | true @@ -400,29 +396,30 @@ exports[`options validate should throw an error on the "ipc" option with 'false' -> Read more at https://webpack.js.org/configuration/dev-server/#devserveripc Details: * options.ipc should be a non-empty string. + * options.ipc should be a true. * options.ipc should be true." `; -exports[`options validate should throw an error on the "liveReload" option with 'invalid' value 1`] = ` +exports[`options > validate > should throw an error on the "liveReload" option with 'invalid' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.liveReload should be a boolean. -> Enables reload/refresh the page(s) when file changes are detected (enabled by default). -> Read more at https://webpack.js.org/configuration/dev-server/#devserverlivereload" `; -exports[`options validate should throw an error on the "onListening" option with '' value 1`] = ` +exports[`options > validate > should throw an error on the "onListening" option with '' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.onListening should be an instance of function. -> Provides the ability to execute a custom function when dev server starts listening. -> Read more at https://webpack.js.org/configuration/dev-server/#devserveronlistening" `; -exports[`options validate should throw an error on the "open" option with '' value 1`] = ` +exports[`options > validate > should throw an error on the "open" option with '' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.open should be a non-empty string." `; -exports[`options validate should throw an error on the "open" option with '{"app":true}' value 1`] = ` +exports[`options > validate > should throw an error on the "open" option with '{"app":true}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.open should be one of these: [non-empty string | object { target?, app? }, ...] | boolean | non-empty string | object { target?, app? } @@ -439,13 +436,13 @@ exports[`options validate should throw an error on the "open" option with '{"app -> Open specified browser." `; -exports[`options validate should throw an error on the "open" option with '{"foo":"bar"}' value 1`] = ` +exports[`options > validate > should throw an error on the "open" option with '{"foo":"bar"}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.open has an unknown property 'foo'. These properties are valid: object { target?, app? }" `; -exports[`options validate should throw an error on the "open" option with '{"target":90}' value 1`] = ` +exports[`options > validate > should throw an error on the "open" option with '{"target":90}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.open should be one of these: [non-empty string | object { target?, app? }, ...] | boolean | non-empty string | object { target?, app? } @@ -461,22 +458,22 @@ exports[`options validate should throw an error on the "open" option with '{"tar * options.open.target should be a string." `; -exports[`options validate should throw an error on the "port" option with '' value 1`] = ` +exports[`options > validate > should throw an error on the "port" option with '' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.port should be a non-empty string." `; -exports[`options validate should throw an error on the "port" option with '-1' value 1`] = ` +exports[`options > validate > should throw an error on the "port" option with '-1' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.port should be >= 0 and <= 65535." `; -exports[`options validate should throw an error on the "port" option with '65536' value 1`] = ` +exports[`options > validate > should throw an error on the "port" option with '65536' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.port should be >= 0 and <= 65535." `; -exports[`options validate should throw an error on the "port" option with 'false' value 1`] = ` +exports[`options > validate > should throw an error on the "port" option with 'false' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.port should be one of these: number (should be >= 0 and <= 65535) | non-empty string | "auto" @@ -488,7 +485,7 @@ exports[`options validate should throw an error on the "port" option with 'false * options.port should be "auto"." `; -exports[`options validate should throw an error on the "port" option with 'null' value 1`] = ` +exports[`options > validate > should throw an error on the "port" option with 'null' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.port should be one of these: number (should be >= 0 and <= 65535) | non-empty string | "auto" @@ -500,7 +497,7 @@ exports[`options validate should throw an error on the "port" option with 'null' * options.port should be "auto"." `; -exports[`options validate should throw an error on the "proxy" option with '() => {}' value 1`] = ` +exports[`options > validate > should throw an error on the "proxy" option with '() => {}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.proxy should be an array: [object { … } | function, ...] @@ -508,7 +505,7 @@ exports[`options validate should throw an error on the "proxy" option with '() = -> Read more at https://webpack.js.org/configuration/dev-server/#devserverproxy" `; -exports[`options validate should throw an error on the "proxy" option with '{"/api":"http://localhost:3000"}' value 1`] = ` +exports[`options > validate > should throw an error on the "proxy" option with 'false' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.proxy should be an array: [object { … } | function, ...] @@ -516,7 +513,7 @@ exports[`options validate should throw an error on the "proxy" option with '{"/a -> Read more at https://webpack.js.org/configuration/dev-server/#devserverproxy" `; -exports[`options validate should throw an error on the "proxy" option with 'false' value 1`] = ` +exports[`options > validate > should throw an error on the "proxy" option with '{"/api":"http://localhost:3000"}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.proxy should be an array: [object { … } | function, ...] @@ -524,16 +521,16 @@ exports[`options validate should throw an error on the "proxy" option with 'fals -> Read more at https://webpack.js.org/configuration/dev-server/#devserverproxy" `; -exports[`options validate should throw an error on the "server" option with '{"type":"https","additional":"test"}' value 1`] = ` +exports[`options > validate > should throw an error on the "server" option with '{"type":"https","additional":"test"}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.server has an unknown property 'additional'. These properties are valid: object { type?, options? }" `; -exports[`options validate should throw an error on the "server" option with '{"type":"https","options":{"ca":true}}' value 1`] = ` +exports[`options > validate > should throw an error on the "server" option with '{"type":"https","options":{"ca":true}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.server should be one of these: - "http" | "https" | "spdy" | "http2" | function | non-empty string | object { type?, options? } + "http" | "https" | "http2" | function | non-empty string | object { type?, options? } -> Allows to set server and options (by default 'http'). -> Read more at https://webpack.js.org/configuration/dev-server/#devserverserver Details: @@ -547,10 +544,10 @@ exports[`options validate should throw an error on the "server" option with '{"t * options.server.options.ca should be an instance of Buffer." `; -exports[`options validate should throw an error on the "server" option with '{"type":"https","options":{"cert":true}}' value 1`] = ` +exports[`options > validate > should throw an error on the "server" option with '{"type":"https","options":{"cert":true}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.server should be one of these: - "http" | "https" | "spdy" | "http2" | function | non-empty string | object { type?, options? } + "http" | "https" | "http2" | function | non-empty string | object { type?, options? } -> Allows to set server and options (by default 'http'). -> Read more at https://webpack.js.org/configuration/dev-server/#devserverserver Details: @@ -564,10 +561,10 @@ exports[`options validate should throw an error on the "server" option with '{"t * options.server.options.cert should be an instance of Buffer." `; -exports[`options validate should throw an error on the "server" option with '{"type":"https","options":{"key":10}}' value 1`] = ` +exports[`options > validate > should throw an error on the "server" option with '{"type":"https","options":{"key":10}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.server should be one of these: - "http" | "https" | "spdy" | "http2" | function | non-empty string | object { type?, options? } + "http" | "https" | "http2" | function | non-empty string | object { type?, options? } -> Allows to set server and options (by default 'http'). -> Read more at https://webpack.js.org/configuration/dev-server/#devserverserver Details: @@ -581,16 +578,16 @@ exports[`options validate should throw an error on the "server" option with '{"t * options.server.options.key should be an instance of Buffer." `; -exports[`options validate should throw an error on the "server" option with '{"type":"https","options":{"passphrase":false}}' value 1`] = ` +exports[`options > validate > should throw an error on the "server" option with '{"type":"https","options":{"passphrase":false}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.server.options.passphrase should be a string. -> Passphrase for a pfx file." `; -exports[`options validate should throw an error on the "server" option with '{"type":"https","options":{"pfx":10}}' value 1`] = ` +exports[`options > validate > should throw an error on the "server" option with '{"type":"https","options":{"pfx":10}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.server should be one of these: - "http" | "https" | "spdy" | "http2" | function | non-empty string | object { type?, options? } + "http" | "https" | "http2" | function | non-empty string | object { type?, options? } -> Allows to set server and options (by default 'http'). -> Read more at https://webpack.js.org/configuration/dev-server/#devserverserver Details: @@ -604,46 +601,76 @@ exports[`options validate should throw an error on the "server" option with '{"t * options.server.options.pfx should be an instance of Buffer." `; -exports[`options validate should throw an error on the "server" option with '{"type":"https","options":{"requestCert":"false"}}' value 1`] = ` +exports[`options > validate > should throw an error on the "server" option with '{"type":"https","options":{"requestCert":"false"}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.server.options.requestCert should be a boolean. -> Request for an SSL certificate." `; -exports[`options validate should throw an error on the "setupMiddlewares" option with '10' value 1`] = ` +exports[`options > validate > should throw an error on the "setupMiddlewares" option with '10' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.setupMiddlewares should be an instance of function. -> Provides the ability to execute a custom function and apply custom middleware(s). -> Read more at https://webpack.js.org/configuration/dev-server/#devserversetupmiddlewares" `; -exports[`options validate should throw an error on the "setupMiddlewares" option with 'false' value 1`] = ` +exports[`options > validate > should throw an error on the "setupMiddlewares" option with 'false' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.setupMiddlewares should be an instance of function. -> Provides the ability to execute a custom function and apply custom middleware(s). -> Read more at https://webpack.js.org/configuration/dev-server/#devserversetupmiddlewares" `; -exports[`options validate should throw an error on the "setupMiddlewares" option with 'true' value 1`] = ` +exports[`options > validate > should throw an error on the "setupMiddlewares" option with 'true' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.setupMiddlewares should be an instance of function. -> Provides the ability to execute a custom function and apply custom middleware(s). -> Read more at https://webpack.js.org/configuration/dev-server/#devserversetupmiddlewares" `; -exports[`options validate should throw an error on the "static" option with '' value 1`] = ` +exports[`options > validate > should throw an error on the "static" option with '' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.static should be a non-empty string." `; -exports[`options validate should throw an error on the "static" option with '{"directory":false}' value 1`] = ` +exports[`options > validate > should throw an error on the "static" option with '0' value 1`] = ` +"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. + - options.static should be one of these: + [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] | boolean | non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? } + -> Allows to configure options for serving static files from directory (by default 'public' directory). + -> Read more at https://webpack.js.org/configuration/dev-server/#devserverstatic + Details: + * options.static should be an array: + [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] + * options.static should be a boolean. + * options.static should be a non-empty string. + * options.static should be an object: + object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }" +`; + +exports[`options > validate > should throw an error on the "static" option with 'null' value 1`] = ` +"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. + - options.static should be one of these: + [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] | boolean | non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? } + -> Allows to configure options for serving static files from directory (by default 'public' directory). + -> Read more at https://webpack.js.org/configuration/dev-server/#devserverstatic + Details: + * options.static should be an array: + [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] + * options.static should be a boolean. + * options.static should be a non-empty string. + * options.static should be an object: + object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }" +`; + +exports[`options > validate > should throw an error on the "static" option with '{"directory":false}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.static.directory should be a non-empty string. -> Directory for static contents. -> Read more at https://webpack.js.org/configuration/dev-server/#directory" `; -exports[`options validate should throw an error on the "static" option with '{"publicPath":false}' value 1`] = ` +exports[`options > validate > should throw an error on the "static" option with '{"publicPath":false}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.static should be one of these: [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] | boolean | non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? } @@ -660,7 +687,7 @@ exports[`options validate should throw an error on the "static" option with '{"p * options.static.publicPath should be a string." `; -exports[`options validate should throw an error on the "static" option with '{"serveIndex":"true"}' value 1`] = ` +exports[`options > validate > should throw an error on the "static" option with '{"serveIndex":"true"}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.static should be one of these: [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] | boolean | non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? } @@ -677,7 +704,7 @@ exports[`options validate should throw an error on the "static" option with '{"s object { … }" `; -exports[`options validate should throw an error on the "static" option with '{"watch":10}' value 1`] = ` +exports[`options > validate > should throw an error on the "static" option with '{"watch":10}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.static should be one of these: [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] | boolean | non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? } @@ -696,37 +723,35 @@ exports[`options validate should throw an error on the "static" option with '{"w -> Read more at https://github.com/paulmillr/chokidar#api" `; -exports[`options validate should throw an error on the "static" option with '0' value 1`] = ` +exports[`options > validate > should throw an error on the "watchFiles" option with '123' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.static should be one of these: - [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] | boolean | non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? } - -> Allows to configure options for serving static files from directory (by default 'public' directory). - -> Read more at https://webpack.js.org/configuration/dev-server/#devserverstatic + - options.watchFiles should be one of these: + [non-empty string | object { paths?, options? }, ...] | non-empty string | object { paths?, options? } + -> Allows to configure list of globs/directories/files to watch for file changes. + -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwatchfiles Details: - * options.static should be an array: - [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] - * options.static should be a boolean. - * options.static should be a non-empty string. - * options.static should be an object: - object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }" + * options.watchFiles should be an array: + [non-empty string | object { paths?, options? }, ...] + * options.watchFiles should be a non-empty string. + * options.watchFiles should be an object: + object { paths?, options? }" `; -exports[`options validate should throw an error on the "static" option with 'null' value 1`] = ` +exports[`options > validate > should throw an error on the "watchFiles" option with 'false' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.static should be one of these: - [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] | boolean | non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? } - -> Allows to configure options for serving static files from directory (by default 'public' directory). - -> Read more at https://webpack.js.org/configuration/dev-server/#devserverstatic + - options.watchFiles should be one of these: + [non-empty string | object { paths?, options? }, ...] | non-empty string | object { paths?, options? } + -> Allows to configure list of globs/directories/files to watch for file changes. + -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwatchfiles Details: - * options.static should be an array: - [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] - * options.static should be a boolean. - * options.static should be a non-empty string. - * options.static should be an object: - object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }" + * options.watchFiles should be an array: + [non-empty string | object { paths?, options? }, ...] + * options.watchFiles should be a non-empty string. + * options.watchFiles should be an object: + object { paths?, options? }" `; -exports[`options validate should throw an error on the "watchFiles" option with '{"options":false}' value 1`] = ` +exports[`options > validate > should throw an error on the "watchFiles" option with '{"options":false}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.watchFiles.options should be an object: object { … } @@ -734,7 +759,7 @@ exports[`options validate should throw an error on the "watchFiles" option with -> Read more at https://github.com/paulmillr/chokidar#api" `; -exports[`options validate should throw an error on the "watchFiles" option with '{"paths":false}' value 1`] = ` +exports[`options > validate > should throw an error on the "watchFiles" option with '{"paths":false}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.watchFiles should be one of these: [non-empty string | object { paths?, options? }, ...] | non-empty string | object { paths?, options? } @@ -750,106 +775,74 @@ exports[`options validate should throw an error on the "watchFiles" option with * options.watchFiles.paths should be a non-empty string." `; -exports[`options validate should throw an error on the "watchFiles" option with '123' value 1`] = ` +exports[`options > validate > should throw an error on the "webSocketServer" option with 'null' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.watchFiles should be one of these: - [non-empty string | object { paths?, options? }, ...] | non-empty string | object { paths?, options? } - -> Allows to configure list of globs/directories/files to watch for file changes. - -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwatchfiles + - options.webSocketServer should be one of these: + false | "ws" | non-empty string | function | object { type?, options? } + -> Allows to set web socket server and options (by default 'ws'). + -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwebsocketserver Details: - * options.watchFiles should be an array: - [non-empty string | object { paths?, options? }, ...] - * options.watchFiles should be a non-empty string. - * options.watchFiles should be an object: - object { paths?, options? }" + * options.webSocketServer should be one of these: + false | "ws" + Details: + * options.webSocketServer should be false. + * options.webSocketServer should be "ws". + * options.webSocketServer should be a non-empty string. + * options.webSocketServer should be an instance of function. + * options.webSocketServer should be an object: + object { type?, options? }" `; -exports[`options validate should throw an error on the "watchFiles" option with 'false' value 1`] = ` +exports[`options > validate > should throw an error on the "webSocketServer" option with 'true' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.watchFiles should be one of these: - [non-empty string | object { paths?, options? }, ...] | non-empty string | object { paths?, options? } - -> Allows to configure list of globs/directories/files to watch for file changes. - -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwatchfiles + - options.webSocketServer should be one of these: + false | "ws" | non-empty string | function | object { type?, options? } + -> Allows to set web socket server and options (by default 'ws'). + -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwebsocketserver Details: - * options.watchFiles should be an array: - [non-empty string | object { paths?, options? }, ...] - * options.watchFiles should be a non-empty string. - * options.watchFiles should be an object: - object { paths?, options? }" + * options.webSocketServer should be one of these: + false | "ws" + Details: + * options.webSocketServer should be false. + * options.webSocketServer should be "ws". + * options.webSocketServer should be a non-empty string. + * options.webSocketServer should be an instance of function. + * options.webSocketServer should be an object: + object { type?, options? }" `; -exports[`options validate should throw an error on the "webSocketServer" option with '{"notAnOption":true}' value 1`] = ` +exports[`options > validate > should throw an error on the "webSocketServer" option with '{"notAnOption":true}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.webSocketServer has an unknown property 'notAnOption'. These properties are valid: object { type?, options? }" `; -exports[`options validate should throw an error on the "webSocketServer" option with '{"type":false}' value 1`] = ` +exports[`options > validate > should throw an error on the "webSocketServer" option with '{"type":false}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.webSocketServer should be one of these: - false | "sockjs" | "ws" | non-empty string | function | object { type?, options? } + false | "ws" | non-empty string | function | object { type?, options? } -> Allows to set web socket server and options (by default 'ws'). -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwebsocketserver Details: * options.webSocketServer.type should be one of these: - "sockjs" | "ws" | non-empty string | function + "ws" | non-empty string | function Details: - * options.webSocketServer.type should be one of these: - "sockjs" | "ws" + * options.webSocketServer.type should be "ws". * options.webSocketServer.type should be a non-empty string. * options.webSocketServer.type should be an instance of function." `; -exports[`options validate should throw an error on the "webSocketServer" option with '{"type":true}' value 1`] = ` +exports[`options > validate > should throw an error on the "webSocketServer" option with '{"type":true}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.webSocketServer should be one of these: - false | "sockjs" | "ws" | non-empty string | function | object { type?, options? } + false | "ws" | non-empty string | function | object { type?, options? } -> Allows to set web socket server and options (by default 'ws'). -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwebsocketserver Details: * options.webSocketServer.type should be one of these: - "sockjs" | "ws" | non-empty string | function + "ws" | non-empty string | function Details: - * options.webSocketServer.type should be one of these: - "sockjs" | "ws" + * options.webSocketServer.type should be "ws". * options.webSocketServer.type should be a non-empty string. * options.webSocketServer.type should be an instance of function." `; - -exports[`options validate should throw an error on the "webSocketServer" option with 'null' value 1`] = ` -"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.webSocketServer should be one of these: - false | "sockjs" | "ws" | non-empty string | function | object { type?, options? } - -> Allows to set web socket server and options (by default 'ws'). - -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwebsocketserver - Details: - * options.webSocketServer should be one of these: - false | "sockjs" | "ws" - Details: - * options.webSocketServer should be false. - * options.webSocketServer should be one of these: - "sockjs" | "ws" - * options.webSocketServer should be a non-empty string. - * options.webSocketServer should be an instance of function. - * options.webSocketServer should be an object: - object { type?, options? }" -`; - -exports[`options validate should throw an error on the "webSocketServer" option with 'true' value 1`] = ` -"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.webSocketServer should be one of these: - false | "sockjs" | "ws" | non-empty string | function | object { type?, options? } - -> Allows to set web socket server and options (by default 'ws'). - -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwebsocketserver - Details: - * options.webSocketServer should be one of these: - false | "sockjs" | "ws" - Details: - * options.webSocketServer should be false. - * options.webSocketServer should be one of these: - "sockjs" | "ws" - * options.webSocketServer should be a non-empty string. - * options.webSocketServer should be an instance of function. - * options.webSocketServer should be an object: - object { type?, options? }" -`; diff --git a/test/cli/__snapshots__/basic.test.js.snap.webpack5 b/test/cli/__snapshots__/basic.test.js.snap.webpack5 index 7265ad5b12..d9198c24f1 100644 --- a/test/cli/__snapshots__/basic.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/basic.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`basic basic should accept the promise function of webpack.config.js: stderr 1`] = ` +exports[`basic > basic > should accept the promise function of webpack.config.js 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -8,21 +6,21 @@ exports[`basic basic should accept the promise function of webpack.config.js: st [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`basic basic should work using "--host localhost --port ": stderr 1`] = ` +exports[`basic > basic > should work 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ + [webpack-dev-server] On Your Network (IPv4): http://:/ + [webpack-dev-server] On Your Network (IPv6): http://[]:/ [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`basic basic should work using multi compiler mode: stderr 1`] = ` +exports[`basic > basic > should work using "--host localhost --port " 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ - [webpack-dev-server] On Your Network (IPv4): http://:/ - [webpack-dev-server] On Your Network (IPv6): http://[]:/ [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`basic basic should work: stderr 1`] = ` +exports[`basic > basic > should work using multi compiler mode 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -30,7 +28,7 @@ exports[`basic basic should work: stderr 1`] = ` [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`basic should output help should generate correct cli flags 1`] = ` +exports[`basic > should output help > should generate correct cli flags 1`] = ` "Usage: webpack serve|server|s [entries...] [options] Run the webpack dev server and watch for source file changes while serving. @@ -39,14 +37,13 @@ Options: -c, --config Provide path to one or more webpack configuration files to process, e.g. "./webpack.config.js". --config-name Name(s) of particular configuration(s) to use if configuration file exports an array of multiple configurations. -m, --merge Merge two or more configurations using 'webpack-merge'. - --disable-interpret Disable interpret for loading the config file. --env Environment variables passed to the configuration when it is a function, e.g. "myvar" or "myvar=myval". - --node-env Sets process.env.NODE_ENV to the specified value for access within the configuration.(Deprecated: Use '--config-node-env' instead) --config-node-env Sets process.env.NODE_ENV to the specified value for access within the configuration. --analyze It invokes webpack-bundle-analyzer plugin to get bundle information. --progress [value] Print compilation progress during build. -j, --json [pathToJsonFile] Prints result as JSON or store it in a file. --fail-on-warnings Stop webpack-cli process with non-zero exit code on warnings from webpack. + --disable-interpret Disable interpret for loading the config file. -d, --devtool A developer tool to enhance debugging (false | eval | [inline-|hidden-|eval-][nosources-][cheap-[module-]]source-map). --no-devtool Negative 'devtool' option. --entry A module that is loaded upon startup. Only the last one is exported. @@ -55,13 +52,9 @@ Options: --name Name of the configuration. Used when loading multiple configurations. -o, --output-path The output directory as **absolute path** (required). --stats [value] Stats options object or preset name. - --no-stats Negative 'stats' option. -t, --target Environment to build for. Environment to build for. An array of environments to build for all of them when possible. - --no-target Negative 'target' option. -w, --watch Enter watch mode, which rebuilds on file change. - --no-watch Negative 'watch' option. --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Negative 'watch-options-stdin' option. --allowed-hosts Allows to enumerate the hosts from which access to the dev server are allowed (useful when you are proxying dev server, by default is 'auto'). --allowed-hosts-reset Clear all items provided in 'allowedHosts' configuration. Allows to enumerate the hosts from which access to the dev server are allowed (useful when you are proxying dev server, by default is 'auto'). --bonjour Allows to broadcasts dev server via ZeroConf networking on start. @@ -139,7 +132,7 @@ Options: Global options: --color Enable colors on console. --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and other packages. -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. diff --git a/test/cli/__snapshots__/bonjour-option.test.js.snap.webpack5 b/test/cli/__snapshots__/bonjour-option.test.js.snap.webpack5 index 98b5687372..bfbb3207cf 100644 --- a/test/cli/__snapshots__/bonjour-option.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/bonjour-option.test.js.snap.webpack5 @@ -1,8 +1,5 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`"bonjour" CLI option should work using "--bonjour and --server-type=https" 1`] = ` -" [webpack-dev-server] Generating SSL certificate... - [webpack-dev-server] SSL certificate: /node_modules/.cache/webpack-dev-server/server.pem +exports[`"bonjour" CLI option > should work using "--bonjour and --server-type=https" 1`] = ` +" [webpack-dev-server] SSL certificate: /node_modules/.cache/webpack-dev-server/server.pem [webpack-dev-server] Project is running at: Loopback: https://localhost:/, https://:/, https://[]:/ [webpack-dev-server] On Your Network (IPv4): https://:/ @@ -11,7 +8,7 @@ exports[`"bonjour" CLI option should work using "--bonjour and --server-type=htt [webpack-dev-server] Broadcasting "https" with subtype of "webpack" via ZeroConf DNS (Bonjour)" `; -exports[`"bonjour" CLI option should work using "--bonjour" 1`] = ` +exports[`"bonjour" CLI option > should work using "--bonjour" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -20,7 +17,7 @@ exports[`"bonjour" CLI option should work using "--bonjour" 1`] = ` [webpack-dev-server] Broadcasting "http" with subtype of "webpack" via ZeroConf DNS (Bonjour)" `; -exports[`"bonjour" CLI option should work using "--no-bonjour" 1`] = ` +exports[`"bonjour" CLI option > should work using "--no-bonjour" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ diff --git a/test/cli/__snapshots__/colors.test.js.snap.webpack5 b/test/cli/__snapshots__/colors.test.js.snap.webpack5 index b507ff813f..fe59574bb5 100644 --- a/test/cli/__snapshots__/colors.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/colors.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`colors should work and do not use colors using configuration with disabled colors: stderr 1`] = ` +exports[`colors > should work and do not use colors using configuration with disabled colors 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -8,7 +6,7 @@ exports[`colors should work and do not use colors using configuration with disab [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`colors should work do not use colors using "--no-color": stderr 1`] = ` +exports[`colors > should work do not use colors using "--no-color" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -16,7 +14,7 @@ exports[`colors should work do not use colors using "--no-color": stderr 1`] = ` [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`colors should work use colors by default: stderr 1`] = ` +exports[`colors > should work use colors by default 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -24,7 +22,7 @@ exports[`colors should work use colors by default: stderr 1`] = ` [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`colors should work use colors using "--color": stderr 1`] = ` +exports[`colors > should work use colors using "--color" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -32,7 +30,7 @@ exports[`colors should work use colors using "--color": stderr 1`] = ` [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`colors should work use colors using configuration with enabled colors: stderr 1`] = ` +exports[`colors > should work use colors using configuration with enabled colors 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ diff --git a/test/cli/__snapshots__/historyApiFallback-option.test.js.snap.webpack5 b/test/cli/__snapshots__/historyApiFallback-option.test.js.snap.webpack5 index bc6ae29da6..a3a2cddc06 100644 --- a/test/cli/__snapshots__/historyApiFallback-option.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/historyApiFallback-option.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`"historyApiFallback" CLI option should work using "--history-api-fallback" 1`] = ` +exports[`"historyApiFallback" CLI option > should work using "--history-api-fallback" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -9,7 +7,7 @@ exports[`"historyApiFallback" CLI option should work using "--history-api-fallba [webpack-dev-server] 404s will fallback to '/index.html'" `; -exports[`"historyApiFallback" CLI option should work using "--no-history-api-fallback" 1`] = ` +exports[`"historyApiFallback" CLI option > should work using "--no-history-api-fallback" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ diff --git a/test/cli/__snapshots__/host-option.test.js.snap.webpack5 b/test/cli/__snapshots__/host-option.test.js.snap.webpack5 index db9cf49b4a..ccb658ce70 100644 --- a/test/cli/__snapshots__/host-option.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/host-option.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`"host" CLI option should work using "--host ::" (IPv6): stderr 1`] = ` +exports[`"host" CLI option > should work using "--host 0.0.0.0" (IPv4) 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -8,45 +6,45 @@ exports[`"host" CLI option should work using "--host ::" (IPv6): stderr 1`] = ` [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"host" CLI option should work using "--host ::1" (IPv6): stderr 1`] = ` +exports[`"host" CLI option > should work using "--host 127.0.0.1" (IPv4) 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"host" CLI option should work using "--host ": stderr 1`] = ` +exports[`"host" CLI option > should work using "--host ::" (IPv6) 1`] = ` " [webpack-dev-server] Project is running at: + Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ + [webpack-dev-server] On Your Network (IPv6): http://[]:/ [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"host" CLI option should work using "--host 0.0.0.0" (IPv4): stderr 1`] = ` +exports[`"host" CLI option > should work using "--host ::1" (IPv6) 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ - [webpack-dev-server] On Your Network (IPv4): http://:/ - [webpack-dev-server] On Your Network (IPv6): http://[]:/ [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"host" CLI option should work using "--host 127.0.0.1" (IPv4): stderr 1`] = ` +exports[`"host" CLI option > should work using "--host " 1`] = ` " [webpack-dev-server] Project is running at: - Loopback: http://localhost:/, http://:/, http://[]:/ + [webpack-dev-server] On Your Network (IPv4): http://:/ [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"host" CLI option should work using "--host local-ip": stderr 1`] = ` +exports[`"host" CLI option > should work using "--host local-ip" 1`] = ` " [webpack-dev-server] Project is running at: [webpack-dev-server] On Your Network (IPv4): http://:/ [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"host" CLI option should work using "--host local-ipv4": stderr 1`] = ` +exports[`"host" CLI option > should work using "--host local-ipv4" 1`] = ` " [webpack-dev-server] Project is running at: [webpack-dev-server] On Your Network (IPv4): http://:/ [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"host" CLI option should work using "--host localhost": stderr 1`] = ` +exports[`"host" CLI option > should work using "--host localhost" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] Content not from webpack is served from '/public' directory" diff --git a/test/cli/__snapshots__/ipc-option.test.js.snap.webpack5 b/test/cli/__snapshots__/ipc-option.test.js.snap.webpack5 index 0eef347cf9..e32e695559 100644 --- a/test/cli/__snapshots__/ipc-option.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/ipc-option.test.js.snap.webpack5 @@ -1,11 +1,9 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`"ipc" CLI option should work using "--ipc": stderr 1`] = ` +exports[`"ipc" CLI option > should work using "--ipc" 1`] = ` " [webpack-dev-server] Project is running at: "/webpack-dev-server.sock" [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"ipc" CLI option should work using "--ipc=": stderr 1`] = ` +exports[`"ipc" CLI option > should work using "--ipc=" 1`] = ` " [webpack-dev-server] Project is running at: "/webpack-dev-server.cli.sock" [webpack-dev-server] Content not from webpack is served from '/public' directory" `; diff --git a/test/cli/__snapshots__/port-option.test.js.snap.webpack5 b/test/cli/__snapshots__/port-option.test.js.snap.webpack5 index 5b4cc76e34..e9b950d2dd 100644 --- a/test/cli/__snapshots__/port-option.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/port-option.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`"port" CLI option should work using "--port ": stderr 1`] = ` +exports[`"port" CLI option > should work using "--port " 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -8,7 +6,7 @@ exports[`"port" CLI option should work using "--port ": stderr 1`] = ` [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"port" CLI option should work using "--port auto": stderr 1`] = ` +exports[`"port" CLI option > should work using "--port auto" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ diff --git a/test/cli/__snapshots__/server-option.test.js.snap.webpack5 b/test/cli/__snapshots__/server-option.test.js.snap.webpack5 index 62011435d3..3205463969 100644 --- a/test/cli/__snapshots__/server-option.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/server-option.test.js.snap.webpack5 @@ -1,8 +1,5 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`"server" CLI options should work using "--no-server-options-request-cert" 1`] = ` -" [webpack-dev-server] Generating SSL certificate... - [webpack-dev-server] SSL certificate: /node_modules/.cache/webpack-dev-server/server.pem +exports[`"server" CLI options > should work using "--no-server-options-request-cert" 1`] = ` +" [webpack-dev-server] SSL certificate: /node_modules/.cache/webpack-dev-server/server.pem [webpack-dev-server] Project is running at: Loopback: https://localhost:/, https://:/, https://[]:/ [webpack-dev-server] On Your Network (IPv4): https://:/ @@ -10,7 +7,7 @@ exports[`"server" CLI options should work using "--no-server-options-request-cer [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"server" CLI options should work using "--server-options-key --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert --server-options-ca " 1`] = ` +exports[`"server" CLI options > should work using "--server-options-key --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert --server-options-ca " 1`] = ` " [webpack-dev-server] Project is running at: Loopback: https://localhost:/, https://:/, https://[]:/ [webpack-dev-server] On Your Network (IPv4): https://:/ @@ -18,7 +15,7 @@ exports[`"server" CLI options should work using "--server-options-key --s [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"server" CLI options should work using "--server-options-key --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert " 1`] = ` +exports[`"server" CLI options > should work using "--server-options-key --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert " 1`] = ` " [webpack-dev-server] Project is running at: Loopback: https://localhost:/, https://:/, https://[]:/ [webpack-dev-server] On Your Network (IPv4): https://:/ @@ -26,7 +23,7 @@ exports[`"server" CLI options should work using "--server-options-key --s [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"server" CLI options should work using "--server-options-key-reset --server-options-key --server-options-pfx-reset --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert-reset --server-options-cert --server-options-ca-reset --server-options-ca " 1`] = ` +exports[`"server" CLI options > should work using "--server-options-key-reset --server-options-key --server-options-pfx-reset --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert-reset --server-options-cert --server-options-ca-reset --server-options-ca " 1`] = ` " [webpack-dev-server] Project is running at: Loopback: https://localhost:/, https://:/, https://[]:/ [webpack-dev-server] On Your Network (IPv4): https://:/ @@ -34,9 +31,8 @@ exports[`"server" CLI options should work using "--server-options-key-reset --se [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"server" CLI options should work using "--server-options-request-cert" 1`] = ` -" [webpack-dev-server] Generating SSL certificate... - [webpack-dev-server] SSL certificate: /node_modules/.cache/webpack-dev-server/server.pem +exports[`"server" CLI options > should work using "--server-options-request-cert" 1`] = ` +" [webpack-dev-server] SSL certificate: /node_modules/.cache/webpack-dev-server/server.pem [webpack-dev-server] Project is running at: Loopback: https://localhost:/, https://:/, https://[]:/ [webpack-dev-server] On Your Network (IPv4): https://:/ @@ -44,7 +40,7 @@ exports[`"server" CLI options should work using "--server-options-request-cert" [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"server" CLI options should work using "--server-type http" 1`] = ` +exports[`"server" CLI options > should work using "--server-type http" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -52,19 +48,8 @@ exports[`"server" CLI options should work using "--server-type http" 1`] = ` [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"server" CLI options should work using "--server-type https" 1`] = ` -" [webpack-dev-server] Generating SSL certificate... - [webpack-dev-server] SSL certificate: /node_modules/.cache/webpack-dev-server/server.pem - [webpack-dev-server] Project is running at: - Loopback: https://localhost:/, https://:/, https://[]:/ - [webpack-dev-server] On Your Network (IPv4): https://:/ - [webpack-dev-server] On Your Network (IPv6): https://[]:/ - [webpack-dev-server] Content not from webpack is served from '/public' directory" -`; - -exports[`"server" CLI options should work using "--server-type spdy" 1`] = ` -" [webpack-dev-server] Generating SSL certificate... - [webpack-dev-server] SSL certificate: /node_modules/.cache/webpack-dev-server/server.pem +exports[`"server" CLI options > should work using "--server-type https" 1`] = ` +" [webpack-dev-server] SSL certificate: /node_modules/.cache/webpack-dev-server/server.pem [webpack-dev-server] Project is running at: Loopback: https://localhost:/, https://:/, https://[]:/ [webpack-dev-server] On Your Network (IPv4): https://:/ diff --git a/test/cli/__snapshots__/static-option.test.js.snap.webpack5 b/test/cli/__snapshots__/static-option.test.js.snap.webpack5 index e7e7fbe670..68f0f803b8 100644 --- a/test/cli/__snapshots__/static-option.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/static-option.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`"static" CLI option should work using "--no-static-serve-index": stderr 1`] = ` +exports[`"static" CLI option > should work using "--no-static-serve-index" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -8,7 +6,7 @@ exports[`"static" CLI option should work using "--no-static-serve-index": stderr [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"static" CLI option should work using "--no-static-watch": stderr 1`] = ` +exports[`"static" CLI option > should work using "--no-static-watch" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -16,7 +14,7 @@ exports[`"static" CLI option should work using "--no-static-watch": stderr 1`] = [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"static" CLI option should work using "--static new-static --static other-static": stderr 1`] = ` +exports[`"static" CLI option > should work using "--static new-static --static other-static" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -24,7 +22,7 @@ exports[`"static" CLI option should work using "--static new-static --static oth [webpack-dev-server] Content not from webpack is served from 'new-static, other-static' directory" `; -exports[`"static" CLI option should work using "--static new-static": stderr 1`] = ` +exports[`"static" CLI option > should work using "--static new-static" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -32,7 +30,7 @@ exports[`"static" CLI option should work using "--static new-static": stderr 1`] [webpack-dev-server] Content not from webpack is served from 'new-static' directory" `; -exports[`"static" CLI option should work using "--static": stderr 1`] = ` +exports[`"static" CLI option > should work using "--static" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -40,7 +38,7 @@ exports[`"static" CLI option should work using "--static": stderr 1`] = ` [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"static" CLI option should work using "--static-directory static-dir": stderr 1`] = ` +exports[`"static" CLI option > should work using "--static-directory static-dir" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -48,7 +46,7 @@ exports[`"static" CLI option should work using "--static-directory static-dir": [webpack-dev-server] Content not from webpack is served from 'static-dir' directory" `; -exports[`"static" CLI option should work using "--static-public-path /public": stderr 1`] = ` +exports[`"static" CLI option > should work using "--static-public-path /public" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -56,7 +54,7 @@ exports[`"static" CLI option should work using "--static-public-path /public": s [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"static" CLI option should work using "--static-public-path-reset": stderr 1`] = ` +exports[`"static" CLI option > should work using "--static-public-path-reset" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -64,7 +62,7 @@ exports[`"static" CLI option should work using "--static-public-path-reset": std [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"static" CLI option should work using "--static-reset --static-directory new-static-directory": stderr 1`] = ` +exports[`"static" CLI option > should work using "--static-reset --static-directory new-static-directory" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -72,7 +70,7 @@ exports[`"static" CLI option should work using "--static-reset --static-director [webpack-dev-server] Content not from webpack is served from 'new-static-directory' directory" `; -exports[`"static" CLI option should work using "--static-reset": stderr 1`] = ` +exports[`"static" CLI option > should work using "--static-reset" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -80,7 +78,7 @@ exports[`"static" CLI option should work using "--static-reset": stderr 1`] = ` [webpack-dev-server] Content not from webpack is served from 'new-static-after-reset' directory" `; -exports[`"static" CLI option should work using "--static-serve-index": stderr 1`] = ` +exports[`"static" CLI option > should work using "--static-serve-index" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -88,7 +86,7 @@ exports[`"static" CLI option should work using "--static-serve-index": stderr 1` [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"static" CLI option should work using "--static-watch": stderr 1`] = ` +exports[`"static" CLI option > should work using "--static-watch" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ diff --git a/test/cli/__snapshots__/watchFiles-option.test.js.snap.webpack5 b/test/cli/__snapshots__/watchFiles-option.test.js.snap.webpack5 index fcd2eada1d..5662d95a2e 100644 --- a/test/cli/__snapshots__/watchFiles-option.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/watchFiles-option.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`"watchFiles" CLI option should work using "--watch-files --watch-files ": stderr 1`] = ` +exports[`"watchFiles" CLI option > should work using "--watch-files --watch-files " 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -8,7 +6,7 @@ exports[`"watchFiles" CLI option should work using "--watch-files --watc [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"watchFiles" CLI option should work using "--watch-files ": stderr 1`] = ` +exports[`"watchFiles" CLI option > should work using "--watch-files " 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -16,7 +14,7 @@ exports[`"watchFiles" CLI option should work using "--watch-files ": stde [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"watchFiles" CLI option should work using "--watch-files-reset --watch-files ": stderr 1`] = ` +exports[`"watchFiles" CLI option > should work using "--watch-files-reset --watch-files " 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ diff --git a/test/cli/allowedHosts-option.test.js b/test/cli/allowedHosts-option.test.js index 548314d148..575c5000ae 100644 --- a/test/cli/allowedHosts-option.test.js +++ b/test/cli/allowedHosts-option.test.js @@ -1,7 +1,9 @@ -"use strict"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import { testBin } from "../helpers/test-bin.js"; +import portsMap from "../ports-map.js"; -const { testBin } = require("../helpers/test-bin"); -const port = require("../ports-map")["cli-allowed-hosts"]; +const port = portsMap["cli-allowed-hosts"]; describe('"allowedHosts" CLI option', () => { it('should work using "--allowed-hosts auto"', async () => { diff --git a/test/cli/basic.test.js b/test/cli/basic.test.js index cf5b4a4964..988b020884 100644 --- a/test/cli/basic.test.js +++ b/test/cli/basic.test.js @@ -1,27 +1,29 @@ -"use strict"; - -const path = require("node:path"); -const util = require("node:util"); -const execa = require("execa"); -const { normalizeStderr, testBin } = require("../helpers/test-bin"); -const port = require("../ports-map")["cli-basic"]; +import path from "node:path"; +import { describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import util from "node:util"; +import execa from "execa"; +import { expect } from "expect"; +import { normalizeStderr, testBin } from "../helpers/test-bin.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap["cli-basic"]; const isMacOS = process.platform === "darwin"; describe("basic", () => { describe("should output help", () => { - (isMacOS ? it.skip : it)("should generate correct cli flags", async () => { + (isMacOS ? it.skip : it)("should generate correct cli flags", async (t) => { const { exitCode, stdout } = await testBin(["--help"]); - // eslint-disable-next-line jest/no-standalone-expect expect(exitCode).toBe(0); - // eslint-disable-next-line jest/no-standalone-expect - expect(util.stripVTControlCharacters(stdout)).toMatchSnapshot(); + t.assert.snapshot(util.stripVTControlCharacters(stdout)); }); }); describe("basic", () => { - it("should work", async () => { + it("should work", async (t) => { const { exitCode, stderr } = await testBin([ // Ideally it should be empty to test without arguments, unfortunately it takes 8080 port and other test can failed "--port", @@ -29,10 +31,10 @@ describe("basic", () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--host localhost --port "', async () => { + it('should work using "--host localhost --port "', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -41,10 +43,10 @@ describe("basic", () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr)); }); - it("should accept the promise function of webpack.config.js", async () => { + it("should accept the promise function of webpack.config.js", async (t) => { const { exitCode, stderr } = await testBin([ "--config", path.resolve( @@ -56,10 +58,10 @@ describe("basic", () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it("should work using multi compiler mode", async () => { + it("should work using multi compiler mode", async (t) => { const { exitCode, stderr } = await testBin([ "--config", path.resolve( @@ -71,130 +73,136 @@ describe("basic", () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it("should exit the process when SIGINT is detected", (done) => { - const cliPath = path.resolve( - __dirname, - "../../bin/webpack-dev-server.js", - ); - const examplePath = path.resolve( - __dirname, - "../../examples/client/web-socket-url", - ); - const cp = execa("node", ["--port", port, cliPath], { cwd: examplePath }); - - cp.stdout.on("data", (data) => { - const bits = data.toString(); - - if (/main.js/.test(bits)) { - expect(cp.pid).not.toBe(0); - - cp.kill("SIGINT"); - } - }); - - cp.on("exit", () => { - done(); - }); - }); - - it("should exit the process when SIGINT is detected, even before the compilation is done", (done) => { - const cliPath = path.resolve( - __dirname, - "../../bin/webpack-dev-server.js", - ); - const cwd = path.resolve(__dirname, "../fixtures/cli"); - const cp = execa("node", ["--port", port, cliPath], { cwd }); + it("should exit the process when SIGINT is detected", () => + new Promise((resolve) => { + const cliPath = path.resolve( + __dirname, + "../../bin/webpack-dev-server.js", + ); + const examplePath = path.resolve( + __dirname, + "../../examples/client/web-socket-url", + ); + const cp = execa("node", ["--port", port, cliPath], { + cwd: examplePath, + }); - let killed = false; + cp.stdout.on("data", (data) => { + const bits = data.toString(); - cp.stdout.on("data", () => { - if (!killed) { - expect(cp.pid).not.toBe(0); + if (/main.js/.test(bits)) { + expect(cp.pid).not.toBe(0); - cp.kill("SIGINT"); - } + cp.kill("SIGINT"); + } + }); - killed = true; - }); + cp.on("exit", () => { + resolve(); + }); + })); - cp.on("exit", () => { - done(); - }); - }); + it("should exit the process when SIGINT is detected, even before the compilation is done", () => + new Promise((resolve) => { + const cliPath = path.resolve( + __dirname, + "../../bin/webpack-dev-server.js", + ); + const cwd = path.resolve(__dirname, "../fixtures/cli"); + const cp = execa("node", ["--port", port, cliPath], { cwd }); - it("should exit the process when stdin ends if --watch-options-stdin", (done) => { - const cliPath = path.resolve( - __dirname, - "../../bin/webpack-dev-server.js", - ); - const examplePath = path.resolve( - __dirname, - "../../examples/client/web-socket-url", - ); - const cp = execa( - "node", - [cliPath, "--port", port, "--watch-options-stdin"], - { - cwd: examplePath, - }, - ); + let killed = false; - cp.stdout.on("data", (data) => { - const bits = data.toString(); + cp.stdout.on("data", () => { + if (!killed) { + expect(cp.pid).not.toBe(0); - if (/main.js/.test(bits)) { - expect(cp.pid).not.toBe(0); + cp.kill("SIGINT"); + } - cp.stdin.write("hello"); - cp.stdin.end("world"); - } - }); + killed = true; + }); - cp.on("exit", () => { - done(); - }); - }); + cp.on("exit", () => { + resolve(); + }); + })); - it("should exit the process when stdin ends if --watch-options-stdin, even before the compilation is done", (done) => { - const cliPath = path.resolve( - __dirname, - "../../bin/webpack-dev-server.js", - ); - const cwd = path.resolve(__dirname, "../fixtures/cli"); - const cp = execa( - "node", - [cliPath, "--port", port, "--watch-options-stdin"], - { cwd }, - ); + it("should exit the process when stdin ends if --watch-options-stdin", () => + new Promise((resolve) => { + const cliPath = path.resolve( + __dirname, + "../../bin/webpack-dev-server.js", + ); + const examplePath = path.resolve( + __dirname, + "../../examples/client/web-socket-url", + ); + const cp = execa( + "node", + [cliPath, "--port", port, "--watch-options-stdin"], + { + cwd: examplePath, + }, + ); + + cp.stdout.on("data", (data) => { + const bits = data.toString(); + + if (/main.js/.test(bits)) { + expect(cp.pid).not.toBe(0); + + cp.stdin.write("hello"); + cp.stdin.end("world"); + } + }); + + cp.on("exit", () => { + resolve(); + }); + })); + + it("should exit the process when stdin ends if --watch-options-stdin, even before the compilation is done", () => + new Promise((resolve, reject) => { + const cliPath = path.resolve( + __dirname, + "../../bin/webpack-dev-server.js", + ); + const cwd = path.resolve(__dirname, "../fixtures/cli"); + const cp = execa( + "node", + [cliPath, "--port", port, "--watch-options-stdin"], + { cwd }, + ); - let killed = false; + let killed = false; - cp.on("error", (error) => { - done(error); - }); + cp.on("error", (error) => { + reject(error); + }); - cp.stdin.on("error", (error) => { - done(error); - }); + cp.stdin.on("error", (error) => { + reject(error); + }); - cp.stdout.on("data", () => { - if (!killed) { - expect(cp.pid).not.toBe(0); + cp.stdout.on("data", () => { + if (!killed) { + expect(cp.pid).not.toBe(0); - cp.stdin.write("hello"); - cp.stdin.end("world"); - } + cp.stdin.write("hello"); + cp.stdin.end("world"); + } - killed = true; - }); + killed = true; + }); - cp.on("exit", () => { - done(); - }); - }); + cp.on("exit", () => { + resolve(); + }); + })); it("should add dev server entry points to a single entry point", async () => { const { exitCode, stdout } = await testBin( @@ -324,7 +332,6 @@ describe("basic", () => { expect(stdout).toContain("client/index.js"); }); - // eslint-disable-next-line jest/no-disabled-tests it.skip("should use different random port when multiple instances are started on different processes", async () => { const cliPath = path.resolve( __dirname, diff --git a/test/cli/bonjour-option.test.js b/test/cli/bonjour-option.test.js index 77d1df223b..3e021d7e6c 100644 --- a/test/cli/bonjour-option.test.js +++ b/test/cli/bonjour-option.test.js @@ -1,9 +1,11 @@ -"use strict"; +import fs from "node:fs"; +import { beforeEach, describe, it } from "node:test"; +import { expect } from "expect"; +import Server from "../../lib/Server.js"; +import { normalizeStderr, testBin } from "../helpers/test-bin.js"; +import portsMap from "../ports-map.js"; -const fs = require("node:fs"); -const Server = require("../../lib/Server"); -const { normalizeStderr, testBin } = require("../helpers/test-bin"); -const port = require("../ports-map")["cli-bonjour"]; +const port = portsMap["cli-bonjour"]; const defaultCertificateDir = Server.findCacheDir(); @@ -12,16 +14,16 @@ describe('"bonjour" CLI option', () => { fs.rmSync(defaultCertificateDir, { recursive: true, force: true }); }); - it('should work using "--bonjour"', async () => { + it('should work using "--bonjour"', async (t) => { const { exitCode, stderr } = await testBin(["--port", port, "--bonjour"], { outputKillStr: /Broadcasting/, }); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--bonjour and --server-type=https"', async () => { + it('should work using "--bonjour and --server-type=https"', async (t) => { const { exitCode, stderr } = await testBin( ["--port", port, "--bonjour", "--server-type=https"], { @@ -30,12 +32,10 @@ describe('"bonjour" CLI option', () => { ); expect(exitCode).toBe(0); - expect( - normalizeStderr(stderr, { ipv6: true, https: true }), - ).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true, https: true })); }); - it('should work using "--no-bonjour"', async () => { + it('should work using "--no-bonjour"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -43,6 +43,6 @@ describe('"bonjour" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); }); diff --git a/test/cli/client-option.test.js b/test/cli/client-option.test.js index d9c95c609f..2fad5a0c65 100644 --- a/test/cli/client-option.test.js +++ b/test/cli/client-option.test.js @@ -1,20 +1,11 @@ -"use strict"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import { testBin } from "../helpers/test-bin.js"; +import portsMap from "../ports-map.js"; -const { testBin } = require("../helpers/test-bin"); -const port = require("../ports-map")["cli-client"]; +const port = portsMap["cli-client"]; describe('"client" CLI option', () => { - it('should work using "--client-web-socket-transport sockjs"', async () => { - const { exitCode } = await testBin([ - "--port", - port, - "--client-web-socket-transport", - "sockjs", - ]); - - expect(exitCode).toBe(0); - }); - it('should work using "--client-web-socket-transport ws"', async () => { const { exitCode } = await testBin([ "--port", diff --git a/test/cli/colors.test.js b/test/cli/colors.test.js index a19143439e..625dbb558e 100644 --- a/test/cli/colors.test.js +++ b/test/cli/colors.test.js @@ -1,20 +1,23 @@ -"use strict"; +import { describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import { normalizeStderr, testBin } from "../helpers/test-bin.js"; +import portsMap from "../ports-map.js"; -const { normalizeStderr, testBin } = require("../helpers/test-bin"); -const port = require("../ports-map")["cli-colors"]; +const port = portsMap["cli-colors"]; -const colorsDefaultStats = require.resolve( - "../fixtures/cli-colors-default-stats/webpack.config", +const colorsDefaultStats = fileURLToPath( + import.meta.resolve("../fixtures/cli-colors-default-stats/webpack.config.js"), ); -const colorsDisabled = require.resolve( - "../fixtures/cli-colors-disabled/webpack.config", +const colorsDisabled = fileURLToPath( + import.meta.resolve("../fixtures/cli-colors-disabled/webpack.config.js"), ); -const colorsEnabled = require.resolve( - "../fixtures/cli-colors-enabled/webpack.config", +const colorsEnabled = fileURLToPath( + import.meta.resolve("../fixtures/cli-colors-enabled/webpack.config.js"), ); describe("colors", () => { - it("should work use colors by default", async () => { + it("should work use colors by default", async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -23,27 +26,27 @@ describe("colors", () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); expect(stderr).toContain("\u001B["); }); - it('should work use colors using "--color"', async () => { + it('should work use colors using "--color"', async (t) => { const { exitCode, stderr } = await testBin(["--port", port, "--color"]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); expect(stderr).toContain("\u001B["); }); - it('should work do not use colors using "--no-color"', async () => { + it('should work do not use colors using "--no-color"', async (t) => { const { exitCode, stderr } = await testBin(["--port", port, "--no-color"]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); expect(stderr).not.toContain("\u001B["); }); - it("should work use colors using configuration with enabled colors", async () => { + it("should work use colors using configuration with enabled colors", async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -52,11 +55,11 @@ describe("colors", () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); expect(stderr).toContain("\u001B["); }); - it("should work and do not use colors using configuration with disabled colors", async () => { + it("should work and do not use colors using configuration with disabled colors", async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -65,7 +68,7 @@ describe("colors", () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); expect(stderr).not.toContain("\u001B["); }); }); diff --git a/test/cli/compress-option.test.js b/test/cli/compress-option.test.js index ccd3884350..a34b5d2890 100644 --- a/test/cli/compress-option.test.js +++ b/test/cli/compress-option.test.js @@ -1,7 +1,9 @@ -"use strict"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import { testBin } from "../helpers/test-bin.js"; +import portsMap from "../ports-map.js"; -const { testBin } = require("../helpers/test-bin"); -const port = require("../ports-map")["cli-compress"]; +const port = portsMap["cli-compress"]; describe('"compress" CLI option', () => { it('should work using "--compress"', async () => { diff --git a/test/cli/historyApiFallback-option.test.js b/test/cli/historyApiFallback-option.test.js index 018db0e5b3..75000dc6aa 100644 --- a/test/cli/historyApiFallback-option.test.js +++ b/test/cli/historyApiFallback-option.test.js @@ -1,10 +1,12 @@ -"use strict"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import { normalizeStderr, testBin } from "../helpers/test-bin.js"; +import portsMap from "../ports-map.js"; -const { normalizeStderr, testBin } = require("../helpers/test-bin"); -const port = require("../ports-map")["cli-history-api-fallback"]; +const port = portsMap["cli-history-api-fallback"]; describe('"historyApiFallback" CLI option', () => { - it('should work using "--history-api-fallback"', async () => { + it('should work using "--history-api-fallback"', async (t) => { const { exitCode, stderr } = await testBin( ["--port", port, "--history-api-fallback"], { @@ -13,10 +15,10 @@ describe('"historyApiFallback" CLI option', () => { ); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--no-history-api-fallback"', async () => { + it('should work using "--no-history-api-fallback"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -24,6 +26,6 @@ describe('"historyApiFallback" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); }); diff --git a/test/cli/host-option.test.js b/test/cli/host-option.test.js index dfa65ee92b..ed95571e5b 100644 --- a/test/cli/host-option.test.js +++ b/test/cli/host-option.test.js @@ -1,15 +1,18 @@ -"use strict"; +import os from "node:os"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import { spyOn } from "jest-mock"; +import Server from "../../lib/Server.js"; +import { normalizeStderr, testBin } from "../helpers/test-bin.js"; +import portsMap from "../ports-map.js"; -const os = require("node:os"); -const Server = require("../../lib/Server"); -const { normalizeStderr, testBin } = require("../helpers/test-bin"); -const port = require("../ports-map")["cli-host"]; +const port = portsMap["cli-host"]; const localIPv4 = Server.findIp("v4", false); const localIPv6 = Server.findIp("v6", false); describe('"host" CLI option', () => { - it('should work using "--host 0.0.0.0" (IPv4)', async () => { + it('should work using "--host 0.0.0.0" (IPv4)', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -18,10 +21,10 @@ describe('"host" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--host ::" (IPv6)', async () => { + it('should work using "--host ::" (IPv6)', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -30,10 +33,10 @@ describe('"host" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--host ::1" (IPv6)', async () => { + it('should work using "--host ::1" (IPv6)', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -42,10 +45,10 @@ describe('"host" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr)); }); - it('should work using "--host localhost"', async () => { + it('should work using "--host localhost"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -54,10 +57,10 @@ describe('"host" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr)); }); - it('should work using "--host 127.0.0.1" (IPv4)', async () => { + it('should work using "--host 127.0.0.1" (IPv4)', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -66,10 +69,10 @@ describe('"host" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr)); }); - it('should work using "--host "', async () => { + it('should work using "--host "', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -78,11 +81,10 @@ describe('"host" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr)); }); - // eslint-disable-next-line jest/no-disabled-tests - it.skip('should work using "--host "', async () => { + it.skip('should work using "--host "', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -91,10 +93,10 @@ describe('"host" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr)); }); - it('should work using "--host local-ip"', async () => { + it('should work using "--host local-ip"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -103,10 +105,9 @@ describe('"host" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr)); }); - // eslint-disable-next-line jest/no-disabled-tests it.skip('should work using "--host local-ip" take the first network found', async () => { const { exitCode, stderr } = await testBin([ "--port", @@ -116,7 +117,7 @@ describe('"host" CLI option', () => { ]); expect(exitCode).toBe(0); - jest.spyOn(os, "networkInterfaces").mockImplementation(() => ({ + spyOn(os, "networkInterfaces").mockImplementation(() => ({ lo: [ { address: "127.0.0.1", @@ -226,7 +227,7 @@ describe('"host" CLI option', () => { expect(stderr).toContain("192.168.1.15"); }); - it('should work using "--host local-ipv4"', async () => { + it('should work using "--host local-ipv4"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -235,6 +236,6 @@ describe('"host" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr)); }); }); diff --git a/test/cli/hot-option.test.js b/test/cli/hot-option.test.js index 6b525d885a..818f4105c3 100644 --- a/test/cli/hot-option.test.js +++ b/test/cli/hot-option.test.js @@ -1,7 +1,9 @@ -"use strict"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import { testBin } from "../helpers/test-bin.js"; +import portsMap from "../ports-map.js"; -const { testBin } = require("../helpers/test-bin"); -const port = require("../ports-map")["cli-hot"]; +const port = portsMap["cli-hot"]; describe('"hot" CLI option', () => { it('should work using "--hot"', async () => { diff --git a/test/cli/ipc-option.test.js b/test/cli/ipc-option.test.js index 304c05f38d..e6a42d17c8 100644 --- a/test/cli/ipc-option.test.js +++ b/test/cli/ipc-option.test.js @@ -1,18 +1,18 @@ -"use strict"; - -const os = require("node:os"); -const path = require("node:path"); -const { normalizeStderr, testBin } = require("../helpers/test-bin"); +import os from "node:os"; +import path from "node:path"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import { normalizeStderr, testBin } from "../helpers/test-bin.js"; describe('"ipc" CLI option', () => { - it('should work using "--ipc"', async () => { + it('should work using "--ipc"', async (t) => { const { exitCode, stderr } = await testBin(["--ipc"]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr)); }); - it('should work using "--ipc="', async () => { + it('should work using "--ipc="', async (t) => { const isWindows = process.platform === "win32"; const pipePrefix = isWindows ? "\\\\.\\pipe\\" : os.tmpdir(); const pipeName = "webpack-dev-server.cli.sock"; @@ -21,6 +21,6 @@ describe('"ipc" CLI option', () => { const { exitCode, stderr } = await testBin(["--ipc", ipc]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr)); }); }); diff --git a/test/cli/liveReload-option.test.js b/test/cli/liveReload-option.test.js index 53e2b198e8..46bcdb24bf 100644 --- a/test/cli/liveReload-option.test.js +++ b/test/cli/liveReload-option.test.js @@ -1,7 +1,9 @@ -"use strict"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import { testBin } from "../helpers/test-bin.js"; +import portsMap from "../ports-map.js"; -const { testBin } = require("../helpers/test-bin"); -const port = require("../ports-map")["cli-live-reload"]; +const port = portsMap["cli-live-reload"]; describe('"liveReload" CLI option', () => { it('should work using "--live-reload"', async () => { diff --git a/test/cli/open-option.test.js b/test/cli/open-option.test.js index 9cc9b9cd41..8c5f39bbca 100644 --- a/test/cli/open-option.test.js +++ b/test/cli/open-option.test.js @@ -1,7 +1,9 @@ -"use strict"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import { testBin } from "../helpers/test-bin.js"; +import portsMap from "../ports-map.js"; -const { testBin } = require("../helpers/test-bin"); -const port = require("../ports-map")["cli-open"]; +const port = portsMap["cli-open"]; describe('"open" CLI option', () => { it('should work using "--open"', async () => { diff --git a/test/cli/port-option.test.js b/test/cli/port-option.test.js index b771e7f280..861b63b568 100644 --- a/test/cli/port-option.test.js +++ b/test/cli/port-option.test.js @@ -1,20 +1,22 @@ -"use strict"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import { normalizeStderr, testBin } from "../helpers/test-bin.js"; +import portsMap from "../ports-map.js"; -const { normalizeStderr, testBin } = require("../helpers/test-bin"); -const port = require("../ports-map")["cli-port-option"]; +const port = portsMap["cli-port-option"]; describe('"port" CLI option', () => { - it('should work using "--port "', async () => { + it('should work using "--port "', async (t) => { const { exitCode, stderr } = await testBin(["--port", port]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--port auto"', async () => { + it('should work using "--port auto"', async (t) => { const { exitCode, stderr } = await testBin(["--port", "auto"]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); }); diff --git a/test/cli/server-option.test.js b/test/cli/server-option.test.js index f59af97255..fa6902fd62 100644 --- a/test/cli/server-option.test.js +++ b/test/cli/server-option.test.js @@ -1,10 +1,14 @@ -"use strict"; - -const path = require("node:path"); -const { rimraf } = require("rimraf"); -const Server = require("../../lib/Server"); -const { normalizeStderr, testBin } = require("../helpers/test-bin"); -const port = require("../ports-map")["cli-server"]; +import path from "node:path"; +import { beforeEach, describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import { rimraf } from "rimraf"; +import Server from "../../lib/Server.js"; +import { normalizeStderr, testBin } from "../helpers/test-bin.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap["cli-server"]; const httpsCertificateDirectory = path.resolve( __dirname, @@ -18,7 +22,7 @@ describe('"server" CLI options', () => { await rimraf(defaultCertificateDir); }); - it('should work using "--server-type http"', async () => { + it('should work using "--server-type http"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -27,12 +31,10 @@ describe('"server" CLI options', () => { ]); expect(exitCode).toBe(0); - expect( - normalizeStderr(stderr, { ipv6: true, https: false }), - ).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true, https: false })); }); - it('should work using "--server-type https"', async () => { + it('should work using "--server-type https"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -41,33 +43,10 @@ describe('"server" CLI options', () => { ]); expect(exitCode).toBe(0); - expect( - normalizeStderr(stderr, { ipv6: true, https: true }), - ).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true, https: true })); }); - const [major] = process.versions.node.split(".").map(Number); - - (major >= 24 ? it.skip : it)( - 'should work using "--server-type spdy"', - async () => { - const { exitCode, stderr } = await testBin([ - "--port", - port, - "--server-type", - "spdy", - ]); - - // eslint-disable-next-line jest/no-standalone-expect - expect(exitCode).toBe(0); - // eslint-disable-next-line jest/no-standalone-expect - expect( - normalizeStderr(stderr, { ipv6: true, https: true }), - ).toMatchSnapshot(); - }, - ); - - it('should work using "--server-options-key --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert --server-options-ca "', async () => { + it('should work using "--server-options-key --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert --server-options-ca "', async (t) => { const pfxFile = path.join(httpsCertificateDirectory, "server.pfx"); const key = path.join(httpsCertificateDirectory, "server.key"); const cert = path.join(httpsCertificateDirectory, "server.crt"); @@ -92,12 +71,10 @@ describe('"server" CLI options', () => { ]); expect(exitCode).toBe(0); - expect( - normalizeStderr(stderr, { ipv6: true, https: true }), - ).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true, https: true })); }); - it('should work using "--server-options-key-reset --server-options-key --server-options-pfx-reset --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert-reset --server-options-cert --server-options-ca-reset --server-options-ca "', async () => { + it('should work using "--server-options-key-reset --server-options-key --server-options-pfx-reset --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert-reset --server-options-cert --server-options-ca-reset --server-options-ca "', async (t) => { const pfxFile = path.join(httpsCertificateDirectory, "server.pfx"); const key = path.join(httpsCertificateDirectory, "server.key"); const cert = path.join(httpsCertificateDirectory, "server.crt"); @@ -126,13 +103,11 @@ describe('"server" CLI options', () => { ]); expect(exitCode).toBe(0); - expect( - normalizeStderr(stderr, { ipv6: true, https: true }), - ).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true, https: true })); }); // For https://github.com/webpack/webpack-dev-server/issues/3306 - it('should work using "--server-options-key --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert "', async () => { + it('should work using "--server-options-key --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert "', async (t) => { const pfxFile = path.join(httpsCertificateDirectory, "server.pfx"); const key = path.join(httpsCertificateDirectory, "server.key"); const cert = path.join(httpsCertificateDirectory, "server.crt"); @@ -154,12 +129,10 @@ describe('"server" CLI options', () => { ]); expect(exitCode).toBe(0); - expect( - normalizeStderr(stderr, { ipv6: true, https: true }), - ).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true, https: true })); }); - it('should work using "--server-options-request-cert"', async () => { + it('should work using "--server-options-request-cert"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -169,12 +142,10 @@ describe('"server" CLI options', () => { ]); expect(exitCode).toBe(0); - expect( - normalizeStderr(stderr, { ipv6: true, https: true }), - ).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true, https: true })); }); - it('should work using "--no-server-options-request-cert"', async () => { + it('should work using "--no-server-options-request-cert"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -184,8 +155,6 @@ describe('"server" CLI options', () => { ]); expect(exitCode).toBe(0); - expect( - normalizeStderr(stderr, { ipv6: true, https: true }), - ).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true, https: true })); }); }); diff --git a/test/cli/static-option.test.js b/test/cli/static-option.test.js index 66ccd5ec67..5a0152f8ad 100644 --- a/test/cli/static-option.test.js +++ b/test/cli/static-option.test.js @@ -1,17 +1,19 @@ -"use strict"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import { normalizeStderr, testBin } from "../helpers/test-bin.js"; +import portsMap from "../ports-map.js"; -const { normalizeStderr, testBin } = require("../helpers/test-bin"); -const port = require("../ports-map")["cli-static"]; +const port = portsMap["cli-static"]; describe('"static" CLI option', () => { - it('should work using "--static"', async () => { + it('should work using "--static"', async (t) => { const { exitCode, stderr } = await testBin(["--port", port, "--static"]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--static new-static"', async () => { + it('should work using "--static new-static"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -20,10 +22,10 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--static new-static --static other-static"', async () => { + it('should work using "--static new-static --static other-static"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -34,10 +36,10 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--static-reset"', async () => { + it('should work using "--static-reset"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -47,10 +49,10 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--static-reset --static-directory new-static-directory"', async () => { + it('should work using "--static-reset --static-directory new-static-directory"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -60,10 +62,10 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--static-directory static-dir"', async () => { + it('should work using "--static-directory static-dir"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -72,10 +74,10 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--static-public-path /public"', async () => { + it('should work using "--static-public-path /public"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -84,10 +86,10 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--static-public-path-reset"', async () => { + it('should work using "--static-public-path-reset"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -97,10 +99,10 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--static-serve-index"', async () => { + it('should work using "--static-serve-index"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -108,10 +110,10 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--no-static-serve-index"', async () => { + it('should work using "--no-static-serve-index"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -119,10 +121,10 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--static-watch"', async () => { + it('should work using "--static-watch"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -130,10 +132,10 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--no-static-watch"', async () => { + it('should work using "--no-static-watch"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -141,6 +143,6 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); }); diff --git a/test/cli/watchFiles-option.test.js b/test/cli/watchFiles-option.test.js index 93eeebfe78..c5cf49d289 100644 --- a/test/cli/watchFiles-option.test.js +++ b/test/cli/watchFiles-option.test.js @@ -1,11 +1,15 @@ -"use strict"; +import path from "node:path"; +import { describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import { normalizeStderr, testBin } from "../helpers/test-bin.js"; +import portsMap from "../ports-map.js"; -const path = require("node:path"); -const { normalizeStderr, testBin } = require("../helpers/test-bin"); -const port = require("../ports-map")["cli-watch-files"]; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap["cli-watch-files"]; describe('"watchFiles" CLI option', () => { - it('should work using "--watch-files "', async () => { + it('should work using "--watch-files "', async (t) => { const watchDirectory = path.resolve(__dirname, "../fixtures/static/static"); const { exitCode, stderr } = await testBin([ @@ -16,10 +20,10 @@ describe('"watchFiles" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--watch-files --watch-files "', async () => { + it('should work using "--watch-files --watch-files "', async (t) => { const watchDirectory = path.resolve(__dirname, "../fixtures/static/static"); const watchOtherDirectory = path.resolve( __dirname, @@ -36,10 +40,10 @@ describe('"watchFiles" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--watch-files-reset --watch-files "', async () => { + it('should work using "--watch-files-reset --watch-files "', async (t) => { const watchDirectory = path.resolve(__dirname, "../fixtures/static/static"); const { exitCode, stderr } = await testBin([ @@ -51,6 +55,6 @@ describe('"watchFiles" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); }); diff --git a/test/cli/webSocketServer-option.test.js b/test/cli/webSocketServer-option.test.js index ec383cd767..1d968c72a3 100644 --- a/test/cli/webSocketServer-option.test.js +++ b/test/cli/webSocketServer-option.test.js @@ -1,7 +1,9 @@ -"use strict"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import { testBin } from "../helpers/test-bin.js"; +import portsMap from "../ports-map.js"; -const { testBin } = require("../helpers/test-bin"); -const port = require("../ports-map")["cli-web-socket-server"]; +const port = portsMap["cli-web-socket-server"]; describe('"webSocketServer" CLI option', () => { it('should work using "--web-socket-server-type ws"', async () => { @@ -15,17 +17,6 @@ describe('"webSocketServer" CLI option', () => { expect(exitCode).toBe(0); }); - it('should work using "--web-socket-server-type sockjs"', async () => { - const { exitCode } = await testBin([ - "--port", - port, - "--web-socket-server-type", - "sockjs", - ]); - - expect(exitCode).toBe(0); - }); - it('should work using "--no-web-socket-server"', async () => { const { exitCode } = await testBin([ "--port", diff --git a/test/client/ReactErrorBoundary.test.js b/test/client/ReactErrorBoundary.test.js index 8932de9a2c..bcbd8552bf 100644 --- a/test/client/ReactErrorBoundary.test.js +++ b/test/client/ReactErrorBoundary.test.js @@ -1,51 +1,24 @@ -/** - * @jest-environment jsdom - */ +import "../helpers/jsdom-setup.js"; -"use strict"; - -const { createOverlay } = require("../../client-src/overlay"); +import { afterEach, beforeEach, describe, it, mock } from "node:test"; +import { expect } from "expect"; +import { spyOn } from "jest-mock"; +import { createOverlay } from "../../client-src/overlay.js"; describe("createOverlay", () => { - const originalDocument = globalThis.document; - const originalWindow = globalThis.window; - beforeEach(() => { - globalThis.document = { - createElement: jest.fn(() => ({ - style: {}, - appendChild: jest.fn(), - addEventListener: jest.fn(), - contentDocument: { - createElement: jest.fn(() => ({ style: {}, appendChild: jest.fn() })), - body: { appendChild: jest.fn() }, - }, - })), - body: { appendChild: jest.fn(), removeChild: jest.fn() }, - }; - globalThis.window = { - // Keep addEventListener mocked for other potential uses - addEventListener: jest.fn(), - removeEventListener: jest.fn(), - // Mock trustedTypes - trustedTypes: null, - // Mock dispatchEvent - dispatchEvent: jest.fn(), - }; - jest.useFakeTimers(); + mock.timers.enable(); }); afterEach(() => { - globalThis.document = originalDocument; - globalThis.window = originalWindow; - jest.useRealTimers(); - jest.clearAllMocks(); + mock.timers.reset(); + mock.reset(); }); it("should not show overlay for errors caught by React error boundaries", () => { const options = { trustedTypesPolicyName: null, catchRuntimeError: true }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const reactError = new Error( "Error inside React render\n" + @@ -75,7 +48,7 @@ describe("createOverlay", () => { it("should show overlay for normal uncaught errors", () => { const options = { trustedTypesPolicyName: null, catchRuntimeError: true }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const regularError = new Error( "Error inside React render\n" + @@ -107,7 +80,7 @@ describe("createOverlay", () => { it("should show overlay for normal uncaught errors (when null is thrown)", () => { const options = { trustedTypesPolicyName: null, catchRuntimeError: true }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const errorEvent = new ErrorEvent("error", { error: null, @@ -133,7 +106,7 @@ describe("createOverlay", () => { catchRuntimeError: () => true, }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const regularError = new Error("Regular test error"); const errorEvent = new ErrorEvent("error", { @@ -160,7 +133,7 @@ describe("createOverlay", () => { catchRuntimeError: () => false, }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const regularError = new Error("Regular test error"); const errorEvent = new ErrorEvent("error", { @@ -176,7 +149,7 @@ describe("createOverlay", () => { it("should not show the overlay for errors with stack containing 'invokeGuardedCallbackDev'", () => { const options = { trustedTypesPolicyName: null, catchRuntimeError: true }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const reactInternalError = new Error("React internal error"); reactInternalError.stack = "invokeGuardedCallbackDev\n at somefile.js"; @@ -193,7 +166,7 @@ describe("createOverlay", () => { it("should show overlay for unhandled rejections", () => { const options = { trustedTypesPolicyName: null, catchRuntimeError: true }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const rejectionReason = new Error("Promise rejection reason"); const rejectionEvent = new Event("unhandledrejection"); @@ -216,7 +189,7 @@ describe("createOverlay", () => { it("should show overlay for unhandled rejections with string reason", () => { const options = { trustedTypesPolicyName: null, catchRuntimeError: true }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const rejectionEvent = new Event("unhandledrejection"); rejectionEvent.reason = "some reason"; globalThis.dispatchEvent(rejectionEvent); @@ -237,7 +210,7 @@ describe("createOverlay", () => { it("should dismiss overlay when ESC key is pressed", () => { const options = { trustedTypesPolicyName: null, catchRuntimeError: true }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const escEvent = new KeyboardEvent("keydown", { key: "Escape" }); globalThis.window.dispatchEvent(escEvent); @@ -249,7 +222,7 @@ describe("createOverlay", () => { it("should dismiss overlay when 'Esc' key is pressed (older browsers)", () => { const options = { trustedTypesPolicyName: null, catchRuntimeError: true }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const escEvent = new KeyboardEvent("keydown", { key: "Esc" }); globalThis.window.dispatchEvent(escEvent); @@ -261,7 +234,7 @@ describe("createOverlay", () => { it("should not dismiss overlay for other keys", () => { const options = { trustedTypesPolicyName: null, catchRuntimeError: true }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const otherKeyEvent = new KeyboardEvent("keydown", { key: "Enter" }); globalThis.window.dispatchEvent(otherKeyEvent); diff --git a/test/client/__snapshots__/index.test.js.snap.webpack5 b/test/client/__snapshots__/index.test.js.snap.webpack5 index 7b3d6672fe..3e010cc5f4 100644 --- a/test/client/__snapshots__/index.test.js.snap.webpack5 +++ b/test/client/__snapshots__/index.test.js.snap.webpack5 @@ -1,34 +1,60 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`index should run onSocketMessage.close (hot enabled) 1`] = `"Disconnected!"`; +exports[`index > should run onSocketMessage.close (hot enabled) 1`] = ` +"Disconnected!" +`; -exports[`index should run onSocketMessage.close (hot enabled) 2`] = `"Close"`; +exports[`index > should run onSocketMessage.close (hot enabled) 2`] = ` +"Close" +`; -exports[`index should run onSocketMessage.close (liveReload enabled) 1`] = `"Disconnected!"`; +exports[`index > should run onSocketMessage.close (liveReload enabled) 1`] = ` +"Disconnected!" +`; -exports[`index should run onSocketMessage.close (liveReload enabled) 2`] = `"Close"`; +exports[`index > should run onSocketMessage.close (liveReload enabled) 2`] = ` +"Close" +`; -exports[`index should run onSocketMessage.close 1`] = `"Disconnected!"`; +exports[`index > should run onSocketMessage.close 1`] = ` +"Disconnected!" +`; -exports[`index should run onSocketMessage.close 2`] = `"Close"`; +exports[`index > should run onSocketMessage.close 2`] = ` +"Close" +`; -exports[`index should run onSocketMessage.error 1`] = `"error!!"`; +exports[`index > should run onSocketMessage.error 1`] = ` +"error!!" +`; -exports[`index should run onSocketMessage.ok 1`] = `"Ok"`; +exports[`index > should run onSocketMessage.ok 1`] = ` +"Ok" +`; -exports[`index should run onSocketMessage.progress and onSocketMessage['progress-update'] 1`] = `"Progress"`; +exports[`index > should run onSocketMessage.progress and onSocketMessage['progress-update'] 1`] = ` +"Progress" +`; -exports[`index should run onSocketMessage.progress and onSocketMessage['progress-update'] 2`] = `"12% - mock-msg."`; +exports[`index > should run onSocketMessage.progress and onSocketMessage['progress-update'] 2`] = ` +"12% - mock-msg." +`; -exports[`index should run onSocketMessage.progress and onSocketMessage['progress-update'] and log plugin name 1`] = `"Progress"`; +exports[`index > should run onSocketMessage.progress and onSocketMessage['progress-update'] and log plugin name 1`] = ` +"Progress" +`; -exports[`index should run onSocketMessage.progress and onSocketMessage['progress-update'] and log plugin name 2`] = `"[mock-plugin] 12% - mock-msg."`; +exports[`index > should run onSocketMessage.progress and onSocketMessage['progress-update'] and log plugin name 2`] = ` +"[mock-plugin] 12% - mock-msg." +`; -exports[`index should run onSocketMessage.warnings 1`] = `"Warnings while compiling."`; +exports[`index > should run onSocketMessage.warnings 1`] = ` +"Warnings while compiling." +`; -exports[`index should run onSocketMessage.warnings 2`] = `"Warnings"`; +exports[`index > should run onSocketMessage.warnings 2`] = ` +"Warnings" +`; -exports[`index should run onSocketMessage.warnings 3`] = ` +exports[`index > should run onSocketMessage.warnings 3`] = ` [ [ "HEADER warning @@ -45,15 +71,23 @@ BODY: warning", ] `; -exports[`index should run onSocketMessage['static-changed'] 1`] = `"Content from static directory was changed. Reloading..."`; +exports[`index > should run onSocketMessage['static-changed'] 1`] = ` +"Content from static directory was changed. Reloading..." +`; -exports[`index should run onSocketMessage['static-changed'](file) 1`] = `""/static/assets/index.html" from static directory was changed. Reloading..."`; +exports[`index > should run onSocketMessage['static-changed'](file) 1`] = ` +""/static/assets/index.html" from static directory was changed. Reloading..." +`; -exports[`index should run onSocketMessage['still-ok'] 1`] = `"Nothing changed."`; +exports[`index > should run onSocketMessage['still-ok'] 1`] = ` +"Nothing changed." +`; -exports[`index should run onSocketMessage['still-ok'] 2`] = `"StillOk"`; +exports[`index > should run onSocketMessage['still-ok'] 2`] = ` +"StillOk" +`; -exports[`index should set arguments into socket function 1`] = ` +exports[`index > should set arguments into socket function 1`] = ` [ "ws://localhost/ws", { diff --git a/test/client/__snapshots__/socket-helper.test.js.snap.webpack5 b/test/client/__snapshots__/socket-helper.test.js.snap.webpack5 index 6db58361bb..dc319ec27d 100644 --- a/test/client/__snapshots__/socket-helper.test.js.snap.webpack5 +++ b/test/client/__snapshots__/socket-helper.test.js.snap.webpack5 @@ -1,12 +1,10 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`socket should default to WebsocketClient when no __webpack_dev_server_client__ set 1`] = ` +exports[`socket > should default to WebsocketClient when no __webpack_dev_server_client__ set 1`] = ` [ "my.url", ] `; -exports[`socket should default to WebsocketClient when no __webpack_dev_server_client__ set 2`] = ` +exports[`socket > should default to WebsocketClient when no __webpack_dev_server_client__ set 2`] = ` [ [ [Function], @@ -14,7 +12,7 @@ exports[`socket should default to WebsocketClient when no __webpack_dev_server_c ] `; -exports[`socket should default to WebsocketClient when no __webpack_dev_server_client__ set 3`] = ` +exports[`socket > should default to WebsocketClient when no __webpack_dev_server_client__ set 3`] = ` [ [ [Function], @@ -22,7 +20,7 @@ exports[`socket should default to WebsocketClient when no __webpack_dev_server_c ] `; -exports[`socket should default to WebsocketClient when no __webpack_dev_server_client__ set 4`] = ` +exports[`socket > should default to WebsocketClient when no __webpack_dev_server_client__ set 4`] = ` [ [ [Function], @@ -30,7 +28,7 @@ exports[`socket should default to WebsocketClient when no __webpack_dev_server_c ] `; -exports[`socket should default to WebsocketClient when no __webpack_dev_server_client__ set 5`] = ` +exports[`socket > should default to WebsocketClient when no __webpack_dev_server_client__ set 5`] = ` [ [ "hello world", @@ -41,13 +39,13 @@ exports[`socket should default to WebsocketClient when no __webpack_dev_server_c ] `; -exports[`socket should use __webpack_dev_server_client__ when set 1`] = ` +exports[`socket > should use __webpack_dev_server_client__ when set 1`] = ` [ "my.url", ] `; -exports[`socket should use __webpack_dev_server_client__ when set 2`] = ` +exports[`socket > should use __webpack_dev_server_client__ when set 2`] = ` [ [ [Function], @@ -55,7 +53,7 @@ exports[`socket should use __webpack_dev_server_client__ when set 2`] = ` ] `; -exports[`socket should use __webpack_dev_server_client__ when set 3`] = ` +exports[`socket > should use __webpack_dev_server_client__ when set 3`] = ` [ [ [Function], @@ -63,7 +61,7 @@ exports[`socket should use __webpack_dev_server_client__ when set 3`] = ` ] `; -exports[`socket should use __webpack_dev_server_client__ when set 4`] = ` +exports[`socket > should use __webpack_dev_server_client__ when set 4`] = ` [ [ [Function], @@ -71,7 +69,7 @@ exports[`socket should use __webpack_dev_server_client__ when set 4`] = ` ] `; -exports[`socket should use __webpack_dev_server_client__ when set 5`] = ` +exports[`socket > should use __webpack_dev_server_client__ when set 5`] = ` [ [ "hello world", diff --git a/test/client/bundle.test.js b/test/client/bundle.test.js index c392196be9..897d404d66 100644 --- a/test/client/bundle.test.js +++ b/test/client/bundle.test.js @@ -1,18 +1,20 @@ -"use strict"; +import { after, before, describe, it } from "node:test"; +import * as acorn from "acorn"; +import { expect } from "expect"; +import request from "supertest"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/simple-config/webpack.config.js"; +import portsMap from "../ports-map.js"; -const acorn = require("acorn"); -const request = require("supertest"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/simple-config/webpack.config"); -const port = require("../ports-map").bundle; +const port = portsMap.bundle; describe("bundle", () => { describe("main.js bundled output", () => { let server; let req; - beforeAll(async () => { + before(async () => { const compiler = webpack({ ...config, target: ["es5", "web"], @@ -25,7 +27,7 @@ describe("bundle", () => { req = request(server.app); }); - afterAll(async () => { + after(async () => { await server.stop(); }); diff --git a/test/client/clients/SockJSClient.test.js b/test/client/clients/SockJSClient.test.js deleted file mode 100644 index ae388b5f20..0000000000 --- a/test/client/clients/SockJSClient.test.js +++ /dev/null @@ -1,87 +0,0 @@ -/** - * @jest-environment jsdom - */ - -"use strict"; - -const http = require("node:http"); -const express = require("express"); -const sockjs = require("sockjs"); -const port = require("../../ports-map")["sockjs-client"]; - -jest.setMock("../../../client-src/utils/log", { - log: { - error: jest.fn(), - }, -}); - -describe("SockJSClient", () => { - const SockJSClient = - require("../../../client-src/clients/SockJSClient").default; - const { log } = require("../../../client-src/utils/log"); - - let consoleMock; - let socketServer; - let server; - - beforeAll((done) => { - consoleMock = jest.spyOn(console, "log").mockImplementation(); - - // eslint-disable-next-line new-cap - const app = new express(); - - server = http.createServer(app); - server.listen(port, "localhost", () => { - socketServer = sockjs.createServer(); - socketServer.installHandlers(server, { - prefix: "/ws", - }); - done(); - }); - }); - - afterAll((done) => { - consoleMock.mockRestore(); - server.close(() => { - done(); - }); - }); - - describe("client", () => { - it("should open, receive message, and close", (done) => { - socketServer.on("connection", (connection) => { - connection.write("hello world"); - - setTimeout(() => { - connection.close(); - }, 1000); - }); - - const client = new SockJSClient(`http://localhost:${port}/ws`); - const data = []; - - client.onOpen(() => { - data.push("open"); - }); - client.onClose(() => { - data.push("close"); - }); - client.onMessage((msg) => { - data.push(msg); - }); - - const testError = new Error("test"); - - client.sock.onerror(testError); - - expect(log.error.mock.calls).toHaveLength(1); - expect(log.error.mock.calls[0]).toEqual([testError]); - - setTimeout(() => { - expect(data).toMatchSnapshot(); - - done(); - }, 3000); - }); - }); -}); diff --git a/test/client/clients/WebsocketClient.test.js b/test/client/clients/WebsocketClient.test.js index de113abb2c..ad60e95c70 100644 --- a/test/client/clients/WebsocketClient.test.js +++ b/test/client/clients/WebsocketClient.test.js @@ -1,45 +1,60 @@ -/** - * @jest-environment jsdom - * @jest-environment-options { "customExportConditions": ["main"] } - */ - -"use strict"; - -const http = require("node:http"); -const express = require("express"); -const ws = require("ws"); -const port = require("../../ports-map")["web-socket-client"]; - -jest.setMock("../../../client-src/utils/log", { - log: { - error: jest.fn(), - }, -}); +import "../../helpers/jsdom-setup.js"; + +import http from "node:http"; +import { after, before, describe, it } from "node:test"; +import { expect } from "expect"; +import express from "express"; +import { spyOn } from "jest-mock"; +import WebSocket, { WebSocketServer } from "ws"; +import WebSocketClient from "../../../client-src/clients/WebSocketClient.js"; +import { log } from "../../../client-src/utils/log.js"; +import portsMap from "../../ports-map.js"; + +// jsdom's built-in WebSocket stays in CONNECTING for unreachable URLs (good +// for silencing other client tests) but doesn't fully drive open/close +// against a real local server. Use Node's `ws` library here so this test +// can talk to the express+ws server below. WebSocketClient only reads the +// global at construction time, so assigning after import is safe. +globalThis.WebSocket = WebSocket; + +const port = portsMap["web-socket-client"]; describe("WebsocketClient", () => { - const WebSocketClient = - require("../../../client-src/clients/WebSocketClient").default; - const { log } = require("../../../client-src/utils/log"); - let socketServer; let server; - - beforeAll((done) => { - // eslint-disable-next-line new-cap - const app = new express(); - - server = http.createServer(app); - server.listen(port, "localhost", () => { - socketServer = new ws.Server({ - server, - path: "/ws-server", - }); - done(); - }); - }); + let logErrorSpy; + + before( + () => + new Promise((resolve) => { + // eslint-disable-next-line new-cap + const app = new express(); + + server = http.createServer(app); + server.listen(port, "localhost", () => { + socketServer = new WebSocketServer({ + server, + path: "/ws-server", + }); + resolve(); + }); + }), + ); + + after( + () => + new Promise((resolve) => { + logErrorSpy.mockRestore(); + server.close(() => { + resolve(); + }); + }), + ); describe("client", () => { - it("should open, receive message, and close", (done) => { + it("should open, receive message, and close", async (t) => { + logErrorSpy = spyOn(log, "error").mockImplementation(); + socketServer.on("connection", (connection) => { connection.send("hello world"); @@ -68,17 +83,11 @@ describe("WebsocketClient", () => { expect(log.error.mock.calls).toHaveLength(1); expect(log.error.mock.calls[0]).toEqual([testError]); - setTimeout(() => { - expect(data).toMatchSnapshot(); - - done(); - }, 3000); - }); - }); + await new Promise((resolve) => { + setTimeout(resolve, 3000); + }); - afterAll((done) => { - server.close(() => { - done(); + t.assert.snapshot(data); }); }); }); diff --git a/test/client/clients/__snapshots__/SockJSClient.test.js.snap.webpack5 b/test/client/clients/__snapshots__/SockJSClient.test.js.snap.webpack5 deleted file mode 100644 index 79ed1603fe..0000000000 --- a/test/client/clients/__snapshots__/SockJSClient.test.js.snap.webpack5 +++ /dev/null @@ -1,9 +0,0 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`SockJSClient client should open, receive message, and close 1`] = ` -[ - "open", - "hello world", - "close", -] -`; diff --git a/test/client/clients/__snapshots__/WebsocketClient.test.js.snap.webpack5 b/test/client/clients/__snapshots__/WebsocketClient.test.js.snap.webpack5 index b27fa29f63..9a0c138a65 100644 --- a/test/client/clients/__snapshots__/WebsocketClient.test.js.snap.webpack5 +++ b/test/client/clients/__snapshots__/WebsocketClient.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`WebsocketClient client should open, receive message, and close 1`] = ` +exports[`WebsocketClient > client > should open, receive message, and close 1`] = ` [ "open", "hello world", diff --git a/test/client/index.test.js b/test/client/index.test.js index aaa1c9f0f5..f659350500 100644 --- a/test/client/index.test.js +++ b/test/client/index.test.js @@ -1,8 +1,8 @@ -/** - * @jest-environment jsdom - */ +import "../helpers/jsdom-setup.js"; -"use strict"; +import { afterEach, beforeEach, describe, it, mock } from "node:test"; +import { expect } from "expect"; +import { fn } from "jest-mock"; describe("index", () => { let log; @@ -10,76 +10,94 @@ describe("index", () => { let overlay; let sendMessage; let onSocketMessage; + let logMockCtx; + let socketMockCtx; + let overlayMockCtx; + let sendMessageMockCtx; const locationValue = self.location; const resourceQueryValue = globalThis.__resourceQuery; - beforeEach(() => { - globalThis.__resourceQuery = "?mock-url"; - globalThis.__webpack_hash__ = "mock-hash"; - - // log - jest.setMock("../../client-src/utils/log.js", { - log: { - info: jest.fn(), - warn: jest.fn(), - error: jest.fn(), - }, - logEnabledFeatures: jest.fn(), - setLogLevel: jest.fn(), + /** + * Install fresh mock.module() interceptors for the four modules + * client-src/index.js loads at evaluation time. + * @returns {void} + */ + function installMocks() { + log = { + log: { info: fn(), warn: fn(), error: fn() }, + logEnabledFeatures: fn(), + setLogLevel: fn(), + }; + logMockCtx = mock.module("../../client-src/utils/log.js", { + namedExports: log, }); - log = require("../../client-src/utils/log"); - - // socket - jest.setMock("../../client-src/socket.js", jest.fn()); - socket = require("../../client-src/socket"); - - const send = jest.fn(); - - // overlay - jest.setMock("../../client-src/overlay.js", { - createOverlay: () => ({ - send, - }), - formatProblem: (item) => ({ - header: "HEADER warning", - body: `BODY: ${item}`, - }), + socket = fn(); + socketMockCtx = mock.module("../../client-src/socket.js", { + defaultExport: socket, }); - const { createOverlay } = require("../../client-src/overlay"); + const send = fn(); + overlay = { send }; + overlayMockCtx = mock.module("../../client-src/overlay.js", { + namedExports: { + createOverlay: () => overlay, + formatProblem: (item) => ({ + header: "HEADER warning", + body: `BODY: ${item}`, + }), + }, + }); - overlay = createOverlay(); + sendMessage = fn(); + sendMessageMockCtx = mock.module("../../client-src/utils/sendMessage.js", { + defaultExport: sendMessage, + }); + } + + /** + * Tear down the mock.module() interceptors installed by installMocks(). + * @returns {void} + */ + function restoreMocks() { + logMockCtx.restore(); + socketMockCtx.restore(); + overlayMockCtx.restore(); + sendMessageMockCtx.restore(); + } + + beforeEach(async () => { + globalThis.__resourceQuery = "?mock-url"; + globalThis.__webpack_hash__ = "mock-hash"; - // sendMessage - jest.setMock("../../client-src/utils/sendMessage.js", jest.fn()); - sendMessage = require("../../client-src/utils/sendMessage"); + installMocks(); // issue: https://github.com/jsdom/jsdom/issues/2112 delete globalThis.location; + globalThis.location = { ...locationValue, reload: fn() }; - globalThis.location = { ...locationValue, reload: jest.fn() }; - - require("../../client-src"); + // Use dynamic import with a cache-busting query string to force a fresh + // module evaluation each test. + const indexUrl = import.meta.resolve("../../client-src/index.js"); + await import(`${indexUrl}?t=${Date.now()}-${Math.random()}`); [[, onSocketMessage]] = socket.mock.calls; }); afterEach(() => { globalThis.__resourceQuery = resourceQueryValue; Object.assign(globalThis, locationValue); - jest.resetAllMocks(); - jest.resetModules(); + restoreMocks(); }); - it("should set arguments into socket function", () => { - expect(socket.mock.calls[0]).toMatchSnapshot(); + it("should set arguments into socket function", (t) => { + t.assert.snapshot(socket.mock.calls[0]); }); - it("should run onSocketMessage['still-ok']", () => { + it("should run onSocketMessage['still-ok']", (t) => { onSocketMessage["still-ok"](); - expect(log.log.info.mock.calls[1][0]).toMatchSnapshot(); - expect(sendMessage.mock.calls[0][0]).toMatchSnapshot(); + t.assert.snapshot(log.log.info.mock.calls[1][0]); + t.assert.snapshot(sendMessage.mock.calls[0][0]); expect(overlay.send).not.toHaveBeenCalledWith({ type: "DISMISS" }); // change flags @@ -89,14 +107,14 @@ describe("index", () => { expect(overlay.send).toHaveBeenCalledWith({ type: "DISMISS" }); }); - it("should run onSocketMessage.progress and onSocketMessage['progress-update']", () => { + it("should run onSocketMessage.progress and onSocketMessage['progress-update']", (t) => { onSocketMessage.progress(false); onSocketMessage["progress-update"]({ msg: "mock-msg", percent: "12", }); - expect(sendMessage.mock.calls[0][0]).toMatchSnapshot(); + t.assert.snapshot(sendMessage.mock.calls[0][0]); onSocketMessage.progress(true); onSocketMessage["progress-update"]({ @@ -104,10 +122,10 @@ describe("index", () => { percent: "12", }); - expect(log.log.info.mock.calls[1][0]).toMatchSnapshot(); + t.assert.snapshot(log.log.info.mock.calls[1][0]); }); - it("should run onSocketMessage.progress and onSocketMessage['progress-update'] and log plugin name", () => { + it("should run onSocketMessage.progress and onSocketMessage['progress-update'] and log plugin name", (t) => { onSocketMessage.progress(false); onSocketMessage["progress-update"]({ msg: "mock-msg", @@ -115,7 +133,7 @@ describe("index", () => { pluginName: "mock-plugin", }); - expect(sendMessage.mock.calls[0][0]).toMatchSnapshot(); + t.assert.snapshot(sendMessage.mock.calls[0][0]); onSocketMessage.progress(true); onSocketMessage["progress-update"]({ @@ -124,13 +142,13 @@ describe("index", () => { pluginName: "mock-plugin", }); - expect(log.log.info.mock.calls[1][0]).toMatchSnapshot(); + t.assert.snapshot(log.log.info.mock.calls[1][0]); }); - it("should run onSocketMessage.ok", () => { + it("should run onSocketMessage.ok", (t) => { onSocketMessage.ok(); - expect(sendMessage.mock.calls[0][0]).toMatchSnapshot(); + t.assert.snapshot(sendMessage.mock.calls[0][0]); onSocketMessage.errors([]); onSocketMessage.hash("mock-hash"); @@ -140,26 +158,26 @@ describe("index", () => { expect(res).toBeUndefined(); }); - it("should run onSocketMessage['static-changed']", () => { + it("should run onSocketMessage['static-changed']", (t) => { onSocketMessage["static-changed"](); - expect(log.log.info.mock.calls[1][0]).toMatchSnapshot(); + t.assert.snapshot(log.log.info.mock.calls[1][0]); expect(self.location.reload).toHaveBeenCalled(); }); - it("should run onSocketMessage['static-changed'](file)", () => { + it("should run onSocketMessage['static-changed'](file)", (t) => { onSocketMessage["static-changed"]("/static/assets/index.html"); - expect(log.log.info.mock.calls[1][0]).toMatchSnapshot(); + t.assert.snapshot(log.log.info.mock.calls[1][0]); expect(self.location.reload).toHaveBeenCalled(); }); - it("should run onSocketMessage.warnings", () => { + it("should run onSocketMessage.warnings", (t) => { onSocketMessage.warnings(["warn1", "\u001B[4mwarn2\u001B[0m", "warn3"]); - expect(log.log.warn.mock.calls[0][0]).toMatchSnapshot(); - expect(sendMessage.mock.calls[0][0]).toMatchSnapshot(); - expect(log.log.warn.mock.calls.splice(1)).toMatchSnapshot(); + t.assert.snapshot(log.log.warn.mock.calls[0][0]); + t.assert.snapshot(sendMessage.mock.calls[0][0]); + t.assert.snapshot(log.log.warn.mock.calls.splice(1)); // change flags onSocketMessage.overlay({ warnings: true }); @@ -173,105 +191,100 @@ describe("index", () => { }); }); - it("should parse overlay options from resource query", () => { - jest.isolateModules(() => { - // Pass JSON config with warnings disabled - globalThis.__resourceQuery = `?overlay=${encodeURIComponent( - '{"warnings": false}', - )}`; + it("should parse overlay options from resource query", async () => { + // Re-evaluate client-src/index.js fresh after mutating __resourceQuery so + // top-level option parsing runs again. + async function reloadClient() { overlay.send.mockReset(); socket.mockReset(); - require("../../client-src"); + const indexUrl = import.meta.resolve("../../client-src/index.js"); + await import(`${indexUrl}?t=${Date.now()}-${Math.random()}`); [[, onSocketMessage]] = socket.mock.calls; + } - onSocketMessage.warnings(["warn1"]); - expect(overlay.send).not.toHaveBeenCalled(); + // Pass JSON config with warnings disabled + globalThis.__resourceQuery = `?overlay=${encodeURIComponent( + '{"warnings": false}', + )}`; + await reloadClient(); - onSocketMessage.errors(["error1"]); - expect(overlay.send).toHaveBeenCalledTimes(1); - expect(overlay.send).toHaveBeenCalledWith({ - type: "BUILD_ERROR", - level: "error", - messages: ["error1"], - }); + onSocketMessage.warnings(["warn1"]); + expect(overlay.send).not.toHaveBeenCalled(); + + onSocketMessage.errors(["error1"]); + expect(overlay.send).toHaveBeenCalledTimes(1); + expect(overlay.send).toHaveBeenCalledWith({ + type: "BUILD_ERROR", + level: "error", + messages: ["error1"], }); - jest.isolateModules(() => { - // Pass JSON config with errors disabled - globalThis.__resourceQuery = `?overlay=${encodeURIComponent( - '{"errors": false}', - )}`; - overlay.send.mockReset(); - socket.mockReset(); - require("../../client-src"); - [[, onSocketMessage]] = socket.mock.calls; + // Pass JSON config with errors disabled + globalThis.__resourceQuery = `?overlay=${encodeURIComponent( + '{"errors": false}', + )}`; + await reloadClient(); - onSocketMessage.errors(["error1"]); - expect(overlay.send).not.toHaveBeenCalled(); + onSocketMessage.errors(["error1"]); + expect(overlay.send).not.toHaveBeenCalled(); - onSocketMessage.warnings(["warn1"]); - expect(overlay.send).toHaveBeenCalledTimes(1); - expect(overlay.send).toHaveBeenCalledWith({ - type: "BUILD_ERROR", - level: "warning", - messages: ["warn1"], - }); + onSocketMessage.warnings(["warn1"]); + expect(overlay.send).toHaveBeenCalledTimes(1); + expect(overlay.send).toHaveBeenCalledWith({ + type: "BUILD_ERROR", + level: "warning", + messages: ["warn1"], }); - jest.isolateModules(() => { - // Use simple boolean - globalThis.__resourceQuery = "?overlay=true"; - socket.mockReset(); - overlay.send.mockReset(); - require("../../client-src"); - [[, onSocketMessage]] = socket.mock.calls; + // Use simple boolean + globalThis.__resourceQuery = "?overlay=true"; + await reloadClient(); + + onSocketMessage.warnings(["warn2"]); + expect(overlay.send).toHaveBeenCalledTimes(1); + expect(overlay.send).toHaveBeenLastCalledWith({ + type: "BUILD_ERROR", + level: "warning", + messages: ["warn2"], + }); - onSocketMessage.warnings(["warn2"]); - expect(overlay.send).toHaveBeenCalledTimes(1); - expect(overlay.send).toHaveBeenLastCalledWith({ - type: "BUILD_ERROR", - level: "warning", - messages: ["warn2"], - }); - - onSocketMessage.errors(["error2"]); - expect(overlay.send).toHaveBeenCalledTimes(2); - expect(overlay.send).toHaveBeenLastCalledWith({ - type: "BUILD_ERROR", - level: "error", - messages: ["error2"], - }); + onSocketMessage.errors(["error2"]); + expect(overlay.send).toHaveBeenCalledTimes(2); + expect(overlay.send).toHaveBeenLastCalledWith({ + type: "BUILD_ERROR", + level: "error", + messages: ["error2"], }); }); - it("should run onSocketMessage.error", () => { + it("should run onSocketMessage.error", (t) => { onSocketMessage.error("error!!"); - expect(log.log.error.mock.calls[0][0]).toMatchSnapshot(); + t.assert.snapshot(log.log.error.mock.calls[0][0]); }); - it("should run onSocketMessage.close", () => { + it("should run onSocketMessage.close", (t) => { onSocketMessage.close(); - expect(log.log.info.mock.calls[1][0]).toMatchSnapshot(); - expect(sendMessage.mock.calls[0][0]).toMatchSnapshot(); + t.assert.snapshot(log.log.info.mock.calls[1][0]); + t.assert.snapshot(sendMessage.mock.calls[0][0]); }); - it("should run onSocketMessage.close (hot enabled)", () => { + it("should run onSocketMessage.close (hot enabled)", (t) => { // enabling hot onSocketMessage.hot(); onSocketMessage.close(); - expect(log.log.info.mock.calls[1][0]).toMatchSnapshot(); - expect(sendMessage.mock.calls[0][0]).toMatchSnapshot(); + t.assert.snapshot(log.log.info.mock.calls[1][0]); + t.assert.snapshot(sendMessage.mock.calls[0][0]); }); - it("should run onSocketMessage.close (liveReload enabled)", () => { + it("should run onSocketMessage.close (liveReload enabled)", (t) => { // enabling liveReload onSocketMessage.liveReload(); onSocketMessage.close(); - expect(log.log.info.mock.calls[1][0]).toMatchSnapshot(); - expect(sendMessage.mock.calls[0][0]).toMatchSnapshot(); + t.assert.snapshot(log.log.info.mock.calls[1][0]); + t.assert.snapshot(sendMessage.mock.calls[0][0]); }); }); diff --git a/test/client/socket-helper.test.js b/test/client/socket-helper.test.js index 2ebcf25c98..a8371a5546 100644 --- a/test/client/socket-helper.test.js +++ b/test/client/socket-helper.test.js @@ -1,56 +1,85 @@ +import "../helpers/jsdom-setup.js"; + +import { beforeEach, describe, it, mock } from "node:test"; +import { expect } from "expect"; +import { fn } from "jest-mock"; + /** - * @jest-environment jsdom + * Build a fresh mock WebSocketClient class. Each `new MockClient(url)` + * registers the instance and arguments on the static `.mock` so tests can + * assert on them. + * @returns {new (url: string) => unknown} mock client constructor */ - -"use strict"; +function createMockClient() { + class MockClient { + constructor(url) { + MockClient.mock.instances.push(this); + MockClient.mock.calls.push([url]); + this.onOpen = fn(); + this.onClose = fn(); + this.onMessage = fn(); + } + } + MockClient.mock = { instances: [], calls: [] }; + return MockClient; +} describe("socket", () => { beforeEach(() => { - jest.resetAllMocks(); - jest.resetModules(); + delete globalThis.__webpack_dev_server_client__; }); - it("should default to WebsocketClient when no __webpack_dev_server_client__ set", () => { - jest.mock("../../client/clients/WebSocketClient"); - - const socket = require("../../client/socket").default; - const WebsocketClient = - require("../../client/clients/WebSocketClient").default; - - const mockHandler = jest.fn(); - - socket("my.url", { - example: mockHandler, - }); - - const [mockClientInstance] = WebsocketClient.mock.instances; - - // this simulates receiving a message from the server and passing it - // along to the callback of onMessage - mockClientInstance.onMessage.mock.calls[0][0]( - JSON.stringify({ - type: "example", - data: "hello world", - params: { foo: "bar" }, - }), + it("should default to WebsocketClient when no __webpack_dev_server_client__ set", async (t) => { + const MockClient = createMockClient(); + const webSocketClientMock = mock.module( + "../../client-src/clients/WebSocketClient.js", + { + defaultExport: MockClient, + }, ); - expect(WebsocketClient.mock.calls[0]).toMatchSnapshot(); - expect(mockClientInstance.onOpen.mock.calls).toMatchSnapshot(); - expect(mockClientInstance.onClose.mock.calls).toMatchSnapshot(); - expect(mockClientInstance.onMessage.mock.calls).toMatchSnapshot(); - expect(mockHandler.mock.calls).toMatchSnapshot(); + try { + const freshSocket = ( + await import(`../../client-src/socket.js?t=${Date.now()}`) + ).default; + + const mockHandler = fn(); + + freshSocket("my.url", { + example: mockHandler, + }); + + const [mockClientInstance] = MockClient.mock.instances; + + mockClientInstance.onMessage.mock.calls[0][0]( + JSON.stringify({ + type: "example", + data: "hello world", + params: { foo: "bar" }, + }), + ); + + t.assert.snapshot(MockClient.mock.calls[0]); + t.assert.snapshot(mockClientInstance.onOpen.mock.calls); + t.assert.snapshot(mockClientInstance.onClose.mock.calls); + t.assert.snapshot(mockClientInstance.onMessage.mock.calls); + t.assert.snapshot(mockHandler.mock.calls); + } finally { + webSocketClientMock.restore(); + } }); - it("should use __webpack_dev_server_client__ when set", () => { - jest.mock("../../client/clients/WebSocketClient"); - - const socket = require("../../client/socket").default; + it("should use __webpack_dev_server_client__ when set", async (t) => { + const MockClient = createMockClient(); + globalThis.__webpack_dev_server_client__ = MockClient; - globalThis.__webpack_dev_server_client__ = - require("../../client/clients/WebSocketClient").default; + const socket = ( + await import( + `../../client-src/socket.js?t=${Date.now()}-${Math.random()}` + ) + ).default; - const mockHandler = jest.fn(); + const mockHandler = fn(); socket("my.url", { example: mockHandler, @@ -59,8 +88,6 @@ describe("socket", () => { const [mockClientInstance] = globalThis.__webpack_dev_server_client__.mock.instances; - // this simulates receiving a message from the server and passing it - // along to the callback of onMessage mockClientInstance.onMessage.mock.calls[0][0]( JSON.stringify({ type: "example", @@ -69,25 +96,25 @@ describe("socket", () => { }), ); - expect( - globalThis.__webpack_dev_server_client__.mock.calls[0], - ).toMatchSnapshot(); - expect(mockClientInstance.onOpen.mock.calls).toMatchSnapshot(); - expect(mockClientInstance.onClose.mock.calls).toMatchSnapshot(); - expect(mockClientInstance.onMessage.mock.calls).toMatchSnapshot(); - expect(mockHandler.mock.calls).toMatchSnapshot(); + t.assert.snapshot(globalThis.__webpack_dev_server_client__.mock.calls[0]); + t.assert.snapshot(mockClientInstance.onOpen.mock.calls); + t.assert.snapshot(mockClientInstance.onClose.mock.calls); + t.assert.snapshot(mockClientInstance.onMessage.mock.calls); + t.assert.snapshot(mockHandler.mock.calls); }); - it("should export initialized client", () => { - const socket = require("../../client/socket").default; + it("should export initialized client", async () => { + const MockClient = createMockClient(); + globalThis.__webpack_dev_server_client__ = MockClient; - const nonInitializedInstance = require("../../client/socket").client; - - expect(nonInitializedInstance).toBeNull(); + const socketMod = await import( + `../../client-src/socket.js?t=${Date.now()}-${Math.random()}` + ); + const socket = socketMod.default; socket("my.url", {}); - const initializedInstance = require("../../client/socket").client; + const initializedInstance = socketMod.client; expect(initializedInstance).not.toBeNull(); expect(typeof initializedInstance.onClose).toBe("function"); diff --git a/test/client/utils/__snapshots__/getCurrentScriptSource.test.js.snap.webpack5 b/test/client/utils/__snapshots__/getCurrentScriptSource.test.js.snap.webpack5 index 76ff325ffa..7a5d695376 100644 --- a/test/client/utils/__snapshots__/getCurrentScriptSource.test.js.snap.webpack5 +++ b/test/client/utils/__snapshots__/getCurrentScriptSource.test.js.snap.webpack5 @@ -1,7 +1,11 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`'getCurrentScriptSource' function > should fail when 'document.currentScript' doesn't exist and no 'script' tags 1`] = ` +[Error: [webpack-dev-server] Failed to get current script source.] +`; -exports[`'getCurrentScriptSource' function should fail when 'document.currentScript' doesn't exist and no 'script' tags 1`] = `[Error: [webpack-dev-server] Failed to get current script source.]`; +exports[`'getCurrentScriptSource' function > should fail when 'document.scripts' doesn't exist and no scripts 1`] = ` +[Error: [webpack-dev-server] Failed to get current script source.] +`; -exports[`'getCurrentScriptSource' function should fail when 'document.scripts' doesn't exist and no scripts 1`] = `[Error: [webpack-dev-server] Failed to get current script source.]`; - -exports[`'getCurrentScriptSource' function should fail when no scripts with the 'scr' attribute 1`] = `[Error: [webpack-dev-server] Failed to get current script source.]`; +exports[`'getCurrentScriptSource' function > should fail when no scripts with the 'scr' attribute 1`] = ` +[Error: [webpack-dev-server] Failed to get current script source.] +`; diff --git a/test/client/utils/__snapshots__/log.test.js.snap.webpack5 b/test/client/utils/__snapshots__/log.test.js.snap.webpack5 index b02da380e8..29e0eba274 100644 --- a/test/client/utils/__snapshots__/log.test.js.snap.webpack5 +++ b/test/client/utils/__snapshots__/log.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`'log' function should set log level via setLogLevel 1`] = ` +exports[`'log' function > should set log level via setLogLevel 1`] = ` [ [ { diff --git a/test/client/utils/__snapshots__/sendMessage.test.js.snap.webpack5 b/test/client/utils/__snapshots__/sendMessage.test.js.snap.webpack5 index e99efa7e7f..ee89e94a8c 100644 --- a/test/client/utils/__snapshots__/sendMessage.test.js.snap.webpack5 +++ b/test/client/utils/__snapshots__/sendMessage.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`'sendMessage' function should run self.postMessage 1`] = ` +exports[`'sendMessage' function > should run self.postMessage 1`] = ` [ { "data": "bar", diff --git a/test/client/utils/createSocketURL.test.js b/test/client/utils/createSocketURL.test.js index 3170d8fa62..71a9c84b7b 100644 --- a/test/client/utils/createSocketURL.test.js +++ b/test/client/utils/createSocketURL.test.js @@ -1,8 +1,7 @@ -/** - * @jest-environment jsdom - */ +import { describe, it } from "node:test"; +import { expect } from "expect"; -"use strict"; +import "../../helpers/jsdom-setup.js"; describe("'createSocketURL' function", () => { globalThis.__webpack_hash__ = "hash"; @@ -105,7 +104,7 @@ describe("'createSocketURL' function", () => { ]; for (const [__resourceQuery, location, expected] of samples) { - it(`should return '${expected}' socket URL when '__resourceQuery' is '${__resourceQuery}' and 'self.location' is '${location}'`, () => { + it(`should return '${expected}' socket URL when '__resourceQuery' is '${__resourceQuery}' and 'self.location' is '${location}'`, async () => { globalThis.__resourceQuery = __resourceQuery; if (__resourceQuery === null) { @@ -115,7 +114,12 @@ describe("'createSocketURL' function", () => { }); } - const client = require("../../../client-src/index"); + // Force a fresh evaluation each iteration so top-level state in + // client-src doesn't bleed between cases. + const indexUrl = import.meta.resolve("../../../client-src/index.js"); + const client = await import( + `${indexUrl}?t=${Date.now()}-${Math.random()}` + ); const { createSocketURL } = client; const { parseURL } = client; @@ -137,7 +141,5 @@ describe("'createSocketURL' function", () => { expect(createSocketURL(parsedURL)).toBe(expected); }); - - jest.resetModules(); } }); diff --git a/test/client/utils/getCurrentScriptSource.test.js b/test/client/utils/getCurrentScriptSource.test.js index 8eca65c0bd..058c5a60c8 100644 --- a/test/client/utils/getCurrentScriptSource.test.js +++ b/test/client/utils/getCurrentScriptSource.test.js @@ -1,18 +1,19 @@ -/** - * @jest-environment jsdom - */ +import { afterEach, beforeEach, describe, it } from "node:test"; +import { expect } from "expect"; -"use strict"; +import "../../helpers/jsdom-setup.js"; describe("'getCurrentScriptSource' function", () => { let getCurrentScriptSource; - beforeEach(() => { + beforeEach(async () => { globalThis.__webpack_hash__ = "mock-hash"; globalThis.__resourceQuery = "?protocol=ws&hostname=0.0.0.0"; - getCurrentScriptSource = - require("../../../client-src/index").getCurrentScriptSource; + const indexUrl = import.meta.resolve("../../../client-src/index.js"); + ({ getCurrentScriptSource } = await import( + `${indexUrl}?t=${Date.now()}-${Math.random()}` + )); }); afterEach(() => { @@ -26,11 +27,11 @@ describe("'getCurrentScriptSource' function", () => { }); }); - it("should fail when 'document.currentScript' doesn't exist and no 'script' tags", () => { + it("should fail when 'document.currentScript' doesn't exist and no 'script' tags", (t) => { try { getCurrentScriptSource(); } catch (error) { - expect(error).toMatchSnapshot(); + t.assert.snapshot(error); } }); @@ -46,7 +47,7 @@ describe("'getCurrentScriptSource' function", () => { expect(getCurrentScriptSource()).toBe("foo"); }); - it("should fail when 'document.scripts' doesn't exist and no scripts", () => { + it("should fail when 'document.scripts' doesn't exist and no scripts", (t) => { Object.defineProperty(document, "scripts", { value: undefined, writable: true, @@ -55,7 +56,7 @@ describe("'getCurrentScriptSource' function", () => { try { getCurrentScriptSource(); } catch (error) { - expect(error).toMatchSnapshot(); + t.assert.snapshot(error); } }); @@ -75,7 +76,7 @@ describe("'getCurrentScriptSource' function", () => { expect(getCurrentScriptSource()).toBe("bar"); }); - it("should fail when no scripts with the 'scr' attribute", () => { + it("should fail when no scripts with the 'scr' attribute", (t) => { const elements = ["foo", "bar"].map(() => document.createElement("script")); Object.defineProperty(document, "scripts", { @@ -85,7 +86,7 @@ describe("'getCurrentScriptSource' function", () => { try { getCurrentScriptSource(); } catch (error) { - expect(error).toMatchSnapshot(); + t.assert.snapshot(error); } }); }); diff --git a/test/client/utils/log.test.js b/test/client/utils/log.test.js index 53c0fb64a5..aa7337698e 100644 --- a/test/client/utils/log.test.js +++ b/test/client/utils/log.test.js @@ -1,46 +1,59 @@ -/** - * @jest-environment jsdom - */ +import "../../helpers/jsdom-setup.js"; -"use strict"; +import { afterEach, beforeEach, describe, it, mock } from "node:test"; +import { expect } from "expect"; +import { fn } from "jest-mock"; describe("'log' function", () => { - let logMock; - let setLogLevel; + let logger; + let loggerMockCtx; beforeEach(() => { - jest.setMock("webpack/lib/logging/runtime", { - getLogger: jest.fn(), - configureDefaultLogger: jest.fn(), + logger = { + getLogger: fn(), + configureDefaultLogger: fn(), + }; + // Mock the intermediate module that log.js imports directly. Mocking the + // deeper webpack runtime through the re-export chain doesn't propagate; + // mocking the file log.js actually imports does. + loggerMockCtx = mock.module("../../../client-src/modules/logger/index.js", { + defaultExport: logger, }); - logMock = require("webpack/lib/logging/runtime"); - - setLogLevel = require("../../../client-src/utils/log").setLogLevel; }); afterEach(() => { - logMock.getLogger.mockClear(); - logMock.configureDefaultLogger.mockClear(); + loggerMockCtx.restore(); }); - it("should set info as the default level and create logger", () => { - const { getLogger } = logMock; - const { configureDefaultLogger } = logMock; + /** + * Force a fresh evaluation of log.js so the mocked logger is observed. + * @returns {Promise} the freshly evaluated log module + */ + function freshLogModule() { + const url = import.meta.resolve("../../../client-src/utils/log.js"); + return import(`${url}?t=${Date.now()}-${Math.random()}`); + } + + it("should set info as the default level and create logger", async () => { + await freshLogModule(); - expect(configureDefaultLogger).toHaveBeenCalled(); - expect(configureDefaultLogger.mock.calls[0][0]).toEqual({ + expect(logger.configureDefaultLogger).toHaveBeenCalledWith({ level: "info", }); - - expect(getLogger).toHaveBeenCalled(); - expect(getLogger.mock.calls[0][0]).toBe("webpack-dev-server"); + expect(logger.getLogger).toHaveBeenCalledWith("webpack-dev-server"); }); - it("should set log level via setLogLevel", () => { + it("should set log level via setLogLevel", async (t) => { + const { setLogLevel } = await freshLogModule(); + + // Drop the call recorded by the module-load setLogLevel(defaultLevel) + // so the snapshot only reflects what this test triggers. + logger.configureDefaultLogger.mockClear(); + for (const level of ["none", "error", "warn", "info", "log", "verbose"]) { setLogLevel(level); } - expect(logMock.configureDefaultLogger.mock.calls).toMatchSnapshot(); + t.assert.snapshot(logger.configureDefaultLogger.mock.calls); }); }); diff --git a/test/client/utils/sendMessage.test.js b/test/client/utils/sendMessage.test.js index 3bfdb588d5..69ed0179fa 100644 --- a/test/client/utils/sendMessage.test.js +++ b/test/client/utils/sendMessage.test.js @@ -1,22 +1,17 @@ -/** - * @jest-environment jsdom - */ +import "../../helpers/jsdom-setup.js"; -"use strict"; - -const sendMessage = require("../../../client-src/utils/sendMessage").default; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import { spyOn } from "jest-mock"; +import sendMessage from "../../../client-src/utils/sendMessage.js"; describe("'sendMessage' function", () => { - afterEach(() => { - jest.resetAllMocks(); - }); - - it("should run self.postMessage", () => { - jest.spyOn(globalThis, "postMessage").mockImplementation(); + it("should run self.postMessage", (t) => { + spyOn(globalThis, "postMessage").mockImplementation(); sendMessage("foo", "bar"); expect(self.postMessage).toHaveBeenCalled(); - expect(self.postMessage.mock.calls[0]).toMatchSnapshot(); + t.assert.snapshot(self.postMessage.mock.calls[0]); }); }); diff --git a/test/e2e/__snapshots__/allowed-hosts.test.js.snap.webpack5 b/test/e2e/__snapshots__/allowed-hosts.test.js.snap.webpack5 index edd5d77571..68857193d5 100644 --- a/test/e2e/__snapshots__/allowed-hosts.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/allowed-hosts.test.js.snap.webpack5 @@ -1,198 +1,148 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`allowed hosts check host headers should allow hosts in allowedHosts: console messages 1`] = `[]`; - -exports[`allowed hosts check host headers should allow hosts in allowedHosts: page errors 1`] = `[]`; - -exports[`allowed hosts check host headers should allow hosts in allowedHosts: response status 1`] = `200`; - -exports[`allowed hosts check host headers should allow hosts that pass a wildcard in allowedHosts: console messages 1`] = `[]`; - -exports[`allowed hosts check host headers should allow hosts that pass a wildcard in allowedHosts: page errors 1`] = `[]`; - -exports[`allowed hosts check host headers should allow hosts that pass a wildcard in allowedHosts: response status 1`] = `200`; - -exports[`allowed hosts check host headers should always allow \`localhost\` if options.allowedHosts is auto: console messages 1`] = `[]`; - -exports[`allowed hosts check host headers should always allow \`localhost\` if options.allowedHosts is auto: page errors 1`] = `[]`; - -exports[`allowed hosts check host headers should always allow \`localhost\` if options.allowedHosts is auto: response status 1`] = `200`; - -exports[`allowed hosts check host headers should always allow \`localhost\` subdomain if options.allowedHosts is auto: console messages 1`] = `[]`; - -exports[`allowed hosts check host headers should always allow \`localhost\` subdomain if options.allowedHosts is auto: page errors 1`] = `[]`; - -exports[`allowed hosts check host headers should always allow \`localhost\` subdomain if options.allowedHosts is auto: response status 1`] = `200`; - -exports[`allowed hosts check host headers should always allow any host if options.allowedHosts is all: console messages 1`] = `[]`; - -exports[`allowed hosts check host headers should always allow any host if options.allowedHosts is all: page errors 1`] = `[]`; - -exports[`allowed hosts check host headers should always allow any host if options.allowedHosts is all: response status 1`] = `200`; - -exports[`allowed hosts check host headers should always allow value from the \`host\` options if options.allowedHosts is auto: console messages 1`] = `[]`; +exports[`allowed hosts > check host headers > should NOT allow websocket connection when allowedHosts is restrictive and excludes every loopback alias 1`] = ` +200 +`; -exports[`allowed hosts check host headers should always allow value from the \`host\` options if options.allowedHosts is auto: page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should NOT allow websocket connection when allowedHosts is restrictive and excludes every loopback alias 2`] = ` +[] +`; -exports[`allowed hosts check host headers should always allow value from the \`host\` options if options.allowedHosts is auto: response status 1`] = `200`; +exports[`allowed hosts > check host headers > should NOT allow websocket connection when allowedHosts is restrictive and excludes every loopback alias 3`] = ` +[] +`; -exports[`allowed hosts check host headers should always allow value of the \`host\` option from the \`client.webSocketURL\` option if options.allowedHosts is auto: console messages 1`] = `[]`; +exports[`allowed hosts > check host headers > should NOT allow websocket connection when origin is a non-loopback address mismatching host (loopback fix must not widen trust) 1`] = ` +200 +`; -exports[`allowed hosts check host headers should always allow value of the \`host\` option from the \`client.webSocketURL\` option if options.allowedHosts is auto: page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should NOT allow websocket connection when origin is a non-loopback address mismatching host (loopback fix must not widen trust) 2`] = ` +[] +`; -exports[`allowed hosts check host headers should always allow value of the \`host\` option from the \`client.webSocketURL\` option if options.allowedHosts is auto: response status 1`] = `200`; +exports[`allowed hosts > check host headers > should NOT allow websocket connection when origin is a non-loopback address mismatching host (loopback fix must not widen trust) 3`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using "[::1] host to web socket server with the "auto" value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`allowed hosts > check host headers > should allow hosts in allowedHosts 1`] = ` +200 `; -exports[`allowed hosts should connect web socket client using "[::1] host to web socket server with the "auto" value ("sockjs"): page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should allow hosts in allowedHosts 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using "[::1] host to web socket server with the "auto" value ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`allowed hosts > check host headers > should allow hosts in allowedHosts 3`] = ` +[] `; -exports[`allowed hosts should connect web socket client using "[::1] host to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should allow hosts that pass a wildcard in allowedHosts 1`] = ` +200 +`; -exports[`allowed hosts should connect web socket client using "0.0.0.0" host to web socket server with the "auto" value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`allowed hosts > check host headers > should allow hosts that pass a wildcard in allowedHosts 2`] = ` +[] `; -exports[`allowed hosts should connect web socket client using "0.0.0.0" host to web socket server with the "auto" value ("sockjs"): page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should allow hosts that pass a wildcard in allowedHosts 3`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using "0.0.0.0" host to web socket server with the "auto" value ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`allowed hosts > check host headers > should allow websocket connection when host is 'localhost' but resolves to '127.0.0.1' (loopback alias mismatch) 1`] = ` +200 `; -exports[`allowed hosts should connect web socket client using "0.0.0.0" host to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should allow websocket connection when host is 'localhost' but resolves to '127.0.0.1' (loopback alias mismatch) 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using "127.0.0.1" host to web socket server by default ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`allowed hosts > check host headers > should allow websocket connection when host is 'localhost' but resolves to '127.0.0.1' (loopback alias mismatch) 3`] = ` +[] `; -exports[`allowed hosts should connect web socket client using "127.0.0.1" host to web socket server by default ("sockjs"): page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should allow websocket connection when host is 'localhost' but resolves to '::1' (loopback alias mismatch) 1`] = ` +200 +`; -exports[`allowed hosts should connect web socket client using "127.0.0.1" host to web socket server by default ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`allowed hosts > check host headers > should allow websocket connection when host is 'localhost' but resolves to '::1' (loopback alias mismatch) 2`] = ` +[] `; -exports[`allowed hosts should connect web socket client using "127.0.0.1" host to web socket server by default ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should allow websocket connection when host is 'localhost' but resolves to '::1' (loopback alias mismatch) 3`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using "127.0.0.1" host to web socket server with the "auto" value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`allowed hosts > check host headers > should allow websocket connection when origin is '127.0.0.1' but host is 'localhost' (reverse loopback alias mismatch) 1`] = ` +200 `; -exports[`allowed hosts should connect web socket client using "127.0.0.1" host to web socket server with the "auto" value ("sockjs"): page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should allow websocket connection when origin is '127.0.0.1' but host is 'localhost' (reverse loopback alias mismatch) 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using "127.0.0.1" host to web socket server with the "auto" value ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`allowed hosts > check host headers > should allow websocket connection when origin is '127.0.0.1' but host is 'localhost' (reverse loopback alias mismatch) 3`] = ` +[] `; -exports[`allowed hosts should connect web socket client using "127.0.0.1" host to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should always allow \`localhost\` if options.allowedHosts is auto 1`] = ` +200 +`; -exports[`allowed hosts should connect web socket client using "chrome-extension:" protocol to web socket server with the "auto" value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`allowed hosts > check host headers > should always allow \`localhost\` if options.allowedHosts is auto 2`] = ` +[] `; -exports[`allowed hosts should connect web socket client using "chrome-extension:" protocol to web socket server with the "auto" value ("sockjs"): page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should always allow \`localhost\` if options.allowedHosts is auto 3`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using "chrome-extension:" protocol to web socket server with the "auto" value ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`allowed hosts > check host headers > should always allow \`localhost\` subdomain if options.allowedHosts is auto 1`] = ` +200 `; -exports[`allowed hosts should connect web socket client using "chrome-extension:" protocol to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should always allow \`localhost\` subdomain if options.allowedHosts is auto 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using "file:" protocol to web socket server with the "auto" value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`allowed hosts > check host headers > should always allow \`localhost\` subdomain if options.allowedHosts is auto 3`] = ` +[] `; -exports[`allowed hosts should connect web socket client using "file:" protocol to web socket server with the "auto" value ("sockjs"): page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should always allow any host if options.allowedHosts is all 1`] = ` +200 +`; -exports[`allowed hosts should connect web socket client using "file:" protocol to web socket server with the "auto" value ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`allowed hosts > check host headers > should always allow any host if options.allowedHosts is all 2`] = ` +[] `; -exports[`allowed hosts should connect web socket client using "file:" protocol to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should always allow any host if options.allowedHosts is all 3`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using "localhost" host to web socket server by default ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`allowed hosts > check host headers > should always allow value from the \`host\` options if options.allowedHosts is auto 1`] = ` +200 `; -exports[`allowed hosts should connect web socket client using "localhost" host to web socket server by default ("sockjs"): page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should always allow value from the \`host\` options if options.allowedHosts is auto 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using "localhost" host to web socket server by default ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`allowed hosts > check host headers > should always allow value from the \`host\` options if options.allowedHosts is auto 3`] = ` +[] `; -exports[`allowed hosts should connect web socket client using "localhost" host to web socket server by default ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should always allow value of the \`host\` option from the \`client.webSocketURL\` option if options.allowedHosts is auto 1`] = ` +200 +`; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the "all" value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`allowed hosts > check host headers > should always allow value of the \`host\` option from the \`client.webSocketURL\` option if options.allowedHosts is auto 2`] = ` +[] `; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the "all" value ("sockjs"): page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should always allow value of the \`host\` option from the \`client.webSocketURL\` option if options.allowedHosts is auto 3`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the "all" value ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using \"0.0.0.0\" host to web socket server with the \"auto\" value (\"ws\") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -200,9 +150,11 @@ exports[`allowed hosts should connect web socket client using custom hostname to ] `; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the "all" value ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using \"0.0.0.0\" host to web socket server with the \"auto\" value (\"ws\") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the "all" value in array ("sockjs"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using \"127.0.0.1\" host to web socket server by default (\"ws\") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -210,9 +162,11 @@ exports[`allowed hosts should connect web socket client using custom hostname to ] `; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the "all" value in array ("sockjs"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using \"127.0.0.1\" host to web socket server by default (\"ws\") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the "all" value in array ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using \"127.0.0.1\" host to web socket server with the \"auto\" value (\"ws\") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -220,9 +174,11 @@ exports[`allowed hosts should connect web socket client using custom hostname to ] `; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the "all" value in array ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using \"127.0.0.1\" host to web socket server with the \"auto\" value (\"ws\") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the custom hostname value ("sockjs"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using \"[::1] host to web socket server with the \"auto\" value (\"ws\") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -230,9 +186,11 @@ exports[`allowed hosts should connect web socket client using custom hostname to ] `; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the custom hostname value ("sockjs"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using \"[::1] host to web socket server with the \"auto\" value (\"ws\") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the custom hostname value ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using \"chrome-extension:\" protocol to web socket server with the \"auto\" value (\"ws\") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -240,9 +198,11 @@ exports[`allowed hosts should connect web socket client using custom hostname to ] `; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the custom hostname value ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using \"chrome-extension:\" protocol to web socket server with the \"auto\" value (\"ws\") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot ("sockjs"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using \"file:\" protocol to web socket server with the \"auto\" value (\"ws\") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -250,9 +210,11 @@ exports[`allowed hosts should connect web socket client using custom hostname to ] `; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot ("sockjs"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using \"file:\" protocol to web socket server with the \"auto\" value (\"ws\") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using \"localhost\" host to web socket server by default (\"ws\") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -260,9 +222,11 @@ exports[`allowed hosts should connect web socket client using custom hostname to ] `; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using \"localhost\" host to web socket server by default (\"ws\") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the multiple custom hostname values ("sockjs"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using custom hostname to web socket server with the \"all\" value (\"ws\") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -270,9 +234,11 @@ exports[`allowed hosts should connect web socket client using custom hostname to ] `; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the multiple custom hostname values ("sockjs"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using custom hostname to web socket server with the \"all\" value (\"ws\") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the multiple custom hostname values ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using custom hostname to web socket server with the \"all\" value in array (\"ws\") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -280,9 +246,11 @@ exports[`allowed hosts should connect web socket client using custom hostname to ] `; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the multiple custom hostname values ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using custom hostname to web socket server with the \"all\" value in array (\"ws\") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using custom sub hostname to web socket server with the custom hostname value ("sockjs"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using custom hostname to web socket server with the custom hostname value (\"ws\") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -290,9 +258,11 @@ exports[`allowed hosts should connect web socket client using custom sub hostnam ] `; -exports[`allowed hosts should connect web socket client using custom sub hostname to web socket server with the custom hostname value ("sockjs"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using custom hostname to web socket server with the custom hostname value (\"ws\") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using custom sub hostname to web socket server with the custom hostname value ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot (\"ws\") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -300,9 +270,11 @@ exports[`allowed hosts should connect web socket client using custom sub hostnam ] `; -exports[`allowed hosts should connect web socket client using custom sub hostname to web socket server with the custom hostname value ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot (\"ws\") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using localhost to web socket server with the "auto" value ("sockjs"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using custom hostname to web socket server with the multiple custom hostname values (\"ws\") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -310,9 +282,11 @@ exports[`allowed hosts should connect web socket client using localhost to web s ] `; -exports[`allowed hosts should connect web socket client using localhost to web socket server with the "auto" value ("sockjs"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using custom hostname to web socket server with the multiple custom hostname values (\"ws\") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using localhost to web socket server with the "auto" value ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using custom sub hostname to web socket server with the custom hostname value (\"ws\") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -320,9 +294,11 @@ exports[`allowed hosts should connect web socket client using localhost to web s ] `; -exports[`allowed hosts should connect web socket client using localhost to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using custom sub hostname to web socket server with the custom hostname value (\"ws\") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using origin header containing an IP address with the custom hostname value ("sockjs"): (work) console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using localhost to web socket server with the \"auto\" value (\"ws\") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -330,9 +306,11 @@ exports[`allowed hosts should connect web socket client using origin header cont ] `; -exports[`allowed hosts should connect web socket client using origin header containing an IP address with the custom hostname value ("sockjs"): (work) page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using localhost to web socket server with the \"auto\" value (\"ws\") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using origin header containing an IP address with the custom hostname value ("ws"): (work) console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using origin header containing an IP address with the custom hostname value (\"ws\") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -340,42 +318,25 @@ exports[`allowed hosts should connect web socket client using origin header cont ] `; -exports[`allowed hosts should connect web socket client using origin header containing an IP address with the custom hostname value ("ws"): (work) page errors 1`] = `[]`; - -exports[`allowed hosts should disconnect web client using localhost to web socket server with the "auto" value ("sockjs"): console messages 1`] = ` -[ - "Failed to load resource: the server responded with a status of 403 (Forbidden)", -] +exports[`allowed hosts > should connect web socket client using origin header containing an IP address with the custom hostname value (\"ws\") 2`] = ` +[] `; -exports[`allowed hosts should disconnect web client using localhost to web socket server with the "auto" value ("sockjs"): html 1`] = `"
Invalid Host header
"`; - -exports[`allowed hosts should disconnect web client using localhost to web socket server with the "auto" value ("sockjs"): page errors 1`] = `[]`; +exports[`allowed hosts > should disconnect web client using localhost to web socket server with the \"auto\" value (\"ws\") 1`] = ` +"
Invalid Host header
" +`; -exports[`allowed hosts should disconnect web client using localhost to web socket server with the "auto" value ("ws"): console messages 1`] = ` +exports[`allowed hosts > should disconnect web client using localhost to web socket server with the \"auto\" value (\"ws\") 2`] = ` [ "Failed to load resource: the server responded with a status of 403 (Forbidden)", ] `; -exports[`allowed hosts should disconnect web client using localhost to web socket server with the "auto" value ("ws"): html 1`] = `"
Invalid Host header
"`; - -exports[`allowed hosts should disconnect web client using localhost to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; - -exports[`allowed hosts should disconnect web client using origin header containing an IP address with the "auto" value ("sockjs"): (work) console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - "[webpack-dev-server] Invalid Host/Origin header", - "[webpack-dev-server] Disconnected!", - "[webpack-dev-server] Trying to reconnect...", -] +exports[`allowed hosts > should disconnect web client using localhost to web socket server with the \"auto\" value (\"ws\") 3`] = ` +[] `; -exports[`allowed hosts should disconnect web client using origin header containing an IP address with the "auto" value ("sockjs"): (work) page errors 1`] = `[]`; - -exports[`allowed hosts should disconnect web client using origin header containing an IP address with the "auto" value ("ws"): (work) console messages 1`] = ` +exports[`allowed hosts > should disconnect web client using origin header containing an IP address with the \"auto\" value (\"ws\") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -386,22 +347,11 @@ exports[`allowed hosts should disconnect web client using origin header containi ] `; -exports[`allowed hosts should disconnect web client using origin header containing an IP address with the "auto" value ("ws"): (work) page errors 1`] = `[]`; - -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - "[webpack-dev-server] Invalid Host/Origin header", - "[webpack-dev-server] Disconnected!", - "[webpack-dev-server] Trying to reconnect...", -] +exports[`allowed hosts > should disconnect web client using origin header containing an IP address with the \"auto\" value (\"ws\") 2`] = ` +[] `; -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header ("sockjs"): page errors 1`] = `[]`; - -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header ("ws"): console messages 1`] = ` +exports[`allowed hosts > should disconnect web socket client using custom hostname from web socket server with the \"auto\" value based on the \"host\" header (\"ws\") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -412,22 +362,11 @@ exports[`allowed hosts should disconnect web socket client using custom hostname ] `; -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header ("ws"): page errors 1`] = `[]`; - -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header when "server: 'https'" is enabled ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - "[webpack-dev-server] Invalid Host/Origin header", - "[webpack-dev-server] Disconnected!", - "[webpack-dev-server] Trying to reconnect...", -] +exports[`allowed hosts > should disconnect web socket client using custom hostname from web socket server with the \"auto\" value based on the \"host\" header (\"ws\") 2`] = ` +[] `; -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header when "server: 'https'" is enabled ("sockjs"): page errors 1`] = `[]`; - -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header when "server: 'https'" is enabled ("ws"): console messages 1`] = ` +exports[`allowed hosts > should disconnect web socket client using custom hostname from web socket server with the \"auto\" value based on the \"host\" header when \"server: 'https'\" is enabled (\"ws\") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -438,22 +377,11 @@ exports[`allowed hosts should disconnect web socket client using custom hostname ] `; -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header when "server: 'https'" is enabled ("ws"): page errors 1`] = `[]`; - -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "origin" header ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - "[webpack-dev-server] Invalid Host/Origin header", - "[webpack-dev-server] Disconnected!", - "[webpack-dev-server] Trying to reconnect...", -] +exports[`allowed hosts > should disconnect web socket client using custom hostname from web socket server with the \"auto\" value based on the \"host\" header when \"server: 'https'\" is enabled (\"ws\") 2`] = ` +[] `; -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "origin" header ("sockjs"): page errors 1`] = `[]`; - -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "origin" header ("ws"): console messages 1`] = ` +exports[`allowed hosts > should disconnect web socket client using custom hostname from web socket server with the \"auto\" value based on the \"origin\" header (\"ws\") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -464,4 +392,6 @@ exports[`allowed hosts should disconnect web socket client using custom hostname ] `; -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "origin" header ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should disconnect web socket client using custom hostname from web socket server with the \"auto\" value based on the \"origin\" header (\"ws\") 2`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/api.test.js.snap.webpack5 b/test/e2e/__snapshots__/api.test.js.snap.webpack5 index 0d6367ba1f..9a55574007 100644 --- a/test/e2e/__snapshots__/api.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/api.test.js.snap.webpack5 @@ -1,6 +1,8 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`API > Invalidate callback > should use the default \`noop\` callback when invalidate is called without any callback 1`] = ` +200 +`; -exports[`API Invalidate callback should use the default \`noop\` callback when invalidate is called without any callback: console messages 1`] = ` +exports[`API > Invalidate callback > should use the default \`noop\` callback when invalidate is called without any callback 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -8,11 +10,15 @@ exports[`API Invalidate callback should use the default \`noop\` callback when i ] `; -exports[`API Invalidate callback should use the default \`noop\` callback when invalidate is called without any callback: page errors 1`] = `[]`; +exports[`API > Invalidate callback > should use the default \`noop\` callback when invalidate is called without any callback 3`] = ` +[] +`; -exports[`API Invalidate callback should use the default \`noop\` callback when invalidate is called without any callback: response status 1`] = `200`; +exports[`API > Invalidate callback > should use the provided \`callback\` function 1`] = ` +200 +`; -exports[`API Invalidate callback should use the provided \`callback\` function: console messages 1`] = ` +exports[`API > Invalidate callback > should use the provided \`callback\` function 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -20,29 +26,39 @@ exports[`API Invalidate callback should use the provided \`callback\` function: ] `; -exports[`API Invalidate callback should use the provided \`callback\` function: page errors 1`] = `[]`; +exports[`API > Invalidate callback > should use the provided \`callback\` function 3`] = ` +[] +`; + +exports[`API > Server.checkHostHeader > should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object 1`] = ` +"ws://test.host:8156/ws" +`; -exports[`API Invalidate callback should use the provided \`callback\` function: response status 1`] = `200`; +exports[`API > Server.checkHostHeader > should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object 2`] = ` +200 +`; -exports[`API Server.checkHostHeader should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object: console messages 1`] = ` +exports[`API > Server.checkHostHeader > should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", "Hey.", - "WebSocket connection to 'ws://test.host:8158/ws' failed: Error in connection establishment: net::ERR_NAME_NOT_RESOLVED", + "WebSocket connection to 'ws://test.host:8156/ws' failed: Error in connection establishment: net::ERR_NAME_NOT_RESOLVED", "[webpack-dev-server] JSHandle@object", "[webpack-dev-server] Disconnected!", "[webpack-dev-server] Trying to reconnect...", ] `; -exports[`API Server.checkHostHeader should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object: page errors 1`] = `[]`; - -exports[`API Server.checkHostHeader should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object: response status 1`] = `200`; +exports[`API > Server.checkHostHeader > should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object 4`] = ` +[] +`; -exports[`API Server.checkHostHeader should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object: web socket URL 1`] = `"ws://test.host:8158/ws"`; +exports[`API > Server.getFreePort > should retry finding the port for up to defaultPortRetry times (number) 1`] = ` +200 +`; -exports[`API Server.getFreePort should retry finding the port for up to defaultPortRetry times (number): console messages 1`] = ` +exports[`API > Server.getFreePort > should retry finding the port for up to defaultPortRetry times (number) 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -50,11 +66,15 @@ exports[`API Server.getFreePort should retry finding the port for up to defaultP ] `; -exports[`API Server.getFreePort should retry finding the port for up to defaultPortRetry times (number): page errors 1`] = `[]`; +exports[`API > Server.getFreePort > should retry finding the port for up to defaultPortRetry times (number) 3`] = ` +[] +`; -exports[`API Server.getFreePort should retry finding the port for up to defaultPortRetry times (number): response status 1`] = `200`; +exports[`API > Server.getFreePort > should retry finding the port for up to defaultPortRetry times (string) 1`] = ` +200 +`; -exports[`API Server.getFreePort should retry finding the port for up to defaultPortRetry times (string): console messages 1`] = ` +exports[`API > Server.getFreePort > should retry finding the port for up to defaultPortRetry times (string) 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -62,11 +82,15 @@ exports[`API Server.getFreePort should retry finding the port for up to defaultP ] `; -exports[`API Server.getFreePort should retry finding the port for up to defaultPortRetry times (string): page errors 1`] = `[]`; +exports[`API > Server.getFreePort > should retry finding the port for up to defaultPortRetry times (string) 3`] = ` +[] +`; -exports[`API Server.getFreePort should retry finding the port for up to defaultPortRetry times (string): response status 1`] = `200`; +exports[`API > Server.getFreePort > should retry finding the port when serial ports are busy 1`] = ` +200 +`; -exports[`API Server.getFreePort should retry finding the port when serial ports are busy: console messages 1`] = ` +exports[`API > Server.getFreePort > should retry finding the port when serial ports are busy 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -74,11 +98,15 @@ exports[`API Server.getFreePort should retry finding the port when serial ports ] `; -exports[`API Server.getFreePort should retry finding the port when serial ports are busy: page errors 1`] = `[]`; +exports[`API > Server.getFreePort > should retry finding the port when serial ports are busy 3`] = ` +[] +`; -exports[`API Server.getFreePort should retry finding the port when serial ports are busy: response status 1`] = `200`; +exports[`API > Server.getFreePort > should return the port when the port is \`null\` 1`] = ` +200 +`; -exports[`API Server.getFreePort should return the port when the port is \`null\`: console messages 1`] = ` +exports[`API > Server.getFreePort > should return the port when the port is \`null\` 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -86,11 +114,15 @@ exports[`API Server.getFreePort should return the port when the port is \`null\` ] `; -exports[`API Server.getFreePort should return the port when the port is \`null\`: page errors 1`] = `[]`; +exports[`API > Server.getFreePort > should return the port when the port is \`null\` 3`] = ` +[] +`; -exports[`API Server.getFreePort should return the port when the port is \`null\`: response status 1`] = `200`; +exports[`API > Server.getFreePort > should return the port when the port is undefined 1`] = ` +200 +`; -exports[`API Server.getFreePort should return the port when the port is undefined: console messages 1`] = ` +exports[`API > Server.getFreePort > should return the port when the port is undefined 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -98,13 +130,19 @@ exports[`API Server.getFreePort should return the port when the port is undefine ] `; -exports[`API Server.getFreePort should return the port when the port is undefined: page errors 1`] = `[]`; +exports[`API > Server.getFreePort > should return the port when the port is undefined 3`] = ` +[] +`; -exports[`API Server.getFreePort should return the port when the port is undefined: response status 1`] = `200`; +exports[`API > Server.getFreePort > should throw the error when the port isn't found 1`] = ` +"busy" +`; -exports[`API Server.getFreePort should throw the error when the port isn't found 1`] = `"busy"`; +exports[`API > WEBPACK_SERVE environment variable > should be present 1`] = ` +200 +`; -exports[`API WEBPACK_SERVE environment variable should be present: console messages 1`] = ` +exports[`API > WEBPACK_SERVE environment variable > should be present 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -112,11 +150,11 @@ exports[`API WEBPACK_SERVE environment variable should be present: console messa ] `; -exports[`API WEBPACK_SERVE environment variable should be present: page errors 1`] = `[]`; - -exports[`API WEBPACK_SERVE environment variable should be present: response status 1`] = `200`; +exports[`API > WEBPACK_SERVE environment variable > should be present 3`] = ` +[] +`; -exports[`API latest async API should work and allow to rerun dev server multiple times: console messages 1`] = ` +exports[`API > latest async API > should work and allow to rerun dev server multiple times 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -124,7 +162,11 @@ exports[`API latest async API should work and allow to rerun dev server multiple ] `; -exports[`API latest async API should work and allow to rerun dev server multiple times: console messages 2`] = ` +exports[`API > latest async API > should work and allow to rerun dev server multiple times 2`] = ` +[] +`; + +exports[`API > latest async API > should work and allow to rerun dev server multiple times 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -132,11 +174,11 @@ exports[`API latest async API should work and allow to rerun dev server multiple ] `; -exports[`API latest async API should work and allow to rerun dev server multiple times: page errors 1`] = `[]`; - -exports[`API latest async API should work and allow to rerun dev server multiple times: page errors 2`] = `[]`; +exports[`API > latest async API > should work and allow to rerun dev server multiple times 4`] = ` +[] +`; -exports[`API latest async API should work when using configured manually: console messages 1`] = ` +exports[`API > latest async API > should work when using configured manually 1`] = ` [ "[HMR] Waiting for update signal from WDS...", "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay disabled.", @@ -144,9 +186,11 @@ exports[`API latest async API should work when using configured manually: consol ] `; -exports[`API latest async API should work when using configured manually: page errors 1`] = `[]`; +exports[`API > latest async API > should work when using configured manually 2`] = ` +[] +`; -exports[`API latest async API should work with async API: console messages 1`] = ` +exports[`API > latest async API > should work with async API 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -154,9 +198,11 @@ exports[`API latest async API should work with async API: console messages 1`] = ] `; -exports[`API latest async API should work with async API: page errors 1`] = `[]`; +exports[`API > latest async API > should work with async API 2`] = ` +[] +`; -exports[`API latest async API should work with callback API: console messages 1`] = ` +exports[`API > latest async API > should work with callback API 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -164,4 +210,6 @@ exports[`API latest async API should work with callback API: console messages 1` ] `; -exports[`API latest async API should work with callback API: page errors 1`] = `[]`; +exports[`API > latest async API > should work with callback API 2`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/bonjour.test.js.snap.webpack5 b/test/e2e/__snapshots__/bonjour.test.js.snap.webpack5 index 2ddbc8b934..052b86ba5d 100644 --- a/test/e2e/__snapshots__/bonjour.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/bonjour.test.js.snap.webpack5 @@ -1,6 +1,8 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`bonjour option > as object > should apply bonjour options 1`] = ` +200 +`; -exports[`bonjour option as object should apply bonjour options: console messages 1`] = ` +exports[`bonjour option > as object > should apply bonjour options 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -8,11 +10,15 @@ exports[`bonjour option as object should apply bonjour options: console messages ] `; -exports[`bonjour option as object should apply bonjour options: page errors 1`] = `[]`; +exports[`bonjour option > as object > should apply bonjour options 3`] = ` +[] +`; -exports[`bonjour option as object should apply bonjour options: response status 1`] = `200`; +exports[`bonjour option > as true > should call bonjour with correct params 1`] = ` +200 +`; -exports[`bonjour option as true should call bonjour with correct params: console messages 1`] = ` +exports[`bonjour option > as true > should call bonjour with correct params 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -20,11 +26,15 @@ exports[`bonjour option as true should call bonjour with correct params: console ] `; -exports[`bonjour option as true should call bonjour with correct params: page errors 1`] = `[]`; +exports[`bonjour option > as true > should call bonjour with correct params 3`] = ` +[] +`; -exports[`bonjour option as true should call bonjour with correct params: response status 1`] = `200`; +exports[`bonjour option > bonjour object and 'server' option > should apply bonjour options 1`] = ` +200 +`; -exports[`bonjour option bonjour object and 'server' option should apply bonjour options: console messages 1`] = ` +exports[`bonjour option > bonjour object and 'server' option > should apply bonjour options 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -32,11 +42,15 @@ exports[`bonjour option bonjour object and 'server' option should apply bonjour ] `; -exports[`bonjour option bonjour object and 'server' option should apply bonjour options: page errors 1`] = `[]`; +exports[`bonjour option > bonjour object and 'server' option > should apply bonjour options 3`] = ` +[] +`; -exports[`bonjour option bonjour object and 'server' option should apply bonjour options: response status 1`] = `200`; +exports[`bonjour option > with 'server' option > should call bonjour with 'https' type 1`] = ` +200 +`; -exports[`bonjour option with 'server' option should call bonjour with 'https' type: console messages 1`] = ` +exports[`bonjour option > with 'server' option > should call bonjour with 'https' type 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -44,6 +58,6 @@ exports[`bonjour option with 'server' option should call bonjour with 'https' ty ] `; -exports[`bonjour option with 'server' option should call bonjour with 'https' type: page errors 1`] = `[]`; - -exports[`bonjour option with 'server' option should call bonjour with 'https' type: response status 1`] = `200`; +exports[`bonjour option > with 'server' option > should call bonjour with 'https' type 3`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/built-in-routes.test.js.snap.webpack5 b/test/e2e/__snapshots__/built-in-routes.test.js.snap.webpack5 index 789e304fbe..5e20bc556f 100644 --- a/test/e2e/__snapshots__/built-in-routes.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/built-in-routes.test.js.snap.webpack5 @@ -1,8 +1,12 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`Built in routes > with multi config > should handle GET request to directory index and list all middleware directories 1`] = ` +"text/html; charset=utf-8" +`; -exports[`Built in routes with multi config should handle GET request to directory index and list all middleware directories: console messages 1`] = `[]`; +exports[`Built in routes > with multi config > should handle GET request to directory index and list all middleware directories 2`] = ` +200 +`; -exports[`Built in routes with multi config should handle GET request to directory index and list all middleware directories: directory list 1`] = ` +exports[`Built in routes > with multi config > should handle GET request to directory index and list all middleware directories 3`] = ` "

Assets Report:

" `; -exports[`Built in routes with multi config should handle GET request to directory index and list all middleware directories: page errors 1`] = `[]`; +exports[`Built in routes > with multi config > should handle GET request to directory index and list all middleware directories 4`] = ` +[] +`; -exports[`Built in routes with multi config should handle GET request to directory index and list all middleware directories: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`Built in routes > with multi config > should handle GET request to directory index and list all middleware directories 5`] = ` +[] +`; -exports[`Built in routes with multi config should handle GET request to directory index and list all middleware directories: response status 1`] = `200`; +exports[`Built in routes > with simple config > should handle GET request to directory index and list all middleware directories 1`] = ` +"text/html; charset=utf-8" +`; -exports[`Built in routes with simple config should handle GET request to directory index and list all middleware directories: console messages 1`] = `[]`; +exports[`Built in routes > with simple config > should handle GET request to directory index and list all middleware directories 2`] = ` +200 +`; -exports[`Built in routes with simple config should handle GET request to directory index and list all middleware directories: directory list 1`] = ` +exports[`Built in routes > with simple config > should handle GET request to directory index and list all middleware directories 3`] = ` "

Assets Report:

Compilation: unnamed

  • main.js
  • @@ -32,52 +44,66 @@ exports[`Built in routes with simple config should handle GET request to directo
" `; -exports[`Built in routes with simple config should handle GET request to directory index and list all middleware directories: page errors 1`] = `[]`; - -exports[`Built in routes with simple config should handle GET request to directory index and list all middleware directories: response headers content-type 1`] = `"text/html; charset=utf-8"`; - -exports[`Built in routes with simple config should handle GET request to directory index and list all middleware directories: response status 1`] = `200`; - -exports[`Built in routes with simple config should handle GET request to invalidate endpoint: console messages 1`] = `[]`; - -exports[`Built in routes with simple config should handle GET request to invalidate endpoint: page errors 1`] = `[]`; - -exports[`Built in routes with simple config should handle GET request to invalidate endpoint: response status 1`] = `200`; - -exports[`Built in routes with simple config should handle GET request to magic async chunk: console messages 1`] = `[]`; - -exports[`Built in routes with simple config should handle GET request to magic async chunk: response headers content-type 1`] = `"text/javascript; charset=utf-8"`; - -exports[`Built in routes with simple config should handle GET request to magic async chunk: response status 1`] = `200`; - -exports[`Built in routes with simple config should handle HEAD request to directory index: console messages 1`] = `[]`; +exports[`Built in routes > with simple config > should handle GET request to directory index and list all middleware directories 4`] = ` +[] +`; -exports[`Built in routes with simple config should handle HEAD request to directory index: directory list 1`] = `""`; +exports[`Built in routes > with simple config > should handle GET request to directory index and list all middleware directories 5`] = ` +[] +`; -exports[`Built in routes with simple config should handle HEAD request to directory index: page errors 1`] = `[]`; +exports[`Built in routes > with simple config > should handle GET request to invalidate endpoint 1`] = ` +200 +`; -exports[`Built in routes with simple config should handle HEAD request to directory index: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`Built in routes > with simple config > should handle GET request to invalidate endpoint 2`] = ` +[] +`; -exports[`Built in routes with simple config should handle HEAD request to directory index: response status 1`] = `200`; +exports[`Built in routes > with simple config > should handle GET request to invalidate endpoint 3`] = ` +[] +`; -exports[`Built in routes with simple config should handle HEAD request to magic async chunk: console messages 1`] = `[]`; +exports[`Built in routes > with simple config > should handle GET request to magic async chunk 1`] = ` +"text/javascript; charset=utf-8" +`; -exports[`Built in routes with simple config should handle HEAD request to magic async chunk: response headers content-type 1`] = `"text/javascript; charset=utf-8"`; +exports[`Built in routes > with simple config > should handle GET request to magic async chunk 2`] = ` +200 +`; -exports[`Built in routes with simple config should handle HEAD request to magic async chunk: response status 1`] = `200`; +exports[`Built in routes > with simple config > should handle GET request to magic async chunk 3`] = ` +[] +`; -exports[`Built in routes with simple config should handles GET request to sockjs bundle: console messages 1`] = `[]`; +exports[`Built in routes > with simple config > should handle HEAD request to directory index 1`] = ` +"text/html; charset=utf-8" +`; -exports[`Built in routes with simple config should handles GET request to sockjs bundle: page errors 1`] = `[]`; +exports[`Built in routes > with simple config > should handle HEAD request to directory index 2`] = ` +200 +`; -exports[`Built in routes with simple config should handles GET request to sockjs bundle: response headers content-type 1`] = `"application/javascript; charset=UTF-8"`; +exports[`Built in routes > with simple config > should handle HEAD request to directory index 3`] = ` +"" +`; -exports[`Built in routes with simple config should handles GET request to sockjs bundle: response status 1`] = `200`; +exports[`Built in routes > with simple config > should handle HEAD request to directory index 4`] = ` +[] +`; -exports[`Built in routes with simple config should handles HEAD request to sockjs bundle: console messages 1`] = `[]`; +exports[`Built in routes > with simple config > should handle HEAD request to directory index 5`] = ` +[] +`; -exports[`Built in routes with simple config should handles HEAD request to sockjs bundle: page errors 1`] = `[]`; +exports[`Built in routes > with simple config > should handle HEAD request to magic async chunk 1`] = ` +"text/javascript; charset=utf-8" +`; -exports[`Built in routes with simple config should handles HEAD request to sockjs bundle: response headers content-type 1`] = `"application/javascript; charset=UTF-8"`; +exports[`Built in routes > with simple config > should handle HEAD request to magic async chunk 2`] = ` +200 +`; -exports[`Built in routes with simple config should handles HEAD request to sockjs bundle: response status 1`] = `200`; +exports[`Built in routes > with simple config > should handle HEAD request to magic async chunk 3`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/client-reconnect.test.js.snap.webpack5 b/test/e2e/__snapshots__/client-reconnect.test.js.snap.webpack5 index 6beb3163b8..9b4fc89af7 100644 --- a/test/e2e/__snapshots__/client-reconnect.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/client-reconnect.test.js.snap.webpack5 @@ -1,6 +1,8 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`client.reconnect option > specified as false > should not try to reconnect 1`] = ` +200 +`; -exports[`client.reconnect option specified as false should not try to reconnect: console messages 1`] = ` +exports[`client.reconnect option > specified as false > should not try to reconnect 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -9,29 +11,37 @@ exports[`client.reconnect option specified as false should not try to reconnect: ] `; -exports[`client.reconnect option specified as false should not try to reconnect: page errors 1`] = `[]`; +exports[`client.reconnect option > specified as false > should not try to reconnect 3`] = ` +[] +`; -exports[`client.reconnect option specified as false should not try to reconnect: response status 1`] = `200`; +exports[`client.reconnect option > specified as number > should try to reconnect 2 times 1`] = ` +200 +`; -exports[`client.reconnect option specified as number should try to reconnect 2 times: console messages 1`] = ` +exports[`client.reconnect option > specified as number > should try to reconnect 2 times 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", "Hey.", "[webpack-dev-server] Disconnected!", "[webpack-dev-server] Trying to reconnect...", - "WebSocket connection to 'ws://localhost:8163/ws' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED", + "WebSocket connection to 'ws://localhost:8161/ws' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED", "[webpack-dev-server] JSHandle@object", "[webpack-dev-server] Trying to reconnect...", - "WebSocket connection to 'ws://localhost:8163/ws' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED", + "WebSocket connection to 'ws://localhost:8161/ws' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED", "[webpack-dev-server] JSHandle@object", ] `; -exports[`client.reconnect option specified as number should try to reconnect 2 times: page errors 1`] = `[]`; - -exports[`client.reconnect option specified as number should try to reconnect 2 times: response status 1`] = `200`; +exports[`client.reconnect option > specified as number > should try to reconnect 2 times 3`] = ` +[] +`; -exports[`client.reconnect option specified as true should try to reconnect unlimited times: page errors 1`] = `[]`; +exports[`client.reconnect option > specified as true > should try to reconnect unlimited times 1`] = ` +200 +`; -exports[`client.reconnect option specified as true should try to reconnect unlimited times: response status 1`] = `200`; +exports[`client.reconnect option > specified as true > should try to reconnect unlimited times 2`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/client.test.js.snap.webpack5 b/test/e2e/__snapshots__/client.test.js.snap.webpack5 index 142b64205d..d1c447ec4c 100644 --- a/test/e2e/__snapshots__/client.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/client.test.js.snap.webpack5 @@ -1,21 +1,59 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`client option configure client entry should disable client entry: console messages 1`] = `[]`; - -exports[`client option configure client entry should disable client entry: page errors 1`] = `[]`; - -exports[`client option configure client entry should disable client entry: response status 1`] = `200`; - -exports[`client option default behaviour responds with a 200 status code for /ws path: console messages 1`] = `[]`; - -exports[`client option default behaviour responds with a 200 status code for /ws path: page errors 1`] = `[]`; - -exports[`client option default behaviour responds with a 200 status code for /ws path: response status 1`] = `200`; - -exports[`client option override client entry should disable client entry: response status 1`] = `200`; - -exports[`client option should respect path option responds with a 200 status code for /foo/test/bar path: console messages 1`] = `[]`; - -exports[`client option should respect path option responds with a 200 status code for /foo/test/bar path: page errors 1`] = `[]`; - -exports[`client option should respect path option responds with a 200 status code for /foo/test/bar path: response status 1`] = `200`; +exports[`client option > configure client entry > should disable client entry 1`] = ` +[] +`; + +exports[`client option > configure client entry > should disable client entry 2`] = ` +200 +`; + +exports[`client option > configure client entry > should disable client entry 3`] = ` +[] +`; + +exports[`client option > configure client entry > should disable client entry 4`] = ` +[] +`; + +exports[`client option > default behaviour > responds with a 200 status code for / path 1`] = ` +200 +`; + +exports[`client option > default behaviour > responds with a 200 status code for / path 2`] = ` +[ + "ws://localhost:8104/ws", +] +`; + +exports[`client option > default behaviour > responds with a 200 status code for / path 3`] = ` +[ + "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", + "[HMR] Waiting for update signal from WDS...", + "Hey.", +] +`; + +exports[`client option > default behaviour > responds with a 200 status code for / path 4`] = ` +[] +`; + +exports[`client option > override client entry > should disable client entry 1`] = ` +200 +`; + +exports[`client option > should respect path option > responds with a websocket with the /foo/test/bar path 1`] = ` +[ + "ws://localhost:8104/foo/test/bar", +] +`; + +exports[`client option > should respect path option > responds with a websocket with the /foo/test/bar path 2`] = ` +[ + "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", + "[HMR] Waiting for update signal from WDS...", + "Hey.", +] +`; + +exports[`client option > should respect path option > responds with a websocket with the /foo/test/bar path 3`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/compress.test.js.snap.webpack5 b/test/e2e/__snapshots__/compress.test.js.snap.webpack5 index 306717f6a9..5bc874886d 100644 --- a/test/e2e/__snapshots__/compress.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/compress.test.js.snap.webpack5 @@ -1,25 +1,47 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`compress option > as false > should handle GET request to bundle file 1`] = ` +200 +`; -exports[`compress option as false should handle GET request to bundle file: console messages 1`] = `[]`; +exports[`compress option > as false > should handle GET request to bundle file 2`] = ` +undefined +`; -exports[`compress option as false should handle GET request to bundle file: page errors 1`] = `[]`; +exports[`compress option > as false > should handle GET request to bundle file 3`] = ` +[] +`; -exports[`compress option as false should handle GET request to bundle file: response headers content-encoding 1`] = `undefined`; +exports[`compress option > as false > should handle GET request to bundle file 4`] = ` +[] +`; -exports[`compress option as false should handle GET request to bundle file: response status 1`] = `200`; +exports[`compress option > as true > should handle GET request to bundle file 1`] = ` +200 +`; -exports[`compress option as true should handle GET request to bundle file: console messages 1`] = `[]`; +exports[`compress option > as true > should handle GET request to bundle file 2`] = ` +"br" +`; -exports[`compress option as true should handle GET request to bundle file: page errors 1`] = `[]`; +exports[`compress option > as true > should handle GET request to bundle file 3`] = ` +[] +`; -exports[`compress option as true should handle GET request to bundle file: response headers content-encoding 1`] = `"br"`; +exports[`compress option > as true > should handle GET request to bundle file 4`] = ` +[] +`; -exports[`compress option as true should handle GET request to bundle file: response status 1`] = `200`; +exports[`compress option > enabled by default when not specified > should handle GET request to bundle file 1`] = ` +200 +`; -exports[`compress option enabled by default when not specified should handle GET request to bundle file: console messages 1`] = `[]`; +exports[`compress option > enabled by default when not specified > should handle GET request to bundle file 2`] = ` +"br" +`; -exports[`compress option enabled by default when not specified should handle GET request to bundle file: page errors 1`] = `[]`; +exports[`compress option > enabled by default when not specified > should handle GET request to bundle file 3`] = ` +[] +`; -exports[`compress option enabled by default when not specified should handle GET request to bundle file: response headers content-encoding 1`] = `"br"`; - -exports[`compress option enabled by default when not specified should handle GET request to bundle file: response status 1`] = `200`; +exports[`compress option > enabled by default when not specified > should handle GET request to bundle file 4`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/entry.test.js.snap.webpack5 b/test/e2e/__snapshots__/entry.test.js.snap.webpack5 index 9c5547bbce..7b9589d95c 100644 --- a/test/e2e/__snapshots__/entry.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/entry.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`entry should work with dynamic async entry: console messages 1`] = ` +exports[`entry > should work with dynamic async entry 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -8,9 +6,11 @@ exports[`entry should work with dynamic async entry: console messages 1`] = ` ] `; -exports[`entry should work with dynamic async entry: page errors 1`] = `[]`; +exports[`entry > should work with dynamic async entry 2`] = ` +[] +`; -exports[`entry should work with dynamic entry: console messages 1`] = ` +exports[`entry > should work with dynamic entry 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -18,9 +18,11 @@ exports[`entry should work with dynamic entry: console messages 1`] = ` ] `; -exports[`entry should work with dynamic entry: page errors 1`] = `[]`; +exports[`entry > should work with dynamic entry 2`] = ` +[] +`; -exports[`entry should work with empty: console messages 1`] = ` +exports[`entry > should work with empty 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -28,9 +30,11 @@ exports[`entry should work with empty: console messages 1`] = ` ] `; -exports[`entry should work with empty: page errors 1`] = `[]`; +exports[`entry > should work with empty 2`] = ` +[] +`; -exports[`entry should work with multiple entries #2: console messages 1`] = ` +exports[`entry > should work with multiple entries #2 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -38,30 +42,36 @@ exports[`entry should work with multiple entries #2: console messages 1`] = ` ] `; -exports[`entry should work with multiple entries #2: page errors 1`] = `[]`; +exports[`entry > should work with multiple entries #2 2`] = ` +[] +`; -exports[`entry should work with multiple entries and "dependOn": console messages 1`] = ` +exports[`entry > should work with multiple entries 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", - "Bar.", "Hey.", ] `; -exports[`entry should work with multiple entries and "dependOn": page errors 1`] = `[]`; +exports[`entry > should work with multiple entries 2`] = ` +[] +`; -exports[`entry should work with multiple entries: console messages 1`] = ` +exports[`entry > should work with multiple entries and "dependOn" 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", + "Bar.", "Hey.", ] `; -exports[`entry should work with multiple entries: page errors 1`] = `[]`; +exports[`entry > should work with multiple entries and "dependOn" 2`] = ` +[] +`; -exports[`entry should work with object entry: console messages 1`] = ` +exports[`entry > should work with object entry 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -69,9 +79,11 @@ exports[`entry should work with object entry: console messages 1`] = ` ] `; -exports[`entry should work with object entry: page errors 1`] = `[]`; +exports[`entry > should work with object entry 2`] = ` +[] +`; -exports[`entry should work with single array entry: console messages 1`] = ` +exports[`entry > should work with single array entry 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -80,9 +92,11 @@ exports[`entry should work with single array entry: console messages 1`] = ` ] `; -exports[`entry should work with single array entry: page errors 1`] = `[]`; +exports[`entry > should work with single array entry 2`] = ` +[] +`; -exports[`entry should work with single entry: console messages 1`] = ` +exports[`entry > should work with single entry 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -90,4 +104,6 @@ exports[`entry should work with single entry: console messages 1`] = ` ] `; -exports[`entry should work with single entry: page errors 1`] = `[]`; +exports[`entry > should work with single entry 2`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/headers.test.js.snap.webpack5 b/test/e2e/__snapshots__/headers.test.js.snap.webpack5 index b8141019c5..8fc426151c 100644 --- a/test/e2e/__snapshots__/headers.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/headers.test.js.snap.webpack5 @@ -1,6 +1,13 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`headers option > as a function > should handle GET request with headers as a function 1`] = ` +"key1=value1 +key2=value2" +`; + +exports[`headers option > as a function > should handle GET request with headers as a function 2`] = ` +200 +`; -exports[`headers option as a function returning an array should handle GET request with headers: console messages 1`] = ` +exports[`headers option > as a function > should handle GET request with headers as a function 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -8,15 +15,23 @@ exports[`headers option as a function returning an array should handle GET reque ] `; -exports[`headers option as a function returning an array should handle GET request with headers: page errors 1`] = `[]`; +exports[`headers option > as a function > should handle GET request with headers as a function 4`] = ` +[] +`; -exports[`headers option as a function returning an array should handle GET request with headers: response headers x-bar 1`] = `"value2"`; +exports[`headers option > as a function returning an array > should handle GET request with headers 1`] = ` +"value1" +`; -exports[`headers option as a function returning an array should handle GET request with headers: response headers x-foo 1`] = `"value1"`; +exports[`headers option > as a function returning an array > should handle GET request with headers 2`] = ` +"value2" +`; -exports[`headers option as a function returning an array should handle GET request with headers: response status 1`] = `200`; +exports[`headers option > as a function returning an array > should handle GET request with headers 3`] = ` +200 +`; -exports[`headers option as a function should handle GET request with headers as a function: console messages 1`] = ` +exports[`headers option > as a function returning an array > should handle GET request with headers 4`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -24,16 +39,19 @@ exports[`headers option as a function should handle GET request with headers as ] `; -exports[`headers option as a function should handle GET request with headers as a function: page errors 1`] = `[]`; +exports[`headers option > as a function returning an array > should handle GET request with headers 5`] = ` +[] +`; -exports[`headers option as a function should handle GET request with headers as a function: response headers x-bar 1`] = ` -"key1=value1 -key2=value2" +exports[`headers option > as a string > should handle GET request with headers 1`] = ` +"dev-server headers" `; -exports[`headers option as a function should handle GET request with headers as a function: response status 1`] = `200`; +exports[`headers option > as a string > should handle GET request with headers 2`] = ` +200 +`; -exports[`headers option as a string and support HEAD request should handle HEAD request with headers: console messages 1`] = ` +exports[`headers option > as a string > should handle GET request with headers 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -41,13 +59,19 @@ exports[`headers option as a string and support HEAD request should handle HEAD ] `; -exports[`headers option as a string and support HEAD request should handle HEAD request with headers: page errors 1`] = `[]`; +exports[`headers option > as a string > should handle GET request with headers 4`] = ` +[] +`; -exports[`headers option as a string and support HEAD request should handle HEAD request with headers: response headers x-foo 1`] = `"dev-server headers"`; +exports[`headers option > as a string and support HEAD request > should handle HEAD request with headers 1`] = ` +"dev-server headers" +`; -exports[`headers option as a string and support HEAD request should handle HEAD request with headers: response status 1`] = `200`; +exports[`headers option > as a string and support HEAD request > should handle HEAD request with headers 2`] = ` +200 +`; -exports[`headers option as a string should handle GET request with headers: console messages 1`] = ` +exports[`headers option > as a string and support HEAD request > should handle HEAD request with headers 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -55,13 +79,20 @@ exports[`headers option as a string should handle GET request with headers: cons ] `; -exports[`headers option as a string should handle GET request with headers: page errors 1`] = `[]`; +exports[`headers option > as a string and support HEAD request > should handle HEAD request with headers 4`] = ` +[] +`; -exports[`headers option as a string should handle GET request with headers: response headers x-foo 1`] = `"dev-server headers"`; +exports[`headers option > as an array > should handle GET request with headers as an array 1`] = ` +"key1=value1 +key2=value2" +`; -exports[`headers option as a string should handle GET request with headers: response status 1`] = `200`; +exports[`headers option > as an array > should handle GET request with headers as an array 2`] = ` +200 +`; -exports[`headers option as an array of objects should handle GET request with headers: console messages 1`] = ` +exports[`headers option > as an array > should handle GET request with headers as an array 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -69,15 +100,23 @@ exports[`headers option as an array of objects should handle GET request with he ] `; -exports[`headers option as an array of objects should handle GET request with headers: page errors 1`] = `[]`; +exports[`headers option > as an array > should handle GET request with headers as an array 4`] = ` +[] +`; -exports[`headers option as an array of objects should handle GET request with headers: response headers x-bar 1`] = `"value2"`; +exports[`headers option > as an array of objects > should handle GET request with headers 1`] = ` +"value1" +`; -exports[`headers option as an array of objects should handle GET request with headers: response headers x-foo 1`] = `"value1"`; +exports[`headers option > as an array of objects > should handle GET request with headers 2`] = ` +"value2" +`; -exports[`headers option as an array of objects should handle GET request with headers: response status 1`] = `200`; +exports[`headers option > as an array of objects > should handle GET request with headers 3`] = ` +200 +`; -exports[`headers option as an array should handle GET request with headers as an array: console messages 1`] = ` +exports[`headers option > as an array of objects > should handle GET request with headers 4`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -85,16 +124,19 @@ exports[`headers option as an array should handle GET request with headers as an ] `; -exports[`headers option as an array should handle GET request with headers as an array: page errors 1`] = `[]`; +exports[`headers option > as an array of objects > should handle GET request with headers 5`] = ` +[] +`; -exports[`headers option as an array should handle GET request with headers as an array: response headers x-bar 1`] = ` -"key1=value1 -key2=value2" +exports[`headers option > dev middleware headers take precedence for dev middleware output files > should handle GET request with headers as a function 1`] = ` +"dev-middleware-headers" `; -exports[`headers option as an array should handle GET request with headers as an array: response status 1`] = `200`; +exports[`headers option > dev middleware headers take precedence for dev middleware output files > should handle GET request with headers as a function 2`] = ` +200 +`; -exports[`headers option dev middleware headers take precedence for dev middleware output files should handle GET request with headers as a function: console messages 1`] = ` +exports[`headers option > dev middleware headers take precedence for dev middleware output files > should handle GET request with headers as a function 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -102,8 +144,6 @@ exports[`headers option dev middleware headers take precedence for dev middlewar ] `; -exports[`headers option dev middleware headers take precedence for dev middleware output files should handle GET request with headers as a function: page errors 1`] = `[]`; - -exports[`headers option dev middleware headers take precedence for dev middleware output files should handle GET request with headers as a function: response headers x-foo 1`] = `"dev-middleware-headers"`; - -exports[`headers option dev middleware headers take precedence for dev middleware output files should handle GET request with headers as a function: response status 1`] = `200`; +exports[`headers option > dev middleware headers take precedence for dev middleware output files > should handle GET request with headers as a function 4`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/history-api-fallback.test.js.snap.webpack5 b/test/e2e/__snapshots__/history-api-fallback.test.js.snap.webpack5 index 0fb6a663b9..1ddc3106f8 100644 --- a/test/e2e/__snapshots__/history-api-fallback.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/history-api-fallback.test.js.snap.webpack5 @@ -1,153 +1,243 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`historyApiFallback option as boolean should handle GET request to directory: console messages 1`] = `[]`; - -exports[`historyApiFallback option as boolean should handle GET request to directory: page errors 1`] = `[]`; - -exports[`historyApiFallback option as boolean should handle GET request to directory: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`historyApiFallback option > as boolean > should handle GET request to directory 1`] = ` +"text/html; charset=utf-8" +`; -exports[`historyApiFallback option as boolean should handle GET request to directory: response status 1`] = `200`; +exports[`historyApiFallback option > as boolean > should handle GET request to directory 2`] = ` +200 +`; -exports[`historyApiFallback option as boolean should handle GET request to directory: response text 1`] = ` +exports[`historyApiFallback option > as boolean > should handle GET request to directory 3`] = ` "Heyyy " `; -exports[`historyApiFallback option as object should handle GET request to directory: console messages 1`] = `[]`; +exports[`historyApiFallback option > as boolean > should handle GET request to directory 4`] = ` +[] +`; -exports[`historyApiFallback option as object should handle GET request to directory: page errors 1`] = `[]`; +exports[`historyApiFallback option > as boolean > should handle GET request to directory 5`] = ` +[] +`; -exports[`historyApiFallback option as object should handle GET request to directory: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`historyApiFallback option > as object > should handle GET request to directory 1`] = ` +"text/html; charset=utf-8" +`; -exports[`historyApiFallback option as object should handle GET request to directory: response status 1`] = `200`; +exports[`historyApiFallback option > as object > should handle GET request to directory 2`] = ` +200 +`; -exports[`historyApiFallback option as object should handle GET request to directory: response text 1`] = ` +exports[`historyApiFallback option > as object > should handle GET request to directory 3`] = ` "Foobar " `; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect any other specified rewrites: console messages 1`] = `[]`; +exports[`historyApiFallback option > as object > should handle GET request to directory 4`] = ` +[] +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect any other specified rewrites: page errors 1`] = `[]`; +exports[`historyApiFallback option > as object > should handle GET request to directory 5`] = ` +[] +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect any other specified rewrites: response headers content-type 1`] = `"text/html; charset=UTF-8"`; +exports[`historyApiFallback option > as object with static > should handle GET request to directory 1`] = ` +"text/html; charset=utf-8" +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect any other specified rewrites: response status 1`] = `200`; +exports[`historyApiFallback option > as object with static > should handle GET request to directory 2`] = ` +200 +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect any other specified rewrites: response text 1`] = ` -"Other file +exports[`historyApiFallback option > as object with static > should handle GET request to directory 3`] = ` +"Foobar " `; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites and shows index for unknown urls: console messages 1`] = `[]`; +exports[`historyApiFallback option > as object with static > should handle GET request to directory 4`] = ` +[] +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites and shows index for unknown urls: page errors 1`] = `[]`; +exports[`historyApiFallback option > as object with static > should handle GET request to directory 5`] = ` +[] +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites and shows index for unknown urls: response headers content-type 1`] = `"text/html; charset=UTF-8"`; +exports[`historyApiFallback option > as object with static > should prefer static file over historyApiFallback 1`] = ` +"text/plain; charset=utf-8" +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites and shows index for unknown urls: response status 1`] = `200`; +exports[`historyApiFallback option > as object with static > should prefer static file over historyApiFallback 2`] = ` +200 +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites and shows index for unknown urls: response text 1`] = ` -"Foobar +exports[`historyApiFallback option > as object with static > should prefer static file over historyApiFallback 3`] = ` +"Random file " `; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites for index: console messages 1`] = `[]`; +exports[`historyApiFallback option > as object with static > should prefer static file over historyApiFallback 4`] = ` +[] +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites for index: page errors 1`] = `[]`; +exports[`historyApiFallback option > as object with static > should prefer static file over historyApiFallback 5`] = ` +[] +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites for index: response headers content-type 1`] = `"text/html; charset=UTF-8"`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect any other specified rewrites 1`] = ` +"text/html; charset=utf-8" +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites for index: response status 1`] = `200`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect any other specified rewrites 2`] = ` +200 +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites for index: response text 1`] = ` -"Foobar +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect any other specified rewrites 3`] = ` +"Other file " `; -exports[`historyApiFallback option as object with static set to false historyApiFallback should work and ignore static content: console messages 1`] = `[]`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect any other specified rewrites 4`] = ` +[] +`; -exports[`historyApiFallback option as object with static set to false historyApiFallback should work and ignore static content: page errors 1`] = `[]`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect any other specified rewrites 5`] = ` +[] +`; -exports[`historyApiFallback option as object with static set to false historyApiFallback should work and ignore static content: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect rewrites and shows index for unknown urls 1`] = ` +"text/html; charset=utf-8" +`; -exports[`historyApiFallback option as object with static set to false historyApiFallback should work and ignore static content: response status 1`] = `200`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect rewrites and shows index for unknown urls 2`] = ` +200 +`; -exports[`historyApiFallback option as object with static set to false historyApiFallback should work and ignore static content: response text 1`] = ` -"In-memory file +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect rewrites and shows index for unknown urls 3`] = ` +"Foobar " `; -exports[`historyApiFallback option as object with static should handle GET request to directory: console messages 1`] = `[]`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect rewrites and shows index for unknown urls 4`] = ` +[] +`; -exports[`historyApiFallback option as object with static should handle GET request to directory: page errors 1`] = `[]`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect rewrites and shows index for unknown urls 5`] = ` +[] +`; -exports[`historyApiFallback option as object with static should handle GET request to directory: response headers content-type 1`] = `"text/html; charset=UTF-8"`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect rewrites for index 1`] = ` +"text/html; charset=utf-8" +`; -exports[`historyApiFallback option as object with static should handle GET request to directory: response status 1`] = `200`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect rewrites for index 2`] = ` +200 +`; -exports[`historyApiFallback option as object with static should handle GET request to directory: response text 1`] = ` +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect rewrites for index 3`] = ` "Foobar " `; -exports[`historyApiFallback option as object with static should prefer static file over historyApiFallback: console messages 1`] = `[]`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect rewrites for index 4`] = ` +[] +`; -exports[`historyApiFallback option as object with static should prefer static file over historyApiFallback: page errors 1`] = `[]`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect rewrites for index 5`] = ` +[] +`; -exports[`historyApiFallback option as object with static should prefer static file over historyApiFallback: response headers content-type 1`] = `"text/plain; charset=UTF-8"`; +exports[`historyApiFallback option > as object with static set to false > historyApiFallback should work and ignore static content 1`] = ` +"text/html; charset=utf-8" +`; -exports[`historyApiFallback option as object with static should prefer static file over historyApiFallback: response status 1`] = `200`; +exports[`historyApiFallback option > as object with static set to false > historyApiFallback should work and ignore static content 2`] = ` +200 +`; -exports[`historyApiFallback option as object with static should prefer static file over historyApiFallback: response text 1`] = ` -"Random file +exports[`historyApiFallback option > as object with static set to false > historyApiFallback should work and ignore static content 3`] = ` +"In-memory file " `; -exports[`historyApiFallback option as object with the "logger" option request to directory and log: console messages 1`] = `[]`; +exports[`historyApiFallback option > as object with static set to false > historyApiFallback should work and ignore static content 4`] = ` +[] +`; -exports[`historyApiFallback option as object with the "logger" option request to directory and log: page errors 1`] = `[]`; +exports[`historyApiFallback option > as object with static set to false > historyApiFallback should work and ignore static content 5`] = ` +[] +`; -exports[`historyApiFallback option as object with the "logger" option request to directory and log: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`historyApiFallback option > as object with the "logger" option > request to directory and log 1`] = ` +"text/html; charset=utf-8" +`; -exports[`historyApiFallback option as object with the "logger" option request to directory and log: response status 1`] = `200`; +exports[`historyApiFallback option > as object with the "logger" option > request to directory and log 2`] = ` +200 +`; -exports[`historyApiFallback option as object with the "logger" option request to directory and log: response text 1`] = ` +exports[`historyApiFallback option > as object with the "logger" option > request to directory and log 3`] = ` "Foobar " `; -exports[`historyApiFallback option as object with the "verbose" option request to directory and log: console messages 1`] = `[]`; +exports[`historyApiFallback option > as object with the "logger" option > request to directory and log 4`] = ` +[] +`; -exports[`historyApiFallback option as object with the "verbose" option request to directory and log: page errors 1`] = `[]`; +exports[`historyApiFallback option > as object with the "logger" option > request to directory and log 5`] = ` +[] +`; -exports[`historyApiFallback option as object with the "verbose" option request to directory and log: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`historyApiFallback option > as object with the "verbose" option > request to directory and log 1`] = ` +"text/html; charset=utf-8" +`; -exports[`historyApiFallback option as object with the "verbose" option request to directory and log: response status 1`] = `200`; +exports[`historyApiFallback option > as object with the "verbose" option > request to directory and log 2`] = ` +200 +`; -exports[`historyApiFallback option as object with the "verbose" option request to directory and log: response text 1`] = ` +exports[`historyApiFallback option > as object with the "verbose" option > request to directory and log 3`] = ` "Foobar " `; -exports[`historyApiFallback option in-memory files should perform HEAD request in same way as GET: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`historyApiFallback option > as object with the "verbose" option > request to directory and log 4`] = ` +[] +`; -exports[`historyApiFallback option in-memory files should perform HEAD request in same way as GET: response status 1`] = `"OK"`; +exports[`historyApiFallback option > as object with the "verbose" option > request to directory and log 5`] = ` +[] +`; -exports[`historyApiFallback option in-memory files should perform HEAD request in same way as GET: response text 1`] = ` -"In-memory file -" +exports[`historyApiFallback option > in-memory files > should perform HEAD request in same way as GET 1`] = ` +"text/html; charset=utf-8" `; -exports[`historyApiFallback option in-memory files should take precedence over static files: console messages 1`] = `[]`; +exports[`historyApiFallback option > in-memory files > should perform HEAD request in same way as GET 2`] = ` +"OK" +`; -exports[`historyApiFallback option in-memory files should take precedence over static files: page errors 1`] = `[]`; +exports[`historyApiFallback option > in-memory files > should perform HEAD request in same way as GET 3`] = ` +"In-memory file +" +`; -exports[`historyApiFallback option in-memory files should take precedence over static files: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`historyApiFallback option > in-memory files > should take precedence over static files 1`] = ` +"text/html; charset=utf-8" +`; -exports[`historyApiFallback option in-memory files should take precedence over static files: response status 1`] = `200`; +exports[`historyApiFallback option > in-memory files > should take precedence over static files 2`] = ` +200 +`; -exports[`historyApiFallback option in-memory files should take precedence over static files: response text 1`] = ` +exports[`historyApiFallback option > in-memory files > should take precedence over static files 3`] = ` "In-memory file " `; + +exports[`historyApiFallback option > in-memory files > should take precedence over static files 4`] = ` +[] +`; + +exports[`historyApiFallback option > in-memory files > should take precedence over static files 5`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/host.test.js.snap.webpack5 b/test/e2e/__snapshots__/host.test.js.snap.webpack5 index 69c627cdb0..b43c45a9d1 100644 --- a/test/e2e/__snapshots__/host.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/host.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`host should work using "::" host and "auto" port: console messages 1`] = ` +exports[`host > should work using "0.0.0.0" host and "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -8,9 +6,11 @@ exports[`host should work using "::" host and "auto" port: console messages 1`] ] `; -exports[`host should work using "::" host and "auto" port: page errors 1`] = `[]`; +exports[`host > should work using "0.0.0.0" host and "auto" port 2`] = ` +[] +`; -exports[`host should work using "::" host and port as number: console messages 1`] = ` +exports[`host > should work using "0.0.0.0" host and port as number 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -18,9 +18,11 @@ exports[`host should work using "::" host and port as number: console messages 1 ] `; -exports[`host should work using "::" host and port as number: page errors 1`] = `[]`; +exports[`host > should work using "0.0.0.0" host and port as number 2`] = ` +[] +`; -exports[`host should work using "::" host and port as string: console messages 1`] = ` +exports[`host > should work using "0.0.0.0" host and port as string 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -28,9 +30,11 @@ exports[`host should work using "::" host and port as string: console messages 1 ] `; -exports[`host should work using "::" host and port as string: page errors 1`] = `[]`; +exports[`host > should work using "0.0.0.0" host and port as string 2`] = ` +[] +`; -exports[`host should work using "::1" host and "auto" port: console messages 1`] = ` +exports[`host > should work using "127.0.0.1" host and "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -38,9 +42,11 @@ exports[`host should work using "::1" host and "auto" port: console messages 1`] ] `; -exports[`host should work using "::1" host and "auto" port: page errors 1`] = `[]`; +exports[`host > should work using "127.0.0.1" host and "auto" port 2`] = ` +[] +`; -exports[`host should work using "::1" host and port as number: console messages 1`] = ` +exports[`host > should work using "127.0.0.1" host and port as number 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -48,9 +54,11 @@ exports[`host should work using "::1" host and port as number: console messages ] `; -exports[`host should work using "::1" host and port as number: page errors 1`] = `[]`; +exports[`host > should work using "127.0.0.1" host and port as number 2`] = ` +[] +`; -exports[`host should work using "::1" host and port as string: console messages 1`] = ` +exports[`host > should work using "127.0.0.1" host and port as string 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -58,9 +66,11 @@ exports[`host should work using "::1" host and port as string: console messages ] `; -exports[`host should work using "::1" host and port as string: page errors 1`] = `[]`; +exports[`host > should work using "127.0.0.1" host and port as string 2`] = ` +[] +`; -exports[`host should work using "" host and "auto" port: console messages 1`] = ` +exports[`host > should work using "::" host and "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -68,9 +78,11 @@ exports[`host should work using "" host and "auto" port: console ] `; -exports[`host should work using "" host and "auto" port: page errors 1`] = `[]`; +exports[`host > should work using "::" host and "auto" port 2`] = ` +[] +`; -exports[`host should work using "" host and port as number: console messages 1`] = ` +exports[`host > should work using "::" host and port as number 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -78,9 +90,11 @@ exports[`host should work using "" host and port as number: conso ] `; -exports[`host should work using "" host and port as number: page errors 1`] = `[]`; +exports[`host > should work using "::" host and port as number 2`] = ` +[] +`; -exports[`host should work using "" host and port as string: console messages 1`] = ` +exports[`host > should work using "::" host and port as string 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -88,9 +102,11 @@ exports[`host should work using "" host and port as string: conso ] `; -exports[`host should work using "" host and port as string: page errors 1`] = `[]`; +exports[`host > should work using "::" host and port as string 2`] = ` +[] +`; -exports[`host should work using "0.0.0.0" host and "auto" port: console messages 1`] = ` +exports[`host > should work using "::1" host and "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -98,9 +114,11 @@ exports[`host should work using "0.0.0.0" host and "auto" port: console messages ] `; -exports[`host should work using "0.0.0.0" host and "auto" port: page errors 1`] = `[]`; +exports[`host > should work using "::1" host and "auto" port 2`] = ` +[] +`; -exports[`host should work using "0.0.0.0" host and port as number: console messages 1`] = ` +exports[`host > should work using "::1" host and port as number 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -108,9 +126,11 @@ exports[`host should work using "0.0.0.0" host and port as number: console messa ] `; -exports[`host should work using "0.0.0.0" host and port as number: page errors 1`] = `[]`; +exports[`host > should work using "::1" host and port as number 2`] = ` +[] +`; -exports[`host should work using "0.0.0.0" host and port as string: console messages 1`] = ` +exports[`host > should work using "::1" host and port as string 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -118,9 +138,11 @@ exports[`host should work using "0.0.0.0" host and port as string: console messa ] `; -exports[`host should work using "0.0.0.0" host and port as string: page errors 1`] = `[]`; +exports[`host > should work using "::1" host and port as string 2`] = ` +[] +`; -exports[`host should work using "127.0.0.1" host and "auto" port: console messages 1`] = ` +exports[`host > should work using "" host and "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -128,9 +150,11 @@ exports[`host should work using "127.0.0.1" host and "auto" port: console messag ] `; -exports[`host should work using "127.0.0.1" host and "auto" port: page errors 1`] = `[]`; +exports[`host > should work using "" host and "auto" port 2`] = ` +[] +`; -exports[`host should work using "127.0.0.1" host and port as number: console messages 1`] = ` +exports[`host > should work using "" host and port as number 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -138,9 +162,11 @@ exports[`host should work using "127.0.0.1" host and port as number: console mes ] `; -exports[`host should work using "127.0.0.1" host and port as number: page errors 1`] = `[]`; +exports[`host > should work using "" host and port as number 2`] = ` +[] +`; -exports[`host should work using "127.0.0.1" host and port as string: console messages 1`] = ` +exports[`host > should work using "" host and port as string 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -148,9 +174,11 @@ exports[`host should work using "127.0.0.1" host and port as string: console mes ] `; -exports[`host should work using "127.0.0.1" host and port as string: page errors 1`] = `[]`; +exports[`host > should work using "" host and port as string 2`] = ` +[] +`; -exports[`host should work using "local-ip" host and "auto" port: console messages 1`] = ` +exports[`host > should work using "local-ip" host and "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -158,9 +186,11 @@ exports[`host should work using "local-ip" host and "auto" port: console message ] `; -exports[`host should work using "local-ip" host and "auto" port: page errors 1`] = `[]`; +exports[`host > should work using "local-ip" host and "auto" port 2`] = ` +[] +`; -exports[`host should work using "local-ip" host and port as number: console messages 1`] = ` +exports[`host > should work using "local-ip" host and port as number 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -168,9 +198,11 @@ exports[`host should work using "local-ip" host and port as number: console mess ] `; -exports[`host should work using "local-ip" host and port as number: page errors 1`] = `[]`; +exports[`host > should work using "local-ip" host and port as number 2`] = ` +[] +`; -exports[`host should work using "local-ip" host and port as string: console messages 1`] = ` +exports[`host > should work using "local-ip" host and port as string 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -178,9 +210,11 @@ exports[`host should work using "local-ip" host and port as string: console mess ] `; -exports[`host should work using "local-ip" host and port as string: page errors 1`] = `[]`; +exports[`host > should work using "local-ip" host and port as string 2`] = ` +[] +`; -exports[`host should work using "local-ipv4" host and "auto" port: console messages 1`] = ` +exports[`host > should work using "local-ipv4" host and "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -188,9 +222,11 @@ exports[`host should work using "local-ipv4" host and "auto" port: console messa ] `; -exports[`host should work using "local-ipv4" host and "auto" port: page errors 1`] = `[]`; +exports[`host > should work using "local-ipv4" host and "auto" port 2`] = ` +[] +`; -exports[`host should work using "local-ipv4" host and port as number: console messages 1`] = ` +exports[`host > should work using "local-ipv4" host and port as number 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -198,9 +234,11 @@ exports[`host should work using "local-ipv4" host and port as number: console me ] `; -exports[`host should work using "local-ipv4" host and port as number: page errors 1`] = `[]`; +exports[`host > should work using "local-ipv4" host and port as number 2`] = ` +[] +`; -exports[`host should work using "local-ipv4" host and port as string: console messages 1`] = ` +exports[`host > should work using "local-ipv4" host and port as string 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -208,9 +246,11 @@ exports[`host should work using "local-ipv4" host and port as string: console me ] `; -exports[`host should work using "local-ipv4" host and port as string: page errors 1`] = `[]`; +exports[`host > should work using "local-ipv4" host and port as string 2`] = ` +[] +`; -exports[`host should work using "local-ipv6" host and "auto" port: console messages 1`] = ` +exports[`host > should work using "local-ipv6" host and "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -218,9 +258,11 @@ exports[`host should work using "local-ipv6" host and "auto" port: console messa ] `; -exports[`host should work using "local-ipv6" host and "auto" port: page errors 1`] = `[]`; +exports[`host > should work using "local-ipv6" host and "auto" port 2`] = ` +[] +`; -exports[`host should work using "local-ipv6" host and port as number: console messages 1`] = ` +exports[`host > should work using "local-ipv6" host and port as number 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -228,9 +270,11 @@ exports[`host should work using "local-ipv6" host and port as number: console me ] `; -exports[`host should work using "local-ipv6" host and port as number: page errors 1`] = `[]`; +exports[`host > should work using "local-ipv6" host and port as number 2`] = ` +[] +`; -exports[`host should work using "local-ipv6" host and port as string: console messages 1`] = ` +exports[`host > should work using "local-ipv6" host and port as string 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -238,9 +282,11 @@ exports[`host should work using "local-ipv6" host and port as string: console me ] `; -exports[`host should work using "local-ipv6" host and port as string: page errors 1`] = `[]`; +exports[`host > should work using "local-ipv6" host and port as string 2`] = ` +[] +`; -exports[`host should work using "localhost" host and "auto" port: console messages 1`] = ` +exports[`host > should work using "localhost" host and "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -248,9 +294,11 @@ exports[`host should work using "localhost" host and "auto" port: console messag ] `; -exports[`host should work using "localhost" host and "auto" port: page errors 1`] = `[]`; +exports[`host > should work using "localhost" host and "auto" port 2`] = ` +[] +`; -exports[`host should work using "localhost" host and port as number: console messages 1`] = ` +exports[`host > should work using "localhost" host and port as number 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -258,9 +306,11 @@ exports[`host should work using "localhost" host and port as number: console mes ] `; -exports[`host should work using "localhost" host and port as number: page errors 1`] = `[]`; +exports[`host > should work using "localhost" host and port as number 2`] = ` +[] +`; -exports[`host should work using "localhost" host and port as string: console messages 1`] = ` +exports[`host > should work using "localhost" host and port as string 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -268,9 +318,11 @@ exports[`host should work using "localhost" host and port as string: console mes ] `; -exports[`host should work using "localhost" host and port as string: page errors 1`] = `[]`; +exports[`host > should work using "localhost" host and port as string 2`] = ` +[] +`; -exports[`host should work using "undefined" host and "auto" port: console messages 1`] = ` +exports[`host > should work using "undefined" host and "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -278,9 +330,11 @@ exports[`host should work using "undefined" host and "auto" port: console messag ] `; -exports[`host should work using "undefined" host and "auto" port: page errors 1`] = `[]`; +exports[`host > should work using "undefined" host and "auto" port 2`] = ` +[] +`; -exports[`host should work using "undefined" host and port as number: console messages 1`] = ` +exports[`host > should work using "undefined" host and port as number 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -288,9 +342,11 @@ exports[`host should work using "undefined" host and port as number: console mes ] `; -exports[`host should work using "undefined" host and port as number: page errors 1`] = `[]`; +exports[`host > should work using "undefined" host and port as number 2`] = ` +[] +`; -exports[`host should work using "undefined" host and port as string: console messages 1`] = ` +exports[`host > should work using "undefined" host and port as string 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -298,4 +354,6 @@ exports[`host should work using "undefined" host and port as string: console mes ] `; -exports[`host should work using "undefined" host and port as string: page errors 1`] = `[]`; +exports[`host > should work using "undefined" host and port as string 2`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/hot-and-live-reload.test.js.snap.webpack5 b/test/e2e/__snapshots__/hot-and-live-reload.test.js.snap.webpack5 index 729e827490..cedf476743 100644 --- a/test/e2e/__snapshots__/hot-and-live-reload.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/hot-and-live-reload.test.js.snap.webpack5 @@ -1,33 +1,26 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`hot and live reload should not refresh content when hot and no live reload disabled (default): console messages 1`] = ` +exports[`hot and live reload > should not refresh content when hot and no live reload disabled (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay enabled.", "[webpack-dev-server] App updated. Recompiling...", ] `; -exports[`hot and live reload should not refresh content when hot and no live reload disabled (default): page errors 1`] = `[]`; - -exports[`hot and live reload should not refresh content when hot and no live reload disabled (sockjs): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay enabled.", - "[webpack-dev-server] App updated. Recompiling...", -] +exports[`hot and live reload > should not refresh content when hot and no live reload disabled (default) 2`] = ` +[] `; -exports[`hot and live reload should not refresh content when hot and no live reload disabled (sockjs): page errors 1`] = `[]`; - -exports[`hot and live reload should not refresh content when hot and no live reload disabled (ws): console messages 1`] = ` +exports[`hot and live reload > should not refresh content when hot and no live reload disabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay enabled.", "[webpack-dev-server] App updated. Recompiling...", ] `; -exports[`hot and live reload should not refresh content when hot and no live reload disabled (ws): page errors 1`] = `[]`; +exports[`hot and live reload > should not refresh content when hot and no live reload disabled (ws) 2`] = ` +[] +`; -exports[`hot and live reload should work and allow to disable hot module replacement and live reload using the "webpack-dev-server-hot=false&webpack-dev-server-live-reload=false" (default): console messages 1`] = ` +exports[`hot and live reload > should work and allow to disable hot module replacement and live reload using the "webpack-dev-server-hot=false&webpack-dev-server-live-reload=false" (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -35,9 +28,11 @@ exports[`hot and live reload should work and allow to disable hot module replace ] `; -exports[`hot and live reload should work and allow to disable hot module replacement and live reload using the "webpack-dev-server-hot=false&webpack-dev-server-live-reload=false" (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work and allow to disable hot module replacement and live reload using the "webpack-dev-server-hot=false&webpack-dev-server-live-reload=false" (default) 2`] = ` +[] +`; -exports[`hot and live reload should work and allow to disable hot module replacement using the "webpack-dev-server-hot=false" (default): console messages 1`] = ` +exports[`hot and live reload > should work and allow to disable hot module replacement using the "webpack-dev-server-hot=false" (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -48,56 +43,30 @@ exports[`hot and live reload should work and allow to disable hot module replace ] `; -exports[`hot and live reload should work and allow to disable hot module replacement using the "webpack-dev-server-hot=false" (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work and allow to disable hot module replacement using the "webpack-dev-server-hot=false" (default) 2`] = ` +[] +`; -exports[`hot and live reload should work and allow to disable live reload using the "webpack-dev-server-live-reload=false" (default): console messages 1`] = ` +exports[`hot and live reload > should work and allow to disable live reload using the "webpack-dev-server-live-reload=false" (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[webpack-dev-server] App updated. Recompiling...", ] `; -exports[`hot and live reload should work and allow to disable live reload using the "webpack-dev-server-live-reload=false" (default): page errors 1`] = `[]`; - -exports[`hot and live reload should work and do nothing when web socket server disabled (default): console messages 1`] = `[]`; - -exports[`hot and live reload should work and do nothing when web socket server disabled (default): page errors 1`] = `[]`; - -exports[`hot and live reload should work and refresh content using hot module replacement (default): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "[webpack-dev-server] App updated. Recompiling...", - "[webpack-dev-server] App hot update...", - "[HMR] Checking for updates on the server...", - "[HMR] Updated modules:", - "[HMR] - ./main.css", - "[HMR] - ../../../node_modules/css-loader/dist/cjs.js!./main.css", - "", - "[HMR] App is up to date.", -] +exports[`hot and live reload > should work and allow to disable live reload using the "webpack-dev-server-live-reload=false" (default) 2`] = ` +[] `; -exports[`hot and live reload should work and refresh content using hot module replacement (default): page errors 1`] = `[]`; - -exports[`hot and live reload should work and refresh content using hot module replacement when hot enabled (default): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "[webpack-dev-server] App updated. Recompiling...", - "[webpack-dev-server] App hot update...", - "[HMR] Checking for updates on the server...", - "[HMR] Updated modules:", - "[HMR] - ./main.css", - "[HMR] - ../../../node_modules/css-loader/dist/cjs.js!./main.css", - "", - "[HMR] App is up to date.", -] +exports[`hot and live reload > should work and do nothing when web socket server disabled (default) 1`] = ` +[] `; -exports[`hot and live reload should work and refresh content using hot module replacement when hot enabled (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work and do nothing when web socket server disabled (default) 2`] = ` +[] +`; -exports[`hot and live reload should work and refresh content using hot module replacement when hot enabled (sockjs): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using hot module replacement (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -112,9 +81,11 @@ exports[`hot and live reload should work and refresh content using hot module re ] `; -exports[`hot and live reload should work and refresh content using hot module replacement when hot enabled (sockjs): page errors 1`] = `[]`; +exports[`hot and live reload > should work and refresh content using hot module replacement (default) 2`] = ` +[] +`; -exports[`hot and live reload should work and refresh content using hot module replacement when hot enabled (ws): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using hot module replacement when hot enabled (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -129,9 +100,11 @@ exports[`hot and live reload should work and refresh content using hot module re ] `; -exports[`hot and live reload should work and refresh content using hot module replacement when hot enabled (ws): page errors 1`] = `[]`; +exports[`hot and live reload > should work and refresh content using hot module replacement when hot enabled (default) 2`] = ` +[] +`; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload and hot enabled (sockjs): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using hot module replacement when hot enabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -146,9 +119,11 @@ exports[`hot and live reload should work and refresh content using hot module re ] `; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload and hot enabled (sockjs): page errors 1`] = `[]`; +exports[`hot and live reload > should work and refresh content using hot module replacement when hot enabled (ws) 2`] = ` +[] +`; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload and hot enabled (ws): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload and hot enabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -163,26 +138,11 @@ exports[`hot and live reload should work and refresh content using hot module re ] `; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload and hot enabled (ws): page errors 1`] = `[]`; - -exports[`hot and live reload should work and refresh content using hot module replacement when live reload disabled and hot enabled (default): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "[webpack-dev-server] App updated. Recompiling...", - "[webpack-dev-server] App hot update...", - "[HMR] Checking for updates on the server...", - "[HMR] Updated modules:", - "[HMR] - ./main.css", - "[HMR] - ../../../node_modules/css-loader/dist/cjs.js!./main.css", - "", - "[HMR] App is up to date.", -] +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload and hot enabled (ws) 2`] = ` +[] `; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload disabled and hot enabled (default): page errors 1`] = `[]`; - -exports[`hot and live reload should work and refresh content using hot module replacement when live reload disabled and hot enabled (sockjs): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload disabled and hot enabled (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -197,9 +157,11 @@ exports[`hot and live reload should work and refresh content using hot module re ] `; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload disabled and hot enabled (sockjs): page errors 1`] = `[]`; +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload disabled and hot enabled (default) 2`] = ` +[] +`; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload disabled and hot enabled (ws): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload disabled and hot enabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -214,26 +176,11 @@ exports[`hot and live reload should work and refresh content using hot module re ] `; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload disabled and hot enabled (ws): page errors 1`] = `[]`; - -exports[`hot and live reload should work and refresh content using hot module replacement when live reload enabled (default): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "[webpack-dev-server] App updated. Recompiling...", - "[webpack-dev-server] App hot update...", - "[HMR] Checking for updates on the server...", - "[HMR] Updated modules:", - "[HMR] - ./main.css", - "[HMR] - ../../../node_modules/css-loader/dist/cjs.js!./main.css", - "", - "[HMR] App is up to date.", -] +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload disabled and hot enabled (ws) 2`] = ` +[] `; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload enabled (default): page errors 1`] = `[]`; - -exports[`hot and live reload should work and refresh content using hot module replacement when live reload enabled (sockjs): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload enabled (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -248,9 +195,11 @@ exports[`hot and live reload should work and refresh content using hot module re ] `; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload enabled (sockjs): page errors 1`] = `[]`; +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload enabled (default) 2`] = ` +[] +`; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload enabled (ws): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload enabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -265,9 +214,11 @@ exports[`hot and live reload should work and refresh content using hot module re ] `; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload enabled (ws): page errors 1`] = `[]`; +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload enabled (ws) 2`] = ` +[] +`; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload enabled and hot disabled (default): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload enabled and hot disabled (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -282,20 +233,11 @@ exports[`hot and live reload should work and refresh content using hot module re ] `; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload enabled and hot disabled (default): page errors 1`] = `[]`; - -exports[`hot and live reload should work and refresh content using live reload (default): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[webpack-dev-server] App updated. Recompiling...", - "[webpack-dev-server] App updated. Reloading...", - "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", -] +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload enabled and hot disabled (default) 2`] = ` +[] `; -exports[`hot and live reload should work and refresh content using live reload (default): page errors 1`] = `[]`; - -exports[`hot and live reload should work and refresh content using live reload when live reload disabled and hot enabled (sockjs): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using live reload (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[webpack-dev-server] App updated. Recompiling...", @@ -304,9 +246,11 @@ exports[`hot and live reload should work and refresh content using live reload w ] `; -exports[`hot and live reload should work and refresh content using live reload when live reload disabled and hot enabled (sockjs): page errors 1`] = `[]`; +exports[`hot and live reload > should work and refresh content using live reload (default) 2`] = ` +[] +`; -exports[`hot and live reload should work and refresh content using live reload when live reload enabled and hot disabled (ws): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using live reload when live reload enabled and hot disabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[webpack-dev-server] App updated. Recompiling...", @@ -315,9 +259,11 @@ exports[`hot and live reload should work and refresh content using live reload w ] `; -exports[`hot and live reload should work and refresh content using live reload when live reload enabled and hot disabled (ws): page errors 1`] = `[]`; +exports[`hot and live reload > should work and refresh content using live reload when live reload enabled and hot disabled (ws) 2`] = ` +[] +`; -exports[`hot and live reload should work with manual client setup (default): console messages 1`] = ` +exports[`hot and live reload > should work with manual client setup (default) 1`] = ` [ "[HMR] Waiting for update signal from WDS...", "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay disabled.", @@ -332,9 +278,11 @@ exports[`hot and live reload should work with manual client setup (default): con ] `; -exports[`hot and live reload should work with manual client setup (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work with manual client setup (default) 2`] = ` +[] +`; -exports[`hot and live reload should work with manual client setup and allow to disable hot module replacement (default): console messages 1`] = ` +exports[`hot and live reload > should work with manual client setup and allow to disable hot module replacement (default) 1`] = ` [ "[HMR] Waiting for update signal from WDS...", "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay disabled.", @@ -345,18 +293,22 @@ exports[`hot and live reload should work with manual client setup and allow to d ] `; -exports[`hot and live reload should work with manual client setup and allow to disable hot module replacement (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work with manual client setup and allow to disable hot module replacement (default) 2`] = ` +[] +`; -exports[`hot and live reload should work with manual client setup and allow to disable live reload (default): console messages 1`] = ` +exports[`hot and live reload > should work with manual client setup and allow to disable live reload (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay disabled.", "[webpack-dev-server] App updated. Recompiling...", ] `; -exports[`hot and live reload should work with manual client setup and allow to disable live reload (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work with manual client setup and allow to disable live reload (default) 2`] = ` +[] +`; -exports[`hot and live reload should work with manual client setup and allow to enable hot module replacement (default): console messages 1`] = ` +exports[`hot and live reload > should work with manual client setup and allow to enable hot module replacement (default) 1`] = ` [ "[HMR] Waiting for update signal from WDS...", "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay disabled.", @@ -371,9 +323,11 @@ exports[`hot and live reload should work with manual client setup and allow to e ] `; -exports[`hot and live reload should work with manual client setup and allow to enable hot module replacement (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work with manual client setup and allow to enable hot module replacement (default) 2`] = ` +[] +`; -exports[`hot and live reload should work with manual client setup and allow to enable live reload (default): console messages 1`] = ` +exports[`hot and live reload > should work with manual client setup and allow to enable live reload (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay disabled.", "[webpack-dev-server] App updated. Recompiling...", @@ -382,20 +336,30 @@ exports[`hot and live reload should work with manual client setup and allow to e ] `; -exports[`hot and live reload should work with manual client setup and allow to enable live reload (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work with manual client setup and allow to enable live reload (default) 2`] = ` +[] +`; + +exports[`hot disabled HMR plugin > should NOT register the HMR plugin before compilation is complete 1`] = ` +200 +`; -exports[`hot disabled HMR plugin should NOT register the HMR plugin before compilation is complete: console messages 1`] = ` +exports[`hot disabled HMR plugin > should NOT register the HMR plugin before compilation is complete 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "Hey.", ] `; -exports[`hot disabled HMR plugin should NOT register the HMR plugin before compilation is complete: page errors 1`] = `[]`; +exports[`hot disabled HMR plugin > should NOT register the HMR plugin before compilation is complete 3`] = ` +[] +`; -exports[`hot disabled HMR plugin should NOT register the HMR plugin before compilation is complete: response status 1`] = `200`; +exports[`multi compiler hot config HMR plugin > should register the HMR plugin before compilation is complete 1`] = ` +200 +`; -exports[`multi compiler hot config HMR plugin should register the HMR plugin before compilation is complete: console messages 1`] = ` +exports[`multi compiler hot config HMR plugin > should register the HMR plugin before compilation is complete 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -403,11 +367,15 @@ exports[`multi compiler hot config HMR plugin should register the HMR plugin bef ] `; -exports[`multi compiler hot config HMR plugin should register the HMR plugin before compilation is complete: page errors 1`] = `[]`; +exports[`multi compiler hot config HMR plugin > should register the HMR plugin before compilation is complete 3`] = ` +[] +`; -exports[`multi compiler hot config HMR plugin should register the HMR plugin before compilation is complete: response status 1`] = `200`; +exports[`simple hot config HMR plugin > should register the HMR plugin before compilation is complete 1`] = ` +200 +`; -exports[`simple hot config HMR plugin should register the HMR plugin before compilation is complete: console messages 1`] = ` +exports[`simple hot config HMR plugin > should register the HMR plugin before compilation is complete 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -415,11 +383,15 @@ exports[`simple hot config HMR plugin should register the HMR plugin before comp ] `; -exports[`simple hot config HMR plugin should register the HMR plugin before compilation is complete: page errors 1`] = `[]`; +exports[`simple hot config HMR plugin > should register the HMR plugin before compilation is complete 3`] = ` +[] +`; -exports[`simple hot config HMR plugin should register the HMR plugin before compilation is complete: response status 1`] = `200`; +exports[`simple hot config HMR plugin with already added HMR plugin > should register the HMR plugin before compilation is complete 1`] = ` +200 +`; -exports[`simple hot config HMR plugin with already added HMR plugin should register the HMR plugin before compilation is complete: console messages 1`] = ` +exports[`simple hot config HMR plugin with already added HMR plugin > should register the HMR plugin before compilation is complete 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -427,6 +399,6 @@ exports[`simple hot config HMR plugin with already added HMR plugin should regis ] `; -exports[`simple hot config HMR plugin with already added HMR plugin should register the HMR plugin before compilation is complete: page errors 1`] = `[]`; - -exports[`simple hot config HMR plugin with already added HMR plugin should register the HMR plugin before compilation is complete: response status 1`] = `200`; +exports[`simple hot config HMR plugin with already added HMR plugin > should register the HMR plugin before compilation is complete 3`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/ipc.test.js.snap.webpack5 b/test/e2e/__snapshots__/ipc.test.js.snap.webpack5 index 96c5973c2d..22b543cf22 100644 --- a/test/e2e/__snapshots__/ipc.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/ipc.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`web socket server URL should work with the "ipc" option using "string" value ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the "ipc" option using "string" value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -8,19 +6,11 @@ exports[`web socket server URL should work with the "ipc" option using "string" ] `; -exports[`web socket server URL should work with the "ipc" option using "string" value ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "ipc" option using "string" value ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the "ipc" option using "string" value ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with the "ipc" option using "string" value ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "ipc" option using "true" value ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the "ipc" option using "true" value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -28,14 +18,6 @@ exports[`web socket server URL should work with the "ipc" option using "true" va ] `; -exports[`web socket server URL should work with the "ipc" option using "true" value ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "ipc" option using "true" value ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the "ipc" option using "true" value ("ws") 2`] = ` +[] `; - -exports[`web socket server URL should work with the "ipc" option using "true" value ("ws"): page errors 1`] = `[]`; diff --git a/test/e2e/__snapshots__/logging.test.js.snap.webpack5 b/test/e2e/__snapshots__/logging.test.js.snap.webpack5 index bd5c6336ea..2ed213cbd4 100644 --- a/test/e2e/__snapshots__/logging.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/logging.test.js.snap.webpack5 @@ -1,31 +1,11 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`logging should work and do not log messages about hot and live reloading is enabled (sockjs) 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay enabled.", - "Hey.", -] -`; - -exports[`logging should work and do not log messages about hot and live reloading is enabled (ws) 1`] = ` +exports[`logging > should work and do not log messages about hot and live reloading is enabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay enabled.", "Hey.", ] `; -exports[`logging should work and log errors by default (sockjs) 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - "[webpack-dev-server] Errors while compiling. Reload prevented.", - "[webpack-dev-server] ERROR -Error from compilation", -] -`; - -exports[`logging should work and log errors by default (ws) 1`] = ` +exports[`logging > should work and log errors by default (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -36,29 +16,14 @@ Error from compilation", ] `; -exports[`logging should work and log message about live reloading is enabled (sockjs) 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "Hey.", -] -`; - -exports[`logging should work and log message about live reloading is enabled (ws) 1`] = ` +exports[`logging > should work and log message about live reloading is enabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "Hey.", ] `; -exports[`logging should work and log messages about hot and live reloading is enabled (sockjs) 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`logging should work and log messages about hot and live reloading is enabled (sockjs) 2`] = ` +exports[`logging > should work and log messages about hot and live reloading is enabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -66,7 +31,7 @@ exports[`logging should work and log messages about hot and live reloading is en ] `; -exports[`logging should work and log messages about hot and live reloading is enabled (sockjs) 3`] = ` +exports[`logging > should work and log messages about hot and live reloading is enabled (ws) 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -74,7 +39,7 @@ exports[`logging should work and log messages about hot and live reloading is en ] `; -exports[`logging should work and log messages about hot and live reloading is enabled (ws) 1`] = ` +exports[`logging > should work and log messages about hot and live reloading is enabled (ws) 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -82,23 +47,7 @@ exports[`logging should work and log messages about hot and live reloading is en ] `; -exports[`logging should work and log messages about hot and live reloading is enabled (ws) 2`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`logging should work and log messages about hot and live reloading is enabled (ws) 3`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`logging should work and log messages about hot is enabled (sockjs) 1`] = ` +exports[`logging > should work and log messages about hot is enabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -106,24 +55,7 @@ exports[`logging should work and log messages about hot is enabled (sockjs) 1`] ] `; -exports[`logging should work and log messages about hot is enabled (ws) 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`logging should work and log only error (sockjs) 1`] = ` -[ - "Hey.", - "[webpack-dev-server] Errors while compiling. Reload prevented.", - "[webpack-dev-server] ERROR -Error from compilation", -] -`; - -exports[`logging should work and log only error (ws) 1`] = ` +exports[`logging > should work and log only error (ws) 1`] = ` [ "Hey.", "[webpack-dev-server] Errors while compiling. Reload prevented.", @@ -132,7 +64,7 @@ Error from compilation", ] `; -exports[`logging should work and log static changes (sockjs) 1`] = ` +exports[`logging > should work and log static changes (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -144,19 +76,7 @@ exports[`logging should work and log static changes (sockjs) 1`] = ` ] `; -exports[`logging should work and log static changes (ws) 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - "[webpack-dev-server] "/test/fixtures/client-config/static/foo.txt" from static directory was changed. Reloading...", - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`logging should work and log warning and errors (sockjs) 1`] = ` +exports[`logging > should work and log warning and errors (ws) 1`] = ` [ "Hey.", "[webpack-dev-server] Warnings while compiling.", @@ -168,30 +88,7 @@ Error from compilation", ] `; -exports[`logging should work and log warning and errors (ws) 1`] = ` -[ - "Hey.", - "[webpack-dev-server] Warnings while compiling.", - "[webpack-dev-server] WARNING -Warning from compilation", - "[webpack-dev-server] Errors while compiling. Reload prevented.", - "[webpack-dev-server] ERROR -Error from compilation", -] -`; - -exports[`logging should work and log warnings by default (sockjs) 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - "[webpack-dev-server] Warnings while compiling.", - "[webpack-dev-server] WARNING -Warning from compilation", -] -`; - -exports[`logging should work and log warnings by default (ws) 1`] = ` +exports[`logging > should work and log warnings by default (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -202,7 +99,7 @@ Warning from compilation", ] `; -exports[`logging should work when the "client.logging" is "info" (sockjs) 1`] = ` +exports[`logging > should work when the "client.logging" is "info" (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -210,7 +107,7 @@ exports[`logging should work when the "client.logging" is "info" (sockjs) 1`] = ] `; -exports[`logging should work when the "client.logging" is "info" (ws) 1`] = ` +exports[`logging > should work when the "client.logging" is "log" (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -218,43 +115,13 @@ exports[`logging should work when the "client.logging" is "info" (ws) 1`] = ` ] `; -exports[`logging should work when the "client.logging" is "log" (sockjs) 1`] = ` +exports[`logging > should work when the "client.logging" is "none" (ws) 1`] = ` [ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`logging should work when the "client.logging" is "log" (ws) 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`logging should work when the "client.logging" is "none" (sockjs) 1`] = ` -[ - "Hey.", -] -`; - -exports[`logging should work when the "client.logging" is "none" (ws) 1`] = ` -[ - "Hey.", -] -`; - -exports[`logging should work when the "client.logging" is "verbose" (sockjs) 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", "Hey.", ] `; -exports[`logging should work when the "client.logging" is "verbose" (ws) 1`] = ` +exports[`logging > should work when the "client.logging" is "verbose" (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", diff --git a/test/e2e/__snapshots__/mime-types.test.js.snap.webpack5 b/test/e2e/__snapshots__/mime-types.test.js.snap.webpack5 index 2fe136bcf6..953ab8283c 100644 --- a/test/e2e/__snapshots__/mime-types.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/mime-types.test.js.snap.webpack5 @@ -1,17 +1,31 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`mimeTypes option > as an object with a custom type > should request file with different js mime type 1`] = ` +200 +`; -exports[`mimeTypes option as an object with a custom type should request file with different js mime type: console messages 1`] = `[]`; +exports[`mimeTypes option > as an object with a custom type > should request file with different js mime type 2`] = ` +"text/html; charset=utf-8" +`; -exports[`mimeTypes option as an object with a custom type should request file with different js mime type: page errors 1`] = `[]`; +exports[`mimeTypes option > as an object with a custom type > should request file with different js mime type 3`] = ` +[] +`; -exports[`mimeTypes option as an object with a custom type should request file with different js mime type: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`mimeTypes option > as an object with a custom type > should request file with different js mime type 4`] = ` +[] +`; -exports[`mimeTypes option as an object with a custom type should request file with different js mime type: response status 1`] = `200`; +exports[`mimeTypes option > as an object with a remapped type > should request file with different js mime type 1`] = ` +200 +`; -exports[`mimeTypes option as an object with a remapped type should request file with different js mime type: console messages 1`] = `[]`; +exports[`mimeTypes option > as an object with a remapped type > should request file with different js mime type 2`] = ` +"text/plain; charset=utf-8" +`; -exports[`mimeTypes option as an object with a remapped type should request file with different js mime type: page errors 1`] = `[]`; +exports[`mimeTypes option > as an object with a remapped type > should request file with different js mime type 3`] = ` +[] +`; -exports[`mimeTypes option as an object with a remapped type should request file with different js mime type: response headers content-type 1`] = `"text/plain; charset=utf-8"`; - -exports[`mimeTypes option as an object with a remapped type should request file with different js mime type: response status 1`] = `200`; +exports[`mimeTypes option > as an object with a remapped type > should request file with different js mime type 4`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/module-federation.test.js.snap.webpack5 b/test/e2e/__snapshots__/module-federation.test.js.snap.webpack5 index 1c3c271708..20120329dd 100644 --- a/test/e2e/__snapshots__/module-federation.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/module-federation.test.js.snap.webpack5 @@ -1,25 +1,47 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`Module federation > should use plugin > should contain hot script in main.js 1`] = ` +[] +`; -exports[`Module federation should use plugin should contain hot script in main.js: console messages 1`] = `[]`; +exports[`Module federation > should use plugin > should contain hot script in main.js 2`] = ` +[] +`; -exports[`Module federation should use plugin should contain hot script in main.js: page errors 1`] = `[]`; +exports[`Module federation > should use plugin > should contain hot script in remoteEntry.js 1`] = ` +[] +`; -exports[`Module federation should use plugin should contain hot script in remoteEntry.js: console messages 1`] = `[]`; +exports[`Module federation > should use plugin > should contain hot script in remoteEntry.js 2`] = ` +[] +`; -exports[`Module federation should use plugin should contain hot script in remoteEntry.js: page errors 1`] = `[]`; +exports[`Module federation > should work with multi compiler config > should use the last entry export 1`] = ` +[] +`; -exports[`Module federation should work with multi compiler config should use the last entry export: console messages 1`] = `[]`; +exports[`Module federation > should work with multi compiler config > should use the last entry export 2`] = ` +[] +`; -exports[`Module federation should work with multi compiler config should use the last entry export: page errors 1`] = `[]`; +exports[`Module federation > should work with object multi-entry config > should support the named entry export 1`] = ` +[] +`; -exports[`Module federation should work with object multi-entry config should support the named entry export: console messages 1`] = `[]`; +exports[`Module federation > should work with object multi-entry config > should support the named entry export 2`] = ` +[] +`; -exports[`Module federation should work with object multi-entry config should support the named entry export: page errors 1`] = `[]`; +exports[`Module federation > should work with object multi-entry config > should use the last entry export 1`] = ` +[] +`; -exports[`Module federation should work with object multi-entry config should use the last entry export: console messages 1`] = `[]`; +exports[`Module federation > should work with object multi-entry config > should use the last entry export 2`] = ` +[] +`; -exports[`Module federation should work with object multi-entry config should use the last entry export: page errors 1`] = `[]`; +exports[`Module federation > should work with simple multi-entry config > should use the last entry export 1`] = ` +[] +`; -exports[`Module federation should work with simple multi-entry config should use the last entry export: console messages 1`] = `[]`; - -exports[`Module federation should work with simple multi-entry config should use the last entry export: page errors 1`] = `[]`; +exports[`Module federation > should work with simple multi-entry config > should use the last entry export 2`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/multi-compiler.test.js.snap.webpack5 b/test/e2e/__snapshots__/multi-compiler.test.js.snap.webpack5 index 1d99bb38ff..58509f79ac 100644 --- a/test/e2e/__snapshots__/multi-compiler.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/multi-compiler.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`multi compiler should work with one web target configuration and do nothing: console messages 1`] = ` +exports[`multi compiler > should work with one web target configuration and do nothing 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -8,9 +6,11 @@ exports[`multi compiler should work with one web target configuration and do not ] `; -exports[`multi compiler should work with one web target configuration and do nothing: page errors 1`] = `[]`; +exports[`multi compiler > should work with one web target configuration and do nothing 2`] = ` +[] +`; -exports[`multi compiler should work with universal configuration and do nothing: console messages 1`] = ` +exports[`multi compiler > should work with universal configuration and do nothing 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -18,9 +18,11 @@ exports[`multi compiler should work with universal configuration and do nothing: ] `; -exports[`multi compiler should work with universal configuration and do nothing: page errors 1`] = `[]`; +exports[`multi compiler > should work with universal configuration and do nothing 2`] = ` +[] +`; -exports[`multi compiler should work with universal configuration when hot and live reloads are enabled, and do hot reload for browser compiler by default when browser entry changed: console messages 1`] = ` +exports[`multi compiler > should work with universal configuration when hot and live reloads are enabled, and do hot reload for browser compiler by default when browser entry changed 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -38,9 +40,11 @@ Update propagation: ./browser.js ] `; -exports[`multi compiler should work with universal configuration when hot and live reloads are enabled, and do hot reload for browser compiler by default when browser entry changed: page errors 1`] = `[]`; +exports[`multi compiler > should work with universal configuration when hot and live reloads are enabled, and do hot reload for browser compiler by default when browser entry changed 2`] = ` +[] +`; -exports[`multi compiler should work with universal configuration when only hot reload is enabled, and do hot reload for browser compiler when browser entry changed: console messages 1`] = ` +exports[`multi compiler > should work with universal configuration when only hot reload is enabled, and do hot reload for browser compiler when browser entry changed 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -58,9 +62,11 @@ Update propagation: ./browser.js ] `; -exports[`multi compiler should work with universal configuration when only hot reload is enabled, and do hot reload for browser compiler when browser entry changed: page errors 1`] = `[]`; +exports[`multi compiler > should work with universal configuration when only hot reload is enabled, and do hot reload for browser compiler when browser entry changed 2`] = ` +[] +`; -exports[`multi compiler should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries: console messages 1`] = ` +exports[`multi compiler > should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "Hello from the browser", @@ -71,7 +77,11 @@ exports[`multi compiler should work with universal configuration when only live ] `; -exports[`multi compiler should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries: console messages 2`] = ` +exports[`multi compiler > should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries 2`] = ` +[] +`; + +exports[`multi compiler > should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "Hello from the browser", @@ -82,11 +92,11 @@ exports[`multi compiler should work with universal configuration when only live ] `; -exports[`multi compiler should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries: page errors 1`] = `[]`; - -exports[`multi compiler should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries: page errors 2`] = `[]`; +exports[`multi compiler > should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries 4`] = ` +[] +`; -exports[`multi compiler should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries: console messages 1`] = ` +exports[`multi compiler > should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "Hello from the browser", @@ -97,7 +107,11 @@ exports[`multi compiler should work with universal configuration when only live ] `; -exports[`multi compiler should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries: console messages 2`] = ` +exports[`multi compiler > should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries 2`] = ` +[] +`; + +exports[`multi compiler > should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "Hello from the browser", @@ -108,11 +122,11 @@ exports[`multi compiler should work with universal configuration when only live ] `; -exports[`multi compiler should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries: page errors 1`] = `[]`; - -exports[`multi compiler should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries: page errors 2`] = `[]`; +exports[`multi compiler > should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries 4`] = ` +[] +`; -exports[`multi compiler should work with web target configurations and do nothing: console messages 1`] = ` +exports[`multi compiler > should work with web target configurations and do nothing 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -120,7 +134,11 @@ exports[`multi compiler should work with web target configurations and do nothin ] `; -exports[`multi compiler should work with web target configurations and do nothing: console messages 2`] = ` +exports[`multi compiler > should work with web target configurations and do nothing 2`] = ` +[] +`; + +exports[`multi compiler > should work with web target configurations and do nothing 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -128,11 +146,11 @@ exports[`multi compiler should work with web target configurations and do nothin ] `; -exports[`multi compiler should work with web target configurations and do nothing: page errors 1`] = `[]`; - -exports[`multi compiler should work with web target configurations and do nothing: page errors 2`] = `[]`; +exports[`multi compiler > should work with web target configurations and do nothing 4`] = ` +[] +`; -exports[`multi compiler should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries: console messages 1`] = ` +exports[`multi compiler > should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -150,7 +168,11 @@ Update propagation: ./one.js ] `; -exports[`multi compiler should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries: console messages 2`] = ` +exports[`multi compiler > should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries 2`] = ` +[] +`; + +exports[`multi compiler > should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -168,11 +190,11 @@ Update propagation: ./two.js ] `; -exports[`multi compiler should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries: page errors 1`] = `[]`; - -exports[`multi compiler should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries: page errors 2`] = `[]`; +exports[`multi compiler > should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries 4`] = ` +[] +`; -exports[`multi compiler should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries: console messages 1`] = ` +exports[`multi compiler > should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -190,7 +212,11 @@ Update propagation: ./one.js ] `; -exports[`multi compiler should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries: console messages 2`] = ` +exports[`multi compiler > should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries 2`] = ` +[] +`; + +exports[`multi compiler > should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -208,11 +234,11 @@ Update propagation: ./two.js ] `; -exports[`multi compiler should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries: page errors 1`] = `[]`; - -exports[`multi compiler should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries: page errors 2`] = `[]`; +exports[`multi compiler > should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries 4`] = ` +[] +`; -exports[`multi compiler should work with web target configurations when only live reload is enabled and do live reload when changing other entries: console messages 1`] = ` +exports[`multi compiler > should work with web target configurations when only live reload is enabled and do live reload when changing other entries 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "one", @@ -223,7 +249,11 @@ exports[`multi compiler should work with web target configurations when only liv ] `; -exports[`multi compiler should work with web target configurations when only live reload is enabled and do live reload when changing other entries: console messages 2`] = ` +exports[`multi compiler > should work with web target configurations when only live reload is enabled and do live reload when changing other entries 2`] = ` +[] +`; + +exports[`multi compiler > should work with web target configurations when only live reload is enabled and do live reload when changing other entries 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "two", @@ -234,11 +264,11 @@ exports[`multi compiler should work with web target configurations when only liv ] `; -exports[`multi compiler should work with web target configurations when only live reload is enabled and do live reload when changing other entries: page errors 1`] = `[]`; - -exports[`multi compiler should work with web target configurations when only live reload is enabled and do live reload when changing other entries: page errors 2`] = `[]`; +exports[`multi compiler > should work with web target configurations when only live reload is enabled and do live reload when changing other entries 4`] = ` +[] +`; -exports[`multi compiler should work with web target configurations when only live reload is enabled, and do live reload when changing own entries: console messages 1`] = ` +exports[`multi compiler > should work with web target configurations when only live reload is enabled, and do live reload when changing own entries 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "one", @@ -249,7 +279,11 @@ exports[`multi compiler should work with web target configurations when only liv ] `; -exports[`multi compiler should work with web target configurations when only live reload is enabled, and do live reload when changing own entries: console messages 2`] = ` +exports[`multi compiler > should work with web target configurations when only live reload is enabled, and do live reload when changing own entries 2`] = ` +[] +`; + +exports[`multi compiler > should work with web target configurations when only live reload is enabled, and do live reload when changing own entries 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "two", @@ -260,6 +294,6 @@ exports[`multi compiler should work with web target configurations when only liv ] `; -exports[`multi compiler should work with web target configurations when only live reload is enabled, and do live reload when changing own entries: page errors 1`] = `[]`; - -exports[`multi compiler should work with web target configurations when only live reload is enabled, and do live reload when changing own entries: page errors 2`] = `[]`; +exports[`multi compiler > should work with web target configurations when only live reload is enabled, and do live reload when changing own entries 4`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/on-listening.test.js.snap.webpack5 b/test/e2e/__snapshots__/on-listening.test.js.snap.webpack5 index 66bebdb439..b7d494e486 100644 --- a/test/e2e/__snapshots__/on-listening.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/on-listening.test.js.snap.webpack5 @@ -1,21 +1,39 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`onListening option > should handle GET request to /listening/some/path route 1`] = ` +"text/html; charset=utf-8" +`; -exports[`onListening option should handle GET request to /listening/some/path route: console messages 1`] = `[]`; +exports[`onListening option > should handle GET request to /listening/some/path route 2`] = ` +200 +`; -exports[`onListening option should handle GET request to /listening/some/path route: page errors 1`] = `[]`; +exports[`onListening option > should handle GET request to /listening/some/path route 3`] = ` +"listening" +`; -exports[`onListening option should handle GET request to /listening/some/path route: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`onListening option > should handle GET request to /listening/some/path route 4`] = ` +[] +`; -exports[`onListening option should handle GET request to /listening/some/path route: response status 1`] = `200`; +exports[`onListening option > should handle GET request to /listening/some/path route 5`] = ` +[] +`; -exports[`onListening option should handle GET request to /listening/some/path route: response text 1`] = `"listening"`; +exports[`onListening option > should handle POST request to /listening/some/path route 1`] = ` +"text/html; charset=utf-8" +`; -exports[`onListening option should handle POST request to /listening/some/path route: console messages 1`] = `[]`; +exports[`onListening option > should handle POST request to /listening/some/path route 2`] = ` +200 +`; -exports[`onListening option should handle POST request to /listening/some/path route: page errors 1`] = `[]`; +exports[`onListening option > should handle POST request to /listening/some/path route 3`] = ` +"listening POST" +`; -exports[`onListening option should handle POST request to /listening/some/path route: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`onListening option > should handle POST request to /listening/some/path route 4`] = ` +[] +`; -exports[`onListening option should handle POST request to /listening/some/path route: response status 1`] = `200`; - -exports[`onListening option should handle POST request to /listening/some/path route: response text 1`] = `"listening POST"`; +exports[`onListening option > should handle POST request to /listening/some/path route 5`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/overlay.test.js.snap.webpack5 b/test/e2e/__snapshots__/overlay.test.js.snap.webpack5 index 45e917b284..90edcf521b 100644 --- a/test/e2e/__snapshots__/overlay.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/overlay.test.js.snap.webpack5 @@ -1,6 +1,12 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`overlay > should not show a warning when "client.overlay" is "false" 1`] = ` +" +

webpack-dev-server is running...

+ + +" +`; -exports[`overlay should not show a warning when "client.overlay" is "false": page html 1`] = ` +exports[`overlay > should not show a warning when "client.overlay.warnings" is "false" 1`] = ` "

webpack-dev-server is running...

@@ -8,7 +14,7 @@ exports[`overlay should not show a warning when "client.overlay" is "false": pag " `; -exports[`overlay should not show a warning when "client.overlay.warnings" is "false": page html 1`] = ` +exports[`overlay > should not show an error when "client.overlay" is "false" 1`] = ` "

webpack-dev-server is running...

@@ -16,7 +22,7 @@ exports[`overlay should not show a warning when "client.overlay.warnings" is "fa " `; -exports[`overlay should not show an error when "client.overlay" is "false": page html 1`] = ` +exports[`overlay > should not show an error when "client.overlay.errors" is "false" 1`] = ` "

webpack-dev-server is running...

@@ -24,7 +30,7 @@ exports[`overlay should not show an error when "client.overlay" is "false": page " `; -exports[`overlay should not show an error when "client.overlay.errors" is "false": page html 1`] = ` +exports[`overlay > should not show initially, then show on an error and allow to close 1`] = ` "

webpack-dev-server is running...

@@ -32,7 +38,28 @@ exports[`overlay should not show an error when "client.overlay.errors" is "false " `; -exports[`overlay should not show initially, then show on an error and allow to close: overlay html 1`] = ` +exports[`overlay > should not show initially, then show on an error and allow to close 2`] = ` +" +

webpack-dev-server is running...

+ + + + +" +`; + +exports[`overlay > should not show initially, then show on an error and allow to close 3`] = ` "
should not show initially, then show on an error and allow to close 4`] = ` "

webpack-dev-server is running...

@@ -129,7 +156,7 @@ exports[`overlay should not show initially, then show on an error and allow to c " `; -exports[`overlay should not show initially, then show on an error and allow to close: page html initial 1`] = ` +exports[`overlay > should not show initially, then show on an error, then hide on fix 1`] = ` "

webpack-dev-server is running...

@@ -137,7 +164,7 @@ exports[`overlay should not show initially, then show on an error and allow to c " `; -exports[`overlay should not show initially, then show on an error and allow to close: page html with error 1`] = ` +exports[`overlay > should not show initially, then show on an error, then hide on fix 2`] = ` "

webpack-dev-server is running...

@@ -158,7 +185,7 @@ exports[`overlay should not show initially, then show on an error and allow to c " `; -exports[`overlay should not show initially, then show on an error, then hide on fix: overlay html 1`] = ` +exports[`overlay > should not show initially, then show on an error, then hide on fix 3`] = ` "
should not show initially, then show on an error, then hide on fix 4`] = ` "

webpack-dev-server is running...

@@ -255,7 +282,7 @@ exports[`overlay should not show initially, then show on an error, then hide on " `; -exports[`overlay should not show initially, then show on an error, then hide on fix: page html initial 1`] = ` +exports[`overlay > should not show initially, then show on an error, then show other error, then hide on fix 1`] = ` "

webpack-dev-server is running...

@@ -263,7 +290,7 @@ exports[`overlay should not show initially, then show on an error, then hide on " `; -exports[`overlay should not show initially, then show on an error, then hide on fix: page html with error 1`] = ` +exports[`overlay > should not show initially, then show on an error, then show other error, then hide on fix 2`] = ` "

webpack-dev-server is running...

@@ -284,7 +311,7 @@ exports[`overlay should not show initially, then show on an error, then hide on " `; -exports[`overlay should not show initially, then show on an error, then show other error, then hide on fix: overlay html 1`] = ` +exports[`overlay > should not show initially, then show on an error, then show other error, then hide on fix 3`] = ` "
should not show initially, then show on an error, then show other error, then hide on fix 4`] = ` +" +

webpack-dev-server is running...

+ + + + +" +`; + +exports[`overlay > should not show initially, then show on an error, then show other error, then hide on fix 5`] = ` "
should not show initially, then show on an error, then show other error, then hide on fix 6`] = ` "

webpack-dev-server is running...

@@ -470,7 +518,7 @@ exports[`overlay should not show initially, then show on an error, then show oth " `; -exports[`overlay should not show initially, then show on an error, then show other error, then hide on fix: page html initial 1`] = ` +exports[`overlay > should not show overlay when Trusted Types are enabled, but policy is not allowed 1`] = ` "

webpack-dev-server is running...

@@ -478,7 +526,7 @@ exports[`overlay should not show initially, then show on an error, then show oth " `; -exports[`overlay should not show initially, then show on an error, then show other error, then hide on fix: page html with error 1`] = ` +exports[`overlay > should show a warning after invalidation 1`] = ` "

webpack-dev-server is running...

@@ -499,36 +547,7 @@ exports[`overlay should not show initially, then show on an error, then show oth " `; -exports[`overlay should not show initially, then show on an error, then show other error, then hide on fix: page html with other error 1`] = ` -" -

webpack-dev-server is running...

- - - - -" -`; - -exports[`overlay should not show overlay when Trusted Types are enabled, but policy is not allowed: page html 1`] = ` -" -

webpack-dev-server is running...

- - -" -`; - -exports[`overlay should show a warning after invalidation: overlay html 1`] = ` +exports[`overlay > should show a warning after invalidation 2`] = ` "
should show a warning and error for initial compilation 1`] = ` "

webpack-dev-server is running...

@@ -633,7 +652,7 @@ exports[`overlay should show a warning after invalidation: page html 1`] = ` " `; -exports[`overlay should show a warning and error for initial compilation and protects against xss: overlay html 1`] = ` +exports[`overlay > should show a warning and error for initial compilation 2`] = ` "
- <strong>strong</strong> + Warning from compilation
- <strong>strong</strong> + Warning from compilation
-
-
- -" -`; - -exports[`overlay should show a warning and error for initial compilation and protects against xss: page html 1`] = ` -" -

webpack-dev-server is running...

- - - - -" -`; - -exports[`overlay should show a warning and error for initial compilation: overlay html 1`] = ` -" -
-
- Compiled with problems: -
- -
- Warning from compilation + Error from compilation. Can't find 'test' module.
- Warning from compilation + Error from compilation. Can't find 'test' module.
+
+ + +" +`; + +exports[`overlay > should show a warning and error for initial compilation and protects against xss 1`] = ` +" +

webpack-dev-server is running...

+ + + + +" +`; + +exports[`overlay > should show a warning and error for initial compilation and protects against xss 2`] = ` +" +
+
+ Compiled with problems: +
+ +
- Error from compilation. Can't find 'test' module. + <strong>strong</strong>
- Error from compilation. Can't find 'test' module. + <strong>strong</strong>
@@ -957,7 +976,7 @@ exports[`overlay should show a warning and error for initial compilation: overla " `; -exports[`overlay should show a warning and error for initial compilation: page html 1`] = ` +exports[`overlay > should show a warning and hide them after closing connection 1`] = ` "

webpack-dev-server is running...

@@ -978,7 +997,7 @@ exports[`overlay should show a warning and error for initial compilation: page h " `; -exports[`overlay should show a warning and hide them after closing connection: overlay html 1`] = ` +exports[`overlay > should show a warning and hide them after closing connection 2`] = ` "
should show a warning and hide them after closing connection 3`] = ` +" +

webpack-dev-server is running...

+ + +" +`; + +exports[`overlay > should show a warning for initial compilation 1`] = ` "

webpack-dev-server is running...

@@ -1083,15 +1110,7 @@ exports[`overlay should show a warning and hide them after closing connection: p " `; -exports[`overlay should show a warning and hide them after closing connection: page html 2`] = ` -" -

webpack-dev-server is running...

- - -" -`; - -exports[`overlay should show a warning for initial compilation: overlay html 1`] = ` +exports[`overlay > should show a warning for initial compilation 2`] = ` "
should show a warning when "client.overlay" is "true" 1`] = ` "

webpack-dev-server is running...

@@ -1196,7 +1215,7 @@ exports[`overlay should show a warning for initial compilation: page html 1`] = " `; -exports[`overlay should show a warning when "client.overlay" is "true": overlay html 1`] = ` +exports[`overlay > should show a warning when "client.overlay" is "true" 2`] = ` "
should show a warning when "client.overlay.errors" is "true" 1`] = ` "

webpack-dev-server is running...

@@ -1301,7 +1320,7 @@ exports[`overlay should show a warning when "client.overlay" is "true": page htm " `; -exports[`overlay should show a warning when "client.overlay.errors" is "true": overlay html 1`] = ` +exports[`overlay > should show a warning when "client.overlay.errors" is "true" 2`] = ` "
should show a warning when "client.overlay.warnings" is "true" 1`] = ` "

webpack-dev-server is running...

@@ -1406,7 +1425,7 @@ exports[`overlay should show a warning when "client.overlay.errors" is "true": p " `; -exports[`overlay should show a warning when "client.overlay.warnings" is "true": overlay html 1`] = ` +exports[`overlay > should show a warning when "client.overlay.warnings" is "true" 2`] = ` "
should show an ansi formatted error for initial compilation 1`] = ` "

webpack-dev-server is running...

@@ -1511,7 +1530,7 @@ exports[`overlay should show a warning when "client.overlay.warnings" is "true": " `; -exports[`overlay should show an ansi formatted error for initial compilation: overlay html 1`] = ` +exports[`overlay > should show an ansi formatted error for initial compilation 2`] = ` "
should show an error after invalidation 1`] = ` "

webpack-dev-server is running...

@@ -1627,7 +1646,7 @@ exports[`overlay should show an ansi formatted error for initial compilation: pa " `; -exports[`overlay should show an error after invalidation: overlay html 1`] = ` +exports[`overlay > should show an error after invalidation 2`] = ` "
should show an error for initial compilation 1`] = ` "

webpack-dev-server is running...

@@ -1732,7 +1751,7 @@ exports[`overlay should show an error after invalidation: page html 1`] = ` " `; -exports[`overlay should show an error for initial compilation: overlay html 1`] = ` +exports[`overlay > should show an error for initial compilation 2`] = ` "
should show an error when "client.overlay" is "true" 1`] = ` "

webpack-dev-server is running...

@@ -1837,7 +1856,7 @@ exports[`overlay should show an error for initial compilation: page html 1`] = ` " `; -exports[`overlay should show an error when "client.overlay" is "true": overlay html 1`] = ` +exports[`overlay > should show an error when "client.overlay" is "true" 2`] = ` "
should show an error when "client.overlay.errors" is "true" 1`] = ` "

webpack-dev-server is running...

@@ -1942,7 +1961,7 @@ exports[`overlay should show an error when "client.overlay" is "true": page html " `; -exports[`overlay should show an error when "client.overlay.errors" is "true": overlay html 1`] = ` +exports[`overlay > should show an error when "client.overlay.errors" is "true" 2`] = ` "
should show an error when "client.overlay.warnings" is "true" 1`] = ` "

webpack-dev-server is running...

@@ -2047,7 +2066,7 @@ exports[`overlay should show an error when "client.overlay.errors" is "true": pa " `; -exports[`overlay should show an error when "client.overlay.warnings" is "true": overlay html 1`] = ` +exports[`overlay > should show an error when "client.overlay.warnings" is "true" 2`] = ` "
-

webpack-dev-server is running...

- - - - -" -`; - -exports[`overlay should show error for uncaught promise rejection: overlay html 1`] = ` +exports[`overlay > should show error for uncaught promise rejection 1`] = ` "
should show error for uncaught runtime error 1`] = ` "
should show error when it is not filtered 1`] = ` +" +

webpack-dev-server is running...

+ + + + +" +`; + +exports[`overlay > should show error when it is not filtered 2`] = ` "
should show overlay when "Content-Security-Policy" is "default-src 'self'" was used 1`] = ` "

webpack-dev-server is running...

@@ -2426,7 +2445,7 @@ exports[`overlay should show error when it is not filtered: page html 1`] = ` " `; -exports[`overlay should show overlay when "Content-Security-Policy" is "default-src 'self'" was used: overlay html 1`] = ` +exports[`overlay > should show overlay when "Content-Security-Policy" is "default-src 'self'" was used 2`] = ` "
should show overlay when Trusted Types are enabled 1`] = ` "

webpack-dev-server is running...

@@ -2531,7 +2550,7 @@ exports[`overlay should show overlay when "Content-Security-Policy" is "default- " `; -exports[`overlay should show overlay when Trusted Types are enabled and the "require-trusted-types-for 'script'" header was used: overlay html 1`] = ` +exports[`overlay > should show overlay when Trusted Types are enabled 2`] = ` "
should show overlay when Trusted Types are enabled and the "require-trusted-types-for 'script'" header was used 1`] = ` "

webpack-dev-server is running...

@@ -2636,7 +2655,7 @@ exports[`overlay should show overlay when Trusted Types are enabled and the "req " `; -exports[`overlay should show overlay when Trusted Types are enabled: overlay html 1`] = ` +exports[`overlay > should show overlay when Trusted Types are enabled and the "require-trusted-types-for 'script'" header was used 2`] = ` "
should show warning when it is not filtered 1`] = ` "

webpack-dev-server is running...

@@ -2741,7 +2760,7 @@ exports[`overlay should show overlay when Trusted Types are enabled: page html 1 " `; -exports[`overlay should show warning when it is not filtered: overlay html 1`] = ` +exports[`overlay > should show warning when it is not filtered 2`] = ` "
" `; - -exports[`overlay should show warning when it is not filtered: page html 1`] = ` -" -

webpack-dev-server is running...

- - - - -" -`; diff --git a/test/e2e/__snapshots__/port.test.js.snap.webpack5 b/test/e2e/__snapshots__/port.test.js.snap.webpack5 index b88dae9b1a..317910202e 100644 --- a/test/e2e/__snapshots__/port.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/port.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`port should work using "" port : console messages 1`] = ` +exports[`port > should work using "0" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -8,9 +6,11 @@ exports[`port should work using "" port : console messages 1`] = ] `; -exports[`port should work using "" port : page errors 1`] = `[]`; +exports[`port > should work using "0" port 2`] = ` +[] +`; -exports[`port should work using "0" port : console messages 1`] = ` +exports[`port > should work using "8159" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -18,9 +18,11 @@ exports[`port should work using "0" port : console messages 1`] = ` ] `; -exports[`port should work using "0" port : page errors 1`] = `[]`; +exports[`port > should work using "8159" port 2`] = ` +[] +`; -exports[`port should work using "8161" port : console messages 1`] = ` +exports[`port > should work using "8159" port 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -28,7 +30,11 @@ exports[`port should work using "8161" port : console messages 1`] = ` ] `; -exports[`port should work using "8161" port : console messages 2`] = ` +exports[`port > should work using "8159" port 4`] = ` +[] +`; + +exports[`port > should work using "" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -36,11 +42,11 @@ exports[`port should work using "8161" port : console messages 2`] = ` ] `; -exports[`port should work using "8161" port : page errors 1`] = `[]`; - -exports[`port should work using "8161" port : page errors 2`] = `[]`; +exports[`port > should work using "" port 2`] = ` +[] +`; -exports[`port should work using "auto" port : console messages 1`] = ` +exports[`port > should work using "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -48,9 +54,11 @@ exports[`port should work using "auto" port : console messages 1`] = ` ] `; -exports[`port should work using "auto" port : page errors 1`] = `[]`; +exports[`port > should work using "auto" port 2`] = ` +[] +`; -exports[`port should work using "undefined" port : console messages 1`] = ` +exports[`port > should work using "undefined" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -58,4 +66,6 @@ exports[`port should work using "undefined" port : console messages 1`] = ` ] `; -exports[`port should work using "undefined" port : page errors 1`] = `[]`; +exports[`port > should work using "undefined" port 2`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/server-and-client-transport.test.js.snap.webpack5 b/test/e2e/__snapshots__/server-and-client-transport.test.js.snap.webpack5 index f789fc8cdc..3ee013ede0 100644 --- a/test/e2e/__snapshots__/server-and-client-transport.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/server-and-client-transport.test.js.snap.webpack5 @@ -1,105 +1,72 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`server and client transport should throw an error on invalid path to client transport 1`] = `"client.webSocketTransport must be a string denoting a default implementation (e.g. 'sockjs', 'ws') or a full path to a JS file via require.resolve(...) which exports a class "`; - -exports[`server and client transport should throw an error on invalid path to server transport 1`] = `"webSocketServer (webSocketServer.type) must be a string denoting a default implementation (e.g. 'ws', 'sockjs'), a full path to a JS file which exports a class extending BaseServer (webpack-dev-server/lib/servers/BaseServer.js) via require.resolve(...), or the class itself which extends BaseServer"`; - -exports[`server and client transport should throw an error on wrong path 1`] = `"webSocketServer (webSocketServer.type) must be a string denoting a default implementation (e.g. 'ws', 'sockjs'), a full path to a JS file which exports a class extending BaseServer (webpack-dev-server/lib/servers/BaseServer.js) via require.resolve(...), or the class itself which extends BaseServer"`; - -exports[`server and client transport should use "sockjs" transport and "sockjs" web socket server 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", -] +exports[`server and client transport > should throw an error on invalid path to client transport 1`] = ` +"client.webSocketTransport must be a string denoting a default implementation (e.g. 'ws') or a resolvable module specifier or absolute file path which exports a class " `; -exports[`server and client transport should use "sockjs" transport, when web socket server is not specify 1`] = `[]`; - -exports[`server and client transport should use "sockjs" web socket server when specify "sockjs" value 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", -] +exports[`server and client transport > should throw an error on invalid path to server transport 1`] = ` +"webSocketServer (webSocketServer.type) must be a string denoting a default implementation (e.g. 'ws'), a resolvable module specifier or absolute file path which exports a class extending BaseServer (webpack-dev-server/lib/servers/BaseServer.js), or the class itself which extends BaseServer" `; -exports[`server and client transport should use "sockjs" web socket server when specify "sockjs" value using object 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", -] -`; - -exports[`server and client transport should use "ws" transport and "ws" web socket server 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", -] +exports[`server and client transport > should throw an error on wrong path 1`] = ` +"webSocketServer (webSocketServer.type) must be a string denoting a default implementation (e.g. 'ws'), a resolvable module specifier or absolute file path which exports a class extending BaseServer (webpack-dev-server/lib/servers/BaseServer.js), or the class itself which extends BaseServer" `; -exports[`server and client transport should use "ws" transport, when web socket server is not specify 1`] = ` +exports[`server and client transport > should use "ws" transport and "ws" web socket server 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", ] `; -exports[`server and client transport should use "ws" web socket server when specify "ws" value 1`] = ` +exports[`server and client transport > should use "ws" transport, when web socket server is not specify 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", ] `; -exports[`server and client transport should use "ws" web socket server when specify "ws" value using object 1`] = ` +exports[`server and client transport > should use "ws" web socket server when specify "ws" value 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", ] `; -exports[`server and client transport should use custom transport and "sockjs" web socket server 1`] = ` +exports[`server and client transport > should use "ws" web socket server when specify "ws" value using object 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", - "open", - "hot", - "liveReload", - "reconnect", - "overlay", - "hash", - "ok", ] `; -exports[`server and client transport should use custom web socket server when specify class 1`] = ` +exports[`server and client transport > should use custom web socket server when specify class 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", ] `; -exports[`server and client transport should use custom web socket server when specify class using object 1`] = ` +exports[`server and client transport > should use custom web socket server when specify class using object 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", ] `; -exports[`server and client transport should use custom web socket server when specify path to class 1`] = ` +exports[`server and client transport > should use custom web socket server when specify path to class 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", ] `; -exports[`server and client transport should use custom web socket server when specify path to class using object 1`] = ` +exports[`server and client transport > should use custom web socket server when specify path to class using object 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", ] `; -exports[`server and client transport should use default web socket server ("ws") 1`] = ` +exports[`server and client transport > should use default web socket server ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", diff --git a/test/e2e/__snapshots__/server.test.js.snap.webpack5 b/test/e2e/__snapshots__/server.test.js.snap.webpack5 index 9eb2a7c938..96e974a7ec 100644 --- a/test/e2e/__snapshots__/server.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/server.test.js.snap.webpack5 @@ -1,8 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`server option as object allow to pass more options should handle GET request to index route (/): console messages 1`] = `[]`; - -exports[`server option as object allow to pass more options should handle GET request to index route (/): https options 1`] = ` +exports[`server option > as object > allow to pass more options > should handle GET request to index route (/) 1`] = ` { "ca": "", "cert": "", @@ -14,18 +10,24 @@ exports[`server option as object allow to pass more options should handle GET re } `; -exports[`server option as object allow to pass more options should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as object allow to pass more options should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > allow to pass more options > should handle GET request to index route (/) 2`] = ` +200 +`; -exports[`server option as object allow to pass more options should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > allow to pass more options > should handle GET request to index route (/) 3`] = ` "Heyo. " `; -exports[`server option as object ca, pfx, key and cert are array of buffers should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as object > allow to pass more options > should handle GET request to index route (/) 4`] = ` +[] +`; -exports[`server option as object ca, pfx, key and cert are array of buffers should handle GET request to index route (/): https options 1`] = ` +exports[`server option > as object > allow to pass more options > should handle GET request to index route (/) 5`] = ` +[] +`; + +exports[`server option > as object > ca, pfx, key and cert are array of buffers > should handle GET request to index route (/) 1`] = ` { "ca": [ "", @@ -44,18 +46,24 @@ exports[`server option as object ca, pfx, key and cert are array of buffers shou } `; -exports[`server option as object ca, pfx, key and cert are array of buffers should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as object ca, pfx, key and cert are array of buffers should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > ca, pfx, key and cert are array of buffers > should handle GET request to index route (/) 2`] = ` +200 +`; -exports[`server option as object ca, pfx, key and cert are array of buffers should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are array of buffers > should handle GET request to index route (/) 3`] = ` "Heyo. " `; -exports[`server option as object ca, pfx, key and cert are array of paths to files should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as object > ca, pfx, key and cert are array of buffers > should handle GET request to index route (/) 4`] = ` +[] +`; + +exports[`server option > as object > ca, pfx, key and cert are array of buffers > should handle GET request to index route (/) 5`] = ` +[] +`; -exports[`server option as object ca, pfx, key and cert are array of paths to files should handle GET request to index route (/): https options 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are array of paths to files > should handle GET request to index route (/) 1`] = ` { "ca": [ "", @@ -74,18 +82,24 @@ exports[`server option as object ca, pfx, key and cert are array of paths to fil } `; -exports[`server option as object ca, pfx, key and cert are array of paths to files should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as object ca, pfx, key and cert are array of paths to files should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > ca, pfx, key and cert are array of paths to files > should handle GET request to index route (/) 2`] = ` +200 +`; -exports[`server option as object ca, pfx, key and cert are array of paths to files should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are array of paths to files > should handle GET request to index route (/) 3`] = ` "Heyo. " `; -exports[`server option as object ca, pfx, key and cert are array of strings should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as object > ca, pfx, key and cert are array of paths to files > should handle GET request to index route (/) 4`] = ` +[] +`; + +exports[`server option > as object > ca, pfx, key and cert are array of paths to files > should handle GET request to index route (/) 5`] = ` +[] +`; -exports[`server option as object ca, pfx, key and cert are array of strings should handle GET request to index route (/): https options 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are array of strings > should handle GET request to index route (/) 1`] = ` { "ca": [ "-----BEGIN RSA PRIVATE KEY----- @@ -180,18 +194,24 @@ QyvMqmN1kGy20SZbQDD/fLfqBQ== } `; -exports[`server option as object ca, pfx, key and cert are array of strings should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as object ca, pfx, key and cert are array of strings should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > ca, pfx, key and cert are array of strings > should handle GET request to index route (/) 2`] = ` +200 +`; -exports[`server option as object ca, pfx, key and cert are array of strings should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are array of strings > should handle GET request to index route (/) 3`] = ` "Heyo. " `; -exports[`server option as object ca, pfx, key and cert are buffer should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as object > ca, pfx, key and cert are array of strings > should handle GET request to index route (/) 4`] = ` +[] +`; + +exports[`server option > as object > ca, pfx, key and cert are array of strings > should handle GET request to index route (/) 5`] = ` +[] +`; -exports[`server option as object ca, pfx, key and cert are buffer should handle GET request to index route (/): https options 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are buffer > should handle GET request to index route (/) 1`] = ` { "ca": "", "cert": "", @@ -202,18 +222,24 @@ exports[`server option as object ca, pfx, key and cert are buffer should handle } `; -exports[`server option as object ca, pfx, key and cert are buffer should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as object ca, pfx, key and cert are buffer should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > ca, pfx, key and cert are buffer > should handle GET request to index route (/) 2`] = ` +200 +`; -exports[`server option as object ca, pfx, key and cert are buffer should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are buffer > should handle GET request to index route (/) 3`] = ` "Heyo. " `; -exports[`server option as object ca, pfx, key and cert are buffer, key and pfx are objects should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as object > ca, pfx, key and cert are buffer > should handle GET request to index route (/) 4`] = ` +[] +`; -exports[`server option as object ca, pfx, key and cert are buffer, key and pfx are objects should handle GET request to index route (/): https options 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are buffer > should handle GET request to index route (/) 5`] = ` +[] +`; + +exports[`server option > as object > ca, pfx, key and cert are buffer, key and pfx are objects > should handle GET request to index route (/) 1`] = ` { "ca": "", "cert": "", @@ -232,18 +258,24 @@ exports[`server option as object ca, pfx, key and cert are buffer, key and pfx a } `; -exports[`server option as object ca, pfx, key and cert are buffer, key and pfx are objects should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as object ca, pfx, key and cert are buffer, key and pfx are objects should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > ca, pfx, key and cert are buffer, key and pfx are objects > should handle GET request to index route (/) 2`] = ` +200 +`; -exports[`server option as object ca, pfx, key and cert are buffer, key and pfx are objects should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are buffer, key and pfx are objects > should handle GET request to index route (/) 3`] = ` "Heyo. " `; -exports[`server option as object ca, pfx, key and cert are paths to files should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as object > ca, pfx, key and cert are buffer, key and pfx are objects > should handle GET request to index route (/) 4`] = ` +[] +`; + +exports[`server option > as object > ca, pfx, key and cert are buffer, key and pfx are objects > should handle GET request to index route (/) 5`] = ` +[] +`; -exports[`server option as object ca, pfx, key and cert are paths to files should handle GET request to index route (/): https options 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are paths to files > should handle GET request to index route (/) 1`] = ` { "ca": "", "cert": "", @@ -254,18 +286,24 @@ exports[`server option as object ca, pfx, key and cert are paths to files should } `; -exports[`server option as object ca, pfx, key and cert are paths to files should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as object ca, pfx, key and cert are paths to files should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > ca, pfx, key and cert are paths to files > should handle GET request to index route (/) 2`] = ` +200 +`; -exports[`server option as object ca, pfx, key and cert are paths to files should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are paths to files > should handle GET request to index route (/) 3`] = ` "Heyo. " `; -exports[`server option as object ca, pfx, key and cert are strings should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as object > ca, pfx, key and cert are paths to files > should handle GET request to index route (/) 4`] = ` +[] +`; + +exports[`server option > as object > ca, pfx, key and cert are paths to files > should handle GET request to index route (/) 5`] = ` +[] +`; -exports[`server option as object ca, pfx, key and cert are strings should handle GET request to index route (/): https options 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are strings > should handle GET request to index route (/) 1`] = ` { "ca": "-----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAxAUVLFM+K3XDLQkBi7xt0s1Ip7JoHYDskzUDQNHjjMkUq5kv @@ -352,18 +390,24 @@ QyvMqmN1kGy20SZbQDD/fLfqBQ== } `; -exports[`server option as object ca, pfx, key and cert are strings should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as object ca, pfx, key and cert are strings should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > ca, pfx, key and cert are strings > should handle GET request to index route (/) 2`] = ` +200 +`; -exports[`server option as object ca, pfx, key and cert are strings should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are strings > should handle GET request to index route (/) 3`] = ` "Heyo. " `; -exports[`server option as object ca, pfx, key and cert are strings, key and pfx are objects should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as object > ca, pfx, key and cert are strings > should handle GET request to index route (/) 4`] = ` +[] +`; + +exports[`server option > as object > ca, pfx, key and cert are strings > should handle GET request to index route (/) 5`] = ` +[] +`; -exports[`server option as object ca, pfx, key and cert are strings, key and pfx are objects should handle GET request to index route (/): https options 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are strings, key and pfx are objects > should handle GET request to index route (/) 1`] = ` { "ca": "-----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAxAUVLFM+K3XDLQkBi7xt0s1Ip7JoHYDskzUDQNHjjMkUq5kv @@ -458,40 +502,56 @@ QyvMqmN1kGy20SZbQDD/fLfqBQ== } `; -exports[`server option as object ca, pfx, key and cert are strings, key and pfx are objects should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as object ca, pfx, key and cert are strings, key and pfx are objects should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > ca, pfx, key and cert are strings, key and pfx are objects > should handle GET request to index route (/) 2`] = ` +200 +`; -exports[`server option as object ca, pfx, key and cert are strings, key and pfx are objects should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are strings, key and pfx are objects > should handle GET request to index route (/) 3`] = ` "Heyo. " `; -exports[`server option as object custom server with options should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as object > ca, pfx, key and cert are strings, key and pfx are objects > should handle GET request to index route (/) 4`] = ` +[] +`; + +exports[`server option > as object > ca, pfx, key and cert are strings, key and pfx are objects > should handle GET request to index route (/) 5`] = ` +[] +`; -exports[`server option as object custom server with options should handle GET request to index route (/): http options 1`] = ` +exports[`server option > as object > custom server with options > should handle GET request to index route (/) 1`] = ` { "maxHeaderSize": 16384, } `; -exports[`server option as object custom server with options should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as object custom server with options should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > custom server with options > should handle GET request to index route (/) 2`] = ` +200 +`; -exports[`server option as object custom server with options should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > custom server with options > should handle GET request to index route (/) 3`] = ` "Heyo. " `; -exports[`server option as object should support the "requestCert" option should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > custom server with options > should handle GET request to index route (/) 4`] = ` +[] +`; -exports[`server option as object should support the "requestCert" option should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > custom server with options > should handle GET request to index route (/) 5`] = ` +[] +`; + +exports[`server option > as object > should support the "requestCert" option > should handle GET request to index route (/) 1`] = ` +200 +`; + +exports[`server option > as object > should support the "requestCert" option > should handle GET request to index route (/) 2`] = ` "Heyo. " `; -exports[`server option as object should support the "requestCert" option should pass options to the 'https.createServer' method: https options 1`] = ` +exports[`server option > as object > should support the "requestCert" option > should pass options to the 'https.createServer' method 1`] = ` { "cert": "", "key": "", @@ -501,35 +561,53 @@ exports[`server option as object should support the "requestCert" option should } `; -exports[`server option as string custom-http should handle GET request to index route (/): console messages 1`] = `[]`; - -exports[`server option as string custom-http should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as string custom-http should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as string > custom-http > should handle GET request to index route (/) 1`] = ` +200 +`; -exports[`server option as string custom-http should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as string > custom-http > should handle GET request to index route (/) 2`] = ` "Heyo. " `; -exports[`server option as string http should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as string > custom-http > should handle GET request to index route (/) 3`] = ` +[] +`; -exports[`server option as string http should handle GET request to index route (/): page errors 1`] = `[]`; +exports[`server option > as string > custom-http > should handle GET request to index route (/) 4`] = ` +[] +`; -exports[`server option as string http should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as string > http > should handle GET request to index route (/) 1`] = ` +200 +`; -exports[`server option as string http should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as string > http > should handle GET request to index route (/) 2`] = ` "Heyo. " `; -exports[`server option as string https should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as string > http > should handle GET request to index route (/) 3`] = ` +[] +`; -exports[`server option as string https should handle GET request to index route (/): page errors 1`] = `[]`; +exports[`server option > as string > http > should handle GET request to index route (/) 4`] = ` +[] +`; -exports[`server option as string https should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as string > https > should handle GET request to index route (/) 1`] = ` +200 +`; -exports[`server option as string https should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as string > https > should handle GET request to index route (/) 2`] = ` "Heyo. " `; + +exports[`server option > as string > https > should handle GET request to index route (/) 3`] = ` +[] +`; + +exports[`server option > as string > https > should handle GET request to index route (/) 4`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/setup-exit-signals.test.js.snap.webpack5 b/test/e2e/__snapshots__/setup-exit-signals.test.js.snap.webpack5 index c593d85b82..fa26de3eab 100644 --- a/test/e2e/__snapshots__/setup-exit-signals.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/setup-exit-signals.test.js.snap.webpack5 @@ -1,6 +1,8 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`setupExitSignals option > should handle 'SIGINT' and 'SIGTERM' signals > should close and exit on SIGINT 1`] = ` +200 +`; -exports[`setupExitSignals option should handle 'SIGINT' and 'SIGTERM' signals should close and exit on SIGINT: console messages 1`] = ` +exports[`setupExitSignals option > should handle 'SIGINT' and 'SIGTERM' signals > should close and exit on SIGINT 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -8,11 +10,15 @@ exports[`setupExitSignals option should handle 'SIGINT' and 'SIGTERM' signals sh ] `; -exports[`setupExitSignals option should handle 'SIGINT' and 'SIGTERM' signals should close and exit on SIGINT: page errors 1`] = `[]`; +exports[`setupExitSignals option > should handle 'SIGINT' and 'SIGTERM' signals > should close and exit on SIGINT 3`] = ` +[] +`; -exports[`setupExitSignals option should handle 'SIGINT' and 'SIGTERM' signals should close and exit on SIGINT: response status 1`] = `200`; +exports[`setupExitSignals option > should handle 'SIGINT' and 'SIGTERM' signals > should close and exit on SIGTERM 1`] = ` +200 +`; -exports[`setupExitSignals option should handle 'SIGINT' and 'SIGTERM' signals should close and exit on SIGTERM: console messages 1`] = ` +exports[`setupExitSignals option > should handle 'SIGINT' and 'SIGTERM' signals > should close and exit on SIGTERM 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -20,6 +26,6 @@ exports[`setupExitSignals option should handle 'SIGINT' and 'SIGTERM' signals sh ] `; -exports[`setupExitSignals option should handle 'SIGINT' and 'SIGTERM' signals should close and exit on SIGTERM: page errors 1`] = `[]`; - -exports[`setupExitSignals option should handle 'SIGINT' and 'SIGTERM' signals should close and exit on SIGTERM: response status 1`] = `200`; +exports[`setupExitSignals option > should handle 'SIGINT' and 'SIGTERM' signals > should close and exit on SIGTERM 3`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/setup-middlewares.test.js.snap.webpack5 b/test/e2e/__snapshots__/setup-middlewares.test.js.snap.webpack5 index 2a83e8bbbf..7407c58602 100644 --- a/test/e2e/__snapshots__/setup-middlewares.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/setup-middlewares.test.js.snap.webpack5 @@ -1,39 +1,75 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 1`] = ` +"text/html; charset=utf-8" +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: console messages 1`] = `[]`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 2`] = ` +200 +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: page errors 1`] = `[]`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 3`] = ` +"setup-middlewares option GET" +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 4`] = ` +"text/html; charset=utf-8" +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response headers content-type 2`] = `"text/html; charset=utf-8"`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 5`] = ` +200 +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response headers content-type 3`] = `"text/html; charset=utf-8"`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 6`] = ` +"Hello World with path!" +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response headers content-type 4`] = `"text/html; charset=utf-8"`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 7`] = ` +"text/html; charset=utf-8" +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response status 1`] = `200`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 8`] = ` +200 +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response status 2`] = `200`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 9`] = ` +"Hello World without path!" +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response status 3`] = `200`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 10`] = ` +"text/html; charset=utf-8" +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response status 4`] = `200`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 11`] = ` +200 +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response text 1`] = `"setup-middlewares option GET"`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 12`] = ` +"Hello World as function!" +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response text 2`] = `"Hello World with path!"`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 13`] = ` +[] +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response text 3`] = `"Hello World without path!"`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 14`] = ` +[] +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response text 4`] = `"Hello World as function!"`; +exports[`setupMiddlewares option > should handle POST request to /setup-middleware/some/path route 1`] = ` +"text/html; charset=utf-8" +`; -exports[`setupMiddlewares option should handle POST request to /setup-middleware/some/path route: console messages 1`] = `[]`; +exports[`setupMiddlewares option > should handle POST request to /setup-middleware/some/path route 2`] = ` +200 +`; -exports[`setupMiddlewares option should handle POST request to /setup-middleware/some/path route: page errors 1`] = `[]`; +exports[`setupMiddlewares option > should handle POST request to /setup-middleware/some/path route 3`] = ` +"setup-middlewares option POST" +`; -exports[`setupMiddlewares option should handle POST request to /setup-middleware/some/path route: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`setupMiddlewares option > should handle POST request to /setup-middleware/some/path route 4`] = ` +[] +`; -exports[`setupMiddlewares option should handle POST request to /setup-middleware/some/path route: response status 1`] = `200`; - -exports[`setupMiddlewares option should handle POST request to /setup-middleware/some/path route: response text 1`] = `"setup-middlewares option POST"`; +exports[`setupMiddlewares option > should handle POST request to /setup-middleware/some/path route 5`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/static-directory.test.js.snap.webpack5 b/test/e2e/__snapshots__/static-directory.test.js.snap.webpack5 index 4d88c538a7..611c8ad3e5 100644 --- a/test/e2e/__snapshots__/static-directory.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/static-directory.test.js.snap.webpack5 @@ -1,27 +1,25 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`static.directory option defaults to PWD should handle request to /index.html: console messages 1`] = `[]`; - -exports[`static.directory option defaults to PWD should handle request to /index.html: page errors 1`] = `[]`; - -exports[`static.directory option defaults to PWD should handle request to /index.html: response status 1`] = `200`; +exports[`static.directory option > defaults to PWD > should handle request to /index.html 1`] = ` +200 +`; -exports[`static.directory option defaults to PWD should handle request to /index.html: response text 1`] = ` +exports[`static.directory option > defaults to PWD > should handle request to /index.html 2`] = ` "Heyo. " `; -exports[`static.directory option disabled should not handle request to /other.html (404): console messages 1`] = ` -[ - "Failed to load resource: the server responded with a status of 404 (Not Found)", -] +exports[`static.directory option > defaults to PWD > should handle request to /index.html 3`] = ` +[] `; -exports[`static.directory option disabled should not handle request to /other.html (404): page errors 1`] = `[]`; +exports[`static.directory option > defaults to PWD > should handle request to /index.html 4`] = ` +[] +`; -exports[`static.directory option disabled should not handle request to /other.html (404): response status 1`] = `404`; +exports[`static.directory option > disabled > should not handle request to /other.html (404) 1`] = ` +404 +`; -exports[`static.directory option disabled should not handle request to /other.html (404): response text 1`] = ` +exports[`static.directory option > disabled > should not handle request to /other.html (404) 2`] = ` " @@ -35,34 +33,50 @@ exports[`static.directory option disabled should not handle request to /other.ht " `; -exports[`static.directory option test listing files in folders without index.html using the default static.serveIndex option (true) should list the files inside the assets folder (200): console messages 1`] = `[]`; +exports[`static.directory option > disabled > should not handle request to /other.html (404) 3`] = ` +[ + "Failed to load resource: the server responded with a status of 404 (Not Found)", +] +`; -exports[`static.directory option test listing files in folders without index.html using the default static.serveIndex option (true) should list the files inside the assets folder (200): page errors 1`] = `[]`; +exports[`static.directory option > disabled > should not handle request to /other.html (404) 4`] = ` +[] +`; -exports[`static.directory option test listing files in folders without index.html using the default static.serveIndex option (true) should list the files inside the assets folder (200): response status 1`] = `200`; +exports[`static.directory option > test listing files in folders without index.html using the default static.serveIndex option (true) > should list the files inside the assets folder (200) 1`] = ` +200 +`; -exports[`static.directory option test listing files in folders without index.html using the default static.serveIndex option (true) should show Heyo. because bar has index.html inside it (200): console messages 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the default static.serveIndex option (true) > should list the files inside the assets folder (200) 2`] = ` +[] +`; -exports[`static.directory option test listing files in folders without index.html using the default static.serveIndex option (true) should show Heyo. because bar has index.html inside it (200): page errors 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the default static.serveIndex option (true) > should list the files inside the assets folder (200) 3`] = ` +[] +`; -exports[`static.directory option test listing files in folders without index.html using the default static.serveIndex option (true) should show Heyo. because bar has index.html inside it (200): response status 1`] = `200`; +exports[`static.directory option > test listing files in folders without index.html using the default static.serveIndex option (true) > should show Heyo. because bar has index.html inside it (200) 1`] = ` +200 +`; -exports[`static.directory option test listing files in folders without index.html using the default static.serveIndex option (true) should show Heyo. because bar has index.html inside it (200): response text 1`] = ` +exports[`static.directory option > test listing files in folders without index.html using the default static.serveIndex option (true) > should show Heyo. because bar has index.html inside it (200) 2`] = ` "Heyo " `; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: false should not list the files inside the assets folder (404): console messages 1`] = ` -[ - "Failed to load resource: the server responded with a status of 404 (Not Found)", -] +exports[`static.directory option > test listing files in folders without index.html using the default static.serveIndex option (true) > should show Heyo. because bar has index.html inside it (200) 3`] = ` +[] `; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: false should not list the files inside the assets folder (404): page errors 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the default static.serveIndex option (true) > should show Heyo. because bar has index.html inside it (200) 4`] = ` +[] +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: false should not list the files inside the assets folder (404): response status 1`] = `404`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: false > should not list the files inside the assets folder (404) 1`] = ` +404 +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: false should not list the files inside the assets folder (404): response text 1`] = ` +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: false > should not list the files inside the assets folder (404) 2`] = ` " @@ -76,74 +90,126 @@ exports[`static.directory option test listing files in folders without index.htm " `; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: false should show Heyo. because bar has index.html inside it (200): console messages 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: false > should not list the files inside the assets folder (404) 3`] = ` +[ + "Failed to load resource: the server responded with a status of 404 (Not Found)", +] +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: false should show Heyo. because bar has index.html inside it (200): page errors 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: false > should not list the files inside the assets folder (404) 4`] = ` +[] +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: false should show Heyo. because bar has index.html inside it (200): response status 1`] = `200`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: false > should show Heyo. because bar has index.html inside it (200) 1`] = ` +200 +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: false should show Heyo. because bar has index.html inside it (200): response text 1`] = ` +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: false > should show Heyo. because bar has index.html inside it (200) 2`] = ` "Heyo " `; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: true should list the files inside the assets folder (200): console messages 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: false > should show Heyo. because bar has index.html inside it (200) 3`] = ` +[] +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: true should list the files inside the assets folder (200): page errors 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: false > should show Heyo. because bar has index.html inside it (200) 4`] = ` +[] +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: true should list the files inside the assets folder (200): response status 1`] = `200`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: true > should list the files inside the assets folder (200) 1`] = ` +200 +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: true should show Heyo. because bar has index.html inside it (200): console messages 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: true > should list the files inside the assets folder (200) 2`] = ` +[] +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: true should show Heyo. because bar has index.html inside it (200): page errors 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: true > should list the files inside the assets folder (200) 3`] = ` +[] +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: true should show Heyo. because bar has index.html inside it (200): response status 1`] = `200`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: true > should show Heyo. because bar has index.html inside it (200) 1`] = ` +200 +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: true should show Heyo. because bar has index.html inside it (200): response text 1`] = ` +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: true > should show Heyo. because bar has index.html inside it (200) 2`] = ` "Heyo " `; -exports[`static.directory option to directory should handle request to index route: console messages 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: true > should show Heyo. because bar has index.html inside it (200) 3`] = ` +[] +`; -exports[`static.directory option to directory should handle request to index route: page errors 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: true > should show Heyo. because bar has index.html inside it (200) 4`] = ` +[] +`; -exports[`static.directory option to directory should handle request to index route: response status 1`] = `200`; +exports[`static.directory option > to directory > should handle request to index route 1`] = ` +200 +`; -exports[`static.directory option to directory should handle request to index route: response text 1`] = ` +exports[`static.directory option > to directory > should handle request to index route 2`] = ` "Heyo. " `; -exports[`static.directory option to directory should handle request to other file: console messages 1`] = `[]`; +exports[`static.directory option > to directory > should handle request to index route 3`] = ` +[] +`; -exports[`static.directory option to directory should handle request to other file: page errors 1`] = `[]`; +exports[`static.directory option > to directory > should handle request to index route 4`] = ` +[] +`; -exports[`static.directory option to directory should handle request to other file: response status 1`] = `200`; +exports[`static.directory option > to directory > should handle request to other file 1`] = ` +200 +`; -exports[`static.directory option to directory should handle request to other file: response text 1`] = ` +exports[`static.directory option > to directory > should handle request to other file 2`] = ` "Other html " `; -exports[`static.directory option to multiple directories should handle request first directory: console messages 1`] = `[]`; +exports[`static.directory option > to directory > should handle request to other file 3`] = ` +[] +`; -exports[`static.directory option to multiple directories should handle request first directory: page errors 1`] = `[]`; +exports[`static.directory option > to directory > should handle request to other file 4`] = ` +[] +`; -exports[`static.directory option to multiple directories should handle request first directory: response status 1`] = `200`; +exports[`static.directory option > to multiple directories > should handle request first directory 1`] = ` +200 +`; -exports[`static.directory option to multiple directories should handle request first directory: response text 1`] = ` +exports[`static.directory option > to multiple directories > should handle request first directory 2`] = ` "Heyo. " `; -exports[`static.directory option to multiple directories should handle request to second directory: console messages 1`] = `[]`; +exports[`static.directory option > to multiple directories > should handle request first directory 3`] = ` +[] +`; -exports[`static.directory option to multiple directories should handle request to second directory: page errors 1`] = `[]`; +exports[`static.directory option > to multiple directories > should handle request first directory 4`] = ` +[] +`; -exports[`static.directory option to multiple directories should handle request to second directory: response status 1`] = `200`; +exports[`static.directory option > to multiple directories > should handle request to second directory 1`] = ` +200 +`; -exports[`static.directory option to multiple directories should handle request to second directory: response text 1`] = ` +exports[`static.directory option > to multiple directories > should handle request to second directory 2`] = ` "Foo! " `; + +exports[`static.directory option > to multiple directories > should handle request to second directory 3`] = ` +[] +`; + +exports[`static.directory option > to multiple directories > should handle request to second directory 4`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/static-public-path.test.js.snap.webpack5 b/test/e2e/__snapshots__/static-public-path.test.js.snap.webpack5 index 687d41d403..3849475a92 100644 --- a/test/e2e/__snapshots__/static-public-path.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/static-public-path.test.js.snap.webpack5 @@ -1,192 +1,286 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`static.publicPath option Content type should handle request to example.txt: console messages 1`] = `[]`; - -exports[`static.publicPath option Content type should handle request to example.txt: page errors 1`] = `[]`; - -exports[`static.publicPath option Content type should handle request to example.txt: response header content-type 1`] = `"text/plain; charset=UTF-8"`; +exports[`static.publicPath option > Content type > should handle request to example.txt 1`] = ` +200 +`; -exports[`static.publicPath option Content type should handle request to example.txt: response status 1`] = `200`; +exports[`static.publicPath option > Content type > should handle request to example.txt 2`] = ` +"text/plain; charset=utf-8" +`; -exports[`static.publicPath option defaults to CWD should handle request to page: console messages 1`] = `[]`; +exports[`static.publicPath option > Content type > should handle request to example.txt 3`] = ` +[] +`; -exports[`static.publicPath option defaults to CWD should handle request to page: page errors 1`] = `[]`; +exports[`static.publicPath option > Content type > should handle request to example.txt 4`] = ` +[] +`; -exports[`static.publicPath option defaults to CWD should handle request to page: response status 1`] = `200`; +exports[`static.publicPath option > defaults to CWD > should handle request to page 1`] = ` +200 +`; -exports[`static.publicPath option defaults to CWD should handle request to page: response text 1`] = ` +exports[`static.publicPath option > defaults to CWD > should handle request to page 2`] = ` "Heyo. " `; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the /foo route of second path: console messages 1`] = `[]`; +exports[`static.publicPath option > defaults to CWD > should handle request to page 3`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the /foo route of second path: page errors 1`] = `[]`; +exports[`static.publicPath option > defaults to CWD > should handle request to page 4`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the /foo route of second path: response status 1`] = `200`; +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the /foo route of second path 1`] = ` +200 +`; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the /foo route of second path: response text 1`] = ` +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the /foo route of second path 2`] = ` "Foo! " `; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the index of first path: console messages 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the /foo route of second path 3`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the index of first path: page errors 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the /foo route of second path 4`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the index of first path: response status 1`] = `200`; +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the index of first path 1`] = ` +200 +`; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the index of first path: response text 1`] = ` +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the index of first path 2`] = ` "Heyo. " `; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the other file of first path: console messages 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the index of first path 3`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the other file of first path: page errors 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the index of first path 4`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the other file of first path: response status 1`] = `200`; +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the other file of first path 1`] = ` +200 +`; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the other file of first path: response text 1`] = ` +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the other file of first path 2`] = ` "Other html " `; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the /foo route of first path: console messages 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the other file of first path 3`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the /foo route of first path: page errors 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the other file of first path 4`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the /foo route of first path: response status 1`] = `200`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the /foo route of first path 1`] = ` +200 +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the /foo route of first path: response text 1`] = ` +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the /foo route of first path 2`] = ` "Foo! " `; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the /foo route of second path: console messages 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the /foo route of first path 3`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the /foo route of second path: page errors 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the /foo route of first path 4`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the /foo route of second path: response status 1`] = `200`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the /foo route of second path 1`] = ` +200 +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the /foo route of second path: response text 1`] = ` +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the /foo route of second path 2`] = ` "Foo! " `; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the index of first path: console messages 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the /foo route of second path 3`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the index of first path: page errors 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the /foo route of second path 4`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the index of first path: response status 1`] = `200`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the index of first path 1`] = ` +200 +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the index of first path: response text 1`] = ` +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the index of first path 2`] = ` "Heyo. " `; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the other file of first path: console messages 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the index of first path 3`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the other file of first path: page errors 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the index of first path 4`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the other file of first path: response status 1`] = `200`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the other file of first path 1`] = ` +200 +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the other file of first path: response text 1`] = ` +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the other file of first path 2`] = ` "Other html " `; -exports[`static.publicPath option should ignore methods other than GET and HEAD should handle GET request: console messages 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the other file of first path 3`] = ` +[] +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should handle GET request: page errors 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the other file of first path 4`] = ` +[] +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should handle GET request: response status 1`] = `200`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should handle GET request 1`] = ` +200 +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should handle HEAD request: console messages 1`] = `[]`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should handle GET request 2`] = ` +[] +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should handle HEAD request: page errors 1`] = `[]`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should handle GET request 3`] = ` +[] +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should handle HEAD request: response status 1`] = `200`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should handle HEAD request 1`] = ` +200 +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle DELETE request: console messages 1`] = ` -[ - "Failed to load resource: the server responded with a status of 404 (Not Found)", -] +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should handle HEAD request 2`] = ` +[] `; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle DELETE request: page errors 1`] = `[]`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should handle HEAD request 3`] = ` +[] +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle DELETE request: response status 1`] = `404`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle DELETE request 1`] = ` +404 +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle PATCH request: console messages 1`] = ` +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle DELETE request 2`] = ` [ "Failed to load resource: the server responded with a status of 404 (Not Found)", ] `; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle PATCH request: page errors 1`] = `[]`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle DELETE request 3`] = ` +[] +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle PATCH request: response status 1`] = `404`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle PATCH request 1`] = ` +404 +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle POST request: console messages 1`] = ` +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle PATCH request 2`] = ` [ "Failed to load resource: the server responded with a status of 404 (Not Found)", ] `; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle POST request: page errors 1`] = `[]`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle PATCH request 3`] = ` +[] +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle POST request: response status 1`] = `404`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle POST request 1`] = ` +404 +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle PUT request: console messages 1`] = ` +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle POST request 2`] = ` [ "Failed to load resource: the server responded with a status of 404 (Not Found)", ] `; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle PUT request: page errors 1`] = `[]`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle POST request 3`] = ` +[] +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle PUT request: response status 1`] = `404`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle PUT request 1`] = ` +404 +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex default (true) should list the files inside the assets folder (200): console messages 1`] = `[]`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle PUT request 2`] = ` +[ + "Failed to load resource: the server responded with a status of 404 (Not Found)", +] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex default (true) should list the files inside the assets folder (200): page errors 1`] = `[]`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle PUT request 3`] = ` +[] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex default (true) should list the files inside the assets folder (200): response status 1`] = `200`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex default (true) > should list the files inside the assets folder (200) 1`] = ` +200 +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex default (true) should show Heyo. because bar has index.html inside it (200): console messages 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex default (true) > should list the files inside the assets folder (200) 2`] = ` +[] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex default (true) should show Heyo. because bar has index.html inside it (200): page errors 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex default (true) > should list the files inside the assets folder (200) 3`] = ` +[] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex default (true) should show Heyo. because bar has index.html inside it (200): response status 1`] = `200`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex default (true) > should show Heyo. because bar has index.html inside it (200) 1`] = ` +200 +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex default (true) should show Heyo. because bar has index.html inside it (200): response text 1`] = ` +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex default (true) > should show Heyo. because bar has index.html inside it (200) 2`] = ` "Heyo " `; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: false should show Heyo. because bar has index.html inside it (200): console messages 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex default (true) > should show Heyo. because bar has index.html inside it (200) 3`] = ` +[] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: false should show Heyo. because bar has index.html inside it (200): page errors 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex default (true) > should show Heyo. because bar has index.html inside it (200) 4`] = ` +[] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: false should show Heyo. because bar has index.html inside it (200): response status 1`] = `200`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: false > should show Heyo. because bar has index.html inside it (200) 1`] = ` +200 +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: false should show Heyo. because bar has index.html inside it (200): response text 1`] = ` +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: false > should show Heyo. because bar has index.html inside it (200) 2`] = ` "Heyo " `; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: false shouldn't list the files inside the assets folder (404): console messages 1`] = ` -[ - "Failed to load resource: the server responded with a status of 404 (Not Found)", -] +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: false > should show Heyo. because bar has index.html inside it (200) 3`] = ` +[] `; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: false shouldn't list the files inside the assets folder (404): page errors 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: false > should show Heyo. because bar has index.html inside it (200) 4`] = ` +[] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: false shouldn't list the files inside the assets folder (404): response status 1`] = `404`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: false > shouldn't list the files inside the assets folder (404) 1`] = ` +404 +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: false shouldn't list the files inside the assets folder (404): response text 1`] = ` +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: false > shouldn't list the files inside the assets folder (404) 2`] = ` " @@ -200,63 +294,109 @@ exports[`static.publicPath option test listing files in folders without index.ht " `; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: true should list the files inside the assets folder (200): console messages 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: false > shouldn't list the files inside the assets folder (404) 3`] = ` +[ + "Failed to load resource: the server responded with a status of 404 (Not Found)", +] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: true should list the files inside the assets folder (200): page errors 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: false > shouldn't list the files inside the assets folder (404) 4`] = ` +[] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: true should list the files inside the assets folder (200): response status 1`] = `200`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: true > should list the files inside the assets folder (200) 1`] = ` +200 +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: true should show Heyo. because bar has index.html inside it (200): console messages 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: true > should list the files inside the assets folder (200) 2`] = ` +[] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: true should show Heyo. because bar has index.html inside it (200): page errors 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: true > should list the files inside the assets folder (200) 3`] = ` +[] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: true should show Heyo. because bar has index.html inside it (200): response status 1`] = `200`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: true > should show Heyo. because bar has index.html inside it (200) 1`] = ` +200 +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: true should show Heyo. because bar has index.html inside it (200): response text 1`] = ` +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: true > should show Heyo. because bar has index.html inside it (200) 2`] = ` "Heyo " `; -exports[`static.publicPath option to directory should handle request to index: console messages 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: true > should show Heyo. because bar has index.html inside it (200) 3`] = ` +[] +`; -exports[`static.publicPath option to directory should handle request to index: page errors 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: true > should show Heyo. because bar has index.html inside it (200) 4`] = ` +[] +`; -exports[`static.publicPath option to directory should handle request to index: response status 1`] = `200`; +exports[`static.publicPath option > to directory > should handle request to index 1`] = ` +200 +`; -exports[`static.publicPath option to directory should handle request to index: response text 1`] = ` +exports[`static.publicPath option > to directory > should handle request to index 2`] = ` "Heyo. " `; -exports[`static.publicPath option to directory should handle request to other file: console messages 1`] = `[]`; +exports[`static.publicPath option > to directory > should handle request to index 3`] = ` +[] +`; -exports[`static.publicPath option to directory should handle request to other file: page errors 1`] = `[]`; +exports[`static.publicPath option > to directory > should handle request to index 4`] = ` +[] +`; -exports[`static.publicPath option to directory should handle request to other file: response status 1`] = `200`; +exports[`static.publicPath option > to directory > should handle request to other file 1`] = ` +200 +`; -exports[`static.publicPath option to directory should handle request to other file: response text 1`] = ` +exports[`static.publicPath option > to directory > should handle request to other file 2`] = ` "Other html " `; -exports[`static.publicPath option to multiple directories should handle request to first directory: console messages 1`] = `[]`; +exports[`static.publicPath option > to directory > should handle request to other file 3`] = ` +[] +`; -exports[`static.publicPath option to multiple directories should handle request to first directory: page errors 1`] = `[]`; +exports[`static.publicPath option > to directory > should handle request to other file 4`] = ` +[] +`; -exports[`static.publicPath option to multiple directories should handle request to first directory: response status 1`] = `200`; +exports[`static.publicPath option > to multiple directories > should handle request to first directory 1`] = ` +200 +`; -exports[`static.publicPath option to multiple directories should handle request to first directory: response text 1`] = ` +exports[`static.publicPath option > to multiple directories > should handle request to first directory 2`] = ` "Heyo. " `; -exports[`static.publicPath option to multiple directories should handle request to second directory: console messages 1`] = `[]`; +exports[`static.publicPath option > to multiple directories > should handle request to first directory 3`] = ` +[] +`; -exports[`static.publicPath option to multiple directories should handle request to second directory: page errors 1`] = `[]`; +exports[`static.publicPath option > to multiple directories > should handle request to first directory 4`] = ` +[] +`; -exports[`static.publicPath option to multiple directories should handle request to second directory: response status 1`] = `200`; +exports[`static.publicPath option > to multiple directories > should handle request to second directory 1`] = ` +200 +`; -exports[`static.publicPath option to multiple directories should handle request to second directory: response text 1`] = ` +exports[`static.publicPath option > to multiple directories > should handle request to second directory 2`] = ` "Foo! " `; + +exports[`static.publicPath option > to multiple directories > should handle request to second directory 3`] = ` +[] +`; + +exports[`static.publicPath option > to multiple directories > should handle request to second directory 4`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/stats.test.js.snap.webpack5 b/test/e2e/__snapshots__/stats.test.js.snap.webpack5 index c36c1f21f7..b055692428 100644 --- a/test/e2e/__snapshots__/stats.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/stats.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`stats should work and respect the "ignoreWarnings" option 1`] = ` +exports[`stats > should work and respect the "ignoreWarnings" option 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -8,7 +6,7 @@ exports[`stats should work and respect the "ignoreWarnings" option 1`] = ` ] `; -exports[`stats should work using "{ assets: false }" value for the "stats" option 1`] = ` +exports[`stats > should work using "errors-only" value for the "stats" option 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -16,7 +14,7 @@ exports[`stats should work using "{ assets: false }" value for the "stats" optio ] `; -exports[`stats should work using "{ assets: false }" value for the "stats" option 2`] = ` +exports[`stats > should work using "false" value for the "stats" option 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -24,7 +22,7 @@ exports[`stats should work using "{ assets: false }" value for the "stats" optio ] `; -exports[`stats should work using "{ warningsFilter: 'test' }" value for the "stats" option 1`] = ` +exports[`stats > should work using "undefined" value for the "stats" option 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -32,7 +30,7 @@ exports[`stats should work using "{ warningsFilter: 'test' }" value for the "sta ] `; -exports[`stats should work using "{}" value for the "stats" option 1`] = ` +exports[`stats > should work using "{ assets: false }" value for the "stats" option 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -40,7 +38,7 @@ exports[`stats should work using "{}" value for the "stats" option 1`] = ` ] `; -exports[`stats should work using "errors-only" value for the "stats" option 1`] = ` +exports[`stats > should work using "{ assets: false }" value for the "stats" option 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -48,7 +46,7 @@ exports[`stats should work using "errors-only" value for the "stats" option 1`] ] `; -exports[`stats should work using "false" value for the "stats" option 1`] = ` +exports[`stats > should work using "{ warningsFilter: 'test' }" value for the "stats" option 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -56,7 +54,7 @@ exports[`stats should work using "false" value for the "stats" option 1`] = ` ] `; -exports[`stats should work using "undefined" value for the "stats" option 1`] = ` +exports[`stats > should work using "{}" value for the "stats" option 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -64,7 +62,7 @@ exports[`stats should work using "undefined" value for the "stats" option 1`] = ] `; -exports[`stats should work when "stats" is not specified 1`] = ` +exports[`stats > should work when "stats" is not specified 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", diff --git a/test/e2e/__snapshots__/target.test.js.snap.webpack5 b/test/e2e/__snapshots__/target.test.js.snap.webpack5 index fd2295ff09..62f2319d3d 100644 --- a/test/e2e/__snapshots__/target.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/target.test.js.snap.webpack5 @@ -1,8 +1,8 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`target should work using "async-node" target: console messages 1`] = `[]`; +exports[`target > should work using "async-node" target 1`] = ` +[] +`; -exports[`target should work using "browserslist:defaults" target: console messages 1`] = ` +exports[`target > should work using "browserslist:defaults" target 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -10,39 +10,57 @@ exports[`target should work using "browserslist:defaults" target: console messag ] `; -exports[`target should work using "browserslist:defaults" target: page errors 1`] = `[]`; +exports[`target > should work using "browserslist:defaults" target 2`] = ` +[] +`; -exports[`target should work using "electron-main" target: console messages 1`] = `[]`; +exports[`target > should work using "electron-main" target 1`] = ` +[] +`; -exports[`target should work using "electron-preload" target: console messages 1`] = `[]`; +exports[`target > should work using "electron-preload" target 1`] = ` +[] +`; -exports[`target should work using "electron-renderer" target: console messages 1`] = `[]`; +exports[`target > should work using "electron-renderer" target 1`] = ` +[] +`; -exports[`target should work using "es5" target: console messages 1`] = ` +exports[`target > should work using "es5" target 1`] = ` [ "[HMR] Waiting for update signal from WDS...", "Hey.", ] `; -exports[`target should work using "es5" target: page errors 1`] = `[]`; +exports[`target > should work using "es5" target 2`] = ` +[] +`; -exports[`target should work using "false" target: console messages 1`] = ` +exports[`target > should work using "false" target 1`] = ` [ "[HMR] Waiting for update signal from WDS...", "Hey.", ] `; -exports[`target should work using "false" target: page errors 1`] = `[]`; +exports[`target > should work using "false" target 2`] = ` +[] +`; -exports[`target should work using "node" target: console messages 1`] = `[]`; +exports[`target > should work using "node" target 1`] = ` +[] +`; -exports[`target should work using "node-webkit" target: console messages 1`] = `[]`; +exports[`target > should work using "node-webkit" target 1`] = ` +[] +`; -exports[`target should work using "nwjs" target: console messages 1`] = `[]`; +exports[`target > should work using "nwjs" target 1`] = ` +[] +`; -exports[`target should work using "web" target: console messages 1`] = ` +exports[`target > should work using "web" target 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -50,9 +68,11 @@ exports[`target should work using "web" target: console messages 1`] = ` ] `; -exports[`target should work using "web" target: page errors 1`] = `[]`; +exports[`target > should work using "web" target 2`] = ` +[] +`; -exports[`target should work using "web,es5" target: console messages 1`] = ` +exports[`target > should work using "web,es5" target 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -60,9 +80,11 @@ exports[`target should work using "web,es5" target: console messages 1`] = ` ] `; -exports[`target should work using "web,es5" target: page errors 1`] = `[]`; +exports[`target > should work using "web,es5" target 2`] = ` +[] +`; -exports[`target should work using "webworker" target: console messages 1`] = ` +exports[`target > should work using "webworker" target 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -70,10 +92,14 @@ exports[`target should work using "webworker" target: console messages 1`] = ` ] `; -exports[`target should work using "webworker" target: page errors 1`] = `[]`; +exports[`target > should work using "webworker" target 2`] = ` +[] +`; -exports[`target should work using multi compiler mode with \`web\` and \`webworker\` targets with \`devServer: false\`: console messages 1`] = ` +exports[`target > should work using multi compiler mode with \`web\` and \`webworker\` targets 1`] = ` [ + "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", + "[HMR] Waiting for update signal from WDS...", "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", "Worker said: I'm working before postMessage", @@ -81,12 +107,12 @@ exports[`target should work using multi compiler mode with \`web\` and \`webwork ] `; -exports[`target should work using multi compiler mode with \`web\` and \`webworker\` targets with \`devServer: false\`: page errors 1`] = `[]`; +exports[`target > should work using multi compiler mode with \`web\` and \`webworker\` targets 2`] = ` +[] +`; -exports[`target should work using multi compiler mode with \`web\` and \`webworker\` targets: console messages 1`] = ` +exports[`target > should work using multi compiler mode with \`web\` and \`webworker\` targets with \`devServer: false\` 1`] = ` [ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", "Worker said: I'm working before postMessage", @@ -94,4 +120,6 @@ exports[`target should work using multi compiler mode with \`web\` and \`webwork ] `; -exports[`target should work using multi compiler mode with \`web\` and \`webworker\` targets: page errors 1`] = `[]`; +exports[`target > should work using multi compiler mode with \`web\` and \`webworker\` targets with \`devServer: false\` 2`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/watch-files.test.js.snap.webpack5 b/test/e2e/__snapshots__/watch-files.test.js.snap.webpack5 index cd385cfd38..523a975216 100644 --- a/test/e2e/__snapshots__/watch-files.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/watch-files.test.js.snap.webpack5 @@ -1,311 +1,706 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`watchFiles option > should not crash if file doesn't exist > should reload when file content is changed 1`] = ` +200 +`; + +exports[`watchFiles option > should not crash if file doesn't exist > should reload when file content is changed 2`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option > should not crash if file doesn't exist > should reload when file content is changed 3`] = ` +[] +`; -exports[`watchFiles option should not crash if file doesn't exist should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with array config > should reload when file content is changed 1`] = ` +200 +`; + +exports[`watchFiles option > should work with array config > should reload when file content is changed 2`] = ` [ "Hey.", ] `; -exports[`watchFiles option should not crash if file doesn't exist should reload when file content is changed: page errors 1`] = `[]`; +exports[`watchFiles option > should work with array config > should reload when file content is changed 3`] = ` +[] +`; + +exports[`watchFiles option > should work with array of globs > should reload when file content is changed 1`] = ` +200 +`; + +exports[`watchFiles option > should work with array of globs > should reload when file content is changed 2`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option > should work with array of globs > should reload when file content is changed 3`] = ` +[] +`; + +exports[`watchFiles option > should work with directory and ignored option to filter files > should not reload when a non-matching file is changed 1`] = ` +200 +`; + +exports[`watchFiles option > should work with directory and ignored option to filter files > should reload when file content is changed 1`] = ` +200 +`; + +exports[`watchFiles option > should work with directory and ignored option to filter files > should reload when file content is changed 2`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option > should work with directory and ignored option to filter files > should reload when file content is changed 3`] = ` +[] +`; + +exports[`watchFiles option > should work with ignored option using glob array > should not reload when an ignored glob file is changed 1`] = ` +200 +`; -exports[`watchFiles option should not crash if file doesn't exist should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with ignored option using glob array > should reload when file content is changed 1`] = ` +200 +`; -exports[`watchFiles option should work with array config should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with ignored option using glob array > should reload when file content is changed 2`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with array config should reload when file content is changed: page errors 1`] = `[]`; +exports[`watchFiles option > should work with ignored option using glob array > should reload when file content is changed 3`] = ` +[] +`; + +exports[`watchFiles option > should work with ignored option using glob string > should not reload when an ignored glob file is changed 1`] = ` +200 +`; -exports[`watchFiles option should work with array config should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with ignored option using glob string > should reload when file content is changed 1`] = ` +200 +`; -exports[`watchFiles option should work with object with multiple paths should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with ignored option using glob string > should reload when file content is changed 2`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with object with multiple paths should reload when file content is changed: page errors 1`] = `[]`; +exports[`watchFiles option > should work with ignored option using glob string > should reload when file content is changed 3`] = ` +[] +`; -exports[`watchFiles option should work with object with multiple paths should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with object with multiple paths > should reload when file content is changed 1`] = ` +200 +`; -exports[`watchFiles option should work with object with single path should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with object with multiple paths > should reload when file content is changed 2`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with object with single path should reload when file content is changed: page errors 1`] = `[]`; +exports[`watchFiles option > should work with object with multiple paths > should reload when file content is changed 3`] = ` +[] +`; + +exports[`watchFiles option > should work with object with single path > should reload when file content is changed 1`] = ` +200 +`; -exports[`watchFiles option should work with object with single path should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with object with single path > should reload when file content is changed 2`] = ` +[ + "Hey.", +] +`; -exports[`watchFiles option should work with options {"interval":400,"poll":200} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with object with single path > should reload when file content is changed 3`] = ` +[] +`; + +exports[`watchFiles option > should work with options > {"interval":400,"poll":200} > should reload when file content is changed 1`] = ` { "alwaysStat": true, "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, + "ignored": [], "interval": 400, "persistent": true, "usePolling": true, } `; -exports[`watchFiles option should work with options {"interval":400,"poll":200} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {"interval":400,"poll":200} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {"interval":400,"poll":200} > should reload when file content is changed 3`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {"interval":400,"poll":200} should reload when file content is changed: page errors 1`] = `[]`; - -exports[`watchFiles option should work with options {"interval":400,"poll":200} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {"interval":400,"poll":200} > should reload when file content is changed 4`] = ` +[] +`; -exports[`watchFiles option should work with options {"poll":200} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with options > {"poll":200} > should reload when file content is changed 1`] = ` { "alwaysStat": true, "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, + "ignored": [], "interval": 200, "persistent": true, "usePolling": true, } `; -exports[`watchFiles option should work with options {"poll":200} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {"poll":200} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {"poll":200} > should reload when file content is changed 3`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {"poll":200} should reload when file content is changed: page errors 1`] = `[]`; - -exports[`watchFiles option should work with options {"poll":200} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {"poll":200} > should reload when file content is changed 4`] = ` +[] +`; -exports[`watchFiles option should work with options {"poll":true} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with options > {"poll":true} > should reload when file content is changed 1`] = ` { "alwaysStat": true, "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, + "ignored": [], + "interval": 100, "persistent": true, "usePolling": true, } `; -exports[`watchFiles option should work with options {"poll":true} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {"poll":true} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {"poll":true} > should reload when file content is changed 3`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {"poll":true} should reload when file content is changed: page errors 1`] = `[]`; - -exports[`watchFiles option should work with options {"poll":true} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {"poll":true} > should reload when file content is changed 4`] = ` +[] +`; -exports[`watchFiles option should work with options {"usePolling":false,"interval":200,"poll":400} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":false,"interval":200,"poll":400} > should reload when file content is changed 1`] = ` { "alwaysStat": true, "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, + "ignored": [], "interval": 200, "persistent": true, - "usePolling": false, + "usePolling": true, } `; -exports[`watchFiles option should work with options {"usePolling":false,"interval":200,"poll":400} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":false,"interval":200,"poll":400} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {"usePolling":false,"interval":200,"poll":400} > should reload when file content is changed 3`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {"usePolling":false,"interval":200,"poll":400} should reload when file content is changed: page errors 1`] = `[]`; - -exports[`watchFiles option should work with options {"usePolling":false,"interval":200,"poll":400} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {"usePolling":false,"interval":200,"poll":400} > should reload when file content is changed 4`] = ` +[] +`; -exports[`watchFiles option should work with options {"usePolling":false,"poll":200} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":false,"poll":200} > should reload when file content is changed 1`] = ` { "alwaysStat": true, "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, + "ignored": [], "interval": 200, "persistent": true, - "usePolling": false, + "usePolling": true, } `; -exports[`watchFiles option should work with options {"usePolling":false,"poll":200} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":false,"poll":200} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {"usePolling":false,"poll":200} > should reload when file content is changed 3`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {"usePolling":false,"poll":200} should reload when file content is changed: page errors 1`] = `[]`; - -exports[`watchFiles option should work with options {"usePolling":false,"poll":200} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {"usePolling":false,"poll":200} > should reload when file content is changed 4`] = ` +[] +`; -exports[`watchFiles option should work with options {"usePolling":false,"poll":true} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":false,"poll":true} > should reload when file content is changed 1`] = ` { "alwaysStat": true, "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, + "ignored": [], + "interval": 100, "persistent": true, - "usePolling": false, + "usePolling": true, } `; -exports[`watchFiles option should work with options {"usePolling":false,"poll":true} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":false,"poll":true} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {"usePolling":false,"poll":true} > should reload when file content is changed 3`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {"usePolling":false,"poll":true} should reload when file content is changed: page errors 1`] = `[]`; - -exports[`watchFiles option should work with options {"usePolling":false,"poll":true} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {"usePolling":false,"poll":true} > should reload when file content is changed 4`] = ` +[] +`; -exports[`watchFiles option should work with options {"usePolling":false} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":false} > should reload when file content is changed 1`] = ` { "alwaysStat": true, "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, + "ignored": [], + "interval": 100, "persistent": true, - "usePolling": false, + "usePolling": true, } `; -exports[`watchFiles option should work with options {"usePolling":false} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":false} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {"usePolling":false} > should reload when file content is changed 3`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {"usePolling":false} should reload when file content is changed: page errors 1`] = `[]`; +exports[`watchFiles option > should work with options > {"usePolling":false} > should reload when file content is changed 4`] = ` +[] +`; + +exports[`watchFiles option > should work with options > {"usePolling":true,"interval":200,"poll":400} > should reload when file content is changed 1`] = ` +{ + "alwaysStat": true, + "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": [], + "interval": 200, + "persistent": true, + "usePolling": true, +} +`; + +exports[`watchFiles option > should work with options > {"usePolling":true,"interval":200,"poll":400} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {"usePolling":true,"interval":200,"poll":400} > should reload when file content is changed 3`] = ` +[ + "Hey.", +] +`; -exports[`watchFiles option should work with options {"usePolling":false} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {"usePolling":true,"interval":200,"poll":400} > should reload when file content is changed 4`] = ` +[] +`; -exports[`watchFiles option should work with options {"usePolling":true,"interval":200,"poll":400} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":true,"poll":200} > should reload when file content is changed 1`] = ` { "alwaysStat": true, "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, + "ignored": [], "interval": 200, "persistent": true, "usePolling": true, } `; -exports[`watchFiles option should work with options {"usePolling":true,"interval":200,"poll":400} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":true,"poll":200} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {"usePolling":true,"poll":200} > should reload when file content is changed 3`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {"usePolling":true,"interval":200,"poll":400} should reload when file content is changed: page errors 1`] = `[]`; +exports[`watchFiles option > should work with options > {"usePolling":true,"poll":200} > should reload when file content is changed 4`] = ` +[] +`; -exports[`watchFiles option should work with options {"usePolling":true,"interval":200,"poll":400} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {"usePolling":true} > should reload when file content is changed 1`] = ` +{ + "alwaysStat": true, + "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": [], + "interval": 100, + "persistent": true, + "usePolling": true, +} +`; -exports[`watchFiles option should work with options {"usePolling":true,"poll":200} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":true} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {"usePolling":true} > should reload when file content is changed 3`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option > should work with options > {"usePolling":true} > should reload when file content is changed 4`] = ` +[] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 1`] = ` { "alwaysStat": true, "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": 200, + "ignored": [], + "interval": 100, + "persistent": true, + "usePolling": true, +} +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 10`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 11`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 12`] = ` +[] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 13`] = ` +{ + "alwaysStat": true, + "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, + "followSymlinks": undefined, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": [], + "interval": 100, + "persistent": true, + "usePolling": true, +} +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 14`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 15`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 16`] = ` +[] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 17`] = ` +{ + "alwaysStat": true, + "atomic": true, + "awaitWriteFinish": false, + "binaryInterval": 300, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": [], + "interval": 100, "persistent": true, "usePolling": true, } `; -exports[`watchFiles option should work with options {"usePolling":true,"poll":200} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 18`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 19`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {"usePolling":true,"poll":200} should reload when file content is changed: page errors 1`] = `[]`; +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 2`] = ` +200 +`; -exports[`watchFiles option should work with options {"usePolling":true,"poll":200} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 20`] = ` +[] +`; -exports[`watchFiles option should work with options {"usePolling":true} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 21`] = ` +{ + "alwaysStat": undefined, + "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": [], + "interval": 100, + "persistent": true, + "usePolling": true, +} +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 22`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 23`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 24`] = ` +[] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 25`] = ` { "alwaysStat": true, "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, + "depth": undefined, "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, + "ignored": [], + "interval": 100, + "persistent": true, + "usePolling": true, +} +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 26`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 27`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 28`] = ` +[] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 29`] = ` +{ + "alwaysStat": true, + "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": undefined, + "ignored": [], + "interval": 100, "persistent": true, "usePolling": true, } `; -exports[`watchFiles option should work with options {"usePolling":true} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 3`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 30`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 31`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {"usePolling":true} should reload when file content is changed: page errors 1`] = `[]`; +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 32`] = ` +[] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 4`] = ` +[] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 5`] = ` +{ + "alwaysStat": true, + "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": [], + "interval": 100, + "persistent": true, + "usePolling": true, +} +`; -exports[`watchFiles option should work with options {"usePolling":true} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 6`] = ` +200 +`; -exports[`watchFiles option should work with string and glob should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 7`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with string and glob should reload when file content is changed: page errors 1`] = `[]`; +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 8`] = ` +[] +`; -exports[`watchFiles option should work with string and glob should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 9`] = ` +{ + "alwaysStat": true, + "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": [], + "interval": 100, + "persistent": undefined, + "usePolling": true, +} +`; + +exports[`watchFiles option > should work with string and glob > should reload when file content is changed 1`] = ` +200 +`; -exports[`watchFiles option should work with string and path to directory should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with string and glob > should reload when file content is changed 2`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with string and path to directory should reload when file content is changed: page errors 1`] = `[]`; +exports[`watchFiles option > should work with string and glob > should reload when file content is changed 3`] = ` +[] +`; -exports[`watchFiles option should work with string and path to directory should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with string and path to directory > should reload when file content is changed 1`] = ` +200 +`; -exports[`watchFiles option should work with string and path to file should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with string and path to directory > should reload when file content is changed 2`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with string and path to file should reload when file content is changed: page errors 1`] = `[]`; +exports[`watchFiles option > should work with string and path to directory > should reload when file content is changed 3`] = ` +[] +`; -exports[`watchFiles option should work with string and path to file should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with string and path to file > should reload when file content is changed 1`] = ` +200 +`; + +exports[`watchFiles option > should work with string and path to file > should reload when file content is changed 2`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option > should work with string and path to file > should reload when file content is changed 3`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/web-socket-communication.test.js.snap.webpack5 b/test/e2e/__snapshots__/web-socket-communication.test.js.snap.webpack5 index 267eb3545e..de28937f66 100644 --- a/test/e2e/__snapshots__/web-socket-communication.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/web-socket-communication.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`web socket communication should work and close web socket client connection when web socket server closed ("sockjs"): console messages 1`] = ` +exports[`web socket communication > should work and close web socket client connection when web socket server closed ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -10,21 +8,11 @@ exports[`web socket communication should work and close web socket client connec ] `; -exports[`web socket communication should work and close web socket client connection when web socket server closed ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket communication should work and close web socket client connection when web socket server closed ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - "[webpack-dev-server] Disconnected!", - "[webpack-dev-server] Trying to reconnect...", -] +exports[`web socket communication > should work and close web socket client connection when web socket server closed ("ws") 2`] = ` +[] `; -exports[`web socket communication should work and close web socket client connection when web socket server closed ("ws"): page errors 1`] = `[]`; - -exports[`web socket communication should work and reconnect when the connection is lost ("sockjs"): console messages 1`] = ` +exports[`web socket communication > should work and reconnect when the connection is lost ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -42,29 +30,11 @@ exports[`web socket communication should work and reconnect when the connection ] `; -exports[`web socket communication should work and reconnect when the connection is lost ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket communication should work and reconnect when the connection is lost ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - "[webpack-dev-server] Disconnected!", - "[webpack-dev-server] Trying to reconnect...", - "[webpack-dev-server] App hot update...", - "[HMR] Checking for updates on the server...", - "Failed to load resource: the server responded with a status of 404 (Not Found)", - "[HMR] Cannot find update. Need to do a full reload!", - "[HMR] (Probably because of restarting the webpack-dev-server)", - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket communication > should work and reconnect when the connection is lost ("ws") 2`] = ` +[] `; -exports[`web socket communication should work and reconnect when the connection is lost ("ws"): page errors 1`] = `[]`; - -exports[`web socket communication should work and terminate client that is not alive ("sockjs"): console messages 1`] = ` +exports[`web socket communication > should work and terminate client that is not alive ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -72,14 +42,6 @@ exports[`web socket communication should work and terminate client that is not a ] `; -exports[`web socket communication should work and terminate client that is not alive ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket communication should work and terminate client that is not alive ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket communication > should work and terminate client that is not alive ("ws") 2`] = ` +[] `; - -exports[`web socket communication should work and terminate client that is not alive ("ws"): page errors 1`] = `[]`; diff --git a/test/e2e/__snapshots__/web-socket-server-url.test.js.snap.webpack5 b/test/e2e/__snapshots__/web-socket-server-url.test.js.snap.webpack5 index 2640f84902..64c7eaadb1 100644 --- a/test/e2e/__snapshots__/web-socket-server-url.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/web-socket-server-url.test.js.snap.webpack5 @@ -1,18 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`web socket server URL should not work and output disconnect wrong web socket URL ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - "Failed to load resource: net::ERR_NAME_NOT_RESOLVED", - "[webpack-dev-server] Disconnected!", -] -`; - -exports[`web socket server URL should not work and output disconnect wrong web socket URL ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should not work and output disconnect wrong web socket URL ("ws"): console messages 1`] = ` +exports[`web socket server URL > should not work and output disconnect wrong web socket URL ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -23,33 +9,23 @@ exports[`web socket server URL should not work and output disconnect wrong web s ] `; -exports[`web socket server URL should not work and output disconnect wrong web socket URL ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work and throw an error on invalid web socket URL ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", -] +exports[`web socket server URL > should not work and output disconnect wrong web socket URL ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work and throw an error on invalid web socket URL ("sockjs"): page errors 1`] = ` -[ - "The URL's scheme must be either 'http:' or 'https:'. 'unknown:' is not allowed.", -] -`; - -exports[`web socket server URL should work and throw an error on invalid web socket URL ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work and throw an error on invalid web socket URL ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", ] `; -exports[`web socket server URL should work and throw an error on invalid web socket URL ("ws"): page errors 1`] = ` +exports[`web socket server URL > should work and throw an error on invalid web socket URL ("ws") 2`] = ` [ "Failed to construct 'WebSocket': The URL's scheme must be either 'http', 'https', 'ws', or 'wss'. 'unknown' is not allowed.", ] `; -exports[`web socket server URL should work behind proxy, when hostnames are different and ports are different ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work behind proxy, when hostnames are different and ports are different ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -57,19 +33,11 @@ exports[`web socket server URL should work behind proxy, when hostnames are diff ] `; -exports[`web socket server URL should work behind proxy, when hostnames are different and ports are different ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work behind proxy, when hostnames are different and ports are different ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work behind proxy, when hostnames are different and ports are different ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work behind proxy, when hostnames are different and ports are different ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work behind proxy, when hostnames are different and ports are same ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work behind proxy, when hostnames are different and ports are same ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -77,19 +45,11 @@ exports[`web socket server URL should work behind proxy, when hostnames are diff ] `; -exports[`web socket server URL should work behind proxy, when hostnames are different and ports are same ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work behind proxy, when hostnames are different and ports are same ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work behind proxy, when hostnames are different and ports are same ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work behind proxy, when hostnames are different and ports are same ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work behind proxy, when hostnames are same and ports are different ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work behind proxy, when hostnames are same and ports are different ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -97,19 +57,11 @@ exports[`web socket server URL should work behind proxy, when hostnames are same ] `; -exports[`web socket server URL should work behind proxy, when hostnames are same and ports are different ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work behind proxy, when hostnames are same and ports are different ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work behind proxy, when hostnames are same and ports are different ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work behind proxy, when hostnames are same and ports are different ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work behind proxy, when the "host" option is "local-ip" and the "port" option is "auto" ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work behind proxy, when the "host" option is "local-ip" and the "port" option is "auto" ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -117,19 +69,11 @@ exports[`web socket server URL should work behind proxy, when the "host" option ] `; -exports[`web socket server URL should work behind proxy, when the "host" option is "local-ip" and the "port" option is "auto" ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work behind proxy, when the "host" option is "local-ip" and the "port" option is "auto" ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work behind proxy, when the "host" option is "local-ip" and the "port" option is "auto" ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work behind proxy, when the "host" option is "local-ip" and the "port" option is "auto" ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work when "host" option is "local-ip" ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work when "host" option is "local-ip" ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -137,19 +81,11 @@ exports[`web socket server URL should work when "host" option is "local-ip" ("so ] `; -exports[`web socket server URL should work when "host" option is "local-ip" ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work when "host" option is "local-ip" ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work when "host" option is "local-ip" ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work when "host" option is "local-ip" ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work when "host" option is "local-ipv4" ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work when "host" option is "local-ipv4" ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -157,19 +93,11 @@ exports[`web socket server URL should work when "host" option is "local-ipv4" (" ] `; -exports[`web socket server URL should work when "host" option is "local-ipv4" ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work when "host" option is "local-ipv4" ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work when "host" option is "local-ipv4" ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work when "host" option is "local-ipv4" ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work when "host" option is IPv4 ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work when "host" option is IPv4 ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -177,19 +105,11 @@ exports[`web socket server URL should work when "host" option is IPv4 ("sockjs") ] `; -exports[`web socket server URL should work when "host" option is IPv4 ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work when "host" option is IPv4 ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work when "host" option is IPv4 ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work when "host" option is IPv4 ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work when "port" option is "auto" ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work when "port" option is "auto" ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -197,19 +117,11 @@ exports[`web socket server URL should work when "port" option is "auto" ("sockjs ] `; -exports[`web socket server URL should work when "port" option is "auto" ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work when "port" option is "auto" ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work when "port" option is "auto" ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work when "port" option is "auto" ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with "client.webSocketURL.*" options ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with "client.webSocketURL.*" options ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -217,19 +129,11 @@ exports[`web socket server URL should work with "client.webSocketURL.*" options ] `; -exports[`web socket server URL should work with "client.webSocketURL.*" options ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with "client.webSocketURL.*" options ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with "client.webSocketURL.*" options ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with "client.webSocketURL.*" options ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with "client.webSocketURL.port" and "webSocketServer.options.port" options as string ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with "client.webSocketURL.port" and "webSocketServer.options.port" options as string ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -237,19 +141,11 @@ exports[`web socket server URL should work with "client.webSocketURL.port" and " ] `; -exports[`web socket server URL should work with "client.webSocketURL.port" and "webSocketServer.options.port" options as string ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with "client.webSocketURL.port" and "webSocketServer.options.port" options as string ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with "client.webSocketURL.port" and "webSocketServer.options.port" options as string ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with "client.webSocketURL.port" and "webSocketServer.options.port" options as string ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with "server: 'https'" option ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with "server: 'https'" option ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -257,19 +153,11 @@ exports[`web socket server URL should work with "server: 'https'" option ("sockj ] `; -exports[`web socket server URL should work with "server: 'https'" option ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with "server: 'https'" option ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with "server: 'https'" option ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with "server: 'https'" option ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with default "/ws" value of the "client.webSocketURL.pathname" option ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with default "/ws" value of the "client.webSocketURL.pathname" option ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -277,19 +165,11 @@ exports[`web socket server URL should work with default "/ws" value of the "clie ] `; -exports[`web socket server URL should work with default "/ws" value of the "client.webSocketURL.pathname" option ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with default "/ws" value of the "client.webSocketURL.pathname" option ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with default "/ws" value of the "client.webSocketURL.pathname" option ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with default "/ws" value of the "client.webSocketURL.pathname" option ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL" option as "string" ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL" option as "string" ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -297,19 +177,11 @@ exports[`web socket server URL should work with the "client.webSocketURL" option ] `; -exports[`web socket server URL should work with the "client.webSocketURL" option as "string" ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL" option as "string" ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the "client.webSocketURL" option as "string" ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with the "client.webSocketURL" option as "string" ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.host" option ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.host" option ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -317,19 +189,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.host" o ] `; -exports[`web socket server URL should work with the "client.webSocketURL.host" option ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.host" option ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the "client.webSocketURL.host" option ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with the "client.webSocketURL.host" option ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.host" option using "0.0.0.0" value ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.host" option using "0.0.0.0" value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -337,19 +201,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.host" o ] `; -exports[`web socket server URL should work with the "client.webSocketURL.host" option using "0.0.0.0" value ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.host" option using "0.0.0.0" value ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the "client.webSocketURL.host" option using "0.0.0.0" value ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with the "client.webSocketURL.host" option using "0.0.0.0" value ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.password" option ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.password" option ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -357,19 +213,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.passwor ] `; -exports[`web socket server URL should work with the "client.webSocketURL.password" option ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.password" option ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the "client.webSocketURL.password" option ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with the "client.webSocketURL.password" option ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -377,19 +225,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.pathnam ] `; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option ("ws") 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -397,19 +237,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.pathnam ] `; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option ("ws") 4`] = ` +[] `; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending with slash ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -417,19 +249,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.pathnam ] `; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending with slash ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending with slash ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending with slash ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending without slash ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending with slash ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -437,19 +261,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.pathnam ] `; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending without slash ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending without slash ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending with slash ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending without slash ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" using empty value ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending without slash ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -457,19 +273,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.pathnam ] `; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" using empty value ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" using empty value ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending without slash ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" using empty value ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "prefix" for compatibility with "sockjs" ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" using empty value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -477,19 +285,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.pathnam ] `; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "prefix" for compatibility with "sockjs" ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "prefix" for compatibility with "sockjs" ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" using empty value ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "prefix" for compatibility with "sockjs" ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.port" option ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.port" option ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -497,19 +297,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.port" o ] `; -exports[`web socket server URL should work with the "client.webSocketURL.port" option ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.port" option ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the "client.webSocketURL.port" option ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with the "client.webSocketURL.port" option ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.port" option as string ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.port" option as string ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -517,19 +309,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.port" o ] `; -exports[`web socket server URL should work with the "client.webSocketURL.port" option as string ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.port" option as string ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the "client.webSocketURL.port" option as string ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with the "client.webSocketURL.port" option as string ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.port" option using "0" value ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.port" option using "0" value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -537,19 +321,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.port" o ] `; -exports[`web socket server URL should work with the "client.webSocketURL.port" option using "0" value ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.port" option using "0" value ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the "client.webSocketURL.port" option using "0" value ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with the "client.webSocketURL.port" option using "0" value ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.protocol" option ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -557,19 +333,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.protoco ] `; -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the "client.webSocketURL.protocol" option ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option using "auto:" value ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.protocol" option using "auto:" value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -577,19 +345,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.protoco ] `; -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option using "auto:" value ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option using "auto:" value ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the "client.webSocketURL.protocol" option using "auto:" value ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option using "auto:" value ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option using "http:" value and convert to "ws:" ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.protocol" option using "http:" value and convert to "ws:" ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -597,19 +357,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.protoco ] `; -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option using "http:" value and convert to "ws:" ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option using "http:" value and convert to "ws:" ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the "client.webSocketURL.protocol" option using "http:" value and convert to "ws:" ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option using "http:" value and convert to "ws:" ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.username" and "client.webSocketURL.password" option ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.username" and "client.webSocketURL.password" option ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -617,19 +369,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.usernam ] `; -exports[`web socket server URL should work with the "client.webSocketURL.username" and "client.webSocketURL.password" option ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.username" and "client.webSocketURL.password" option ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the "client.webSocketURL.username" and "client.webSocketURL.password" option ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with the "client.webSocketURL.username" and "client.webSocketURL.password" option ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.username" option ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.username" option ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -637,19 +381,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.usernam ] `; -exports[`web socket server URL should work with the "client.webSocketURL.username" option ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.username" option ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the "client.webSocketURL.username" option ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with the "client.webSocketURL.username" option ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the custom web socket server "path" ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the custom web socket server "path" ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -657,19 +393,11 @@ exports[`web socket server URL should work with the custom web socket server "pa ] `; -exports[`web socket server URL should work with the custom web socket server "path" ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the custom web socket server "path" ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the custom web socket server "path" ("ws") 2`] = ` +[] `; -exports[`web socket server URL should work with the custom web socket server "path" ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the custom web socket server "path" using empty value ("sockjs"): console messages 1`] = ` +exports[`web socket server URL > should work with the custom web socket server "path" using empty value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -677,14 +405,6 @@ exports[`web socket server URL should work with the custom web socket server "pa ] `; -exports[`web socket server URL should work with the custom web socket server "path" using empty value ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the custom web socket server "path" using empty value ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] +exports[`web socket server URL > should work with the custom web socket server "path" using empty value ("ws") 2`] = ` +[] `; - -exports[`web socket server URL should work with the custom web socket server "path" using empty value ("ws"): page errors 1`] = `[]`; diff --git a/test/e2e/__snapshots__/web-socket-server.test.js.snap.webpack5 b/test/e2e/__snapshots__/web-socket-server.test.js.snap.webpack5 index db4b4ffb5b..d8505a22f4 100644 --- a/test/e2e/__snapshots__/web-socket-server.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/web-socket-server.test.js.snap.webpack5 @@ -1,9 +1,9 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`web socket server should work allow to disable: console messages 1`] = ` +exports[`web socket server > should work allow to disable 1`] = ` [ "Hey.", ] `; -exports[`web socket server should work allow to disable: page errors 1`] = `[]`; +exports[`web socket server > should work allow to disable 2`] = ` +[] +`; diff --git a/test/e2e/allowed-hosts.test.js b/test/e2e/allowed-hosts.test.js index 163a24f265..ebd8eb9ad7 100644 --- a/test/e2e/allowed-hosts.test.js +++ b/test/e2e/allowed-hosts.test.js @@ -1,18 +1,20 @@ -"use strict"; +import { afterEach, beforeEach, describe, it } from "node:test"; -const express = require("express"); -const { createProxyMiddleware } = require("http-proxy-middleware"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const [port1, port2] = require("../ports-map")["allowed-hosts"]; +import express from "express"; +import { createProxyMiddleware } from "http-proxy-middleware"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; -const webSocketServers = ["ws", "sockjs"]; +const [port1, port2] = portsMap["allowed-hosts"]; + +const webSocketServers = ["ws"]; describe("allowed hosts", () => { for (const webSocketServer of webSocketServers) { - it(`should connect web socket client using localhost to web socket server with the "auto" value ("${webSocketServer}")`, async () => { + it(`should connect web socket client using localhost to web socket server with the "auto" value ("${webSocketServer}")`, async (t) => { const devServerHost = "localhost"; const devServerPort = port1; const proxyHost = devServerHost; @@ -43,7 +45,7 @@ describe("allowed hosts", () => { target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -73,10 +75,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -85,7 +85,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using "localhost" host to web socket server by default ("${webSocketServer}")`, async () => { + it(`should connect web socket client using "localhost" host to web socket server by default ("${webSocketServer}")`, async (t) => { const devServerHost = "localhost"; const devServerPort = port1; const proxyHost = devServerHost; @@ -115,7 +115,7 @@ describe("allowed hosts", () => { target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -146,10 +146,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -158,7 +156,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using "127.0.0.1" host to web socket server by default ("${webSocketServer}")`, async () => { + it(`should connect web socket client using "127.0.0.1" host to web socket server by default ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -188,7 +186,7 @@ describe("allowed hosts", () => { target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -219,10 +217,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -231,7 +227,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using "127.0.0.1" host to web socket server with the "auto" value ("${webSocketServer}")`, async () => { + it(`should connect web socket client using "127.0.0.1" host to web socket server with the "auto" value ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -262,7 +258,7 @@ describe("allowed hosts", () => { target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -293,10 +289,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -305,7 +299,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using "[::1] host to web socket server with the "auto" value ("${webSocketServer}")`, async () => { + it(`should connect web socket client using "[::1] host to web socket server with the "auto" value ("${webSocketServer}")`, async (t) => { const devServerHost = "::1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -336,7 +330,7 @@ describe("allowed hosts", () => { target: `http://[${devServerHost}]:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -367,10 +361,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -379,7 +371,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using "0.0.0.0" host to web socket server with the "auto" value ("${webSocketServer}")`, async () => { + it(`should connect web socket client using "0.0.0.0" host to web socket server with the "auto" value ("${webSocketServer}")`, async (t) => { const devServerHost = "0.0.0.0"; const IPv4 = Server.findIp("v4"); const devServerPort = port1; @@ -411,7 +403,7 @@ describe("allowed hosts", () => { target: `http://${IPv4}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -442,10 +434,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -454,7 +444,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using "file:" protocol to web socket server with the "auto" value ("${webSocketServer}")`, async () => { + it(`should connect web socket client using "file:" protocol to web socket server with the "auto" value ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -483,12 +473,14 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ target: `http://${devServerHost}:${devServerPort}`, - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("origin", "file:///path/to/local/file.js"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "file:///path/to/local/file.js"); + }, }, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -519,10 +511,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -531,7 +521,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using "chrome-extension:" protocol to web socket server with the "auto" value ("${webSocketServer}")`, async () => { + it(`should connect web socket client using "chrome-extension:" protocol to web socket server with the "auto" value ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -560,12 +550,14 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ target: `http://${devServerHost}:${devServerPort}`, - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("origin", "chrome-extension:///abcdef"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "chrome-extension:///abcdef"); + }, }, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -596,10 +588,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -608,7 +598,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using custom hostname to web socket server with the "all" value ("${webSocketServer}")`, async () => { + it(`should connect web socket client using custom hostname to web socket server with the "all" value ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -637,13 +627,15 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("origin", "http://my-test-origin.com/"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://my-test-origin.com/"); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -674,10 +666,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -686,7 +676,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using custom hostname to web socket server with the "all" value in array ("${webSocketServer}")`, async () => { + it(`should connect web socket client using custom hostname to web socket server with the "all" value in array ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -715,13 +705,15 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("origin", "http://my-test-origin.com/"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://my-test-origin.com/"); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -752,10 +744,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -764,7 +754,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using custom hostname to web socket server with the custom hostname value ("${webSocketServer}")`, async () => { + it(`should connect web socket client using custom hostname to web socket server with the custom hostname value ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -793,13 +783,15 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("origin", "http://my-test-origin.com/"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://my-test-origin.com/"); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -830,10 +822,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -842,7 +832,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot ("${webSocketServer}")`, async () => { + it(`should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -871,13 +861,15 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("origin", "http://my-test-origin.com/"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://my-test-origin.com/"); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -908,10 +900,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -920,7 +910,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using custom sub hostname to web socket server with the custom hostname value ("${webSocketServer}")`, async () => { + it(`should connect web socket client using custom sub hostname to web socket server with the custom hostname value ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -949,16 +939,18 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader( - "origin", - "http://foo.bar.baz.my-test-origin.com/", - ); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader( + "origin", + "http://foo.bar.baz.my-test-origin.com/", + ); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -989,10 +981,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -1001,7 +991,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using custom hostname to web socket server with the multiple custom hostname values ("${webSocketServer}")`, async () => { + it(`should connect web socket client using custom hostname to web socket server with the multiple custom hostname values ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -1030,13 +1020,15 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("origin", "http://my-test-origin.com/"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://my-test-origin.com/"); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -1067,10 +1059,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -1079,7 +1069,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using origin header containing an IP address with the custom hostname value ("${webSocketServer}")`, async () => { + it(`should connect web socket client using origin header containing an IP address with the custom hostname value ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -1108,13 +1098,15 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("origin", "http://192.168.1.1/"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://192.168.1.1"); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -1145,10 +1137,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("(work) console messages"); - expect(pageErrors).toMatchSnapshot("(work) page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -1157,7 +1147,7 @@ describe("allowed hosts", () => { } }); - it(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header ("${webSocketServer}")`, async () => { + it(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -1186,13 +1176,15 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("host", "my-test-host"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("host", "my-test-host"); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -1223,10 +1215,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -1235,7 +1225,7 @@ describe("allowed hosts", () => { } }); - it(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header when "server: 'https'" is enabled ("${webSocketServer}")`, async () => { + it(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header when "server: 'https'" is enabled ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -1266,14 +1256,16 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("host", "my-test-host"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "my-test-host/"); + }, }, target: `https://${devServerHost}:${devServerPort}`, secure: false, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -1304,10 +1296,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -1316,7 +1306,7 @@ describe("allowed hosts", () => { } }); - it(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "origin" header ("${webSocketServer}")`, async () => { + it(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "origin" header ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -1345,13 +1335,15 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("origin", "http://my-test-origin.com/"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://my-test-origin.com/"); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -1382,10 +1374,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -1394,7 +1384,7 @@ describe("allowed hosts", () => { } }); - it(`should disconnect web client using localhost to web socket server with the "auto" value ("${webSocketServer}")`, async () => { + it(`should disconnect web client using localhost to web socket server with the "auto" value ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -1423,14 +1413,16 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReq: (proxyReq, req, res) => { - proxyReq.setHeader("host", "unknown"); - res.setHeader("host", devServerHost); + on: { + proxyReq: (proxyReq, req, res) => { + proxyReq.setHeader("host", "unknown"); + res.setHeader("host", devServerHost); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -1463,11 +1455,9 @@ describe("allowed hosts", () => { const html = await page.content(); - expect(html).toMatchSnapshot("html"); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(html); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -1476,7 +1466,7 @@ describe("allowed hosts", () => { } }); - it(`should disconnect web client using origin header containing an IP address with the "auto" value ("${webSocketServer}")`, async () => { + it(`should disconnect web client using origin header containing an IP address with the "auto" value ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -1505,13 +1495,15 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("origin", "http://192.168.0.1/"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://192.168.0.1"); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -1542,10 +1534,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("(work) console messages"); - expect(pageErrors).toMatchSnapshot("(work) page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -1574,7 +1564,7 @@ describe("allowed hosts", () => { await server.stop(); }); - it("should always allow `localhost` if options.allowedHosts is auto", async () => { + it("should always allow `localhost` if options.allowedHosts is auto", async (t) => { const options = { allowedHosts: "auto", port: port1, @@ -1606,16 +1596,14 @@ describe("allowed hosts", () => { throw new Error("Validation didn't fail"); } - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should always allow `localhost` subdomain if options.allowedHosts is auto", async () => { + it("should always allow `localhost` subdomain if options.allowedHosts is auto", async (t) => { const options = { allowedHosts: "auto", port: port1, @@ -1647,17 +1635,15 @@ describe("allowed hosts", () => { throw new Error("Validation didn't fail"); } - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should always allow value from the `host` options if options.allowedHosts is auto", async () => { - const networkIP = Server.internalIPSync("v4"); + it("should always allow value from the `host` options if options.allowedHosts is auto", async (t) => { + const networkIP = Server.findIp("v4", false); const options = { host: networkIP, allowedHosts: "auto", @@ -1690,16 +1676,14 @@ describe("allowed hosts", () => { throw new Error("Validation didn't fail"); } - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should always allow value of the `host` option from the `client.webSocketURL` option if options.allowedHosts is auto", async () => { + it("should always allow value of the `host` option from the `client.webSocketURL` option if options.allowedHosts is auto", async (t) => { const options = { allowedHosts: "auto", port: port1, @@ -1734,16 +1718,14 @@ describe("allowed hosts", () => { throw new Error("Validation didn't fail"); } - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should always allow any host if options.allowedHosts is all", async () => { + it("should always allow any host if options.allowedHosts is all", async (t) => { const options = { allowedHosts: "all", port: port1, @@ -1774,16 +1756,14 @@ describe("allowed hosts", () => { throw new Error("Validation didn't fail"); } - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should allow hosts in allowedHosts", async () => { + it("should allow hosts in allowedHosts", async (t) => { const tests = ["test.host", "test2.host", "test3.host"]; const options = { allowedHosts: tests, @@ -1816,16 +1796,14 @@ describe("allowed hosts", () => { } } - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should allow hosts that pass a wildcard in allowedHosts", async () => { + it("should allow hosts that pass a wildcard in allowedHosts", async (t) => { const options = { allowedHosts: [".example.com"], port: port1, @@ -1866,13 +1844,227 @@ describe("allowed hosts", () => { } } - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); + + t.assert.snapshot(consoleMessages.map((message) => message.text())); + + t.assert.snapshot(pageErrors); + }); + + it("should allow websocket connection when host is 'localhost' but resolves to '127.0.0.1' (loopback alias mismatch)", async (t) => { + const options = { + allowedHosts: "auto", + host: "localhost", + port: port1, + }; + + server = new Server(options, compiler); + + await server.start(); + + ({ page, browser } = await runBrowser()); + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + // Simulate: browser opens from localhost, but OS resolved + // 'localhost' to '127.0.0.1' so host header is the IP + const headersLocalhostOriginIPv4Host = { + host: "127.0.0.1", + origin: "http://localhost", + }; + + if (!server.isSameOrigin(headersLocalhostOriginIPv4Host)) { + throw new Error( + "isSameOrigin should treat localhost and 127.0.0.1 as equivalent loopback addresses", + ); + } + + const response = await page.goto(`http://localhost:${port1}/main.js`, { + waitUntil: "networkidle0", + }); + + t.assert.snapshot(response.status()); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); + }); + + it("should allow websocket connection when host is 'localhost' but resolves to '::1' (loopback alias mismatch)", async (t) => { + const options = { + allowedHosts: "auto", + host: "localhost", + port: port1, + }; + + server = new Server(options, compiler); + + await server.start(); + + ({ page, browser } = await runBrowser()); + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + // Simulate: page loaded via localhost, but a WS client built the + // connection URL using the IPv6 loopback, so the Host header is + // the bracketed IPv6 form (per RFC 3986/7230) while Origin keeps + // the original 'localhost'. + const headersLocalhostOriginIPv6Host = { + host: "[::1]", + origin: "http://localhost", + }; + + if (!server.isSameOrigin(headersLocalhostOriginIPv6Host)) { + throw new Error( + "isSameOrigin should treat localhost and ::1 as equivalent loopback addresses", + ); + } + + const response = await page.goto(`http://localhost:${port1}/main.js`, { + waitUntil: "networkidle0", + }); + + t.assert.snapshot(response.status()); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); + }); + + it("should allow websocket connection when origin is '127.0.0.1' but host is 'localhost' (reverse loopback alias mismatch)", async (t) => { + const options = { + allowedHosts: "auto", + host: "127.0.0.1", + port: port1, + }; + + server = new Server(options, compiler); + + await server.start(); + + ({ page, browser } = await runBrowser()); + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + // Reverse of above: server bound to 127.0.0.1, but browser + // sent origin header using 'localhost' name + const headersIPv4OriginLocalhostHost = { + host: "localhost", + origin: "http://127.0.0.1", + }; + + if (!server.isSameOrigin(headersIPv4OriginLocalhostHost)) { + throw new Error( + "isSameOrigin should treat 127.0.0.1 and localhost as equivalent loopback addresses", + ); + } + + const response = await page.goto(`http://127.0.0.1:${port1}/main.js`, { + waitUntil: "networkidle0", + }); + + t.assert.snapshot(response.status()); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); + }); + + it("should NOT allow websocket connection when allowedHosts is restrictive and excludes every loopback alias", async (t) => { + const options = { + // Explicit allow-list without any loopback alias: the loopback + // equivalence must NOT override the user's configuration. + allowedHosts: ["example.com"], + host: "localhost", + port: port1, + }; + + server = new Server(options, compiler); + + await server.start(); + + ({ page, browser } = await runBrowser()); + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const headersLoopbackButNotAllowed = { + host: "127.0.0.1", + origin: "http://localhost", + }; + + if (server.isSameOrigin(headersLoopbackButNotAllowed)) { + throw new Error( + "isSameOrigin must respect explicit allowedHosts when no loopback alias is permitted", + ); + } + + const response = await page.goto(`http://localhost:${port1}/main.js`, { + waitUntil: "networkidle0", + }); + + t.assert.snapshot(response.status()); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); + }); + + it("should NOT allow websocket connection when origin is a non-loopback address mismatching host (loopback fix must not widen trust)", async (t) => { + const options = { + allowedHosts: "auto", + host: "localhost", + port: port1, + }; + + server = new Server(options, compiler); + + await server.start(); + + ({ page, browser } = await runBrowser()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + // A real external origin must never pass as loopback equivalent. + const headersExternalOrigin = { + host: "localhost", + origin: "http://evil.example.com", + }; + + if (server.isSameOrigin(headersExternalOrigin)) { + throw new Error( + "isSameOrigin must NOT allow external origins to match loopback host", + ); + } + + const response = await page.goto(`http://localhost:${port1}/main.js`, { + waitUntil: "networkidle0", + }); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(response.status()); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); }); }); }); diff --git a/test/e2e/api.test.js b/test/e2e/api.test.js index f8a536af49..b1a0ab6b4f 100644 --- a/test/e2e/api.test.js +++ b/test/e2e/api.test.js @@ -1,12 +1,17 @@ -"use strict"; - -const path = require("node:path"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const sessionSubscribe = require("../helpers/session-subscribe"); -const port = require("../ports-map").api; +import path from "node:path"; +import { afterEach, beforeEach, describe, it, mock } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import { fn } from "jest-mock"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import runBrowser, { runPage } from "../helpers/run-browser.js"; +import sessionSubscribe from "../helpers/session-subscribe.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap.api; describe("API", () => { describe("WEBPACK_SERVE environment variable", () => { @@ -18,9 +23,6 @@ describe("API", () => { let consoleMessages; beforeEach(async () => { - // this is important - it clears the cache - jest.resetModules(); - process.env = { ...OLD_ENV }; delete process.env.WEBPACK_SERVE; @@ -37,7 +39,7 @@ describe("API", () => { process.env = OLD_ENV; }); - it("should be present", async () => { + it("should be present", async (t) => { expect(process.env.WEBPACK_SERVE).toBeUndefined(); page @@ -48,7 +50,10 @@ describe("API", () => { pageErrors.push(error); }); - const WebpackDevServer = require("../../lib/Server"); + const serverUrl = import.meta.resolve("../../lib/Server.js"); + const { default: WebpackDevServer } = await import( + `${serverUrl}?t=${Date.now()}-${Math.random()}` + ); const compiler = webpack(config); server = new WebpackDevServer({ port }, compiler); @@ -61,18 +66,16 @@ describe("API", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); describe("latest async API", () => { - it("should work with async API", async () => { + it("should work with async API", async (t) => { const compiler = webpack(config); const server = new Server({ port }, compiler); @@ -96,17 +99,15 @@ describe("API", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work with callback API", async () => { + it("should work with callback API", async (t) => { const compiler = webpack(config); const server = new Server({ port }, compiler); @@ -134,10 +135,8 @@ describe("API", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await new Promise((resolve) => { @@ -171,7 +170,7 @@ describe("API", () => { }); }); - it("should work when using configured manually", async () => { + it("should work when using configured manually", async (t) => { const compiler = webpack({ ...config, entry: [ @@ -205,17 +204,15 @@ describe("API", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work and allow to rerun dev server multiple times", async () => { + it("should work and allow to rerun dev server multiple times", async (t) => { const compiler = webpack(config); const server = new Server({ port }, compiler); @@ -239,17 +236,17 @@ describe("API", () => { waitUntil: "networkidle0", }); - expect( + t.assert.snapshot( firstConsoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(firstPageErrors).toMatchSnapshot("page errors"); + ); + t.assert.snapshot(firstPageErrors); } finally { await server.stop(); } await server.start(); - const secondPage = await runBrowser.runPage(browser); + const secondPage = await runPage(browser); try { const secondPageErrors = []; @@ -267,10 +264,10 @@ describe("API", () => { waitUntil: "networkidle0", }); - expect( + t.assert.snapshot( secondConsoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(secondPageErrors).toMatchSnapshot("page errors"); + ); + t.assert.snapshot(secondPageErrors); } finally { await browser.close(); await server.stop(); @@ -312,8 +309,8 @@ describe("API", () => { await server.stop(); }); - it("should use the default `noop` callback when invalidate is called without any callback", async () => { - const callback = jest.fn(); + it("should use the default `noop` callback when invalidate is called without any callback", async (t) => { + const callback = fn(); server.invalidate(); server.middleware.context.callbacks[0] = callback; @@ -323,16 +320,14 @@ describe("API", () => { }); expect(callback).toHaveBeenCalledTimes(1); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); }); - it("should use the provided `callback` function", async () => { - const callback = jest.fn(); + it("should use the provided `callback` function", async (t) => { + const callback = fn(); server.invalidate(callback); @@ -341,13 +336,11 @@ describe("API", () => { }); expect(callback).toHaveBeenCalledTimes(1); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -429,7 +422,7 @@ describe("API", () => { expect(freePort).toBe(9082); }); - it("should return the port when the port is `null`", async () => { + it("should return the port when the port is `null`", async (t) => { const retryCount = 2; process.env.WEBPACK_DEV_SERVER_PORT_RETRY = retryCount; @@ -464,13 +457,11 @@ describe("API", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } catch (error) { if (error.code === "EACCES") { // Retry mechanism for EACCES errors @@ -504,7 +495,7 @@ describe("API", () => { } }); - it("should return the port when the port is undefined", async () => { + it("should return the port when the port is undefined", async (t) => { const retryCount = 3; process.env.WEBPACK_DEV_SERVER_PORT_RETRY = retryCount; @@ -540,13 +531,11 @@ describe("API", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } catch (error) { if (error.code === "EACCES") { // Retry mechanism for EACCES errors @@ -580,7 +569,7 @@ describe("API", () => { } }); - it("should retry finding the port for up to defaultPortRetry times (number)", async () => { + it("should retry finding the port for up to defaultPortRetry times (number)", async (t) => { const retryCount = 4; process.env.WEBPACK_DEV_SERVER_PORT_RETRY = retryCount; @@ -616,13 +605,11 @@ describe("API", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } catch (error) { if (error.code === "EACCES") { // Retry mechanism for EACCES errors @@ -657,7 +644,7 @@ describe("API", () => { } }); - it("should retry finding the port for up to defaultPortRetry times (string)", async () => { + it("should retry finding the port for up to defaultPortRetry times (string)", async (t) => { const retryCount = 5; process.env.WEBPACK_DEV_SERVER_PORT_RETRY = retryCount; @@ -693,13 +680,11 @@ describe("API", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } catch (error) { if (error.code === "EACCES") { // Retry mechanism for EACCES errors @@ -734,7 +719,7 @@ describe("API", () => { } }); - it("should retry finding the port when serial ports are busy", async () => { + it("should retry finding the port when serial ports are busy", async (t) => { const basePort = Number.parseInt( process.env.WEBPACK_DEV_SERVER_TEST_BASE_PORT || 30000, 10, @@ -772,13 +757,11 @@ describe("API", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } catch (error) { if (error.code === "EACCES") { // Retry mechanism for EACCES errors @@ -823,20 +806,21 @@ describe("API", () => { } }); - it("should throw the error when the port isn't found", async () => { + it("should throw the error when the port isn't found", async (t) => { expect.assertions(1); - jest.mock( - "../../lib/getPort", - () => () => Promise.reject(new Error("busy")), - ); + const getPortMock = mock.module("../../lib/getPort.js", { + defaultExport: () => Promise.reject(new Error("busy")), + }); process.env.WEBPACK_DEV_SERVER_PORT_RETRY = 1; try { await Server.getFreePort(); } catch (error) { - expect(error.message).toMatchSnapshot(); + t.assert.snapshot(error.message); + } finally { + getPortMock.restore(); } }); }); @@ -872,7 +856,7 @@ describe("API", () => { expect(isValidHost).toBe(true); }); - it('should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object', async () => { + it('should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object', async (t) => { const options = { port, client: { @@ -907,11 +891,7 @@ describe("API", () => { }); const webSocketRequests = []; - const session = await page.target().createCDPSession(); - - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + const session = await page.createCDPSession(); await session.send("Target.setAutoAttach", { autoAttach: true, @@ -919,7 +899,11 @@ describe("API", () => { waitForDebuggerOnStart: true, }); - sessionSubscribe(session); + await sessionSubscribe(session); + + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); try { const response = await page.goto(`http://localhost:${port}/`, { @@ -943,16 +927,15 @@ describe("API", () => { }, 100); }); - expect(webSocketRequests[0].url).toMatchSnapshot("web socket URL"); + t.assert.snapshot(webSocketRequests[0].url); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect( - // net::ERR_NAME_NOT_RESOLVED can be multiple times + t.assert.snapshot( consoleMessages.map((message) => message.text()).slice(0, 7), - ).toMatchSnapshot("console messages"); + ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } catch (error) { if (error.code === "EACCES") { // Retry mechanism for EACCES errors diff --git a/test/e2e/app.test.js b/test/e2e/app.test.js index 767fb5b980..964c56b597 100644 --- a/test/e2e/app.test.js +++ b/test/e2e/app.test.js @@ -1,13 +1,24 @@ -"use strict"; - -const fs = require("node:fs"); -const path = require("node:path"); -const webpack = require("webpack"); -const wdm = require("webpack-dev-middleware"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map").app; +import fs from "node:fs"; +import { createSecureServer } from "node:http2"; +import { createServer as createHttpsServer } from "node:https"; +import path from "node:path"; +import { afterEach, beforeEach, describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { createAdaptorServer } from "@hono/node-server"; +import connect from "connect"; +import { expect } from "expect"; +import express from "express"; +import { Hono } from "hono"; +import webpack from "webpack"; +import wdm from "webpack-dev-middleware"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +const port = portsMap.app; const staticDirectory = path.resolve( __dirname, @@ -15,17 +26,17 @@ const staticDirectory = path.resolve( ); const apps = [ - ["express", () => require("express")(), "http"], - ["express", () => require("express")(), "https"], - ["connect", () => require("connect")(), "http"], - ["connect", () => require("connect")(), "https"], - ["connect", () => require("connect")(), "http2"], - ["connect (async)", () => require("connect")(), "http"], + ["express", () => express(), "http"], + ["express", () => express(), "https"], + ["connect", () => connect(), "http"], + ["connect", () => connect(), "https"], + ["connect", () => connect(), "http2"], + ["connect (async)", () => connect(), "http"], [ "hono", - () => new (require("hono").Hono)(), + () => new Hono(), (options, app) => - require("@hono/node-server").createAdaptorServer({ + createAdaptorServer({ fetch: app.fetch, }), (_, devServer) => [ @@ -37,11 +48,11 @@ const apps = [ ], [ "hono", - () => new (require("hono").Hono)(), + () => new Hono(), (_, app) => - require("@hono/node-server").createAdaptorServer({ + createAdaptorServer({ fetch: app.fetch, - createServer: require("node:https").createServer, + createServer: createHttpsServer, serverOptions: { key: fs.readFileSync( path.resolve(__dirname, "../fixtures/ssl/localhost-privkey.pem"), @@ -60,12 +71,12 @@ const apps = [ ], [ "hono", - () => new (require("hono").Hono)(), + () => new Hono(), { type: (options, app) => - require("@hono/node-server").createAdaptorServer({ + createAdaptorServer({ fetch: app.fetch, - createServer: require("node:http2").createSecureServer, + createServer: createSecureServer, serverOptions: options, }), options: { @@ -87,15 +98,6 @@ const apps = [ ], ]; -const [major] = process.versions.node.split(".").map(Number); - -if (major < 24) { - apps.push( - ["express", () => require("express")(), "spdy"], - ["connect", () => require("connect")(), "spdy"], - ); -} - describe("app option", () => { for (const [appName, app, server, setupMiddlewares] of apps) { let compiler; @@ -166,7 +168,6 @@ describe("app option", () => { ); if ( - server === "spdy" || server === "http2" || (server.options && server.options.allowHTTP1) ) { diff --git a/test/e2e/bonjour.test.js b/test/e2e/bonjour.test.js index 5f2bc90aab..cf98a94e95 100644 --- a/test/e2e/bonjour.test.js +++ b/test/e2e/bonjour.test.js @@ -1,11 +1,14 @@ -"use strict"; - -const os = require("node:os"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/simple-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map").bonjour; +import os from "node:os"; +import { afterEach, beforeEach, describe, it, mock } from "node:test"; +import { expect } from "expect"; +import { fn } from "jest-mock"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/simple-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const port = portsMap.bonjour; describe("bonjour option", () => { let mockPublish; @@ -13,11 +16,11 @@ describe("bonjour option", () => { let mockDestroy; beforeEach(() => { - mockPublish = jest.fn(); - mockUnpublishAll = jest.fn((callback) => { + mockPublish = fn(); + mockUnpublishAll = fn((callback) => { callback(); }); - mockDestroy = jest.fn(); + mockDestroy = fn(); }); describe("as true", () => { @@ -27,15 +30,18 @@ describe("bonjour option", () => { let browser; let pageErrors; let consoleMessages; + let bonjourMock; beforeEach(async () => { - jest.mock("bonjour-service", () => ({ - Bonjour: jest.fn().mockImplementation(() => ({ - publish: mockPublish, - unpublishAll: mockUnpublishAll, - destroy: mockDestroy, - })), - })); + bonjourMock = mock.module("bonjour-service", { + namedExports: { + Bonjour: fn().mockImplementation(() => ({ + publish: mockPublish, + unpublishAll: mockUnpublishAll, + destroy: mockDestroy, + })), + }, + }); compiler = webpack(config); @@ -56,9 +62,10 @@ describe("bonjour option", () => { mockPublish.mockReset(); mockUnpublishAll.mockReset(); mockDestroy.mockReset(); + bonjourMock.restore(); }); - it("should call bonjour with correct params", async () => { + it("should call bonjour with correct params", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -83,13 +90,11 @@ describe("bonjour option", () => { expect(mockUnpublishAll).toHaveBeenCalledTimes(0); expect(mockDestroy).toHaveBeenCalledTimes(0); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -100,15 +105,18 @@ describe("bonjour option", () => { let browser; let pageErrors; let consoleMessages; + let bonjourMock; beforeEach(async () => { - jest.mock("bonjour-service", () => ({ - Bonjour: jest.fn().mockImplementation(() => ({ - publish: mockPublish, - unpublishAll: mockUnpublishAll, - destroy: mockDestroy, - })), - })); + bonjourMock = mock.module("bonjour-service", { + namedExports: { + Bonjour: fn().mockImplementation(() => ({ + publish: mockPublish, + unpublishAll: mockUnpublishAll, + destroy: mockDestroy, + })), + }, + }); compiler = webpack(config); @@ -125,9 +133,10 @@ describe("bonjour option", () => { afterEach(async () => { await browser.close(); await server.stop(); + bonjourMock.restore(); }); - it("should call bonjour with 'https' type", async () => { + it("should call bonjour with 'https' type", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -152,13 +161,11 @@ describe("bonjour option", () => { expect(mockUnpublishAll).toHaveBeenCalledTimes(0); expect(mockDestroy).toHaveBeenCalledTimes(0); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -169,15 +176,18 @@ describe("bonjour option", () => { let browser; let pageErrors; let consoleMessages; + let bonjourMock; beforeEach(async () => { - jest.mock("bonjour-service", () => ({ - Bonjour: jest.fn().mockImplementation(() => ({ - publish: mockPublish, - unpublishAll: mockUnpublishAll, - destroy: mockDestroy, - })), - })); + bonjourMock = mock.module("bonjour-service", { + namedExports: { + Bonjour: fn().mockImplementation(() => ({ + publish: mockPublish, + unpublishAll: mockUnpublishAll, + destroy: mockDestroy, + })), + }, + }); compiler = webpack(config); @@ -203,9 +213,10 @@ describe("bonjour option", () => { afterEach(async () => { await browser.close(); await server.stop(); + bonjourMock.restore(); }); - it("should apply bonjour options", async () => { + it("should apply bonjour options", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -231,13 +242,11 @@ describe("bonjour option", () => { expect(mockUnpublishAll).toHaveBeenCalledTimes(0); expect(mockDestroy).toHaveBeenCalledTimes(0); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -248,15 +257,18 @@ describe("bonjour option", () => { let browser; let pageErrors; let consoleMessages; + let bonjourMock; beforeEach(async () => { - jest.mock("bonjour-service", () => ({ - Bonjour: jest.fn().mockImplementation(() => ({ - publish: mockPublish, - unpublishAll: mockUnpublishAll, - destroy: mockDestroy, - })), - })); + bonjourMock = mock.module("bonjour-service", { + namedExports: { + Bonjour: fn().mockImplementation(() => ({ + publish: mockPublish, + unpublishAll: mockUnpublishAll, + destroy: mockDestroy, + })), + }, + }); compiler = webpack(config); @@ -285,9 +297,10 @@ describe("bonjour option", () => { afterEach(async () => { await browser.close(); await server.stop(); + bonjourMock.restore(); }); - it("should apply bonjour options", async () => { + it("should apply bonjour options", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -313,13 +326,11 @@ describe("bonjour option", () => { expect(mockUnpublishAll).toHaveBeenCalledTimes(0); expect(mockDestroy).toHaveBeenCalledTimes(0); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); }); diff --git a/test/e2e/built-in-routes.test.js b/test/e2e/built-in-routes.test.js index faab99f224..9432839afb 100644 --- a/test/e2e/built-in-routes.test.js +++ b/test/e2e/built-in-routes.test.js @@ -1,11 +1,13 @@ -"use strict"; +import { afterEach, beforeEach, describe, it } from "node:test"; +import { expect } from "expect"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import multiConfig from "../fixtures/multi-public-path-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const multiConfig = require("../fixtures/multi-public-path-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map").routes; +const port = portsMap.routes; describe("Built in routes", () => { describe("with simple config", () => { @@ -33,70 +35,7 @@ describe("Built in routes", () => { await server.stop(); }); - it("should handles GET request to sockjs bundle", async () => { - page - .on("console", (message) => { - consoleMessages.push(message); - }) - .on("pageerror", (error) => { - pageErrors.push(error); - }); - - const response = await page.goto( - `http://localhost:${port}/__webpack_dev_server__/sockjs.bundle.js`, - { - waitUntil: "networkidle0", - }, - ); - - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); - - expect(response.status()).toMatchSnapshot("response status"); - - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - - expect(pageErrors).toMatchSnapshot("page errors"); - }); - - it("should handles HEAD request to sockjs bundle", async () => { - page - .on("console", (message) => { - consoleMessages.push(message); - }) - .on("pageerror", (error) => { - pageErrors.push(error); - }) - .on("request", (interceptedRequest) => { - if (interceptedRequest.isInterceptResolutionHandled()) return; - - interceptedRequest.continue({ method: "HEAD" }, 10); - }); - - const response = await page.goto( - `http://localhost:${port}/__webpack_dev_server__/sockjs.bundle.js`, - { - waitUntil: "networkidle0", - }, - ); - - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); - - expect(response.status()).toMatchSnapshot("response status"); - - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - - expect(pageErrors).toMatchSnapshot("page errors"); - }); - - it("should handle GET request to invalidate endpoint", async () => { + it("should handle GET request to invalidate endpoint", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -114,16 +53,14 @@ describe("Built in routes", () => { expect(response.headers()["content-type"]).not.toBe("text/html"); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should handle GET request to directory index and list all middleware directories", async () => { + it("should handle GET request to directory index and list all middleware directories", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -139,22 +76,18 @@ describe("Built in routes", () => { }, ); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("directory list"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should handle HEAD request to directory index", async () => { + it("should handle HEAD request to directory index", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -175,22 +108,18 @@ describe("Built in routes", () => { }, ); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("directory list"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should handle GET request to magic async chunk", async () => { + it("should handle GET request to magic async chunk", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -203,18 +132,14 @@ describe("Built in routes", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); }); - it("should handle HEAD request to magic async chunk", async () => { + it("should handle HEAD request to magic async chunk", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -232,15 +157,11 @@ describe("Built in routes", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); }); }); @@ -269,7 +190,7 @@ describe("Built in routes", () => { await server.stop(); }); - it("should handle GET request to directory index and list all middleware directories", async () => { + it("should handle GET request to directory index and list all middleware directories", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -285,19 +206,15 @@ describe("Built in routes", () => { }, ); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("directory list"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); }); diff --git a/test/e2e/client-reconnect.test.js b/test/e2e/client-reconnect.test.js index eff831783d..6aff8d1726 100644 --- a/test/e2e/client-reconnect.test.js +++ b/test/e2e/client-reconnect.test.js @@ -1,10 +1,12 @@ -"use strict"; +import { afterEach, beforeEach, describe, it } from "node:test"; -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/simple-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["client-reconnect-option"]; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/simple-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const port = portsMap["client-reconnect-option"]; describe("client.reconnect option", () => { describe("specified as true", () => { @@ -32,7 +34,7 @@ describe("client.reconnect option", () => { await browser.close(); }); - it("should try to reconnect unlimited times", async () => { + it("should try to reconnect unlimited times", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -46,7 +48,7 @@ describe("client.reconnect option", () => { }); try { - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); } finally { await server.stop(); } @@ -67,7 +69,7 @@ describe("client.reconnect option", () => { }, 1000); }); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -96,7 +98,7 @@ describe("client.reconnect option", () => { await browser.close(); }); - it("should not try to reconnect", async () => { + it("should not try to reconnect", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -110,7 +112,7 @@ describe("client.reconnect option", () => { }); try { - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); } finally { await server.stop(); } @@ -125,11 +127,9 @@ describe("client.reconnect option", () => { ); }); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -158,7 +158,7 @@ describe("client.reconnect option", () => { await browser.close(); }); - it("should try to reconnect 2 times", async () => { + it("should try to reconnect 2 times", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -172,7 +172,7 @@ describe("client.reconnect option", () => { }); try { - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); } finally { await server.stop(); } @@ -187,11 +187,9 @@ describe("client.reconnect option", () => { ); }); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); }); diff --git a/test/e2e/client.test.js b/test/e2e/client.test.js index 335ca39648..9d6a64a9d9 100644 --- a/test/e2e/client.test.js +++ b/test/e2e/client.test.js @@ -1,10 +1,14 @@ -"use strict"; - -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/simple-config-other/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["client-option"]; +import { afterEach, beforeEach, describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import sessionSubscribe from "../helpers/session-subscribe.js"; +import portsMap from "../ports-map.js"; + +const port = portsMap["client-option"]; describe("client option", () => { describe("default behaviour", () => { @@ -21,9 +25,9 @@ describe("client option", () => { server = new Server( { client: { - webSocketTransport: "sockjs", + webSocketTransport: "ws", }, - webSocketServer: "sockjs", + webSocketServer: "ws", port, }, compiler, @@ -42,7 +46,7 @@ describe("client option", () => { await server.stop(); }); - it("responds with a 200 status code for /ws path", async () => { + it("responds with a 200 status code for / path", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -51,20 +55,35 @@ describe("client option", () => { pageErrors.push(error); }); - const response = await page.goto(`http://localhost:${port}/ws`, { + const webSocketRequests = []; + const session = await page.createCDPSession(); + + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); + + await sessionSubscribe(session); + + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); + + const response = await page.goto(`http://localhost:${port}/`, { waitUntil: "networkidle0", }); // overlay should be true by default expect(server.options.client.overlay).toBe(true); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(webSocketRequests.map((request) => request.url)); + + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -82,16 +101,18 @@ describe("client option", () => { server = new Server( { client: { - webSocketTransport: "sockjs", + webSocketTransport: "ws", + webSocketURL: { + pathname: "/foo/test/bar", + }, }, webSocketServer: { - type: "sockjs", + type: "ws", options: { - host: "localhost", - port, path: "/foo/test/bar", }, }, + host: "localhost", port, }, compiler, @@ -110,7 +131,7 @@ describe("client option", () => { await server.stop(); }); - it("responds with a 200 status code for /foo/test/bar path", async () => { + it("responds with a websocket with the /foo/test/bar path", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -119,20 +140,30 @@ describe("client option", () => { pageErrors.push(error); }); - const response = await page.goto( - `http://localhost:${port}/foo/test/bar`, - { - waitUntil: "networkidle0", - }, - ); + const webSocketRequests = []; + const session = await page.createCDPSession(); - expect(response.status()).toMatchSnapshot("response status"); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + await sessionSubscribe(session); + + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); + + await page.goto(`http://localhost:${port}/`, { + waitUntil: "networkidle0", + }); + + t.assert.snapshot(webSocketRequests.map((request) => request.url)); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + + t.assert.snapshot(pageErrors); }); }); @@ -168,7 +199,7 @@ describe("client option", () => { await server.stop(); }); - it("should disable client entry", async () => { + it("should disable client entry", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -177,19 +208,34 @@ describe("client option", () => { pageErrors.push(error); }); + const webSocketRequests = []; + const session = await page.createCDPSession(); + + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); + + await sessionSubscribe(session); + + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); + const response = await page.goto(`http://localhost:${port}/main.js`, { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(webSocketRequests); + + t.assert.snapshot(response.status()); expect(await response.text()).not.toMatch(/client\/index\.js/); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -201,14 +247,16 @@ describe("client option", () => { class OverrideServer extends Server { getClientEntry() { - return require.resolve( - "../fixtures/custom-client/CustomClientEntry.js", + return fileURLToPath( + import.meta.resolve("../fixtures/custom-client/CustomClientEntry.js"), ); } getClientHotEntry() { - return require.resolve( - "../fixtures/custom-client/CustomClientHotEntry.js", + return fileURLToPath( + import.meta.resolve( + "../fixtures/custom-client/CustomClientHotEntry.js", + ), ); } } @@ -233,12 +281,12 @@ describe("client option", () => { await server.stop(); }); - it("should disable client entry", async () => { + it("should disable client entry", async (t) => { const response = await page.goto(`http://localhost:${port}/main.js`, { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); const content = await response.text(); expect(content).toContain("CustomClientEntry.js"); @@ -248,14 +296,6 @@ describe("client option", () => { describe("webSocketTransport", () => { const clientModes = [ - { - title: 'as a string ("sockjs")', - client: { - webSocketTransport: "sockjs", - }, - webSocketServer: "sockjs", - shouldThrow: false, - }, { title: 'as a string ("ws")', client: { @@ -264,34 +304,16 @@ describe("client option", () => { webSocketServer: "ws", shouldThrow: false, }, - { - title: 'as a path ("sockjs")', - client: { - webSocketTransport: require.resolve( - "../../client-src/clients/SockJSClient", - ), - }, - webSocketServer: "sockjs", - shouldThrow: false, - }, { title: 'as a path ("ws")', client: { - webSocketTransport: require.resolve( - "../../client-src/clients/WebSocketClient", + webSocketTransport: fileURLToPath( + import.meta.resolve("../../client-src/clients/WebSocketClient.js"), ), }, webSocketServer: "ws", shouldThrow: false, }, - { - title: "as a nonexistent path (sockjs)", - client: { - webSocketTransport: "/bad/path/to/implementation", - }, - webSocketServer: "sockjs", - shouldThrow: true, - }, { title: "as a nonexistent path (ws)", client: { diff --git a/test/e2e/compress.test.js b/test/e2e/compress.test.js index 4436292e8f..70eb51d094 100644 --- a/test/e2e/compress.test.js +++ b/test/e2e/compress.test.js @@ -1,10 +1,12 @@ -"use strict"; +import { afterEach, beforeEach, describe, it } from "node:test"; -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/simple-config-other/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["compress-option"]; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/simple-config-other/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const port = portsMap["compress-option"]; describe("compress option", () => { describe("enabled by default when not specified", () => { @@ -33,7 +35,7 @@ describe("compress option", () => { await server.stop(); }); - it("should handle GET request to bundle file", async () => { + it("should handle GET request to bundle file", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -46,17 +48,13 @@ describe("compress option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(response.headers()["content-encoding"]).toMatchSnapshot( - "response headers content-encoding", - ); + t.assert.snapshot(response.headers()["content-encoding"]); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -92,7 +90,7 @@ describe("compress option", () => { await server.stop(); }); - it("should handle GET request to bundle file", async () => { + it("should handle GET request to bundle file", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -105,17 +103,13 @@ describe("compress option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(response.headers()["content-encoding"]).toMatchSnapshot( - "response headers content-encoding", - ); + t.assert.snapshot(response.headers()["content-encoding"]); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -151,7 +145,7 @@ describe("compress option", () => { await server.stop(); }); - it("should handle GET request to bundle file", async () => { + it("should handle GET request to bundle file", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -164,17 +158,13 @@ describe("compress option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(response.headers()["content-encoding"]).toMatchSnapshot( - "response headers content-encoding", - ); + t.assert.snapshot(response.headers()["content-encoding"]); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); }); diff --git a/test/e2e/cross-origin-request.test.js b/test/e2e/cross-origin-request.test.js index d003024928..c761470895 100644 --- a/test/e2e/cross-origin-request.test.js +++ b/test/e2e/cross-origin-request.test.js @@ -1,10 +1,13 @@ -"use strict"; +import http from "node:http"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const [port1, port2] = require("../ports-map")["cross-origin-request"]; +const [port1, port2] = portsMap["cross-origin-request"]; describe("cross-origin requests", () => { const devServerPort = port1; @@ -22,7 +25,6 @@ describe("cross-origin requests", () => { await server.start(); // Start a separate server for serving the HTML file - const http = require("node:http"); const htmlServer = http.createServer((req, res) => { res.writeHead(200, { "Content-Type": "text/html" }); @@ -76,7 +78,6 @@ describe("cross-origin requests", () => { await server.start(); // Start a separate server for serving the HTML file - const http = require("node:http"); const htmlServer = http.createServer((req, res) => { res.writeHead(200, { "Content-Type": "text/html" }); @@ -127,7 +128,6 @@ describe("cross-origin requests", () => { await server.start(); // Start a separate server for serving the HTML file - const http = require("node:http"); const htmlServer = http.createServer((req, res) => { res.writeHead(200, { "Content-Type": "text/html" }); @@ -178,7 +178,6 @@ describe("cross-origin requests", () => { await server.start(); // Start a separate server for serving the HTML file - const http = require("node:http"); const htmlServer = http.createServer((req, res) => { res.writeHead(200, { "Content-Type": "text/html" }); diff --git a/test/e2e/entry.test.js b/test/e2e/entry.test.js index 311d87c333..e8f488e2b0 100644 --- a/test/e2e/entry.test.js +++ b/test/e2e/entry.test.js @@ -1,11 +1,15 @@ -"use strict"; +import path from "node:path"; +import { describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; -const path = require("node:path"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map").entry; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap.entry; const HOT_ENABLED_MESSAGE = "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled."; @@ -32,7 +36,7 @@ describe("entry", () => { "../fixtures/client-config/bar.js", ); - it("should work with single entry", async () => { + it("should work with single entry", async (t) => { const compiler = webpack({ ...config, entry: entryFirst }); const devServerOptions = { port, @@ -59,17 +63,15 @@ describe("entry", () => { waitUntil: "networkidle0", }); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work with single array entry", async () => { + it("should work with single array entry", async (t) => { const compiler = webpack({ ...config, entry: [entryFirst, entrySecond] }); const devServerOptions = { port, @@ -96,17 +98,15 @@ describe("entry", () => { waitUntil: "networkidle0", }); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work with object entry", async () => { + it("should work with object entry", async (t) => { const compiler = webpack({ ...config, entry: { @@ -138,17 +138,15 @@ describe("entry", () => { waitUntil: "networkidle0", }); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work with dynamic entry", async () => { + it("should work with dynamic entry", async (t) => { const compiler = webpack({ ...config, entry: () => entryFirst }); const devServerOptions = { port, @@ -175,17 +173,15 @@ describe("entry", () => { waitUntil: "networkidle0", }); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work with dynamic async entry", async () => { + it("should work with dynamic async entry", async (t) => { const compiler = webpack({ ...config, entry: () => @@ -218,17 +214,15 @@ describe("entry", () => { waitUntil: "networkidle0", }); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work with multiple entries", async () => { + it("should work with multiple entries", async (t) => { const compiler = webpack({ ...config, entry: { @@ -269,15 +263,15 @@ describe("entry", () => { await page.addScriptTag({ url: `http://localhost:${port}/foo.js` }); await waitForConsoleLogFinished(consoleMessages); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work with multiple entries #2", async () => { + it("should work with multiple entries #2", async (t) => { const compiler = webpack({ ...config, entry: { @@ -318,15 +312,15 @@ describe("entry", () => { await page.addScriptTag({ url: `http://localhost:${port}/bar.js` }); await waitForConsoleLogFinished(consoleMessages); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it('should work with multiple entries and "dependOn"', async () => { + it('should work with multiple entries and "dependOn"', async (t) => { const compiler = webpack({ ...config, entry: { @@ -365,15 +359,15 @@ describe("entry", () => { await page.addScriptTag({ url: `http://localhost:${port}/foo.js` }); await waitForConsoleLogFinished(consoleMessages); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work with empty", async () => { + it("should work with empty", async (t) => { const compiler = webpack({ ...config, entry: {}, @@ -408,10 +402,8 @@ describe("entry", () => { waitUntil: "networkidle0", }); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); diff --git a/test/e2e/headers.test.js b/test/e2e/headers.test.js index efaddab452..ccd29ba352 100644 --- a/test/e2e/headers.test.js +++ b/test/e2e/headers.test.js @@ -1,11 +1,13 @@ -"use strict"; +import { afterEach, beforeEach, describe, it } from "node:test"; +import { expect } from "expect"; +import request from "supertest"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/simple-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; -const request = require("supertest"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/simple-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["headers-option"]; +const port = portsMap["headers-option"]; describe("headers option", () => { describe("as a string", () => { @@ -40,7 +42,7 @@ describe("headers option", () => { await server.stop(); }); - it("should handle GET request with headers", async () => { + it("should handle GET request with headers", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -53,17 +55,13 @@ describe("headers option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["x-foo"]).toMatchSnapshot( - "response headers x-foo", - ); + t.assert.snapshot(response.headers()["x-foo"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -108,7 +106,7 @@ describe("headers option", () => { await server.stop(); }); - it("should handle GET request with headers", async () => { + it("should handle GET request with headers", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -121,21 +119,15 @@ describe("headers option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["x-foo"]).toMatchSnapshot( - "response headers x-foo", - ); + t.assert.snapshot(response.headers()["x-foo"]); - expect(response.headers()["x-bar"]).toMatchSnapshot( - "response headers x-bar", - ); + t.assert.snapshot(response.headers()["x-bar"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -171,7 +163,7 @@ describe("headers option", () => { await server.stop(); }); - it("should handle GET request with headers as an array", async () => { + it("should handle GET request with headers as an array", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -184,17 +176,13 @@ describe("headers option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["x-bar"]).toMatchSnapshot( - "response headers x-bar", - ); + t.assert.snapshot(response.headers()["x-bar"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -230,7 +218,7 @@ describe("headers option", () => { await server.stop(); }); - it("should handle GET request with headers as a function", async () => { + it("should handle GET request with headers as a function", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -243,17 +231,13 @@ describe("headers option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["x-bar"]).toMatchSnapshot( - "response headers x-bar", - ); + t.assert.snapshot(response.headers()["x-bar"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -298,7 +282,7 @@ describe("headers option", () => { await server.stop(); }); - it("should handle GET request with headers", async () => { + it("should handle GET request with headers", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -311,21 +295,15 @@ describe("headers option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["x-foo"]).toMatchSnapshot( - "response headers x-foo", - ); + t.assert.snapshot(response.headers()["x-foo"]); - expect(response.headers()["x-bar"]).toMatchSnapshot( - "response headers x-bar", - ); + t.assert.snapshot(response.headers()["x-bar"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -364,7 +342,7 @@ describe("headers option", () => { await server.stop(); }); - it("should handle GET request with headers as a function", async () => { + it("should handle GET request with headers as a function", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -377,17 +355,13 @@ describe("headers option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["x-foo"]).toMatchSnapshot( - "response headers x-foo", - ); + t.assert.snapshot(response.headers()["x-foo"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -426,7 +400,7 @@ describe("headers option", () => { await server.stop(); }); - it("should handle HEAD request with headers", async () => { + it("should handle HEAD request with headers", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -439,14 +413,10 @@ describe("headers option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["x-foo"]).toMatchSnapshot( - "response headers x-foo", - ); - expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(response.headers()["x-foo"]); + t.assert.snapshot(response.status()); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); const responseForHead = await req.get("/"); diff --git a/test/e2e/history-api-fallback.test.js b/test/e2e/history-api-fallback.test.js index b6506e85af..b60401cf48 100644 --- a/test/e2e/history-api-fallback.test.js +++ b/test/e2e/history-api-fallback.test.js @@ -1,13 +1,18 @@ -"use strict"; - -const path = require("node:path"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config2 = require("../fixtures/historyapifallback-2-config/webpack.config"); -const config3 = require("../fixtures/historyapifallback-3-config/webpack.config"); -const config = require("../fixtures/historyapifallback-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["history-api-fallback-option"]; +import path from "node:path"; +import { afterEach, beforeEach, describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import { spyOn } from "jest-mock"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config2 from "../fixtures/historyapifallback-2-config/webpack.config.js"; +import config3 from "../fixtures/historyapifallback-3-config/webpack.config.js"; +import config from "../fixtures/historyapifallback-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap["history-api-fallback-option"]; describe("historyApiFallback option", () => { describe("as boolean", () => { @@ -42,7 +47,7 @@ describe("historyApiFallback option", () => { await server.stop(); }); - it("should handle GET request to directory", async () => { + it("should handle GET request to directory", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -55,19 +60,15 @@ describe("historyApiFallback option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -105,7 +106,7 @@ describe("historyApiFallback option", () => { await server.stop(); }); - it("should handle GET request to directory", async () => { + it("should handle GET request to directory", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -118,19 +119,15 @@ describe("historyApiFallback option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -172,7 +169,7 @@ describe("historyApiFallback option", () => { await server.stop(); }); - it("should handle GET request to directory", async () => { + it("should handle GET request to directory", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -185,22 +182,18 @@ describe("historyApiFallback option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should prefer static file over historyApiFallback", async () => { + it("should prefer static file over historyApiFallback", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -216,19 +209,15 @@ describe("historyApiFallback option", () => { }, ); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -267,7 +256,7 @@ describe("historyApiFallback option", () => { await server.stop(); }); - it("historyApiFallback should work and ignore static content", async () => { + it("historyApiFallback should work and ignore static content", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -280,19 +269,15 @@ describe("historyApiFallback option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -343,7 +328,7 @@ describe("historyApiFallback option", () => { await server.stop(); }); - it("historyApiFallback respect rewrites for index", async () => { + it("historyApiFallback respect rewrites for index", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -356,22 +341,18 @@ describe("historyApiFallback option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("historyApiFallback respect rewrites and shows index for unknown urls", async () => { + it("historyApiFallback respect rewrites and shows index for unknown urls", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -384,22 +365,18 @@ describe("historyApiFallback option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("historyApiFallback respect any other specified rewrites", async () => { + it("historyApiFallback respect any other specified rewrites", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -412,19 +389,15 @@ describe("historyApiFallback option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -438,7 +411,7 @@ describe("historyApiFallback option", () => { let consoleSpy; beforeEach(async () => { - consoleSpy = jest.spyOn(globalThis.console, "log"); + consoleSpy = spyOn(globalThis.console, "log"); compiler = webpack(config); @@ -467,7 +440,7 @@ describe("historyApiFallback option", () => { await server.stop(); }); - it("request to directory and log", async () => { + it("request to directory and log", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -480,13 +453,11 @@ describe("historyApiFallback option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); expect(consoleSpy).toHaveBeenCalledWith( "Rewriting", @@ -496,11 +467,9 @@ describe("historyApiFallback option", () => { "/bar.html", ); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -514,7 +483,7 @@ describe("historyApiFallback option", () => { let consoleSpy; beforeEach(async () => { - consoleSpy = jest.spyOn(globalThis.console, "log"); + consoleSpy = spyOn(globalThis.console, "log"); compiler = webpack(config); @@ -543,7 +512,7 @@ describe("historyApiFallback option", () => { await server.stop(); }); - it("request to directory and log", async () => { + it("request to directory and log", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -556,13 +525,11 @@ describe("historyApiFallback option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); expect(consoleSpy).toHaveBeenCalledWith( "Rewriting", @@ -572,11 +539,9 @@ describe("historyApiFallback option", () => { "/bar.html", ); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -616,7 +581,7 @@ describe("historyApiFallback option", () => { await server.stop(); }); - it("should take precedence over static files", async () => { + it("should take precedence over static files", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -629,22 +594,18 @@ describe("historyApiFallback option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should perform HEAD request in same way as GET", async () => { + it("should perform HEAD request in same way as GET", async (t) => { await page.goto(`http://localhost:${port}/foo`, { waitUntil: "networkidle0", }); @@ -659,13 +620,11 @@ describe("historyApiFallback option", () => { }; }); - expect(responseGet.contentType).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(responseGet.contentType); - expect(responseGet.statusText).toMatchSnapshot("response status"); + t.assert.snapshot(responseGet.statusText); - expect(responseGet.text).toMatchSnapshot("response text"); + t.assert.snapshot(responseGet.text); const responseHead = await page.evaluate(async () => { const response = await fetch("/foo", { method: "HEAD" }); diff --git a/test/e2e/host.test.js b/test/e2e/host.test.js index fe79392ca4..2aca81935f 100644 --- a/test/e2e/host.test.js +++ b/test/e2e/host.test.js @@ -1,11 +1,13 @@ -"use strict"; +import http from "node:http"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; -const http = require("node:http"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map").host; +const port = portsMap.host; const ipv4 = Server.findIp("v4", false); const ipv6 = Server.findIp("v6", false); @@ -71,7 +73,7 @@ describe("host", () => { ]; for (const host of hosts) { - it(`should work using "${host}" host and port as number`, async () => { + it(`should work using "${host}" host and port as number`, async (t) => { const compiler = webpack(config); const devServerOptions = { port }; @@ -134,18 +136,16 @@ describe("host", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work using "${host}" host and port as string`, async () => { + it(`should work using "${host}" host and port as string`, async (t) => { const compiler = webpack(config); const devServerOptions = { port: `${port}` }; @@ -208,18 +208,16 @@ describe("host", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work using "${host}" host and "auto" port`, async () => { + it(`should work using "${host}" host and "auto" port`, async (t) => { const compiler = webpack(config); process.env.WEBPACK_DEV_SERVER_BASE_PORT = port; @@ -286,11 +284,9 @@ describe("host", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } finally { delete process.env.WEBPACK_DEV_SERVER_BASE_PORT; @@ -301,7 +297,6 @@ describe("host", () => { } // TODO need test on error - // eslint-disable-next-line jest/no-commented-out-tests // it(`should throw an error on invalid host`, async () => { // const compiler = webpack(config); // const server = new Server({ port, host: "unknown.unknown" }, compiler); diff --git a/test/e2e/hot-and-live-reload.test.js b/test/e2e/hot-and-live-reload.test.js index 32e1f9dcb3..2fd17195e0 100644 --- a/test/e2e/hot-and-live-reload.test.js +++ b/test/e2e/hot-and-live-reload.test.js @@ -1,21 +1,22 @@ -/** - * @jest-environment node - */ - -"use strict"; - -const path = require("node:path"); -const fs = require("graceful-fs"); -const SockJS = require("sockjs-client"); -const webpack = require("webpack"); -const WebSocket = require("ws"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const multiCompilerConfig = require("../fixtures/multi-compiler-one-configuration/webpack.config"); -const reloadConfig = require("../fixtures/reload-config/webpack.config"); -const HTMLGeneratorPlugin = require("../helpers/html-generator-plugin"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["hot-and-live-reload"]; +import path from "node:path"; +import { afterEach, beforeEach, describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import fs from "graceful-fs"; +import { fn, spyOn } from "jest-mock"; +import webpack from "webpack"; +import WebSocket from "ws"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import multiCompilerConfig from "../fixtures/multi-compiler-one-configuration/webpack.config.js"; +import reloadConfig from "../fixtures/reload-config/webpack.config.js"; +import HTMLGeneratorPlugin from "../helpers/html-generator-plugin.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +const port = portsMap["hot-and-live-reload"]; const cssFilePath = path.resolve( __dirname, @@ -25,7 +26,6 @@ const cssFilePath = path.resolve( const INVALID_MESSAGE = "[webpack-dev-server] App updated. Recompiling..."; describe("hot and live reload", () => { - // "sockjs" client cannot add additional headers const modes = [ { title: "should work and refresh content using hot module replacement", @@ -133,70 +133,6 @@ describe("hot and live reload", () => { hot: true, }, }, - // "sockjs" web socket serve - { - title: - "should work and refresh content using hot module replacement when hot enabled", - options: { - allowedHosts: "all", - - webSocketServer: "sockjs", - hot: true, - }, - }, - { - title: - "should work and refresh content using hot module replacement when live reload enabled", - options: { - allowedHosts: "all", - - webSocketServer: "sockjs", - liveReload: true, - }, - }, - { - title: "should not refresh content when hot and no live reload disabled", - options: { - allowedHosts: "all", - - webSocketServer: "sockjs", - hot: false, - liveReload: false, - }, - }, - { - title: - "should work and refresh content using hot module replacement when live reload disabled and hot enabled", - options: { - allowedHosts: "all", - - webSocketServer: "sockjs", - liveReload: false, - hot: true, - }, - }, - { - title: - "should work and refresh content using live reload when live reload disabled and hot enabled", - options: { - allowedHosts: "all", - - webSocketServer: "sockjs", - liveReload: true, - hot: false, - }, - }, - { - title: - "should work and refresh content using hot module replacement when live reload and hot enabled", - options: { - allowedHosts: "all", - - webSocketServer: "sockjs", - liveReload: true, - hot: true, - }, - }, { title: 'should work and allow to disable hot module replacement using the "webpack-dev-server-hot=false"', @@ -229,8 +165,10 @@ describe("hot and live reload", () => { title: "should work with manual client setup", webpackOptions: { entry: [ - require.resolve("../../client-src/index.js"), - require.resolve("../fixtures/reload-config/foo.js"), + fileURLToPath(import.meta.resolve("../../client-src/index.js")), + fileURLToPath( + import.meta.resolve("../fixtures/reload-config/foo.js"), + ), ], }, options: { @@ -246,8 +184,10 @@ describe("hot and live reload", () => { webpackOptions: { entry: [ "webpack/hot/dev-server", - `${require.resolve("../../client-src/index.js")}?hot=true`, - require.resolve("../fixtures/reload-config/foo.js"), + `${fileURLToPath(import.meta.resolve("../../client-src/index.js"))}?hot=true`, + fileURLToPath( + import.meta.resolve("../fixtures/reload-config/foo.js"), + ), ], plugins: [ new webpack.HotModuleReplacementPlugin(), @@ -265,8 +205,10 @@ describe("hot and live reload", () => { "should work with manual client setup and allow to disable hot module replacement", webpackOptions: { entry: [ - `${require.resolve("../../client-src/index.js")}?hot=false`, - require.resolve("../fixtures/reload-config/foo.js"), + `${fileURLToPath(import.meta.resolve("../../client-src/index.js"))}?hot=false`, + fileURLToPath( + import.meta.resolve("../fixtures/reload-config/foo.js"), + ), ], }, options: { @@ -280,8 +222,10 @@ describe("hot and live reload", () => { "should work with manual client setup and allow to enable live reload", webpackOptions: { entry: [ - `${require.resolve("../../client-src/index.js")}?live-reload=true`, - require.resolve("../fixtures/reload-config/foo.js"), + `${fileURLToPath(import.meta.resolve("../../client-src/index.js"))}?live-reload=true`, + fileURLToPath( + import.meta.resolve("../fixtures/reload-config/foo.js"), + ), ], }, options: { @@ -295,8 +239,10 @@ describe("hot and live reload", () => { "should work with manual client setup and allow to disable live reload", webpackOptions: { entry: [ - `${require.resolve("../../client-src/index.js")}?live-reload=false`, - require.resolve("../fixtures/reload-config/foo.js"), + `${fileURLToPath(import.meta.resolve("../../client-src/index.js"))}?live-reload=false`, + fileURLToPath( + import.meta.resolve("../fixtures/reload-config/foo.js"), + ), ], }, options: { @@ -333,7 +279,7 @@ describe("hot and live reload", () => { : "default"; // eslint-disable-next-line no-loop-func - it(`${mode.title} (${webSocketServerTitle})`, async () => { + it(`${mode.title} (${webSocketServerTitle})`, async (t) => { const webpackOptions = { ...reloadConfig, ...mode.webpackOptions }; const compiler = webpack(webpackOptions); const testDevServerOptions = mode.options || {}; @@ -347,89 +293,44 @@ describe("hot and live reload", () => { testDevServerOptions.webSocketServer !== false; await new Promise((resolve) => { - const webSocketTransport = - typeof testDevServerOptions.webSocketServer !== "undefined" && - testDevServerOptions.webSocketServer !== false - ? testDevServerOptions.webSocketServer - : "ws"; - - if (webSocketTransport === "ws") { - const ws = new WebSocket( - `ws://localhost:${devServerOptions.port}/ws`, - { - headers: { - host: `localhost:${devServerOptions.port}`, - origin: `http://localhost:${devServerOptions.port}`, - }, - }, - ); - - let opened = false; - let received = false; - let errored = false; - - ws.on("error", (_error) => { - errored = true; - - ws.close(); - }); - - ws.on("open", () => { - opened = true; - }); - - ws.on("message", (data) => { - const message = JSON.parse(data); - - if (message.type === "ok") { - received = true; - - ws.close(); - } - }); + const ws = new WebSocket(`ws://localhost:${devServerOptions.port}/ws`, { + headers: { + host: `localhost:${devServerOptions.port}`, + origin: `http://localhost:${devServerOptions.port}`, + }, + }); - ws.on("close", () => { - if (opened && received && !errored) { - resolve(); - } else if (!webSocketServerLaunched && errored) { - resolve(); - } - }); - } else { - const sockjs = new SockJS( - `http://localhost:${devServerOptions.port}/ws`, - ); + let opened = false; + let received = false; + let errored = false; - let opened = false; - let received = false; - let errored = false; + ws.on("error", (_error) => { + errored = true; - sockjs.onerror = () => { - errored = true; - }; + ws.close(); + }); - sockjs.onopen = () => { - opened = true; - }; + ws.on("open", () => { + opened = true; + }); - sockjs.onmessage = ({ data }) => { - const message = JSON.parse(data); + ws.on("message", (data) => { + const message = JSON.parse(data); - if (message.type === "ok") { - received = true; + if (message.type === "ok") { + received = true; - sockjs.close(); - } - }; + ws.close(); + } + }); - sockjs.onclose = (event) => { - if (opened && received && !errored) { - resolve(); - } else if (event && event.reason === "Cannot connect to server") { - resolve(); - } - }; - } + ws.on("close", () => { + if (opened && received && !errored) { + resolve(); + } else if (!webSocketServerLaunched && errored) { + resolve(); + } + }); }); const launched = await runBrowser(); @@ -563,8 +464,8 @@ describe("hot and live reload", () => { expect(backgroundColorAfter).toBe("rgb(255, 0, 0)"); } - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); }); } }); @@ -594,7 +495,7 @@ describe("simple hot config HMR plugin", () => { await server.stop(); }); - it("should register the HMR plugin before compilation is complete", async () => { + it("should register the HMR plugin before compilation is complete", async (t) => { let pluginFound = false; compiler.hooks.compilation.intercept({ @@ -625,13 +526,11 @@ describe("simple hot config HMR plugin", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -660,7 +559,7 @@ describe("simple hot config HMR plugin with already added HMR plugin", () => { await server.stop(); }); - it("should register the HMR plugin before compilation is complete", async () => { + it("should register the HMR plugin before compilation is complete", async (t) => { let pluginFound = false; compiler.hooks.compilation.intercept({ @@ -692,13 +591,11 @@ describe("simple hot config HMR plugin with already added HMR plugin", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -715,15 +612,16 @@ describe("simple config with already added HMR plugin", () => { plugins: [...config.plugins, new webpack.HotModuleReplacementPlugin()], }); - loggerWarnSpy = jest.fn(); + loggerWarnSpy = fn(); - getInfrastructureLoggerSpy = jest - .spyOn(compiler, "getInfrastructureLogger") - .mockImplementation(() => ({ - warn: loggerWarnSpy, - info: () => {}, - log: () => {}, - })); + getInfrastructureLoggerSpy = spyOn( + compiler, + "getInfrastructureLogger", + ).mockImplementation(() => ({ + warn: loggerWarnSpy, + info: () => {}, + log: () => {}, + })); }); afterEach(() => { @@ -790,7 +688,7 @@ describe("multi compiler hot config HMR plugin", () => { await server.stop(); }); - it("should register the HMR plugin before compilation is complete", async () => { + it("should register the HMR plugin before compilation is complete", async (t) => { let pluginFound = false; compiler.compilers[0].hooks.compilation.intercept({ @@ -821,13 +719,11 @@ describe("multi compiler hot config HMR plugin", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -853,7 +749,7 @@ describe("hot disabled HMR plugin", () => { await server.stop(); }); - it("should NOT register the HMR plugin before compilation is complete", async () => { + it("should NOT register the HMR plugin before compilation is complete", async (t) => { let pluginFound = false; compiler.hooks.compilation.intercept({ @@ -884,12 +780,10 @@ describe("hot disabled HMR plugin", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); diff --git a/test/e2e/ipc.test.js b/test/e2e/ipc.test.js index 735b0e652f..553db82a84 100644 --- a/test/e2e/ipc.test.js +++ b/test/e2e/ipc.test.js @@ -1,24 +1,26 @@ -"use strict"; - -const http = require("node:http"); -const net = require("node:net"); -const os = require("node:os"); -const path = require("node:path"); -const httpProxy = require("http-proxy"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const sessionSubscribe = require("../helpers/session-subscribe"); -const port1 = require("../ports-map").ipc; - -const webSocketServers = ["ws", "sockjs"]; +import http from "node:http"; +import net from "node:net"; +import os from "node:os"; +import path from "node:path"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import httpProxy from "http-proxy"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import sessionSubscribe from "../helpers/session-subscribe.js"; +import portsMap from "../ports-map.js"; + +const port1 = portsMap.ipc; + +const webSocketServers = ["ws"]; describe("web socket server URL", () => { for (const webSocketServer of webSocketServers) { - const websocketURLProtocol = webSocketServer === "ws" ? "ws" : "http"; + const websocketURLProtocol = webSocketServer; - it(`should work with the "ipc" option using "true" value ("${webSocketServer}")`, async () => { + it(`should work with the "ipc" option using "true" value ("${webSocketServer}")`, async (t) => { const devServerHost = "localhost"; const proxyHost = devServerHost; const proxyPort = port1; @@ -72,27 +74,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://${proxyHost}:${proxyPort}/`, { waitUntil: "networkidle0", @@ -103,10 +97,8 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://${devServerHost}:${proxyPort}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -115,7 +107,7 @@ describe("web socket server URL", () => { } }); - it(`should work with the "ipc" option using "string" value ("${webSocketServer}")`, async () => { + it(`should work with the "ipc" option using "string" value ("${webSocketServer}")`, async (t) => { const isWindows = process.platform === "win32"; const pipePrefix = isWindows ? "\\\\.\\pipe\\" : os.tmpdir(); const pipeName = `webpack-dev-server.${process.pid}-1.sock`; @@ -174,27 +166,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://${proxyHost}:${proxyPort}/`, { waitUntil: "networkidle0", @@ -205,10 +189,8 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://${devServerHost}:${proxyPort}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -218,8 +200,8 @@ describe("web socket server URL", () => { }); // TODO un skip after implement new API - // eslint-disable-next-line jest/no-disabled-tests - it.skip(`should work with the "ipc" option using "string" value and remove old ("${webSocketServer}")`, async () => { + + it.skip(`should work with the "ipc" option using "string" value and remove old ("${webSocketServer}")`, async (t) => { const isWindows = process.platform === "win32"; const localRelative = path.relative(process.cwd(), `${os.tmpdir()}/`); const pipePrefix = isWindows ? "\\\\.\\pipe\\" : localRelative; @@ -294,27 +276,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://${proxyHost}:${proxyPort}/`, { waitUntil: "networkidle0", @@ -325,10 +299,8 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://${devServerHost}:${proxyPort}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); diff --git a/test/e2e/lazy-compilation.test.js b/test/e2e/lazy-compilation.test.js index 8bb5390fa5..161850eb87 100644 --- a/test/e2e/lazy-compilation.test.js +++ b/test/e2e/lazy-compilation.test.js @@ -1,16 +1,17 @@ -"use strict"; +import { describe, it } from "node:test"; -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const lazyCompilationMultipleEntriesConfig = require("../fixtures/lazy-compilation-multiple-entries/webpack.config"); -const lazyCompilationSingleEntryConfig = require("../fixtures/lazy-compilation-single-entry/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["lazy-compilation"]; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import lazyCompilationMultipleEntriesConfig from "../fixtures/lazy-compilation-multiple-entries/webpack.config.js"; +import lazyCompilationSingleEntryConfig from "../fixtures/lazy-compilation-single-entry/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const port = portsMap["lazy-compilation"]; -/* eslint-disable jest/no-disabled-tests */ describe("lazy compilation", () => { - // TODO jest freeze due webpack do not close `eventsource`, we should uncomment this after fix it on webpack side - it.skip("should work with single entry", async () => { + // TODO freezes because webpack doesn't close `eventsource`, uncomment once fixed upstream + it.skip("should work with single entry", async (t) => { const compiler = webpack(lazyCompilationSingleEntryConfig); const server = new Server({ port }, compiler); @@ -43,15 +44,15 @@ describe("lazy compilation", () => { }, 100); }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it.skip("should work with multiple entries", async () => { + it.skip("should work with multiple entries", async (t) => { const compiler = webpack(lazyCompilationMultipleEntriesConfig); const server = new Server({ port }, compiler); @@ -99,8 +100,8 @@ describe("lazy compilation", () => { }, 100); }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); diff --git a/test/e2e/logging.test.js b/test/e2e/logging.test.js index b00d2fa783..33457fb8ab 100644 --- a/test/e2e/logging.test.js +++ b/test/e2e/logging.test.js @@ -1,19 +1,20 @@ -"use strict"; +import path from "node:path"; +import { describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; -const path = require("node:path"); -const fs = require("graceful-fs"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const HTMLGeneratorPlugin = require("../helpers/html-generator-plugin"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map").logging; +import fs from "graceful-fs"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import HTMLGeneratorPlugin from "../helpers/html-generator-plugin.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap.logging; describe("logging", () => { - const webSocketServers = [ - { webSocketServer: "ws" }, - { webSocketServer: "sockjs" }, - ]; + const webSocketServers = [{ webSocketServer: "ws" }]; const cases = [ { @@ -192,7 +193,7 @@ describe("logging", () => { for (const testCase of cases) { it(`${testCase.title} (${ webSocketServer.webSocketServer || "default" - })`, async () => { + })`, async (t) => { const compiler = webpack({ ...config, ...testCase.webpackOptions }); const devServerOptions = { port, @@ -226,7 +227,7 @@ describe("logging", () => { }); } - expect( + t.assert.snapshot( consoleMessages.map((message) => message .text() @@ -236,7 +237,7 @@ describe("logging", () => { "", ), ), - ).toMatchSnapshot(); + ); } finally { await browser.close(); await server.stop(); diff --git a/test/e2e/mime-types.test.js b/test/e2e/mime-types.test.js index ee71894d70..4509f3e10f 100644 --- a/test/e2e/mime-types.test.js +++ b/test/e2e/mime-types.test.js @@ -1,10 +1,12 @@ -"use strict"; +import { afterEach, beforeEach, describe, it } from "node:test"; -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/mime-types-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["mime-types-option"]; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/mime-types-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const port = portsMap["mime-types-option"]; describe("mimeTypes option", () => { describe("as an object with a remapped type", () => { @@ -43,7 +45,7 @@ describe("mimeTypes option", () => { await server.stop(); }); - it("should request file with different js mime type", async () => { + it("should request file with different js mime type", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -56,17 +58,13 @@ describe("mimeTypes option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -106,7 +104,7 @@ describe("mimeTypes option", () => { await server.stop(); }); - it("should request file with different js mime type", async () => { + it("should request file with different js mime type", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -119,17 +117,13 @@ describe("mimeTypes option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); }); diff --git a/test/e2e/module-federation.test.js b/test/e2e/module-federation.test.js index f1fa63144f..18c26a67c3 100644 --- a/test/e2e/module-federation.test.js +++ b/test/e2e/module-federation.test.js @@ -1,14 +1,16 @@ -"use strict"; - -const requireFromString = require("require-from-string"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const simpleConfig = require("../fixtures/module-federation-config/webpack.config"); -const multiConfig = require("../fixtures/module-federation-config/webpack.multi.config"); -const objectEntryConfig = require("../fixtures/module-federation-config/webpack.object-entry.config"); -const pluginConfig = require("../fixtures/module-federation-config/webpack.plugin"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["module-federation"]; +import { afterEach, beforeEach, describe, it } from "node:test"; +import { expect } from "expect"; +import requireFromString from "require-from-string"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import simpleConfig from "../fixtures/module-federation-config/webpack.config.js"; +import multiConfig from "../fixtures/module-federation-config/webpack.multi.config.js"; +import objectEntryConfig from "../fixtures/module-federation-config/webpack.object-entry.config.js"; +import pluginConfig from "../fixtures/module-federation-config/webpack.plugin.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const port = portsMap["module-federation"]; describe("Module federation", () => { describe("should work with simple multi-entry config", () => { @@ -36,7 +38,7 @@ describe("Module federation", () => { await server.stop(); }); - it("should use the last entry export", async () => { + it("should use the last entry export", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -59,13 +61,11 @@ describe("Module federation", () => { exports = requireFromString(textContent); }).not.toThrow(); - expect(exports).toBe("entry2"); + expect(exports.default).toBe("entry2"); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -94,7 +94,7 @@ describe("Module federation", () => { await server.stop(); }); - it("should use the last entry export", async () => { + it("should use the last entry export", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -117,16 +117,14 @@ describe("Module federation", () => { exports = requireFromString(textContent); }).not.toThrow(); - expect(exports).toBe("entry2"); + expect(exports.default).toBe("entry2"); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should support the named entry export", async () => { + it("should support the named entry export", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -149,13 +147,11 @@ describe("Module federation", () => { exports = requireFromString(textContent); }).not.toThrow(); - expect(exports).toBe("entry1"); + expect(exports.default).toBe("entry1"); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -184,7 +180,7 @@ describe("Module federation", () => { await server.stop(); }); - it("should use the last entry export", async () => { + it("should use the last entry export", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -207,13 +203,11 @@ describe("Module federation", () => { exports = requireFromString(textContent); }).not.toThrow(); - expect(exports).toBe("entry2"); + expect(exports.default).toBe("entry2"); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -242,7 +236,7 @@ describe("Module federation", () => { await server.stop(); }); - it("should contain hot script in remoteEntry.js", async () => { + it("should contain hot script in remoteEntry.js", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -262,14 +256,12 @@ describe("Module federation", () => { expect(remoteEntryTextContent).toMatch(/webpack\/hot\/dev-server\.js/); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should contain hot script in main.js", async () => { + it("should contain hot script in main.js", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -286,11 +278,9 @@ describe("Module federation", () => { expect(mainEntryTextContent).toMatch(/webpack\/hot\/dev-server\.js/); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); }); diff --git a/test/e2e/multi-compiler.test.js b/test/e2e/multi-compiler.test.js index 73879d5323..34a5e2eff4 100644 --- a/test/e2e/multi-compiler.test.js +++ b/test/e2e/multi-compiler.test.js @@ -1,17 +1,21 @@ -"use strict"; - -const path = require("node:path"); -const fs = require("graceful-fs"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const oneWebTargetConfiguration = require("../fixtures/multi-compiler-one-configuration/webpack.config"); -const twoWebTargetConfiguration = require("../fixtures/multi-compiler-two-configurations/webpack.config"); -const universalConfiguration = require("../fixtures/universal-compiler-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["multi-compiler"]; +import path from "node:path"; +import { describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import fs from "graceful-fs"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import oneWebTargetConfiguration from "../fixtures/multi-compiler-one-configuration/webpack.config.js"; +import twoWebTargetConfiguration from "../fixtures/multi-compiler-two-configurations/webpack.config.js"; +import universalConfiguration from "../fixtures/universal-compiler-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap["multi-compiler"]; describe("multi compiler", () => { - it("should work with one web target configuration and do nothing", async () => { + it("should work with one web target configuration and do nothing", async (t) => { const compiler = webpack(oneWebTargetConfiguration); const devServerOptions = { port, @@ -38,15 +42,15 @@ describe("multi compiler", () => { waitUntil: "networkidle0", }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work with web target configurations and do nothing", async () => { + it("should work with web target configurations and do nothing", async (t) => { const compiler = webpack(twoWebTargetConfiguration); const devServerOptions = { port, @@ -74,8 +78,8 @@ describe("multi compiler", () => { waitUntil: "networkidle0", }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); pageErrors = []; consoleMessages = []; @@ -84,15 +88,15 @@ describe("multi compiler", () => { waitUntil: "networkidle0", }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries", async () => { + it("should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries", async (t) => { const compiler = webpack(twoWebTargetConfiguration); const devServerOptions = { port, @@ -144,8 +148,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); pageErrors = []; consoleMessages = []; @@ -158,8 +162,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); @@ -169,7 +173,7 @@ describe("multi compiler", () => { } }); - it("should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries", async () => { + it("should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries", async (t) => { const compiler = webpack(twoWebTargetConfiguration); const devServerOptions = { port, @@ -221,8 +225,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); pageErrors = []; consoleMessages = []; @@ -235,8 +239,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); @@ -246,7 +250,7 @@ describe("multi compiler", () => { } }); - it("should work with web target configurations when only live reload is enabled, and do live reload when changing own entries", async () => { + it("should work with web target configurations when only live reload is enabled, and do live reload when changing own entries", async (t) => { const compiler = webpack(twoWebTargetConfiguration); const devServerOptions = { port, @@ -290,8 +294,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); pageErrors = []; consoleMessages = []; @@ -304,8 +308,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); @@ -315,7 +319,7 @@ describe("multi compiler", () => { } }); - it("should work with web target configurations when only live reload is enabled and do live reload when changing other entries", async () => { + it("should work with web target configurations when only live reload is enabled and do live reload when changing other entries", async (t) => { const compiler = webpack(twoWebTargetConfiguration); const devServerOptions = { port, @@ -359,8 +363,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); pageErrors = []; consoleMessages = []; @@ -373,8 +377,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); @@ -384,7 +388,7 @@ describe("multi compiler", () => { } }); - it("should work with universal configuration and do nothing", async () => { + it("should work with universal configuration and do nothing", async (t) => { const compiler = webpack(universalConfiguration); const devServerOptions = { port, @@ -426,11 +430,11 @@ describe("multi compiler", () => { await server.stop(); } - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); }); - it("should work with universal configuration when hot and live reloads are enabled, and do hot reload for browser compiler by default when browser entry changed", async () => { + it("should work with universal configuration when hot and live reloads are enabled, and do hot reload for browser compiler by default when browser entry changed", async (t) => { const compiler = webpack(universalConfiguration); const devServerOptions = { port, @@ -497,8 +501,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); @@ -508,7 +512,7 @@ describe("multi compiler", () => { } }); - it("should work with universal configuration when only hot reload is enabled, and do hot reload for browser compiler when browser entry changed", async () => { + it("should work with universal configuration when only hot reload is enabled, and do hot reload for browser compiler when browser entry changed", async (t) => { const compiler = webpack(universalConfiguration); const devServerOptions = { port, @@ -570,8 +574,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); @@ -580,7 +584,7 @@ describe("multi compiler", () => { } }); - it("should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries", async () => { + it("should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries", async (t) => { const compiler = webpack(universalConfiguration); const devServerOptions = { port, @@ -639,8 +643,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); pageErrors = []; consoleMessages = []; @@ -656,8 +660,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); @@ -667,7 +671,7 @@ describe("multi compiler", () => { } }); - it("should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries", async () => { + it("should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries", async (t) => { const compiler = webpack(universalConfiguration); const devServerOptions = { port, @@ -726,8 +730,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); pageErrors = []; consoleMessages = []; @@ -743,8 +747,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); diff --git a/test/e2e/on-listening.test.js b/test/e2e/on-listening.test.js index 1e2be08a9d..5edabb77e0 100644 --- a/test/e2e/on-listening.test.js +++ b/test/e2e/on-listening.test.js @@ -1,10 +1,12 @@ -"use strict"; +import { afterEach, beforeEach, describe, it } from "node:test"; +import { expect } from "expect"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["on-listening-option"]; +const port = portsMap["on-listening-option"]; describe("onListening option", () => { let compiler; @@ -58,7 +60,7 @@ describe("onListening option", () => { await server.stop(); }); - it("should handle GET request to /listening/some/path route", async () => { + it("should handle GET request to /listening/some/path route", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -76,22 +78,18 @@ describe("onListening option", () => { expect(onListeningIsRunning).toBe(true); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should handle POST request to /listening/some/path route", async () => { + it("should handle POST request to /listening/some/path route", async (t) => { await page.setRequestInterception(true); page @@ -116,18 +114,14 @@ describe("onListening option", () => { expect(onListeningIsRunning).toBe(true); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); diff --git a/test/e2e/options-middleware.test.js b/test/e2e/options-middleware.test.js index 1bc05cd64b..ebfa2a0866 100644 --- a/test/e2e/options-middleware.test.js +++ b/test/e2e/options-middleware.test.js @@ -1,11 +1,13 @@ -"use strict"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import Express from "express"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; -const Express = require("express"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["options-request-response"]; +const port = portsMap["options-request-response"]; const createWaiting = () => { let resolve; @@ -92,7 +94,7 @@ describe("handle options-request correctly", () => { htmlUrl, ); - expect(responseStatus.sort()).toEqual([200, 204]); + expect(responseStatus.toSorted()).toEqual([200, 204]); } finally { await browser.close(); await server.stop(); diff --git a/test/e2e/overlay.test.js b/test/e2e/overlay.test.js index be3c059233..61c4329881 100644 --- a/test/e2e/overlay.test.js +++ b/test/e2e/overlay.test.js @@ -1,14 +1,20 @@ -"use strict"; - -const path = require("node:path"); -const fs = require("graceful-fs"); -const waitForExpect = require("wait-for-expect"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const trustedTypesConfig = require("../fixtures/overlay-config/trusted-types.webpack.config"); -const config = require("../fixtures/overlay-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map").overlay; +import path from "node:path"; +import { describe, it, mock } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import fs from "graceful-fs"; +import { fn } from "jest-mock"; +import { format } from "prettier"; +import waitForExpect from "wait-for-expect"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import trustedTypesConfig from "../fixtures/overlay-config/trusted-types.webpack.config.js"; +import config from "../fixtures/overlay-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap.overlay; class ErrorPlugin { constructor(message, skipCounter) { @@ -68,20 +74,8 @@ const delay = (ms) => setTimeout(resolve, ms); }); -let prettier; -let prettierHTML; -let prettierCSS; - describe("overlay", () => { - beforeAll(async () => { - // Due problems with ESM modules for Node.js@18 - // TODO replace it on import/require when Node.js@18 will be dropped - prettier = require("../../node_modules/prettier/standalone"); - prettierHTML = require("../../node_modules/prettier/plugins/html"); - prettierCSS = require("../../node_modules/prettier/plugins/postcss"); - }); - - it("should show a warning for initial compilation", async () => { + it("should show a warning for initial compilation", async (t) => { const compiler = webpack(config); new WarningPlugin().apply(compiler); @@ -110,25 +104,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should show an error for initial compilation", async () => { + it("should show an error for initial compilation", async (t) => { const compiler = webpack(config); new ErrorPlugin().apply(compiler); @@ -157,25 +149,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should show a warning and error for initial compilation", async () => { + it("should show a warning and error for initial compilation", async (t) => { const compiler = webpack(config); new WarningPlugin().apply(compiler); @@ -208,25 +198,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should show an ansi formatted error for initial compilation", async () => { + it("should show an ansi formatted error for initial compilation", async (t) => { const compiler = webpack(config); new ErrorPlugin( @@ -257,25 +245,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should show a warning and error for initial compilation and protects against xss", async () => { + it("should show a warning and error for initial compilation and protects against xss", async (t) => { const compiler = webpack(config); new WarningPlugin("strong").apply(compiler); @@ -305,25 +291,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should not show initially, then show on an error, then hide on fix", async () => { + it("should not show initially, then show on an error, then hide on fix", async (t) => { const compiler = webpack(config); const devServerOptions = { port, @@ -343,12 +327,11 @@ describe("overlay", () => { let overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html initial"); + ); const pathToFile = path.resolve( __dirname, @@ -368,18 +351,16 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html with error"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); fs.writeFileSync(pathToFile, originalCode); @@ -391,19 +372,18 @@ describe("overlay", () => { overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html after fix error"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should not show initially, then show on an error, then show other error, then hide on fix", async () => { + it("should not show initially, then show on an error, then show other error, then hide on fix", async (t) => { const compiler = webpack(config); const devServerOptions = { port, @@ -423,12 +403,11 @@ describe("overlay", () => { let overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html initial"); + ); const pathToFile = path.resolve( __dirname, @@ -448,18 +427,16 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html with error"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); fs.writeFileSync(pathToFile, "`;a"); @@ -474,18 +451,16 @@ describe("overlay", () => { overlayFrame = await overlayHandle.contentFrame(); overlayHtml = await overlayFrame.evaluate(() => document.body.outerHTML); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html with other error"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); fs.writeFileSync(pathToFile, originalCode); @@ -497,19 +472,18 @@ describe("overlay", () => { overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html after fix error"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should not show initially, then show on an error and allow to close", async () => { + it("should not show initially, then show on an error and allow to close", async (t) => { const compiler = webpack(config); const devServerOptions = { port, @@ -529,12 +503,11 @@ describe("overlay", () => { let overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html initial"); + ); const pathToFile = path.resolve( __dirname, @@ -554,18 +527,16 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html with error"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); const frame = await page .frames() @@ -583,12 +554,11 @@ describe("overlay", () => { overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html after close"); + ); fs.writeFileSync(pathToFile, originalCode); } finally { @@ -598,8 +568,10 @@ describe("overlay", () => { }); it("should open editor when error with file info is clicked", async () => { - const mockLaunchEditorCb = jest.fn(); - jest.mock("launch-editor", () => mockLaunchEditorCb); + const mockLaunchEditorCb = fn(); + const launchEditorMock = mock.module("launch-editor", { + defaultExport: mockLaunchEditorCb, + }); const compiler = webpack(config); const devServerOptions = { @@ -642,10 +614,11 @@ describe("overlay", () => { } finally { await browser.close(); await server.stop(); + launchEditorMock.restore(); } }); - it('should not show a warning when "client.overlay" is "false"', async () => { + it('should not show a warning when "client.overlay" is "false"', async (t) => { const compiler = webpack(config); new WarningPlugin().apply(compiler); @@ -674,19 +647,18 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); + ); } finally { await browser.close(); await server.stop(); } }); - it('should not show a warning when "client.overlay.warnings" is "false"', async () => { + it('should not show a warning when "client.overlay.warnings" is "false"', async (t) => { const compiler = webpack(config); new WarningPlugin().apply(compiler); @@ -717,12 +689,11 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); + ); } finally { await browser.close(); await server.stop(); @@ -771,7 +742,7 @@ describe("overlay", () => { } }); - it("should show warning when it is not filtered", async () => { + it("should show warning when it is not filtered", async (t) => { const compiler = webpack(config); new WarningPlugin("Unfiltered warning").apply(compiler); @@ -807,25 +778,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it('should show a warning when "client.overlay" is "true"', async () => { + it('should show a warning when "client.overlay" is "true"', async (t) => { const compiler = webpack(config); new WarningPlugin().apply(compiler); @@ -857,25 +826,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it('should show a warning when "client.overlay.warnings" is "true"', async () => { + it('should show a warning when "client.overlay.warnings" is "true"', async (t) => { const compiler = webpack(config); new WarningPlugin().apply(compiler); @@ -909,25 +876,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it('should show a warning when "client.overlay.errors" is "true"', async () => { + it('should show a warning when "client.overlay.errors" is "true"', async (t) => { const compiler = webpack(config); new WarningPlugin().apply(compiler); @@ -961,25 +926,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it('should not show an error when "client.overlay" is "false"', async () => { + it('should not show an error when "client.overlay" is "false"', async (t) => { const compiler = webpack(config); new ErrorPlugin().apply(compiler); @@ -1008,19 +971,18 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); + ); } finally { await browser.close(); await server.stop(); } }); - it('should not show an error when "client.overlay.errors" is "false"', async () => { + it('should not show an error when "client.overlay.errors" is "false"', async (t) => { const compiler = webpack(config); new ErrorPlugin().apply(compiler); @@ -1051,12 +1013,11 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); + ); } finally { await browser.close(); await server.stop(); @@ -1106,7 +1067,7 @@ describe("overlay", () => { } }); - it("should show error when it is not filtered", async () => { + it("should show error when it is not filtered", async (t) => { const compiler = webpack(config); new ErrorPlugin("Unfiltered error").apply(compiler); @@ -1142,25 +1103,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it('should show an error when "client.overlay" is "true"', async () => { + it('should show an error when "client.overlay" is "true"', async (t) => { const compiler = webpack(config); new ErrorPlugin().apply(compiler); @@ -1192,25 +1151,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should show overlay when Trusted Types are enabled", async () => { + it("should show overlay when Trusted Types are enabled", async (t) => { const compiler = webpack(trustedTypesConfig); new ErrorPlugin().apply(compiler); @@ -1255,25 +1212,23 @@ describe("overlay", () => { /requires 'TrustedHTML' assignment/.test(item), ), ).toHaveLength(0); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should show overlay when Trusted Types are enabled and the \"require-trusted-types-for 'script'\" header was used", async () => { + it("should show overlay when Trusted Types are enabled and the \"require-trusted-types-for 'script'\" header was used", async (t) => { const compiler = webpack(trustedTypesConfig); new ErrorPlugin().apply(compiler); @@ -1328,25 +1283,23 @@ describe("overlay", () => { /requires 'TrustedHTML' assignment/.test(item), ), ).toHaveLength(0); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should not show overlay when Trusted Types are enabled, but policy is not allowed", async () => { + it("should not show overlay when Trusted Types are enabled, but policy is not allowed", async (t) => { const compiler = webpack(trustedTypesConfig); new ErrorPlugin().apply(compiler); @@ -1376,19 +1329,18 @@ describe("overlay", () => { const pageHtml = await page.evaluate(() => document.body.outerHTML); const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); + ); } finally { await browser.close(); await server.stop(); } }); - it('should show an error when "client.overlay.errors" is "true"', async () => { + it('should show an error when "client.overlay.errors" is "true"', async (t) => { const compiler = webpack(config); new ErrorPlugin().apply(compiler); @@ -1422,25 +1374,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it('should show an error when "client.overlay.warnings" is "true"', async () => { + it('should show an error when "client.overlay.warnings" is "true"', async (t) => { const compiler = webpack(config); new WarningPlugin().apply(compiler); @@ -1474,25 +1424,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should show a warning and hide them after closing connection", async () => { + it("should show a warning and hide them after closing connection", async (t) => { const compiler = webpack(config); new WarningPlugin().apply(compiler); @@ -1525,18 +1473,16 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); await server.stop(); @@ -1554,18 +1500,18 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtmlAfterClose, { + t.assert.snapshot( + await format(pageHtmlAfterClose, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); + ); } finally { await browser.close(); + await server.stop(); } }); - it("should show an error after invalidation", async () => { + it("should show an error after invalidation", async (t) => { const compiler = webpack(config); new ErrorPlugin("Error from compilation", 1).apply(compiler); @@ -1608,25 +1554,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should show a warning after invalidation", async () => { + it("should show a warning after invalidation", async (t) => { const compiler = webpack(config); new WarningPlugin("Warning from compilation", 1).apply(compiler); @@ -1669,25 +1613,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); - expect( - await prettier.format(overlayHtml, { + ); + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should show error for uncaught runtime error", async () => { + it("should show error for uncaught runtime error", async (t) => { const compiler = webpack(config); const server = new Server( @@ -1721,12 +1663,11 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(overlayHtml, { + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); @@ -1775,7 +1716,7 @@ describe("overlay", () => { } }); - it("should show error for uncaught promise rejection", async () => { + it("should show error for uncaught promise rejection", async (t) => { const compiler = webpack(config); const server = new Server( @@ -1811,12 +1752,11 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(overlayHtml, { + t.assert.snapshot( + await format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); @@ -1912,7 +1852,7 @@ describe("overlay", () => { } }); - it('should show overlay when "Content-Security-Policy" is "default-src \'self\'" was used', async () => { + it('should show overlay when "Content-Security-Policy" is "default-src \'self\'" was used', async (t) => { const compiler = webpack({ ...config, devtool: false }); new ErrorPlugin().apply(compiler); @@ -1953,24 +1893,22 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( - await prettier.format(pageHtml, { + t.assert.snapshot( + await format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), - ).toMatchSnapshot("page html"); - expect( - await prettier.format( + ); + t.assert.snapshot( + await format( overlayHtml.replace( /", ), { parser: "html", - plugins: [prettierHTML, prettierCSS], }, ), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); diff --git a/test/e2e/port.test.js b/test/e2e/port.test.js index b7824a49e9..4930453eca 100644 --- a/test/e2e/port.test.js +++ b/test/e2e/port.test.js @@ -1,10 +1,12 @@ -"use strict"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const { port } = require("../ports-map"); +const { port } = portsMap; describe("port", () => { const ports = [ @@ -20,7 +22,7 @@ describe("port", () => { ]; for (const testedPort of ports) { - it(`should work using "${testedPort}" port `, async () => { + it(`should work using "${testedPort}" port `, async (t) => { const compiler = webpack(config); const devServerOptions = {}; @@ -89,10 +91,8 @@ describe("port", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); diff --git a/test/e2e/progress.test.js b/test/e2e/progress.test.js index 3f922d98c0..c6d7d4dfa3 100644 --- a/test/e2e/progress.test.js +++ b/test/e2e/progress.test.js @@ -1,12 +1,16 @@ -"use strict"; - -const path = require("node:path"); -const fs = require("graceful-fs"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const reloadConfig = require("../fixtures/reload-config-2/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map").progress; +import path from "node:path"; +import { describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import fs from "graceful-fs"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import reloadConfig from "../fixtures/reload-config-2/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap.progress; const cssFilePath = path.resolve( __dirname, diff --git a/test/e2e/range-header.test.js b/test/e2e/range-header.test.js index a1237b583b..45722b7372 100644 --- a/test/e2e/range-header.test.js +++ b/test/e2e/range-header.test.js @@ -1,16 +1,18 @@ -"use strict"; +import { after, before, describe, it } from "node:test"; +import { expect } from "expect"; +import request from "supertest"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/static-config/webpack.config.js"; +import portsMap from "../ports-map.js"; -const request = require("supertest"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/static-config/webpack.config"); -const port = require("../ports-map")["range-header"]; +const port = portsMap["range-header"]; describe("'Range' header", () => { let compiler; let server; - beforeAll(async () => { + before(async () => { compiler = webpack(config); server = new Server({ port }, compiler); @@ -18,7 +20,7 @@ describe("'Range' header", () => { await server.start(); }); - afterAll(async () => { + after(async () => { await server.stop(); }); diff --git a/test/e2e/server-and-client-transport.test.js b/test/e2e/server-and-client-transport.test.js index 763a4be353..5e7f1e7542 100644 --- a/test/e2e/server-and-client-transport.test.js +++ b/test/e2e/server-and-client-transport.test.js @@ -1,17 +1,18 @@ -"use strict"; - -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const WebsocketServer = require("../../lib/servers/WebsocketServer"); -const customConfig = require("../fixtures/provide-plugin-custom/webpack.config"); -const defaultConfig = require("../fixtures/provide-plugin-default/webpack.config"); -const sockjsConfig = require("../fixtures/provide-plugin-sockjs-config/webpack.config"); -const wsConfig = require("../fixtures/provide-plugin-ws-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["server-and-client-transport"]; +import { describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import WebsocketServer from "../../lib/servers/WebsocketServer.js"; +import defaultConfig from "../fixtures/provide-plugin-default/webpack.config.js"; +import wsConfig from "../fixtures/provide-plugin-ws-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const port = portsMap["server-and-client-transport"]; describe("server and client transport", () => { - it('should use default web socket server ("ws")', async () => { + it('should use default web socket server ("ws")', async (t) => { const compiler = webpack(defaultConfig); const devServerOptions = { port, @@ -38,16 +39,14 @@ describe("server and client transport", () => { ); expect(isCorrectTransport).toBe(true); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot(); + t.assert.snapshot(consoleMessages.map((message) => message.text())); } finally { await browser.close(); await server.stop(); } }); - it('should use "ws" web socket server when specify "ws" value', async () => { + it('should use "ws" web socket server when specify "ws" value', async (t) => { const compiler = webpack(defaultConfig); const devServerOptions = { port, @@ -75,16 +74,14 @@ describe("server and client transport", () => { ); expect(isCorrectTransport).toBe(true); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot(); + t.assert.snapshot(consoleMessages.map((message) => message.text())); } finally { await browser.close(); await server.stop(); } }); - it('should use "ws" web socket server when specify "ws" value using object', async () => { + it('should use "ws" web socket server when specify "ws" value using object', async (t) => { const compiler = webpack(defaultConfig); const devServerOptions = { port, @@ -114,92 +111,14 @@ describe("server and client transport", () => { ); expect(isCorrectTransport).toBe(true); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot(); + t.assert.snapshot(consoleMessages.map((message) => message.text())); } finally { await browser.close(); await server.stop(); } }); - it('should use "sockjs" web socket server when specify "sockjs" value', async () => { - const compiler = webpack(sockjsConfig); - const devServerOptions = { - port, - webSocketServer: "sockjs", - }; - const server = new Server(devServerOptions, compiler); - - await server.start(); - - const { page, browser } = await runBrowser(); - - try { - const consoleMessages = []; - - page.on("console", (message) => { - consoleMessages.push(message); - }); - - await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0", - }); - - const isCorrectTransport = await page.evaluate( - () => globalThis.injectedClient === globalThis.expectedClient, - ); - - expect(isCorrectTransport).toBe(true); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot(); - } finally { - await browser.close(); - await server.stop(); - } - }); - - it('should use "sockjs" web socket server when specify "sockjs" value using object', async () => { - const compiler = webpack(sockjsConfig); - const devServerOptions = { - port, - webSocketServer: { - type: "sockjs", - }, - }; - const server = new Server(devServerOptions, compiler); - - await server.start(); - - const { page, browser } = await runBrowser(); - - try { - const consoleMessages = []; - - page.on("console", (message) => { - consoleMessages.push(message); - }); - - await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0", - }); - - const isCorrectTransport = await page.evaluate( - () => globalThis.injectedClient === globalThis.expectedClient, - ); - - expect(isCorrectTransport).toBe(true); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot(); - } finally { - await browser.close(); - await server.stop(); - } - }); - - it("should use custom web socket server when specify class", async () => { + it("should use custom web socket server when specify class", async (t) => { const compiler = webpack(defaultConfig); const devServerOptions = { port, @@ -230,16 +149,14 @@ describe("server and client transport", () => { ); expect(isCorrectTransport).toBe(true); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot(); + t.assert.snapshot(consoleMessages.map((message) => message.text())); } finally { await browser.close(); await server.stop(); } }); - it("should use custom web socket server when specify class using object", async () => { + it("should use custom web socket server when specify class using object", async (t) => { const compiler = webpack(defaultConfig); const devServerOptions = { port, @@ -272,23 +189,23 @@ describe("server and client transport", () => { ); expect(isCorrectTransport).toBe(true); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot(); + t.assert.snapshot(consoleMessages.map((message) => message.text())); } finally { await browser.close(); await server.stop(); } }); - it("should use custom web socket server when specify path to class", async () => { + it("should use custom web socket server when specify path to class", async (t) => { const compiler = webpack(defaultConfig); const devServerOptions = { port, client: { webSocketTransport: "ws", }, - webSocketServer: require.resolve("../../lib/servers/WebsocketServer"), + webSocketServer: fileURLToPath( + import.meta.resolve("../../lib/servers/WebsocketServer.js"), + ), }; const server = new Server(devServerOptions, compiler); @@ -312,16 +229,14 @@ describe("server and client transport", () => { ); expect(isCorrectTransport).toBe(true); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot(); + t.assert.snapshot(consoleMessages.map((message) => message.text())); } finally { await browser.close(); await server.stop(); } }); - it("should use custom web socket server when specify path to class using object", async () => { + it("should use custom web socket server when specify path to class using object", async (t) => { const compiler = webpack(defaultConfig); const devServerOptions = { port, @@ -329,7 +244,9 @@ describe("server and client transport", () => { webSocketTransport: "ws", }, webSocketServer: { - type: require.resolve("../../lib/servers/WebsocketServer"), + type: fileURLToPath( + import.meta.resolve("../../lib/servers/WebsocketServer.js"), + ), }, }; const server = new Server(devServerOptions, compiler); @@ -354,16 +271,14 @@ describe("server and client transport", () => { ); expect(isCorrectTransport).toBe(true); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot(); + t.assert.snapshot(consoleMessages.map((message) => message.text())); } finally { await browser.close(); await server.stop(); } }); - it("should throw an error on wrong path", async () => { + it("should throw an error on wrong path", async (t) => { expect.assertions(1); const compiler = webpack(defaultConfig); @@ -378,52 +293,13 @@ describe("server and client transport", () => { try { await server.start(); } catch (error) { - expect(error.message).toMatchSnapshot(); - } finally { - await server.stop(); - } - }); - - it('should use "sockjs" transport, when web socket server is not specify', async () => { - const compiler = webpack(sockjsConfig); - const devServerOptions = { - port, - client: { - webSocketTransport: "sockjs", - }, - }; - const server = new Server(devServerOptions, compiler); - - await server.start(); - - const { page, browser } = await runBrowser(); - - try { - const consoleMessages = []; - - page.on("console", (message) => { - consoleMessages.push(message); - }); - - await page.goto(`http://localhost:${port}/main.js`, { - waitUntil: "networkidle0", - }); - - const isCorrectTransport = await page.evaluate( - () => globalThis.injectedClient === globalThis.expectedClient, - ); - - expect(isCorrectTransport).toBe(true); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot(); + t.assert.snapshot(error.message); } finally { - await browser.close(); await server.stop(); } }); - it('should use "ws" transport, when web socket server is not specify', async () => { + it('should use "ws" transport, when web socket server is not specify', async (t) => { const compiler = webpack(wsConfig); const devServerOptions = { port, @@ -453,56 +329,14 @@ describe("server and client transport", () => { ); expect(isCorrectTransport).toBe(true); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot(); - } finally { - await browser.close(); - await server.stop(); - } - }); - - it('should use "sockjs" transport and "sockjs" web socket server', async () => { - const compiler = webpack(sockjsConfig); - const devServerOptions = { - port, - client: { - webSocketTransport: "sockjs", - }, - webSocketServer: "sockjs", - }; - const server = new Server(devServerOptions, compiler); - - await server.start(); - - const { page, browser } = await runBrowser(); - - try { - const consoleMessages = []; - - page.on("console", (message) => { - consoleMessages.push(message); - }); - - await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0", - }); - - const isCorrectTransport = await page.evaluate( - () => globalThis.injectedClient === globalThis.expectedClient, - ); - - expect(isCorrectTransport).toBe(true); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot(); + t.assert.snapshot(consoleMessages.map((message) => message.text())); } finally { await browser.close(); await server.stop(); } }); - it('should use "ws" transport and "ws" web socket server', async () => { + it('should use "ws" transport and "ws" web socket server', async (t) => { const compiler = webpack(wsConfig); const devServerOptions = { port, @@ -533,58 +367,14 @@ describe("server and client transport", () => { ); expect(isCorrectTransport).toBe(true); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot(); - } finally { - await browser.close(); - await server.stop(); - } - }); - - it('should use custom transport and "sockjs" web socket server', async () => { - const compiler = webpack(customConfig); - const devServerOptions = { - port, - client: { - webSocketTransport: require.resolve( - "../fixtures/custom-client/CustomSockJSClient", - ), - }, - webSocketServer: "sockjs", - }; - const server = new Server(devServerOptions, compiler); - - await server.start(); - - const { page, browser } = await runBrowser(); - - try { - const consoleMessages = []; - - page.on("console", (message) => { - consoleMessages.push(message); - }); - - await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0", - }); - - const isCorrectTransport = await page.evaluate( - () => globalThis.injectedClient === globalThis.expectedClient, - ); - - expect(isCorrectTransport).toBe(true); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot(); + t.assert.snapshot(consoleMessages.map((message) => message.text())); } finally { await browser.close(); await server.stop(); } }); - it("should throw an error on invalid path to server transport", async () => { + it("should throw an error on invalid path to server transport", async (t) => { const compiler = webpack(defaultConfig); const devServerOptions = { port, @@ -593,14 +383,17 @@ describe("server and client transport", () => { }, }; const server = new Server(devServerOptions, compiler); - await expect(async () => { + try { await server.start(); - }).rejects.toThrowErrorMatchingSnapshot(); - - await server.stop(); + throw new Error("server.start() should have thrown"); + } catch (error) { + t.assert.snapshot(error.message); + } finally { + await server.stop(); + } }); - it("should throw an error on invalid path to client transport", async () => { + it("should throw an error on invalid path to client transport", async (t) => { const compiler = webpack(defaultConfig); const devServerOptions = { port, @@ -609,10 +402,13 @@ describe("server and client transport", () => { }, }; const server = new Server(devServerOptions, compiler); - await expect(async () => { + try { await server.start(); - }).rejects.toThrowErrorMatchingSnapshot(); - - await server.stop(); + throw new Error("server.start() should have thrown"); + } catch (error) { + t.assert.snapshot(error.message); + } finally { + await server.stop(); + } }); }); diff --git a/test/e2e/server.test.js b/test/e2e/server.test.js index 582e531873..a2df835d8a 100644 --- a/test/e2e/server.test.js +++ b/test/e2e/server.test.js @@ -1,17 +1,22 @@ -"use strict"; - -const https = require("node:https"); -const path = require("node:path"); -const fs = require("graceful-fs"); -const request = require("supertest"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/static-config/webpack.config"); -const { skipTestOnWindows } = require("../helpers/conditional-test"); -const customHTTP = require("../helpers/custom-http"); -const normalizeOptions = require("../helpers/normalize-options"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["server-option"]; +import https from "node:https"; +import path from "node:path"; +import { afterEach, beforeEach, describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import fs from "graceful-fs"; +import { spyOn } from "jest-mock"; +import request from "supertest"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/static-config/webpack.config.js"; +import { skipTestOnWindows } from "../helpers/conditional-test.js"; +import customHTTP from "../helpers/custom-http.js"; +import normalizeOptions from "../helpers/normalize-options.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap["server-option"]; const httpsCertificateDirectory = path.resolve( __dirname, @@ -23,8 +28,6 @@ const staticDirectory = path.resolve( "../fixtures/static-config/public", ); -const [major] = process.versions.node.split(".").map(Number); - describe("server option", () => { describe("as string", () => { let compiler; @@ -63,7 +66,7 @@ describe("server option", () => { await server.stop(); }); - it("should handle GET request to index route (/)", async () => { + it("should handle GET request to index route (/)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -82,15 +85,13 @@ describe("server option", () => { expect(HTTPVersion).not.toBe("h2"); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -123,7 +124,7 @@ describe("server option", () => { await server.stop(); }); - it("should handle GET request to index route (/)", async () => { + it("should handle GET request to index route (/)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -142,15 +143,13 @@ describe("server option", () => { expect(HTTPVersion).not.toBe("h2"); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -183,7 +182,7 @@ describe("server option", () => { await server.stop(); }); - it("should handle GET request to index route (/)", async () => { + it("should handle GET request to index route (/)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -202,69 +201,13 @@ describe("server option", () => { expect(HTTPVersion).not.toBe("h2"); - expect(response.status()).toMatchSnapshot("response status"); - - expect(await response.text()).toMatchSnapshot("response text"); - - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - - expect(pageErrors).toMatchSnapshot("page errors"); - }); - }); - - (major >= 24 ? describe.skip : describe)("spdy", () => { - beforeEach(async () => { - compiler = webpack(config); - - server = new Server( - { - static: { - directory: staticDirectory, - watch: false, - }, - server: "spdy", - port, - }, - compiler, - ); - - await server.start(); - - ({ page, browser } = await runBrowser()); - - pageErrors = []; - consoleMessages = []; - }); - - afterEach(async () => { - await browser.close(); - await server.stop(); - }); - - it("should handle GET request to index route (/)", async () => { - page - .on("console", (message) => { - consoleMessages.push(message); - }) - .on("pageerror", (error) => { - pageErrors.push(error); - }); + t.assert.snapshot(response.status()); - const response = await page.goto(`https://localhost:${port}/`, { - waitUntil: "networkidle0", - }); + t.assert.snapshot(await response.text()); - const HTTPVersion = await page.evaluate( - () => performance.getEntries()[0].nextHopProtocol, - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(HTTPVersion).toBe("h2"); - expect(response.status()).toBe(200); - expect((await response.text()).trim()).toBe("Heyo."); - expect(consoleMessages).toHaveLength(0); - expect(pageErrors).toHaveLength(0); + t.assert.snapshot(pageErrors); }); }); }); @@ -282,7 +225,7 @@ describe("server option", () => { beforeEach(async () => { compiler = webpack(config); - createServerSpy = jest.spyOn(https, "createServer"); + createServerSpy = spyOn(https, "createServer"); server = new Server( { @@ -328,7 +271,7 @@ describe("server option", () => { await server.stop(); }); - it("should handle GET request to index route (/)", async () => { + it("should handle GET request to index route (/)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -341,15 +284,11 @@ describe("server option", () => { waitUntil: "networkidle0", }); - expect( - normalizeOptions(createServerSpy.mock.calls[0][0]), - ).toMatchSnapshot("https options"); - expect(response.status()).toMatchSnapshot("response status"); - expect(await response.text()).toMatchSnapshot("response text"); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(normalizeOptions(createServerSpy.mock.calls[0][0])); + t.assert.snapshot(response.status()); + t.assert.snapshot(await response.text()); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); }); }); @@ -365,7 +304,7 @@ describe("server option", () => { beforeEach(async () => { compiler = webpack(config); - createServerSpy = jest.spyOn(https, "createServer"); + createServerSpy = spyOn(https, "createServer"); server = new Server( { @@ -419,7 +358,7 @@ describe("server option", () => { await server.stop(); }); - it("should handle GET request to index route (/)", async () => { + it("should handle GET request to index route (/)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -432,15 +371,11 @@ describe("server option", () => { waitUntil: "networkidle0", }); - expect( - normalizeOptions(createServerSpy.mock.calls[0][0]), - ).toMatchSnapshot("https options"); - expect(response.status()).toMatchSnapshot("response status"); - expect(await response.text()).toMatchSnapshot("response text"); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(normalizeOptions(createServerSpy.mock.calls[0][0])); + t.assert.snapshot(response.status()); + t.assert.snapshot(await response.text()); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); }); }); @@ -456,7 +391,7 @@ describe("server option", () => { beforeEach(async () => { compiler = webpack(config); - createServerSpy = jest.spyOn(https, "createServer"); + createServerSpy = spyOn(https, "createServer"); server = new Server( { @@ -508,7 +443,7 @@ describe("server option", () => { await server.stop(); }); - it("should handle GET request to index route (/)", async () => { + it("should handle GET request to index route (/)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -521,15 +456,11 @@ describe("server option", () => { waitUntil: "networkidle0", }); - expect( - normalizeOptions(createServerSpy.mock.calls[0][0]), - ).toMatchSnapshot("https options"); - expect(response.status()).toMatchSnapshot("response status"); - expect(await response.text()).toMatchSnapshot("response text"); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(normalizeOptions(createServerSpy.mock.calls[0][0])); + t.assert.snapshot(response.status()); + t.assert.snapshot(await response.text()); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); }); }); @@ -545,7 +476,7 @@ describe("server option", () => { beforeEach(async () => { compiler = webpack(config); - createServerSpy = jest.spyOn(https, "createServer"); + createServerSpy = spyOn(https, "createServer"); server = new Server( { @@ -606,7 +537,7 @@ describe("server option", () => { await server.stop(); }); - it("should handle GET request to index route (/)", async () => { + it("should handle GET request to index route (/)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -619,15 +550,11 @@ describe("server option", () => { waitUntil: "networkidle0", }); - expect( - normalizeOptions(createServerSpy.mock.calls[0][0]), - ).toMatchSnapshot("https options"); - expect(response.status()).toMatchSnapshot("response status"); - expect(await response.text()).toMatchSnapshot("response text"); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(normalizeOptions(createServerSpy.mock.calls[0][0])); + t.assert.snapshot(response.status()); + t.assert.snapshot(await response.text()); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); }); }); @@ -643,7 +570,7 @@ describe("server option", () => { beforeEach(async () => { compiler = webpack(config); - createServerSpy = jest.spyOn(https, "createServer"); + createServerSpy = spyOn(https, "createServer"); server = new Server( { @@ -681,7 +608,7 @@ describe("server option", () => { await server.stop(); }); - it("should handle GET request to index route (/)", async () => { + it("should handle GET request to index route (/)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -694,15 +621,11 @@ describe("server option", () => { waitUntil: "networkidle0", }); - expect( - normalizeOptions(createServerSpy.mock.calls[0][0]), - ).toMatchSnapshot("https options"); - expect(response.status()).toMatchSnapshot("response status"); - expect(await response.text()).toMatchSnapshot("response text"); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(normalizeOptions(createServerSpy.mock.calls[0][0])); + t.assert.snapshot(response.status()); + t.assert.snapshot(await response.text()); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); }); }); @@ -718,7 +641,7 @@ describe("server option", () => { beforeEach(async () => { compiler = webpack(config); - createServerSpy = jest.spyOn(https, "createServer"); + createServerSpy = spyOn(https, "createServer"); server = new Server( { @@ -756,7 +679,7 @@ describe("server option", () => { await server.stop(); }); - it("should handle GET request to index route (/)", async () => { + it("should handle GET request to index route (/)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -769,15 +692,11 @@ describe("server option", () => { waitUntil: "networkidle0", }); - expect( - normalizeOptions(createServerSpy.mock.calls[0][0]), - ).toMatchSnapshot("https options"); - expect(response.status()).toMatchSnapshot("response status"); - expect(await response.text()).toMatchSnapshot("response text"); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(normalizeOptions(createServerSpy.mock.calls[0][0])); + t.assert.snapshot(response.status()); + t.assert.snapshot(await response.text()); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); }); }); @@ -797,7 +716,7 @@ describe("server option", () => { beforeEach(async () => { compiler = webpack(config); - createServerSpy = jest.spyOn(https, "createServer"); + createServerSpy = spyOn(https, "createServer"); server = new Server( { @@ -870,7 +789,7 @@ describe("server option", () => { beforeEach(async () => { compiler = webpack(config); - createServerSpy = jest.spyOn(https, "createServer"); + createServerSpy = spyOn(https, "createServer"); server = new Server( { @@ -924,7 +843,7 @@ describe("server option", () => { await server.stop(); }); - it("should handle GET request to index route (/)", async () => { + it("should handle GET request to index route (/)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -937,15 +856,11 @@ describe("server option", () => { waitUntil: "networkidle0", }); - expect( - normalizeOptions(createServerSpy.mock.calls[0][0]), - ).toMatchSnapshot("https options"); - expect(response.status()).toMatchSnapshot("response status"); - expect(await response.text()).toMatchSnapshot("response text"); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(normalizeOptions(createServerSpy.mock.calls[0][0])); + t.assert.snapshot(response.status()); + t.assert.snapshot(await response.text()); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); }); }); @@ -961,7 +876,7 @@ describe("server option", () => { beforeEach(async () => { compiler = webpack(config); - createServerSpy = jest.spyOn(https, "createServer"); + createServerSpy = spyOn(https, "createServer"); server = new Server( { @@ -1020,7 +935,7 @@ describe("server option", () => { await server.stop(); }); - it("should handle GET request to index route (/)", async () => { + it("should handle GET request to index route (/)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -1033,15 +948,11 @@ describe("server option", () => { waitUntil: "networkidle0", }); - expect( - normalizeOptions(createServerSpy.mock.calls[0][0]), - ).toMatchSnapshot("https options"); - expect(response.status()).toMatchSnapshot("response status"); - expect(await response.text()).toMatchSnapshot("response text"); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(normalizeOptions(createServerSpy.mock.calls[0][0])); + t.assert.snapshot(response.status()); + t.assert.snapshot(await response.text()); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); }); }); @@ -1057,7 +968,7 @@ describe("server option", () => { beforeEach(async () => { compiler = webpack(config); - createServerSpy = jest.spyOn(https, "createServer"); + createServerSpy = spyOn(https, "createServer"); server = new Server( { @@ -1104,7 +1015,7 @@ describe("server option", () => { await server.stop(); }); - it("should handle GET request to index route (/)", async () => { + it("should handle GET request to index route (/)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -1117,15 +1028,11 @@ describe("server option", () => { waitUntil: "networkidle0", }); - expect( - normalizeOptions(createServerSpy.mock.calls[0][0]), - ).toMatchSnapshot("https options"); - expect(response.status()).toMatchSnapshot("response status"); - expect(await response.text()).toMatchSnapshot("response text"); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(normalizeOptions(createServerSpy.mock.calls[0][0])); + t.assert.snapshot(response.status()); + t.assert.snapshot(await response.text()); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); }); }); @@ -1139,7 +1046,7 @@ describe("server option", () => { beforeEach(async () => { compiler = webpack(config); - createServerSpy = jest.spyOn(https, "createServer"); + createServerSpy = spyOn(https, "createServer"); server = new Server( { @@ -1179,96 +1086,15 @@ describe("server option", () => { await server.stop(); }); - it("should pass options to the 'https.createServer' method", async () => { - expect( - normalizeOptions(createServerSpy.mock.calls[0][0]), - ).toMatchSnapshot("https options"); + it("should pass options to the 'https.createServer' method", async (t) => { + t.assert.snapshot(normalizeOptions(createServerSpy.mock.calls[0][0])); }); - it("should handle GET request to index route (/)", async () => { + it("should handle GET request to index route (/)", async (t) => { const response = await req.get("/"); - expect(response.status).toMatchSnapshot("response status"); - expect(response.text).toMatchSnapshot("response text"); - }); - }); - - (major >= 24 ? describe.skip : describe)("spdy server with options", () => { - let compiler; - let server; - let createServerSpy; - let page; - let browser; - let pageErrors; - let consoleMessages; - - beforeEach(async () => { - compiler = webpack(config); - - createServerSpy = jest.spyOn(require("spdy"), "createServer"); - - server = new Server( - { - static: { - directory: staticDirectory, - watch: false, - }, - server: { - type: "spdy", - options: { - requestCert: false, - ca: [path.join(httpsCertificateDirectory, "ca.pem")], - pfx: [path.join(httpsCertificateDirectory, "server.pfx")], - key: [path.join(httpsCertificateDirectory, "server.key")], - cert: [path.join(httpsCertificateDirectory, "server.crt")], - passphrase: "webpack-dev-server", - }, - }, - port, - }, - compiler, - ); - - await server.start(); - - ({ page, browser } = await runBrowser()); - - pageErrors = []; - consoleMessages = []; - }); - - afterEach(async () => { - createServerSpy.mockRestore(); - - await browser.close(); - await server.stop(); - }); - - it("should handle GET request to index route (/)", async () => { - page - .on("console", (message) => { - consoleMessages.push(message); - }) - .on("pageerror", (error) => { - pageErrors.push(error); - }); - - const response = await page.goto(`https://localhost:${port}/`, { - waitUntil: "networkidle0", - }); - - const HTTPVersion = await page.evaluate( - () => performance.getEntries()[0].nextHopProtocol, - ); - - const options = normalizeOptions(createServerSpy.mock.calls[0][0]); - - expect(HTTPVersion).toBe("h2"); - expect(options.spdy).toEqual({ protocols: ["h2", "http/1.1"] }); - expect(response.status()).toBe(200); - expect((await response.text()).trim()).toBe("Heyo."); - expect(consoleMessages).toHaveLength(0); - expect(pageErrors).toHaveLength(0); + t.assert.snapshot(response.status); + t.assert.snapshot(response.text); }); }); @@ -1284,7 +1110,7 @@ describe("server option", () => { beforeEach(async () => { compiler = webpack(config); - createServerSpy = jest.spyOn(customHTTP, "createServer"); + createServerSpy = spyOn(customHTTP, "createServer"); server = new Server( { @@ -1318,7 +1144,7 @@ describe("server option", () => { await server.stop(); }); - it("should handle GET request to index route (/)", async () => { + it("should handle GET request to index route (/)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -1336,15 +1162,11 @@ describe("server option", () => { ); expect(HTTPVersion).toBe("http/1.1"); - expect( - normalizeOptions(createServerSpy.mock.calls[0][0]), - ).toMatchSnapshot("http options"); - expect(response.status()).toMatchSnapshot("response status"); - expect(await response.text()).toMatchSnapshot("response text"); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(normalizeOptions(createServerSpy.mock.calls[0][0])); + t.assert.snapshot(response.status()); + t.assert.snapshot(await response.text()); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); }); }); }); diff --git a/test/e2e/setup-exit-signals.test.js b/test/e2e/setup-exit-signals.test.js index 8b8de09674..6fbad84f4f 100644 --- a/test/e2e/setup-exit-signals.test.js +++ b/test/e2e/setup-exit-signals.test.js @@ -1,10 +1,13 @@ -"use strict"; +import { afterEach, beforeEach, describe, it } from "node:test"; +import { expect } from "expect"; +import { spyOn } from "jest-mock"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/simple-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/simple-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["setup-exit-signals-option"]; +const port = portsMap["setup-exit-signals-option"]; describe("setupExitSignals option", () => { describe("should handle 'SIGINT' and 'SIGTERM' signals", () => { @@ -41,18 +44,18 @@ describe("setupExitSignals option", () => { consoleMessages = []; doExit = false; - exitSpy = jest.spyOn(process, "exit").mockImplementation(() => { + exitSpy = spyOn(process, "exit").mockImplementation(() => { doExit = true; }); - stdinResumeSpy = jest - .spyOn(process.stdin, "resume") - .mockImplementation(() => {}); + stdinResumeSpy = spyOn(process.stdin, "resume").mockImplementation( + () => {}, + ); - stopCallbackSpy = jest.spyOn(server, "stopCallback"); + stopCallbackSpy = spyOn(server, "stopCallback"); if (server.compiler.close) { - closeCallbackSpy = jest.spyOn(server.compiler, "close"); + closeCallbackSpy = spyOn(server.compiler, "close"); } }); @@ -67,52 +70,53 @@ describe("setupExitSignals option", () => { await server.stop(); }); - it.each(signals)("should close and exit on %s", async (signal) => { - page - .on("console", (message) => { - consoleMessages.push(message); - }) - .on("pageerror", (error) => { - pageErrors.push(error); + for (const signal of signals) { + // eslint-disable-next-line no-loop-func + it(`should close and exit on ${signal}`, async (t) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://localhost:${port}/`, { + waitUntil: "networkidle0", }); - const response = await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0", - }); - - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - process.emit(signal); + process.emit(signal); - await new Promise((resolve) => { - const interval = setInterval(() => { - if (doExit) { - expect(stopCallbackSpy.mock.calls).toHaveLength(1); + await new Promise((resolve) => { + const interval = setInterval(() => { + if (doExit) { + expect(stopCallbackSpy.mock.calls).toHaveLength(1); - if (server.compiler.close) { - expect(closeCallbackSpy.mock.calls).toHaveLength(1); - } + if (server.compiler.close) { + expect(closeCallbackSpy.mock.calls).toHaveLength(1); + } - clearInterval(interval); + clearInterval(interval); - resolve(); - } - }, 100); - }); + resolve(); + } + }, 100); + }); - consoleMessages = consoleMessages.filter( - (message) => - !( - message.text().includes("Trying to reconnect...") || - message.text().includes("Disconnected") - ), - ); + consoleMessages = consoleMessages.filter( + (message) => + !( + message.text().includes("Trying to reconnect...") || + message.text().includes("Disconnected") + ), + ); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); - }); + t.assert.snapshot(pageErrors); + }); + } }); }); diff --git a/test/e2e/setup-middlewares.test.js b/test/e2e/setup-middlewares.test.js index e33b2256bd..e41e5ab676 100644 --- a/test/e2e/setup-middlewares.test.js +++ b/test/e2e/setup-middlewares.test.js @@ -1,10 +1,12 @@ -"use strict"; +import { afterEach, beforeEach, describe, it } from "node:test"; -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["setup-middlewares-option"]; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const port = portsMap["setup-middlewares-option"]; describe("setupMiddlewares option", () => { let compiler; @@ -82,7 +84,7 @@ describe("setupMiddlewares option", () => { await server.stop(); }); - it("should handle GET request to /setup-middleware/some/path route", async () => { + it("should handle GET request to /setup-middleware/some/path route", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -98,31 +100,25 @@ describe("setupMiddlewares option", () => { }, ); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); - expect(response.status()).toMatchSnapshot("response status"); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(response.headers()["content-type"]); + t.assert.snapshot(response.status()); + t.assert.snapshot(await response.text()); const response1 = await page.goto(`http://localhost:${port}/foo/bar`, { waitUntil: "networkidle0", }); - expect(response1.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); - expect(response1.status()).toMatchSnapshot("response status"); - expect(await response1.text()).toMatchSnapshot("response text"); + t.assert.snapshot(response1.headers()["content-type"]); + t.assert.snapshot(response1.status()); + t.assert.snapshot(await response1.text()); const response2 = await page.goto(`http://localhost:${port}/foo/bar/baz`, { waitUntil: "networkidle0", }); - expect(response2.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); - expect(response2.status()).toMatchSnapshot("response status"); - expect(await response2.text()).toMatchSnapshot("response text"); + t.assert.snapshot(response2.headers()["content-type"]); + t.assert.snapshot(response2.status()); + t.assert.snapshot(await response2.text()); const response3 = await page.goto( `http://localhost:${port}/setup-middleware/unknown`, @@ -131,19 +127,15 @@ describe("setupMiddlewares option", () => { }, ); - expect(response3.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); - expect(response3.status()).toMatchSnapshot("response status"); - expect(await response3.text()).toMatchSnapshot("response text"); + t.assert.snapshot(response3.headers()["content-type"]); + t.assert.snapshot(response3.status()); + t.assert.snapshot(await response3.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); }); - it("should handle POST request to /setup-middleware/some/path route", async () => { + it("should handle POST request to /setup-middleware/some/path route", async (t) => { await page.setRequestInterception(true); page @@ -166,14 +158,10 @@ describe("setupMiddlewares option", () => { }, ); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); - expect(response.status()).toMatchSnapshot("response status"); - expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(response.headers()["content-type"]); + t.assert.snapshot(response.status()); + t.assert.snapshot(await response.text()); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); }); }); diff --git a/test/e2e/static-directory.test.js b/test/e2e/static-directory.test.js index a4f2b02002..a970cc2231 100644 --- a/test/e2e/static-directory.test.js +++ b/test/e2e/static-directory.test.js @@ -1,13 +1,18 @@ -"use strict"; - -const path = require("node:path"); -const fs = require("graceful-fs"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/static-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const testServer = require("../helpers/test-server"); -const port = require("../ports-map")["static-directory-option"]; +import path from "node:path"; +import { afterEach, beforeEach, describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import fs from "graceful-fs"; +import { spyOn } from "jest-mock"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/static-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import * as testServer from "../helpers/test-server.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap["static-directory-option"]; const staticDirectory = path.resolve(__dirname, "../fixtures/static-config"); const publicDirectory = path.resolve(staticDirectory, "public"); @@ -52,7 +57,7 @@ describe("static.directory option", () => { fs.truncateSync(nestedFile); }); - it("should handle request to index route", async () => { + it("should handle request to index route", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -65,18 +70,16 @@ describe("static.directory option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should handle request to other file", async () => { + it("should handle request to other file", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -89,51 +92,55 @@ describe("static.directory option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("watches folder recursively", (done) => { - // chokidar emitted a change, - // meaning it watched the file correctly - server.staticWatchers[0].on("change", (filepath) => { - expect(typeof filepath).toBe("string"); - done(); - }); + it("watches folder recursively", () => + new Promise((resolve) => { + // chokidar emitted a change, + // meaning it watched the file correctly + server.staticWatchers[0].on("change", (filepath) => { + expect(typeof filepath).toBe("string"); + resolve(); + }); - // change a file manually - setTimeout(() => { - fs.writeFileSync(nestedFile, "Heyo", "utf8"); - }, 1000); - }); + // change a file manually + setTimeout(() => { + fs.writeFileSync(nestedFile, "Heyo", "utf8"); + }, 1000); + })); - it("watches node_modules", (done) => { - const filePath = path.join(publicDirectory, "node_modules", "index.html"); + it("watches node_modules", () => + new Promise((resolve) => { + const filePath = path.join( + publicDirectory, + "node_modules", + "index.html", + ); - fs.writeFileSync(filePath, "foo", "utf8"); + fs.writeFileSync(filePath, "foo", "utf8"); - // chokidar emitted a change, - // meaning it watched the file correctly - server.staticWatchers[0].on("change", (filepath) => { - expect(typeof filepath).toBe("string"); + // chokidar emitted a change, + // meaning it watched the file correctly + server.staticWatchers[0].on("change", (filepath) => { + expect(typeof filepath).toBe("string"); - fs.unlinkSync(filePath); + fs.unlinkSync(filePath); - done(); - }); + resolve(); + }); - // change a file manually - setTimeout(() => { - fs.writeFileSync(filePath, "bar", "utf8"); - }, 1000); - }); + // change a file manually + setTimeout(() => { + fs.writeFileSync(filePath, "bar", "utf8"); + }, 1000); + })); }); describe("test listing files in folders without index.html using the option static.serveIndex: false", () => { @@ -172,7 +179,7 @@ describe("static.directory option", () => { await server.stop(); }); - it("should not list the files inside the assets folder (404)", async () => { + it("should not list the files inside the assets folder (404)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -185,18 +192,16 @@ describe("static.directory option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should show Heyo. because bar has index.html inside it (200)", async () => { + it("should show Heyo. because bar has index.html inside it (200)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -209,15 +214,13 @@ describe("static.directory option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -257,7 +260,7 @@ describe("static.directory option", () => { await server.stop(); }); - it("should list the files inside the assets folder (200)", async () => { + it("should list the files inside the assets folder (200)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -272,19 +275,17 @@ describe("static.directory option", () => { const text = await response.text(); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); expect(text).toContain("example.txt"); expect(text).toContain("other.txt"); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should show Heyo. because bar has index.html inside it (200)", async () => { + it("should show Heyo. because bar has index.html inside it (200)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -297,15 +298,13 @@ describe("static.directory option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -344,7 +343,7 @@ describe("static.directory option", () => { await server.stop(); }); - it("should list the files inside the assets folder (200)", async () => { + it("should list the files inside the assets folder (200)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -359,19 +358,17 @@ describe("static.directory option", () => { const text = await response.text(); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); expect(text).toContain("example.txt"); expect(text).toContain("other.txt"); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should show Heyo. because bar has index.html inside it (200)", async () => { + it("should show Heyo. because bar has index.html inside it (200)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -384,15 +381,13 @@ describe("static.directory option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -428,7 +423,7 @@ describe("static.directory option", () => { await server.stop(); }); - it("should handle request first directory", async () => { + it("should handle request first directory", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -441,18 +436,16 @@ describe("static.directory option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should handle request to second directory", async () => { + it("should handle request to second directory", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -465,113 +458,122 @@ describe("static.directory option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); describe("testing single & multiple external paths", () => { let server; - afterEach((done) => { - testServer.close(() => { - done(); - }); - }); - - it("should throw exception (external url)", (done) => { - expect.assertions(1); - - server = testServer.start( - config, - { - static: "https://example.com/", - }, - (error) => { - expect(error.message).toBe( - "Using a URL as static.directory is not supported", - ); - - server.stopCallback(done); - }, - ); - }); - - it("should not throw exception (local path with lower case first character)", (done) => { - testServer.start( - config, - { - static: { - directory: - publicDirectory.charAt(0).toLowerCase() + - publicDirectory.slice(1), - watch: true, + afterEach( + () => + new Promise((resolve) => { + testServer.close(() => { + resolve(); + }); + }), + ); + + it("should throw exception (external url)", () => + new Promise((resolve) => { + expect.assertions(1); + + server = testServer.start( + config, + { + static: "https://example.com/", }, - port, - }, - (error) => { - expect(error).toBeUndefined(); - done(error); - }, - ); - }); + (error) => { + expect(error.message).toBe( + "Using a URL as static.directory is not supported", + ); - it("should not throw exception (local path with lower case first character & has '-')", (done) => { - testServer.start( - config, - { - static: { - directory: "c:\\absolute\\path\\to\\content-base", - watch: true, + server.stopCallback(resolve); }, - port, - }, - (error) => { - expect(error).toBeUndefined(); - done(error); - }, - ); - }); - - it("should not throw exception (local path with upper case first character & has '-')", (done) => { - testServer.start( - config, - { - static: { - directory: "C:\\absolute\\path\\to\\content-base", - watch: true, + ); + })); + + it("should not throw exception (local path with lower case first character)", () => + new Promise((resolve, reject) => { + testServer.start( + config, + { + static: { + directory: + publicDirectory.charAt(0).toLowerCase() + + publicDirectory.slice(1), + watch: true, + }, + port, }, - port, - }, - (error) => { - expect(error).toBeUndefined(); - done(error); - }, - ); - }); - - it("should throw exception (array with absolute url)", (done) => { - server = testServer.start( - config, - { - static: [publicDirectory, "https://example.com/"], - }, - (error) => { - expect(error.message).toBe( - "Using a URL as static.directory is not supported", - ); + (error) => { + expect(error).toBeUndefined(); + if (error) reject(error); + else resolve(); + }, + ); + })); + + it("should not throw exception (local path with lower case first character & has '-')", () => + new Promise((resolve, reject) => { + testServer.start( + config, + { + static: { + directory: "c:\\absolute\\path\\to\\content-base", + watch: true, + }, + port, + }, + (error) => { + expect(error).toBeUndefined(); + if (error) reject(error); + else resolve(); + }, + ); + })); + + it("should not throw exception (local path with upper case first character & has '-')", () => + new Promise((resolve, reject) => { + testServer.start( + config, + { + static: { + directory: "C:\\absolute\\path\\to\\content-base", + watch: true, + }, + port, + }, + (error) => { + expect(error).toBeUndefined(); + if (error) reject(error); + else resolve(); + }, + ); + })); + + it("should throw exception (array with absolute url)", () => + new Promise((resolve) => { + server = testServer.start( + config, + { + static: [publicDirectory, "https://example.com/"], + }, + (error) => { + expect(error.message).toBe( + "Using a URL as static.directory is not supported", + ); - server.stopCallback(done); - }, - ); - }); + server.stopCallback(resolve); + }, + ); + })); }); describe("defaults to PWD", () => { @@ -583,9 +585,9 @@ describe("static.directory option", () => { let consoleMessages; beforeEach(async () => { - jest - .spyOn(process, "cwd") - .mockImplementation(() => path.resolve(staticDirectory)); + spyOn(process, "cwd").mockImplementation(() => + path.resolve(staticDirectory), + ); compiler = webpack(config); server = new Server( @@ -609,7 +611,7 @@ describe("static.directory option", () => { await server.stop(); }); - it("should handle request to /index.html", async () => { + it("should handle request to /index.html", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -622,15 +624,13 @@ describe("static.directory option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -645,7 +645,7 @@ describe("static.directory option", () => { beforeEach(async () => { // This is a somewhat weird test, but it is important that we mock // the PWD here, and test if /other.html in our "fake" PWD really is not requested. - jest.spyOn(process, "cwd").mockImplementation(() => publicDirectory); + spyOn(process, "cwd").mockImplementation(() => publicDirectory); compiler = webpack(config); @@ -670,7 +670,7 @@ describe("static.directory option", () => { await server.stop(); }); - it("should not handle request to /other.html (404)", async () => { + it("should not handle request to /other.html (404)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -683,15 +683,13 @@ describe("static.directory option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); }); diff --git a/test/e2e/static-public-path.test.js b/test/e2e/static-public-path.test.js index 8af9cf0e58..e472a0f0b7 100644 --- a/test/e2e/static-public-path.test.js +++ b/test/e2e/static-public-path.test.js @@ -1,11 +1,16 @@ -"use strict"; - -const path = require("node:path"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/static-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["static-public-path-option"]; +import path from "node:path"; +import { afterEach, beforeEach, describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import { spyOn } from "jest-mock"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/static-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap["static-public-path-option"]; const staticDirectory = path.resolve(__dirname, "../fixtures/static-config"); const publicDirectory = path.resolve(staticDirectory, "public"); @@ -50,7 +55,7 @@ describe("static.publicPath option", () => { await server.stop(); }); - it("should handle request to index", async () => { + it("should handle request to index", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -66,18 +71,16 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should handle request to other file", async () => { + it("should handle request to other file", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -93,15 +96,13 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -142,7 +143,7 @@ describe("static.publicPath option", () => { await server.stop(); }); - it("shouldn't list the files inside the assets folder (404)", async () => { + it("shouldn't list the files inside the assets folder (404)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -158,18 +159,16 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should show Heyo. because bar has index.html inside it (200)", async () => { + it("should show Heyo. because bar has index.html inside it (200)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -185,15 +184,13 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -234,7 +231,7 @@ describe("static.publicPath option", () => { await server.stop(); }); - it("should list the files inside the assets folder (200)", async () => { + it("should list the files inside the assets folder (200)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -250,18 +247,16 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); expect(await response.text()).toContain("other.txt"); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should show Heyo. because bar has index.html inside it (200)", async () => { + it("should show Heyo. because bar has index.html inside it (200)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -277,15 +272,13 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -326,7 +319,7 @@ describe("static.publicPath option", () => { await server.stop(); }); - it("should list the files inside the assets folder (200)", async () => { + it("should list the files inside the assets folder (200)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -342,18 +335,16 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); expect(await response.text()).toContain("other.txt"); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should show Heyo. because bar has index.html inside it (200)", async () => { + it("should show Heyo. because bar has index.html inside it (200)", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -369,15 +360,13 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -422,7 +411,7 @@ describe("static.publicPath option", () => { await server.stop(); }); - it("should handle request to first directory", async () => { + it("should handle request to first directory", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -438,18 +427,16 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should handle request to second directory", async () => { + it("should handle request to second directory", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -465,15 +452,13 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -487,9 +472,7 @@ describe("static.publicPath option", () => { let consoleMessages; beforeEach(async () => { - cwdSpy = jest - .spyOn(process, "cwd") - .mockImplementation(() => staticDirectory); + cwdSpy = spyOn(process, "cwd").mockImplementation(() => staticDirectory); compiler = webpack(config); @@ -518,7 +501,7 @@ describe("static.publicPath option", () => { await server.stop(); }); - it("should handle request to page", async () => { + it("should handle request to page", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -534,15 +517,13 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -581,7 +562,7 @@ describe("static.publicPath option", () => { await server.stop(); }); - it("should handle request to example.txt", async () => { + it("should handle request to example.txt", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -597,17 +578,13 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response header content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -646,7 +623,7 @@ describe("static.publicPath option", () => { await server.stop(); }); - it("should handle GET request", async () => { + it("should handle GET request", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -662,16 +639,14 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should handle HEAD request", async () => { + it("should handle HEAD request", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -692,16 +667,14 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should not handle POST request", async () => { + it("should not handle POST request", async (t) => { await page.setRequestInterception(true); page @@ -722,16 +695,14 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should not handle PUT request", async () => { + it("should not handle PUT request", async (t) => { await page.setRequestInterception(true); page @@ -752,16 +723,14 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should not handle DELETE request", async () => { + it("should not handle DELETE request", async (t) => { await page.setRequestInterception(true); page @@ -782,16 +751,14 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should not handle PATCH request", async () => { + it("should not handle PATCH request", async (t) => { await page.setRequestInterception(true); page @@ -812,13 +779,11 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -865,7 +830,7 @@ describe("static.publicPath option", () => { await server.stop(); }); - it("should handle request to the index of first path", async () => { + it("should handle request to the index of first path", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -881,18 +846,16 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should handle request to the other file of first path", async () => { + it("should handle request to the other file of first path", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -908,18 +871,16 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should handle request to the /foo route of second path", async () => { + it("should handle request to the /foo route of second path", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -935,15 +896,13 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -990,7 +949,7 @@ describe("static.publicPath option", () => { await server.stop(); }); - it("should handle request to the index of first path", async () => { + it("should handle request to the index of first path", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -1006,18 +965,16 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should handle request to the other file of first path", async () => { + it("should handle request to the other file of first path", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -1033,18 +990,16 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should handle request to the /foo route of first path", async () => { + it("should handle request to the /foo route of first path", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -1060,18 +1015,16 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should handle request to the /foo route of second path", async () => { + it("should handle request to the /foo route of second path", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -1087,15 +1040,13 @@ describe("static.publicPath option", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); }); diff --git a/test/e2e/stats.test.js b/test/e2e/stats.test.js index 70f3017b12..caf9514524 100644 --- a/test/e2e/stats.test.js +++ b/test/e2e/stats.test.js @@ -1,13 +1,16 @@ -"use strict"; +import { describe, test } from "node:test"; -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const HTMLGeneratorPlugin = require("../helpers/html-generator-plugin"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map").stats; +import { spyOn } from "jest-mock"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import HTMLGeneratorPlugin from "../helpers/html-generator-plugin.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; -jest.spyOn(globalThis.console, "log").mockImplementation(); +const port = portsMap.stats; + +spyOn(globalThis.console, "log").mockImplementation(); describe("stats", () => { const cases = [ @@ -108,7 +111,7 @@ describe("stats", () => { } for (const testCase of cases) { - it(testCase.title, async () => { + test(testCase.title, async (t) => { const compiler = webpack({ ...config, ...testCase.webpackOptions }); const devServerOptions = { port, @@ -130,9 +133,7 @@ describe("stats", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot(); + t.assert.snapshot(consoleMessages.map((message) => message.text())); } finally { await browser.close(); await server.stop(); diff --git a/test/e2e/target.test.js b/test/e2e/target.test.js index 32f9a5aaef..f182fed7fb 100644 --- a/test/e2e/target.test.js +++ b/test/e2e/target.test.js @@ -1,16 +1,24 @@ -"use strict"; +import path from "node:path"; +import { describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; -const path = require("node:path"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const workerConfig = require("../fixtures/worker-config/webpack.config"); -const workerConfigDevServerFalse = require("../fixtures/worker-config-dev-server-false/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map").target; +// Set up jsdom before loading fixtures that use browser APIs like Worker +import "../helpers/jsdom-setup.js"; + +import workerConfig from "../fixtures/worker-config/webpack.config.js"; +import workerConfigDevServerFalse from "../fixtures/worker-config-dev-server-false/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap.target; const sortByTerm = (data, term) => - data.sort((a, b) => (a.indexOf(term) < b.indexOf(term) ? -1 : 1)); + data.toSorted((a, b) => (a.indexOf(term) < b.indexOf(term) ? -1 : 1)); describe("target", () => { const targets = [ @@ -30,7 +38,7 @@ describe("target", () => { ]; for (const target of targets) { - it(`should work using "${target}" target`, async () => { + it(`should work using "${target}" target`, async (t) => { const compiler = webpack({ ...config, target, @@ -62,9 +70,7 @@ describe("target", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); if ( target === "node" || @@ -82,7 +88,7 @@ describe("target", () => { expect(hasRequireOrGlobalError).toBe(true); } else { - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } } finally { await browser.close(); @@ -91,7 +97,7 @@ describe("target", () => { }); } - it("should work using multi compiler mode with `web` and `webworker` targets", async () => { + it("should work using multi compiler mode with `web` and `webworker` targets", async (t) => { const compiler = webpack(workerConfig); const server = new Server({ port }, compiler); @@ -115,21 +121,21 @@ describe("target", () => { waitUntil: "networkidle0", }); - expect( + t.assert.snapshot( sortByTerm( consoleMessages.map((message) => message.text()), "Worker said:", ), - ).toMatchSnapshot("console messages"); + ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work using multi compiler mode with `web` and `webworker` targets with `devServer: false`", async () => { + it("should work using multi compiler mode with `web` and `webworker` targets with `devServer: false`", async (t) => { const compiler = webpack(workerConfigDevServerFalse); const server = new Server( { @@ -164,14 +170,14 @@ describe("target", () => { waitUntil: "networkidle0", }); - expect( + t.assert.snapshot( sortByTerm( consoleMessages.map((message) => message.text()), "Worker said:", ), - ).toMatchSnapshot("console messages"); + ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); diff --git a/test/e2e/watch-files.test.js b/test/e2e/watch-files.test.js index c3785fbbec..7eb8f799c0 100644 --- a/test/e2e/watch-files.test.js +++ b/test/e2e/watch-files.test.js @@ -1,13 +1,16 @@ -"use strict"; - -const path = require("node:path"); -const chokidar = require("chokidar"); -const fs = require("graceful-fs"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/watch-files-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["watch-files-option"]; +import path from "node:path"; +import { afterEach, beforeEach, describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import fs from "graceful-fs"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/watch-files-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap["watch-files-option"]; const watchDir = path.resolve( __dirname, @@ -49,7 +52,7 @@ describe("watchFiles option", () => { fs.truncateSync(file); }); - it("should reload when file content is changed", async () => { + it("should reload when file content is changed", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -62,13 +65,11 @@ describe("watchFiles option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); // change file content fs.writeFileSync(file, "Kurosaki Ichigo", "utf8"); @@ -120,7 +121,7 @@ describe("watchFiles option", () => { fs.truncateSync(file); }); - it("should reload when file content is changed", async () => { + it("should reload when file content is changed", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -133,13 +134,11 @@ describe("watchFiles option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); // change file content fs.writeFileSync(file, "Kurosaki Ichigo", "utf8"); @@ -191,7 +190,266 @@ describe("watchFiles option", () => { fs.truncateSync(file); }); - it("should reload when file content is changed", async () => { + it("should reload when file content is changed", async (t) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://localhost:${port}/`, { + waitUntil: "networkidle0", + }); + + t.assert.snapshot(response.status()); + + t.assert.snapshot(consoleMessages.map((message) => message.text())); + + t.assert.snapshot(pageErrors); + + // change file content + fs.writeFileSync(file, "Kurosaki Ichigo", "utf8"); + + await new Promise((resolve) => { + server.staticWatchers[0].on("change", async (changedPath) => { + // page reload + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(changedPath).toBe(file); + + resolve(); + }); + }); + }); + }); + + describe("should work with array of globs", () => { + const file = path.join(watchDir, "assets/example.txt"); + const other = path.join(watchDir, "assets/other.txt"); + let compiler; + let server; + let page; + let browser; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + watchFiles: [`${watchDir}/**/*.txt`, `${watchDir}/**/*.js`], + port, + }, + compiler, + ); + + await server.start(); + + ({ page, browser } = await runBrowser()); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await browser.close(); + await server.stop(); + fs.truncateSync(file); + fs.truncateSync(other); + }); + + it("should reload when file content is changed", async (t) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://localhost:${port}/`, { + waitUntil: "networkidle0", + }); + + t.assert.snapshot(response.status()); + + t.assert.snapshot(consoleMessages.map((message) => message.text())); + + t.assert.snapshot(pageErrors); + + // change file content + fs.writeFileSync(file, "Kurosaki Ichigo", "utf8"); + + await new Promise((resolve) => { + server.staticWatchers[0].on("change", async (changedPath) => { + // page reload + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(changedPath).toBe(file); + + resolve(); + }); + }); + }); + }); + + describe("should work with directory and ignored option to filter files", () => { + const file = path.join(watchDir, "assets/example.txt"); + let compiler; + let server; + let page; + let browser; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + watchFiles: { + paths: watchDir, + options: { + ignored: (filePath, stats) => + stats?.isFile() && !filePath.endsWith(".txt"), + }, + }, + port, + }, + compiler, + ); + + await server.start(); + + ({ page, browser } = await runBrowser()); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await browser.close(); + await server.stop(); + fs.truncateSync(file); + }); + + it("should reload when file content is changed", async (t) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://localhost:${port}/`, { + waitUntil: "networkidle0", + }); + + t.assert.snapshot(response.status()); + + t.assert.snapshot(consoleMessages.map((message) => message.text())); + + t.assert.snapshot(pageErrors); + + // change file content + fs.writeFileSync(file, "Kurosaki Ichigo", "utf8"); + + await new Promise((resolve) => { + server.staticWatchers[0].on("change", async (changedPath) => { + // page reload + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(changedPath).toBe(file); + + resolve(); + }); + }); + }); + + it("should not reload when a non-matching file is changed", async (t) => { + const ignoredFile = path.join(watchDir, "assets/example.js"); + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://localhost:${port}/`, { + waitUntil: "networkidle0", + }); + + t.assert.snapshot(response.status()); + + // change ignored file content + fs.writeFileSync(ignoredFile, "// changed", "utf8"); + + // wait a bit to ensure no reload happens + await new Promise((resolve) => { + let changed = false; + + server.staticWatchers[0].on("change", () => { + changed = true; + }); + + setTimeout(() => { + expect(changed).toBe(false); + resolve(); + }, 2000); + }); + + // restore file + fs.writeFileSync(ignoredFile, "// test file\n", "utf8"); + }); + }); + + describe("should work with ignored option using glob string", () => { + const file = path.join(watchDir, "assets/example.txt"); + const ignoredFile = path.join(watchDir, "assets/example.js"); + let compiler; + let server; + let page; + let browser; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + watchFiles: { + paths: watchDir, + options: { + ignored: `${watchDir}/**/*.js`, + }, + }, + port, + }, + compiler, + ); + + await server.start(); + + ({ page, browser } = await runBrowser()); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await browser.close(); + await server.stop(); + fs.truncateSync(file); + }); + + it("should reload when file content is changed", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -204,13 +462,122 @@ describe("watchFiles option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); + + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", + t.assert.snapshot(pageErrors); + + // change file content + fs.writeFileSync(file, "Kurosaki Ichigo", "utf8"); + + await new Promise((resolve) => { + server.staticWatchers[0].on("change", async (changedPath) => { + // page reload + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(changedPath).toBe(file); + + resolve(); + }); + }); + }); + + it("should not reload when an ignored glob file is changed", async (t) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://localhost:${port}/`, { + waitUntil: "networkidle0", + }); + + t.assert.snapshot(response.status()); + + // change ignored file content + fs.writeFileSync(ignoredFile, "// changed", "utf8"); + + // wait a bit to ensure no reload happens + await new Promise((resolve) => { + let changed = false; + + server.staticWatchers[0].on("change", () => { + changed = true; + }); + + setTimeout(() => { + expect(changed).toBe(false); + resolve(); + }, 2000); + }); + + // restore file + fs.writeFileSync(ignoredFile, "// test file\n", "utf8"); + }); + }); + + describe("should work with ignored option using glob array", () => { + const file = path.join(watchDir, "assets/example.txt"); + const ignoredFile = path.join(watchDir, "assets/example.js"); + let compiler; + let server; + let page; + let browser; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + watchFiles: { + paths: watchDir, + options: { + ignored: [`${watchDir}/**/*.js`], + }, + }, + port, + }, + compiler, ); - expect(pageErrors).toMatchSnapshot("page errors"); + await server.start(); + + ({ page, browser } = await runBrowser()); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await browser.close(); + await server.stop(); + fs.truncateSync(file); + }); + + it("should reload when file content is changed", async (t) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://localhost:${port}/`, { + waitUntil: "networkidle0", + }); + + t.assert.snapshot(response.status()); + + t.assert.snapshot(consoleMessages.map((message) => message.text())); + + t.assert.snapshot(pageErrors); // change file content fs.writeFileSync(file, "Kurosaki Ichigo", "utf8"); @@ -226,6 +593,42 @@ describe("watchFiles option", () => { }); }); }); + + it("should not reload when an ignored glob file is changed", async (t) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://localhost:${port}/`, { + waitUntil: "networkidle0", + }); + + t.assert.snapshot(response.status()); + + // change ignored file content + fs.writeFileSync(ignoredFile, "// changed", "utf8"); + + // wait a bit to ensure no reload happens + await new Promise((resolve) => { + let changed = false; + + server.staticWatchers[0].on("change", () => { + changed = true; + }); + + setTimeout(() => { + expect(changed).toBe(false); + resolve(); + }, 2000); + }); + + // restore file + fs.writeFileSync(ignoredFile, "// test file\n", "utf8"); + }); }); describe("should not crash if file doesn't exist", () => { @@ -267,7 +670,7 @@ describe("watchFiles option", () => { await server.stop(); }); - it("should reload when file content is changed", async () => { + it("should reload when file content is changed", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -280,13 +683,11 @@ describe("watchFiles option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); await new Promise((resolve) => { server.staticWatchers[0].on("change", async (changedPath) => { @@ -343,7 +744,7 @@ describe("watchFiles option", () => { fs.truncateSync(file); }); - it("should reload when file content is changed", async () => { + it("should reload when file content is changed", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -356,13 +757,11 @@ describe("watchFiles option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); // change file content fs.writeFileSync(file, "Kurosaki Ichigo", "utf8"); @@ -416,7 +815,7 @@ describe("watchFiles option", () => { fs.truncateSync(other); }); - it("should reload when file content is changed", async () => { + it("should reload when file content is changed", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -429,13 +828,11 @@ describe("watchFiles option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); // change file content fs.writeFileSync(file, "foo", "utf8"); @@ -497,7 +894,7 @@ describe("watchFiles option", () => { fs.truncateSync(other); }); - it("should reload when file content is changed", async () => { + it("should reload when file content is changed", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -510,13 +907,11 @@ describe("watchFiles option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); // change file content fs.writeFileSync(file, "foo", "utf8"); @@ -556,9 +951,31 @@ describe("watchFiles option", () => { describe("should work with options", () => { const file = path.join(watchDir, "assets/example.txt"); - const chokidarMock = jest.spyOn(chokidar, "watch"); - const optionCases = [ + { + interval: undefined, + }, + { + usePolling: undefined, + }, + { + persistent: undefined, + }, + { + followSymlinks: undefined, + }, + { + atomic: undefined, + }, + { + alwaysStat: undefined, + }, + { + depth: undefined, + }, + { + ignorePermissionErrors: undefined, + }, { poll: true, }, @@ -609,8 +1026,6 @@ describe("watchFiles option", () => { let consoleMessages; beforeEach(async () => { - chokidarMock.mockClear(); - compiler = webpack(config); server = new Server( @@ -638,7 +1053,7 @@ describe("watchFiles option", () => { fs.truncateSync(file); }); - it("should reload when file content is changed", async () => { + it("should reload when file content is changed", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -652,15 +1067,13 @@ describe("watchFiles option", () => { }); // should pass correct options to chokidar config - expect(chokidarMock.mock.calls[0][1]).toMatchSnapshot(); + t.assert.snapshot(server.staticWatchers[0].options); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); // change file content fs.writeFileSync(file, "Kurosaki Ichigo", "utf8"); diff --git a/test/e2e/web-socket-communication.test.js b/test/e2e/web-socket-communication.test.js index 8af3b3678a..3154838789 100644 --- a/test/e2e/web-socket-communication.test.js +++ b/test/e2e/web-socket-communication.test.js @@ -1,18 +1,20 @@ -"use strict"; - -const webpack = require("webpack"); -const WebSocket = require("ws"); -const Server = require("../../lib/Server"); -const WebsocketServer = require("../../lib/servers/WebsocketServer"); -const config = require("../fixtures/client-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["web-socket-communication"]; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import webpack from "webpack"; +import WebSocket from "ws"; +import Server from "../../lib/Server.js"; +import WebsocketServer from "../../lib/servers/WebsocketServer.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const port = portsMap["web-socket-communication"]; describe("web socket communication", () => { - const webSocketServers = ["ws", "sockjs"]; + const webSocketServers = ["ws"]; for (const websocketServer of webSocketServers) { - it(`should work and close web socket client connection when web socket server closed ("${websocketServer}")`, async () => { + it(`should work and close web socket client connection when web socket server closed ("${websocketServer}")`, async (t) => { WebsocketServer.heartbeatInterval = 100; const compiler = webpack(config); @@ -55,14 +57,14 @@ describe("web socket communication", () => { }, 100); }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); } }); - it(`should work and terminate client that is not alive ("${websocketServer}")`, async () => { + it(`should work and terminate client that is not alive ("${websocketServer}")`, async (t) => { WebsocketServer.heartbeatInterval = 100; const compiler = webpack(config); @@ -101,16 +103,14 @@ describe("web socket communication", () => { }); expect(server.webSocketServer.clients).toHaveLength(0); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await server.stop(); } }); - it(`should work and reconnect when the connection is lost ("${websocketServer}")`, async () => { + it(`should work and reconnect when the connection is lost ("${websocketServer}")`, async (t) => { WebsocketServer.heartbeatInterval = 100; const compiler = webpack(config); @@ -147,10 +147,8 @@ describe("web socket communication", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); diff --git a/test/e2e/web-socket-server-url.test.js b/test/e2e/web-socket-server-url.test.js index 24147d0ba2..e2adc837ff 100644 --- a/test/e2e/web-socket-server-url.test.js +++ b/test/e2e/web-socket-server-url.test.js @@ -1,21 +1,23 @@ -"use strict"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import express from "express"; +import { createProxyMiddleware } from "http-proxy-middleware"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import sessionSubscribe from "../helpers/session-subscribe.js"; +import portsMap from "../ports-map.js"; -const express = require("express"); -const { createProxyMiddleware } = require("http-proxy-middleware"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const sessionSubscribe = require("../helpers/session-subscribe"); -const [port1, port2] = require("../ports-map")["web-socket-server-url"]; +const [port1, port2] = portsMap["web-socket-server-url"]; -const webSocketServers = ["ws", "sockjs"]; +const webSocketServers = ["ws"]; describe("web socket server URL", () => { for (const webSocketServer of webSocketServers) { - const websocketURLProtocol = webSocketServer === "ws" ? "ws" : "http"; + const websocketURLProtocol = webSocketServer; - it(`should work behind proxy, when hostnames are same and ports are different ("${webSocketServer}")`, async () => { + it(`should work behind proxy, when hostnames are same and ports are different ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -69,27 +71,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://${proxyHost}:${proxyPort}/`, { waitUntil: "networkidle0", @@ -99,10 +93,8 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://${devServerHost}:${devServerPort}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); await browser.close(); @@ -110,10 +102,10 @@ describe("web socket server URL", () => { } }); - it(`should work behind proxy, when hostnames are different and ports are same ("${webSocketServer}")`, async () => { + it(`should work behind proxy, when hostnames are different and ports are same ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; - const proxyHost = Server.internalIPSync("v4"); + const proxyHost = Server.findIp("v4", false); const proxyPort = port1; const compiler = webpack(config); @@ -164,27 +156,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://${proxyHost}:${proxyPort}/`, { waitUntil: "networkidle0", @@ -195,10 +179,8 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://${devServerHost}:${devServerPort}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); await browser.close(); @@ -206,10 +188,10 @@ describe("web socket server URL", () => { } }); - it(`should work behind proxy, when hostnames are different and ports are different ("${webSocketServer}")`, async () => { + it(`should work behind proxy, when hostnames are different and ports are different ("${webSocketServer}")`, async (t) => { const devServerHost = "localhost"; const devServerPort = port1; - const proxyHost = Server.internalIPSync("v4"); + const proxyHost = Server.findIp("v4", false); const proxyPort = port2; const compiler = webpack(config); @@ -265,27 +247,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://${proxyHost}:${proxyPort}/`, { waitUntil: "networkidle0", }); @@ -295,10 +269,8 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://${devServerHost}:${devServerPort}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -307,10 +279,10 @@ describe("web socket server URL", () => { } }); - it(`should work behind proxy, when the "host" option is "local-ip" and the "port" option is "auto" ("${webSocketServer}")`, async () => { + it(`should work behind proxy, when the "host" option is "local-ip" and the "port" option is "auto" ("${webSocketServer}")`, async (t) => { process.env.WEBPACK_DEV_SERVER_BASE_PORT = 40000; - const proxyHost = Server.internalIPSync("v4"); + const proxyHost = Server.findIp("v4", false); const proxyPort = port2; const compiler = webpack(config); @@ -365,27 +337,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://${proxyHost}:${proxyPort}/`, { waitUntil: "networkidle0", @@ -396,10 +360,8 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://${resolvedHost}:${resolvedPort}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -410,7 +372,7 @@ describe("web socket server URL", () => { } }); - it(`should work with the "client.webSocketURL.protocol" option ("${webSocketServer}")`, async () => { + it(`should work with the "client.webSocketURL.protocol" option ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { @@ -443,27 +405,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://localhost:${port1}/`, { waitUntil: "networkidle0", @@ -474,17 +428,15 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://localhost:${port1}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work with the "client.webSocketURL.protocol" option using "auto:" value ("${webSocketServer}")`, async () => { + it(`should work with the "client.webSocketURL.protocol" option using "auto:" value ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { @@ -517,27 +469,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://localhost:${port1}/`, { waitUntil: "networkidle0", @@ -548,17 +492,15 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://localhost:${port1}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work with the "client.webSocketURL.protocol" option using "http:" value and convert to "ws:" ("${webSocketServer}")`, async () => { + it(`should work with the "client.webSocketURL.protocol" option using "http:" value and convert to "ws:" ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { @@ -591,27 +533,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://localhost:${port1}/`, { waitUntil: "networkidle0", @@ -622,17 +556,15 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://localhost:${port1}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work with the "client.webSocketURL.host" option ("${webSocketServer}")`, async () => { + it(`should work with the "client.webSocketURL.host" option ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { @@ -665,27 +597,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -696,17 +620,15 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work with the "client.webSocketURL.host" option using "0.0.0.0" value ("${webSocketServer}")`, async () => { + it(`should work with the "client.webSocketURL.host" option using "0.0.0.0" value ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { @@ -739,27 +661,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", }); @@ -769,17 +683,15 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work with the "client.webSocketURL.port" option ("${webSocketServer}")`, async () => { + it(`should work with the "client.webSocketURL.port" option ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { @@ -812,27 +724,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -843,17 +747,15 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work with the "client.webSocketURL.port" option as string ("${webSocketServer}")`, async () => { + it(`should work with the "client.webSocketURL.port" option as string ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { @@ -886,27 +788,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -917,32 +811,29 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work with "client.webSocketURL.port" and "webSocketServer.options.port" options as string ("${webSocketServer}")`, async () => { + it(`should work with "client.webSocketURL.port" and "webSocketServer.options.port" options as string ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { webSocketServer: { type: webSocketServer, options: { host: "0.0.0.0", - // "sockjs" doesn't support external server - port: webSocketServer === "sockjs" ? `${port1}` : `${port2}`, + port: `${port2}`, }, }, port: port1, host: "0.0.0.0", client: { webSocketURL: { - port: webSocketServer === "sockjs" ? `${port1}` : `${port2}`, + port: `${port2}`, }, }, allowedHosts: "all", @@ -967,27 +858,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -996,21 +879,17 @@ describe("web socket server URL", () => { const [webSocketRequest] = webSocketRequests; expect(webSocketRequest.url).toContain( - webSocketServer === "sockjs" - ? `${websocketURLProtocol}://127.0.0.1:${port1}/ws` - : `${websocketURLProtocol}://127.0.0.1:${port2}/ws`, + `${websocketURLProtocol}://127.0.0.1:${port2}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work with the "client.webSocketURL.port" option using "0" value ("${webSocketServer}")`, async () => { + it(`should work with the "client.webSocketURL.port" option using "0" value ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { @@ -1043,27 +922,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", }); @@ -1073,17 +944,15 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work with the "client.webSocketURL.pathname" option ("${webSocketServer}")`, async () => { + it(`should work with the "client.webSocketURL.pathname" option ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { @@ -1116,27 +985,18 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); - - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + const session = await page.createCDPSession(); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -1147,17 +1007,15 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work with default "/ws" value of the "client.webSocketURL.pathname" option ("${webSocketServer}")`, async () => { + it(`should work with default "/ws" value of the "client.webSocketURL.pathname" option ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { webSocketServer, @@ -1185,27 +1043,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -1216,17 +1066,15 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work with the "client.webSocketURL.username" option ("${webSocketServer}")`, async () => { + it(`should work with the "client.webSocketURL.username" option ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { @@ -1259,27 +1107,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", }); @@ -1289,27 +1129,22 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://zenitsu@127.0.0.1:${port1}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work with the "client.webSocketURL.password" option ("${webSocketServer}")`, async () => { + it(`should work with the "client.webSocketURL.password" option ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { - webSocketURL: - webSocketServer === "ws" - ? { - username: "foo", - password: "chuntaro", - } - : {}, + webSocketURL: { + username: "foo", + password: "chuntaro", + }, }, webSocketServer, port: port1, @@ -1336,27 +1171,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", }); @@ -1364,22 +1191,17 @@ describe("web socket server URL", () => { const [webSocketRequest] = webSocketRequests; expect(webSocketRequest.url).toContain( - // "sockjs" has bug with parsing URL - webSocketServer === "ws" - ? `${websocketURLProtocol}://foo:chuntaro@127.0.0.1:${port1}/ws` - : `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, + `${websocketURLProtocol}://foo:chuntaro@127.0.0.1:${port1}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work with the "client.webSocketURL.username" and "client.webSocketURL.password" option ("${webSocketServer}")`, async () => { + it(`should work with the "client.webSocketURL.username" and "client.webSocketURL.password" option ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { @@ -1413,27 +1235,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -1444,17 +1258,15 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://zenitsu:chuntaro@127.0.0.1:${port1}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work with the custom web socket server "path" ("${webSocketServer}")`, async () => { + it(`should work with the custom web socket server "path" ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { webSocketServer: { @@ -1487,27 +1299,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/custom-ws\/foo\/bar/.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -1518,10 +1322,8 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws/foo/bar`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); @@ -1529,13 +1331,13 @@ describe("web socket server URL", () => { }); // Only works for "ws" server - it(`should work with the custom web socket server "path" using empty value ("${webSocketServer}")`, async () => { + it(`should work with the custom web socket server "path" using empty value ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { webSocketServer: { type: webSocketServer, options: { - path: webSocketServer === "ws" ? "" : "/custom-ws", + path: "", }, }, port: port1, @@ -1562,27 +1364,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/custom-ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -1591,21 +1385,17 @@ describe("web socket server URL", () => { const [webSocketRequest] = webSocketRequests; expect(webSocketRequest.url).toContain( - webSocketServer === "ws" - ? `${websocketURLProtocol}://127.0.0.1:${port1}` - : `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws`, + `${websocketURLProtocol}://127.0.0.1:${port1}`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ("${webSocketServer}")`, async () => { + it(`should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { @@ -1643,27 +1433,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/custom-ws\/foo\/bar/.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -1674,17 +1456,15 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws/foo/bar`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending without slash ("${webSocketServer}")`, async () => { + it(`should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending without slash ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { @@ -1722,27 +1502,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/custom-ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -1753,29 +1525,26 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - // Only works for "ws" server, "sockjs" adds "/" be default, because need do requests like "/custom-ws/info?t=1624462615772" - it(`should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending with slash ("${webSocketServer}")`, async () => { + it(`should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending with slash ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { webSocketURL: { - pathname: webSocketServer === "ws" ? "/custom-ws/" : "/custom-ws", + pathname: "/custom-ws/", }, }, webSocketServer: { type: webSocketServer, options: { - path: webSocketServer === "ws" ? "/custom-ws/" : "/custom-ws", + path: "/custom-ws/", }, }, port: port1, @@ -1802,27 +1571,20 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); + + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/custom-ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", }); @@ -1832,10 +1594,8 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws/`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); @@ -1843,18 +1603,18 @@ describe("web socket server URL", () => { }); // Only works for "ws" server - it(`should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" using empty value ("${webSocketServer}")`, async () => { + it(`should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" using empty value ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { webSocketURL: { - pathname: webSocketServer === "ws" ? "" : "/custom-ws", + pathname: "", }, }, webSocketServer: { type: webSocketServer, options: { - path: webSocketServer === "ws" ? "" : "/custom-ws", + path: "", }, }, port: port1, @@ -1881,27 +1641,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/custom-ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -1910,22 +1662,17 @@ describe("web socket server URL", () => { const [webSocketRequest] = webSocketRequests; expect(webSocketRequest.url).toContain( - webSocketServer === "ws" - ? `${websocketURLProtocol}://127.0.0.1:${port1}` - : `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws`, + `${websocketURLProtocol}://127.0.0.1:${port1}`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - // Only works for "sockjs" server - it(`should work with the "client.webSocketURL.pathname" option and the custom web socket server "prefix" for compatibility with "sockjs" ("${webSocketServer}")`, async () => { + it(`should work with the "client.webSocketURL.pathname" option ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { @@ -1935,10 +1682,7 @@ describe("web socket server URL", () => { }, webSocketServer: { type: webSocketServer, - options: - webSocketServer === "ws" - ? { path: "/custom-ws" } - : { prefix: "/custom-ws" }, + options: { path: "/custom-ws" }, }, port: port1, host: "0.0.0.0", @@ -1964,27 +1708,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/custom-ws/.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -1995,18 +1731,16 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work when "host" option is IPv4 ("${webSocketServer}")`, async () => { - const hostname = Server.internalIPSync("v4"); + it(`should work when "host" option is IPv4 ("${webSocketServer}")`, async (t) => { + const hostname = Server.findIp("v4", false); const compiler = webpack(config); const devServerOptions = { webSocketServer, @@ -2033,27 +1767,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://${hostname}:${port1}/`, { waitUntil: "networkidle0", }); @@ -2063,18 +1789,16 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://${hostname}:${port1}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work when "host" option is "local-ip" ("${webSocketServer}")`, async () => { - const hostname = Server.internalIPSync("v4"); + it(`should work when "host" option is "local-ip" ("${webSocketServer}")`, async (t) => { + const hostname = Server.findIp("v4", false); const compiler = webpack(config); const devServerOptions = { webSocketServer, @@ -2101,27 +1825,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://${hostname}:${port1}/`, { waitUntil: "networkidle0", @@ -2132,18 +1848,16 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://${hostname}:${port1}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work when "host" option is "local-ipv4" ("${webSocketServer}")`, async () => { - const hostname = Server.internalIPSync("v4"); + it(`should work when "host" option is "local-ipv4" ("${webSocketServer}")`, async (t) => { + const hostname = Server.findIp("v4", false); const compiler = webpack(config); const devServerOptions = { webSocketServer, @@ -2170,27 +1884,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://${hostname}:${port1}/`, { waitUntil: "networkidle0", }); @@ -2200,17 +1906,15 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://${hostname}:${port1}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work with "server: 'https'" option ("${webSocketServer}")`, async () => { + it(`should work with "server: 'https'" option ("${webSocketServer}")`, async (t) => { const hostname = "localhost"; const compiler = webpack(config); const devServerOptions = { @@ -2238,27 +1942,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`https://${hostname}:${port1}/`, { waitUntil: "networkidle0", @@ -2266,112 +1962,17 @@ describe("web socket server URL", () => { const [webSocketRequest] = webSocketRequests; - if (webSocketServer === "ws") { - expect(webSocketRequest.url).toContain( - `wss://${hostname}:${port1}/ws`, - ); - } else { - expect(webSocketRequest.url).toContain( - `https://${hostname}:${port1}/ws`, - ); - } - - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + expect(webSocketRequest.url).toContain(`wss://${hostname}:${port1}/ws`); + + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - const [major] = process.versions.node.split(".").map(Number); - - (major >= 24 ? it.skip : it)( - `should work with "server: 'spdy'" option ("${webSocketServer}")`, - async () => { - const hostname = "localhost"; - const compiler = webpack(config); - const devServerOptions = { - webSocketServer, - port: port1, - server: "spdy", - }; - const server = new Server(devServerOptions, compiler); - - await server.start(); - - const { page, browser } = await runBrowser(); - - try { - const pageErrors = []; - const consoleMessages = []; - - page - .on("console", (message) => { - consoleMessages.push(message); - }) - .on("pageerror", (error) => { - pageErrors.push(error); - }); - - const webSocketRequests = []; - - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); - - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); - - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); - - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } - - await page.goto(`https://${hostname}:${port1}/`, { - waitUntil: "networkidle0", - }); - - const [webSocketRequest] = webSocketRequests; - - /* eslint-disable jest/no-standalone-expect */ - if (webSocketServer === "ws") { - expect(webSocketRequest.url).toContain( - `wss://${hostname}:${port1}/ws`, - ); - } else { - expect(webSocketRequest.url).toContain( - `https://${hostname}:${port1}/ws`, - ); - } - - expect(consoleMessages.map((message) => message.text())).toEqual([ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - ]); - expect(pageErrors).toHaveLength(0); - /* eslint-enable jest/no-standalone-expect */ - } finally { - await browser.close(); - await server.stop(); - } - }, - ); - - it(`should work when "port" option is "auto" ("${webSocketServer}")`, async () => { + it(`should work when "port" option is "auto" ("${webSocketServer}")`, async (t) => { process.env.WEBPACK_DEV_SERVER_BASE_PORT = 50000; const compiler = webpack(config); @@ -2403,27 +2004,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${resolvedFreePort}/`, { waitUntil: "networkidle0", @@ -2434,10 +2027,8 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://127.0.0.1:${resolvedFreePort}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); @@ -2446,7 +2037,7 @@ describe("web socket server URL", () => { } }); - it(`should work with "client.webSocketURL.*" options ("${webSocketServer}")`, async () => { + it(`should work with "client.webSocketURL.*" options ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { @@ -2482,27 +2073,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -2513,17 +2096,15 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work with the "client.webSocketURL" option as "string" ("${webSocketServer}")`, async () => { + it(`should work with the "client.webSocketURL" option as "string" ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { @@ -2554,27 +2135,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -2585,17 +2158,15 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work and throw an error on invalid web socket URL ("${webSocketServer}")`, async () => { + it(`should work and throw an error on invalid web socket URL ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { @@ -2628,21 +2199,19 @@ describe("web socket server URL", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect( + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot( pageErrors.map((pageError) => pageError.message.split("\n")[0].replace("SyntaxError: ", ""), ), - ).toMatchSnapshot("page errors"); + ); } finally { await browser.close(); await server.stop(); } }); - it(`should not work and output disconnect wrong web socket URL ("${webSocketServer}")`, async () => { + it(`should not work and output disconnect wrong web socket URL ("${webSocketServer}")`, async (t) => { const compiler = webpack(config); const devServerOptions = { client: { @@ -2694,10 +2263,10 @@ describe("web socket server URL", () => { }, 100); }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect( + t.assert.snapshot(consoleMessages); + t.assert.snapshot( pageErrors.map((pageError) => pageError.message.split("\n")[0]), - ).toMatchSnapshot("page errors"); + ); } finally { await browser.close(); await server.stop(); diff --git a/test/e2e/web-socket-server.test.js b/test/e2e/web-socket-server.test.js index b611040e2e..1a0856b5e9 100644 --- a/test/e2e/web-socket-server.test.js +++ b/test/e2e/web-socket-server.test.js @@ -1,14 +1,16 @@ -"use strict"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import sessionSubscribe from "../helpers/session-subscribe.js"; +import portsMap from "../ports-map.js"; -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const sessionSubscribe = require("../helpers/session-subscribe"); -const port = require("../ports-map")["web-socket-server-test"]; +const port = portsMap["web-socket-server-test"]; describe("web socket server", () => { - it("should work allow to disable", async () => { + it("should work allow to disable", async (t) => { const devServerPort = port; const compiler = webpack(config); @@ -35,11 +37,7 @@ describe("web socket server", () => { }); const webSocketRequests = []; - const session = await page.target().createCDPSession(); - - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + const session = await page.createCDPSession(); await session.send("Target.setAutoAttach", { autoAttach: true, @@ -47,17 +45,19 @@ describe("web socket server", () => { waitForDebuggerOnStart: true, }); - sessionSubscribe(session); + await sessionSubscribe(session); + + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://localhost:${port}/`, { waitUntil: "networkidle0", }); expect(webSocketRequests).toHaveLength(0); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); diff --git a/test/fixtures/cli-colors-default-stats/webpack.config.js b/test/fixtures/cli-colors-default-stats/webpack.config.js index 856a6d18a2..dc3b9cff4e 100644 --- a/test/fixtures/cli-colors-default-stats/webpack.config.js +++ b/test/fixtures/cli-colors-default-stats/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", context: __dirname, entry: "./foo.js", diff --git a/test/fixtures/cli-colors-disabled/webpack.config.js b/test/fixtures/cli-colors-disabled/webpack.config.js index e0c751cb9e..630461f4f0 100644 --- a/test/fixtures/cli-colors-disabled/webpack.config.js +++ b/test/fixtures/cli-colors-disabled/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", stats: { colors: false, diff --git a/test/fixtures/cli-colors-enabled/webpack.config.js b/test/fixtures/cli-colors-enabled/webpack.config.js index 9cdfeb4a69..e8b0a7d80a 100644 --- a/test/fixtures/cli-colors-enabled/webpack.config.js +++ b/test/fixtures/cli-colors-enabled/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", stats: { colors: true, diff --git a/test/fixtures/cli-empty-entry/webpack.config.js b/test/fixtures/cli-empty-entry/webpack.config.js index 82d77e536f..f6d4be0bf0 100644 --- a/test/fixtures/cli-empty-entry/webpack.config.js +++ b/test/fixtures/cli-empty-entry/webpack.config.js @@ -1,6 +1,4 @@ -"use strict"; - -module.exports = { +export default { mode: "development", stats: { orphanModules: true, preset: "detailed" }, entry: {}, diff --git a/test/fixtures/cli-entry-as-descriptor/webpack.config.js b/test/fixtures/cli-entry-as-descriptor/webpack.config.js index d7649d4b3c..300ccf9f97 100644 --- a/test/fixtures/cli-entry-as-descriptor/webpack.config.js +++ b/test/fixtures/cli-entry-as-descriptor/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", context: __dirname, entry: { diff --git a/test/fixtures/cli-multi-entry/webpack.config.js b/test/fixtures/cli-multi-entry/webpack.config.js index c171eb78c8..62ac3132cb 100644 --- a/test/fixtures/cli-multi-entry/webpack.config.js +++ b/test/fixtures/cli-multi-entry/webpack.config.js @@ -1,8 +1,9 @@ -"use strict"; +import path, { resolve } from "node:path"; +import { fileURLToPath } from "node:url"; -const { resolve } = require("path"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", stats: "detailed", context: __dirname, diff --git a/test/fixtures/cli-promise-config/webpack.config.js b/test/fixtures/cli-promise-config/webpack.config.js index a75b90a920..d75b468886 100644 --- a/test/fixtures/cli-promise-config/webpack.config.js +++ b/test/fixtures/cli-promise-config/webpack.config.js @@ -1,8 +1,9 @@ -"use strict"; +import path, { join } from "node:path"; +import { fileURLToPath } from "node:url"; -const { join } = require("path"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = () => +export default () => new Promise((resolve) => { resolve({ mode: "development", diff --git a/test/fixtures/cli-single-entry/webpack.config.js b/test/fixtures/cli-single-entry/webpack.config.js index 2106279701..1a9dc8b050 100644 --- a/test/fixtures/cli-single-entry/webpack.config.js +++ b/test/fixtures/cli-single-entry/webpack.config.js @@ -1,8 +1,9 @@ -"use strict"; +import path, { resolve } from "node:path"; +import { fileURLToPath } from "node:url"; -const { resolve } = require("path"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", stats: "detailed", entry: resolve(__dirname, "./foo.js"), diff --git a/test/fixtures/cli-target-config/webpack.config.js b/test/fixtures/cli-target-config/webpack.config.js index 6b6380e474..bfc85ffa88 100644 --- a/test/fixtures/cli-target-config/webpack.config.js +++ b/test/fixtures/cli-target-config/webpack.config.js @@ -1,8 +1,9 @@ -"use strict"; +import path, { resolve } from "node:path"; +import { fileURLToPath } from "node:url"; -const { resolve } = require("path"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", stats: "detailed", entry: resolve(__dirname, "./foo.js"), diff --git a/test/fixtures/cli-universal-compiler-config/webpack.config.js b/test/fixtures/cli-universal-compiler-config/webpack.config.js index 7562d54206..cbb08cbd60 100644 --- a/test/fixtures/cli-universal-compiler-config/webpack.config.js +++ b/test/fixtures/cli-universal-compiler-config/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = [ +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default [ { name: "client", mode: "development", diff --git a/test/fixtures/cli/webpack.config.js b/test/fixtures/cli/webpack.config.js index 20a13bb93d..c671dbb513 100644 --- a/test/fixtures/cli/webpack.config.js +++ b/test/fixtures/cli/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", stats: "detailed", context: __dirname, diff --git a/test/fixtures/client-config/webpack.config.js b/test/fixtures/client-config/webpack.config.js index 41cfbc5928..3a44fbfc82 100644 --- a/test/fixtures/client-config/webpack.config.js +++ b/test/fixtures/client-config/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { devtool: false, mode: "development", context: __dirname, diff --git a/test/fixtures/custom-client/CustomSockJSClient.js b/test/fixtures/custom-client/CustomWebSocketClient.js similarity index 51% rename from test/fixtures/custom-client/CustomSockJSClient.js rename to test/fixtures/custom-client/CustomWebSocketClient.js index e4f6c54de0..94490700f0 100644 --- a/test/fixtures/custom-client/CustomSockJSClient.js +++ b/test/fixtures/custom-client/CustomWebSocketClient.js @@ -1,23 +1,20 @@ -"use strict"; - -const SockJS = require("sockjs-client/dist/sockjs"); - -module.exports = class SockJSClient { +export default class WebSocketClient { constructor(url) { - this.sock = new SockJS( - url.replace(/^ws:/i, "http://").replace(/^wss:/i, "https://"), - ); + this.client = new WebSocket(url); + this.client.onerror = (error) => { + console.error(error); + }; } onOpen(f) { - this.sock.onopen = () => { + this.client.onopen = () => { console.log("open"); f(); }; } onClose(f) { - this.sock.onclose = () => { + this.client.onclose = () => { console.log("close"); f(); }; @@ -25,10 +22,10 @@ module.exports = class SockJSClient { // call f with the message string as the first argument onMessage(f) { - this.sock.onmessage = (e) => { + this.client.onmessage = (e) => { const obj = JSON.parse(e.data); console.log(obj.type); f(e.data); }; } -}; +} diff --git a/test/fixtures/dev-public-path/webpack.config.js b/test/fixtures/dev-public-path/webpack.config.js index 2faa9805d1..55dd346ec2 100644 --- a/test/fixtures/dev-public-path/webpack.config.js +++ b/test/fixtures/dev-public-path/webpack.config.js @@ -1,8 +1,9 @@ -"use strict"; +import path, { join } from "node:path"; +import { fileURLToPath } from "node:url"; -const { join } = require("path"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", entry: join(__dirname, "foo.js"), devServer: { diff --git a/test/fixtures/dev-server/client-custom-path-config.js b/test/fixtures/dev-server/client-custom-path-config.js index 8c9d377854..487644c33b 100644 --- a/test/fixtures/dev-server/client-custom-path-config.js +++ b/test/fixtures/dev-server/client-custom-path-config.js @@ -1,8 +1,9 @@ -"use strict"; +import path, { resolve } from "node:path"; +import { fileURLToPath } from "node:url"; -const { resolve } = require("path"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", stats: "detailed", entry: resolve(__dirname, "./foo.js"), diff --git a/test/fixtures/dev-server/client-default-path-config.js b/test/fixtures/dev-server/client-default-path-config.js index f208a49af4..25355ea55c 100644 --- a/test/fixtures/dev-server/client-default-path-config.js +++ b/test/fixtures/dev-server/client-default-path-config.js @@ -1,8 +1,9 @@ -"use strict"; +import path, { resolve } from "node:path"; +import { fileURLToPath } from "node:url"; -const { resolve } = require("path"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", stats: "detailed", entry: resolve(__dirname, "./foo.js"), diff --git a/test/fixtures/entry-as-function/webpack.config.js b/test/fixtures/entry-as-function/webpack.config.js index cf48f0b924..b0add3e0ff 100644 --- a/test/fixtures/entry-as-function/webpack.config.js +++ b/test/fixtures/entry-as-function/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", context: __dirname, entry: () => "./foo.js", diff --git a/test/fixtures/historyapifallback-2-config/webpack.config.js b/test/fixtures/historyapifallback-2-config/webpack.config.js index f03898aa61..49b0c25f95 100644 --- a/test/fixtures/historyapifallback-2-config/webpack.config.js +++ b/test/fixtures/historyapifallback-2-config/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/historyapifallback-3-config/foo.js b/test/fixtures/historyapifallback-3-config/foo.js index aae7eee3a7..ff0128eab4 100644 --- a/test/fixtures/historyapifallback-3-config/foo.js +++ b/test/fixtures/historyapifallback-3-config/foo.js @@ -1,5 +1,3 @@ -"use strict"; - -require("./bar.html"); +import "./bar.html"; console.log("Hey."); diff --git a/test/fixtures/historyapifallback-3-config/webpack.config.js b/test/fixtures/historyapifallback-3-config/webpack.config.js index 792be36f9c..62cc3f85e0 100644 --- a/test/fixtures/historyapifallback-3-config/webpack.config.js +++ b/test/fixtures/historyapifallback-3-config/webpack.config.js @@ -1,5 +1,7 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const moduleRuleForHTML = { test: /\.html$/, type: "asset/resource", @@ -8,7 +10,7 @@ const moduleRuleForHTML = { }, }; -module.exports = { +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/historyapifallback-config/foo.js b/test/fixtures/historyapifallback-config/foo.js index fa06808d30..49d08468b9 100644 --- a/test/fixtures/historyapifallback-config/foo.js +++ b/test/fixtures/historyapifallback-config/foo.js @@ -1,6 +1,4 @@ -"use strict"; - -require("./index.html"); -require("./bar.html"); +import "./index.html"; +import "./bar.html"; console.log("Hey."); diff --git a/test/fixtures/historyapifallback-config/webpack.config.js b/test/fixtures/historyapifallback-config/webpack.config.js index bf2a52ba91..40e845bb1d 100644 --- a/test/fixtures/historyapifallback-config/webpack.config.js +++ b/test/fixtures/historyapifallback-config/webpack.config.js @@ -1,5 +1,7 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const moduleRuleForHTML = { test: /\.html$/, type: "asset/resource", @@ -8,7 +10,7 @@ const moduleRuleForHTML = { }, }; -module.exports = { +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/lazy-compilation-multiple-entries/webpack.config.js b/test/fixtures/lazy-compilation-multiple-entries/webpack.config.js index 74f65f722b..7c699a32b0 100644 --- a/test/fixtures/lazy-compilation-multiple-entries/webpack.config.js +++ b/test/fixtures/lazy-compilation-multiple-entries/webpack.config.js @@ -1,5 +1,7 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const oneHTMLContent = ` @@ -23,7 +25,7 @@ const twoHTMLContent = ` `; -module.exports = { +export default { devtool: false, mode: "development", context: __dirname, diff --git a/test/fixtures/lazy-compilation-single-entry/webpack.config.js b/test/fixtures/lazy-compilation-single-entry/webpack.config.js index c3223f029a..9bbbe3c7f4 100644 --- a/test/fixtures/lazy-compilation-single-entry/webpack.config.js +++ b/test/fixtures/lazy-compilation-single-entry/webpack.config.js @@ -1,5 +1,7 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const HTMLContent = ` @@ -12,7 +14,7 @@ const HTMLContent = ` `; -module.exports = { +export default { devtool: false, mode: "development", context: __dirname, diff --git a/test/fixtures/mime-types-config/foo.js b/test/fixtures/mime-types-config/foo.js index 739d9bd638..af7b2d3f91 100644 --- a/test/fixtures/mime-types-config/foo.js +++ b/test/fixtures/mime-types-config/foo.js @@ -1,5 +1,3 @@ -"use strict"; - -require("./file.custom"); +import "./file.custom"; console.log("Hey."); diff --git a/test/fixtures/mime-types-config/webpack.config.js b/test/fixtures/mime-types-config/webpack.config.js index 5e59b2d444..c1ef4a1520 100644 --- a/test/fixtures/mime-types-config/webpack.config.js +++ b/test/fixtures/mime-types-config/webpack.config.js @@ -1,5 +1,7 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const moduleRuleForCustom = { test: /\.custom$/, type: "asset/resource", @@ -8,7 +10,7 @@ const moduleRuleForCustom = { }, }; -module.exports = { +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/module-federation-config/entry1.js b/test/fixtures/module-federation-config/entry1.js index dbd0f49a83..ae45df7780 100644 --- a/test/fixtures/module-federation-config/entry1.js +++ b/test/fixtures/module-federation-config/entry1.js @@ -1,3 +1 @@ -"use strict"; - -module.exports = "entry1"; +export default "entry1"; diff --git a/test/fixtures/module-federation-config/entry2.js b/test/fixtures/module-federation-config/entry2.js index 74f9bc577f..bbfcd5c63c 100644 --- a/test/fixtures/module-federation-config/entry2.js +++ b/test/fixtures/module-federation-config/entry2.js @@ -1,3 +1 @@ -"use strict"; - -module.exports = "entry2"; +export default "entry2"; diff --git a/test/fixtures/module-federation-config/webpack.config.js b/test/fixtures/module-federation-config/webpack.config.js index 269e4cab41..0c5fd8e97c 100644 --- a/test/fixtures/module-federation-config/webpack.config.js +++ b/test/fixtures/module-federation-config/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", target: "node", stats: "none", diff --git a/test/fixtures/module-federation-config/webpack.multi.config.js b/test/fixtures/module-federation-config/webpack.multi.config.js index 5863c8e14a..5397b3232d 100644 --- a/test/fixtures/module-federation-config/webpack.multi.config.js +++ b/test/fixtures/module-federation-config/webpack.multi.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = [ +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default [ { mode: "development", target: "node", diff --git a/test/fixtures/module-federation-config/webpack.object-entry.config.js b/test/fixtures/module-federation-config/webpack.object-entry.config.js index 43c47a4183..b80b2539b5 100644 --- a/test/fixtures/module-federation-config/webpack.object-entry.config.js +++ b/test/fixtures/module-federation-config/webpack.object-entry.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", target: "node", stats: "none", diff --git a/test/fixtures/module-federation-config/webpack.plugin.js b/test/fixtures/module-federation-config/webpack.plugin.js index 9178e3c600..c7f28bc20f 100644 --- a/test/fixtures/module-federation-config/webpack.plugin.js +++ b/test/fixtures/module-federation-config/webpack.plugin.js @@ -1,9 +1,12 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import webpack from "webpack"; -const ModuleFederationPlugin = - require("webpack").container.ModuleFederationPlugin; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +const { ModuleFederationPlugin } = webpack.container; + +export default { mode: "development", target: "node", stats: "none", diff --git a/test/fixtures/multi-compiler-one-configuration/webpack.config.js b/test/fixtures/multi-compiler-one-configuration/webpack.config.js index d00d2b4c86..7ac41529dd 100644 --- a/test/fixtures/multi-compiler-one-configuration/webpack.config.js +++ b/test/fixtures/multi-compiler-one-configuration/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = [ +export default [ { target: "web", mode: "development", diff --git a/test/fixtures/multi-compiler-two-configurations/webpack.config.js b/test/fixtures/multi-compiler-two-configurations/webpack.config.js index eaeba3006d..8ee150acf6 100644 --- a/test/fixtures/multi-compiler-two-configurations/webpack.config.js +++ b/test/fixtures/multi-compiler-two-configurations/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = [ +export default [ { target: "web", name: "one", diff --git a/test/fixtures/multi-public-path-config/foo.js b/test/fixtures/multi-public-path-config/foo.js index d2f0aa53dd..287ee67d45 100644 --- a/test/fixtures/multi-public-path-config/foo.js +++ b/test/fixtures/multi-public-path-config/foo.js @@ -1,3 +1 @@ -"use strict"; - -require("./test.html"); +import "./test.html"; diff --git a/test/fixtures/multi-public-path-config/webpack.config.js b/test/fixtures/multi-public-path-config/webpack.config.js index 71e82d2309..7807cb6a56 100644 --- a/test/fixtures/multi-public-path-config/webpack.config.js +++ b/test/fixtures/multi-public-path-config/webpack.config.js @@ -1,6 +1,7 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -const path = require("path"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const moduleRuleForHTML = { test: /\.html$/, @@ -10,7 +11,7 @@ const moduleRuleForHTML = { }, }; -module.exports = [ +export default [ { mode: "development", context: __dirname, diff --git a/test/fixtures/overlay-config/trusted-types.webpack.config.js b/test/fixtures/overlay-config/trusted-types.webpack.config.js index 94c2921269..4839c71b2c 100644 --- a/test/fixtures/overlay-config/trusted-types.webpack.config.js +++ b/test/fixtures/overlay-config/trusted-types.webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/trusted-types-html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/trusted-types-html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/overlay-config/webpack.config.js b/test/fixtures/overlay-config/webpack.config.js index c1e0b481b1..94e2cc00c3 100644 --- a/test/fixtures/overlay-config/webpack.config.js +++ b/test/fixtures/overlay-config/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/provide-plugin-custom/foo.js b/test/fixtures/provide-plugin-custom/foo.js index c28b40f73c..81525bac58 100644 --- a/test/fixtures/provide-plugin-custom/foo.js +++ b/test/fixtures/provide-plugin-custom/foo.js @@ -1,7 +1,5 @@ -"use strict"; - // 'npm run prepare' must be run for this to work during testing -const CustomClient = require("../../fixtures/custom-client/CustomSockJSClient"); +import CustomClient from "../custom-client/CustomWebSocketClient.js"; window.expectedClient = CustomClient; // eslint-disable-next-line camelcase, no-undef diff --git a/test/fixtures/provide-plugin-custom/webpack.config.js b/test/fixtures/provide-plugin-custom/webpack.config.js index 6006074030..3ca91f1f3f 100644 --- a/test/fixtures/provide-plugin-custom/webpack.config.js +++ b/test/fixtures/provide-plugin-custom/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/provide-plugin-default/foo.js b/test/fixtures/provide-plugin-default/foo.js index bd4904444f..a1e1f87ff3 100644 --- a/test/fixtures/provide-plugin-default/foo.js +++ b/test/fixtures/provide-plugin-default/foo.js @@ -1,8 +1,5 @@ -"use strict"; - // 'npm run prepare' must be run for this to work during testing -const WebsocketClient = - require("../../../client/clients/WebSocketClient").default; +import WebsocketClient from "../../../client/clients/WebSocketClient.js"; window.expectedClient = WebsocketClient; // eslint-disable-next-line camelcase, no-undef diff --git a/test/fixtures/provide-plugin-default/webpack.config.js b/test/fixtures/provide-plugin-default/webpack.config.js index 6006074030..3ca91f1f3f 100644 --- a/test/fixtures/provide-plugin-default/webpack.config.js +++ b/test/fixtures/provide-plugin-default/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/provide-plugin-sockjs-config/foo.js b/test/fixtures/provide-plugin-sockjs-config/foo.js deleted file mode 100644 index dd47486385..0000000000 --- a/test/fixtures/provide-plugin-sockjs-config/foo.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -// 'npm run prepare' must be run for this to work during testing -const SockJSClient = require("../../../client/clients/SockJSClient").default; - -window.expectedClient = SockJSClient; -// eslint-disable-next-line camelcase, no-undef -window.injectedClient = __webpack_dev_server_client__.default; diff --git a/test/fixtures/provide-plugin-sockjs-config/webpack.config.js b/test/fixtures/provide-plugin-sockjs-config/webpack.config.js deleted file mode 100644 index 6006074030..0000000000 --- a/test/fixtures/provide-plugin-sockjs-config/webpack.config.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; - -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); - -module.exports = { - mode: "development", - context: __dirname, - stats: "none", - entry: "./foo.js", - output: { - path: "/", - }, - node: false, - infrastructureLogging: { - level: "info", - stream: { - write: () => {}, - }, - }, - plugins: [new HTMLGeneratorPlugin()], -}; diff --git a/test/fixtures/provide-plugin-ws-config/foo.js b/test/fixtures/provide-plugin-ws-config/foo.js index bd4904444f..a1e1f87ff3 100644 --- a/test/fixtures/provide-plugin-ws-config/foo.js +++ b/test/fixtures/provide-plugin-ws-config/foo.js @@ -1,8 +1,5 @@ -"use strict"; - // 'npm run prepare' must be run for this to work during testing -const WebsocketClient = - require("../../../client/clients/WebSocketClient").default; +import WebsocketClient from "../../../client/clients/WebSocketClient.js"; window.expectedClient = WebsocketClient; // eslint-disable-next-line camelcase, no-undef diff --git a/test/fixtures/provide-plugin-ws-config/webpack.config.js b/test/fixtures/provide-plugin-ws-config/webpack.config.js index 6006074030..3ca91f1f3f 100644 --- a/test/fixtures/provide-plugin-ws-config/webpack.config.js +++ b/test/fixtures/provide-plugin-ws-config/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/proxy-config/webpack.config.js b/test/fixtures/proxy-config/webpack.config.js index f03898aa61..49b0c25f95 100644 --- a/test/fixtures/proxy-config/webpack.config.js +++ b/test/fixtures/proxy-config/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/reload-config-2/foo.js b/test/fixtures/reload-config-2/foo.js index 37887d2535..361bfb33ae 100644 --- a/test/fixtures/reload-config-2/foo.js +++ b/test/fixtures/reload-config-2/foo.js @@ -1,4 +1,2 @@ -"use strict"; - // eslint-disable-next-line import/no-unresolved -require("./main.css"); +import "./main.css"; diff --git a/test/fixtures/reload-config-2/webpack.config.js b/test/fixtures/reload-config-2/webpack.config.js index b8d11148bb..272c1adba8 100644 --- a/test/fixtures/reload-config-2/webpack.config.js +++ b/test/fixtures/reload-config-2/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/reload-config/foo.js b/test/fixtures/reload-config/foo.js index 68ad7bddf6..1bebc0ca7a 100644 --- a/test/fixtures/reload-config/foo.js +++ b/test/fixtures/reload-config/foo.js @@ -1,3 +1 @@ -"use strict"; - -require("./main.css"); +import "./main.css"; diff --git a/test/fixtures/reload-config/webpack.config.js b/test/fixtures/reload-config/webpack.config.js index 9801ab7ac2..0d36f857a8 100644 --- a/test/fixtures/reload-config/webpack.config.js +++ b/test/fixtures/reload-config/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", context: __dirname, entry: "./foo.js", diff --git a/test/fixtures/schema/webpack.config.simple.js b/test/fixtures/schema/webpack.config.simple.js index ad290af1fb..49649d403d 100644 --- a/test/fixtures/schema/webpack.config.simple.js +++ b/test/fixtures/schema/webpack.config.simple.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", context: __dirname, entry: "./foo.js", diff --git a/test/fixtures/simple-config-other/webpack.config.js b/test/fixtures/simple-config-other/webpack.config.js index 624dc8a648..15f143f25a 100644 --- a/test/fixtures/simple-config-other/webpack.config.js +++ b/test/fixtures/simple-config-other/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/simple-config/webpack.config.js b/test/fixtures/simple-config/webpack.config.js index 6006074030..3ca91f1f3f 100644 --- a/test/fixtures/simple-config/webpack.config.js +++ b/test/fixtures/simple-config/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/static-config/webpack.config.js b/test/fixtures/static-config/webpack.config.js index e0a2dfdbd5..32509ce43c 100644 --- a/test/fixtures/static-config/webpack.config.js +++ b/test/fixtures/static-config/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/static/webpack.config.js b/test/fixtures/static/webpack.config.js index a710816d46..fbaf1ed462 100644 --- a/test/fixtures/static/webpack.config.js +++ b/test/fixtures/static/webpack.config.js @@ -1,8 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -const path = require("path"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", entry: path.resolve(__dirname, "foo.js"), devServer: { diff --git a/test/fixtures/universal-compiler-config/webpack.config.js b/test/fixtures/universal-compiler-config/webpack.config.js index 368e5606f4..d8c6a07af5 100644 --- a/test/fixtures/universal-compiler-config/webpack.config.js +++ b/test/fixtures/universal-compiler-config/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = [ +export default [ { name: "browser", mode: "development", diff --git a/test/fixtures/watch-files-config/public/assets/example.js b/test/fixtures/watch-files-config/public/assets/example.js new file mode 100644 index 0000000000..346e384d2b --- /dev/null +++ b/test/fixtures/watch-files-config/public/assets/example.js @@ -0,0 +1 @@ +// test file diff --git a/test/fixtures/watch-files-config/webpack.config.js b/test/fixtures/watch-files-config/webpack.config.js index 2f64765a90..64a75adf88 100644 --- a/test/fixtures/watch-files-config/webpack.config.js +++ b/test/fixtures/watch-files-config/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", devtool: false, context: __dirname, diff --git a/test/fixtures/worker-config-dev-server-false/webpack.config.js b/test/fixtures/worker-config-dev-server-false/webpack.config.js index a53fe51d31..5a8079216c 100644 --- a/test/fixtures/worker-config-dev-server-false/webpack.config.js +++ b/test/fixtures/worker-config-dev-server-false/webpack.config.js @@ -1,9 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const path = require("path"); -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = [ +export default [ { name: "app", // dependencies: ["worker"], diff --git a/test/fixtures/worker-config/webpack.config.js b/test/fixtures/worker-config/webpack.config.js index a4b8cc5940..bf3e51136e 100644 --- a/test/fixtures/worker-config/webpack.config.js +++ b/test/fixtures/worker-config/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = [ +export default [ { name: "app", dependencies: ["worker"], diff --git a/test/helpers/ExitOnDonePlugin.js b/test/helpers/ExitOnDonePlugin.js index 656b58579a..334e9bf9be 100644 --- a/test/helpers/ExitOnDonePlugin.js +++ b/test/helpers/ExitOnDonePlugin.js @@ -1,6 +1,4 @@ -"use strict"; - -module.exports = class ExitOnDonePlugin { +export default class ExitOnDonePlugin { apply(compiler) { compiler.hooks.afterDone.tap("webpack-dev-server", (stats) => { let exitCode = 0; @@ -15,4 +13,4 @@ module.exports = class ExitOnDonePlugin { }); }); } -}; +} diff --git a/test/helpers/conditional-test.js b/test/helpers/conditional-test.js index 9a05682c72..cafa92cb67 100644 --- a/test/helpers/conditional-test.js +++ b/test/helpers/conditional-test.js @@ -1,6 +1,4 @@ -"use strict"; - -/* global test */ +import { test } from "node:test"; const isWindows = process.platform === "win32"; @@ -8,12 +6,10 @@ const isWindows = process.platform === "win32"; * @param {string} reason reason * @returns {boolean} true when it is windows, otherwise false */ -function skipTestOnWindows(reason) { +export function skipTestOnWindows(reason) { if (isWindows) { test.skip(reason, () => {}); } return isWindows; } - -module.exports.skipTestOnWindows = skipTestOnWindows; diff --git a/test/helpers/custom-http.js b/test/helpers/custom-http.js index 29046c9bc3..9b4866f1b2 100644 --- a/test/helpers/custom-http.js +++ b/test/helpers/custom-http.js @@ -1,5 +1 @@ -"use strict"; - -const customHTTP = require("node:http"); - -module.exports = customHTTP; +export { default } from "node:http"; diff --git a/test/helpers/html-generator-plugin.js b/test/helpers/html-generator-plugin.js index 261d16e592..6b469ea12c 100644 --- a/test/helpers/html-generator-plugin.js +++ b/test/helpers/html-generator-plugin.js @@ -1,5 +1,3 @@ -"use strict"; - const HTMLContentForIndex = ` @@ -41,7 +39,7 @@ const HTMLContentForTest = ` `; -module.exports = class HTMLGeneratorPlugin { +export default class HTMLGeneratorPlugin { apply(compiler) { const pluginName = "html-generator-plugin"; @@ -79,4 +77,4 @@ module.exports = class HTMLGeneratorPlugin { ); }); } -}; +} diff --git a/test/helpers/jsdom-setup.js b/test/helpers/jsdom-setup.js new file mode 100644 index 0000000000..919aae51b4 --- /dev/null +++ b/test/helpers/jsdom-setup.js @@ -0,0 +1,79 @@ +import { JSDOM } from "jsdom"; + +const dom = new JSDOM("", { + url: "http://localhost/", + pretendToBeVisual: true, +}); + +const props = [ + "window", + "document", + "navigator", + "location", + "history", + "HTMLElement", + "Element", + "Node", + "Event", + "CustomEvent", + "EventTarget", + "MouseEvent", + "KeyboardEvent", + "MessageEvent", + "ErrorEvent", + "PromiseRejectionEvent", + "PageTransitionEvent", + "ProgressEvent", + "PopStateEvent", + "HashChangeEvent", + "MutationObserver", + "IntersectionObserver", + "ResizeObserver", + "DOMParser", + "XMLSerializer", + "FormData", + "Blob", + "File", + "FileReader", + "URL", + "URLSearchParams", + "WebSocket", + "Worker", + "requestAnimationFrame", + "cancelAnimationFrame", + "getComputedStyle", + "self", + "postMessage", + "addEventListener", + "removeEventListener", + "dispatchEvent", + "innerWidth", + "innerHeight", + "screen", + "alert", + "confirm", + "prompt", + "fetch", + "Headers", + "Request", + "Response", +]; + +for (const prop of props) { + if (dom.window[prop] === undefined) continue; + // Bind functions to dom.window so jsdom internals get the right `this` + // (e.g. addEventListener requires this to be an EventTarget). + const value = + typeof dom.window[prop] === "function" + ? dom.window[prop].bind(dom.window) + : dom.window[prop]; + Object.defineProperty(globalThis, prop, { + configurable: true, + enumerable: true, + writable: true, + value, + }); +} + +globalThis.window = globalThis; +globalThis.self = globalThis; diff --git a/test/helpers/normalize-options.js b/test/helpers/normalize-options.js index 923b8146e1..fa34ec779e 100644 --- a/test/helpers/normalize-options.js +++ b/test/helpers/normalize-options.js @@ -1,5 +1,3 @@ -"use strict"; - /** * @param {import("https").ServerOptions} options server options * @returns {Record} normalized server options @@ -38,4 +36,4 @@ function normalizeOptions(options) { return normalizedOptions; } -module.exports = normalizeOptions; +export default normalizeOptions; diff --git a/test/helpers/puppeteer-constants.js b/test/helpers/puppeteer-constants.js index 23bce93c45..346298d823 100644 --- a/test/helpers/puppeteer-constants.js +++ b/test/helpers/puppeteer-constants.js @@ -1,53 +1,49 @@ -"use strict"; - -module.exports = { - reloadReadyDelay: 5000, - completeReloadDelay: 10000, - initConsoleDelay: 3000, - awaitServerCloseDelay: 1000, - beforeBrowserCloseDelay: 3000, - puppeteerArgs: [ - "--disable-background-timer-throttling", - "--disable-breakpad", - "--disable-client-side-phishing-detection", - "--disable-cloud-import", - "--disable-default-apps", - "--disable-dev-shm-usage", - "--disable-extensions", - "--disable-gesture-typing", - "--disable-hang-monitor", - "--disable-infobars", - "--disable-notifications", - "--disable-offer-store-unmasked-wallet-cards", - "--disable-offer-upload-credit-cards", - "--disable-popup-blocking", - "--disable-print-preview", - "--disable-prompt-on-repost", - "--disable-setuid-sandbox", - "--disable-speech-api", - "--disable-sync", - "--disable-tab-for-desktop-share", - "--disable-translate", - "--disable-voice-input", - "--disable-wake-on-wifi", - "--enable-async-dns", - "--enable-simple-cache-backend", - "--enable-tcp-fast-open", - "--enable-webgl", - "--hide-scrollbars", - "--ignore-gpu-blacklist", - "--media-cache-size=33554432", - "--metrics-recording-only", - "--mute-audio", - "--no-default-browser-check", - "--no-first-run", - "--no-pings", - "--no-sandbox", - "--no-zygote", - "--password-store=basic", - "--prerender-from-omnibox=disabled", - "--use-gl=swiftshader", - "--use-mock-keychain", - "--disable-field-trial-config", - ], -}; +export const reloadReadyDelay = 5000; +export const completeReloadDelay = 10000; +export const initConsoleDelay = 3000; +export const awaitServerCloseDelay = 1000; +export const beforeBrowserCloseDelay = 3000; +export const puppeteerArgs = [ + "--disable-background-timer-throttling", + "--disable-breakpad", + "--disable-client-side-phishing-detection", + "--disable-cloud-import", + "--disable-default-apps", + "--disable-dev-shm-usage", + "--disable-extensions", + "--disable-gesture-typing", + "--disable-hang-monitor", + "--disable-infobars", + "--disable-notifications", + "--disable-offer-store-unmasked-wallet-cards", + "--disable-offer-upload-credit-cards", + "--disable-popup-blocking", + "--disable-print-preview", + "--disable-prompt-on-repost", + "--disable-setuid-sandbox", + "--disable-speech-api", + "--disable-sync", + "--disable-tab-for-desktop-share", + "--disable-translate", + "--disable-voice-input", + "--disable-wake-on-wifi", + "--enable-async-dns", + "--enable-simple-cache-backend", + "--enable-tcp-fast-open", + "--enable-webgl", + "--hide-scrollbars", + "--ignore-gpu-blacklist", + "--media-cache-size=33554432", + "--metrics-recording-only", + "--mute-audio", + "--no-default-browser-check", + "--no-first-run", + "--no-pings", + "--no-sandbox", + "--no-zygote", + "--password-store=basic", + "--prerender-from-omnibox=disabled", + "--use-gl=swiftshader", + "--use-mock-keychain", + "--disable-field-trial-config", +]; diff --git a/test/helpers/run-browser.js b/test/helpers/run-browser.js index e4d00b9ba9..a4010d8496 100644 --- a/test/helpers/run-browser.js +++ b/test/helpers/run-browser.js @@ -1,11 +1,9 @@ -"use strict"; +import { launch } from "puppeteer"; +import { puppeteerArgs } from "./puppeteer-constants.js"; -const puppeteer = require("puppeteer"); -const { puppeteerArgs } = require("./puppeteer-constants"); - -/** @typedef {import('puppeteer').Browser} Browser */ -/** @typedef {import('puppeteer').Page} Page */ -/** @typedef {import('puppeteer').Device} Device */ +/** @typedef {import("puppeteer").Browser} Browser */ +/** @typedef {import("puppeteer").Page} Page */ +/** @typedef {import("puppeteer").Device} Device */ /** * @typedef {object} RunBrowserResult @@ -18,7 +16,7 @@ const { puppeteerArgs } = require("./puppeteer-constants"); * @param {Device} device config * @returns {Promise} page */ -function runPage(browser, device) { +export function runPage(browser, device) { /** * @type {Page} */ @@ -69,22 +67,21 @@ function runPage(browser, device) { function runBrowser(device) { return new Promise((resolve, reject) => { /** - * @type {import('puppeteer').Page} + * @type {import("puppeteer").Page} */ let page; /** - * @type {import('puppeteer').Browser} + * @type {import("puppeteer").Browser} */ let browser; - puppeteer - .launch({ - headless: "new", - // because of invalid localhost certificate - acceptInsecureCerts: true, - // args come from: https://github.com/alixaxel/chrome-aws-lambda/blob/master/source/index.js - args: puppeteerArgs, - }) + launch({ + headless: "new", + // because of invalid localhost certificate + acceptInsecureCerts: true, + // args come from: https://github.com/alixaxel/chrome-aws-lambda/blob/master/source/index.js + args: puppeteerArgs, + }) .then((launchedBrowser) => { browser = launchedBrowser; @@ -99,5 +96,4 @@ function runBrowser(device) { }); } -module.exports = runBrowser; -module.exports.runPage = runPage; +export default runBrowser; diff --git a/test/helpers/session-subscribe.js b/test/helpers/session-subscribe.js index 88e71864b5..7a1fdb9795 100644 --- a/test/helpers/session-subscribe.js +++ b/test/helpers/session-subscribe.js @@ -1,9 +1,7 @@ -"use strict"; - -module.exports = async function sessionSubscribe(session) { +export default async function sessionSubscribe(session) { session.on("sessionattached", (attachedSession) => { sessionSubscribe(attachedSession); }); - session.send("Network.enable"); - session.send("Runtime.runIfWaitingForDebugger"); -}; + await session.send("Network.enable"); + await session.send("Runtime.runIfWaitingForDebugger"); +} diff --git a/test/helpers/snapshotResolver.js b/test/helpers/snapshotResolver.js deleted file mode 100644 index cd4aa21bc0..0000000000 --- a/test/helpers/snapshotResolver.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; - -const path = require("node:path"); -const webpack = require("webpack"); - -const [webpackVersion] = webpack.version; -const snapshotExtension = `.snap.webpack${webpackVersion}`; - -module.exports = { - resolveSnapshotPath: (testPath) => - path.join( - path.dirname(testPath), - "__snapshots__", - `${path.basename(testPath)}${snapshotExtension}`, - ), - resolveTestPath: (snapshotPath) => - snapshotPath - .replace(`${path.sep}__snapshots__`, "") - .slice(0, -snapshotExtension.length), - testPathForConsistencyCheck: path.join( - "consistency_check", - "__tests__", - "example.test.js", - ), -}; diff --git a/test/helpers/test-bin.js b/test/helpers/test-bin.js index 15667fe59e..cdc1eb64be 100644 --- a/test/helpers/test-bin.js +++ b/test/helpers/test-bin.js @@ -1,10 +1,11 @@ -"use strict"; +import os from "node:os"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import util from "node:util"; +import execa from "execa"; +import { Writable } from "readable-stream"; -const os = require("node:os"); -const path = require("node:path"); -const util = require("node:util"); -const execa = require("execa"); -const { Writable } = require("readable-stream"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const webpackDevServerPath = path.resolve( __dirname, @@ -27,7 +28,7 @@ const processKill = (process) => { // } }; -const testBin = (testArgs = [], options = {}) => { +export const testBin = (testArgs = [], options = {}) => { const cwd = process.cwd(); const env = { WEBPACK_CLI_HELP_WIDTH: 2048, @@ -127,7 +128,7 @@ const ipV6 = ` .replaceAll("\n", "") .trim(); -const normalizeStderr = (stderr, options = {}) => { +export const normalizeStderr = (stderr, options = {}) => { let normalizedStderr = util.stripVTControlCharacters(stderr); normalizedStderr = normalizedStderr @@ -159,7 +160,7 @@ const normalizeStderr = (stderr, options = {}) => { // We have deprecation warning on windows in some cases normalizedStderr = normalizedStderr.split("\n"); normalizedStderr = normalizedStderr.filter( - (item) => !/Generating SSL Certificate/g.test(item), + (item) => !/Generating SSL certificate/gi.test(item), ); normalizedStderr = normalizedStderr.filter( (item) => @@ -207,5 +208,3 @@ const normalizeStderr = (stderr, options = {}) => { return normalizedStderr; }; - -module.exports = { normalizeStderr, testBin }; diff --git a/test/helpers/test-server.js b/test/helpers/test-server.js index 9333c64601..e6ba6a4790 100644 --- a/test/helpers/test-server.js +++ b/test/helpers/test-server.js @@ -1,7 +1,5 @@ -"use strict"; - -const webpack = require("webpack"); -const Server = require("../../lib/Server"); +import webpack from "webpack"; +import Server from "../../lib/Server.js"; /** @typedef {import("webpack").Configuration} Configuration */ /** @typedef {import("../../lib/Server").Configuration} DevServerConfiguration */ @@ -54,7 +52,7 @@ function startFullSetup(config, devServerConfig, done) { * @param {(err?: Error) => void=} done done callback * @returns {Server} server */ -function start(config, devServerConfig, done) { +export function start(config, devServerConfig, done) { let readyCount = 0; const ready = (error) => { @@ -85,7 +83,7 @@ function start(config, devServerConfig, done) { /** * @param {() => void} done done callback */ -function close(done) { +export function close(done) { if (server) { server.stopCallback(() => { server = null; @@ -95,8 +93,3 @@ function close(done) { done(); } } - -module.exports = { - close, - start, -}; diff --git a/test/helpers/trusted-types-html-generator-plugin.js b/test/helpers/trusted-types-html-generator-plugin.js index 6d023305db..1daf0ed870 100644 --- a/test/helpers/trusted-types-html-generator-plugin.js +++ b/test/helpers/trusted-types-html-generator-plugin.js @@ -1,5 +1,3 @@ -"use strict"; - const HTMLContentForIndex = ` @@ -35,7 +33,7 @@ const HTMLContentForTest = ` `; -module.exports = class HTMLGeneratorPlugin { +export default class HTMLGeneratorPlugin { apply(compiler) { const pluginName = "html-generator-plugin"; @@ -78,4 +76,4 @@ module.exports = class HTMLGeneratorPlugin { } }); } -}; +} diff --git a/test/normalize-options.test.js b/test/normalize-options.test.js index b3ae68c021..a5591ab139 100644 --- a/test/normalize-options.test.js +++ b/test/normalize-options.test.js @@ -1,9 +1,13 @@ -"use strict"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import { klona } from "klona/full"; +import webpack from "webpack"; +import Server from "../lib/Server.js"; +import multiCompilerConfig from "./fixtures/multi-compiler-one-configuration/webpack.config.js"; +import simpleConfig from "./fixtures/simple-config/webpack.config.js"; +import portsMap from "./ports-map.js"; -const { klona } = require("klona/full"); -const webpack = require("webpack"); -const Server = require("../lib/Server"); -const port = require("./ports-map")["normalize-option"]; +const port = portsMap["normalize-option"]; describe("normalize options", () => { const cases = [ @@ -19,15 +23,6 @@ describe("normalize options", () => { port: "9000", }, }, - { - title: "client.webSocketTransport sockjs string", - multiCompiler: false, - options: { - client: { - webSocketTransport: "sockjs", - }, - }, - }, { title: "client.webSocketTransport ws string", multiCompiler: false, @@ -81,7 +76,7 @@ describe("normalize options", () => { type: "ws", options: { host: "127.0.0.1", - // TODO `jest` is freeze here + // TODO test freeze here // port: 43334, pathname: "/ws", }, @@ -100,7 +95,7 @@ describe("normalize options", () => { type: "ws", options: { host: "127.0.0.1", - // TODO `jest` is freeze here + // TODO test freeze here // port: "43335", pathname: "/ws", }, @@ -580,11 +575,11 @@ describe("normalize options", () => { ]; for (const item of cases) { - it(item.title, async () => { + it(item.title, async (t) => { let webpackConfig; if (item.multiCompiler) { - webpackConfig = require("./fixtures/multi-compiler-one-configuration/webpack.config"); + webpackConfig = multiCompilerConfig; if (Array.isArray(item.webpackConfig)) { webpackConfig = item.webpackConfig.map((config, index) => ({ @@ -593,7 +588,7 @@ describe("normalize options", () => { })); } } else { - webpackConfig = require("./fixtures/simple-config/webpack.config"); + webpackConfig = simpleConfig; if (item.webpackConfig) { webpackConfig = { @@ -633,7 +628,7 @@ describe("normalize options", () => { } } - expect(optionsForSnapshot).toMatchSnapshot(); + t.assert.snapshot(optionsForSnapshot); } } finally { await server.stop(); diff --git a/test/ports-map.js b/test/ports-map.js index d95dc62af9..e980495bc9 100644 --- a/test/ports-map.js +++ b/test/ports-map.js @@ -1,5 +1,3 @@ -"use strict"; - // important: new port mappings must be added to the bottom of this list const listOfTests = { // CLI tests @@ -7,7 +5,6 @@ const listOfTests = { "cli-port-option": 1, // e2e tests bundle: 1, - "sockjs-client": 1, "web-socket-client": 1, "hot-and-live-reload": 1, logging: 1, @@ -43,7 +40,6 @@ const listOfTests = { "stats-option": 1, "watch-files-option": 1, "web-socket-server-option": 1, - "sockjs-server": 1, "web-socket-server": 1, routes: 1, "web-socket-communication": 1, @@ -100,7 +96,7 @@ for (const key of Object.keys(listOfTests)) { const busy = {}; -module.exports = new Proxy(ports, { +export default new Proxy(ports, { get(target, name) { if (!target[name]) { throw new Error( diff --git a/test/server/__snapshots__/proxy-option.test.js.snap.webpack5 b/test/server/__snapshots__/proxy-option.test.js.snap.webpack5 new file mode 100644 index 0000000000..144a568902 --- /dev/null +++ b/test/server/__snapshots__/proxy-option.test.js.snap.webpack5 @@ -0,0 +1,12 @@ +exports[`proxy option > should work and respect \`logger\` option > target > respects a proxy option when a request path is matched 1`] = ` +"[HPM] Error occurred while proxying request %s to %s [%s] (%s)" +`; + +exports[`proxy option > should work and respect the \`infrastructureLogging.level\` option > target > respects a proxy option when a request path is matched 1`] = ` +" [webpack-dev-server] [HPM] Error occurred while proxying request 127.0.0.1:/my-path to http://unknown:1234/ [] (https://nodejs.org/api/errors.html#errors_common_system_errors) +" +`; + +exports[`proxy option > should work and respect the \`infrastructureLogging.level\` option with \`none\` value > target > respects a proxy option when a request path is matched 1`] = ` +"" +`; diff --git a/test/server/open-option.test.js b/test/server/open-option.test.js index fea4bf65a6..e8379918c9 100644 --- a/test/server/open-option.test.js +++ b/test/server/open-option.test.js @@ -1,48 +1,36 @@ -"use strict"; +import { afterEach, beforeEach, describe, it, mock } from "node:test"; +import { expect } from "expect"; +import { fn, spyOn } from "jest-mock"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/simple-config/webpack.config.js"; +import portsMap from "../ports-map.js"; -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/simple-config/webpack.config"); -const port = require("../ports-map")["open-option"]; +const port = portsMap["open-option"]; -const internalIPv4 = Server.internalIPSync("v4"); - -let open; - -const needRequireMock = - process.version.startsWith("v18") || process.version.startsWith("v19"); - -if (needRequireMock) { - open = require("open"); - - jest.mock("open"); - - open.mockImplementation(() => ({ - catch: jest.fn(), - })); -} +const internalIPv4 = Server.findIp("v4", false); describe('"open" option', () => { let compiler; + let open; + let openMock; beforeEach(async () => { compiler = webpack(config); - if (!needRequireMock) { - jest.unstable_mockModule("open", () => ({ - default: jest.fn(() => Promise.resolve()), - })); + openMock = mock.module("open", { + defaultExport: fn(() => Promise.resolve()), + }); - open = (await import("open")).default; - } + open = (await import("open")).default; }); afterEach(async () => { open.mockClear(); + openMock.restore(); }); - // eslint-disable-next-line jest/no-focused-tests - it.only("should work with unspecified host", async () => { + it("should work with unspecified host", async () => { const server = new Server( { open: true, @@ -77,24 +65,6 @@ describe('"open" option', () => { }); }); - it("should work with the server: 'spdy' option", async () => { - const server = new Server( - { - open: true, - port, - server: "spdy", - }, - compiler, - ); - - await server.start(); - await server.stop(); - - expect(open).toHaveBeenCalledWith(`https://localhost:${port}/`, { - wait: false, - }); - }); - it("should work with '0.0.0.0' host but open localhost", async () => { const host = "0.0.0.0"; @@ -735,14 +705,15 @@ describe('"open" option', () => { it("should log warning when can't open", async () => { open.mockRejectedValue(undefined); - const loggerWarnSpy = jest.fn(); - const getInfrastructureLoggerSpy = jest - .spyOn(compiler, "getInfrastructureLogger") - .mockImplementation(() => ({ - warn: loggerWarnSpy, - info: () => {}, - log: () => {}, - })); + const loggerWarnSpy = fn(); + const getInfrastructureLoggerSpy = spyOn( + compiler, + "getInfrastructureLogger", + ).mockImplementation(() => ({ + warn: loggerWarnSpy, + info: () => {}, + log: () => {}, + })); const server = new Server( { @@ -769,14 +740,15 @@ describe('"open" option', () => { it("should log warning when can't open with string", async () => { open.mockRejectedValue(undefined); - const loggerWarnSpy = jest.fn(); - const getInfrastructureLoggerSpy = jest - .spyOn(compiler, "getInfrastructureLogger") - .mockImplementation(() => ({ - warn: loggerWarnSpy, - info: () => {}, - log: () => {}, - })); + const loggerWarnSpy = fn(); + const getInfrastructureLoggerSpy = spyOn( + compiler, + "getInfrastructureLogger", + ).mockImplementation(() => ({ + warn: loggerWarnSpy, + info: () => {}, + log: () => {}, + })); const server = new Server( { @@ -803,14 +775,15 @@ describe('"open" option', () => { it("should log warning when can't open with object", async () => { open.mockRejectedValue(undefined); - const loggerWarnSpy = jest.fn(); - const getInfrastructureLoggerSpy = jest - .spyOn(compiler, "getInfrastructureLogger") - .mockImplementation(() => ({ - warn: loggerWarnSpy, - info: () => {}, - log: () => {}, - })); + const loggerWarnSpy = fn(); + const getInfrastructureLoggerSpy = spyOn( + compiler, + "getInfrastructureLogger", + ).mockImplementation(() => ({ + warn: loggerWarnSpy, + info: () => {}, + log: () => {}, + })); const server = new Server( { @@ -841,14 +814,15 @@ describe('"open" option', () => { it("should log warning when can't open with object with the 'app' option with arguments", async () => { open.mockRejectedValue(undefined); - const loggerWarnSpy = jest.fn(); - const getInfrastructureLoggerSpy = jest - .spyOn(compiler, "getInfrastructureLogger") - .mockImplementation(() => ({ - warn: loggerWarnSpy, - info: () => {}, - log: () => {}, - })); + const loggerWarnSpy = fn(); + const getInfrastructureLoggerSpy = spyOn( + compiler, + "getInfrastructureLogger", + ).mockImplementation(() => ({ + warn: loggerWarnSpy, + info: () => {}, + log: () => {}, + })); const server = new Server( { @@ -885,14 +859,15 @@ describe('"open" option', () => { it("should log warning when can't open with object with the 'app' option with arguments #2", async () => { open.mockRejectedValue(undefined); - const loggerWarnSpy = jest.fn(); - const getInfrastructureLoggerSpy = jest - .spyOn(compiler, "getInfrastructureLogger") - .mockImplementation(() => ({ - warn: loggerWarnSpy, - info: () => {}, - log: () => {}, - })); + const loggerWarnSpy = fn(); + const getInfrastructureLoggerSpy = spyOn( + compiler, + "getInfrastructureLogger", + ).mockImplementation(() => ({ + warn: loggerWarnSpy, + info: () => {}, + log: () => {}, + })); const server = new Server( { diff --git a/test/server/proxy-option.test.js b/test/server/proxy-option.test.js index d6c209e055..e5c1e6b5d7 100644 --- a/test/server/proxy-option.test.js +++ b/test/server/proxy-option.test.js @@ -1,16 +1,20 @@ -"use strict"; - -const path = require("node:path"); -const util = require("node:util"); -const express = require("express"); -const request = require("supertest"); -const webpack = require("webpack"); -const WebSocket = require("ws"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/proxy-config/webpack.config"); -const [port1, port2, port3, port4] = require("../ports-map")["proxy-option"]; - -const WebSocketServer = WebSocket.Server; +import path from "node:path"; +import { after, before, beforeEach, describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import express from "express"; +import { spyOn } from "jest-mock"; +import request from "supertest"; +import webpack from "webpack"; +import WebSocket, { WebSocketServer } from "ws"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/proxy-config/webpack.config.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +const [port1, port2, port3, port4] = portsMap["proxy-option"]; + const staticDirectory = path.resolve(__dirname, "../fixtures/proxy-config"); const proxyOptionPathsAsProperties = [ @@ -19,51 +23,14 @@ const proxyOptionPathsAsProperties = [ target: `http://localhost:${port1}`, }, { - context: "/api/proxy2", + path: "/api/proxy2", target: `http://localhost:${port2}`, pathRewrite: { "^/api": "" }, }, { - context: "/foo", - bypass(req) { - if (/\.html$/.test(req.path || req.url)) { - return "/index.html"; - } - - return null; - }, - }, - { - context: "proxyfalse", - bypass(req) { - if (/\/proxyfalse$/.test(req.path || req.url)) { - return false; - } - }, - }, - { - context: "/proxy/async", - bypass(req, res) { - if (/\/proxy\/async$/.test(req.path || req.url)) { - return new Promise((resolve) => { - setTimeout(() => { - res.end("proxy async response"); - resolve(true); - }, 10); - }); - } - }, - }, - { - context: "/bypass-with-target", - target: `http://localhost:${port1}`, - changeOrigin: true, - secure: false, - bypass(req) { - if (/\.(html)$/i.test(req.path || req.url)) { - return req.url; - } - }, + pathFilter: ["/foo/*.html", "/baz/*.html", "/bypass-with-target/*.html"], + pathRewrite: () => "/index.html", + router: () => `http://localhost:${port3}`, }, ]; @@ -77,7 +44,7 @@ const proxyOption = [ let maxServerListeners = 0; const proxyOptionOfArray = [ { context: "/proxy1", target: `http://localhost:${port1}` }, - function proxy(req, res, next) { + function proxy(req) { if (req) { const socket = req.socket || req.connection; const server = socket ? socket.server : null; @@ -92,19 +59,6 @@ const proxyOptionOfArray = [ context: "/api/proxy2", target: `http://localhost:${port2}`, pathRewrite: { "^/api": "" }, - bypass: () => { - if (req) { - const resolveUrl = new URL(req.url, `http://${req.headers.host}`); - const params = new URLSearchParams(resolveUrl.search); - const foo = params.get("foo"); - - if (foo) { - res.end(`foo+${next.name}+${typeof next}`); - - return false; - } - } - }, }; }, ]; @@ -140,6 +94,23 @@ describe("proxy option", () => { let proxyServer1; let proxyServer2; + function getStderrOutput(stderrSpy) { + return stderrSpy.mock.calls + .map((call) => call[0]) + .filter((output) => !output.includes("DeprecationWarning")) + .join("") + .replaceAll(/127\.0\.0\.1:\d+/g, "127.0.0.1:") + .replaceAll(/\[ENOTFOUND\]|\[EAI_AGAIN\]/g, "[]"); + } + + function getConsoleErrorOutput(consoleSpy) { + return consoleSpy.mock.calls + .map((call) => call[0]) + .join("\n") + .replaceAll(/127\.0\.0\.1:\d+/g, "127.0.0.1:") + .replaceAll(/\[ENOTFOUND\]|\[EAI_AGAIN\]/g, "[]"); + } + async function listenProxyServers() { const proxyApp1 = express(); const proxyApp2 = express(); @@ -150,6 +121,9 @@ describe("proxy option", () => { proxyApp1.get("/api", (req, res) => { res.send("api response from proxy1"); }); + proxyApp1.get("/index.html", (req, res) => { + res.send("Hello"); + }); proxyApp2.get("/proxy2", (req, res) => { res.send("from proxy2"); }); @@ -185,7 +159,7 @@ describe("proxy option", () => { let server; let req; - beforeAll(async () => { + before(async () => { const compiler = webpack(config); server = new Server( @@ -207,7 +181,7 @@ describe("proxy option", () => { req = request(server.app); }); - afterAll(async () => { + after(async () => { await server.stop(); await closeProxyServers(); }); @@ -230,68 +204,48 @@ describe("proxy option", () => { }); }); - describe("bypass", () => { - it("should log deprecation warning when bypass is used", async () => { - const utilSpy = jest.spyOn(util, "deprecate"); - - const response = await req.get("/foo/bar.html"); - - expect(response.status).toBe(200); - expect(response.text).toContain("Hello"); - - const lastCall = utilSpy.mock.calls[utilSpy.mock.calls.length - 1]; - - expect(lastCall[1]).toBe( - "Using the 'bypass' option is deprecated. Please use the 'router' or 'context' options. Read more at https://github.com/chimurai/http-proxy-middleware/tree/v2.0.6#http-proxy-middleware-options", - ); - expect(lastCall[2]).toBe( - "DEP_WEBPACK_DEV_SERVER_PROXY_BYPASS_ARGUMENT", - ); - - utilSpy.mockRestore(); - }); - - it("can rewrite a request path", async () => { + describe("pathFilter and pathRewrite", () => { + it("should rewrite matching paths using pathFilter", async () => { const response = await req.get("/foo/bar.html"); expect(response.status).toBe(200); expect(response.text).toContain("Hello"); }); - it("can rewrite a request path regardless of the target defined a bypass option", async () => { + it("should rewrite paths using pathRewrite function", async () => { const response = await req.get("/baz/hoge.html"); expect(response.status).toBe(200); expect(response.text).toContain("Hello"); }); - it("should pass through a proxy when a bypass function returns null", async () => { + it("should proxy requests that don't match pathFilter", async () => { const response = await req.get("/foo.js"); expect(response.status).toBe(200); expect(response.text).toContain("Hey"); }); - it("should not pass through a proxy when a bypass function returns false", async () => { - const response = await req.get("/proxyfalse"); + it("should serve static files when not matching proxy rules", async () => { + const response = await req.get("/index.html"); - expect(response.status).toBe(404); + expect(response.status).toBe(200); + expect(response.text).toContain("Hello"); }); - it("should wait if bypass returns promise", async () => { - const response = await req.get("/proxy/async"); + it("should return 404 for unmatched paths", async () => { + const response = await req.get("/proxyfalse"); - expect(response.status).toBe(200); - expect(response.text).toContain("proxy async response"); + expect(response.status).toBe(404); }); - it("should work with the 'target' option", async () => { + it("should handle pathFilter with router option", async () => { const response = await req.get("/bypass-with-target/foo.js"); expect(response.status).toBe(404); }); - it("should work with the 'target' option #2", async () => { + it("should rewrite matching pathFilter patterns with router", async () => { const response = await req.get("/bypass-with-target/index.html"); expect(response.status).toBe(200); @@ -304,7 +258,7 @@ describe("proxy option", () => { let server; let req; - beforeAll(async () => { + before(async () => { const compiler = webpack(config); server = new Server( @@ -322,7 +276,7 @@ describe("proxy option", () => { req = request(server.app); }); - afterAll(async () => { + after(async () => { await server.stop(); await closeProxyServers(); }); @@ -339,7 +293,7 @@ describe("proxy option", () => { let server; let req; - beforeAll(async () => { + before(async () => { const compiler = webpack(config); server = new Server( @@ -357,7 +311,7 @@ describe("proxy option", () => { req = request(server.app); }); - afterAll(async () => { + after(async () => { await server.stop(); await closeProxyServers(); }); @@ -374,7 +328,7 @@ describe("proxy option", () => { let server; let req; - beforeAll(async () => { + before(async () => { const compiler = webpack(config); server = new Server( @@ -392,7 +346,7 @@ describe("proxy option", () => { req = request(server.app); }); - afterAll(async () => { + after(async () => { await server.stop(); await closeProxyServers(); }); @@ -409,7 +363,7 @@ describe("proxy option", () => { let server; let req; - beforeAll(async () => { + before(async () => { const compiler = webpack(config); server = new Server( @@ -427,7 +381,7 @@ describe("proxy option", () => { req = request(server.app); }); - afterAll(async () => { + after(async () => { await server.stop(); await closeProxyServers(); }); @@ -444,7 +398,7 @@ describe("proxy option", () => { let server; let req; - beforeAll(async () => { + before(async () => { const compiler = webpack(config); server = new Server( @@ -462,7 +416,7 @@ describe("proxy option", () => { req = request(server.app); }); - afterAll(async () => { + after(async () => { await server.stop(); await closeProxyServers(); }); @@ -481,13 +435,6 @@ describe("proxy option", () => { expect(response.text).toContain("from proxy2"); }); - it("should allow req, res, and next", async () => { - const response = await req.get("/api/proxy2?foo=true"); - - expect(response.statusCode).toBe(200); - expect(response.text).toBe("foo+next+function"); - }); - it("should not exist multiple close events registered", async () => { expect(maxServerListeners).toBeLessThanOrEqual(1); }); @@ -497,7 +444,7 @@ describe("proxy option", () => { let server; let req; - beforeAll(async () => { + before(async () => { const compiler = webpack(config); server = new Server( @@ -515,7 +462,7 @@ describe("proxy option", () => { req = request(server.app); }); - afterAll(async () => { + after(async () => { await server.stop(); await closeProxyServers(); }); @@ -533,7 +480,7 @@ describe("proxy option", () => { let req; let listener; - beforeAll(async () => { + before(async () => { const compiler = webpack(config); server = new Server( @@ -557,7 +504,7 @@ describe("proxy option", () => { const proxy = express(); - proxy.get("*", (proxyReq, res) => { + proxy.get("*slug", (proxyReq, res) => { res.send("from proxy"); }); @@ -566,7 +513,7 @@ describe("proxy option", () => { req = request(server.app); }); - afterAll(async () => { + after(async () => { await server.stop(); await new Promise((resolve) => { listener.close(() => { @@ -596,12 +543,12 @@ describe("proxy option", () => { let webSocketServer; let responseMessage; - const webSocketServerTypes = ["sockjs", "ws"]; + const webSocketServerTypes = ["ws"]; for (const webSocketServerType of webSocketServerTypes) { // eslint-disable-next-line no-loop-func describe(`with webSocketServerType: ${webSocketServerType}`, () => { - beforeAll(async () => { + before(async () => { const compiler = webpack(config); server = new Server( @@ -629,20 +576,23 @@ describe("proxy option", () => { }); }); - beforeEach((done) => { - ws = new WebSocket(`ws://localhost:${port3}/proxy3/socket`); + beforeEach( + () => + new Promise((resolve) => { + ws = new WebSocket(`ws://localhost:${port3}/proxy3/socket`); - ws.on("message", (message) => { - responseMessage = message.toString(); - done(); - }); + ws.on("message", (message) => { + responseMessage = message.toString(); + resolve(); + }); - ws.on("open", () => { - ws.send("foo"); - }); - }); + ws.on("open", () => { + ws.send("foo"); + }); + }), + ); - afterAll(async () => { + after(async () => { webSocketServer.close(); for (const client of webSocketServer.clients) { @@ -664,7 +614,7 @@ describe("proxy option", () => { let req; let listener; - beforeAll(async () => { + before(async () => { const compiler = webpack(config); server = new Server( @@ -692,7 +642,7 @@ describe("proxy option", () => { // This forces Express to try to decode URLs, which is needed for the test // associated with the middleware below. - proxy.all("*", (_req, res, next) => { + proxy.all("*slug", (_req, res, next) => { next(); }); // We must define all 4 params in order for this to be detected as an @@ -731,7 +681,7 @@ describe("proxy option", () => { req = request(server.app); }); - afterAll(async () => { + after(async () => { await server.stop(); await new Promise((resolve) => { @@ -795,7 +745,7 @@ describe("proxy option", () => { let server; let req; - beforeAll(async () => { + before(async () => { const compiler = webpack([config, config]); server = new Server( @@ -818,7 +768,7 @@ describe("proxy option", () => { req = request(server.app); }); - afterAll(async () => { + after(async () => { await server.stop(); await closeProxyServers(); }); @@ -831,19 +781,13 @@ describe("proxy option", () => { }); }); - describe("should work and respect `logProvider` and `logLevel` options", () => { + describe("should work and respect `logger` option", () => { let server; let req; - let customLogProvider; + let consoleSpy; - beforeAll(async () => { - customLogProvider = { - log: jest.fn(), - debug: jest.fn(), - info: jest.fn(), - warn: jest.fn(), - error: jest.fn(), - }; + before(async () => { + consoleSpy = spyOn(console, "error").mockImplementation(() => {}); const compiler = webpack([config, config]); @@ -853,60 +797,7 @@ describe("proxy option", () => { { context: "/my-path", target: "http://unknown:1234", - logProvider: () => customLogProvider, - logLevel: "error", - }, - ], - port: port3, - }, - compiler, - ); - - await server.start(); - - await listenProxyServers(); - - req = request(server.app); - }); - - afterAll(async () => { - await server.stop(); - await closeProxyServers(); - }); - - describe("target", () => { - it("respects a proxy option when a request path is matched", async () => { - await req.get("/my-path"); - - expect(customLogProvider.error).toHaveBeenCalledTimes(1); - }); - }); - }); - - describe("should work and respect the `logLevel` option with `silent` value", () => { - let server; - let req; - let customLogProvider; - - beforeAll(async () => { - customLogProvider = { - log: jest.fn(), - debug: jest.fn(), - info: jest.fn(), - warn: jest.fn(), - error: jest.fn(), - }; - - const compiler = webpack([config, config]); - - server = new Server( - { - proxy: [ - { - context: "my-path", - target: "http://unknown:1234", - logProvider: () => customLogProvider, - logLevel: "silent", + logger: console, }, ], port: port3, @@ -921,16 +812,17 @@ describe("proxy option", () => { req = request(server.app); }); - afterAll(async () => { + after(async () => { + consoleSpy.mockRestore(); await server.stop(); await closeProxyServers(); }); describe("target", () => { - it("respects a proxy option when a request path is matched", async () => { + it("respects a proxy option when a request path is matched", async (t) => { await req.get("/my-path"); - expect(customLogProvider.error).toHaveBeenCalledTimes(0); + t.assert.snapshot(getConsoleErrorOutput(consoleSpy)); }); }); }); @@ -938,20 +830,14 @@ describe("proxy option", () => { describe("should work and respect the `infrastructureLogging.level` option", () => { let server; let req; - let customLogProvider; + let stderrSpy; - beforeAll(async () => { - customLogProvider = { - log: jest.fn(), - debug: jest.fn(), - info: jest.fn(), - warn: jest.fn(), - error: jest.fn(), - }; + before(async () => { + stderrSpy = spyOn(process.stderr, "write").mockImplementation(() => true); const compiler = webpack({ ...config, - infrastructureLogging: { level: "error" }, + infrastructureLogging: { colors: false, level: "error" }, }); server = new Server( @@ -960,7 +846,6 @@ describe("proxy option", () => { { context: "/my-path", target: "http://unknown:1234", - logProvider: () => customLogProvider, }, ], port: port3, @@ -975,16 +860,17 @@ describe("proxy option", () => { req = request(server.app); }); - afterAll(async () => { + after(async () => { + stderrSpy.mockRestore(); await server.stop(); await closeProxyServers(); }); describe("target", () => { - it("respects a proxy option when a request path is matched", async () => { + it("respects a proxy option when a request path is matched", async (t) => { await req.get("/my-path"); - expect(customLogProvider.error).toHaveBeenCalledTimes(1); + t.assert.snapshot(getStderrOutput(stderrSpy)); }); }); }); @@ -992,16 +878,10 @@ describe("proxy option", () => { describe("should work and respect the `infrastructureLogging.level` option with `none` value", () => { let server; let req; - let customLogProvider; + let stderrSpy; - beforeAll(async () => { - customLogProvider = { - log: jest.fn(), - debug: jest.fn(), - info: jest.fn(), - warn: jest.fn(), - error: jest.fn(), - }; + before(async () => { + stderrSpy = spyOn(process.stderr, "write").mockImplementation(() => true); const compiler = webpack({ ...config, @@ -1014,7 +894,6 @@ describe("proxy option", () => { { context: "/my-path", target: "http://unknown:1234", - logProvider: () => customLogProvider, }, ], port: port3, @@ -1027,15 +906,16 @@ describe("proxy option", () => { req = request(server.app); }); - afterAll(async () => { + after(async () => { + stderrSpy.mockRestore(); await server.stop(); }); describe("target", () => { - it("respects a proxy option when a request path is matched", async () => { + it("respects a proxy option when a request path is matched", async (t) => { await req.get("/my-path"); - expect(customLogProvider.error).toHaveBeenCalledTimes(0); + t.assert.snapshot(getStderrOutput(stderrSpy)); }); }); }); diff --git a/test/validate-options.test.js b/test/validate-options.test.js index b92f9be1fd..4fe34a9bf6 100644 --- a/test/validate-options.test.js +++ b/test/validate-options.test.js @@ -1,12 +1,17 @@ -"use strict"; +import os from "node:os"; +import path from "node:path"; +import { after, before, describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import connect from "connect"; +import { expect } from "expect"; +import fs from "graceful-fs"; +import { spyOn } from "jest-mock"; +import { Volume, createFsFromVolume } from "memfs"; +import webpack from "webpack"; +import Server from "../lib/Server.js"; +import config from "./fixtures/simple-config/webpack.config.js"; -const os = require("node:os"); -const path = require("node:path"); -const { readFileSync } = require("graceful-fs"); -const { Volume, createFsFromVolume } = require("memfs"); -const webpack = require("webpack"); -const Server = require("../lib/Server"); -const config = require("./fixtures/simple-config/webpack.config"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const httpsCertificateDirectory = path.join( __dirname, @@ -68,10 +73,7 @@ const tests = { }, }, { - webSocketTransport: "sockjs", - }, - { - webSocketTransport: require.resolve("../client/clients/SockJSClient"), + webSocketTransport: "ws", }, { webSocketURL: "ws://localhost:8080", @@ -248,7 +250,6 @@ const tests = { success: [ "http", "https", - "spdy", "custom-server.js", { type: "http", @@ -256,9 +257,6 @@ const tests = { { type: "https", }, - { - type: "spdy", - }, { type: "custom-server.js", }, @@ -276,18 +274,18 @@ const tests = { { type: "https", options: { - ca: readFileSync( - path.join(httpsCertificateDirectory, "ca.pem"), - ).toString(), - pfx: readFileSync( - path.join(httpsCertificateDirectory, "server.pfx"), - ).toString(), - key: readFileSync( - path.join(httpsCertificateDirectory, "server.key"), - ).toString(), - cert: readFileSync( - path.join(httpsCertificateDirectory, "server.crt"), - ).toString(), + ca: fs + .readFileSync(path.join(httpsCertificateDirectory, "ca.pem")) + .toString(), + pfx: fs + .readFileSync(path.join(httpsCertificateDirectory, "server.pfx")) + .toString(), + key: fs + .readFileSync(path.join(httpsCertificateDirectory, "server.key")) + .toString(), + cert: fs + .readFileSync(path.join(httpsCertificateDirectory, "server.crt")) + .toString(), passphrase: "webpack-dev-server", }, }, @@ -295,24 +293,24 @@ const tests = { type: "https", options: { ca: [ - readFileSync( - path.join(httpsCertificateDirectory, "ca.pem"), - ).toString(), + fs + .readFileSync(path.join(httpsCertificateDirectory, "ca.pem")) + .toString(), ], pfx: [ - readFileSync( - path.join(httpsCertificateDirectory, "server.pfx"), - ).toString(), + fs + .readFileSync(path.join(httpsCertificateDirectory, "server.pfx")) + .toString(), ], key: [ - readFileSync( - path.join(httpsCertificateDirectory, "server.key"), - ).toString(), + fs + .readFileSync(path.join(httpsCertificateDirectory, "server.key")) + .toString(), ], cert: [ - readFileSync( - path.join(httpsCertificateDirectory, "server.crt"), - ).toString(), + fs + .readFileSync(path.join(httpsCertificateDirectory, "server.crt")) + .toString(), ], passphrase: "webpack-dev-server", }, @@ -320,10 +318,14 @@ const tests = { { type: "https", options: { - ca: readFileSync(path.join(httpsCertificateDirectory, "ca.pem")), - pfx: readFileSync(path.join(httpsCertificateDirectory, "server.pfx")), - key: readFileSync(path.join(httpsCertificateDirectory, "server.key")), - cert: readFileSync( + ca: fs.readFileSync(path.join(httpsCertificateDirectory, "ca.pem")), + pfx: fs.readFileSync( + path.join(httpsCertificateDirectory, "server.pfx"), + ), + key: fs.readFileSync( + path.join(httpsCertificateDirectory, "server.key"), + ), + cert: fs.readFileSync( path.join(httpsCertificateDirectory, "server.crt"), ), passphrase: "webpack-dev-server", @@ -332,15 +334,15 @@ const tests = { { type: "https", options: { - ca: [readFileSync(path.join(httpsCertificateDirectory, "ca.pem"))], + ca: [fs.readFileSync(path.join(httpsCertificateDirectory, "ca.pem"))], pfx: [ - readFileSync(path.join(httpsCertificateDirectory, "server.pfx")), + fs.readFileSync(path.join(httpsCertificateDirectory, "server.pfx")), ], key: [ - readFileSync(path.join(httpsCertificateDirectory, "server.key")), + fs.readFileSync(path.join(httpsCertificateDirectory, "server.key")), ], cert: [ - readFileSync(path.join(httpsCertificateDirectory, "server.crt")), + fs.readFileSync(path.join(httpsCertificateDirectory, "server.crt")), ], passphrase: "webpack-dev-server", }, @@ -360,10 +362,14 @@ const tests = { type: "https", options: { minVersion: "TLSv1.1", - ca: readFileSync(path.join(httpsCertificateDirectory, "ca.pem")), - pfx: readFileSync(path.join(httpsCertificateDirectory, "server.pfx")), - key: readFileSync(path.join(httpsCertificateDirectory, "server.key")), - cert: readFileSync( + ca: fs.readFileSync(path.join(httpsCertificateDirectory, "ca.pem")), + pfx: fs.readFileSync( + path.join(httpsCertificateDirectory, "server.pfx"), + ), + key: fs.readFileSync( + path.join(httpsCertificateDirectory, "server.key"), + ), + cert: fs.readFileSync( path.join(httpsCertificateDirectory, "server.crt"), ), passphrase: "webpack-dev-server", @@ -372,22 +378,22 @@ const tests = { { type: "https", options: { - ca: readFileSync(path.join(httpsCertificateDirectory, "ca.pem")), + ca: fs.readFileSync(path.join(httpsCertificateDirectory, "ca.pem")), pfx: [ { - buf: readFileSync( + buf: fs.readFileSync( path.join(httpsCertificateDirectory, "server.pfx"), ), }, ], key: [ { - pem: readFileSync( + pem: fs.readFileSync( path.join(httpsCertificateDirectory, "server.key"), ), }, ], - cert: readFileSync( + cert: fs.readFileSync( path.join(httpsCertificateDirectory, "server.crt"), ), passphrase: "webpack-dev-server", @@ -439,10 +445,10 @@ const tests = { }, app: { success: [ - () => require("connect")(), + () => connect(), async () => new Promise((resolve) => { - resolve(require("connect")()); + resolve(connect()); }), ], failure: ["test", false], @@ -502,7 +508,6 @@ const tests = { success: [ false, "ws", - "sockjs", { type: "ws", options: { @@ -558,11 +563,11 @@ const tests = { describe("options", () => { let consoleMock; - beforeAll(() => { - consoleMock = jest.spyOn(console, "warn").mockImplementation(); + before(() => { + consoleMock = spyOn(console, "warn").mockImplementation(); }); - afterAll(() => { + after(() => { consoleMock.mockRestore(); }); @@ -602,7 +607,7 @@ describe("options", () => { type === "success" ? "successfully validate" : "throw an error on" } the "${key}" option with '${stringifyValue( value, - )}' value`, async () => { + )}' value`, async (t) => { const compiler = webpack(config); let thrownError; @@ -617,7 +622,7 @@ describe("options", () => { expect(thrownError).toBeUndefined(); } else { expect(thrownError).toBeDefined(); - expect(thrownError.toString()).toMatchSnapshot(); + t.assert.snapshot(thrownError.toString()); } }); } diff --git a/tsconfig.json b/tsconfig.json index a28baacbf5..8e5e60299a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,14 +1,15 @@ { "compilerOptions": { - "target": "ES2017", - "module": "commonjs", - "lib": ["es2017", "dom"], + "target": "ES2024", + "module": "nodenext", + "moduleResolution": "nodenext", + "lib": ["es2024", "dom"], "allowJs": true, "checkJs": true, "strict": true, "types": ["node"], "resolveJsonModule": true, - "allowSyntheticDefaultImports": true + "esModuleInterop": true }, "include": ["./bin/**/*", "./lib/**/*"] } diff --git a/types/bin/cli-flags.d.ts b/types/bin/cli-flags.d.ts deleted file mode 100644 index 4c50ae6e5a..0000000000 --- a/types/bin/cli-flags.d.ts +++ /dev/null @@ -1,1002 +0,0 @@ -declare const _exports: { - "allowed-hosts": { - configs: ( - | { - type: string; - multiple: boolean; - description: string; - path: string; - values?: undefined; - } - | { - description: string; - multiple: boolean; - path: string; - type: string; - values: string[]; - } - )[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "allowed-hosts-reset": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - bonjour: { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - client: { - configs: { - description: string; - negatedDescription: string; - multiple: boolean; - path: string; - type: string; - values: boolean[]; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "client-logging": { - configs: { - type: string; - values: string[]; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-overlay": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-overlay-errors": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-overlay-trusted-types-policy-name": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "client-overlay-warnings": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-overlay-runtime-errors": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-progress": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-reconnect": { - configs: ( - | { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - } - | { - type: string; - multiple: boolean; - description: string; - path: string; - negatedDescription?: undefined; - } - )[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-web-socket-transport": { - configs: ( - | { - type: string; - values: string[]; - multiple: boolean; - description: string; - path: string; - } - | { - type: string; - multiple: boolean; - description: string; - path: string; - values?: undefined; - } - )[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-web-socket-url": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-web-socket-url-hostname": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-web-socket-url-password": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-web-socket-url-pathname": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-web-socket-url-port": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-web-socket-url-protocol": { - configs: ( - | { - description: string; - multiple: boolean; - path: string; - type: string; - values: string[]; - } - | { - description: string; - multiple: boolean; - path: string; - type: string; - values?: undefined; - } - )[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "client-web-socket-url-username": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - compress: { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "history-api-fallback": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - host: { - configs: ( - | { - description: string; - multiple: boolean; - path: string; - type: string; - values: string[]; - } - | { - description: string; - multiple: boolean; - path: string; - type: string; - values?: undefined; - } - )[]; - description: string; - simpleType: string; - multiple: boolean; - }; - hot: { - configs: ( - | { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - values?: undefined; - } - | { - type: string; - values: string[]; - multiple: boolean; - description: string; - path: string; - negatedDescription?: undefined; - } - )[]; - description: string; - simpleType: string; - multiple: boolean; - }; - http2: { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - https: { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "https-ca": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "https-ca-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "https-cacert": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "https-cacert-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "https-cert": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "https-cert-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "https-crl": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "https-crl-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "https-key": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "https-key-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "https-passphrase": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "https-pfx": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "https-pfx-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "https-request-cert": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - ipc: { - configs: ( - | { - type: string; - multiple: boolean; - description: string; - path: string; - values?: undefined; - } - | { - type: string; - values: boolean[]; - multiple: boolean; - description: string; - path: string; - } - )[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "live-reload": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "magic-html": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - open: { - configs: ( - | { - type: string; - multiple: boolean; - description: string; - path: string; - negatedDescription?: undefined; - } - | { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - } - )[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "open-app": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "open-app-name": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "open-app-name-reset": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "open-reset": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "open-target": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "open-target-reset": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - port: { - configs: ( - | { - type: string; - multiple: boolean; - description: string; - path: string; - values?: undefined; - } - | { - type: string; - values: string[]; - multiple: boolean; - description: string; - path: string; - } - )[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "server-options-ca": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-ca-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-cacert": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-cacert-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-cert": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-cert-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-crl": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-crl-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-key": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-key-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-passphrase": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-pfx": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-pfx-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-request-cert": { - configs: { - description: string; - negatedDescription: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-type": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - values: string[]; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - static: { - configs: ( - | { - type: string; - multiple: boolean; - description: string; - path: string; - negatedDescription?: undefined; - } - | { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - } - )[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "static-directory": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "static-public-path": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "static-public-path-reset": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "static-reset": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "static-serve-index": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "static-watch": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "watch-files": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "watch-files-reset": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "web-socket-server": { - configs: ( - | { - description: string; - negatedDescription: string; - multiple: boolean; - path: string; - type: string; - values: boolean[]; - } - | { - description: string; - multiple: boolean; - path: string; - type: string; - values: string[]; - negatedDescription?: undefined; - } - | { - description: string; - multiple: boolean; - path: string; - type: string; - negatedDescription?: undefined; - values?: undefined; - } - )[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "web-socket-server-type": { - configs: ( - | { - description: string; - multiple: boolean; - path: string; - type: string; - values: string[]; - } - | { - description: string; - multiple: boolean; - path: string; - type: string; - values?: undefined; - } - )[]; - description: string; - simpleType: string; - multiple: boolean; - }; -}; -export = _exports; diff --git a/types/lib/Server.d.ts b/types/lib/Server.d.ts index 47dfba4c62..3cbce6cdc2 100644 --- a/types/lib/Server.d.ts +++ b/types/lib/Server.d.ts @@ -1,4 +1,340 @@ -export = Server; +export default Server; +export type Schema = import("schema-utils").Schema; +export type Compiler = import("webpack").Compiler; +export type MultiCompiler = import("webpack").MultiCompiler; +export type WebpackConfiguration = import("webpack").Configuration; +export type StatsOptions = import("webpack").StatsOptions; +export type StatsCompilation = import("webpack").StatsCompilation; +export type Stats = import("webpack").Stats; +export type MultiStats = import("webpack").MultiStats; +export type NetworkInterfaceInfo = import("os").NetworkInterfaceInfo; +export type WatchOptions = import("chokidar").ChokidarOptions; +export type FSWatcher = import("chokidar").FSWatcher; +export type ConnectHistoryApiFallbackOptions = + import("connect-history-api-fallback").Options; +export type Bonjour = import("bonjour-service").Bonjour; +export type BonjourOptions = import("bonjour-service").Service; +export type RequestHandler = import("http-proxy-middleware").RequestHandler; +export type HttpProxyMiddlewareOptions = + import("http-proxy-middleware").Options; +export type HttpProxyMiddlewareOptionsFilter = + import("http-proxy-middleware").Filter; +export type ServeIndexOptions = import("serve-index").Options; +export type ServeStaticOptions = import("serve-static").ServeStaticOptions; +export type IPv4 = import("ipaddr.js").IPv4; +export type IPv6 = import("ipaddr.js").IPv6; +export type Socket = import("net").Socket; +export type HTTPServer = import("http").Server; +export type IncomingMessage = import("http").IncomingMessage; +export type ServerResponse = import("http").ServerResponse; +export type OpenOptions = import("open").Options; +export type ExpressApplication = import("express").Application; +export type ExpressRequestHandler = import("express").RequestHandler; +export type ExpressErrorRequestHandler = import("express").ErrorRequestHandler; +export type ExpressRequest = import("express").Request; +export type ExpressResponse = import("express").Response; +export type EXPECTED_ANY = any; +export type NextFunction = (err?: EXPECTED_ANY) => void; +export type SimpleHandleFunction = ( + req: IncomingMessage, + res: ServerResponse, +) => void; +export type NextHandleFunction = ( + req: IncomingMessage, + res: ServerResponse, + next: NextFunction, +) => void; +export type ErrorHandleFunction = ( + err: EXPECTED_ANY, + req: IncomingMessage, + res: ServerResponse, + next: NextFunction, +) => void; +export type HandleFunction = + | SimpleHandleFunction + | NextHandleFunction + | ErrorHandleFunction; +export type ServerOptions = import("https").ServerOptions; +export type Request< + T extends BasicApplication = import("express").Application, +> = T extends ExpressApplication ? ExpressRequest : IncomingMessage; +export type Response< + T extends BasicApplication = import("express").Application, +> = T extends ExpressApplication ? ExpressResponse : ServerResponse; +export type DevMiddlewareOptions< + T extends Request, + U extends Response, +> = import("webpack-dev-middleware").Options; +export type DevMiddlewareContext< + T extends Request, + U extends Response, +> = import("webpack-dev-middleware").Context; +export type Host = "local-ip" | "local-ipv4" | "local-ipv6" | string; +export type Port = number | string | "auto"; +export type WatchFiles = { + /** + * paths + */ + paths: string | string[]; + /** + * options + */ + options?: + | (WatchOptions & { + aggregateTimeout?: number; + ignored?: WatchOptions["ignored"]; + poll?: number | boolean; + }) + | undefined; +}; +export type Static = { + /** + * directory + */ + directory?: string | undefined; + /** + * public path + */ + publicPath?: (string | string[]) | undefined; + /** + * serve index + */ + serveIndex?: (boolean | ServeIndexOptions) | undefined; + /** + * static options + */ + staticOptions?: ServeStaticOptions | undefined; + /** + * watch and watch options + */ + watch?: + | ( + | boolean + | (WatchOptions & { + aggregateTimeout?: number; + ignored?: WatchOptions["ignored"]; + poll?: number | boolean; + }) + ) + | undefined; +}; +export type NormalizedStatic = { + directory: string; + publicPath: string[]; + serveIndex: false | ServeIndexOptions; + staticOptions: ServeStaticOptions; + watch: false | WatchOptions; +}; +export type ServerType< + A extends BasicApplication = import("express").Application, + S extends BasicServer = import("http").Server< + typeof import("http").IncomingMessage, + typeof import("http").ServerResponse + >, +> = + | "http" + | "https" + | "http2" + | string + | ((serverOptions: ServerOptions, application: A) => S); +export type ServerConfiguration< + A extends BasicApplication = import("express").Application, + S extends BasicServer = import("http").Server< + typeof import("http").IncomingMessage, + typeof import("http").ServerResponse + >, +> = { + /** + * type + */ + type?: ServerType | undefined; + /** + * options + */ + options?: ServerOptions | undefined; +}; +export type WebSocketServerConfiguration = { + /** + * type + */ + type?: ("ws" | string | (() => WebSocketServerConfiguration)) | undefined; + /** + * options + */ + options?: Record | undefined; +}; +export type ClientConnection = (import("ws").WebSocket & { + send: import("ws").WebSocket["send"]; + terminate: import("ws").WebSocket["terminate"]; + ping: import("ws").WebSocket["ping"]; +}) & { + isAlive?: boolean; +}; +export type WebSocketServer = import("ws").WebSocketServer & { + close: import("ws").WebSocketServer["close"]; +}; +export type WebSocketServerImplementation = { + implementation: WebSocketServer; + clients: ClientConnection[]; +}; +export type ProxyConfigArrayItem = { + path?: HttpProxyMiddlewareOptionsFilter | undefined; + context?: HttpProxyMiddlewareOptionsFilter | undefined; +} & HttpProxyMiddlewareOptions; +export type ProxyConfigArray = ( + | ProxyConfigArrayItem + | (( + req?: Request | undefined, + res?: Response | undefined, + next?: NextFunction | undefined, + ) => ProxyConfigArrayItem) +)[]; +export type OpenApp = { + name?: string | undefined; + arguments?: string[] | undefined; +}; +export type Open = { + app?: (string | string[] | OpenApp) | undefined; + /** + * target + */ + target?: (string | string[]) | undefined; +}; +export type NormalizedOpen = { + target: string; + options: import("open").Options; +}; +export type WebSocketURL = { + /** + * hostname + */ + hostname?: string | undefined; + /** + * password + */ + password?: string | undefined; + /** + * pathname + */ + pathname?: string | undefined; + /** + * port + */ + port?: (number | string) | undefined; + /** + * protocol + */ + protocol?: string | undefined; + /** + * username + */ + username?: string | undefined; +}; +export type OverlayMessageOptions = boolean | ((error: Error) => void); +export type ClientConfiguration = { + /** + * logging + */ + logging?: + | ("log" | "info" | "warn" | "error" | "none" | "verbose") + | undefined; + /** + * overlay + */ + overlay?: + | ( + | boolean + | { + warnings?: OverlayMessageOptions; + errors?: OverlayMessageOptions; + runtimeErrors?: OverlayMessageOptions; + } + ) + | undefined; + /** + * progress + */ + progress?: boolean | undefined; + /** + * reconnect + */ + reconnect?: (boolean | number) | undefined; + /** + * web socket transport + */ + webSocketTransport?: ("ws" | string) | undefined; + /** + * web socket URL + */ + webSocketURL?: (string | WebSocketURL) | undefined; +}; +export type Headers = + | { + key: string; + value: string; + }[] + | Record; +export type MiddlewareHandler< + T extends BasicApplication = import("express").Application, +> = T extends ExpressApplication + ? ExpressRequestHandler | ExpressErrorRequestHandler + : HandleFunction; +export type MiddlewareObject = { + name?: string; + path?: string; + middleware: MiddlewareHandler; +}; +export type Middleware = MiddlewareObject | MiddlewareHandler; +export type BasicServer = import("net").Server | import("tls").Server; +export type Configuration< + A extends BasicApplication = import("express").Application, + S extends BasicServer = import("http").Server< + typeof import("http").IncomingMessage, + typeof import("http").ServerResponse + >, +> = { + ipc?: (boolean | string) | undefined; + host?: Host | undefined; + port?: Port | undefined; + hot?: (boolean | "only") | undefined; + liveReload?: boolean | undefined; + devMiddleware?: DevMiddlewareOptions | undefined; + compress?: boolean | undefined; + allowedHosts?: ("auto" | "all" | string | string[]) | undefined; + historyApiFallback?: (boolean | ConnectHistoryApiFallbackOptions) | undefined; + bonjour?: (boolean | Record | BonjourOptions) | undefined; + watchFiles?: + | (string | string[] | WatchFiles | (string | WatchFiles)[]) + | undefined; + static?: (boolean | string | Static | (string | Static)[]) | undefined; + server?: (ServerType | ServerConfiguration) | undefined; + app?: (() => Promise) | undefined; + webSocketServer?: + | (boolean | "ws" | string | WebSocketServerConfiguration) + | undefined; + proxy?: ProxyConfigArray | undefined; + open?: (boolean | string | Open | (string | Open)[]) | undefined; + setupExitSignals?: boolean | undefined; + client?: (boolean | ClientConfiguration) | undefined; + headers?: + | ( + | Headers + | (( + req: Request, + res: Response, + context: DevMiddlewareContext | undefined, + ) => Headers) + ) + | undefined; + onListening?: ((devServer: Server) => void) | undefined; + setupMiddlewares?: + | ((middlewares: Middleware[], devServer: Server) => Middleware[]) + | undefined; +}; +export type FunctionReturning = () => T; +export type BasicApplication = { + use: typeof useFn; +}; /** * @typedef {object} BasicApplication * @property {typeof useFn} use @@ -1141,16 +1477,6 @@ declare class Server< gatewayOrFamily: string, isInternal?: boolean | undefined, ): string | undefined; - /** - * @param {"v4" | "v6"} family family - * @returns {Promise} internal API - */ - static internalIP(family: "v4" | "v6"): Promise; - /** - * @param {"v4" | "v6"} family family - * @returns {string | undefined} internal IP - */ - static internalIPSync(family: "v4" | "v6"): string | undefined; /** * @param {Host} hostname hostname * @returns {Promise} resolved hostname @@ -1189,7 +1515,7 @@ declare class Server< staticWatchers: FSWatcher[]; /** * @private - * @type {{ name: string | symbol, listener: (...args: EXPECTED_ANY[]) => void}[] }} + * @type {{ name: string | symbol, listener: (...args: EXPECTED_ANY[]) => void }[]} } */ private listeners; /** @@ -1209,6 +1535,7 @@ declare class Server< /** * @private * @param {Compiler} compiler compiler + * @returns {Promise} */ private addAdditionalEntries; /** @@ -1229,7 +1556,7 @@ declare class Server< /** * @template T * @private - * @returns {T} server transport + * @returns {Promise} server transport */ private getServerTransport; /** @@ -1275,17 +1602,17 @@ declare class Server< private stats; /** * @private - * @returns {void} + * @returns {Promise} */ private setupWatchStaticFiles; /** * @private - * @returns {void} + * @returns {Promise} */ private setupWatchFiles; /** * @private - * @returns {void} + * @returns {Promise} */ private setupMiddlewares; /** @type {import("webpack-dev-middleware").API} */ @@ -1295,7 +1622,7 @@ declare class Server< import("express-serve-static-core").ParamsDictionary, any, any, - qs.ParsedQs, + import("qs").ParsedQs, Record >, import("express").Response> @@ -1311,7 +1638,7 @@ declare class Server< isTlsServer: boolean | undefined; /** * @private - * @returns {void} + * @returns {Promise} */ private createWebSocketServer; /** @type {WebSocketServerImplementation | undefined | null} */ @@ -1324,7 +1651,7 @@ declare class Server< private openBrowser; /** * @private - * @returns {void} + * @returns {Promise} */ private runBonjour; /** @@ -1392,11 +1719,12 @@ declare class Server< /** * @param {string | string[]} watchPath watch path * @param {WatchOptions=} watchOptions watch options + * @returns {Promise} */ watchFiles( watchPath: string | string[], watchOptions?: WatchOptions | undefined, - ): void; + ): Promise; /** * @param {import("webpack-dev-middleware").Callback=} callback callback */ @@ -1419,433 +1747,8 @@ declare class Server< * @param {((err?: Error) => void)=} callback callback */ stopCallback(callback?: ((err?: Error) => void) | undefined): void; + #private; } -declare namespace Server { - export { - Schema, - Compiler, - MultiCompiler, - WebpackConfiguration, - StatsOptions, - StatsCompilation, - Stats, - MultiStats, - NetworkInterfaceInfo, - WatchOptions, - FSWatcher, - ConnectHistoryApiFallbackOptions, - Bonjour, - BonjourOptions, - RequestHandler, - HttpProxyMiddlewareOptions, - HttpProxyMiddlewareOptionsFilter, - ServeIndexOptions, - ServeStaticOptions, - IPv4, - IPv6, - Socket, - HTTPServer, - IncomingMessage, - ServerResponse, - OpenOptions, - ExpressApplication, - ExpressRequestHandler, - ExpressErrorRequestHandler, - ExpressRequest, - ExpressResponse, - EXPECTED_ANY, - NextFunction, - SimpleHandleFunction, - NextHandleFunction, - ErrorHandleFunction, - HandleFunction, - ServerOptions, - Request, - Response, - DevMiddlewareOptions, - DevMiddlewareContext, - Host, - Port, - WatchFiles, - Static, - NormalizedStatic, - ServerType, - ServerConfiguration, - WebSocketServerConfiguration, - ClientConnection, - WebSocketServer, - WebSocketServerImplementation, - ByPass, - ProxyConfigArrayItem, - ProxyConfigArray, - OpenApp, - Open, - NormalizedOpen, - WebSocketURL, - OverlayMessageOptions, - ClientConfiguration, - Headers, - MiddlewareHandler, - MiddlewareObject, - Middleware, - BasicServer, - Configuration, - FunctionReturning, - BasicApplication, - }; -} -type Schema = import("schema-utils/declarations/validate").Schema; -type Compiler = import("webpack").Compiler; -type MultiCompiler = import("webpack").MultiCompiler; -type WebpackConfiguration = import("webpack").Configuration; -type StatsOptions = import("webpack").StatsOptions; -type StatsCompilation = import("webpack").StatsCompilation; -type Stats = import("webpack").Stats; -type MultiStats = import("webpack").MultiStats; -type NetworkInterfaceInfo = import("os").NetworkInterfaceInfo; -type WatchOptions = import("chokidar").WatchOptions; -type FSWatcher = import("chokidar").FSWatcher; -type ConnectHistoryApiFallbackOptions = - import("connect-history-api-fallback").Options; -type Bonjour = import("bonjour-service").Bonjour; -type BonjourOptions = import("bonjour-service").Service; -type RequestHandler = import("http-proxy-middleware").RequestHandler; -type HttpProxyMiddlewareOptions = import("http-proxy-middleware").Options; -type HttpProxyMiddlewareOptionsFilter = import("http-proxy-middleware").Filter; -type ServeIndexOptions = import("serve-index").Options; -type ServeStaticOptions = import("serve-static").ServeStaticOptions; -type IPv4 = import("ipaddr.js").IPv4; -type IPv6 = import("ipaddr.js").IPv6; -type Socket = import("net").Socket; -type HTTPServer = import("http").Server; -type IncomingMessage = import("http").IncomingMessage; -type ServerResponse = import("http").ServerResponse; -type OpenOptions = import("open").Options; -type ExpressApplication = import("express").Application; -type ExpressRequestHandler = import("express").RequestHandler; -type ExpressErrorRequestHandler = import("express").ErrorRequestHandler; -type ExpressRequest = import("express").Request; -type ExpressResponse = import("express").Response; -type EXPECTED_ANY = any; -type NextFunction = (err?: EXPECTED_ANY) => void; -type SimpleHandleFunction = (req: IncomingMessage, res: ServerResponse) => void; -type NextHandleFunction = ( - req: IncomingMessage, - res: ServerResponse, - next: NextFunction, -) => void; -type ErrorHandleFunction = ( - err: EXPECTED_ANY, - req: IncomingMessage, - res: ServerResponse, - next: NextFunction, -) => void; -type HandleFunction = - | SimpleHandleFunction - | NextHandleFunction - | ErrorHandleFunction; -type ServerOptions = import("https").ServerOptions & { - spdy?: { - plain?: boolean | undefined; - ssl?: boolean | undefined; - "x-forwarded-for"?: string | undefined; - protocol?: string | undefined; - protocols?: string[] | undefined; - }; -}; -type Request = - T extends ExpressApplication ? ExpressRequest : IncomingMessage; -type Response = - T extends ExpressApplication ? ExpressResponse : ServerResponse; -type DevMiddlewareOptions< - T extends Request, - U extends Response, -> = import("webpack-dev-middleware").Options; -type DevMiddlewareContext< - T extends Request, - U extends Response, -> = import("webpack-dev-middleware").Context; -type Host = "local-ip" | "local-ipv4" | "local-ipv6" | string; -type Port = number | string | "auto"; -type WatchFiles = { - /** - * paths - */ - paths: string | string[]; - /** - * options - */ - options?: - | (WatchOptions & { - aggregateTimeout?: number; - ignored?: WatchOptions["ignored"]; - poll?: number | boolean; - }) - | undefined; -}; -type Static = { - /** - * directory - */ - directory?: string | undefined; - /** - * public path - */ - publicPath?: (string | string[]) | undefined; - /** - * serve index - */ - serveIndex?: (boolean | ServeIndexOptions) | undefined; - /** - * static options - */ - staticOptions?: ServeStaticOptions | undefined; - /** - * watch and watch options - */ - watch?: - | ( - | boolean - | (WatchOptions & { - aggregateTimeout?: number; - ignored?: WatchOptions["ignored"]; - poll?: number | boolean; - }) - ) - | undefined; -}; -type NormalizedStatic = { - directory: string; - publicPath: string[]; - serveIndex: false | ServeIndexOptions; - staticOptions: ServeStaticOptions; - watch: false | WatchOptions; -}; -type ServerType< - A extends BasicApplication = import("express").Application, - S extends BasicServer = import("http").Server< - typeof import("http").IncomingMessage, - typeof import("http").ServerResponse - >, -> = - | "http" - | "https" - | "spdy" - | "http2" - | string - | ((serverOptions: ServerOptions, application: A) => S); -type ServerConfiguration< - A extends BasicApplication = import("express").Application, - S extends BasicServer = import("http").Server< - typeof import("http").IncomingMessage, - typeof import("http").ServerResponse - >, -> = { - /** - * type - */ - type?: ServerType | undefined; - /** - * options - */ - options?: ServerOptions | undefined; -}; -type WebSocketServerConfiguration = { - /** - * type - */ - type?: - | ("sockjs" | "ws" | string | (() => WebSocketServerConfiguration)) - | undefined; - /** - * options - */ - options?: Record | undefined; -}; -type ClientConnection = ( - | import("ws").WebSocket - | (import("sockjs").Connection & { - send: import("ws").WebSocket["send"]; - terminate: import("ws").WebSocket["terminate"]; - ping: import("ws").WebSocket["ping"]; - }) -) & { - isAlive?: boolean; -}; -type WebSocketServer = - | import("ws").WebSocketServer - | (import("sockjs").Server & { - close: import("ws").WebSocketServer["close"]; - }); -type WebSocketServerImplementation = { - implementation: WebSocketServer; - clients: ClientConnection[]; -}; -type ByPass = ( - req: Request, - res: Response, - proxyConfig: ProxyConfigArrayItem, -) => any; -type ProxyConfigArrayItem = { - path?: HttpProxyMiddlewareOptionsFilter | undefined; - context?: HttpProxyMiddlewareOptionsFilter | undefined; -} & { - bypass?: ByPass; -} & HttpProxyMiddlewareOptions; -type ProxyConfigArray = ( - | ProxyConfigArrayItem - | (( - req?: Request | undefined, - res?: Response | undefined, - next?: NextFunction | undefined, - ) => ProxyConfigArrayItem) -)[]; -type OpenApp = { - name?: string | undefined; - arguments?: string[] | undefined; -}; -type Open = { - app?: (string | string[] | OpenApp) | undefined; - /** - * target - */ - target?: (string | string[]) | undefined; -}; -type NormalizedOpen = { - target: string; - options: import("open").Options; -}; -type WebSocketURL = { - /** - * hostname - */ - hostname?: string | undefined; - /** - * password - */ - password?: string | undefined; - /** - * pathname - */ - pathname?: string | undefined; - /** - * port - */ - port?: (number | string) | undefined; - /** - * protocol - */ - protocol?: string | undefined; - /** - * username - */ - username?: string | undefined; -}; -type OverlayMessageOptions = boolean | ((error: Error) => void); -type ClientConfiguration = { - /** - * logging - */ - logging?: - | ("log" | "info" | "warn" | "error" | "none" | "verbose") - | undefined; - /** - * overlay - */ - overlay?: - | ( - | boolean - | { - warnings?: OverlayMessageOptions; - errors?: OverlayMessageOptions; - runtimeErrors?: OverlayMessageOptions; - } - ) - | undefined; - /** - * progress - */ - progress?: boolean | undefined; - /** - * reconnect - */ - reconnect?: (boolean | number) | undefined; - /** - * web socket transport - */ - webSocketTransport?: ("ws" | "sockjs" | string) | undefined; - /** - * web socket URL - */ - webSocketURL?: (string | WebSocketURL) | undefined; -}; -type Headers = - | Array<{ - key: string; - value: string; - }> - | Record; -type MiddlewareHandler< - T extends BasicApplication = import("express").Application, -> = T extends ExpressApplication - ? ExpressRequestHandler | ExpressErrorRequestHandler - : HandleFunction; -type MiddlewareObject = { - name?: string; - path?: string; - middleware: MiddlewareHandler; -}; -type Middleware = MiddlewareObject | MiddlewareHandler; -type BasicServer = import("net").Server | import("tls").Server; -type Configuration< - A extends BasicApplication = import("express").Application, - S extends BasicServer = import("http").Server< - typeof import("http").IncomingMessage, - typeof import("http").ServerResponse - >, -> = { - ipc?: (boolean | string) | undefined; - host?: Host | undefined; - port?: Port | undefined; - hot?: (boolean | "only") | undefined; - liveReload?: boolean | undefined; - devMiddleware?: DevMiddlewareOptions | undefined; - compress?: boolean | undefined; - allowedHosts?: ("auto" | "all" | string | string[]) | undefined; - historyApiFallback?: (boolean | ConnectHistoryApiFallbackOptions) | undefined; - bonjour?: (boolean | Record | BonjourOptions) | undefined; - watchFiles?: - | (string | string[] | WatchFiles | Array) - | undefined; - static?: (boolean | string | Static | Array) | undefined; - server?: (ServerType | ServerConfiguration) | undefined; - app?: (() => Promise) | undefined; - webSocketServer?: - | (boolean | "sockjs" | "ws" | string | WebSocketServerConfiguration) - | undefined; - proxy?: ProxyConfigArray | undefined; - open?: (boolean | string | Open | Array) | undefined; - setupExitSignals?: boolean | undefined; - client?: (boolean | ClientConfiguration) | undefined; - headers?: - | ( - | Headers - | (( - req: Request, - res: Response, - context: DevMiddlewareContext | undefined, - ) => Headers) - ) - | undefined; - onListening?: ((devServer: Server) => void) | undefined; - setupMiddlewares?: - | ((middlewares: Middleware[], devServer: Server) => Middleware[]) - | undefined; -}; -type FunctionReturning = () => T; -type BasicApplication = { - use: typeof useFn; -}; /** * @overload * @param {NextHandleFunction} fn function diff --git a/types/lib/getPort.d.ts b/types/lib/getPort.d.ts index 677eb97671..d6eec701a3 100644 --- a/types/lib/getPort.d.ts +++ b/types/lib/getPort.d.ts @@ -1,4 +1,4 @@ -export = getPorts; +export default getPorts; /** * @param {number} basePort base port * @param {string=} host host diff --git a/types/lib/servers/BaseServer.d.ts b/types/lib/servers/BaseServer.d.ts index 07d29fb4b5..4094129b1a 100644 --- a/types/lib/servers/BaseServer.d.ts +++ b/types/lib/servers/BaseServer.d.ts @@ -1,15 +1,12 @@ -export = BaseServer; -declare class BaseServer { +/** @typedef {import("../Server.js").ClientConnection} ClientConnection */ +export default class BaseServer { /** - * @param {import("../Server")} server server + * @param {import("../Server.js").default} server server */ - constructor(server: import("../Server")); - /** @type {import("../Server")} */ - server: import("../Server"); + constructor(server: import("../Server.js").default); + /** @type {import("../Server.js").default} */ + server: import("../Server.js").default; /** @type {ClientConnection[]} */ clients: ClientConnection[]; } -declare namespace BaseServer { - export { ClientConnection }; -} -type ClientConnection = import("../Server").ClientConnection; +export type ClientConnection = import("../Server.js").ClientConnection; diff --git a/types/lib/servers/SockJSServer.d.ts b/types/lib/servers/SockJSServer.d.ts deleted file mode 100644 index 8116b4dd9d..0000000000 --- a/types/lib/servers/SockJSServer.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export = SockJSServer; -declare class SockJSServer extends BaseServer { - implementation: sockjs.Server; -} -declare namespace SockJSServer { - export { WebSocketServerConfiguration, ClientConnection }; -} -import BaseServer = require("./BaseServer"); -import sockjs = require("sockjs"); -type WebSocketServerConfiguration = - import("../Server").WebSocketServerConfiguration; -type ClientConnection = import("../Server").ClientConnection; diff --git a/types/lib/servers/WebsocketServer.d.ts b/types/lib/servers/WebsocketServer.d.ts index ce8c693789..19e7acbcd8 100644 --- a/types/lib/servers/WebsocketServer.d.ts +++ b/types/lib/servers/WebsocketServer.d.ts @@ -1,16 +1,13 @@ -export = WebsocketServer; -declare class WebsocketServer extends BaseServer { +/** @typedef {import("../Server.js").WebSocketServerConfiguration} WebSocketServerConfiguration */ +/** @typedef {import("../Server.js").ClientConnection} ClientConnection */ +export default class WebsocketServer extends BaseServer { static heartbeatInterval: number; - implementation: WebSocket.Server< - typeof WebSocket, + implementation: import("ws").Server< + typeof import("ws").default, typeof import("http").IncomingMessage >; } -declare namespace WebsocketServer { - export { WebSocketServerConfiguration, ClientConnection }; -} -import BaseServer = require("./BaseServer"); -import WebSocket = require("ws"); -type WebSocketServerConfiguration = - import("../Server").WebSocketServerConfiguration; -type ClientConnection = import("../Server").ClientConnection; +export type WebSocketServerConfiguration = + import("../Server.js").WebSocketServerConfiguration; +export type ClientConnection = import("../Server.js").ClientConnection; +import BaseServer from "./BaseServer.js";

Compilation: unnamed[0]

  • foo.js
  • @@ -14,15 +18,23 @@ exports[`Built in routes with multi config should handle GET request to director