diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index bd7c196746471b..6f8c25dcd9b5a9 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -25,6 +25,7 @@ /packages/interactivity @luisherranz @darerodz # Tooling +/.npm-extension.mjs @manzoorwanijk /.npmrc @manzoorwanijk # Emptied out by #83033; the entry stays so anything reappearing there gets reviewed. /bin @manzoorwanijk diff --git a/.npm-extension.mjs b/.npm-extension.mjs new file mode 100644 index 00000000000000..91fa80393d03c4 --- /dev/null +++ b/.npm-extension.mjs @@ -0,0 +1,194 @@ +/** + * Root-owned repairs to third-party manifests, applied by npm before it + * resolves the tree. Drop a repair once the linked upstream fix ships. + * + * Every repair is conditional: it asserts the manifest still needs it and + * calls `obsolete()` when it does not, so an upstream fix fails the install + * naming the entry to delete instead of being overwritten unnoticed. + * Keep that contract when adding one, and never repair a field blindly. + * + * @see https://docs.npmjs.com/cli/configuring-npm/npm-extension + */ + +/** + * Peer ranges that upstream has not widened yet, keyed by package name. + * `major` limits each repair to the release line that needs it. + */ +const PEER_RANGES = { + // https://github.com/import-js/eslint-plugin-import/issues/3227 + 'eslint-plugin-import': { + major: 2, + peerDependencies: { + eslint: '^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 || ^10', + }, + }, + // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/issues/1075 + 'eslint-plugin-jsx-a11y': { + major: 6, + peerDependencies: { + eslint: '^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 || ^10', + }, + }, + // https://github.com/jsx-eslint/eslint-plugin-react/issues/3977 + 'eslint-plugin-react': { + major: 7, + peerDependencies: { + eslint: '^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 || ^10', + }, + }, +}; + +/** + * Dependency ranges a dependent pins below a release it needs, keyed by the + * dependent. `major` limits each repair to the release line that needs it. + */ +const DEPENDENCY_RANGES = { + /* + * Yjs 14 ships as @y/y, and @y/protocols encodes with it. Resolving the + * declared `yjs` range instead gives the server a second implementation, + * whose documents lack store.getClock. + */ + '@y/websocket-server': { + major: 0, + dependencies: { + yjs: 'npm:@y/y@^14.0.0-rc.7', + }, + }, + // Exact pins below two advisories: GHSA-2883-xcg3-v3hh and GHSA-w4pp-8pjf-rmxw. https://github.com/lerna/lerna/issues/4411 + lerna: { + major: 10, + dependencies: { + 'js-yaml': '^4.3.2', + pacote: '^21.5.1', + }, + }, + // 0.3.24 is the last release, so GHSA-w5hq-g745-h8pq stays unless we raise the range. + sockjs: { + major: 0, + dependencies: { + uuid: '^11.1.1', + }, + }, +}; + +/** + * Packages whose declarations import React types they never declare. Under + * `install-strategy=linked` those types resolve to `any` for every consumer. + */ +const UNDECLARED_TYPES = { + '@ariakit/react-components': [ '@types/react' ], + '@ariakit/react-utils': [ '@types/react' ], + '@dnd-kit/core': [ '@types/react' ], + '@dnd-kit/sortable': [ '@types/react' ], + '@dnd-kit/utilities': [ '@types/react' ], + '@emotion/use-insertion-effect-with-fallbacks': [ '@types/react' ], + '@floating-ui/react-dom': [ '@types/react' ], + '@react-spring/core': [ '@types/react' ], + '@react-spring/shared': [ '@types/react' ], + '@react-spring/types': [ '@types/react' ], + '@react-spring/web': [ '@types/react' ], + '@tanstack/react-router': [ '@types/react' ], + cmdk: [ '@types/react' ], + 'framer-motion': [ '@types/react' ], + 're-resizable': [ '@types/react' ], + 'react-colorful': [ '@types/react' ], + 'react-easy-crop': [ '@types/react' ], +}; + +/** + * @param {string} version Version to read the release line from. + * @return {number} The major version. + */ +function getMajor( version ) { + return Number( version.split( '.' )[ 0 ] ); +} + +/** + * Fails the install when a manifest no longer needs its repair, naming the + * entry to delete. A silent skip would instead hide the upstream fix. + * + * @param {Object} pkg The manifest npm is about to read. + * @param {string} reason What upstream changed, as a clause. + */ +function obsolete( pkg, reason ) { + throw new Error( + `${ pkg.name }@${ pkg.version } ${ reason }, so its .npm-extension.mjs repair is obsolete: remove the entry.` + ); +} + +export function transformManifest( pkg, context ) { + const peerRanges = PEER_RANGES[ pkg.name ]; + if ( peerRanges && getMajor( pkg.version ) === peerRanges.major ) { + for ( const [ name, range ] of Object.entries( + peerRanges.peerDependencies + ) ) { + if ( ! pkg.peerDependencies?.[ name ] ) { + obsolete( pkg, `no longer declares ${ name } as a peer` ); + } + if ( pkg.peerDependencies[ name ] === range ) { + obsolete( pkg, `already declares ${ name } as ${ range }` ); + } + } + pkg.peerDependencies = { + ...pkg.peerDependencies, + ...peerRanges.peerDependencies, + }; + context.log( `widened peer ranges of ${ pkg.name }@${ pkg.version }` ); + } + + const dependencyRanges = DEPENDENCY_RANGES[ pkg.name ]; + if ( + dependencyRanges && + getMajor( pkg.version ) === dependencyRanges.major + ) { + for ( const [ name, range ] of Object.entries( + dependencyRanges.dependencies + ) ) { + if ( ! pkg.dependencies?.[ name ] ) { + obsolete( pkg, `no longer depends on ${ name }` ); + } + if ( pkg.dependencies[ name ] === range ) { + obsolete( pkg, `already asks for ${ name }@${ range }` ); + } + pkg.dependencies[ name ] = range; + context.log( + `raised ${ name } to ${ range } for ${ pkg.name }@${ pkg.version }` + ); + } + } + + /* + * The plugin only needs `@terrazzo/parser`; the CLI is just one consumer. + * No upstream issue yet. + */ + if ( + pkg.name === '@terrazzo/plugin-css' && + getMajor( pkg.version ) === 2 + ) { + if ( ! pkg.peerDependencies?.[ '@terrazzo/cli' ] ) { + obsolete( pkg, 'no longer declares @terrazzo/cli as a peer' ); + } + if ( pkg.peerDependenciesMeta?.[ '@terrazzo/cli' ]?.optional ) { + obsolete( pkg, 'already makes @terrazzo/cli optional' ); + } + pkg.peerDependenciesMeta = { + ...pkg.peerDependenciesMeta, + '@terrazzo/cli': { optional: true }, + }; + context.log( `made @terrazzo/cli optional for ${ pkg.name }` ); + } + + for ( const name of UNDECLARED_TYPES[ pkg.name ] ?? [] ) { + if ( pkg.dependencies?.[ name ] || pkg.peerDependencies?.[ name ] ) { + obsolete( pkg, `declares ${ name } itself now` ); + } + pkg.peerDependencies = { ...pkg.peerDependencies, [ name ]: '*' }; + pkg.peerDependenciesMeta = { + ...pkg.peerDependenciesMeta, + [ name ]: { optional: true }, + }; + context.log( `added optional peer ${ name } to ${ pkg.name }` ); + } + + return pkg; +} diff --git a/.npmrc b/.npmrc index f4a147f9e782b9..48c132466a4f66 100644 --- a/.npmrc +++ b/.npmrc @@ -2,12 +2,8 @@ install-strategy = "linked" engine-strict = true strict-peer-deps = true prefer-dedupe = true -lockfile-version = 3 min-release-age = 1 # fail the install on any dependency script not covered by allowScripts in package.json strict-allow-scripts = true -# opt in to the npm v12 defaults that refuse git and remote URL dependencies -allow-git = none -allow-remote = none -# extend that to local tarballs +# npm v12 already refuses git and remote URL dependencies; extend that to local tarballs allow-file = none diff --git a/AGENTS.md b/AGENTS.md index a47eb163a692c5..610b16a502ce52 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -5,6 +5,7 @@ ```bash # Setup nvm use # Use the required node version +npm install --global npm@12 # Install npm explicitly, not the version Node bundles npm install && composer install npm run wp-env-test status # Always check status first. npm run wp-env-test start # Only start if not already running. diff --git a/docs/contributors/code/getting-started-with-code-contribution.md b/docs/contributors/code/getting-started-with-code-contribution.md index 8f91c477c35943..e5a0364d8672b3 100644 --- a/docs/contributors/code/getting-started-with-code-contribution.md +++ b/docs/contributors/code/getting-started-with-code-contribution.md @@ -5,10 +5,17 @@ The following guide is for setting up your local environment to contribute to th ## Prerequisites - Node.js - Gutenberg is a JavaScript project that requires [Node.js](https://nodejs.org/). The project is currently built using Node.js v24 and npm v11. Though best efforts are made to always use the Active LTS version of Node.js, this will not always be the case. For more details, please refer to the [Node.js release schedule](https://github.com/nodejs/Release#release-schedule). + Gutenberg is a JavaScript project that requires [Node.js](https://nodejs.org/). The project is currently built using Node.js v24 and npm v12. Though best efforts are made to always use the Active LTS version of Node.js, this will not always be the case. For more details, please refer to the [Node.js release schedule](https://github.com/nodejs/Release#release-schedule). We recommend using the [Node Version Manager](https://github.com/nvm-sh/nvm) (nvm) since it is the easiest way to install and manage node for macOS, Linux, and Windows 10 using WSL2. See [our Development Tools guide](/docs/getting-started/devenv/README.md#node-js-development-tools) or the Nodejs site for additional installation instructions. +- npm + Install npm explicitly rather than relying on the version Node.js bundles: + + ```bash + npm install --global npm@^12 + ``` + - Git Gutenberg is using git for source control. Make sure you have an updated version of git installed on your computer, as well as a GitHub account. You can read the [Git Workflow](/docs/contributors/code/git-workflow.md) to learn more about using git and GitHub with Gutenberg diff --git a/docs/contributors/code/managing-packages.md b/docs/contributors/code/managing-packages.md index dfb6a9941544b9..4483aec14dd7f4 100644 --- a/docs/contributors/code/managing-packages.md +++ b/docs/contributors/code/managing-packages.md @@ -12,7 +12,7 @@ The repository also contains internal workspaces under `tools/` and `test/` for ## Supply chain policy -`.npmrc` opts in to the npm v12 defaults that refuse git references (`EALLOWGIT`) and tarball URLs (`EALLOWREMOTE`), and extends that to local tarball files (`EALLOWFILE`). Local directories stay at the npm default, which gates nothing here: the `file:` links between workspaces resolve as workspaces rather than directory dependencies. +npm v12 refuses git references (`EALLOWGIT`) and tarball URLs (`EALLOWREMOTE`) by default, and `.npmrc` extends that to local tarball files (`EALLOWFILE`). Local directories stay at the npm default, which gates nothing here: the `file:` links between workspaces resolve as workspaces rather than directory dependencies. Install scripts are opt-in: every dependency that ships one is recorded in `allowScripts` in the root `package.json`, and `strict-allow-scripts` fails the install with `ESTRICTALLOWSCRIPTS` on anything missing from that list. Every entry is `false`, so nothing compiles on install. `test/ai-development` installs with `--prefix`, so it carries its own copy of the policy. @@ -28,3 +28,7 @@ When an install fails that way, read the script, then edit `allowScripts` by han ``` Do not use the `npm install-scripts` subcommands until an npm release ships [npm/cli#9941](https://github.com/npm/cli/pull/9941). All of them read the hoisted layout, so under `install-strategy=linked` they misbehave: `ls` reports covered packages as uncovered, `prune` deletes every entry as unused, and `approve` and `deny` write unusable `node_modules/.store` paths instead of the package name. + +## Peer dependencies + +`.npmrc` sets `strict-peer-deps`, so a peer range conflict fails the install with `ERESOLVE`. When a third-party package declares a wrong or outdated peer range, repair its manifest in the root [`.npm-extension.mjs`](https://docs.npmjs.com/cli/configuring-npm/npm-extension) with a link to the upstream issue, and remove the repair once the fix is released. diff --git a/package-lock.json b/package-lock.json index 921544180e26c7..5f1a190230b7ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,7 @@ { "name": "gutenberg", "version": "24.3.0-rc.1", - "lockfileVersion": 3, + "lockfileVersion": 4, "requires": true, "packages": { "": { @@ -9,6 +9,7 @@ "version": "24.3.0-rc.1", "hasInstallScript": true, "license": "GPL-2.0-or-later", + "npmExtensionHash": "sha512-HiB8wabomNmhrkzLSjQM5dVSfQAddeH7If/gK/lKe1hf13t35aFn4G4U+xLXkJgwvGpm4p4cHh+DABTzarq+AA==", "workspaces": [ "packages/*", "routes/*", @@ -20,8 +21,6 @@ ], "devDependencies": { "@playwright/test": "^1.63.0", - "@types/react": "^19.3.0", - "@types/react-dom": "^19.3.0", "@wordpress/env": "file:./packages/env", "@wordpress/eslint-tools": "file:./tools/eslint", "@wordpress/monorepo-tools": "file:./tools/monorepo", @@ -41,7 +40,7 @@ }, "engines": { "node": ">=24.18.0", - "npm": ">=11.18.0" + "npm": ">=12.2.0" } }, "node_modules/@actions/core": { @@ -560,9 +559,24 @@ "@ariakit/utils": "0.2.2", "@floating-ui/dom": "^1.0.0" }, + "npmExtensionApplied": { + "extensionPoint": "transformManifest", + "peerDependencies": [ + "@types/react" + ], + "peerDependenciesMeta": [ + "@types/react" + ] + }, "peerDependencies": { + "@types/react": "*", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/@ariakit/react-store": { @@ -589,8 +603,23 @@ "@ariakit/store": "0.1.11", "@ariakit/utils": "0.2.2" }, + "npmExtensionApplied": { + "extensionPoint": "transformManifest", + "peerDependencies": [ + "@types/react" + ], + "peerDependenciesMeta": [ + "@types/react" + ] + }, "peerDependencies": { + "@types/react": "*", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/@ariakit/store": { @@ -2789,9 +2818,24 @@ "@dnd-kit/utilities": "^3.2.2", "tslib": "^2.0.0" }, + "npmExtensionApplied": { + "extensionPoint": "transformManifest", + "peerDependencies": [ + "@types/react" + ], + "peerDependenciesMeta": [ + "@types/react" + ] + }, "peerDependencies": { + "@types/react": "*", "react": ">=16.8.0", "react-dom": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/@dnd-kit/sortable": { @@ -2803,9 +2847,24 @@ "@dnd-kit/utilities": "^3.2.2", "tslib": "^2.0.0" }, + "npmExtensionApplied": { + "extensionPoint": "transformManifest", + "peerDependencies": [ + "@types/react" + ], + "peerDependenciesMeta": [ + "@types/react" + ] + }, "peerDependencies": { "@dnd-kit/core": "^6.3.0", + "@types/react": "*", "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/@dnd-kit/utilities": { @@ -2816,8 +2875,23 @@ "dependencies": { "tslib": "^2.0.0" }, + "npmExtensionApplied": { + "extensionPoint": "transformManifest", + "peerDependencies": [ + "@types/react" + ], + "peerDependenciesMeta": [ + "@types/react" + ] + }, "peerDependencies": { + "@types/react": "*", "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/@emnapi/core": { @@ -3559,9 +3633,24 @@ "dependencies": { "@floating-ui/dom": "^1.8.0" }, + "npmExtensionApplied": { + "extensionPoint": "transformManifest", + "peerDependencies": [ + "@types/react" + ], + "peerDependenciesMeta": [ + "@types/react" + ] + }, "peerDependencies": { + "@types/react": "*", "react": ">=16.8.0", "react-dom": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/@floating-ui/utils": { @@ -10801,8 +10890,23 @@ "type": "opencollective", "url": "https://opencollective.com/react-spring/donate" }, + "npmExtensionApplied": { + "extensionPoint": "transformManifest", + "peerDependencies": [ + "@types/react" + ], + "peerDependenciesMeta": [ + "@types/react" + ] + }, "peerDependencies": { + "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/@react-spring/rafz": { @@ -10820,15 +10924,47 @@ "@react-spring/rafz": "~10.1.2", "@react-spring/types": "~10.1.2" }, + "npmExtensionApplied": { + "extensionPoint": "transformManifest", + "peerDependencies": [ + "@types/react" + ], + "peerDependenciesMeta": [ + "@types/react" + ] + }, "peerDependencies": { + "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/@react-spring/types": { "version": "10.1.2", "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-10.1.2.tgz", "integrity": "sha512-G4CWowmVPz+rDG1y9QRVq/prZNxiNwQaHC0kgT/MgY6jAGgdRgTV4VThpvJDwWvUitk3xZB4soP4d36fjeQ09g==", - "license": "MIT" + "license": "MIT", + "npmExtensionApplied": { + "extensionPoint": "transformManifest", + "peerDependencies": [ + "@types/react" + ], + "peerDependenciesMeta": [ + "@types/react" + ] + }, + "peerDependencies": { + "@types/react": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } }, "node_modules/@react-spring/web": { "version": "10.1.2", @@ -10842,9 +10978,24 @@ "@react-spring/types": "~10.1.2", "csstype": "^3.2.3" }, + "npmExtensionApplied": { + "extensionPoint": "transformManifest", + "peerDependencies": [ + "@types/react" + ], + "peerDependenciesMeta": [ + "@types/react" + ] + }, "peerDependencies": { + "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/@rolldown/binding-android-arm-eabi": { @@ -12438,12 +12589,12 @@ "license": "MIT" }, "node_modules/@tanstack/history": { - "version": "1.133.28", - "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.133.28.tgz", - "integrity": "sha512-B7+x7eP2FFvi3fgd3rNH9o/Eixt+pp0zCIdGhnQbAJjFrlwIKGjGnwyJjhWJ5fMQlGks/E2LdDTqEV4W9Plx7g==", + "version": "1.162.5", + "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.162.5.tgz", + "integrity": "sha512-w1+YvwmTkwt5n8yUqEH3IWZ9DsmorCZW/EQ3KYHnqEgIkOZpH54NvW6/Epq3Dzb8H0ifIeYX8PExvrNLIH5FIA==", "license": "MIT", "engines": { - "node": ">=12" + "node": ">=20.19" }, "funding": { "type": "github", @@ -12451,37 +12602,50 @@ } }, "node_modules/@tanstack/react-router": { - "version": "1.133.36", - "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.133.36.tgz", - "integrity": "sha512-pT4d2uEucDQ3SAIQ0pLUw6RUKwkB5pHzpBB6otaoKpO0cAwHkRPi+p59DivuzSANJLHLVEiXyJCCk72EeHMRxA==", + "version": "1.170.45", + "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.170.45.tgz", + "integrity": "sha512-6tuiIAFb82zsk/YxveJRyGjbsm6kIfgUuoH7qCp2R2aSHveW6W0t/6j+Sn4m1iIlA2lLU4cvooqks08/YMOThw==", "license": "MIT", "dependencies": { - "@tanstack/history": "1.133.28", - "@tanstack/react-store": "^0.8.0", - "@tanstack/router-core": "1.133.36", - "isbot": "^5.1.22", - "tiny-invariant": "^1.3.3", - "tiny-warning": "^1.0.3" + "@tanstack/history": "1.162.5", + "@tanstack/react-store": "^0.11.2", + "@tanstack/router-core": "1.171.38", + "isbot": "^5.1.22" }, "engines": { - "node": ">=12" + "node": ">=20.19" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, + "npmExtensionApplied": { + "extensionPoint": "transformManifest", + "peerDependencies": [ + "@types/react" + ], + "peerDependenciesMeta": [ + "@types/react" + ] + }, "peerDependencies": { + "@types/react": "*", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/@tanstack/react-store": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-store/-/react-store-0.8.0.tgz", - "integrity": "sha512-1vG9beLIuB7q69skxK9r5xiLN3ztzIPfSQSs0GfeqWGO2tGIyInZx0x1COhpx97RKaONSoAb8C3dxacWksm1ow==", + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-store/-/react-store-0.11.2.tgz", + "integrity": "sha512-oj5O5DmiMWE+ih+SioX2ayC1kbK7d3fpLx0B75fPJr9nY3zU+hoW010yr64qXsY/9fyiLVE2bn5mGNV3owm8RQ==", "license": "MIT", "dependencies": { - "@tanstack/store": "0.8.0", + "@tanstack/store": "0.11.2", "use-sync-external-store": "^1.6.0" }, "funding": { @@ -12494,21 +12658,18 @@ } }, "node_modules/@tanstack/router-core": { - "version": "1.133.36", - "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.133.36.tgz", - "integrity": "sha512-VJ9kFduePsxgjhDW+uKxL6ol9ZpJlaUO2EI9Zmq8AA6uhW/LRg+0/365OZOZaVqNqvx2eKt3MZKHLN+29jd5Uw==", + "version": "1.171.38", + "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.171.38.tgz", + "integrity": "sha512-XRZVxiO6BIexICmEo3XfPmpoyyLhbjgaMJsONz4gIf5oYys0UiaG1BJGRyj9x8QZPDZcBhvAMuTYN70wSxV0gA==", "license": "MIT", "dependencies": { - "@tanstack/history": "1.133.28", - "@tanstack/store": "^0.8.0", - "cookie-es": "^2.0.0", - "seroval": "^1.3.2", - "seroval-plugins": "^1.3.2", - "tiny-invariant": "^1.3.3", - "tiny-warning": "^1.0.3" + "@tanstack/history": "1.162.5", + "cookie-es": "^3.0.0", + "seroval": "^1.6.7", + "seroval-plugins": "^1.6.7" }, "engines": { - "node": ">=12" + "node": ">=20.19" }, "funding": { "type": "github", @@ -12516,9 +12677,9 @@ } }, "node_modules/@tanstack/store": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@tanstack/store/-/store-0.8.0.tgz", - "integrity": "sha512-Om+BO0YfMZe//X2z0uLF2j+75nQga6TpTJgLJQBiq85aOyZNIhkCgleNcud2KQg4k4v9Y9l+Uhru3qWMPGTOzQ==", + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/@tanstack/store/-/store-0.11.2.tgz", + "integrity": "sha512-sJ4mjol8uQsHV0gOJzzjwXfh2Fwm+Sz0+8deqiTm4jGbMdjzNSW+xZCFm0kUa870uhd8yi+DpKnZb5Kc4apa0Q==", "license": "MIT", "funding": { "type": "github", @@ -12694,9 +12855,20 @@ "dependencies": { "@terrazzo/token-tools": "^2.9.0" }, + "npmExtensionApplied": { + "extensionPoint": "transformManifest", + "peerDependenciesMeta": [ + "@terrazzo/cli" + ] + }, "peerDependencies": { "@terrazzo/cli": "^2.9.0", "@terrazzo/parser": "^2.9.0" + }, + "peerDependenciesMeta": { + "@terrazzo/cli": { + "optional": true + } } }, "node_modules/@terrazzo/token-tools": { @@ -15979,7 +16151,7 @@ "@y/protocols": "^1.0.6-1", "lib0": "^0.2.102", "ws": "^6.2.1", - "yjs": "^14.0.0-7" + "yjs": "npm:@y/y@^14.0.0-rc.7" }, "bin": { "y-websocket": "src/server.js", @@ -15992,6 +16164,12 @@ "funding": { "type": "GitHub Sponsors ❤", "url": "https://github.com/sponsors/dmonad" + }, + "npmExtensionApplied": { + "dependencies": [ + "yjs" + ], + "extensionPoint": "transformManifest" } }, "node_modules/@y/websocket-server/node_modules/ws": { @@ -18734,9 +18912,24 @@ "@radix-ui/react-id": "^1.1.0", "@radix-ui/react-primitive": "^2.0.2" }, + "npmExtensionApplied": { + "extensionPoint": "transformManifest", + "peerDependencies": [ + "@types/react" + ], + "peerDependenciesMeta": [ + "@types/react" + ] + }, "peerDependencies": { + "@types/react": "*", "react": "^18 || ^19 || ^19.0.0-rc", "react-dom": "^18 || ^19 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/collapse-white-space": { @@ -19228,9 +19421,9 @@ } }, "node_modules/cookie-es": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-2.0.0.tgz", - "integrity": "sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-3.1.1.tgz", + "integrity": "sha512-UaXxwISYJPTr9hwQxMFYZ7kNhSXboMXP+Z3TRX6f1/NyaGPfuNUZOWP1pUEb75B2HjfklIYLVRfWiFZJyC6Npg==", "license": "MIT" }, "node_modules/cookie-signature": { @@ -21564,6 +21757,55 @@ } } }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz", + "integrity": "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==", + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.16.1", + "resolve": "^2.0.0-next.6" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/eslint-import-resolver-node/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==", + "license": "MIT", + "dependencies": { + "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": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/eslint-import-resolver-typescript": { "version": "4.4.4", "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.4.4.tgz", @@ -21659,8 +21901,14 @@ "engines": { "node": ">=4" }, + "npmExtensionApplied": { + "extensionPoint": "transformManifest", + "peerDependencies": [ + "eslint" + ] + }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 || ^10" } }, "node_modules/eslint-plugin-import/node_modules/debug": { @@ -21672,16 +21920,6 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-import/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==", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, "node_modules/eslint-plugin-import/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -21831,8 +22069,14 @@ "engines": { "node": ">=4.0" }, + "npmExtensionApplied": { + "extensionPoint": "transformManifest", + "peerDependencies": [ + "eslint" + ] + }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 || ^10" } }, "node_modules/eslint-plugin-prettier": { @@ -21893,8 +22137,14 @@ "engines": { "node": ">=4" }, + "npmExtensionApplied": { + "extensionPoint": "transformManifest", + "peerDependencies": [ + "eslint" + ] + }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 || ^10" } }, "node_modules/eslint-plugin-react-hooks": { @@ -23327,8 +23577,18 @@ "motion-utils": "^11.18.1", "tslib": "^2.4.0" }, + "npmExtensionApplied": { + "extensionPoint": "transformManifest", + "peerDependencies": [ + "@types/react" + ], + "peerDependenciesMeta": [ + "@types/react" + ] + }, "peerDependencies": { "@emotion/is-prop-valid": "*", + "@types/react": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, @@ -23336,6 +23596,9 @@ "@emotion/is-prop-valid": { "optional": true }, + "@types/react": { + "optional": true + }, "react": { "optional": true }, @@ -27040,7 +27303,7 @@ "ini": "^7.0.0", "init-package-json": "9.0.0", "inquirer": "14.2.2", - "js-yaml": "5.4.2", + "js-yaml": "^4.3.2", "libnpmaccess": "11.0.0", "libnpmpublish": "12.0.1", "load-json-file": "7.0.1", @@ -27052,7 +27315,7 @@ "nx": ">=23.1.0 < 24.0.0", "p-map": "7.0.8", "p-queue": "9.3.3", - "pacote": "22.0.0", + "pacote": "^21.5.1", "semver": "7.8.5", "signal-exit": "4.1.0", "ssri": "14.0.0", @@ -27068,6 +27331,13 @@ }, "engines": { "node": "^22.22.2 || ^24.15.0 || ^26.0.0" + }, + "npmExtensionApplied": { + "dependencies": [ + "js-yaml", + "pacote" + ], + "extensionPoint": "transformManifest" } }, "node_modules/lerna/node_modules/@npmcli/agent": { @@ -27166,90 +27436,6 @@ "node": "^22.22.2 || ^24.15.0 || >=26.0.0" } }, - "node_modules/lerna/node_modules/@sigstore/bundle": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-5.0.0.tgz", - "integrity": "sha512-wefjygudENbzbQMks1t5u34EP0fFoD0XvaEP7DOUP/sXKvogzEJYFw5E6pegGyp3onGWzVEYKVa3bNZWyTYX+A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.5.0" - }, - "engines": { - "node": "^22.22.2 || ^24.15.0 || >=26.0.0" - } - }, - "node_modules/lerna/node_modules/@sigstore/core": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-4.0.1.tgz", - "integrity": "sha512-9v5hRjujn5NXq8o7XFEUgLyAtdr5Iisb4pzM05u3K61IS5q3hP3luWAndk0RkPPLTUFoTbg7Vb84UQ1ZQeajWQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^22.22.2 || ^24.15.0 || >=26.0.0" - } - }, - "node_modules/lerna/node_modules/@sigstore/sign": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-5.0.0.tgz", - "integrity": "sha512-DSFivqz9/i5AkwZ5fq0YdjaJlc4o1WeS2Zffon0kqtChx0vy4W9NOjkEet9bF2vkzOufX72eVH8kZBIGtcBp1w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@gar/promise-retry": "^1.0.2", - "@sigstore/bundle": "^5.0.0", - "@sigstore/core": "^4.0.0", - "@sigstore/protobuf-specs": "^0.5.0", - "make-fetch-happen": "^16.0.0", - "proc-log": "^7.0.0" - }, - "engines": { - "node": "^22.22.2 || ^24.15.0 || >=26.0.0" - } - }, - "node_modules/lerna/node_modules/@sigstore/tuf": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-5.0.0.tgz", - "integrity": "sha512-Zyqg9tcHps3uRAlKHLNmsW4ohsUZAjb9G+31r7lg0ICh/JOcadzmJsIRdjKljlRHpaR0K4aJ2kXXIdywdcdMlA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.5.0", - "tuf-js": "^6.0.0" - }, - "engines": { - "node": "^22.22.2 || ^24.15.0 || >=26.0.0" - } - }, - "node_modules/lerna/node_modules/@sigstore/verify": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-4.1.2.tgz", - "integrity": "sha512-BfD9eLrz3A/DG58aSgfgZYmIR6V9Yw96QVN/frtu2bEH7ctSTk2TDvHU12un3JsDPBTqTNkqkIkucjxljpOFqQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^5.0.0", - "@sigstore/core": "^4.0.1", - "@sigstore/protobuf-specs": "^0.5.0" - }, - "engines": { - "node": "^22.22.2 || ^24.15.0 || >=26.0.0" - } - }, - "node_modules/lerna/node_modules/@tufjs/models": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-5.0.0.tgz", - "integrity": "sha512-U4mVcdFGOi6pt8n38LdWZp67Svn7ppnU1Pj8SGOVaBi1X4gm+G4ztQlLfkoJbKSHfjA6WeaiJp2A4V83AJF6nQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^10.2.1" - }, - "engines": { - "node": "^22.22.2 || ^24.15.0 || >=26.0.0" - } - }, "node_modules/lerna/node_modules/agent-base": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-9.0.0.tgz", @@ -27412,29 +27598,6 @@ } } }, - "node_modules/lerna/node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", - "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/puzrin" - }, - { - "type": "github", - "url": "https://github.com/sponsors/nodeca" - } - ], - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/lerna/node_modules/emoji-regex": { "version": "10.6.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", @@ -27486,9 +27649,9 @@ } }, "node_modules/lerna/node_modules/fs-extra": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", - "integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==", + "version": "11.4.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.1.tgz", + "integrity": "sha512-KYAb4c9BJQI6QqGKthV68OHe0badztdXJWKo0WtBA9IuCFPTKvE5ZdUBglP833aMjhaSPNO4A5j/EkzZtGlKjA==", "dev": true, "license": "MIT", "dependencies": { @@ -27679,9 +27842,9 @@ } }, "node_modules/lerna/node_modules/js-yaml": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.4.2.tgz", - "integrity": "sha512-m+aqu+LwO1O6sIopafj8HUVl5aawITwZQe/yHpMCKjaWBaA/d07B/QdMb3529REftiU+RMMHL3Vlsw3hON7vWg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", "dev": true, "funding": [ { @@ -27698,7 +27861,7 @@ "argparse": "^2.0.1" }, "bin": { - "js-yaml": "bin/js-yaml.mjs" + "js-yaml": "bin/js-yaml.js" } }, "node_modules/lerna/node_modules/json-parse-even-better-errors": { @@ -27928,38 +28091,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lerna/node_modules/pacote": { - "version": "22.0.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-22.0.0.tgz", - "integrity": "sha512-++VqeOZeL03uGM2MFLk96jGCSt1owBGkyFKoPr+trwNlZhCpjN2RrvwYxt8nTbs1wNMqSFYurq0TafVWkAIHig==", - "dev": true, - "license": "ISC", - "dependencies": { - "@gar/promise-retry": "^1.0.0", - "@npmcli/git": "^8.0.0", - "@npmcli/installed-package-contents": "^5.0.0", - "@npmcli/package-json": "^8.0.0", - "@npmcli/promise-spawn": "^10.0.0", - "@npmcli/run-script": "^11.0.0", - "cacache": "^21.0.1", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^14.0.0", - "npm-packlist": "^11.2.0", - "npm-pick-manifest": "^12.0.0", - "npm-registry-fetch": "^20.0.1", - "proc-log": "^7.0.0", - "sigstore": "^5.0.0", - "ssri": "^14.0.0", - "tar": "^7.4.3" - }, - "bin": { - "pacote": "bin/index.js" - }, - "engines": { - "node": "^22.22.2 || ^24.15.0 || >=26.0.0" - } - }, "node_modules/lerna/node_modules/path-key": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", @@ -28013,24 +28144,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/lerna/node_modules/sigstore": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-5.0.0.tgz", - "integrity": "sha512-hJqJfoG/e4qFQaauQL00c6J6FrHLBGKtkFvW3JbTSIEFOhLrSjdSM/gWd/yUOfYo/gsERehTXGC1VZWX+9X4Dg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^5.0.0", - "@sigstore/core": "^4.0.0", - "@sigstore/protobuf-specs": "^0.5.0", - "@sigstore/sign": "^5.0.0", - "@sigstore/tuf": "^5.0.0", - "@sigstore/verify": "^4.0.0" - }, - "engines": { - "node": "^22.22.2 || ^24.15.0 || >=26.0.0" - } - }, "node_modules/lerna/node_modules/socks-proxy-agent": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-10.1.0.tgz", @@ -28116,25 +28229,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lerna/node_modules/tuf-js": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-6.0.0.tgz", - "integrity": "sha512-zlJVOIO68hmgo1//X4ENEcTGfuOTAtDPi8PsTsG+FyxD85E/ww1ZnwBbWo/yCEExGpI+Kilg7Z3qCdHX2BoJTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@gar/promise-retry": "^1.0.3", - "@tufjs/models": "5.0.0", - "debug": "^4.4.3" - }, - "engines": { - "node": "^22.22.2 || ^24.15.0 || >=26.0.0" - } - }, "node_modules/lerna/node_modules/undici": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-8.11.2.tgz", - "integrity": "sha512-u4UB2/IrKdU6lFxumHmmo1a3fCQO5tzQllRorfoRS63txhrB7xTpSn1PftwC4qEHkOaqP95fCWW4lJzwErwzhQ==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-8.12.2.tgz", + "integrity": "sha512-XtuDWVdqTLr3NAxm2ly9/hU6kUsJOgGh1RASzMBbsw6aWCOaQzHdW+QQDfdERjfJ2V5vL5pRPa4RetO9UfivDg==", "dev": true, "license": "MIT", "engines": { @@ -36174,9 +36272,24 @@ "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-6.11.2.tgz", "integrity": "sha512-2xI2P3OHs5qw7K0Ud1aLILK6MQxW50TcO+DetD9eIV58j84TqYeHoZcL9H4GXFXXIh7afhH8mv5iUCXII7OW7A==", "license": "MIT", + "npmExtensionApplied": { + "extensionPoint": "transformManifest", + "peerDependencies": [ + "@types/react" + ], + "peerDependenciesMeta": [ + "@types/react" + ] + }, "peerDependencies": { + "@types/react": "*", "react": "^16.13.1 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/react": { @@ -36193,9 +36306,24 @@ "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.8.1.tgz", "integrity": "sha512-oz68bhsnFWnpDf1ZR8daiQbYpXUnM2h2J6hl9Zg2rTpM/DU6vCqe1E+CpqmqLnJucMZetHZeifSAfJ+geN9lcA==", "license": "MIT", + "npmExtensionApplied": { + "extensionPoint": "transformManifest", + "peerDependencies": [ + "@types/react" + ], + "peerDependenciesMeta": [ + "@types/react" + ] + }, "peerDependencies": { + "@types/react": "*", "react": ">=16.8.0", "react-dom": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/react-docgen": { @@ -36275,17 +36403,32 @@ "license": "MIT" }, "node_modules/react-easy-crop": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/react-easy-crop/-/react-easy-crop-5.5.3.tgz", - "integrity": "sha512-iKwFTnAsq+IVuyF6N0Q3zjRx9DG1NMySkwWxVfM/xAOeHYH1vhvM+V2kFiq5HOIQGWouITjfltCx54mbDpMpmA==", + "version": "5.5.7", + "resolved": "https://registry.npmjs.org/react-easy-crop/-/react-easy-crop-5.5.7.tgz", + "integrity": "sha512-kYo4NtMeXFQB7h1U+h5yhUkE46WQbQdq7if54uDlbMdZHdRgNehfvaFrXnFw5NR1PNoUOJIfTwLnWmEx/MaZnA==", "license": "MIT", "dependencies": { "normalize-wheel": "^1.0.1", "tslib": "^2.0.1" }, + "npmExtensionApplied": { + "extensionPoint": "transformManifest", + "peerDependencies": [ + "@types/react" + ], + "peerDependenciesMeta": [ + "@types/react" + ] + }, "peerDependencies": { + "@types/react": "*", "react": ">=16.4.0", "react-dom": ">=16.4.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/react-is": { @@ -37956,18 +38099,18 @@ } }, "node_modules/seroval": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.6.8.tgz", - "integrity": "sha512-HlSgSAkTk4EqHcje1ptJjfZi1YDv5KbhVJ/d3P7T/nAXua2VmDu+AKDX5VTdFfZf48nDkWB2TKYt0DrCSa+3wg==", + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.6.11.tgz", + "integrity": "sha512-hpb6XnMCGN/A+79Uf8V7/iTGkyyyazNn5X0CoCAp7Uy9vT3RT8jZ9GLcnxGoVjg3P8AArbe4ZVHq6C8oT2a0kA==", "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/seroval-plugins": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.3.3.tgz", - "integrity": "sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==", + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.6.11.tgz", + "integrity": "sha512-LmB3nd8pL39jKHKvnpTUjcjBtNwR8MLty/ydAR8qbfXt5j6/6KqR1atuw8cVmD2/lDxAkvAwq5tI/HsisD9Fqg==", "license": "MIT", "engines": { "node": ">=10" @@ -40546,13 +40689,8 @@ "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", - "license": "MIT" + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "dev": true }, "node_modules/tinybench": { "version": "6.1.4", diff --git a/package.json b/package.json index 186fb218a20d2d..c114743cf2c78b 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ }, "engines": { "node": ">=24.18.0", - "npm": ">=11.18.0" + "npm": ">=12.2.0" }, "devEngines": { "runtime": { @@ -25,7 +25,7 @@ }, "packageManager": { "name": "npm", - "version": ">=11.18.0", + "version": ">=12.2.0", "onFail": "error" } }, @@ -83,8 +83,6 @@ }, "devDependencies": { "@playwright/test": "^1.63.0", - "@types/react": "^19.3.0", - "@types/react-dom": "^19.3.0", "@wordpress/env": "file:./packages/env", "@wordpress/eslint-tools": "file:./tools/eslint", "@wordpress/monorepo-tools": "file:./tools/monorepo", @@ -102,20 +100,6 @@ "syncpack": "^15.3.1", "wait-on": "^8.0.1" }, - "overrides": { - "@y/websocket-server": { - "yjs": "npm:@y/y@^14.0.0-rc.7" - }, - "eslint-plugin-import": { - "eslint": "^10.0.0" - }, - "eslint-plugin-jsx-a11y": { - "eslint": "^10.0.0" - }, - "eslint-plugin-react": { - "eslint": "^10.0.0" - } - }, "scripts": { "agents:setup": "npm run --workspace @wordpress/agent-tools setup --", "build": "npm run --workspace @wordpress/build-scripts build:all --", @@ -167,7 +151,7 @@ "other:cherry-pick": "npm run --workspace @wordpress/release-tools cherry-pick --", "other:generate-php-sync-issue": "npm run --workspace @wordpress/release-tools generate-php-sync-issue --", "other:update-packages:php": "wp-env run --env-cwd='wp-content/plugins/gutenberg' cli composer update --no-interaction", - "postinstall": "npm run agents:setup -- --if-safe", + "postinstall": "npm run --workspace @wordpress/icons build && npm run agents:setup -- --if-safe", "prepare": "husky install", "prepublishOnly": "npm run build", "rtc:http": "node ./test/e2e/bin/rtc-dev.mjs --mode=http",