From d0e3ee29b0a405492ca23610d7c23ed2b53446b1 Mon Sep 17 00:00:00 2001 From: Chris Huber Date: Tue, 21 Jul 2026 11:06:49 -0400 Subject: [PATCH 1/2] Fix Playground SQLite bootstrap isolation --- package-lock.json | 987 ++++++++---------- package.json | 7 +- packages/runtime-playground/package.json | 14 +- .../src/playground-cli-runner.ts | 59 +- .../src/programmatic-playground-runner.ts | 12 +- ...layground-cli-runner-bootstrap-ini.test.ts | 42 +- 6 files changed, 529 insertions(+), 592 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3de95ea19..25bbc86fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "wp-codebox-workspace", - "version": "0.12.27", + "version": "0.12.29", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "wp-codebox-workspace", - "version": "0.12.27", + "version": "0.12.29", "license": "ISC", "workspaces": [ "packages/*" @@ -15,10 +15,11 @@ "@automattic/wp-codebox-cli": "file:packages/cli", "@automattic/wp-codebox-core": "file:packages/runtime-core", "@automattic/wp-codebox-playground": "file:packages/runtime-playground", - "@php-wasm/node-8-4": "^3.1.45", + "@php-wasm/node-8-4": "3.1.46", + "@php-wasm/universal": "3.1.46", "@types/pngjs": "^6.0.5", - "@wp-playground/cli": "^3.1.35", - "@wp-playground/wordpress-builds": "^0.9.4", + "@wp-playground/cli": "3.1.46", + "@wp-playground/wordpress-builds": "0.9.19", "abort-controller": "^3.0.0", "accepts": "^1.3.8", "aggregate-error": "^3.1.0", @@ -1770,13 +1771,13 @@ "license": "MIT" }, "node_modules/@php-wasm/cli-util": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/cli-util/-/cli-util-3.1.35.tgz", - "integrity": "sha512-qEnMqtqO75d79kYsKz8ikSBoYzIOntF7tmUAcMvJqNrZbKrv59nZ6mkbZUlq+Nie011ZUusoAZOdvIrfSz52OA==", + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/cli-util/-/cli-util-3.1.46.tgz", + "integrity": "sha512-m3bDR/PyiiJzdRMwUBfbXG2VwB+OhrAcCAmLbjB3dkkPxJ7mSCnNbInDY43fkpUuiqTCzamrrgt/tpGdtLPTiQ==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/util": "3.1.35", - "fast-xml-parser": "^5.5.1", + "@php-wasm/util": "3.1.46", + "fast-xml-parser": "^5.8.0", "jsonc-parser": "3.3.1" }, "engines": { @@ -1784,10 +1785,19 @@ "npm": ">=10.2.3" } }, + "node_modules/@php-wasm/cli-util/node_modules/@php-wasm/util": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.1.46.tgz", + "integrity": "sha512-Yh9HNbx+rB2R1tScUvvAsbJVIB7msjWceWYogyR2YvAOqlDL0ymZyaQ65+K3QcHh/8HostTRwwgQh5oK4DLDrA==", + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, "node_modules/@php-wasm/logger": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.1.35.tgz", - "integrity": "sha512-5xIJ6c9Bh/Ja4iYN68p48AQlPFP0LLLANWtW9wwSwXmqpo3AxbV1SpQK0SbjhDLO6Ts1v2jKC6Q0IIV4sJKQ+w==", + "version": "3.1.45", + "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.1.45.tgz", + "integrity": "sha512-FYWGxaRZTM+aiRQ6/LlnFAdsixJ7VWQpM8Fe/61yWgpBamb1w3NEDRhYVR5DNjYWJVI5ha6pVxIsHtw018iA7g==", "license": "GPL-2.0-or-later", "engines": { "node": ">=20.10.0", @@ -1795,26 +1805,26 @@ } }, "node_modules/@php-wasm/node": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/node/-/node-3.1.35.tgz", - "integrity": "sha512-npj9hXlwyUx04DULFe+7ha9YazTPaGoJWEWiXezw6hmFCyP7XkcevArl2r3xRVW58oQz17I7oT6oQPiO4LPgxw==", + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/node/-/node-3.1.46.tgz", + "integrity": "sha512-PHmV+nAQka6l4SB7GyAbkneqnyhTvfjhC9jArKNF7sUDGwVDdvvu0Fh5JRY4G1Eam3Z5gopD4YwDySJCfdq8LA==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/cli-util": "3.1.35", - "@php-wasm/logger": "3.1.35", - "@php-wasm/node-5-2": "3.1.35", - "@php-wasm/node-7-4": "3.1.35", - "@php-wasm/node-8-0": "3.1.35", - "@php-wasm/node-8-1": "3.1.35", - "@php-wasm/node-8-2": "3.1.35", - "@php-wasm/node-8-3": "3.1.35", - "@php-wasm/node-8-4": "3.1.35", - "@php-wasm/node-8-5": "3.1.35", - "@php-wasm/universal": "3.1.35", - "@php-wasm/util": "3.1.35", + "@php-wasm/cli-util": "3.1.46", + "@php-wasm/logger": "3.1.46", + "@php-wasm/node-5-2": "3.1.46", + "@php-wasm/node-7-4": "3.1.46", + "@php-wasm/node-8-0": "3.1.46", + "@php-wasm/node-8-1": "3.1.46", + "@php-wasm/node-8-2": "3.1.46", + "@php-wasm/node-8-3": "3.1.46", + "@php-wasm/node-8-4": "3.1.46", + "@php-wasm/node-8-5": "3.1.46", + "@php-wasm/universal": "3.1.46", + "@php-wasm/util": "3.1.46", "fs-ext-extra-prebuilt": "2.2.7", "wasm-feature-detect": "1.8.0", - "ws": "8.18.0" + "ws": "8.21.0" }, "engines": { "node": ">=20.10.0", @@ -1822,12 +1832,12 @@ } }, "node_modules/@php-wasm/node-5-2": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/node-5-2/-/node-5-2-3.1.35.tgz", - "integrity": "sha512-frJtXTdhIDSlqYWvcbBYrUP/oBDWzStmfdJcsxoRf0171Vr8lhEszs91rVA676T61nIVsstnNkrg4RgfxzYW/A==", + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/node-5-2/-/node-5-2-3.1.46.tgz", + "integrity": "sha512-J77WzhYO0cBPDktaoBZ7y980knhN4/nghhVjv7fj57fWYA1m5ZbCGOqcZUys7sQm/vdahcpaU27vqUCHXBrbZw==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.35", + "@php-wasm/universal": "3.1.46", "wasm-feature-detect": "1.8.0" }, "engines": { @@ -1836,12 +1846,12 @@ } }, "node_modules/@php-wasm/node-7-4": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/node-7-4/-/node-7-4-3.1.35.tgz", - "integrity": "sha512-2xPcC/t+pfkVj0hpPN2oNG1IbQgMplh4YPj2hMtKdxMvmod1OcXShoTHqCNK7ZGFmbT39s1JEIz7nNC7wh0Bjg==", + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/node-7-4/-/node-7-4-3.1.46.tgz", + "integrity": "sha512-HC3li/qX49C5FJKff0X+uewMFzVI5IE2hBhTb0DsJGn5xME1F7W6WoZ4hjrKkIGkjIbATPmiDGspUoHrvmX83A==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.35", + "@php-wasm/universal": "3.1.46", "wasm-feature-detect": "1.8.0" }, "engines": { @@ -1850,12 +1860,12 @@ } }, "node_modules/@php-wasm/node-8-0": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-0/-/node-8-0-3.1.35.tgz", - "integrity": "sha512-uxDuXN8+JOp57lvMN/dtUMF8cwDkZ/MGD/PixTsh0zSK/NSDVGCod0Yvg53hKNzZsd4Qvj6iW7s6+jxQLMPH8A==", + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-0/-/node-8-0-3.1.46.tgz", + "integrity": "sha512-insUfErssn1NpQ3DNpRYOgTRf89/R7j2b7svMOU05J2sb6v3UFSmkKIR8MndxgvgW5uQhvyQyGHVa79B93ykiA==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.35", + "@php-wasm/universal": "3.1.46", "wasm-feature-detect": "1.8.0" }, "engines": { @@ -1864,12 +1874,12 @@ } }, "node_modules/@php-wasm/node-8-1": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-1/-/node-8-1-3.1.35.tgz", - "integrity": "sha512-46zmiajRUW6msk957y1ZhAYPfn+d/j8jQXNFuUUTB6d5NlMvTrvdY4ZdOTjws9yE1k+eqYF39pfIfQIUQtbkqA==", + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-1/-/node-8-1-3.1.46.tgz", + "integrity": "sha512-nPvpbUqAwHmrUSbaLFHgUZDuvyAfo1OfMjLXdgqMjn5nb2QnjlKota4afA/2F6j2WxzjdiXZxro1bSa5fB+OlQ==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.35", + "@php-wasm/universal": "3.1.46", "wasm-feature-detect": "1.8.0" }, "engines": { @@ -1878,12 +1888,12 @@ } }, "node_modules/@php-wasm/node-8-2": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-2/-/node-8-2-3.1.35.tgz", - "integrity": "sha512-Jmpmyij5GuLBEA8WG/EAaKzVnDREXVs8wkBnJ1qti65eVcrtwccpHrhUHVifnuQmh0PRyKk5bxhHyzekwhw3ew==", + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-2/-/node-8-2-3.1.46.tgz", + "integrity": "sha512-CyDiEZjDBQMsrEnNN+1ZOXcgB4K5bYZ8lmYYDdmGnto7U4nAyzPOT+LydkRoLd27AqabJqnimwkryduDptbE/A==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.35", + "@php-wasm/universal": "3.1.46", "wasm-feature-detect": "1.8.0" }, "engines": { @@ -1892,12 +1902,12 @@ } }, "node_modules/@php-wasm/node-8-3": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-3/-/node-8-3-3.1.35.tgz", - "integrity": "sha512-NMn/hAs9PsIshG53QMirfzbI56BtSOjVy+cAaeKvdQ+axLmMVb9CE5VMRuglR9P7bKfh/R61mt8onezKdr1pmQ==", + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-3/-/node-8-3-3.1.46.tgz", + "integrity": "sha512-ZSH1rPvVuhIYJkGE/GRkQtv7RoQlO0IMWkHLJGt+JrTeaDxxm8Mv/F0H67MrA80q43zzNdNQaUEPn+ZrN/GSwg==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.35", + "@php-wasm/universal": "3.1.46", "wasm-feature-detect": "1.8.0" }, "engines": { @@ -1906,12 +1916,12 @@ } }, "node_modules/@php-wasm/node-8-4": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-4/-/node-8-4-3.1.45.tgz", - "integrity": "sha512-QElunKrFEpVa11Fdr6Afmw/gI/bCf5rxzAuXLBYfgghJP2w8sTT0M1ku1pocPEvMGeONbQgvHA06sDdKXhHEMA==", + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-4/-/node-8-4-3.1.46.tgz", + "integrity": "sha512-4Wl7hwp6p3m0jaliIMYJz8cIY7obJF3HKxoHKxOcVllKgP+cSr5c/iwFcgYct4goC9sP7wr/xQGeClGQ51aP0A==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.45", + "@php-wasm/universal": "3.1.46", "wasm-feature-detect": "1.8.0" }, "engines": { @@ -1919,96 +1929,34 @@ "npm": ">=10.2.3" } }, - "node_modules/@php-wasm/node-8-4/node_modules/@php-wasm/logger": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.1.45.tgz", - "integrity": "sha512-FYWGxaRZTM+aiRQ6/LlnFAdsixJ7VWQpM8Fe/61yWgpBamb1w3NEDRhYVR5DNjYWJVI5ha6pVxIsHtw018iA7g==", - "license": "GPL-2.0-or-later", - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/node-8-4/node_modules/@php-wasm/progress": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-3.1.45.tgz", - "integrity": "sha512-rc/I9MSoqAPLRmrgArpWMrSq6s7R16ulrMjG3Ti5T4hfu+j2oxfBCHbrwzR57ITsgecjKZ+G9j/w+saQj9cgpQ==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/logger": "3.1.45" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/node-8-4/node_modules/@php-wasm/stream-compression": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-3.1.45.tgz", - "integrity": "sha512-zLU1AGNEg1tuwm93LHrL8OcV24LyNglTg/CXV5CVZiMPpg1wfIDHJy11qqjZM8iCIJk87qYQhkKOjTnGinAVDg==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/util": "3.1.45" - } - }, - "node_modules/@php-wasm/node-8-4/node_modules/@php-wasm/universal": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-3.1.45.tgz", - "integrity": "sha512-3x0TWQg6NEeO+M/oPA3rAP0hJB2gnsqwkb2sUipz0RQQXRkWEJjdrT20UVmGN/dXILDWeQg/VGxZhCktoWZGkA==", + "node_modules/@php-wasm/node-8-5": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-5/-/node-8-5-3.1.46.tgz", + "integrity": "sha512-ndL2jnGCVVwhAmHPgo3tWZ+I6q2Flz6OWbbQwGVBQcXqqPdZuVHh+0Gb5KTTn1cGtCErdpL+3ysLwN7tk5LqUA==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.1.45", - "@php-wasm/progress": "3.1.45", - "@php-wasm/stream-compression": "3.1.45", - "@php-wasm/util": "3.1.45", - "ini": "4.1.2" + "@php-wasm/universal": "3.1.46", + "wasm-feature-detect": "1.8.0" }, "engines": { "node": ">=20.10.0", "npm": ">=10.2.3" } }, - "node_modules/@php-wasm/node-8-4/node_modules/@php-wasm/util": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.1.45.tgz", - "integrity": "sha512-czXqXd2NJWkapV/zTr3WPSPdcgyI5KN7xSUusYpgkfljSovfvHOKKrTMQtbfPXRa9+MD8LmPQt+XStKPRp76Tg==", - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/node-8-4/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/node-8-5": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-5/-/node-8-5-3.1.35.tgz", - "integrity": "sha512-x12fwavQWnqb/HBkLnEgBiW87G5VgzONKtiU3pC9hjtfBTz3MhENCE7Phyr9N5DYW1SeZX/8gDg7kbV/6RLF0A==", + "node_modules/@php-wasm/node/node_modules/@php-wasm/logger": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.1.46.tgz", + "integrity": "sha512-PfnDq5ammh5FXxkGX1TGEck9gmW3i76IvBCqtX4D45xnSBIuCeu8uf2oWuty2j/c8wTEO8vyRDdvCj5oow7bXw==", "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.35", - "wasm-feature-detect": "1.8.0" - }, "engines": { "node": ">=20.10.0", "npm": ">=10.2.3" } }, - "node_modules/@php-wasm/node/node_modules/@php-wasm/node-8-4": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-4/-/node-8-4-3.1.35.tgz", - "integrity": "sha512-jdhmX9HnrZ7xKhdp4iuTsMYYns46Md9+Rdl3otfcrdWQnfYn5C23J0wUkYVLIbj/cMRcAZVDSoJnxcbCqCYGoQ==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.35", - "wasm-feature-detect": "1.8.0" - }, + "node_modules/@php-wasm/node/node_modules/@php-wasm/util": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.1.46.tgz", + "integrity": "sha512-Yh9HNbx+rB2R1tScUvvAsbJVIB7msjWceWYogyR2YvAOqlDL0ymZyaQ65+K3QcHh/8HostTRwwgQh5oK4DLDrA==", "engines": { "node": ">=20.10.0", "npm": ">=10.2.3" @@ -2028,22 +1976,32 @@ } }, "node_modules/@php-wasm/progress": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-3.1.35.tgz", - "integrity": "sha512-q189opZPpvXVtuTxwEtVuiSqXA3omxLibdWmtT1s+F9K+zO8rLdJb6SzfhV1S2JAYQ4w+PHGyduetNUrEAmVYg==", + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-3.1.46.tgz", + "integrity": "sha512-WmmgEm6yz322M3pzgAUjxckyhpVxr2WWlHyVYDyaMZWU6UIDUHfiRZRPzADohNyYvV3g0/zMNaDGmxz+TTXwQQ==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.1.35" + "@php-wasm/logger": "3.1.46" }, "engines": { "node": ">=20.10.0", "npm": ">=10.2.3" } }, + "node_modules/@php-wasm/progress/node_modules/@php-wasm/logger": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.1.46.tgz", + "integrity": "sha512-PfnDq5ammh5FXxkGX1TGEck9gmW3i76IvBCqtX4D45xnSBIuCeu8uf2oWuty2j/c8wTEO8vyRDdvCj5oow7bXw==", + "license": "GPL-2.0-or-later", + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, "node_modules/@php-wasm/scopes": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/scopes/-/scopes-3.1.35.tgz", - "integrity": "sha512-6StQv8LCp6L9XOLBjnAhiTC6oasEGojk9DGYmLZsC8ZMBkjpLpQ2fBWh3wHAm/RcPh5lrW8Eb3jUWVqwtmEhbA==", + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/scopes/-/scopes-3.1.46.tgz", + "integrity": "sha512-WkH55sjdRSE+FIljMy97ScPIhGLbdVZOSmwXJkctEvmflZqtDIS4fOs9qRKj2dV+Nh4ewyfcWUSf5tTMJnyAuA==", "license": "GPL-2.0-or-later", "engines": { "node": ">=20.10.0", @@ -2051,24 +2009,24 @@ } }, "node_modules/@php-wasm/stream-compression": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-3.1.35.tgz", - "integrity": "sha512-0YQSWF5Y1YIBLEVnY1dcrpGveVDUeTs1hx+uFwA4OrN9ZAMExqmghPCJuIkIRw9b8GNsHwojg/LD/5NXgc8fZQ==", + "version": "3.1.45", + "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-3.1.45.tgz", + "integrity": "sha512-zLU1AGNEg1tuwm93LHrL8OcV24LyNglTg/CXV5CVZiMPpg1wfIDHJy11qqjZM8iCIJk87qYQhkKOjTnGinAVDg==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/util": "3.1.35" + "@php-wasm/util": "3.1.45" } }, "node_modules/@php-wasm/universal": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-3.1.35.tgz", - "integrity": "sha512-/7G87o6Lnux67MMzJFf+y/57Yi7rFQzBKuYLvhAsqg0l5na2m66FMOtTO8vOTYTt0tYcJPlCErenJ6Twd3yElQ==", + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-3.1.46.tgz", + "integrity": "sha512-sx0KyN5kcsCMzwy+XJAyoOukSA5TEZYd0LK3l9kRP3I0CSd5h6JItkf5eZ42WltB+wD+aTRdqSwc/Mvkc7qBjQ==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.1.35", - "@php-wasm/progress": "3.1.35", - "@php-wasm/stream-compression": "3.1.35", - "@php-wasm/util": "3.1.35", + "@php-wasm/logger": "3.1.46", + "@php-wasm/progress": "3.1.46", + "@php-wasm/stream-compression": "3.1.46", + "@php-wasm/util": "3.1.46", "ini": "4.1.2" }, "engines": { @@ -2076,88 +2034,44 @@ "npm": ">=10.2.3" } }, - "node_modules/@php-wasm/universal/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/util": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.1.35.tgz", - "integrity": "sha512-JHbScavYz2yTfP/q1Hsn2Gg5tdQooKpQQXI5XEiTLU6YhaXGEW4hp5U+1hPBHFY+aawnByjIVjRkYfu9+YX2RQ==", - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/web-8-5": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-5/-/web-8-5-3.1.45.tgz", - "integrity": "sha512-5M4qS97yTQTj2CNKSJAWjJms4eqFBNvLnxh7bVn6L+F00KmayKtqH7abyDuX6SSTAk1mATEz7O9HRpMi9E862A==", + "node_modules/@php-wasm/universal/node_modules/@php-wasm/logger": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.1.46.tgz", + "integrity": "sha512-PfnDq5ammh5FXxkGX1TGEck9gmW3i76IvBCqtX4D45xnSBIuCeu8uf2oWuty2j/c8wTEO8vyRDdvCj5oow7bXw==", "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.45", - "wasm-feature-detect": "1.8.0" - }, "engines": { "node": ">=20.10.0", "npm": ">=10.2.3" } }, - "node_modules/@php-wasm/web-8-5/node_modules/@php-wasm/logger": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.1.45.tgz", - "integrity": "sha512-FYWGxaRZTM+aiRQ6/LlnFAdsixJ7VWQpM8Fe/61yWgpBamb1w3NEDRhYVR5DNjYWJVI5ha6pVxIsHtw018iA7g==", + "node_modules/@php-wasm/universal/node_modules/@php-wasm/stream-compression": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-3.1.46.tgz", + "integrity": "sha512-+oUw4CPX52FgYXEh5C+MgJAg7Cy5OeaVuh7HnQR6oxb69nU63/r8tHTLV/WrWRyjBYh321uJzLV7Gg29qmiUtg==", "license": "GPL-2.0-or-later", - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" + "dependencies": { + "@php-wasm/util": "3.1.46" } }, - "node_modules/@php-wasm/web-8-5/node_modules/@php-wasm/progress": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-3.1.45.tgz", - "integrity": "sha512-rc/I9MSoqAPLRmrgArpWMrSq6s7R16ulrMjG3Ti5T4hfu+j2oxfBCHbrwzR57ITsgecjKZ+G9j/w+saQj9cgpQ==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/logger": "3.1.45" - }, + "node_modules/@php-wasm/universal/node_modules/@php-wasm/util": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.1.46.tgz", + "integrity": "sha512-Yh9HNbx+rB2R1tScUvvAsbJVIB7msjWceWYogyR2YvAOqlDL0ymZyaQ65+K3QcHh/8HostTRwwgQh5oK4DLDrA==", "engines": { "node": ">=20.10.0", "npm": ">=10.2.3" } }, - "node_modules/@php-wasm/web-8-5/node_modules/@php-wasm/stream-compression": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-3.1.45.tgz", - "integrity": "sha512-zLU1AGNEg1tuwm93LHrL8OcV24LyNglTg/CXV5CVZiMPpg1wfIDHJy11qqjZM8iCIJk87qYQhkKOjTnGinAVDg==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/util": "3.1.45" - } - }, - "node_modules/@php-wasm/web-8-5/node_modules/@php-wasm/universal": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-3.1.45.tgz", - "integrity": "sha512-3x0TWQg6NEeO+M/oPA3rAP0hJB2gnsqwkb2sUipz0RQQXRkWEJjdrT20UVmGN/dXILDWeQg/VGxZhCktoWZGkA==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/logger": "3.1.45", - "@php-wasm/progress": "3.1.45", - "@php-wasm/stream-compression": "3.1.45", - "@php-wasm/util": "3.1.45", - "ini": "4.1.2" - }, + "node_modules/@php-wasm/universal/node_modules/ini": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "license": "ISC", "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@php-wasm/web-8-5/node_modules/@php-wasm/util": { + "node_modules/@php-wasm/util": { "version": "3.1.45", "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.1.45.tgz", "integrity": "sha512-czXqXd2NJWkapV/zTr3WPSPdcgyI5KN7xSUusYpgkfljSovfvHOKKrTMQtbfPXRa9+MD8LmPQt+XStKPRp76Tg==", @@ -2166,23 +2080,14 @@ "npm": ">=10.2.3" } }, - "node_modules/@php-wasm/web-8-5/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/@php-wasm/web-service-worker": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/web-service-worker/-/web-service-worker-3.1.35.tgz", - "integrity": "sha512-WfPmMSlGKm8t13HlID/8ULZ20bT9ihbioZd9I6VX8ME88cyUK8+N0kzGvAcT9wjvUODrwSBC2dNzKNHpZe1m9w==", + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/web-service-worker/-/web-service-worker-3.1.46.tgz", + "integrity": "sha512-GwQzZbEnF+7a3wGqDaMCdbsCuDUdOvTyHAul40TbSATUZ1FdUVagI94pMMMQtYCCxQFnEuO/WxzwDKJJ3hpaug==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/scopes": "3.1.35", - "@php-wasm/universal": "3.1.35" + "@php-wasm/scopes": "3.1.46", + "@php-wasm/universal": "3.1.46" }, "engines": { "node": ">=20.10.0", @@ -2190,14 +2095,14 @@ } }, "node_modules/@php-wasm/xdebug-bridge": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@php-wasm/xdebug-bridge/-/xdebug-bridge-3.1.35.tgz", - "integrity": "sha512-nIQlvtX+HlixGg6TjQP5reX+KEkBmlrS4339MvIoPbJ7BhH16AR7BmlzaraHIX9CKfCbBo5sbYkA3gKmZfCiOA==", + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/xdebug-bridge/-/xdebug-bridge-3.1.46.tgz", + "integrity": "sha512-no8Hr5Uw6EcwKjwUbBHlu2gTCZ5v4szeQT1AKjDYazM8Mur1AtaL2/q8X0IB8Hy4NDV/Jxgt33lxCh1n8XnnWA==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.1.35", - "@php-wasm/universal": "3.1.35", - "ws": "8.18.0", + "@php-wasm/logger": "3.1.46", + "@php-wasm/universal": "3.1.46", + "ws": "8.21.0", "xml2js": "0.6.2", "yargs": "17.7.2" }, @@ -2209,6 +2114,16 @@ "npm": ">=10.2.3" } }, + "node_modules/@php-wasm/xdebug-bridge/node_modules/@php-wasm/logger": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.1.46.tgz", + "integrity": "sha512-PfnDq5ammh5FXxkGX1TGEck9gmW3i76IvBCqtX4D45xnSBIuCeu8uf2oWuty2j/c8wTEO8vyRDdvCj5oow7bXw==", + "license": "GPL-2.0-or-later", + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, "node_modules/@poppinss/colors": { "version": "4.1.6", "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.6.tgz", @@ -2311,20 +2226,79 @@ } }, "node_modules/@wp-playground/blueprints": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@wp-playground/blueprints/-/blueprints-3.1.35.tgz", - "integrity": "sha512-w3+5CK99q/bCfN/HvRi/Kay3u94w33wkkYKt/Y9GKPTXAgkWkpDm7EuMSvSoOPcq6PLRZuWW/t4HZcP8MqR3EQ==", - "dependencies": { - "@php-wasm/logger": "3.1.35", - "@php-wasm/progress": "3.1.35", - "@php-wasm/stream-compression": "3.1.35", - "@php-wasm/universal": "3.1.35", - "@php-wasm/util": "3.1.35", - "@php-wasm/web-service-worker": "3.1.35", - "@wp-playground/common": "3.1.35", - "@wp-playground/storage": "3.1.35", - "@wp-playground/wordpress": "3.1.35", - "ajv": "8.12.0" + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@wp-playground/blueprints/-/blueprints-3.1.46.tgz", + "integrity": "sha512-3X6AtHU8FyK4XtQKBN6lS3HKWykLl9TQ+t+iM3c6XYtQJatENoKmsZjv/JFgKEo6c+JP4ma8CsEdb6PqwJYEuw==", + "dependencies": { + "@php-wasm/logger": "3.1.46", + "@php-wasm/progress": "3.1.46", + "@php-wasm/stream-compression": "3.1.46", + "@php-wasm/universal": "3.1.46", + "@php-wasm/util": "3.1.46", + "@php-wasm/web-service-worker": "3.1.46", + "@wp-playground/common": "3.1.46", + "@wp-playground/storage": "3.1.46", + "@wp-playground/wordpress": "3.1.46", + "ajv": "8.18.0" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@wp-playground/blueprints/node_modules/@php-wasm/logger": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.1.46.tgz", + "integrity": "sha512-PfnDq5ammh5FXxkGX1TGEck9gmW3i76IvBCqtX4D45xnSBIuCeu8uf2oWuty2j/c8wTEO8vyRDdvCj5oow7bXw==", + "license": "GPL-2.0-or-later", + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@wp-playground/blueprints/node_modules/@php-wasm/stream-compression": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-3.1.46.tgz", + "integrity": "sha512-+oUw4CPX52FgYXEh5C+MgJAg7Cy5OeaVuh7HnQR6oxb69nU63/r8tHTLV/WrWRyjBYh321uJzLV7Gg29qmiUtg==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/util": "3.1.46" + } + }, + "node_modules/@wp-playground/blueprints/node_modules/@php-wasm/util": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.1.46.tgz", + "integrity": "sha512-Yh9HNbx+rB2R1tScUvvAsbJVIB7msjWceWYogyR2YvAOqlDL0ymZyaQ65+K3QcHh/8HostTRwwgQh5oK4DLDrA==", + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@wp-playground/blueprints/node_modules/@wp-playground/common": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-3.1.46.tgz", + "integrity": "sha512-MZ4ZSsh9GG7oHYhe38T+9uW6mGDvlwoH8IyJWNJN/PgH5SPPUHnP1CtmiMTl/p+sOf4ELf4A/REa16OtoJ83Qg==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/universal": "3.1.46", + "@php-wasm/util": "3.1.46" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@wp-playground/blueprints/node_modules/@wp-playground/wordpress": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-3.1.46.tgz", + "integrity": "sha512-QGzxrSmlm3ewiyU6NB2VDMgqZ5ZPuuSsPg4YkRnQrX489v0ohqCLp/jUe/+5nvXKGNg4KnR/37QrerEtLryXcw==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/logger": "3.1.46", + "@php-wasm/universal": "3.1.46", + "@php-wasm/util": "3.1.46", + "@wp-playground/common": "3.1.46", + "zstddec": "^0.2.0" }, "engines": { "node": ">=20.10.0", @@ -2332,24 +2306,24 @@ } }, "node_modules/@wp-playground/cli": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@wp-playground/cli/-/cli-3.1.35.tgz", - "integrity": "sha512-QpTWJ+eacdJ+yk2AbjaVJqI3P6iME1drpMOr/uT+U8EQMjDgHQA9nbkh/yux+m7sjFd1UE+/ajT5QZZ7kDWv9Q==", + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@wp-playground/cli/-/cli-3.1.46.tgz", + "integrity": "sha512-rn20w2Fp72wwnnOB+UyvvZ9zRx1dsPXC7KSMgJFEvoLNEVdp3bXcvyv8U5XZpeAPqkZB7nhMJDwOhcLR4SqVOA==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/cli-util": "3.1.35", - "@php-wasm/logger": "3.1.35", - "@php-wasm/node": "3.1.35", - "@php-wasm/progress": "3.1.35", - "@php-wasm/universal": "3.1.35", - "@php-wasm/util": "3.1.35", - "@php-wasm/xdebug-bridge": "3.1.35", - "@wp-playground/blueprints": "3.1.35", - "@wp-playground/common": "3.1.35", - "@wp-playground/storage": "3.1.35", - "@wp-playground/tools": "3.1.35", - "@wp-playground/wordpress": "3.1.35", - "express": "4.22.0", + "@php-wasm/cli-util": "3.1.46", + "@php-wasm/logger": "3.1.46", + "@php-wasm/node": "3.1.46", + "@php-wasm/progress": "3.1.46", + "@php-wasm/universal": "3.1.46", + "@php-wasm/util": "3.1.46", + "@php-wasm/xdebug-bridge": "3.1.46", + "@wp-playground/blueprints": "3.1.46", + "@wp-playground/common": "3.1.46", + "@wp-playground/storage": "3.1.46", + "@wp-playground/tools": "3.1.46", + "@wp-playground/wordpress": "3.1.46", + "express": "4.22.2", "fs-extra": "11.1.1", "tmp-promise": "3.0.3", "wasm-feature-detect": "1.8.0", @@ -2359,6 +2333,56 @@ "wp-playground-cli": "wp-playground.js" } }, + "node_modules/@wp-playground/cli/node_modules/@php-wasm/logger": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.1.46.tgz", + "integrity": "sha512-PfnDq5ammh5FXxkGX1TGEck9gmW3i76IvBCqtX4D45xnSBIuCeu8uf2oWuty2j/c8wTEO8vyRDdvCj5oow7bXw==", + "license": "GPL-2.0-or-later", + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@wp-playground/cli/node_modules/@php-wasm/util": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.1.46.tgz", + "integrity": "sha512-Yh9HNbx+rB2R1tScUvvAsbJVIB7msjWceWYogyR2YvAOqlDL0ymZyaQ65+K3QcHh/8HostTRwwgQh5oK4DLDrA==", + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@wp-playground/cli/node_modules/@wp-playground/common": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-3.1.46.tgz", + "integrity": "sha512-MZ4ZSsh9GG7oHYhe38T+9uW6mGDvlwoH8IyJWNJN/PgH5SPPUHnP1CtmiMTl/p+sOf4ELf4A/REa16OtoJ83Qg==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/universal": "3.1.46", + "@php-wasm/util": "3.1.46" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@wp-playground/cli/node_modules/@wp-playground/wordpress": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-3.1.46.tgz", + "integrity": "sha512-QGzxrSmlm3ewiyU6NB2VDMgqZ5ZPuuSsPg4YkRnQrX489v0ohqCLp/jUe/+5nvXKGNg4KnR/37QrerEtLryXcw==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/logger": "3.1.46", + "@php-wasm/universal": "3.1.46", + "@php-wasm/util": "3.1.46", + "@wp-playground/common": "3.1.46", + "zstddec": "^0.2.0" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, "node_modules/@wp-playground/cli/node_modules/fs-extra": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", @@ -2374,32 +2398,72 @@ } }, "node_modules/@wp-playground/common": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-3.1.35.tgz", - "integrity": "sha512-KVU5JWgCVjFU1SJ8PeaIl82oijCqs43JWRR5rfjgfJbDxXl6ntPfY/elPe7eI3noMoeyFJ10pAAO1ESXGWxygA==", + "version": "3.1.45", + "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-3.1.45.tgz", + "integrity": "sha512-dhVGdPqp4D0RhodW9sxdI3gdKPI98ue0oyXX4AeL4toLvjzKF1nz3AwniojsuHbJr0RV0QhA/Z2rYcTjynLD8A==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/universal": "3.1.45", + "@php-wasm/util": "3.1.45" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@wp-playground/common/node_modules/@php-wasm/progress": { + "version": "3.1.45", + "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-3.1.45.tgz", + "integrity": "sha512-rc/I9MSoqAPLRmrgArpWMrSq6s7R16ulrMjG3Ti5T4hfu+j2oxfBCHbrwzR57ITsgecjKZ+G9j/w+saQj9cgpQ==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.35", - "@php-wasm/util": "3.1.35" + "@php-wasm/logger": "3.1.45" }, "engines": { "node": ">=20.10.0", "npm": ">=10.2.3" } }, + "node_modules/@wp-playground/common/node_modules/@php-wasm/universal": { + "version": "3.1.45", + "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-3.1.45.tgz", + "integrity": "sha512-3x0TWQg6NEeO+M/oPA3rAP0hJB2gnsqwkb2sUipz0RQQXRkWEJjdrT20UVmGN/dXILDWeQg/VGxZhCktoWZGkA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/logger": "3.1.45", + "@php-wasm/progress": "3.1.45", + "@php-wasm/stream-compression": "3.1.45", + "@php-wasm/util": "3.1.45", + "ini": "4.1.2" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@wp-playground/common/node_modules/ini": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/@wp-playground/storage": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@wp-playground/storage/-/storage-3.1.35.tgz", - "integrity": "sha512-De7zdHGwBuwQE+kO1p0EGkN8jBim/QJ8ftjRuymxDJXzNimdLmfedqSNa0ajpNcRSq0HKFz/gyxpcWq1hSDnCw==", + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@wp-playground/storage/-/storage-3.1.46.tgz", + "integrity": "sha512-NH9Tkt4WBpFtgZ6KrUkPJygsjzbbN1UVQ7IBawQba4dB2mjx2HNznUT3qyCPpQL6Vn8dO9YFHQ4fRLxvWbeCpw==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/stream-compression": "3.1.35", - "@php-wasm/universal": "3.1.35", - "@php-wasm/util": "3.1.35", + "@php-wasm/stream-compression": "3.1.46", + "@php-wasm/universal": "3.1.46", + "@php-wasm/util": "3.1.46", "@zip.js/zip.js": "2.7.57", "isomorphic-git": "1.37.6", "octokit": "3.1.2", - "pako": "^1.0.10" + "pako": "^1.0.10", + "sha.js": "2.4.12" } }, "node_modules/@wp-playground/storage/node_modules/@octokit/openapi-types": { @@ -2447,6 +2511,24 @@ "@octokit/openapi-types": "^20.0.0" } }, + "node_modules/@wp-playground/storage/node_modules/@php-wasm/stream-compression": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-3.1.46.tgz", + "integrity": "sha512-+oUw4CPX52FgYXEh5C+MgJAg7Cy5OeaVuh7HnQR6oxb69nU63/r8tHTLV/WrWRyjBYh321uJzLV7Gg29qmiUtg==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/util": "3.1.46" + } + }, + "node_modules/@wp-playground/storage/node_modules/@php-wasm/util": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.1.46.tgz", + "integrity": "sha512-Yh9HNbx+rB2R1tScUvvAsbJVIB7msjWceWYogyR2YvAOqlDL0ymZyaQ65+K3QcHh/8HostTRwwgQh5oK4DLDrA==", + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, "node_modules/@wp-playground/storage/node_modules/isomorphic-git": { "version": "1.37.6", "resolved": "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.37.6.tgz", @@ -2494,12 +2576,12 @@ } }, "node_modules/@wp-playground/tools": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@wp-playground/tools/-/tools-3.1.35.tgz", - "integrity": "sha512-tQHcCBmlV7FLj/4YO+3F166/n8J+UNSeJpOnYUrAUiVJjsACoQETYrcal2hejJViEk5KRYlPIISTQeHb9RxBGA==", + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@wp-playground/tools/-/tools-3.1.46.tgz", + "integrity": "sha512-rSov51gL1HnxgXkhw2TO9EIuldj3aaBYPGQ+MQsmF5adV5CSYdw+wq2ZJS/wpUiePyv6gvdZJTWaVqbjINFc2w==", "license": "GPL-2.0-or-later", "dependencies": { - "@wp-playground/blueprints": "3.1.35" + "@wp-playground/blueprints": "3.1.46" }, "engines": { "node": ">=20.10.0", @@ -2507,15 +2589,16 @@ } }, "node_modules/@wp-playground/wordpress": { - "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-3.1.35.tgz", - "integrity": "sha512-agJyrrlrsIhMYPHsWZudgHnNGOHda8Jg+kX6TB91wgUR581QiXWv0cfubBnNpIKO+4pI6rOSopUu/5T7YKhhZQ==", + "version": "3.1.45", + "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-3.1.45.tgz", + "integrity": "sha512-kQqx7m4oKRnSmTxiwdwVnUGetJINHVULMURff2+JZ4EGLqAUVscyCQ4YvQMnIho6gASyzt8TYLr3GqxU+1n6AA==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.1.35", - "@php-wasm/universal": "3.1.35", - "@php-wasm/util": "3.1.35", - "@wp-playground/common": "3.1.35" + "@php-wasm/logger": "3.1.45", + "@php-wasm/universal": "3.1.45", + "@php-wasm/util": "3.1.45", + "@wp-playground/common": "3.1.45", + "zstddec": "^0.2.0" }, "engines": { "node": ">=20.10.0", @@ -2532,6 +2615,45 @@ "npm": ">=8.11.0" } }, + "node_modules/@wp-playground/wordpress/node_modules/@php-wasm/progress": { + "version": "3.1.45", + "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-3.1.45.tgz", + "integrity": "sha512-rc/I9MSoqAPLRmrgArpWMrSq6s7R16ulrMjG3Ti5T4hfu+j2oxfBCHbrwzR57ITsgecjKZ+G9j/w+saQj9cgpQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/logger": "3.1.45" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@wp-playground/wordpress/node_modules/@php-wasm/universal": { + "version": "3.1.45", + "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-3.1.45.tgz", + "integrity": "sha512-3x0TWQg6NEeO+M/oPA3rAP0hJB2gnsqwkb2sUipz0RQQXRkWEJjdrT20UVmGN/dXILDWeQg/VGxZhCktoWZGkA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/logger": "3.1.45", + "@php-wasm/progress": "3.1.45", + "@php-wasm/stream-compression": "3.1.45", + "@php-wasm/util": "3.1.45", + "ini": "4.1.2" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@wp-playground/wordpress/node_modules/ini": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/@zip.js/zip.js": { "version": "2.7.57", "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.57.tgz", @@ -5047,7 +5169,7 @@ }, "packages/cli": { "name": "@automattic/wp-codebox-cli", - "version": "0.12.27", + "version": "0.12.29", "dependencies": { "@automattic/wp-codebox-core": "file:../runtime-core", "@automattic/wp-codebox-playground": "file:../runtime-playground" @@ -5067,16 +5189,6 @@ "@wp-playground/wordpress": "3.1.45" } }, - "packages/runtime-cloudflare/node_modules/@php-wasm/logger": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.1.45.tgz", - "integrity": "sha512-FYWGxaRZTM+aiRQ6/LlnFAdsixJ7VWQpM8Fe/61yWgpBamb1w3NEDRhYVR5DNjYWJVI5ha6pVxIsHtw018iA7g==", - "license": "GPL-2.0-or-later", - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, "packages/runtime-cloudflare/node_modules/@php-wasm/progress": { "version": "3.1.45", "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-3.1.45.tgz", @@ -5090,15 +5202,6 @@ "npm": ">=10.2.3" } }, - "packages/runtime-cloudflare/node_modules/@php-wasm/stream-compression": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-3.1.45.tgz", - "integrity": "sha512-zLU1AGNEg1tuwm93LHrL8OcV24LyNglTg/CXV5CVZiMPpg1wfIDHJy11qqjZM8iCIJk87qYQhkKOjTnGinAVDg==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/util": "3.1.45" - } - }, "packages/runtime-cloudflare/node_modules/@php-wasm/universal": { "version": "3.1.45", "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-3.1.45.tgz", @@ -5116,40 +5219,14 @@ "npm": ">=10.2.3" } }, - "packages/runtime-cloudflare/node_modules/@php-wasm/util": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.1.45.tgz", - "integrity": "sha512-czXqXd2NJWkapV/zTr3WPSPdcgyI5KN7xSUusYpgkfljSovfvHOKKrTMQtbfPXRa9+MD8LmPQt+XStKPRp76Tg==", - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "packages/runtime-cloudflare/node_modules/@wp-playground/common": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-3.1.45.tgz", - "integrity": "sha512-dhVGdPqp4D0RhodW9sxdI3gdKPI98ue0oyXX4AeL4toLvjzKF1nz3AwniojsuHbJr0RV0QhA/Z2rYcTjynLD8A==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.45", - "@php-wasm/util": "3.1.45" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "packages/runtime-cloudflare/node_modules/@wp-playground/wordpress": { + "packages/runtime-cloudflare/node_modules/@php-wasm/web-8-5": { "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-3.1.45.tgz", - "integrity": "sha512-kQqx7m4oKRnSmTxiwdwVnUGetJINHVULMURff2+JZ4EGLqAUVscyCQ4YvQMnIho6gASyzt8TYLr3GqxU+1n6AA==", + "resolved": "https://registry.npmjs.org/@php-wasm/web-8-5/-/web-8-5-3.1.45.tgz", + "integrity": "sha512-5M4qS97yTQTj2CNKSJAWjJms4eqFBNvLnxh7bVn6L+F00KmayKtqH7abyDuX6SSTAk1mATEz7O9HRpMi9E862A==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.1.45", "@php-wasm/universal": "3.1.45", - "@php-wasm/util": "3.1.45", - "@wp-playground/common": "3.1.45", - "zstddec": "^0.2.0" + "wasm-feature-detect": "1.8.0" }, "engines": { "node": ">=20.10.0", @@ -5167,249 +5244,79 @@ }, "packages/runtime-core": { "name": "@automattic/wp-codebox-core", - "version": "0.12.27", + "version": "0.12.29", "dependencies": { "ajv": "^8.20.0" } }, "packages/runtime-playground": { "name": "@automattic/wp-codebox-playground", - "version": "0.12.27", + "version": "0.12.29", "dependencies": { "@automattic/wp-codebox-core": "file:../runtime-core", - "@php-wasm/node": "^3.1.45", - "@php-wasm/universal": "^3.1.35", + "@php-wasm/node": "3.1.46", + "@php-wasm/universal": "3.1.46", "@types/pngjs": "^6.0.5", - "@wp-playground/blueprints": "^3.1.35", - "@wp-playground/cli": "^3.1.35", - "@wp-playground/storage": "^3.1.35", - "@wp-playground/wordpress": "^3.1.35", - "@wp-playground/wordpress-builds": "^0.9.4", + "@wp-playground/blueprints": "3.1.46", + "@wp-playground/cli": "3.1.46", + "@wp-playground/storage": "3.1.46", + "@wp-playground/wordpress": "3.1.46", + "@wp-playground/wordpress-builds": "0.9.19", "pixelmatch": "^7.2.0", "playwright": "^1.60.0", "pngjs": "^7.0.0" } }, - "packages/runtime-playground/node_modules/@php-wasm/cli-util": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/cli-util/-/cli-util-3.1.45.tgz", - "integrity": "sha512-+ht22B6KPUsn5ORtApE5xYq+uIb7/Qv/NSOxYgNGSWf3O1rpxkbOMeCxtE7H3dvazJIlSF+/nsVHpHkcTZGOpA==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/util": "3.1.45", - "fast-xml-parser": "^5.8.0", - "jsonc-parser": "3.3.1" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, "packages/runtime-playground/node_modules/@php-wasm/logger": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.1.45.tgz", - "integrity": "sha512-FYWGxaRZTM+aiRQ6/LlnFAdsixJ7VWQpM8Fe/61yWgpBamb1w3NEDRhYVR5DNjYWJVI5ha6pVxIsHtw018iA7g==", - "license": "GPL-2.0-or-later", - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "packages/runtime-playground/node_modules/@php-wasm/node": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/node/-/node-3.1.45.tgz", - "integrity": "sha512-IFnGdNsQ0g8RwpFzg3gAt8VckFwshQ7g2Izwt+i+wi2Rtnj54DcPZpfMwliiq+c1XU1//jtXHBdczbwR75yW7A==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/cli-util": "3.1.45", - "@php-wasm/logger": "3.1.45", - "@php-wasm/node-5-2": "3.1.45", - "@php-wasm/node-7-4": "3.1.45", - "@php-wasm/node-8-0": "3.1.45", - "@php-wasm/node-8-1": "3.1.45", - "@php-wasm/node-8-2": "3.1.45", - "@php-wasm/node-8-3": "3.1.45", - "@php-wasm/node-8-4": "3.1.45", - "@php-wasm/node-8-5": "3.1.45", - "@php-wasm/universal": "3.1.45", - "@php-wasm/util": "3.1.45", - "fs-ext-extra-prebuilt": "2.2.7", - "wasm-feature-detect": "1.8.0", - "ws": "8.21.0" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "packages/runtime-playground/node_modules/@php-wasm/node-5-2": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/node-5-2/-/node-5-2-3.1.45.tgz", - "integrity": "sha512-mKYOI8/eWE7Gu9wOOwtcxGrhOfCfGlIqT3Jr1RK0qCsZ/GkiW2/EalsNC5wSWbaL9qdh4JUbXUoF7mE3dc+KRQ==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.45", - "wasm-feature-detect": "1.8.0" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "packages/runtime-playground/node_modules/@php-wasm/node-7-4": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/node-7-4/-/node-7-4-3.1.45.tgz", - "integrity": "sha512-3+VgXIL4y4Acb/OyNQAsIfz5I5GYlFmjw4M8l2Xx8TNBrixuOEO5vHmMoTssynZlmjoTLxBBzL2SaRHoubwi6g==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.45", - "wasm-feature-detect": "1.8.0" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "packages/runtime-playground/node_modules/@php-wasm/node-8-0": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-0/-/node-8-0-3.1.45.tgz", - "integrity": "sha512-6yJaW+mxgBWAy80IYRU41bh1LH4WsuDgqEWiHSumJcKOcNljSedUbm+YuLTY+Pnsov7u5yzkaBskslxGXcOlIQ==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.45", - "wasm-feature-detect": "1.8.0" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "packages/runtime-playground/node_modules/@php-wasm/node-8-1": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-1/-/node-8-1-3.1.45.tgz", - "integrity": "sha512-/5haLrmCySu40aDGtVAOukDBNYzCJ0JTXslXs36Rh8P9V2nlctVGO+Kp1m/74yCtdoJrZsRrBnVqKBCliVQjdg==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.45", - "wasm-feature-detect": "1.8.0" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "packages/runtime-playground/node_modules/@php-wasm/node-8-2": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-2/-/node-8-2-3.1.45.tgz", - "integrity": "sha512-fGsSHw6OTnNyjr6k87OqV8SYqRZlDrWYVSXFkOywXUbBvyAYeuttxHffYC4VoRZdRz+Ygu+2k2aPE06jpTTBFw==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.45", - "wasm-feature-detect": "1.8.0" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "packages/runtime-playground/node_modules/@php-wasm/node-8-3": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-3/-/node-8-3-3.1.45.tgz", - "integrity": "sha512-dq22w7k6zxSgRKEjFej2k2etHpWA/f6UZFQCwi0qPFTejlVRfGqJoY+6gwtF4PCCGXGD7J36XyRuSFuZz833MA==", + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.1.46.tgz", + "integrity": "sha512-PfnDq5ammh5FXxkGX1TGEck9gmW3i76IvBCqtX4D45xnSBIuCeu8uf2oWuty2j/c8wTEO8vyRDdvCj5oow7bXw==", "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.45", - "wasm-feature-detect": "1.8.0" - }, "engines": { "node": ">=20.10.0", "npm": ">=10.2.3" } }, - "packages/runtime-playground/node_modules/@php-wasm/node-8-5": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-5/-/node-8-5-3.1.45.tgz", - "integrity": "sha512-FeKtaRMZorN1uRFbC6DILfv+Y9ImEMLjcpNVyT7zZ4WHPEf1yN0Q0Jo8VH9NNwCmkmiDAQN2gAIn3nKL8vsz+g==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.45", - "wasm-feature-detect": "1.8.0" - }, + "packages/runtime-playground/node_modules/@php-wasm/util": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.1.46.tgz", + "integrity": "sha512-Yh9HNbx+rB2R1tScUvvAsbJVIB7msjWceWYogyR2YvAOqlDL0ymZyaQ65+K3QcHh/8HostTRwwgQh5oK4DLDrA==", "engines": { "node": ">=20.10.0", "npm": ">=10.2.3" } }, - "packages/runtime-playground/node_modules/@php-wasm/progress": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-3.1.45.tgz", - "integrity": "sha512-rc/I9MSoqAPLRmrgArpWMrSq6s7R16ulrMjG3Ti5T4hfu+j2oxfBCHbrwzR57ITsgecjKZ+G9j/w+saQj9cgpQ==", + "packages/runtime-playground/node_modules/@wp-playground/common": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-3.1.46.tgz", + "integrity": "sha512-MZ4ZSsh9GG7oHYhe38T+9uW6mGDvlwoH8IyJWNJN/PgH5SPPUHnP1CtmiMTl/p+sOf4ELf4A/REa16OtoJ83Qg==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.1.45" + "@php-wasm/universal": "3.1.46", + "@php-wasm/util": "3.1.46" }, "engines": { "node": ">=20.10.0", "npm": ">=10.2.3" } }, - "packages/runtime-playground/node_modules/@php-wasm/stream-compression": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-3.1.45.tgz", - "integrity": "sha512-zLU1AGNEg1tuwm93LHrL8OcV24LyNglTg/CXV5CVZiMPpg1wfIDHJy11qqjZM8iCIJk87qYQhkKOjTnGinAVDg==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/util": "3.1.45" - } - }, - "packages/runtime-playground/node_modules/@php-wasm/universal": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-3.1.45.tgz", - "integrity": "sha512-3x0TWQg6NEeO+M/oPA3rAP0hJB2gnsqwkb2sUipz0RQQXRkWEJjdrT20UVmGN/dXILDWeQg/VGxZhCktoWZGkA==", + "packages/runtime-playground/node_modules/@wp-playground/wordpress": { + "version": "3.1.46", + "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-3.1.46.tgz", + "integrity": "sha512-QGzxrSmlm3ewiyU6NB2VDMgqZ5ZPuuSsPg4YkRnQrX489v0ohqCLp/jUe/+5nvXKGNg4KnR/37QrerEtLryXcw==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.1.45", - "@php-wasm/progress": "3.1.45", - "@php-wasm/stream-compression": "3.1.45", - "@php-wasm/util": "3.1.45", - "ini": "4.1.2" + "@php-wasm/logger": "3.1.46", + "@php-wasm/universal": "3.1.46", + "@php-wasm/util": "3.1.46", + "@wp-playground/common": "3.1.46", + "zstddec": "^0.2.0" }, "engines": { "node": ">=20.10.0", "npm": ">=10.2.3" } }, - "packages/runtime-playground/node_modules/@php-wasm/util": { - "version": "3.1.45", - "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.1.45.tgz", - "integrity": "sha512-czXqXd2NJWkapV/zTr3WPSPdcgyI5KN7xSUusYpgkfljSovfvHOKKrTMQtbfPXRa9+MD8LmPQt+XStKPRp76Tg==", - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "packages/runtime-playground/node_modules/fs-ext-extra-prebuilt": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fs-ext-extra-prebuilt/-/fs-ext-extra-prebuilt-2.2.7.tgz", - "integrity": "sha512-Q7rayYRBDIvDF01HWOwSSjoaP+05N1g+o3BXL1Zf8Frw2JkjSmi4EtvCBITuW30l6hB2m2TW1pehdh8wyU/+gw==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "nan": "^2.24.0" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "packages/runtime-playground/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "packages/wordpress-plugin": { "name": "wp-codebox-wordpress-plugin", "version": "0.8.0" diff --git a/package.json b/package.json index e5d09a9ac..17a376dd9 100644 --- a/package.json +++ b/package.json @@ -269,10 +269,11 @@ "@automattic/wp-codebox-cli": "file:packages/cli", "@automattic/wp-codebox-core": "file:packages/runtime-core", "@automattic/wp-codebox-playground": "file:packages/runtime-playground", - "@php-wasm/node-8-4": "^3.1.45", + "@php-wasm/node-8-4": "3.1.46", + "@php-wasm/universal": "3.1.46", "@types/pngjs": "^6.0.5", - "@wp-playground/cli": "^3.1.35", - "@wp-playground/wordpress-builds": "^0.9.4", + "@wp-playground/cli": "3.1.46", + "@wp-playground/wordpress-builds": "0.9.19", "abort-controller": "^3.0.0", "accepts": "^1.3.8", "aggregate-error": "^3.1.0", diff --git a/packages/runtime-playground/package.json b/packages/runtime-playground/package.json index 39876af08..2056eed36 100644 --- a/packages/runtime-playground/package.json +++ b/packages/runtime-playground/package.json @@ -22,13 +22,13 @@ }, "dependencies": { "@automattic/wp-codebox-core": "file:../runtime-core", - "@php-wasm/node": "^3.1.45", - "@php-wasm/universal": "^3.1.35", - "@wp-playground/blueprints": "^3.1.35", - "@wp-playground/cli": "^3.1.35", - "@wp-playground/storage": "^3.1.35", - "@wp-playground/wordpress": "^3.1.35", - "@wp-playground/wordpress-builds": "^0.9.4", + "@php-wasm/node": "3.1.46", + "@php-wasm/universal": "3.1.46", + "@wp-playground/blueprints": "3.1.46", + "@wp-playground/cli": "3.1.46", + "@wp-playground/storage": "3.1.46", + "@wp-playground/wordpress": "3.1.46", + "@wp-playground/wordpress-builds": "0.9.19", "@types/pngjs": "^6.0.5", "pixelmatch": "^7.2.0", "pngjs": "^7.0.0", diff --git a/packages/runtime-playground/src/playground-cli-runner.ts b/packages/runtime-playground/src/playground-cli-runner.ts index 2b8663122..0d15cf76f 100644 --- a/packages/runtime-playground/src/playground-cli-runner.ts +++ b/packages/runtime-playground/src/playground-cli-runner.ts @@ -6,8 +6,8 @@ import { normalizeLiveProgressEvent, previewLease, type BrowserStartupProgressEv import { randomInt } from "node:crypto" import { existsSync } from "node:fs" import { createServer as createHttpServer, type Server as HttpServer } from "node:http" -import { mkdir, readFile, rename, rm, stat, unlink, writeFile } from "node:fs/promises" -import { homedir } from "node:os" +import { mkdir, mkdtemp, readFile, rename, rm, stat, unlink, writeFile } from "node:fs/promises" +import { homedir, tmpdir } from "node:os" import { basename, dirname, join } from "node:path" import { createServer as createNetServer } from "node:net" import * as PlaygroundStorage from "@wp-playground/storage" @@ -110,14 +110,14 @@ export async function startPlaygroundCliServer(spec: RuntimeCreateSpec, mounts: phpIniEntries: pluginRuntimePhpIniEntries(spec), wordpressDirectory: wordpressDirectory!, wordpressInstallMode, - sharedPhpIniContent: phpIniContent(bootstrapIniEntries!), + sharedPhpIniContent: phpIniContent(bootstrapIniEntries!, "/internal/wp-codebox/auto_prepend_file.php"), }) }, Boolean(spec.preview?.port)) : await startPlaygroundCliWithDynamicPortRetry(async (port) => { const { runCLI } = options.cliModule ?? (await import("@wp-playground/cli")) as unknown as PlaygroundCliModule const localAssetServer = wordpressStartupAsset?.localPath ? await serveLocalStartupAsset(wordpressStartupAsset.localPath) : undefined - const bootstrapSharedMount = await pluginRuntimeBootstrapSharedMount(spec) + const bootstrapMount = await pluginRuntimeBootstrapMount(spec) try { - return await runCLI({ + const server = await runCLI({ command: "server", port, quiet: true, @@ -130,21 +130,40 @@ export async function startPlaygroundCliServer(spec: RuntimeCreateSpec, mounts: vfsPath: mount.target, })), ], - ...(wordpressDirectory || bootstrapSharedMount ? { + ...(wordpressDirectory || bootstrapMount ? { "mount-before-install": [ - ...(bootstrapSharedMount ? [bootstrapSharedMount] : []), + ...(bootstrapMount ? [bootstrapMount] : []), ...(wordpressDirectory ? [{ hostPath: wordpressDirectory, vfsPath: "/wordpress" }] : []), ], - wordpressInstallMode, } : {}), + ...(wordpressDirectory ? { wordpressInstallMode } : {}), wp: localAssetServer?.url ?? wordpressStartupAsset?.wp, php: spec.environment.phpVersion, skipSqliteSetup: spec.environment.databaseSetup === "external", ...(spec.environment.extensions?.length ? { phpExtension: spec.environment.extensions.map((extension) => extension.manifest) } : {}), - phpIniEntries: pluginRuntimePhpIniEntries(spec), + phpIniEntries: { + ...pluginRuntimePhpIniEntries(spec), + ...(bootstrapMount ? { + ...bootstrapIniEntries, + auto_prepend_file: "/internal/wp-codebox/auto_prepend_file.php", + } : {}), + }, "site-url": spec.preview?.siteUrl, blueprint: playgroundCliBlueprint(spec), }) + return bootstrapMount ? { + ...server, + async [Symbol.asyncDispose]() { + try { + await server[Symbol.asyncDispose]() + } finally { + await bootstrapMount[Symbol.asyncDispose]() + } + }, + } : server + } catch (error) { + await bootstrapMount?.[Symbol.asyncDispose]() + throw error } finally { await localAssetServer?.close() } @@ -272,20 +291,22 @@ export function shouldUseProgrammaticPlaygroundRunner(spec: RuntimeCreateSpec, o && (Boolean(runtimeBootstrapPhpIniEntries(spec)) || Boolean(spec.environment.extensions?.length)) } -async function pluginRuntimeBootstrapSharedMount(spec: RuntimeCreateSpec): Promise<{ hostPath: string; vfsPath: string } | undefined> { +async function pluginRuntimeBootstrapMount(spec: RuntimeCreateSpec): Promise<{ hostPath: string; vfsPath: string; [Symbol.asyncDispose](): Promise } | undefined> { const iniEntries = runtimeBootstrapPhpIniEntries(spec) if (!iniEntries) { return undefined } - const directory = join(spec.artifactsDirectory ?? "artifacts", "playground-internal-shared") - await mkdir(directory, { recursive: true }) - await mkdir(join(directory, "mu-plugins"), { recursive: true }) - await mkdir(join(directory, "preload"), { recursive: true }) - await writeFile(join(directory, "php.ini"), phpIniContent(iniEntries), "utf8") + const directory = await mkdtemp(join(tmpdir(), "wp-codebox-playground-internal-shared-")) await writeFile(join(directory, "auto_prepend_file.php"), runtimeAutoPrependPhp(spec), "utf8") - return { hostPath: directory, vfsPath: "/internal/shared" } + return { + hostPath: directory, + vfsPath: "/internal/wp-codebox", + async [Symbol.asyncDispose]() { + await rm(directory, { recursive: true, force: true }) + }, + } } function runtimeBootstrapPhpIniEntries(spec: RuntimeCreateSpec): Record | undefined { @@ -330,9 +351,9 @@ function pluginRuntimePhpEntries(spec: RuntimeCreateSpec, key: "iniEntries" | "b return Object.keys(entries).length > 0 ? entries : undefined } -function phpIniContent(entries: Record): string { +function phpIniContent(entries: Record, autoPrependFile: string): string { const lines = [ - "auto_prepend_file=/internal/shared/auto_prepend_file.php", + `auto_prepend_file=${autoPrependFile}`, // Runtime memory ceiling for all in-sandbox PHP, including artifact // collection. The collect_artifacts phase reads declared/typed artifacts and // runtime snapshot files into memory and base64-encodes them @@ -368,7 +389,7 @@ function phpIniContent(entries: Record): string { } function runtimeAutoPrependPhp(spec: RuntimeCreateSpec): string { - return ` 0 ? "\n" : ""}` + return ` 0 ? "\n" : ""}${playgroundAutoPrependPhp()}` +} + +function playgroundAutoPrependPhp(): string { + return "require_once '/internal/shared/auto_prepend_file.php';\n" } function phpLiteral(value: string | number | boolean | null): string { diff --git a/tests/playground-cli-runner-bootstrap-ini.test.ts b/tests/playground-cli-runner-bootstrap-ini.test.ts index f39c85786..bef67769b 100644 --- a/tests/playground-cli-runner-bootstrap-ini.test.ts +++ b/tests/playground-cli-runner-bootstrap-ini.test.ts @@ -61,11 +61,10 @@ try { } const server = await startPlaygroundCliServer(spec, [], { cliModule }) - await server[Symbol.asyncDispose]() assert.equal(calls.length, 1) assert.equal(calls[0]["mount-before-install"]?.length, 2) - assert.equal(calls[0]["mount-before-install"]?.[0]?.vfsPath, "/internal/shared") + assert.equal(calls[0]["mount-before-install"]?.[0]?.vfsPath, "/internal/wp-codebox") // A wordpress-develop checkout is the runtime root, not an ordinary post-startup mount. assert.deepEqual(calls[0]["mount-before-install"]?.[1], { hostPath: wordpressDevelopDirectory, vfsPath: "/wordpress" }) assert.deepEqual(calls[0].mount, []) @@ -73,18 +72,19 @@ try { assert.equal(calls[0].wordpressInstallMode, "do-not-attempt-installing") assert.equal(calls[0].skipSqliteSetup, true) assert.equal(shouldUseProgrammaticPlaygroundRunner(spec), false) - assert.deepEqual(calls[0].phpIniEntries, { memory_limit: "512M" }) + assert.deepEqual(calls[0].phpIniEntries, { + memory_limit: "512M", + "opcache.file_cache": "/tmp/opcache", + auto_prepend_file: "/internal/wp-codebox/auto_prepend_file.php", + }) assert.deepEqual(calls[0].phpExtension, ["/tmp/sodium/manifest.json"]) - const sharedMount = calls[0]["mount-before-install"]?.[0]?.hostPath - assert.equal(typeof sharedMount, "string") - const sharedPhpIni = await readFile(join(sharedMount as string, "php.ini"), "utf8") - assert.match(sharedPhpIni, /opcache\.file_cache = \/tmp\/opcache/) - // The runtime default memory ceiling stays high enough for collect_artifacts to - // base64 heavy snapshot/declared-artifact files without a hard PHP fatal. - assert.match(sharedPhpIni, /memory_limit=512M/) - assert.match(await readFile(join(sharedMount as string, "auto_prepend_file.php"), "utf8"), /putenv\("TC_MYSQL_PORT=33060"\);/) - assert.equal((await stat(join(sharedMount as string, "mu-plugins"))).isDirectory(), true) - assert.equal((await stat(join(sharedMount as string, "preload"))).isDirectory(), true) + const bootstrapMount = calls[0]["mount-before-install"]?.[0]?.hostPath + assert.equal(typeof bootstrapMount, "string") + const autoPrepend = await readFile(join(bootstrapMount as string, "auto_prepend_file.php"), "utf8") + assert.match(autoPrepend, /putenv\("TC_MYSQL_PORT=33060"\);/) + assert.match(autoPrepend, /require_once '\/internal\/shared\/auto_prepend_file\.php';/) + await server[Symbol.asyncDispose]() + await assert.rejects(stat(bootstrapMount as string), /ENOENT/) calls.length = 0 const defaultRuntimeIniSpec: RuntimeCreateSpec = { @@ -94,12 +94,15 @@ try { } const defaultRuntimeIniServer = await startPlaygroundCliServer(defaultRuntimeIniSpec, [], { cliModule }) - await defaultRuntimeIniServer[Symbol.asyncDispose]() assert.equal(calls.length, 1) - assert.deepEqual(calls[0].phpIniEntries, { memory_limit: "512M" }) + assert.deepEqual(calls[0].phpIniEntries, { + memory_limit: "512M", + auto_prepend_file: "/internal/wp-codebox/auto_prepend_file.php", + }) assert.equal(calls[0].skipSqliteSetup, false) assert.equal(shouldUseProgrammaticPlaygroundRunner(defaultRuntimeIniSpec), true) + await defaultRuntimeIniServer[Symbol.asyncDispose]() calls.length = 0 const distributionOnlySpec: RuntimeCreateSpec = { @@ -117,17 +120,18 @@ try { } const distributionOnlyServer = await startPlaygroundCliServer(distributionOnlySpec, [], { cliModule }) - await distributionOnlyServer[Symbol.asyncDispose]() assert.equal(calls.length, 1) - const distributionSharedMount = calls[0]["mount-before-install"]?.[0]?.hostPath - assert.equal(typeof distributionSharedMount, "string") - const distributionAutoPrepend = await readFile(join(distributionSharedMount as string, "auto_prepend_file.php"), "utf8") + const distributionBootstrapMount = calls[0]["mount-before-install"]?.[0]?.hostPath + assert.equal(typeof distributionBootstrapMount, "string") + const distributionAutoPrepend = await readFile(join(distributionBootstrapMount as string, "auto_prepend_file.php"), "utf8") assert.match(distributionAutoPrepend, /putenv\("WPCOM_BRANCH=feature\/example"\);/) assert.match(distributionAutoPrepend, /putenv\("FEATURE_ENABLED=true"\);/) assert.match(distributionAutoPrepend, /putenv\("EMPTY_VALUE="\);/) assert.match(distributionAutoPrepend, /define\("WPCOM_IS_BRANCH_PREVIEW", true\)/) assert.match(distributionAutoPrepend, /define\("WPCOM_BRANCH_ID", 123\)/) + assert.match(distributionAutoPrepend, /require_once '\/internal\/shared\/auto_prepend_file\.php';/) + await distributionOnlyServer[Symbol.asyncDispose]() } finally { await rm(wordpressDevelopDirectory, { recursive: true, force: true }) await rm(artifactsDirectory, { recursive: true, force: true }) From 5507b2130dcb25fcc1140c32e8d417bb28e608e9 Mon Sep 17 00:00:00 2001 From: Chris Huber Date: Tue, 21 Jul 2026 11:22:51 -0400 Subject: [PATCH 2/2] Clean merged Playground runner import --- packages/runtime-playground/src/playground-cli-runner.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/runtime-playground/src/playground-cli-runner.ts b/packages/runtime-playground/src/playground-cli-runner.ts index c1a8843fd..0d2882201 100644 --- a/packages/runtime-playground/src/playground-cli-runner.ts +++ b/packages/runtime-playground/src/playground-cli-runner.ts @@ -7,7 +7,6 @@ import { randomBytes, randomInt } from "node:crypto" import { existsSync } from "node:fs" import { createServer as createHttpServer, type Server as HttpServer } from "node:http" import { mkdir, readFile, rename, rm, stat, unlink, utimes, writeFile } from "node:fs/promises" -import { homedir } from "node:os" import { basename, dirname, join } from "node:path" import { createServer as createNetServer } from "node:net" import * as PlaygroundStorage from "@wp-playground/storage"