From cf47bdba3c50a42ff3f02765b60d9dd4813b204e Mon Sep 17 00:00:00 2001 From: bcotrim Date: Fri, 23 Jan 2026 19:21:18 +0000 Subject: [PATCH 1/9] Remove enableMultisite from unsupported blueprint features --- common/lib/blueprint-validation.ts | 5 ----- common/lib/tests/blueprint-validation.test.ts | 4 ---- 2 files changed, 9 deletions(-) diff --git a/common/lib/blueprint-validation.ts b/common/lib/blueprint-validation.ts index 50e91b0858..a8387b8de6 100644 --- a/common/lib/blueprint-validation.ts +++ b/common/lib/blueprint-validation.ts @@ -11,11 +11,6 @@ interface UnsupportedFeature { * List of blueprint features that are not supported in Studio */ const UNSUPPORTED_BLUEPRINT_FEATURES: UnsupportedFeature[] = [ - { - type: 'step', - name: 'enableMultisite', - reason: __( 'Multisite functionality is not currently supported in Studio.' ), - }, { type: 'step', name: 'login', diff --git a/common/lib/tests/blueprint-validation.test.ts b/common/lib/tests/blueprint-validation.test.ts index 6b2a84abbf..cfd1c6bb9d 100644 --- a/common/lib/tests/blueprint-validation.test.ts +++ b/common/lib/tests/blueprint-validation.test.ts @@ -70,9 +70,6 @@ describe( 'validateBlueprintData', () => { step: 'login', username: 'admin', }, - { - step: 'enableMultisite', - }, ], }; @@ -83,7 +80,6 @@ describe( 'validateBlueprintData', () => { expect( result.warnings.length ).toBeGreaterThan( 0 ); expect( result.warnings.map( ( w ) => w.feature ) ).toContain( 'landingPage' ); expect( result.warnings.map( ( w ) => w.feature ) ).toContain( 'login' ); - expect( result.warnings.map( ( w ) => w.feature ) ).toContain( 'enableMultisite' ); } } ); } ); From 531b085f882492ec47bb33baf5227098fd66ee80 Mon Sep 17 00:00:00 2001 From: bcotrim Date: Wed, 18 Feb 2026 17:17:21 +0000 Subject: [PATCH 2/9] Bump @wp-playground packages to 3.0.54 --- cli/package-lock.json | 401 ++++++++--------- cli/package.json | 10 +- ... => @wp-playground+wordpress+3.0.54.patch} | 0 package-lock.json | 402 ++++++++++-------- package.json | 2 +- ... => @wp-playground+wordpress+3.0.54.patch} | 0 6 files changed, 422 insertions(+), 393 deletions(-) rename cli/patches/{@wp-playground+wordpress+3.0.53.patch => @wp-playground+wordpress+3.0.54.patch} (100%) rename patches/{@wp-playground+wordpress+3.0.53.patch => @wp-playground+wordpress+3.0.54.patch} (100%) diff --git a/cli/package-lock.json b/cli/package-lock.json index 61f50f9672..1ddef0075e 100644 --- a/cli/package-lock.json +++ b/cli/package-lock.json @@ -9,11 +9,11 @@ "hasInstallScript": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "^3.0.53", - "@wp-playground/blueprints": "^3.0.53", - "@wp-playground/cli": "^3.0.53", - "@wp-playground/common": "^3.0.53", - "@wp-playground/storage": "^3.0.53", + "@php-wasm/universal": "^3.0.54", + "@wp-playground/blueprints": "^3.0.54", + "@wp-playground/cli": "^3.0.54", + "@wp-playground/common": "^3.0.54", + "@wp-playground/storage": "^3.0.54", "http-proxy": "^1.18.1", "pm2": "^6.0.14", "pm2-axon": "^4.0.1", @@ -242,6 +242,7 @@ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.2.tgz", "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", "license": "MIT", + "peer": true, "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", @@ -795,12 +796,12 @@ "license": "0BSD" }, "node_modules/@php-wasm/cli-util": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/cli-util/-/cli-util-3.0.53.tgz", - "integrity": "sha512-bNkO0nQibgh212cyYDbdz2JhmUdFWzLRsA8zVPCSvcp3ypSF2EqZ4af10gwAFOPQR5i6ibcBYDwK0Na8NhJbcA==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/cli-util/-/cli-util-3.0.54.tgz", + "integrity": "sha512-GOFQcompl9rouGpeI67yPL14mn6fGBPTqxklbMBwAcJt+QZzQp/Xb7p0Hz5iozwY/vvJxpFD0BPVID784vz/CA==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/util": "3.0.53", + "@php-wasm/util": "3.0.54", "fast-xml-parser": "^5.3.4", "jsonc-parser": "3.3.1" }, @@ -813,15 +814,15 @@ } }, "node_modules/@php-wasm/fs-journal": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/fs-journal/-/fs-journal-3.0.53.tgz", - "integrity": "sha512-C72IMsCOq6q87O0jqe98zhJJ3mATn95qHhxAsEW7VDSJY2jC1IYKsHSuRdEocrjDZBsbemnWK/K5ew2epgHDFQ==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/fs-journal/-/fs-journal-3.0.54.tgz", + "integrity": "sha512-HySuOXbg4OYnTzAYNiJGH+6TV0HkrpN/AbVWSdrV1VbZnM+jIys+CeyWNiqtP9osHPx34EPJVc1dhA3ObblvrQ==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.0.53", - "@php-wasm/node": "3.0.53", - "@php-wasm/universal": "3.0.53", - "@php-wasm/util": "3.0.53", + "@php-wasm/logger": "3.0.54", + "@php-wasm/node": "3.0.54", + "@php-wasm/universal": "3.0.54", + "@php-wasm/util": "3.0.54", "express": "4.22.0", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", @@ -867,12 +868,12 @@ } }, "node_modules/@php-wasm/logger": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.0.53.tgz", - "integrity": "sha512-C5P5QGsiKEMtIvU4wesIEjri/3P46Ct5l3iS9mNaPMVVm0DMst3P2E2llsvf6r5V1uCzzzEI5y9Z9w3v6OYVpg==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.0.54.tgz", + "integrity": "sha512-wfSVVqvHcaYlm37hd1k1zr2X81vG/MTdNO0MZ3XFIhmdgnQiCYElhIKmLDE24StxZbigqcROJV5faB/LnJ98GQ==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/node-polyfills": "3.0.53" + "@php-wasm/node-polyfills": "3.0.54" }, "engines": { "node": ">=20.10.0", @@ -883,23 +884,23 @@ } }, "node_modules/@php-wasm/node": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/node/-/node-3.0.53.tgz", - "integrity": "sha512-Ltb9eXDXTnufus/1G6lUhZXfttQIdJytnjaz9P9CanrQndlmpwW35HmrBjVgC6Ry0ECQEwpvHnyQp6tdpwiUKg==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/node/-/node-3.0.54.tgz", + "integrity": "sha512-106hYIPwPpQ+7bUXFM6ZBVs/LNKM2IiByi63Luu9krckkyiLYxjXJOV5NHxyvZMzlNojrK1y8l62DDvQEl1eYw==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.0.53", - "@php-wasm/node-7-4": "3.0.53", - "@php-wasm/node-8-0": "3.0.53", - "@php-wasm/node-8-1": "3.0.53", - "@php-wasm/node-8-2": "3.0.53", - "@php-wasm/node-8-3": "3.0.53", - "@php-wasm/node-8-4": "3.0.53", - "@php-wasm/node-8-5": "3.0.53", - "@php-wasm/node-polyfills": "3.0.53", - "@php-wasm/universal": "3.0.53", - "@php-wasm/util": "3.0.53", - "@wp-playground/common": "3.0.53", + "@php-wasm/logger": "3.0.54", + "@php-wasm/node-7-4": "3.0.54", + "@php-wasm/node-8-0": "3.0.54", + "@php-wasm/node-8-1": "3.0.54", + "@php-wasm/node-8-2": "3.0.54", + "@php-wasm/node-8-3": "3.0.54", + "@php-wasm/node-8-4": "3.0.54", + "@php-wasm/node-8-5": "3.0.54", + "@php-wasm/node-polyfills": "3.0.54", + "@php-wasm/universal": "3.0.54", + "@php-wasm/util": "3.0.54", + "@wp-playground/common": "3.0.54", "express": "4.22.0", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", @@ -915,12 +916,12 @@ } }, "node_modules/@php-wasm/node-7-4": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/node-7-4/-/node-7-4-3.0.53.tgz", - "integrity": "sha512-yzGtmeopGwJnGlqqWNRR4iJzEoK8NlwpsuMEMu7WfRWnD12QTwOAu4q9mHLg9t597jEMl2ht/oBdrmF3XrFeHQ==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/node-7-4/-/node-7-4-3.0.54.tgz", + "integrity": "sha512-Ab/F/11FuJVSea8ruY9ITB4crTXZhPL2nQi9J2jWAqmky8YhjN5ecBrIo56f71CKxlFdLV+pYJ6hAmA+TYqgiA==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -964,12 +965,12 @@ } }, "node_modules/@php-wasm/node-8-0": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-0/-/node-8-0-3.0.53.tgz", - "integrity": "sha512-sJkzqEjFQNc6njsx3kyLmcXfVnnxYjXH5/Ye9/zL5Hv2WaQR2uNf+axO84ZtOz9EIlP34aMc13EK/FctcLs0VQ==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-0/-/node-8-0-3.0.54.tgz", + "integrity": "sha512-OkD5YqYP9aKQVJfYq9uh+ZvGX84Ch/opl4FhmFHoLY129QggxeqhHz7HqBJpZhDLFRwGBMo5nv6gPIEM3EiGzw==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -1013,12 +1014,12 @@ } }, "node_modules/@php-wasm/node-8-1": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-1/-/node-8-1-3.0.53.tgz", - "integrity": "sha512-dtis9B33pCdC/6u0TZ+axMwh9jKc/ZcDw8NDUImTTmAWOvg7xslNKn6wM65UwdDQX+zcBwjQxB2Tsu2NY4KZAQ==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-1/-/node-8-1-3.0.54.tgz", + "integrity": "sha512-yEM3AbqHpPYUgSaAtK5Fw9seqF6efwj4q6656smZOorBjsazU2a455ACKeL6MZjz2KGZ0kUUIhbW0yZW8AK0rw==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -1062,12 +1063,12 @@ } }, "node_modules/@php-wasm/node-8-2": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-2/-/node-8-2-3.0.53.tgz", - "integrity": "sha512-YObMvLRlKXMuEeQa/XwIvxynuJ8w099CaUUxiYWqgT4C5K2WXTQnuRPN77vo91PNhsuccUE+6Q2QxW5pIMyv3g==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-2/-/node-8-2-3.0.54.tgz", + "integrity": "sha512-FtIxMoVR5p6RHNd/RN9ZopO+VstI4oVTQ6DKniQsxAWThzKaeng7S/wEviw4TvIUYHSDyq9b4dEUheAB4+xkPQ==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -1111,12 +1112,12 @@ } }, "node_modules/@php-wasm/node-8-3": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-3/-/node-8-3-3.0.53.tgz", - "integrity": "sha512-yl0sLsCA9OgvXQ6cfMzF8ZrcVFYkbQ7mB/s4VChs1xd2zQJd5JuGBueZOymB+5cNCzFx9rUXvulMCIeiuDIeHg==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-3/-/node-8-3-3.0.54.tgz", + "integrity": "sha512-BYuCQ/S33infILnfQaYJkmFBnEtUKOEehEbuD9fD92IayfR6YpHMMdxA/loqLXNcCp3j00e7RSBE6j/x0b+0eA==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -1160,12 +1161,12 @@ } }, "node_modules/@php-wasm/node-8-4": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-4/-/node-8-4-3.0.53.tgz", - "integrity": "sha512-4NvSdCaRrc59wm/xs5jkTeFPp5rma3+gHDRq8EiWTEfUc3wMSo5VUOAW160u+7NwdxXBY1pMIIlNwo6WMNm9zg==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-4/-/node-8-4-3.0.54.tgz", + "integrity": "sha512-jZyOu9Dkr4xRfdfRB6MhRoEjbhirdvXZPnNN6uk7YlQlx8u+85d4VO+48HADjKQsbcBNk0jh7tyl1thnxPa61g==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -1209,12 +1210,12 @@ } }, "node_modules/@php-wasm/node-8-5": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-5/-/node-8-5-3.0.53.tgz", - "integrity": "sha512-OyZZt45TfYSpnuoe2XmKAGkz8brMtqk5V2MwoKPH43ypZpFdDf34f+WM+vg86N4o+PCgS3pLbSDcGhUZ85eSXg==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-5/-/node-8-5-3.0.54.tgz", + "integrity": "sha512-W7i5e9M11uijNsgOb+g8JEjyBI2vIU2iqmJaNe1yL66AMabe00cOALo8ItAe+cLHGmSnxQZwDvZ9o4wPmP6t+A==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -1258,9 +1259,9 @@ } }, "node_modules/@php-wasm/node-polyfills": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/node-polyfills/-/node-polyfills-3.0.53.tgz", - "integrity": "sha512-v3glfXVIygMjp3qEfpUhzj+l1r7/3A4QobYfdSQzwo4nLgvUXDW8HZBX+2sn1GnMHQjpVe9Nv4Sq8935p3/JOQ==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/node-polyfills/-/node-polyfills-3.0.54.tgz", + "integrity": "sha512-WyhBRGDfQOqLrRKhkqzzaiFiBHUv+zAvAkrFCmiBZTMTjhiFyvKaiIuy5ZFN4jUSbg8q96Py+jj8Y7XnR2oaZQ==", "license": "GPL-2.0-or-later", "optionalDependencies": { "fs-ext": "2.1.1" @@ -1297,13 +1298,13 @@ } }, "node_modules/@php-wasm/progress": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-3.0.53.tgz", - "integrity": "sha512-By8lMblZICGjceh+LXUhhYfl0eYUeFTeflgCpFMMootRHWjqJqAJnLzgHSVb2AXTpT4US1cYBrpF8j5w89alxw==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-3.0.54.tgz", + "integrity": "sha512-J18cvpHY6AcKU+WEzOJJ0TZSf+Kk5dz/u1BJyvkbnpCcPxUHqyHFGlzXmzb/rck7rE08f6D2xqyDDroPc/Mjpw==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.0.53", - "@php-wasm/node-polyfills": "3.0.53" + "@php-wasm/logger": "3.0.54", + "@php-wasm/node-polyfills": "3.0.54" }, "engines": { "node": ">=20.10.0", @@ -1314,9 +1315,9 @@ } }, "node_modules/@php-wasm/scopes": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/scopes/-/scopes-3.0.53.tgz", - "integrity": "sha512-79BKT9pSTOdzS0L55trKmattArttM5sUMHrNaXY/aCv9IJdUhsyrlJPNqY6/x/WNuliUfD5ZwE4pAnUWsHyh9w==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/scopes/-/scopes-3.0.54.tgz", + "integrity": "sha512-+bixG5LCUECZFplAqLDerBWsZF/Fjte8k1o0RXXfl68PjQWIokxiDdvWd37/y89HtpNZefYBPxFkFVlQmhBUfg==", "license": "GPL-2.0-or-later", "engines": { "node": ">=20.10.0", @@ -1327,29 +1328,29 @@ } }, "node_modules/@php-wasm/stream-compression": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-3.0.53.tgz", - "integrity": "sha512-mmzGg2GEHKFbEzNn81jku6VkPjmdblKOmlbqsSUabg1BjDUqEKrl9do6XbZLOPlkH7PlLIUf94vrNaOKX+b26A==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-3.0.54.tgz", + "integrity": "sha512-lG6XKXYpLzjRh7lSKJtLeW6vTLMQaXcarRHcCSKAvvu6352Kb0TJjakFJcPgk9z50PP5wZGC7nPzZnqEtwAexw==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/node-polyfills": "3.0.53", - "@php-wasm/util": "3.0.53" + "@php-wasm/node-polyfills": "3.0.54", + "@php-wasm/util": "3.0.54" }, "optionalDependencies": { "fs-ext": "2.1.1" } }, "node_modules/@php-wasm/universal": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-3.0.53.tgz", - "integrity": "sha512-rr7xOcV1UI+qwde3tl3Bbw7J3VmYUgcHtWem6ZjqSJwvoQ0cFzv24QDJg5/rsr1ieS26uFQV8k3lsjGgE2N7DA==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-3.0.54.tgz", + "integrity": "sha512-VD6ez2fqZXUdNTJoZP8HoWJGGHucbgyCx1GKrSs2RuVJDlvKOfU8aP0XONmE6hgNEaXADDn3cUvzJjgpiHenAw==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.0.53", - "@php-wasm/node-polyfills": "3.0.53", - "@php-wasm/progress": "3.0.53", - "@php-wasm/stream-compression": "3.0.53", - "@php-wasm/util": "3.0.53", + "@php-wasm/logger": "3.0.54", + "@php-wasm/node-polyfills": "3.0.54", + "@php-wasm/progress": "3.0.54", + "@php-wasm/stream-compression": "3.0.54", + "@php-wasm/util": "3.0.54", "ini": "4.1.2" }, "engines": { @@ -1370,9 +1371,9 @@ } }, "node_modules/@php-wasm/util": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.0.53.tgz", - "integrity": "sha512-8I4yN/Mjn/ornPOsyFQMMd8vYvHrj7MRnqwg02SJxv2Jul/9AXDR2yl/149cpeY3IH6z4mO1bLjqs46y+mc5mg==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.0.54.tgz", + "integrity": "sha512-iEYg7G3OP+vaQ01FOAVb9pdqecc/FmWn1jYzmMITVUA5i/a+WfaghPJPAzFz4kgy6GhAIuaf349fHqj7cQIicg==", "engines": { "node": ">=20.10.0", "npm": ">=10.2.3" @@ -1382,24 +1383,24 @@ } }, "node_modules/@php-wasm/web": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/web/-/web-3.0.53.tgz", - "integrity": "sha512-PttMu5eZu2TtMwXBC3yYUzUyRk6XYNr5hlHXTSQEGKIud38iNn0mpNFWO5cEC9eFs+yohn5IFLPk31Qax9UekQ==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/web/-/web-3.0.54.tgz", + "integrity": "sha512-GwA92xfx8U1oexStnOC8/jzpLZimGv3rfhuKuR6AfYPXHLP614CfluGNykjpsjC15lESgZSQoy6ICJBi0toMLQ==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/fs-journal": "3.0.53", - "@php-wasm/logger": "3.0.53", - "@php-wasm/universal": "3.0.53", - "@php-wasm/util": "3.0.53", - "@php-wasm/web-7-4": "3.0.53", - "@php-wasm/web-8-0": "3.0.53", - "@php-wasm/web-8-1": "3.0.53", - "@php-wasm/web-8-2": "3.0.53", - "@php-wasm/web-8-3": "3.0.53", - "@php-wasm/web-8-4": "3.0.53", - "@php-wasm/web-8-5": "3.0.53", - "@php-wasm/web-service-worker": "3.0.53", - "@wp-playground/common": "3.0.53", + "@php-wasm/fs-journal": "3.0.54", + "@php-wasm/logger": "3.0.54", + "@php-wasm/universal": "3.0.54", + "@php-wasm/util": "3.0.54", + "@php-wasm/web-7-4": "3.0.54", + "@php-wasm/web-8-0": "3.0.54", + "@php-wasm/web-8-1": "3.0.54", + "@php-wasm/web-8-2": "3.0.54", + "@php-wasm/web-8-3": "3.0.54", + "@php-wasm/web-8-4": "3.0.54", + "@php-wasm/web-8-5": "3.0.54", + "@php-wasm/web-service-worker": "3.0.54", + "@wp-playground/common": "3.0.54", "express": "4.22.0", "ini": "4.1.2", "selfsigned": "5.5.0", @@ -1416,12 +1417,12 @@ } }, "node_modules/@php-wasm/web-7-4": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/web-7-4/-/web-7-4-3.0.53.tgz", - "integrity": "sha512-Dz7eQpz6nYECOElduYVfzKjbWmH4tNDYG6/nJu5f/rW8J3UZVKxNAWG1+L3HSymRcRBZSyHsvZlmus3iCfLmOg==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/web-7-4/-/web-7-4-3.0.54.tgz", + "integrity": "sha512-ZIv8Mq+V3Pu9416hdAA/YgduGEJnyep7AG341STNcg6HFP0u2obynFoijD2itQVTPKk3/9bVNKZcbIYndWTN+Q==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0" }, @@ -1443,12 +1444,12 @@ } }, "node_modules/@php-wasm/web-8-0": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-0/-/web-8-0-3.0.53.tgz", - "integrity": "sha512-nADkojfey1RSXaNdMvjz2sd07ehGo1OATze6c5rUatYVzIeNN3O4ZTjpuvK73Hb8wo6veoyaXuWvGlVuctCp8w==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/web-8-0/-/web-8-0-3.0.54.tgz", + "integrity": "sha512-IpdSTgILcV5OsbVlbajd2OR00H13A8zgYZjNox6k5GjsqfiJXNuDpnw8H/PM+cNSB0FOlrsB74KBAZZUnnj3Sg==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0" }, @@ -1470,12 +1471,12 @@ } }, "node_modules/@php-wasm/web-8-1": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-1/-/web-8-1-3.0.53.tgz", - "integrity": "sha512-AUXdJeVBht5KA/8K9P1sUXdagFNQn1Sr4fkvefrTuD1v3DrekFlgl1ANtxLZApQoGpY+uutOvFIjC3CDyFu+eQ==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/web-8-1/-/web-8-1-3.0.54.tgz", + "integrity": "sha512-Xe7aCpGD8YYXitQ/FRZLgYY6ngrcPYW26D+IIHSN0yZNvOX1TgEQISRuYlQRAfR5J0vHz9TGCOGN8TxxySoabw==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0" }, @@ -1497,12 +1498,12 @@ } }, "node_modules/@php-wasm/web-8-2": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-2/-/web-8-2-3.0.53.tgz", - "integrity": "sha512-kdi4EoTlPCrxq2qZVY8yUVpBFKKrErHnZAOZutmf2Uilcb8ugbtSvUqo3WpopFuww/tygGSnS+mKD7gxtb2g0Q==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/web-8-2/-/web-8-2-3.0.54.tgz", + "integrity": "sha512-sqkeEadm8TScnAFIDIMUxg65TnH2zj40A80CUBZCJDckBYKFL7gsbSXlAmdTrYdscE9wPLFdVU7M46h42qGFNQ==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0" }, @@ -1524,12 +1525,12 @@ } }, "node_modules/@php-wasm/web-8-3": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-3/-/web-8-3-3.0.53.tgz", - "integrity": "sha512-PNwACxaHXSc70aqJGPy4Tizrv65CQ35C1tgKiLMvFx4+ZIokpXWzY1wCYE4nA2M5qIaAgqhSe9LLbnAh8ET5/A==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/web-8-3/-/web-8-3-3.0.54.tgz", + "integrity": "sha512-W/ejSh/9juES7ktYTP5AEWAK/hDNWzaegAuGMTna8jTRw9snhpvBGjAY9adhUaJYO/xa0wz6Fku9EemuAl9CRQ==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0" }, @@ -1551,12 +1552,12 @@ } }, "node_modules/@php-wasm/web-8-4": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-4/-/web-8-4-3.0.53.tgz", - "integrity": "sha512-uqFJTA5X4HQvFgQ/+NSXG7KhH4NSLIh1gEgGv1YKO7BVSv5jqW1fvvBIVzEscrVW5kEYdYQSyPi38L61A98FJg==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/web-8-4/-/web-8-4-3.0.54.tgz", + "integrity": "sha512-vJolOoZyZPRX+rL0zV00+4g4P6JIUoanwzFWznG5iFpx9K7rpOi1PVhSpfOw0UywdYYi4JmuT3/8Z5tJWK88VQ==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0" }, @@ -1578,12 +1579,12 @@ } }, "node_modules/@php-wasm/web-8-5": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-5/-/web-8-5-3.0.53.tgz", - "integrity": "sha512-TenVMrlcVInSn/1C0eXKveuHDK4rUEoe99cwpKSrTimeFZ4GLVuVTUwHrV2GAcfLxsFFNNrUtwbGb+Vt/UuoEA==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/web-8-5/-/web-8-5-3.0.54.tgz", + "integrity": "sha512-EnSc2Zsc5ye0MDlYpQPPK1XHfsCxvowDSkeG116drXRSue9pN/w2r4+wI0vWiKEbch9yGzMDl9DEmn+s+x1BVw==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0" }, @@ -1605,12 +1606,12 @@ } }, "node_modules/@php-wasm/web-service-worker": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/web-service-worker/-/web-service-worker-3.0.53.tgz", - "integrity": "sha512-VbvQB1zSKwIS9JsdaxNgXda0dz30xlhu3lzzTa1rVzHTtIoYL6mjUU31RW/TvNlR6bUb5MzlpsyHf9Q9qbkzoA==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/web-service-worker/-/web-service-worker-3.0.54.tgz", + "integrity": "sha512-ju1PwvKuo/Q2FR6JCSMrfT4mQZtu8i/Y4FN/OuKHGPDvIpOhQt49C3JfKP0bhrYP00sL1zvjWNgkj+yyXgX4zA==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/scopes": "3.0.53" + "@php-wasm/scopes": "3.0.54" }, "engines": { "node": ">=20.10.0", @@ -1651,15 +1652,15 @@ } }, "node_modules/@php-wasm/xdebug-bridge": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/xdebug-bridge/-/xdebug-bridge-3.0.53.tgz", - "integrity": "sha512-XXPqSzUwQuyLKJqDvSsqspIugwKPvdEC7D+GfMLPKcE7WivhsQzwoU0N0g9L8h9eeyqtP4HMqjhkHSb6taNdmg==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/xdebug-bridge/-/xdebug-bridge-3.0.54.tgz", + "integrity": "sha512-VknqVeCe+qj8qOeY5b5n90HgT4Ss+MyO2sQQo5E9LL+b/YESBGI4WJM5kb+aY2v91BgG6eEIslMgJL2Blw+lpw==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.0.53", - "@php-wasm/node": "3.0.53", - "@php-wasm/universal": "3.0.53", - "@wp-playground/common": "3.0.53", + "@php-wasm/logger": "3.0.54", + "@php-wasm/node": "3.0.54", + "@php-wasm/universal": "3.0.54", + "@wp-playground/common": "3.0.54", "express": "4.22.0", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", @@ -2002,22 +2003,22 @@ } }, "node_modules/@wp-playground/blueprints": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@wp-playground/blueprints/-/blueprints-3.0.53.tgz", - "integrity": "sha512-NJKun/0JgVWk0OpptcUh+k6OvMolvF3del0MRZSPg9VwsmdTK3b/Aagk8ytvt3scCGP0PhuhgMf4Ldvp8SUVeg==", - "dependencies": { - "@php-wasm/logger": "3.0.53", - "@php-wasm/node": "3.0.53", - "@php-wasm/node-polyfills": "3.0.53", - "@php-wasm/progress": "3.0.53", - "@php-wasm/scopes": "3.0.53", - "@php-wasm/stream-compression": "3.0.53", - "@php-wasm/universal": "3.0.53", - "@php-wasm/util": "3.0.53", - "@php-wasm/web-service-worker": "3.0.53", - "@wp-playground/common": "3.0.53", - "@wp-playground/storage": "3.0.53", - "@wp-playground/wordpress": "3.0.53", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@wp-playground/blueprints/-/blueprints-3.0.54.tgz", + "integrity": "sha512-VoW5uuXQ6SyCOXTIeZ5aGUvlnXLKXIqxz9ETg3oDxTCAYH1mhGfHeBA0kdsQgu3wbpeI0AEgeWU64nfqxwAjlg==", + "dependencies": { + "@php-wasm/logger": "3.0.54", + "@php-wasm/node": "3.0.54", + "@php-wasm/node-polyfills": "3.0.54", + "@php-wasm/progress": "3.0.54", + "@php-wasm/scopes": "3.0.54", + "@php-wasm/stream-compression": "3.0.54", + "@php-wasm/universal": "3.0.54", + "@php-wasm/util": "3.0.54", + "@php-wasm/web-service-worker": "3.0.54", + "@wp-playground/common": "3.0.54", + "@wp-playground/storage": "3.0.54", + "@wp-playground/wordpress": "3.0.54", "@zip.js/zip.js": "2.7.57", "ajv": "8.12.0", "async-lock": "1.4.1", @@ -2084,23 +2085,23 @@ } }, "node_modules/@wp-playground/cli": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@wp-playground/cli/-/cli-3.0.53.tgz", - "integrity": "sha512-nSpjM9dsYUhvTxE1xb9JhmWThRFS0llW20To+yVypULSo/U/q1pIFSvyqo/U2YmwO95DIDlSn5PXDRlWKi4cNw==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@wp-playground/cli/-/cli-3.0.54.tgz", + "integrity": "sha512-dMdL8a4kEv1QaiI98xhNcBR66y7l+86GfS1fZ6EZ+9GqsDMuTDKGt86+dfVAx0cbqnumjU7txZmLfEqVqChgUQ==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/cli-util": "3.0.53", - "@php-wasm/logger": "3.0.53", - "@php-wasm/node": "3.0.53", - "@php-wasm/progress": "3.0.53", - "@php-wasm/universal": "3.0.53", - "@php-wasm/util": "3.0.53", - "@php-wasm/xdebug-bridge": "3.0.53", - "@wp-playground/blueprints": "3.0.53", - "@wp-playground/common": "3.0.53", - "@wp-playground/storage": "3.0.53", - "@wp-playground/tools": "3.0.53", - "@wp-playground/wordpress": "3.0.53", + "@php-wasm/cli-util": "3.0.54", + "@php-wasm/logger": "3.0.54", + "@php-wasm/node": "3.0.54", + "@php-wasm/progress": "3.0.54", + "@php-wasm/universal": "3.0.54", + "@php-wasm/util": "3.0.54", + "@php-wasm/xdebug-bridge": "3.0.54", + "@wp-playground/blueprints": "3.0.54", + "@wp-playground/common": "3.0.54", + "@wp-playground/storage": "3.0.54", + "@wp-playground/tools": "3.0.54", + "@wp-playground/wordpress": "3.0.54", "@zip.js/zip.js": "2.7.57", "ajv": "8.12.0", "async-lock": "1.4.1", @@ -2172,13 +2173,13 @@ } }, "node_modules/@wp-playground/common": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-3.0.53.tgz", - "integrity": "sha512-3RFBjaV+yJhmXNFTKTvqGJn/x0itK6/E91gJH8sGQz6+zt0uczfNU6Q9jRXWjkjJPyoi/pgcRbYDPjhyublaLA==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-3.0.54.tgz", + "integrity": "sha512-yRslQZjHlSyNA+6IMqJKGQrOVA5XSEZl6YcF5+zDJl3iJBBqD6u9UDPCBxrN/7v42K4dH3zPEbK/grrSgv58vA==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", - "@php-wasm/util": "3.0.53", + "@php-wasm/universal": "3.0.54", + "@php-wasm/util": "3.0.54", "ini": "4.1.2" }, "engines": { @@ -2199,15 +2200,15 @@ } }, "node_modules/@wp-playground/storage": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@wp-playground/storage/-/storage-3.0.53.tgz", - "integrity": "sha512-l/GHn8iP/VzJgImfJ8STCYUpEAac5Uf7h8Wi3wcCD6vuBAqimNYcg67QITNQD6zPI3aiG6l85spmskHOrpx3/w==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@wp-playground/storage/-/storage-3.0.54.tgz", + "integrity": "sha512-glUB2vy6sroUOM/EYP4SEeDbZEkxiedonz3CH2KZJRIqSplA09bgOCJckDavW2bryprMMEzwg7O82Shin2uthg==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/stream-compression": "3.0.53", - "@php-wasm/universal": "3.0.53", - "@php-wasm/util": "3.0.53", - "@php-wasm/web": "3.0.53", + "@php-wasm/stream-compression": "3.0.54", + "@php-wasm/universal": "3.0.54", + "@php-wasm/util": "3.0.54", + "@php-wasm/web": "3.0.54", "@zip.js/zip.js": "2.7.57", "async-lock": "^1.4.1", "clean-git-ref": "^2.0.1", @@ -2284,12 +2285,12 @@ } }, "node_modules/@wp-playground/tools": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@wp-playground/tools/-/tools-3.0.53.tgz", - "integrity": "sha512-JMhIBo0FgyXjPXG26myEh1IbBiEOGrsT/odPZwHj66RC3yMGZIJxtJO33Wd0TOXS7ntx7LNLdfkvZtkaNsnj/g==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@wp-playground/tools/-/tools-3.0.54.tgz", + "integrity": "sha512-raDVAm08/EG9i4QBdE6q/G5LXOuaSXKSCyY7Hnx/mu86d1H8kGfwx0bIrGB/Jkdz2kRwdCt6D6+00zG76GzDhg==", "license": "GPL-2.0-or-later", "dependencies": { - "@wp-playground/blueprints": "3.0.53", + "@wp-playground/blueprints": "3.0.54", "@zip.js/zip.js": "2.7.57", "ajv": "8.12.0", "async-lock": "1.4.1", @@ -2356,16 +2357,16 @@ } }, "node_modules/@wp-playground/wordpress": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-3.0.53.tgz", - "integrity": "sha512-u/EOkx0tQvvVcYjtC33JDrVxNP1CpJX+cbIj4gFNCe17aKlX4VIJOdkAMJd7igidgLOFIEDFil/8cCFlDMQg2A==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-3.0.54.tgz", + "integrity": "sha512-uk+RxyYA64TdGulW3ByBR1U3scPUcI54O5CxfhetLw/DXzOzz5onCQIMBbzx5oTWjqN7Jv1880Tfnv44VdZBkQ==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.0.53", - "@php-wasm/node": "3.0.53", - "@php-wasm/universal": "3.0.53", - "@php-wasm/util": "3.0.53", - "@wp-playground/common": "3.0.53", + "@php-wasm/logger": "3.0.54", + "@php-wasm/node": "3.0.54", + "@php-wasm/universal": "3.0.54", + "@php-wasm/util": "3.0.54", + "@wp-playground/common": "3.0.54", "express": "4.22.0", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", diff --git a/cli/package.json b/cli/package.json index 6ee94bd8f0..0bb257179f 100644 --- a/cli/package.json +++ b/cli/package.json @@ -7,11 +7,11 @@ "license": "GPL-2.0-or-later", "main": "index.js", "dependencies": { - "@php-wasm/universal": "^3.0.53", - "@wp-playground/blueprints": "^3.0.53", - "@wp-playground/cli": "^3.0.53", - "@wp-playground/common": "^3.0.53", - "@wp-playground/storage": "^3.0.53", + "@php-wasm/universal": "^3.0.54", + "@wp-playground/blueprints": "^3.0.54", + "@wp-playground/cli": "^3.0.54", + "@wp-playground/common": "^3.0.54", + "@wp-playground/storage": "^3.0.54", "http-proxy": "^1.18.1", "pm2": "^6.0.14", "pm2-axon": "^4.0.1", diff --git a/cli/patches/@wp-playground+wordpress+3.0.53.patch b/cli/patches/@wp-playground+wordpress+3.0.54.patch similarity index 100% rename from cli/patches/@wp-playground+wordpress+3.0.53.patch rename to cli/patches/@wp-playground+wordpress+3.0.54.patch diff --git a/package-lock.json b/package-lock.json index a80048c37e..21a5dfe2be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -95,7 +95,7 @@ "@wordpress/components": "^32.1.0", "@wordpress/element": "^6.39.0", "@wordpress/react-i18n": "^4.39.0", - "@wp-playground/blueprints": "^3.0.53", + "@wp-playground/blueprints": "^3.0.54", "@yao-pkg/pkg": "^6.3.2", "electron": "^40.4.1", "electron-devtools-installer": "^4.0.0", @@ -428,6 +428,7 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -2154,6 +2155,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -2175,6 +2177,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -3539,6 +3542,7 @@ "node_modules/@emotion/react": { "version": "11.11.3", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.11.0", @@ -4161,6 +4165,7 @@ "node_modules/@inquirer/prompts": { "version": "7.10.1", "license": "MIT", + "peer": true, "dependencies": { "@inquirer/checkbox": "^4.3.2", "@inquirer/confirm": "^5.1.21", @@ -4763,6 +4768,7 @@ "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", @@ -5135,6 +5141,7 @@ "node_modules/@opentelemetry/api": { "version": "1.9.0", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=8.0.0" } @@ -5152,6 +5159,7 @@ "node_modules/@opentelemetry/context-async-hooks": { "version": "1.30.1", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=14" }, @@ -5162,6 +5170,7 @@ "node_modules/@opentelemetry/core": { "version": "1.30.1", "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, @@ -5182,6 +5191,7 @@ "node_modules/@opentelemetry/instrumentation": { "version": "0.57.2", "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", @@ -5537,6 +5547,7 @@ "node_modules/@opentelemetry/resources": { "version": "1.30.1", "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" @@ -5558,6 +5569,7 @@ "node_modules/@opentelemetry/sdk-trace-base": { "version": "1.30.1", "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", @@ -5580,6 +5592,7 @@ "node_modules/@opentelemetry/semantic-conventions": { "version": "1.37.0", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=14" } @@ -5764,16 +5777,16 @@ } }, "node_modules/@php-wasm/fs-journal": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/fs-journal/-/fs-journal-3.0.53.tgz", - "integrity": "sha512-C72IMsCOq6q87O0jqe98zhJJ3mATn95qHhxAsEW7VDSJY2jC1IYKsHSuRdEocrjDZBsbemnWK/K5ew2epgHDFQ==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/fs-journal/-/fs-journal-3.0.54.tgz", + "integrity": "sha512-HySuOXbg4OYnTzAYNiJGH+6TV0HkrpN/AbVWSdrV1VbZnM+jIys+CeyWNiqtP9osHPx34EPJVc1dhA3ObblvrQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.0.53", - "@php-wasm/node": "3.0.53", - "@php-wasm/universal": "3.0.53", - "@php-wasm/util": "3.0.53", + "@php-wasm/logger": "3.0.54", + "@php-wasm/node": "3.0.54", + "@php-wasm/universal": "3.0.54", + "@php-wasm/util": "3.0.54", "express": "4.22.0", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", @@ -5951,13 +5964,13 @@ } }, "node_modules/@php-wasm/logger": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.0.53.tgz", - "integrity": "sha512-C5P5QGsiKEMtIvU4wesIEjri/3P46Ct5l3iS9mNaPMVVm0DMst3P2E2llsvf6r5V1uCzzzEI5y9Z9w3v6OYVpg==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.0.54.tgz", + "integrity": "sha512-wfSVVqvHcaYlm37hd1k1zr2X81vG/MTdNO0MZ3XFIhmdgnQiCYElhIKmLDE24StxZbigqcROJV5faB/LnJ98GQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/node-polyfills": "3.0.53" + "@php-wasm/node-polyfills": "3.0.54" }, "engines": { "node": ">=20.10.0", @@ -5968,24 +5981,24 @@ } }, "node_modules/@php-wasm/node": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/node/-/node-3.0.53.tgz", - "integrity": "sha512-Ltb9eXDXTnufus/1G6lUhZXfttQIdJytnjaz9P9CanrQndlmpwW35HmrBjVgC6Ry0ECQEwpvHnyQp6tdpwiUKg==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/node/-/node-3.0.54.tgz", + "integrity": "sha512-106hYIPwPpQ+7bUXFM6ZBVs/LNKM2IiByi63Luu9krckkyiLYxjXJOV5NHxyvZMzlNojrK1y8l62DDvQEl1eYw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.0.53", - "@php-wasm/node-7-4": "3.0.53", - "@php-wasm/node-8-0": "3.0.53", - "@php-wasm/node-8-1": "3.0.53", - "@php-wasm/node-8-2": "3.0.53", - "@php-wasm/node-8-3": "3.0.53", - "@php-wasm/node-8-4": "3.0.53", - "@php-wasm/node-8-5": "3.0.53", - "@php-wasm/node-polyfills": "3.0.53", - "@php-wasm/universal": "3.0.53", - "@php-wasm/util": "3.0.53", - "@wp-playground/common": "3.0.53", + "@php-wasm/logger": "3.0.54", + "@php-wasm/node-7-4": "3.0.54", + "@php-wasm/node-8-0": "3.0.54", + "@php-wasm/node-8-1": "3.0.54", + "@php-wasm/node-8-2": "3.0.54", + "@php-wasm/node-8-3": "3.0.54", + "@php-wasm/node-8-4": "3.0.54", + "@php-wasm/node-8-5": "3.0.54", + "@php-wasm/node-polyfills": "3.0.54", + "@php-wasm/universal": "3.0.54", + "@php-wasm/util": "3.0.54", + "@wp-playground/common": "3.0.54", "express": "4.22.0", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", @@ -6001,13 +6014,13 @@ } }, "node_modules/@php-wasm/node-7-4": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/node-7-4/-/node-7-4-3.0.53.tgz", - "integrity": "sha512-yzGtmeopGwJnGlqqWNRR4iJzEoK8NlwpsuMEMu7WfRWnD12QTwOAu4q9mHLg9t597jEMl2ht/oBdrmF3XrFeHQ==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/node-7-4/-/node-7-4-3.0.54.tgz", + "integrity": "sha512-Ab/F/11FuJVSea8ruY9ITB4crTXZhPL2nQi9J2jWAqmky8YhjN5ecBrIo56f71CKxlFdLV+pYJ6hAmA+TYqgiA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -6031,13 +6044,13 @@ } }, "node_modules/@php-wasm/node-8-0": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-0/-/node-8-0-3.0.53.tgz", - "integrity": "sha512-sJkzqEjFQNc6njsx3kyLmcXfVnnxYjXH5/Ye9/zL5Hv2WaQR2uNf+axO84ZtOz9EIlP34aMc13EK/FctcLs0VQ==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-0/-/node-8-0-3.0.54.tgz", + "integrity": "sha512-OkD5YqYP9aKQVJfYq9uh+ZvGX84Ch/opl4FhmFHoLY129QggxeqhHz7HqBJpZhDLFRwGBMo5nv6gPIEM3EiGzw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -6061,13 +6074,13 @@ } }, "node_modules/@php-wasm/node-8-1": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-1/-/node-8-1-3.0.53.tgz", - "integrity": "sha512-dtis9B33pCdC/6u0TZ+axMwh9jKc/ZcDw8NDUImTTmAWOvg7xslNKn6wM65UwdDQX+zcBwjQxB2Tsu2NY4KZAQ==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-1/-/node-8-1-3.0.54.tgz", + "integrity": "sha512-yEM3AbqHpPYUgSaAtK5Fw9seqF6efwj4q6656smZOorBjsazU2a455ACKeL6MZjz2KGZ0kUUIhbW0yZW8AK0rw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -6091,13 +6104,13 @@ } }, "node_modules/@php-wasm/node-8-2": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-2/-/node-8-2-3.0.53.tgz", - "integrity": "sha512-YObMvLRlKXMuEeQa/XwIvxynuJ8w099CaUUxiYWqgT4C5K2WXTQnuRPN77vo91PNhsuccUE+6Q2QxW5pIMyv3g==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-2/-/node-8-2-3.0.54.tgz", + "integrity": "sha512-FtIxMoVR5p6RHNd/RN9ZopO+VstI4oVTQ6DKniQsxAWThzKaeng7S/wEviw4TvIUYHSDyq9b4dEUheAB4+xkPQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -6121,13 +6134,13 @@ } }, "node_modules/@php-wasm/node-8-3": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-3/-/node-8-3-3.0.53.tgz", - "integrity": "sha512-yl0sLsCA9OgvXQ6cfMzF8ZrcVFYkbQ7mB/s4VChs1xd2zQJd5JuGBueZOymB+5cNCzFx9rUXvulMCIeiuDIeHg==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-3/-/node-8-3-3.0.54.tgz", + "integrity": "sha512-BYuCQ/S33infILnfQaYJkmFBnEtUKOEehEbuD9fD92IayfR6YpHMMdxA/loqLXNcCp3j00e7RSBE6j/x0b+0eA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -6151,13 +6164,13 @@ } }, "node_modules/@php-wasm/node-8-4": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-4/-/node-8-4-3.0.53.tgz", - "integrity": "sha512-4NvSdCaRrc59wm/xs5jkTeFPp5rma3+gHDRq8EiWTEfUc3wMSo5VUOAW160u+7NwdxXBY1pMIIlNwo6WMNm9zg==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-4/-/node-8-4-3.0.54.tgz", + "integrity": "sha512-jZyOu9Dkr4xRfdfRB6MhRoEjbhirdvXZPnNN6uk7YlQlx8u+85d4VO+48HADjKQsbcBNk0jh7tyl1thnxPa61g==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -6181,13 +6194,13 @@ } }, "node_modules/@php-wasm/node-8-5": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-5/-/node-8-5-3.0.53.tgz", - "integrity": "sha512-OyZZt45TfYSpnuoe2XmKAGkz8brMtqk5V2MwoKPH43ypZpFdDf34f+WM+vg86N4o+PCgS3pLbSDcGhUZ85eSXg==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-5/-/node-8-5-3.0.54.tgz", + "integrity": "sha512-W7i5e9M11uijNsgOb+g8JEjyBI2vIU2iqmJaNe1yL66AMabe00cOALo8ItAe+cLHGmSnxQZwDvZ9o4wPmP6t+A==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -6211,9 +6224,9 @@ } }, "node_modules/@php-wasm/node-polyfills": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/node-polyfills/-/node-polyfills-3.0.53.tgz", - "integrity": "sha512-v3glfXVIygMjp3qEfpUhzj+l1r7/3A4QobYfdSQzwo4nLgvUXDW8HZBX+2sn1GnMHQjpVe9Nv4Sq8935p3/JOQ==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/node-polyfills/-/node-polyfills-3.0.54.tgz", + "integrity": "sha512-WyhBRGDfQOqLrRKhkqzzaiFiBHUv+zAvAkrFCmiBZTMTjhiFyvKaiIuy5ZFN4jUSbg8q96Py+jj8Y7XnR2oaZQ==", "dev": true, "license": "GPL-2.0-or-later", "optionalDependencies": { @@ -6383,14 +6396,14 @@ } }, "node_modules/@php-wasm/progress": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-3.0.53.tgz", - "integrity": "sha512-By8lMblZICGjceh+LXUhhYfl0eYUeFTeflgCpFMMootRHWjqJqAJnLzgHSVb2AXTpT4US1cYBrpF8j5w89alxw==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-3.0.54.tgz", + "integrity": "sha512-J18cvpHY6AcKU+WEzOJJ0TZSf+Kk5dz/u1BJyvkbnpCcPxUHqyHFGlzXmzb/rck7rE08f6D2xqyDDroPc/Mjpw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.0.53", - "@php-wasm/node-polyfills": "3.0.53" + "@php-wasm/logger": "3.0.54", + "@php-wasm/node-polyfills": "3.0.54" }, "engines": { "node": ">=20.10.0", @@ -6401,9 +6414,9 @@ } }, "node_modules/@php-wasm/scopes": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/scopes/-/scopes-3.0.53.tgz", - "integrity": "sha512-79BKT9pSTOdzS0L55trKmattArttM5sUMHrNaXY/aCv9IJdUhsyrlJPNqY6/x/WNuliUfD5ZwE4pAnUWsHyh9w==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/scopes/-/scopes-3.0.54.tgz", + "integrity": "sha512-+bixG5LCUECZFplAqLDerBWsZF/Fjte8k1o0RXXfl68PjQWIokxiDdvWd37/y89HtpNZefYBPxFkFVlQmhBUfg==", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -6415,31 +6428,31 @@ } }, "node_modules/@php-wasm/stream-compression": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-3.0.53.tgz", - "integrity": "sha512-mmzGg2GEHKFbEzNn81jku6VkPjmdblKOmlbqsSUabg1BjDUqEKrl9do6XbZLOPlkH7PlLIUf94vrNaOKX+b26A==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-3.0.54.tgz", + "integrity": "sha512-lG6XKXYpLzjRh7lSKJtLeW6vTLMQaXcarRHcCSKAvvu6352Kb0TJjakFJcPgk9z50PP5wZGC7nPzZnqEtwAexw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/node-polyfills": "3.0.53", - "@php-wasm/util": "3.0.53" + "@php-wasm/node-polyfills": "3.0.54", + "@php-wasm/util": "3.0.54" }, "optionalDependencies": { "fs-ext": "2.1.1" } }, "node_modules/@php-wasm/universal": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-3.0.53.tgz", - "integrity": "sha512-rr7xOcV1UI+qwde3tl3Bbw7J3VmYUgcHtWem6ZjqSJwvoQ0cFzv24QDJg5/rsr1ieS26uFQV8k3lsjGgE2N7DA==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-3.0.54.tgz", + "integrity": "sha512-VD6ez2fqZXUdNTJoZP8HoWJGGHucbgyCx1GKrSs2RuVJDlvKOfU8aP0XONmE6hgNEaXADDn3cUvzJjgpiHenAw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.0.53", - "@php-wasm/node-polyfills": "3.0.53", - "@php-wasm/progress": "3.0.53", - "@php-wasm/stream-compression": "3.0.53", - "@php-wasm/util": "3.0.53", + "@php-wasm/logger": "3.0.54", + "@php-wasm/node-polyfills": "3.0.54", + "@php-wasm/progress": "3.0.54", + "@php-wasm/stream-compression": "3.0.54", + "@php-wasm/util": "3.0.54", "ini": "4.1.2" }, "engines": { @@ -6461,9 +6474,9 @@ } }, "node_modules/@php-wasm/util": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.0.53.tgz", - "integrity": "sha512-8I4yN/Mjn/ornPOsyFQMMd8vYvHrj7MRnqwg02SJxv2Jul/9AXDR2yl/149cpeY3IH6z4mO1bLjqs46y+mc5mg==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.0.54.tgz", + "integrity": "sha512-iEYg7G3OP+vaQ01FOAVb9pdqecc/FmWn1jYzmMITVUA5i/a+WfaghPJPAzFz4kgy6GhAIuaf349fHqj7cQIicg==", "dev": true, "engines": { "node": ">=20.10.0", @@ -6474,25 +6487,25 @@ } }, "node_modules/@php-wasm/web": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/web/-/web-3.0.53.tgz", - "integrity": "sha512-PttMu5eZu2TtMwXBC3yYUzUyRk6XYNr5hlHXTSQEGKIud38iNn0mpNFWO5cEC9eFs+yohn5IFLPk31Qax9UekQ==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/web/-/web-3.0.54.tgz", + "integrity": "sha512-GwA92xfx8U1oexStnOC8/jzpLZimGv3rfhuKuR6AfYPXHLP614CfluGNykjpsjC15lESgZSQoy6ICJBi0toMLQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/fs-journal": "3.0.53", - "@php-wasm/logger": "3.0.53", - "@php-wasm/universal": "3.0.53", - "@php-wasm/util": "3.0.53", - "@php-wasm/web-7-4": "3.0.53", - "@php-wasm/web-8-0": "3.0.53", - "@php-wasm/web-8-1": "3.0.53", - "@php-wasm/web-8-2": "3.0.53", - "@php-wasm/web-8-3": "3.0.53", - "@php-wasm/web-8-4": "3.0.53", - "@php-wasm/web-8-5": "3.0.53", - "@php-wasm/web-service-worker": "3.0.53", - "@wp-playground/common": "3.0.53", + "@php-wasm/fs-journal": "3.0.54", + "@php-wasm/logger": "3.0.54", + "@php-wasm/universal": "3.0.54", + "@php-wasm/util": "3.0.54", + "@php-wasm/web-7-4": "3.0.54", + "@php-wasm/web-8-0": "3.0.54", + "@php-wasm/web-8-1": "3.0.54", + "@php-wasm/web-8-2": "3.0.54", + "@php-wasm/web-8-3": "3.0.54", + "@php-wasm/web-8-4": "3.0.54", + "@php-wasm/web-8-5": "3.0.54", + "@php-wasm/web-service-worker": "3.0.54", + "@wp-playground/common": "3.0.54", "express": "4.22.0", "ini": "4.1.2", "selfsigned": "5.5.0", @@ -6509,13 +6522,13 @@ } }, "node_modules/@php-wasm/web-7-4": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/web-7-4/-/web-7-4-3.0.53.tgz", - "integrity": "sha512-Dz7eQpz6nYECOElduYVfzKjbWmH4tNDYG6/nJu5f/rW8J3UZVKxNAWG1+L3HSymRcRBZSyHsvZlmus3iCfLmOg==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/web-7-4/-/web-7-4-3.0.54.tgz", + "integrity": "sha512-ZIv8Mq+V3Pu9416hdAA/YgduGEJnyep7AG341STNcg6HFP0u2obynFoijD2itQVTPKk3/9bVNKZcbIYndWTN+Q==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0" }, @@ -6538,13 +6551,13 @@ } }, "node_modules/@php-wasm/web-8-0": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-0/-/web-8-0-3.0.53.tgz", - "integrity": "sha512-nADkojfey1RSXaNdMvjz2sd07ehGo1OATze6c5rUatYVzIeNN3O4ZTjpuvK73Hb8wo6veoyaXuWvGlVuctCp8w==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/web-8-0/-/web-8-0-3.0.54.tgz", + "integrity": "sha512-IpdSTgILcV5OsbVlbajd2OR00H13A8zgYZjNox6k5GjsqfiJXNuDpnw8H/PM+cNSB0FOlrsB74KBAZZUnnj3Sg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0" }, @@ -6567,13 +6580,13 @@ } }, "node_modules/@php-wasm/web-8-1": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-1/-/web-8-1-3.0.53.tgz", - "integrity": "sha512-AUXdJeVBht5KA/8K9P1sUXdagFNQn1Sr4fkvefrTuD1v3DrekFlgl1ANtxLZApQoGpY+uutOvFIjC3CDyFu+eQ==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/web-8-1/-/web-8-1-3.0.54.tgz", + "integrity": "sha512-Xe7aCpGD8YYXitQ/FRZLgYY6ngrcPYW26D+IIHSN0yZNvOX1TgEQISRuYlQRAfR5J0vHz9TGCOGN8TxxySoabw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0" }, @@ -6596,13 +6609,13 @@ } }, "node_modules/@php-wasm/web-8-2": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-2/-/web-8-2-3.0.53.tgz", - "integrity": "sha512-kdi4EoTlPCrxq2qZVY8yUVpBFKKrErHnZAOZutmf2Uilcb8ugbtSvUqo3WpopFuww/tygGSnS+mKD7gxtb2g0Q==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/web-8-2/-/web-8-2-3.0.54.tgz", + "integrity": "sha512-sqkeEadm8TScnAFIDIMUxg65TnH2zj40A80CUBZCJDckBYKFL7gsbSXlAmdTrYdscE9wPLFdVU7M46h42qGFNQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0" }, @@ -6625,13 +6638,13 @@ } }, "node_modules/@php-wasm/web-8-3": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-3/-/web-8-3-3.0.53.tgz", - "integrity": "sha512-PNwACxaHXSc70aqJGPy4Tizrv65CQ35C1tgKiLMvFx4+ZIokpXWzY1wCYE4nA2M5qIaAgqhSe9LLbnAh8ET5/A==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/web-8-3/-/web-8-3-3.0.54.tgz", + "integrity": "sha512-W/ejSh/9juES7ktYTP5AEWAK/hDNWzaegAuGMTna8jTRw9snhpvBGjAY9adhUaJYO/xa0wz6Fku9EemuAl9CRQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0" }, @@ -6654,13 +6667,13 @@ } }, "node_modules/@php-wasm/web-8-4": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-4/-/web-8-4-3.0.53.tgz", - "integrity": "sha512-uqFJTA5X4HQvFgQ/+NSXG7KhH4NSLIh1gEgGv1YKO7BVSv5jqW1fvvBIVzEscrVW5kEYdYQSyPi38L61A98FJg==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/web-8-4/-/web-8-4-3.0.54.tgz", + "integrity": "sha512-vJolOoZyZPRX+rL0zV00+4g4P6JIUoanwzFWznG5iFpx9K7rpOi1PVhSpfOw0UywdYYi4JmuT3/8Z5tJWK88VQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0" }, @@ -6683,13 +6696,13 @@ } }, "node_modules/@php-wasm/web-8-5": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-5/-/web-8-5-3.0.53.tgz", - "integrity": "sha512-TenVMrlcVInSn/1C0eXKveuHDK4rUEoe99cwpKSrTimeFZ4GLVuVTUwHrV2GAcfLxsFFNNrUtwbGb+Vt/UuoEA==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/web-8-5/-/web-8-5-3.0.54.tgz", + "integrity": "sha512-EnSc2Zsc5ye0MDlYpQPPK1XHfsCxvowDSkeG116drXRSue9pN/w2r4+wI0vWiKEbch9yGzMDl9DEmn+s+x1BVw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", + "@php-wasm/universal": "3.0.54", "ini": "4.1.2", "wasm-feature-detect": "1.8.0" }, @@ -6712,13 +6725,13 @@ } }, "node_modules/@php-wasm/web-service-worker": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@php-wasm/web-service-worker/-/web-service-worker-3.0.53.tgz", - "integrity": "sha512-VbvQB1zSKwIS9JsdaxNgXda0dz30xlhu3lzzTa1rVzHTtIoYL6mjUU31RW/TvNlR6bUb5MzlpsyHf9Q9qbkzoA==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@php-wasm/web-service-worker/-/web-service-worker-3.0.54.tgz", + "integrity": "sha512-ju1PwvKuo/Q2FR6JCSMrfT4mQZtu8i/Y4FN/OuKHGPDvIpOhQt49C3JfKP0bhrYP00sL1zvjWNgkj+yyXgX4zA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/scopes": "3.0.53" + "@php-wasm/scopes": "3.0.54" }, "engines": { "node": ">=20.10.0", @@ -7951,6 +7964,7 @@ "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.24" @@ -8167,7 +8181,8 @@ "node_modules/@swc/wasm": { "version": "1.13.5", "devOptional": true, - "license": "Apache-2.0" + "license": "Apache-2.0", + "peer": true }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", @@ -8346,8 +8361,7 @@ "node_modules/@types/aria-query": { "version": "5.0.4", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/aws-lambda": { "version": "8.10.160", @@ -8595,6 +8609,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.11.tgz", "integrity": "sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==", "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -8634,6 +8649,7 @@ "node_modules/@types/react": { "version": "18.3.27", "license": "MIT", + "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.2.2" @@ -8642,6 +8658,7 @@ "node_modules/@types/react-dom": { "version": "18.3.7", "license": "MIT", + "peer": true, "peerDependencies": { "@types/react": "^18.0.0" } @@ -8761,6 +8778,7 @@ "version": "8.53.1", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.53.1", "@typescript-eslint/types": "8.53.1", @@ -9392,6 +9410,7 @@ "integrity": "sha512-CGJ25bc8fRi8Lod/3GHSvXRKi7nBo3kxh0ApW4yCjmrWmRmlT53B5E08XRSZRliygG0aVNxLrBEqPYdz/KcCtQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@vitest/utils": "4.0.18", "fflate": "^0.8.2", @@ -10050,23 +10069,23 @@ } }, "node_modules/@wp-playground/blueprints": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@wp-playground/blueprints/-/blueprints-3.0.53.tgz", - "integrity": "sha512-NJKun/0JgVWk0OpptcUh+k6OvMolvF3del0MRZSPg9VwsmdTK3b/Aagk8ytvt3scCGP0PhuhgMf4Ldvp8SUVeg==", - "dev": true, - "dependencies": { - "@php-wasm/logger": "3.0.53", - "@php-wasm/node": "3.0.53", - "@php-wasm/node-polyfills": "3.0.53", - "@php-wasm/progress": "3.0.53", - "@php-wasm/scopes": "3.0.53", - "@php-wasm/stream-compression": "3.0.53", - "@php-wasm/universal": "3.0.53", - "@php-wasm/util": "3.0.53", - "@php-wasm/web-service-worker": "3.0.53", - "@wp-playground/common": "3.0.53", - "@wp-playground/storage": "3.0.53", - "@wp-playground/wordpress": "3.0.53", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@wp-playground/blueprints/-/blueprints-3.0.54.tgz", + "integrity": "sha512-VoW5uuXQ6SyCOXTIeZ5aGUvlnXLKXIqxz9ETg3oDxTCAYH1mhGfHeBA0kdsQgu3wbpeI0AEgeWU64nfqxwAjlg==", + "dev": true, + "dependencies": { + "@php-wasm/logger": "3.0.54", + "@php-wasm/node": "3.0.54", + "@php-wasm/node-polyfills": "3.0.54", + "@php-wasm/progress": "3.0.54", + "@php-wasm/scopes": "3.0.54", + "@php-wasm/stream-compression": "3.0.54", + "@php-wasm/universal": "3.0.54", + "@php-wasm/util": "3.0.54", + "@php-wasm/web-service-worker": "3.0.54", + "@wp-playground/common": "3.0.54", + "@wp-playground/storage": "3.0.54", + "@wp-playground/wordpress": "3.0.54", "@zip.js/zip.js": "2.7.57", "ajv": "8.12.0", "async-lock": "1.4.1", @@ -10264,14 +10283,14 @@ } }, "node_modules/@wp-playground/common": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-3.0.53.tgz", - "integrity": "sha512-3RFBjaV+yJhmXNFTKTvqGJn/x0itK6/E91gJH8sGQz6+zt0uczfNU6Q9jRXWjkjJPyoi/pgcRbYDPjhyublaLA==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-3.0.54.tgz", + "integrity": "sha512-yRslQZjHlSyNA+6IMqJKGQrOVA5XSEZl6YcF5+zDJl3iJBBqD6u9UDPCBxrN/7v42K4dH3zPEbK/grrSgv58vA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.0.53", - "@php-wasm/util": "3.0.53", + "@php-wasm/universal": "3.0.54", + "@php-wasm/util": "3.0.54", "ini": "4.1.2" }, "engines": { @@ -10293,16 +10312,16 @@ } }, "node_modules/@wp-playground/storage": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@wp-playground/storage/-/storage-3.0.53.tgz", - "integrity": "sha512-l/GHn8iP/VzJgImfJ8STCYUpEAac5Uf7h8Wi3wcCD6vuBAqimNYcg67QITNQD6zPI3aiG6l85spmskHOrpx3/w==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@wp-playground/storage/-/storage-3.0.54.tgz", + "integrity": "sha512-glUB2vy6sroUOM/EYP4SEeDbZEkxiedonz3CH2KZJRIqSplA09bgOCJckDavW2bryprMMEzwg7O82Shin2uthg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/stream-compression": "3.0.53", - "@php-wasm/universal": "3.0.53", - "@php-wasm/util": "3.0.53", - "@php-wasm/web": "3.0.53", + "@php-wasm/stream-compression": "3.0.54", + "@php-wasm/universal": "3.0.54", + "@php-wasm/util": "3.0.54", + "@php-wasm/web": "3.0.54", "@zip.js/zip.js": "2.7.57", "async-lock": "^1.4.1", "clean-git-ref": "^2.0.1", @@ -10507,17 +10526,17 @@ } }, "node_modules/@wp-playground/wordpress": { - "version": "3.0.53", - "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-3.0.53.tgz", - "integrity": "sha512-u/EOkx0tQvvVcYjtC33JDrVxNP1CpJX+cbIj4gFNCe17aKlX4VIJOdkAMJd7igidgLOFIEDFil/8cCFlDMQg2A==", + "version": "3.0.54", + "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-3.0.54.tgz", + "integrity": "sha512-uk+RxyYA64TdGulW3ByBR1U3scPUcI54O5CxfhetLw/DXzOzz5onCQIMBbzx5oTWjqN7Jv1880Tfnv44VdZBkQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.0.53", - "@php-wasm/node": "3.0.53", - "@php-wasm/universal": "3.0.53", - "@php-wasm/util": "3.0.53", - "@wp-playground/common": "3.0.53", + "@php-wasm/logger": "3.0.54", + "@php-wasm/node": "3.0.54", + "@php-wasm/universal": "3.0.54", + "@php-wasm/util": "3.0.54", + "@wp-playground/common": "3.0.54", "express": "4.22.0", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", @@ -10864,6 +10883,7 @@ "node_modules/acorn": { "version": "8.15.0", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -11697,6 +11717,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -13091,8 +13112,7 @@ "node_modules/dom-accessibility-api": { "version": "0.5.16", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/dot-case": { "version": "3.0.4", @@ -14412,6 +14432,7 @@ "node_modules/eslint": { "version": "9.39.2", "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -14469,6 +14490,7 @@ "node_modules/eslint-config-prettier": { "version": "10.1.8", "license": "MIT", + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -14581,6 +14603,7 @@ "version": "2.32.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -15647,14 +15670,6 @@ "node": ">= 8.0.0" } }, - "node_modules/fs-ext/node_modules/nan": { - "version": "2.25.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.25.0.tgz", - "integrity": "sha512-0M90Ag7Xn5KMLLZ7zliPWP3rT90P6PN+IzVFS0VqmnPktBk3700xUVv8Ikm9EUaUE5SDWdp/BIxdENzVznpm1g==", - "dev": true, - "license": "MIT", - "optional": true - }, "node_modules/fs-extra": { "version": "11.3.2", "license": "MIT", @@ -18169,7 +18184,6 @@ "version": "1.5.0", "dev": true, "license": "MIT", - "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -19408,7 +19422,9 @@ } }, "node_modules/nan": { - "version": "2.24.0", + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.25.0.tgz", + "integrity": "sha512-0M90Ag7Xn5KMLLZ7zliPWP3rT90P6PN+IzVFS0VqmnPktBk3700xUVv8Ikm9EUaUE5SDWdp/BIxdENzVznpm1g==", "license": "MIT", "optional": true }, @@ -20511,6 +20527,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -20760,6 +20777,7 @@ "version": "3.0.3", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -20785,7 +20803,6 @@ "version": "27.5.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -20799,7 +20816,6 @@ "version": "5.2.0", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10" }, @@ -20810,8 +20826,7 @@ "node_modules/pretty-format/node_modules/react-is": { "version": "17.0.2", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/proc-log": { "version": "2.0.1", @@ -21066,6 +21081,7 @@ "node_modules/react": { "version": "18.3.1", "license": "MIT", + "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -21111,6 +21127,7 @@ "node_modules/react-dom": { "version": "18.3.1", "license": "MIT", + "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -21150,6 +21167,7 @@ "node_modules/react-redux": { "version": "9.2.0", "license": "MIT", + "peer": true, "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" @@ -21364,7 +21382,8 @@ }, "node_modules/redux": { "version": "5.0.1", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/redux-thunk": { "version": "3.1.0", @@ -21820,6 +21839,7 @@ "version": "4.50.2", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -22018,6 +22038,7 @@ "version": "8.17.1", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -23438,6 +23459,7 @@ "version": "4.0.3", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -23866,6 +23888,7 @@ "node_modules/typescript": { "version": "5.9.3", "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -24128,6 +24151,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "dependencies": { "napi-postinstall": "^0.3.0" }, @@ -24380,6 +24404,7 @@ "version": "7.3.1", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -25015,6 +25040,7 @@ "version": "4.0.3", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -25028,6 +25054,7 @@ "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@vitest/expect": "4.0.18", "@vitest/mocker": "4.0.18", @@ -25728,6 +25755,7 @@ "node_modules/zod": { "version": "4.3.5", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 78095cd896..91120b2fd3 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "@wordpress/components": "^32.1.0", "@wordpress/element": "^6.39.0", "@wordpress/react-i18n": "^4.39.0", - "@wp-playground/blueprints": "^3.0.53", + "@wp-playground/blueprints": "^3.0.54", "@yao-pkg/pkg": "^6.3.2", "electron": "^40.4.1", "electron-devtools-installer": "^4.0.0", diff --git a/patches/@wp-playground+wordpress+3.0.53.patch b/patches/@wp-playground+wordpress+3.0.54.patch similarity index 100% rename from patches/@wp-playground+wordpress+3.0.53.patch rename to patches/@wp-playground+wordpress+3.0.54.patch From bf69222847a28ae78ef5434273ca572bc3bf4b9b Mon Sep 17 00:00:00 2001 From: bcotrim Date: Wed, 18 Feb 2026 17:37:24 +0000 Subject: [PATCH 3/9] Add multisite validation requiring custom domain for enableMultisite blueprint step --- cli/commands/site/create.ts | 13 ++++ cli/commands/site/tests/create.test.ts | 35 ++++++++++ cli/package-lock.json | 1 - common/lib/blueprint-settings.ts | 15 +++++ common/lib/tests/blueprint-settings.test.ts | 65 ++++++++++++++++++ package-lock.json | 66 ++++--------------- src/hooks/use-add-site.ts | 6 ++ .../add-site/components/create-site-form.tsx | 18 +++++ .../add-site/components/create-site.tsx | 3 + .../tests/use-blueprint-deeplink.test.tsx | 2 + .../add-site/hooks/use-blueprint-deeplink.ts | 4 ++ src/modules/add-site/index.tsx | 15 +++++ 12 files changed, 187 insertions(+), 56 deletions(-) diff --git a/cli/commands/site/create.ts b/cli/commands/site/create.ts index 77afa93196..d3c5475cf8 100644 --- a/cli/commands/site/create.ts +++ b/cli/commands/site/create.ts @@ -14,6 +14,7 @@ import { filterUnsupportedBlueprintFeatures, validateBlueprintData, } from 'common/lib/blueprint-validation'; +import { blueprintHasMultisite } from 'common/lib/blueprint-settings'; import { getDomainNameValidationError } from 'common/lib/domains'; import { arePathsEqual, @@ -117,6 +118,18 @@ export async function runCommand( blueprint = filterUnsupportedBlueprintFeatures( options.blueprint.contents as Record< string, unknown > ); + + if ( + blueprint && + blueprintHasMultisite( blueprint ) && + ! options.customDomain + ) { + throw new LoggerError( + __( + 'The enableMultisite Blueprint step requires a custom domain. WordPress multisite does not support custom ports. Use --domain .local to set a custom domain.' + ) + ); + } } const appdata = await readAppdata(); diff --git a/cli/commands/site/tests/create.test.ts b/cli/commands/site/tests/create.test.ts index 47a668818a..65ba4304c8 100644 --- a/cli/commands/site/tests/create.test.ts +++ b/cli/commands/site/tests/create.test.ts @@ -558,6 +558,41 @@ describe( 'CLI: studio site create', () => { } ); } ); + describe( 'Multisite Validation', () => { + it( 'should error when enableMultisite step is present without custom domain', async () => { + const multisiteBlueprint: Blueprint = { + steps: [ { step: 'enableMultisite' } ], + }; + + await expect( + runCommand( mockSitePath, { + ...defaultTestOptions, + blueprint: { + uri: '/home/test/blueprint.json', + contents: multisiteBlueprint, + }, + } ) + ).rejects.toThrow( /enableMultisite.*custom domain/i ); + } ); + + it( 'should proceed when enableMultisite step is present with custom domain', async () => { + const multisiteBlueprint: Blueprint = { + steps: [ { step: 'enableMultisite' } ], + }; + + await runCommand( mockSitePath, { + ...defaultTestOptions, + customDomain: 'test.local', + blueprint: { + uri: '/home/test/blueprint.json', + contents: multisiteBlueprint, + }, + } ); + + expect( startWordPressServer ).toHaveBeenCalled(); + } ); + } ); + describe( 'noStart Option', () => { it( 'should not start server when noStart is true', async () => { await runCommand( mockSitePath, { diff --git a/cli/package-lock.json b/cli/package-lock.json index 1ddef0075e..08955c3e75 100644 --- a/cli/package-lock.json +++ b/cli/package-lock.json @@ -242,7 +242,6 @@ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.2.tgz", "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", "license": "MIT", - "peer": true, "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", diff --git a/common/lib/blueprint-settings.ts b/common/lib/blueprint-settings.ts index 6078880a98..91f16b1c0f 100644 --- a/common/lib/blueprint-settings.ts +++ b/common/lib/blueprint-settings.ts @@ -5,8 +5,19 @@ type BlueprintSiteSettings = Partial< > & { wpVersion?: string; siteName?: string; + requiresCustomDomain?: boolean; }; +/** + * Checks if a blueprint contains the enableMultisite step. + */ +export function blueprintHasMultisite( blueprintJson: Blueprint ): boolean { + return ( + Array.isArray( blueprintJson.steps ) && + blueprintJson.steps.some( ( step: { step?: string } ) => step.step === 'enableMultisite' ) + ); +} + /** * Extracts form-relevant values from a blueprint. */ @@ -22,6 +33,10 @@ export function extractFormValuesFromBlueprint( blueprintJson: Blueprint ): Blue } } + if ( blueprintHasMultisite( blueprintJson ) ) { + values.requiresCustomDomain = true; + } + if ( blueprintJson.steps && Array.isArray( blueprintJson.steps ) ) { const defineSiteUrlStep = blueprintJson.steps.find( ( step: { step?: string } ) => step.step === 'defineSiteUrl' diff --git a/common/lib/tests/blueprint-settings.test.ts b/common/lib/tests/blueprint-settings.test.ts index 5550d2364b..6cfb69fba6 100644 --- a/common/lib/tests/blueprint-settings.test.ts +++ b/common/lib/tests/blueprint-settings.test.ts @@ -1,4 +1,5 @@ import { + blueprintHasMultisite, extractFormValuesFromBlueprint, updateBlueprintWithFormValues, } from '../blueprint-settings'; @@ -176,6 +177,70 @@ describe( 'blueprint-settings', () => { expect( result.siteName ).toBe( 'First Name' ); } ); + + it( 'should set requiresCustomDomain when enableMultisite step is present', () => { + const blueprint = { + steps: [ { step: 'enableMultisite' } ], + }; + + const result = extractFormValuesFromBlueprint( blueprint ); + + expect( result.requiresCustomDomain ).toBe( true ); + } ); + + it( 'should not set requiresCustomDomain when enableMultisite step is absent', () => { + const blueprint = { + steps: [ { step: 'installPlugin', pluginData: { slug: 'akismet' } } ], + }; + + const result = extractFormValuesFromBlueprint( blueprint ); + + expect( result.requiresCustomDomain ).toBeUndefined(); + } ); + } ); + + describe( 'blueprintHasMultisite', () => { + it( 'should return true when enableMultisite step is present', () => { + const blueprint = { + steps: [ { step: 'enableMultisite' } ], + }; + + expect( blueprintHasMultisite( blueprint ) ).toBe( true ); + } ); + + it( 'should return true when enableMultisite is among other steps', () => { + const blueprint = { + steps: [ + { step: 'login' }, + { step: 'enableMultisite' }, + { step: 'installPlugin', pluginData: { slug: 'akismet' } }, + ], + }; + + expect( blueprintHasMultisite( blueprint ) ).toBe( true ); + } ); + + it( 'should return false when enableMultisite is not present', () => { + const blueprint = { + steps: [ { step: 'login' } ], + }; + + expect( blueprintHasMultisite( blueprint ) ).toBe( false ); + } ); + + it( 'should return false for empty blueprint', () => { + expect( blueprintHasMultisite( {} ) ).toBe( false ); + } ); + + it( 'should return false when steps is not an array', () => { + const blueprint = { steps: 'not-an-array' }; + + expect( + blueprintHasMultisite( + blueprint as unknown as Parameters< typeof blueprintHasMultisite >[ 0 ] + ) + ).toBe( false ); + } ); } ); describe( 'updateBlueprintWithFormValues', () => { diff --git a/package-lock.json b/package-lock.json index 21a5dfe2be..d174cac2a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -428,7 +428,6 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -2155,7 +2154,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -2177,7 +2175,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -3542,7 +3539,6 @@ "node_modules/@emotion/react": { "version": "11.11.3", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.11.0", @@ -4165,7 +4161,6 @@ "node_modules/@inquirer/prompts": { "version": "7.10.1", "license": "MIT", - "peer": true, "dependencies": { "@inquirer/checkbox": "^4.3.2", "@inquirer/confirm": "^5.1.21", @@ -4768,7 +4763,6 @@ "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", @@ -5141,7 +5135,6 @@ "node_modules/@opentelemetry/api": { "version": "1.9.0", "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=8.0.0" } @@ -5159,7 +5152,6 @@ "node_modules/@opentelemetry/context-async-hooks": { "version": "1.30.1", "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=14" }, @@ -5170,7 +5162,6 @@ "node_modules/@opentelemetry/core": { "version": "1.30.1", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, @@ -5191,7 +5182,6 @@ "node_modules/@opentelemetry/instrumentation": { "version": "0.57.2", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", @@ -5547,7 +5537,6 @@ "node_modules/@opentelemetry/resources": { "version": "1.30.1", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" @@ -5569,7 +5558,6 @@ "node_modules/@opentelemetry/sdk-trace-base": { "version": "1.30.1", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", @@ -5592,7 +5580,6 @@ "node_modules/@opentelemetry/semantic-conventions": { "version": "1.37.0", "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=14" } @@ -7964,7 +7951,6 @@ "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.24" @@ -8002,7 +7988,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -8019,7 +8004,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -8036,7 +8020,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -8053,7 +8036,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -8070,7 +8052,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -8087,7 +8068,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -8104,7 +8084,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -8121,7 +8100,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -8138,7 +8116,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -8155,7 +8132,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -8181,8 +8157,7 @@ "node_modules/@swc/wasm": { "version": "1.13.5", "devOptional": true, - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", @@ -8361,7 +8336,8 @@ "node_modules/@types/aria-query": { "version": "5.0.4", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/aws-lambda": { "version": "8.10.160", @@ -8609,7 +8585,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.11.tgz", "integrity": "sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==", "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -8649,7 +8624,6 @@ "node_modules/@types/react": { "version": "18.3.27", "license": "MIT", - "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.2.2" @@ -8658,7 +8632,6 @@ "node_modules/@types/react-dom": { "version": "18.3.7", "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^18.0.0" } @@ -8778,7 +8751,6 @@ "version": "8.53.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.53.1", "@typescript-eslint/types": "8.53.1", @@ -9410,7 +9382,6 @@ "integrity": "sha512-CGJ25bc8fRi8Lod/3GHSvXRKi7nBo3kxh0ApW4yCjmrWmRmlT53B5E08XRSZRliygG0aVNxLrBEqPYdz/KcCtQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/utils": "4.0.18", "fflate": "^0.8.2", @@ -10883,7 +10854,6 @@ "node_modules/acorn": { "version": "8.15.0", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -11717,7 +11687,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -13112,7 +13081,8 @@ "node_modules/dom-accessibility-api": { "version": "0.5.16", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/dot-case": { "version": "3.0.4", @@ -14432,7 +14402,6 @@ "node_modules/eslint": { "version": "9.39.2", "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -14490,7 +14459,6 @@ "node_modules/eslint-config-prettier": { "version": "10.1.8", "license": "MIT", - "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -14603,7 +14571,6 @@ "version": "2.32.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -18184,6 +18151,7 @@ "version": "1.5.0", "dev": true, "license": "MIT", + "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -20527,7 +20495,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -20777,7 +20744,6 @@ "version": "3.0.3", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -20803,6 +20769,7 @@ "version": "27.5.1", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -20816,6 +20783,7 @@ "version": "5.2.0", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -20826,7 +20794,8 @@ "node_modules/pretty-format/node_modules/react-is": { "version": "17.0.2", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/proc-log": { "version": "2.0.1", @@ -21081,7 +21050,6 @@ "node_modules/react": { "version": "18.3.1", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -21127,7 +21095,6 @@ "node_modules/react-dom": { "version": "18.3.1", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -21167,7 +21134,6 @@ "node_modules/react-redux": { "version": "9.2.0", "license": "MIT", - "peer": true, "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" @@ -21382,8 +21348,7 @@ }, "node_modules/redux": { "version": "5.0.1", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/redux-thunk": { "version": "3.1.0", @@ -21839,7 +21804,6 @@ "version": "4.50.2", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -22038,7 +22002,6 @@ "version": "8.17.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -23459,7 +23422,6 @@ "version": "4.0.3", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -23888,7 +23850,6 @@ "node_modules/typescript": { "version": "5.9.3", "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -24151,7 +24112,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "napi-postinstall": "^0.3.0" }, @@ -24404,7 +24364,6 @@ "version": "7.3.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -25040,7 +24999,6 @@ "version": "4.0.3", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -25054,7 +25012,6 @@ "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/expect": "4.0.18", "@vitest/mocker": "4.0.18", @@ -25755,7 +25712,6 @@ "node_modules/zod": { "version": "4.3.5", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/src/hooks/use-add-site.ts b/src/hooks/use-add-site.ts index 646d95851c..76c04e5f08 100644 --- a/src/hooks/use-add-site.ts +++ b/src/hooks/use-add-site.ts @@ -71,6 +71,7 @@ export function useAddSite() { const [ blueprintSuggestedSiteName, setBlueprintSuggestedSiteName ] = useState< string | undefined >(); + const [ blueprintRequiresCustomDomain, setBlueprintRequiresCustomDomain ] = useState( false ); const [ isDeeplinkFlow, setIsDeeplinkFlow ] = useState( false ); const [ existingDomainNames, setExistingDomainNames ] = useState< string[] >( [] ); @@ -86,6 +87,7 @@ export function useAddSite() { setBlueprintSuggestedDomain( undefined ); setBlueprintSuggestedHttps( undefined ); setBlueprintSuggestedSiteName( undefined ); + setBlueprintRequiresCustomDomain( false ); }, [] ); // For blueprint deeplinks - we need temporary state for PHP/WP versions @@ -102,6 +104,7 @@ export function useAddSite() { setBlueprintSuggestedDomain( undefined ); setBlueprintSuggestedHttps( undefined ); setBlueprintSuggestedSiteName( undefined ); + setBlueprintRequiresCustomDomain( false ); setSelectedRemoteSite( undefined ); setDeeplinkPhpVersion( defaultPhpVersion as AllowedPHPVersion ); setDeeplinkWpVersion( defaultWordPressVersion ); @@ -335,6 +338,8 @@ export function useAddSite() { setBlueprintSuggestedHttps, blueprintSuggestedSiteName, setBlueprintSuggestedSiteName, + blueprintRequiresCustomDomain, + setBlueprintRequiresCustomDomain, selectedRemoteSite, setSelectedRemoteSite, existingDomainNames, @@ -362,6 +367,7 @@ export function useAddSite() { blueprintSuggestedDomain, blueprintSuggestedHttps, blueprintSuggestedSiteName, + blueprintRequiresCustomDomain, selectedRemoteSite, existingDomainNames, loadAllCustomDomains, diff --git a/src/modules/add-site/components/create-site-form.tsx b/src/modules/add-site/components/create-site-form.tsx index afa7c5b89d..b3cf05f6e5 100644 --- a/src/modules/add-site/components/create-site-form.tsx +++ b/src/modules/add-site/components/create-site-form.tsx @@ -43,6 +43,8 @@ export interface CreateSiteFormProps { blueprintSuggestedDomain?: string; /** Blueprint suggested HTTPS setting from defineSiteUrl step */ blueprintSuggestedHttps?: boolean; + /** Whether the blueprint requires a custom domain (e.g., multisite) */ + blueprintRequiresCustomDomain?: boolean; /** Called when form is submitted */ onSubmit: ( values: CreateSiteFormValues ) => void; /** Called when form validity changes */ @@ -157,6 +159,7 @@ export const CreateSiteForm = ( { blueprintPreferredVersions, blueprintSuggestedDomain, blueprintSuggestedHttps, + blueprintRequiresCustomDomain, onSubmit, onValidityChange, formRef, @@ -224,6 +227,14 @@ export const CreateSiteForm = ( { setAdvancedSettingsVisible( true ); }, [ blueprintSuggestedDomain, blueprintSuggestedHttps ] ); + useEffect( () => { + if ( ! blueprintRequiresCustomDomain ) { + return; + } + setUseCustomDomain( true ); + setAdvancedSettingsVisible( true ); + }, [ blueprintRequiresCustomDomain ] ); + useEffect( () => { if ( useCustomDomain && isCertificateTrusted ) { setEnableHttps( true ); @@ -523,11 +534,18 @@ export const CreateSiteForm = ( { type="checkbox" id="use-custom-domain" checked={ useCustomDomain } + disabled={ blueprintRequiresCustomDomain } onChange={ ( e ) => setUseCustomDomain( e.target.checked ) } /> + { blueprintRequiresCustomDomain && ( + + { __( 'WordPress multisite requires a custom domain.' ) } + + ) } +
{ __( 'Your system password will be required to set up the domain.' ) }
diff --git a/src/modules/add-site/components/create-site.tsx b/src/modules/add-site/components/create-site.tsx index d35eab063c..3d67b600c7 100644 --- a/src/modules/add-site/components/create-site.tsx +++ b/src/modules/add-site/components/create-site.tsx @@ -22,6 +22,7 @@ export interface CreateSiteProps { blueprintPreferredVersions?: BlueprintPreferredVersions; blueprintSuggestedDomain?: string; blueprintSuggestedHttps?: boolean; + blueprintRequiresCustomDomain?: boolean; originalDefaultVersions?: { phpVersion?: AllowedPHPVersion; wpVersion?: string; @@ -39,6 +40,7 @@ export default function CreateSite( { blueprintPreferredVersions, blueprintSuggestedDomain, blueprintSuggestedHttps, + blueprintRequiresCustomDomain, onSubmit, onValidityChange, formRef, @@ -59,6 +61,7 @@ export default function CreateSite( { blueprintPreferredVersions={ blueprintPreferredVersions } blueprintSuggestedDomain={ blueprintSuggestedDomain } blueprintSuggestedHttps={ blueprintSuggestedHttps } + blueprintRequiresCustomDomain={ blueprintRequiresCustomDomain } onSubmit={ onSubmit } onValidityChange={ onValidityChange } formRef={ formRef } diff --git a/src/modules/add-site/hooks/tests/use-blueprint-deeplink.test.tsx b/src/modules/add-site/hooks/tests/use-blueprint-deeplink.test.tsx index 9b11a93564..f6e5f3a0ee 100644 --- a/src/modules/add-site/hooks/tests/use-blueprint-deeplink.test.tsx +++ b/src/modules/add-site/hooks/tests/use-blueprint-deeplink.test.tsx @@ -24,6 +24,7 @@ describe( 'useBlueprintDeeplink', () => { const mockSetBlueprintSuggestedDomain = vi.fn(); const mockSetBlueprintSuggestedHttps = vi.fn(); const mockSetBlueprintSuggestedSiteName = vi.fn(); + const mockSetBlueprintRequiresCustomDomain = vi.fn(); const mockSetIsDeeplinkFlow = vi.fn(); let ipcCallback: Parameters< typeof useIpcListener >[ 1 ]; @@ -40,6 +41,7 @@ describe( 'useBlueprintDeeplink', () => { setBlueprintSuggestedDomain: mockSetBlueprintSuggestedDomain, setBlueprintSuggestedHttps: mockSetBlueprintSuggestedHttps, setBlueprintSuggestedSiteName: mockSetBlueprintSuggestedSiteName, + setBlueprintRequiresCustomDomain: mockSetBlueprintRequiresCustomDomain, setIsDeeplinkFlow: mockSetIsDeeplinkFlow, } ), { wrapper } diff --git a/src/modules/add-site/hooks/use-blueprint-deeplink.ts b/src/modules/add-site/hooks/use-blueprint-deeplink.ts index c637f7a9b2..be60217187 100644 --- a/src/modules/add-site/hooks/use-blueprint-deeplink.ts +++ b/src/modules/add-site/hooks/use-blueprint-deeplink.ts @@ -24,6 +24,7 @@ interface UseBlueprintDeeplinkOptions { setBlueprintSuggestedDomain: ( domain: string | undefined ) => void; setBlueprintSuggestedHttps: ( https: boolean | undefined ) => void; setBlueprintSuggestedSiteName: ( name: string | undefined ) => void; + setBlueprintRequiresCustomDomain: ( requires: boolean ) => void; setIsDeeplinkFlow: ( isDeeplink: boolean ) => void; onModalOpen?: () => void; } @@ -40,6 +41,7 @@ export function useBlueprintDeeplink( options: UseBlueprintDeeplinkOptions ): vo setBlueprintSuggestedDomain, setBlueprintSuggestedHttps, setBlueprintSuggestedSiteName, + setBlueprintRequiresCustomDomain, setIsDeeplinkFlow, onModalOpen, } = options; @@ -96,6 +98,7 @@ export function useBlueprintDeeplink( options: UseBlueprintDeeplinkOptions ): vo if ( formValues.siteName ) { setBlueprintSuggestedSiteName( formValues.siteName ); } + setBlueprintRequiresCustomDomain( !! formValues.requiresCustomDomain ); setBlueprintWarnings( warnings ); setIsDeeplinkFlow( true ); @@ -114,6 +117,7 @@ export function useBlueprintDeeplink( options: UseBlueprintDeeplinkOptions ): vo setBlueprintSuggestedDomain, setBlueprintSuggestedHttps, setBlueprintSuggestedSiteName, + setBlueprintRequiresCustomDomain, setIsDeeplinkFlow, onModalOpen, ] diff --git a/src/modules/add-site/index.tsx b/src/modules/add-site/index.tsx index 99c6db7d5d..77ffc57180 100644 --- a/src/modules/add-site/index.tsx +++ b/src/modules/add-site/index.tsx @@ -79,6 +79,8 @@ interface NavigationContentProps { setBlueprintSuggestedHttps?: ( https: boolean | undefined ) => void; blueprintSuggestedSiteName?: string; setBlueprintSuggestedSiteName?: ( name: string | undefined ) => void; + blueprintRequiresCustomDomain: boolean; + setBlueprintRequiresCustomDomain: ( requires: boolean ) => void; selectedRemoteSite?: SyncSite; setSelectedRemoteSite: ( site?: SyncSite ) => void; isDeeplinkFlow: boolean; @@ -113,6 +115,8 @@ function NavigationContent( props: NavigationContentProps ) { setBlueprintSuggestedHttps, blueprintSuggestedSiteName, setBlueprintSuggestedSiteName, + blueprintRequiresCustomDomain, + setBlueprintRequiresCustomDomain, selectedRemoteSite, setSelectedRemoteSite, isDeeplinkFlow, @@ -247,6 +251,7 @@ function NavigationContent( props: NavigationContentProps ) { setBlueprintSuggestedDomain?.( undefined ); setBlueprintSuggestedHttps?.( undefined ); setBlueprintSuggestedSiteName?.( undefined ); + setBlueprintRequiresCustomDomain( false ); return; } @@ -261,6 +266,7 @@ function NavigationContent( props: NavigationContentProps ) { setBlueprintSuggestedDomain?.( formValues.customDomain ); setBlueprintSuggestedHttps?.( formValues.enableHttps ); setBlueprintSuggestedSiteName?.( formValues.siteName ); + setBlueprintRequiresCustomDomain( !! formValues.requiresCustomDomain ); }, [ setSelectedBlueprint, @@ -268,6 +274,7 @@ function NavigationContent( props: NavigationContentProps ) { setBlueprintSuggestedDomain, setBlueprintSuggestedHttps, setBlueprintSuggestedSiteName, + setBlueprintRequiresCustomDomain, ] ); @@ -355,6 +362,7 @@ function NavigationContent( props: NavigationContentProps ) { blueprintPreferredVersions={ blueprintPreferredVersions } blueprintSuggestedDomain={ blueprintSuggestedDomain } blueprintSuggestedHttps={ blueprintSuggestedHttps } + blueprintRequiresCustomDomain={ blueprintRequiresCustomDomain } /> @@ -374,6 +382,7 @@ function NavigationContent( props: NavigationContentProps ) { blueprintPreferredVersions={ blueprintPreferredVersions } blueprintSuggestedDomain={ blueprintSuggestedDomain } blueprintSuggestedHttps={ blueprintSuggestedHttps } + blueprintRequiresCustomDomain={ blueprintRequiresCustomDomain } /> @@ -467,6 +476,8 @@ export function AddSiteModalContent( { setBlueprintSuggestedHttps, blueprintSuggestedSiteName, setBlueprintSuggestedSiteName, + blueprintRequiresCustomDomain, + setBlueprintRequiresCustomDomain, selectedRemoteSite, setSelectedRemoteSite, existingDomainNames, @@ -594,6 +605,8 @@ export function AddSiteModalContent( { setBlueprintSuggestedHttps={ setBlueprintSuggestedHttps } blueprintSuggestedSiteName={ blueprintSuggestedSiteName } setBlueprintSuggestedSiteName={ setBlueprintSuggestedSiteName } + blueprintRequiresCustomDomain={ blueprintRequiresCustomDomain } + setBlueprintRequiresCustomDomain={ setBlueprintRequiresCustomDomain } selectedRemoteSite={ selectedRemoteSite } setSelectedRemoteSite={ setSelectedRemoteSite } isDeeplinkFlow={ isDeeplinkFlow } @@ -633,6 +646,7 @@ export default function AddSiteModal( { className }: AddSiteModalProps ) { setBlueprintSuggestedDomain, setBlueprintSuggestedHttps, setBlueprintSuggestedSiteName, + setBlueprintRequiresCustomDomain, setIsDeeplinkFlow, } = addSiteProps; @@ -658,6 +672,7 @@ export default function AddSiteModal( { className }: AddSiteModalProps ) { setBlueprintSuggestedDomain, setBlueprintSuggestedHttps, setBlueprintSuggestedSiteName, + setBlueprintRequiresCustomDomain, setIsDeeplinkFlow, onModalOpen: openModal, } ); From 91957475213c242552727ae6ec4bbc2ba9d65cb7 Mon Sep 17 00:00:00 2001 From: bcotrim Date: Wed, 18 Feb 2026 19:26:15 +0000 Subject: [PATCH 4/9] Fix lint: import order and formatting --- cli/commands/site/create.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/cli/commands/site/create.ts b/cli/commands/site/create.ts index d3c5475cf8..d3c5ce24a2 100644 --- a/cli/commands/site/create.ts +++ b/cli/commands/site/create.ts @@ -10,11 +10,11 @@ import { DEFAULT_WORDPRESS_VERSION, MINIMUM_WORDPRESS_VERSION, } from 'common/constants'; +import { blueprintHasMultisite } from 'common/lib/blueprint-settings'; import { filterUnsupportedBlueprintFeatures, validateBlueprintData, } from 'common/lib/blueprint-validation'; -import { blueprintHasMultisite } from 'common/lib/blueprint-settings'; import { getDomainNameValidationError } from 'common/lib/domains'; import { arePathsEqual, @@ -119,11 +119,7 @@ export async function runCommand( options.blueprint.contents as Record< string, unknown > ); - if ( - blueprint && - blueprintHasMultisite( blueprint ) && - ! options.customDomain - ) { + if ( blueprint && blueprintHasMultisite( blueprint ) && ! options.customDomain ) { throw new LoggerError( __( 'The enableMultisite Blueprint step requires a custom domain. WordPress multisite does not support custom ports. Use --domain .local to set a custom domain.' From 76f16108a6df786ea572b5194e6b44a52a74b7c9 Mon Sep 17 00:00:00 2001 From: bcotrim Date: Wed, 25 Feb 2026 11:11:19 +0000 Subject: [PATCH 5/9] Extract shared applyBlueprintFormValues utility to reduce duplication --- .../tests/use-blueprint-deeplink.test.tsx | 4 +- .../add-site/hooks/use-blueprint-deeplink.ts | 40 ++++--------- apps/studio/src/modules/add-site/index.tsx | 31 +++++----- .../lib/apply-blueprint-form-values.ts | 40 +++++++++++++ package-lock.json | 56 ++++--------------- 5 files changed, 78 insertions(+), 93 deletions(-) create mode 100644 apps/studio/src/modules/add-site/lib/apply-blueprint-form-values.ts diff --git a/apps/studio/src/modules/add-site/hooks/tests/use-blueprint-deeplink.test.tsx b/apps/studio/src/modules/add-site/hooks/tests/use-blueprint-deeplink.test.tsx index f6e5f3a0ee..8dceb40665 100644 --- a/apps/studio/src/modules/add-site/hooks/tests/use-blueprint-deeplink.test.tsx +++ b/apps/studio/src/modules/add-site/hooks/tests/use-blueprint-deeplink.test.tsx @@ -229,8 +229,8 @@ describe( 'useBlueprintDeeplink', () => { } ); } ); - expect( mockSetBlueprintSuggestedDomain ).not.toHaveBeenCalled(); - expect( mockSetBlueprintSuggestedHttps ).not.toHaveBeenCalled(); + expect( mockSetBlueprintSuggestedDomain ).toHaveBeenCalledWith( undefined ); + expect( mockSetBlueprintSuggestedHttps ).toHaveBeenCalledWith( undefined ); } ); it( 'should set site name from setSiteOptions blogname', async () => { diff --git a/apps/studio/src/modules/add-site/hooks/use-blueprint-deeplink.ts b/apps/studio/src/modules/add-site/hooks/use-blueprint-deeplink.ts index ec0cd4e490..5a46a9d6c8 100644 --- a/apps/studio/src/modules/add-site/hooks/use-blueprint-deeplink.ts +++ b/apps/studio/src/modules/add-site/hooks/use-blueprint-deeplink.ts @@ -1,16 +1,13 @@ +import { generateDefaultBlueprintDescription } from '@studio/common/lib/blueprint-settings'; import { - extractFormValuesFromBlueprint, - generateDefaultBlueprintDescription, -} from '@studio/common/lib/blueprint-settings'; -import { - BlueprintValidationWarning, BlueprintPreferredVersions, + BlueprintValidationWarning, } from '@studio/common/lib/blueprint-validation'; -import { useI18n } from '@wordpress/react-i18n'; import { useCallback } from 'react'; import { useIpcListener } from 'src/hooks/use-ipc-listener'; import { getIpcApi } from 'src/lib/get-ipc-api'; import { Blueprint } from 'src/stores/wpcom-api'; +import { applyBlueprintFormValues } from '../lib/apply-blueprint-form-values'; type BlueprintMetadata = { title?: string; @@ -33,7 +30,6 @@ interface UseBlueprintDeeplinkOptions { } export function useBlueprintDeeplink( options: UseBlueprintDeeplinkOptions ): void { - const { __ } = useI18n(); const { isAnySiteProcessing, setSelectedBlueprint, @@ -82,27 +78,15 @@ export function useBlueprintDeeplink( options: UseBlueprintDeeplinkOptions ): vo setSelectedBlueprint( fileBlueprint ); - const formValues = extractFormValuesFromBlueprint( blueprintJson ); - - if ( blueprintJson.preferredVersions ) { - setBlueprintPreferredVersions( - blueprintJson.preferredVersions as BlueprintPreferredVersions - ); - } - if ( formValues.phpVersion ) { - setPhpVersion( formValues.phpVersion ); - } - if ( formValues.wpVersion ) { - setWpVersion( formValues.wpVersion ); - } - if ( formValues.customDomain ) { - setBlueprintSuggestedDomain( formValues.customDomain ); - setBlueprintSuggestedHttps( formValues.enableHttps ); - } - if ( formValues.siteName ) { - setBlueprintSuggestedSiteName( formValues.siteName ); - } - setBlueprintRequiresCustomDomain( !! formValues.requiresCustomDomain ); + applyBlueprintFormValues( blueprintJson, { + setBlueprintPreferredVersions, + setPhpVersion, + setWpVersion, + setBlueprintSuggestedDomain, + setBlueprintSuggestedHttps, + setBlueprintSuggestedSiteName, + setBlueprintRequiresCustomDomain, + } ); setBlueprintWarnings( warnings ); setIsDeeplinkFlow( true ); diff --git a/apps/studio/src/modules/add-site/index.tsx b/apps/studio/src/modules/add-site/index.tsx index 4b176c4713..0c4eae7447 100644 --- a/apps/studio/src/modules/add-site/index.tsx +++ b/apps/studio/src/modules/add-site/index.tsx @@ -1,5 +1,4 @@ import { MINIMUM_WORDPRESS_VERSION } from '@studio/common/constants'; -import { extractFormValuesFromBlueprint } from '@studio/common/lib/blueprint-settings'; import { BlueprintPreferredVersions, BlueprintValidationWarning, @@ -34,6 +33,7 @@ import AddSiteOptions, { type AddSiteFlowType } from './components/options'; import { PullRemoteSite } from './components/pull-remote-site'; import Stepper from './components/stepper'; import { useFindAvailableSiteName } from './hooks/use-find-available-site-name'; +import { applyBlueprintFormValues } from './lib/apply-blueprint-form-values'; type BlueprintsData = ReturnType< typeof useGetBlueprints >[ 'data' ]; @@ -242,7 +242,7 @@ function NavigationContent( props: NavigationContentProps ) { setBlueprintSuggestedSiteName, ] ); - const applyBlueprintFormValues = useCallback( + const handleBlueprintFormValues = useCallback( ( blueprint?: Blueprint ) => { setSelectedBlueprint( blueprint ); @@ -255,18 +255,13 @@ function NavigationContent( props: NavigationContentProps ) { return; } - const formValues = extractFormValuesFromBlueprint( blueprint.blueprint ); - - if ( blueprint.blueprint.preferredVersions ) { - setBlueprintPreferredVersions?.( blueprint.blueprint.preferredVersions ); - } else { - setBlueprintPreferredVersions?.( undefined ); - } - - setBlueprintSuggestedDomain?.( formValues.customDomain ); - setBlueprintSuggestedHttps?.( formValues.enableHttps ); - setBlueprintSuggestedSiteName?.( formValues.siteName ); - setBlueprintRequiresCustomDomain( !! formValues.requiresCustomDomain ); + applyBlueprintFormValues( blueprint.blueprint, { + setBlueprintPreferredVersions, + setBlueprintSuggestedDomain, + setBlueprintSuggestedHttps, + setBlueprintSuggestedSiteName, + setBlueprintRequiresCustomDomain, + } ); }, [ setSelectedBlueprint, @@ -284,18 +279,18 @@ function NavigationContent( props: NavigationContentProps ) { ( b: Blueprint ) => b.slug === blueprintId ); setBlueprintWarnings?.( undefined ); - applyBlueprintFormValues( blueprint ); + handleBlueprintFormValues( blueprint ); }, - [ blueprintsData?.blueprints, setBlueprintWarnings, applyBlueprintFormValues ] + [ blueprintsData?.blueprints, setBlueprintWarnings, handleBlueprintFormValues ] ); const handleFileBlueprintSelect = useCallback( ( blueprint: Blueprint, warnings?: BlueprintValidationWarning[] ) => { - applyBlueprintFormValues( blueprint ); + handleBlueprintFormValues( blueprint ); setBlueprintWarnings?.( warnings ); goTo( '/blueprint/select/details' ); }, - [ applyBlueprintFormValues, setBlueprintWarnings, goTo ] + [ handleBlueprintFormValues, setBlueprintWarnings, goTo ] ); // Build default values with blueprint preferred versions applied diff --git a/apps/studio/src/modules/add-site/lib/apply-blueprint-form-values.ts b/apps/studio/src/modules/add-site/lib/apply-blueprint-form-values.ts new file mode 100644 index 0000000000..3922af61e6 --- /dev/null +++ b/apps/studio/src/modules/add-site/lib/apply-blueprint-form-values.ts @@ -0,0 +1,40 @@ +import { extractFormValuesFromBlueprint } from '@studio/common/lib/blueprint-settings'; +import { BlueprintPreferredVersions } from '@studio/common/lib/blueprint-validation'; +import type { Blueprint } from '@wp-playground/blueprints'; + +interface BlueprintFormValueSetters { + setBlueprintPreferredVersions: ( versions: BlueprintPreferredVersions | undefined ) => void; + setPhpVersion?: ( version: string ) => void; + setWpVersion?: ( version: string ) => void; + setBlueprintSuggestedDomain?: ( domain: string | undefined ) => void; + setBlueprintSuggestedHttps?: ( https: boolean | undefined ) => void; + setBlueprintSuggestedSiteName?: ( name: string | undefined ) => void; + setBlueprintRequiresCustomDomain: ( requires: boolean ) => void; +} + +export function applyBlueprintFormValues( + blueprintJson: Blueprint, + setters: BlueprintFormValueSetters +): void { + const formValues = extractFormValuesFromBlueprint( blueprintJson ); + + if ( blueprintJson.preferredVersions ) { + setters.setBlueprintPreferredVersions( + blueprintJson.preferredVersions as BlueprintPreferredVersions + ); + } else { + setters.setBlueprintPreferredVersions( undefined ); + } + + if ( formValues.phpVersion ) { + setters.setPhpVersion?.( formValues.phpVersion ); + } + if ( formValues.wpVersion ) { + setters.setWpVersion?.( formValues.wpVersion ); + } + + setters.setBlueprintSuggestedDomain?.( formValues.customDomain ); + setters.setBlueprintSuggestedHttps?.( formValues.enableHttps ); + setters.setBlueprintSuggestedSiteName?.( formValues.siteName ); + setters.setBlueprintRequiresCustomDomain( !! formValues.requiresCustomDomain ); +} diff --git a/package-lock.json b/package-lock.json index c87ccaf90b..a0db2b725c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -852,7 +852,6 @@ "version": "7.28.5", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -2561,7 +2560,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -2583,7 +2581,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -3948,7 +3945,6 @@ "node_modules/@emotion/react": { "version": "11.11.3", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.11.0", @@ -4945,7 +4941,6 @@ "node_modules/@inquirer/prompts": { "version": "7.10.1", "license": "MIT", - "peer": true, "dependencies": { "@inquirer/checkbox": "^4.3.2", "@inquirer/confirm": "^5.1.21", @@ -5521,7 +5516,6 @@ "node_modules/@octokit/core": { "version": "5.2.2", "license": "MIT", - "peer": true, "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", @@ -5801,7 +5795,6 @@ "node_modules/@opentelemetry/api": { "version": "1.9.0", "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=8.0.0" } @@ -5819,7 +5812,6 @@ "node_modules/@opentelemetry/context-async-hooks": { "version": "1.30.1", "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=14" }, @@ -5830,7 +5822,6 @@ "node_modules/@opentelemetry/core": { "version": "1.30.1", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, @@ -5851,7 +5842,6 @@ "node_modules/@opentelemetry/instrumentation": { "version": "0.57.2", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", @@ -6207,7 +6197,6 @@ "node_modules/@opentelemetry/resources": { "version": "1.30.1", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" @@ -6229,7 +6218,6 @@ "node_modules/@opentelemetry/sdk-trace-base": { "version": "1.30.1", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", @@ -6252,7 +6240,6 @@ "node_modules/@opentelemetry/semantic-conventions": { "version": "1.37.0", "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=14" } @@ -8417,7 +8404,6 @@ "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.24" @@ -8634,8 +8620,7 @@ "node_modules/@swc/wasm": { "version": "1.13.5", "devOptional": true, - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", @@ -8820,7 +8805,8 @@ "node_modules/@types/aria-query": { "version": "5.0.4", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/aws-lambda": { "version": "8.10.160", @@ -9063,7 +9049,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.11.tgz", "integrity": "sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==", "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -9105,7 +9090,6 @@ "node_modules/@types/react": { "version": "18.3.27", "license": "MIT", - "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.2.2" @@ -9114,7 +9098,6 @@ "node_modules/@types/react-dom": { "version": "18.3.7", "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^18.0.0" } @@ -9234,7 +9217,6 @@ "version": "8.53.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.53.1", "@typescript-eslint/types": "8.53.1", @@ -9845,7 +9827,6 @@ "integrity": "sha512-CGJ25bc8fRi8Lod/3GHSvXRKi7nBo3kxh0ApW4yCjmrWmRmlT53B5E08XRSZRliygG0aVNxLrBEqPYdz/KcCtQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/utils": "4.0.18", "fflate": "^0.8.2", @@ -11358,7 +11339,6 @@ "node_modules/acorn": { "version": "8.15.0", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -12245,7 +12225,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -13698,7 +13677,8 @@ "node_modules/dom-accessibility-api": { "version": "0.5.16", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/dot-case": { "version": "3.0.4", @@ -15090,7 +15070,6 @@ "node_modules/eslint": { "version": "9.39.2", "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -15151,7 +15130,6 @@ "integrity": "sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==", "dev": true, "license": "MIT", - "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -15261,7 +15239,6 @@ "version": "2.32.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -18970,6 +18947,7 @@ "version": "1.5.0", "dev": true, "license": "MIT", + "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -21650,7 +21628,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -21912,7 +21889,6 @@ "version": "3.0.3", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -21940,6 +21916,7 @@ "version": "27.5.1", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -21953,6 +21930,7 @@ "version": "5.2.0", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -21963,7 +21941,8 @@ "node_modules/pretty-format/node_modules/react-is": { "version": "17.0.2", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/proc-log": { "version": "2.0.1", @@ -22320,7 +22299,6 @@ "node_modules/react": { "version": "18.3.1", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -22366,7 +22344,6 @@ "node_modules/react-dom": { "version": "18.3.1", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -22406,7 +22383,6 @@ "node_modules/react-redux": { "version": "9.2.0", "license": "MIT", - "peer": true, "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" @@ -22632,8 +22608,7 @@ }, "node_modules/redux": { "version": "5.0.1", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/redux-thunk": { "version": "3.1.0", @@ -23088,7 +23063,6 @@ "version": "4.50.2", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -23326,7 +23300,6 @@ "version": "8.17.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -24831,7 +24804,6 @@ "version": "4.0.3", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -25294,7 +25266,6 @@ "node_modules/typescript": { "version": "5.9.3", "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -25563,7 +25534,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "napi-postinstall": "^0.3.0" }, @@ -25827,7 +25797,6 @@ "version": "7.3.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -26463,7 +26432,6 @@ "version": "4.0.3", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -26477,7 +26445,6 @@ "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/expect": "4.0.18", "@vitest/mocker": "4.0.18", @@ -27298,7 +27265,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } From 823ee539b43383a9bbb3d5ed055c6134ffc5d40f Mon Sep 17 00:00:00 2001 From: bcotrim Date: Thu, 26 Feb 2026 16:29:31 +0000 Subject: [PATCH 6/9] Inject SQLITE_MAIN_FILE define into db.php dropin --- tools/common/lib/sqlite-integration.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tools/common/lib/sqlite-integration.ts b/tools/common/lib/sqlite-integration.ts index 28da188335..c5b7d40c7a 100644 --- a/tools/common/lib/sqlite-integration.ts +++ b/tools/common/lib/sqlite-integration.ts @@ -49,10 +49,15 @@ export abstract class SqliteIntegrationProvider { const sqliteSourcePath = this.getSqlitePluginSourcePath(); const dbCopyContent = await fs.readFile( path.join( sqliteSourcePath, 'db.copy' ), 'utf8' ); const sqliteDirname = this.getSqliteDirname(); - const updatedContent = dbCopyContent.replace( - "'{SQLITE_IMPLEMENTATION_FOLDER_PATH}'", - `realpath( __DIR__ . '/mu-plugins/${ sqliteDirname }' )` - ); + const updatedContent = dbCopyContent + .replace( + "'{SQLITE_IMPLEMENTATION_FOLDER_PATH}'", + `realpath( __DIR__ . '/mu-plugins/${ sqliteDirname }' )` + ) + .replace( + "define( 'SQLITE_DB_DROPIN_VERSION'", + `define( 'SQLITE_MAIN_FILE', __FILE__ );\ndefine( 'SQLITE_DB_DROPIN_VERSION'` + ); await fs.writeFile( path.join( wpContentPath, 'db.php' ), updatedContent ); const sqliteDestPath = path.join( wpContentPath, 'mu-plugins', sqliteDirname ); From ceff5d51cff60da318e0400ca5685d97145e3050 Mon Sep 17 00:00:00 2001 From: bcotrim Date: Fri, 27 Feb 2026 11:38:51 +0000 Subject: [PATCH 7/9] Use warning notice for multisite custom domain requirement --- .../studio/src/modules/add-site/components/create-site-form.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/studio/src/modules/add-site/components/create-site-form.tsx b/apps/studio/src/modules/add-site/components/create-site-form.tsx index 1d64e91673..24d4b5f5c9 100644 --- a/apps/studio/src/modules/add-site/components/create-site-form.tsx +++ b/apps/studio/src/modules/add-site/components/create-site-form.tsx @@ -544,7 +544,7 @@ export const CreateSiteForm = ( { { blueprintRequiresCustomDomain && ( - + { __( 'WordPress multisite requires a custom domain.' ) } ) } From 54338bca3253b9ba2bc1fc5821ceea87feaffde7 Mon Sep 17 00:00:00 2001 From: bcotrim Date: Fri, 27 Feb 2026 13:01:04 +0000 Subject: [PATCH 8/9] Remove login from unsupported blueprint features after trunk merge --- tools/common/lib/blueprint-validation.ts | 8 +------- tools/common/lib/tests/blueprint-validation.test.ts | 7 ------- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/tools/common/lib/blueprint-validation.ts b/tools/common/lib/blueprint-validation.ts index d26318c3f5..0a73be5b55 100644 --- a/tools/common/lib/blueprint-validation.ts +++ b/tools/common/lib/blueprint-validation.ts @@ -11,13 +11,7 @@ interface UnsupportedFeature { /** * List of blueprint features that are not supported in Studio */ -const UNSUPPORTED_BLUEPRINT_FEATURES: UnsupportedFeature[] = [ - { - type: 'step', - name: 'login', - reason: __( 'Studio automatically creates and logs in the admin user during site creation.' ), - }, -]; +const UNSUPPORTED_BLUEPRINT_FEATURES: UnsupportedFeature[] = []; /** * Blueprint properties that are not supported in Studio diff --git a/tools/common/lib/tests/blueprint-validation.test.ts b/tools/common/lib/tests/blueprint-validation.test.ts index cfd1c6bb9d..9af9fc306f 100644 --- a/tools/common/lib/tests/blueprint-validation.test.ts +++ b/tools/common/lib/tests/blueprint-validation.test.ts @@ -65,12 +65,6 @@ describe( 'validateBlueprintData', () => { it( 'should return warnings for unsupported features', async () => { const blueprint = { landingPage: '/wp-admin/', - steps: [ - { - step: 'login', - username: 'admin', - }, - ], }; const result = await validateBlueprintData( blueprint ); @@ -79,7 +73,6 @@ describe( 'validateBlueprintData', () => { if ( result.valid ) { expect( result.warnings.length ).toBeGreaterThan( 0 ); expect( result.warnings.map( ( w ) => w.feature ) ).toContain( 'landingPage' ); - expect( result.warnings.map( ( w ) => w.feature ) ).toContain( 'login' ); } } ); } ); From 4762b270f1d6e0a36073bdcec62863befbca3716 Mon Sep 17 00:00:00 2001 From: bcotrim Date: Fri, 27 Feb 2026 13:21:46 +0000 Subject: [PATCH 9/9] Add missing extractFormValuesFromBlueprint import in add-site --- apps/studio/src/modules/add-site/index.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/studio/src/modules/add-site/index.tsx b/apps/studio/src/modules/add-site/index.tsx index 7951474714..4f1ab13dc7 100644 --- a/apps/studio/src/modules/add-site/index.tsx +++ b/apps/studio/src/modules/add-site/index.tsx @@ -1,4 +1,5 @@ import { MINIMUM_WORDPRESS_VERSION } from '@studio/common/constants'; +import { extractFormValuesFromBlueprint } from '@studio/common/lib/blueprint-settings'; import { BlueprintPreferredVersions, BlueprintValidationWarning,