From b1e93ab369907308f883d42cd53ce73e1a78aeac Mon Sep 17 00:00:00 2001 From: Jeroen Pfeil Date: Fri, 23 Aug 2024 17:56:49 +0700 Subject: [PATCH 01/20] Fix dependencies --- package-lock.json | 164 ++++++++++++++++++++++++++++++------ package.json | 7 +- vendor/wp-now/src/wp-now.ts | 113 +++++++++++++------------ webpack.main.config.ts | 5 -- 4 files changed, 201 insertions(+), 88 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3d4305af6..a1c96faca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,8 +13,9 @@ "@automattic/generate-password": "^0.1.0", "@formatjs/intl-locale": "^3.4.5", "@formatjs/intl-localematcher": "^0.5.4", - "@php-wasm/node": "^0.6.16", - "@php-wasm/universal": "^0.6.16", + "@php-wasm/node": "0.9.19", + "@php-wasm/scopes": "0.9.19", + "@php-wasm/universal": "0.9.19", "@rive-app/react-canvas": "^4.12.0", "@sentry/electron": "^4.17.0", "@sentry/webpack-plugin": "^2.16.1", @@ -22,7 +23,7 @@ "@wordpress/compose": "^6.27.0", "@wordpress/i18n": "^4.50.0", "@wordpress/icons": "^9.40.0", - "@wp-playground/blueprints": "^0.6.16", + "@wp-playground/blueprints": "0.9.19", "adm-zip": "^0.5.14", "archiver": "^6.0.1", "atomically": "^2.0.3", @@ -4380,15 +4381,33 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/@php-wasm/logger": { + "version": "0.9.19", + "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-0.9.19.tgz", + "integrity": "sha512-G5iZkSpVCOi1F0I6SBBcGv+JtcFWjg4woxKz4PAx9OFHGDIsIZABosS+uS/6E1UcqKw3Wx9J/CyDHqei6WZM+A==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/node-polyfills": "0.9.19" + }, + "engines": { + "node": ">=18.18.0", + "npm": ">=8.11.0" + } + }, "node_modules/@php-wasm/node": { - "version": "0.6.16", - "resolved": "https://registry.npmjs.org/@php-wasm/node/-/node-0.6.16.tgz", - "integrity": "sha512-8G79CDlExmh3wvIyI6JensmfewJ+/+hhBZVBnVwKeoe5AuCxB4h/CChLklRm9sczx5ertiIlfkY3b9yWzD5Rfw==", + "version": "0.9.19", + "resolved": "https://registry.npmjs.org/@php-wasm/node/-/node-0.9.19.tgz", + "integrity": "sha512-6P4r86f1aIfGfTMsm3yIykIzt+bT9IF809yKoO3HZqSJpg09+8WkjwpMa/Gx/gEfyiYzeWJv6preQbzzcr17bA==", + "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/node-polyfills": "0.6.16", - "@php-wasm/universal": "0.6.16", - "@php-wasm/util": "0.6.16", + "@php-wasm/logger": "0.9.19", + "@php-wasm/node-polyfills": "0.9.19", + "@php-wasm/universal": "0.9.19", + "@php-wasm/util": "0.9.19", + "@wp-playground/common": "0.9.19", "comlink": "^4.4.1", + "express": "4.19.2", + "ini": "4.1.2", "ws": "8.13.0", "yargs": "17.7.2" }, @@ -4398,23 +4417,106 @@ } }, "node_modules/@php-wasm/node-polyfills": { - "version": "0.6.16", - "resolved": "https://registry.npmjs.org/@php-wasm/node-polyfills/-/node-polyfills-0.6.16.tgz", - "integrity": "sha512-JurRxOkPa4tBeXI8kKFKdBzVmK3N2OQzSkti3bt76yWAeKFkvMCtYyEbvHkk6W64sP7bKRCyytPHvwjXNOI3ig==" + "version": "0.9.19", + "resolved": "https://registry.npmjs.org/@php-wasm/node-polyfills/-/node-polyfills-0.9.19.tgz", + "integrity": "sha512-DL5xztYdIotRwMo3nIWEjQOWQZjx+KPq9j2uKFkH52APVRSMdKk2MJLf1raOojnYRNjXSsvAGOMh5SY3xi97aQ==", + "license": "GPL-2.0-or-later" + }, + "node_modules/@php-wasm/node/node_modules/ini": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@php-wasm/node/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@php-wasm/progress": { + "version": "0.9.19", + "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-0.9.19.tgz", + "integrity": "sha512-qZKyLbTH2WqrNoOytGtDgdNE3EnK0J/X4e954NHY/VWzSLX87vS5+lcrMBn92nEgAea9o6W4ym2EmkVV6TYIOw==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/logger": "0.9.19", + "@php-wasm/node-polyfills": "0.9.19" + }, + "engines": { + "node": ">=18.18.0", + "npm": ">=8.11.0" + } + }, + "node_modules/@php-wasm/scopes": { + "version": "0.9.19", + "resolved": "https://registry.npmjs.org/@php-wasm/scopes/-/scopes-0.9.19.tgz", + "integrity": "sha512-hSlNm/CAO6gcmPXHibAlPITZQ4+XyGC0ELCp0fI150WqzM1aqOp/X7B8PTIrYqsv7VgBRJDR6X/wtc53WZx1fw==", + "license": "GPL-2.0-or-later", + "engines": { + "node": ">=16.15.1", + "npm": ">=8.11.0" + } + }, + "node_modules/@php-wasm/stream-compression": { + "version": "0.9.19", + "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-0.9.19.tgz", + "integrity": "sha512-CG58UIHRS0sEgrYGf8ICBHy3d3kKbVxjDlVRLIUJxcGfNxAFy+taWXjwWim/Ne5l75FuQXG+ku/jbCjD8dh3lw==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/node-polyfills": "0.9.19", + "@php-wasm/util": "0.9.19" + } }, "node_modules/@php-wasm/universal": { - "version": "0.6.16", - "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-0.6.16.tgz", - "integrity": "sha512-6zvhQ8yBFg+bp3m4+IAw4UdtLu/Vcq+7HHzmd9XenQWNkqd5GMvKADvpoYoFa6+B4x4ZVDf9M5o0h7Q5N2o1dQ==", + "version": "0.9.19", + "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-0.9.19.tgz", + "integrity": "sha512-BVmdr1HuFoGUiamTL+UTbD3CGUoz68egPBh79SHn0vmqkxVhm29qhOIjvM+MQ2YWkUyUCK/FB4yCiTU6vms/zQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/logger": "0.9.19", + "@php-wasm/node-polyfills": "0.9.19", + "@php-wasm/progress": "0.9.19", + "@php-wasm/stream-compression": "0.9.19", + "@php-wasm/util": "0.9.19", + "comlink": "^4.4.1", + "ini": "4.1.2" + }, "engines": { "node": ">=18.18.0", "npm": ">=8.11.0" } }, + "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": "0.6.16", - "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-0.6.16.tgz", - "integrity": "sha512-sSjsAsZ6NfH7NtefMLqgw5wJpZxWpu8U6aU0Ioa+Hp5gTndIOfqfB+1o8KSmXXB+J5foTiVLVE0+v3z8BdcliQ==", + "version": "0.9.19", + "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-0.9.19.tgz", + "integrity": "sha512-OT69YowT6b/his2fSvd/PUJb6XmWLHaVZEsjl1aH0uNbA82hh+bce2scukzcWbEefBI7VIJeV4IHsNfMqHbPLg==", "engines": { "node": ">=18.18.0", "npm": ">=8.11.0" @@ -6555,9 +6657,19 @@ } }, "node_modules/@wp-playground/blueprints": { - "version": "0.6.16", - "resolved": "https://registry.npmjs.org/@wp-playground/blueprints/-/blueprints-0.6.16.tgz", - "integrity": "sha512-mKlmAPR8mBcz5azSlTZUzXEfFKDG7kHFUaA8wAUGpMN3BEsjMn0tje3t8R602WgSZCwHSeTXFHXTHtdPVXuvDg==", + "version": "0.9.19", + "resolved": "https://registry.npmjs.org/@wp-playground/blueprints/-/blueprints-0.9.19.tgz", + "integrity": "sha512-R8V6kXYAPlmq/DndQtcflo9XbdFzDgwhQUR0dayRt+FeQ3irCcQlyFOc4f8a19BxMq3ayDafmBL1rci3xQ5N3w==", + "engines": { + "node": ">=18.18.0", + "npm": ">=8.11.0" + } + }, + "node_modules/@wp-playground/common": { + "version": "0.9.19", + "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-0.9.19.tgz", + "integrity": "sha512-rmaOJDv3fQBFTUF482Y3/XsoEiOkEP+iIX6w5w9ZH7tm05QhWMaksuSqc2yJst2nzPCaZzPWoCRQ7k0FAi6dpA==", + "license": "GPL-2.0-or-later", "engines": { "node": ">=18.18.0", "npm": ">=8.11.0" @@ -8387,7 +8499,8 @@ "node_modules/comlink": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.4.1.tgz", - "integrity": "sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q==" + "integrity": "sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q==", + "license": "Apache-2.0" }, "node_modules/comma-separated-tokens": { "version": "2.0.3", @@ -22210,9 +22323,10 @@ } }, "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, "engines": { "node": ">=10.0.0" }, diff --git a/package.json b/package.json index 9a232c905..7ed91420f 100644 --- a/package.json +++ b/package.json @@ -100,8 +100,9 @@ "@automattic/generate-password": "^0.1.0", "@formatjs/intl-locale": "^3.4.5", "@formatjs/intl-localematcher": "^0.5.4", - "@php-wasm/node": "^0.6.16", - "@php-wasm/universal": "^0.6.16", + "@php-wasm/node": "0.9.19", + "@php-wasm/universal": "0.9.19", + "@php-wasm/scopes": "0.9.19", "@rive-app/react-canvas": "^4.12.0", "@sentry/electron": "^4.17.0", "@sentry/webpack-plugin": "^2.16.1", @@ -109,7 +110,7 @@ "@wordpress/compose": "^6.27.0", "@wordpress/i18n": "^4.50.0", "@wordpress/icons": "^9.40.0", - "@wp-playground/blueprints": "^0.6.16", + "@wp-playground/blueprints": "0.9.19", "adm-zip": "^0.5.14", "archiver": "^6.0.1", "atomically": "^2.0.3", diff --git a/vendor/wp-now/src/wp-now.ts b/vendor/wp-now/src/wp-now.ts index 8cb0e62ef..a744c1d61 100644 --- a/vendor/wp-now/src/wp-now.ts +++ b/vendor/wp-now/src/wp-now.ts @@ -1,5 +1,6 @@ import fs from 'fs-extra'; -import { NodePHP, PHPLoaderOptions } from '@php-wasm/node'; +import { loadNodeRuntime,createNodeFsMountHandler } from '@php-wasm/node'; +import { MountHandler, PHP, PHPRequestHandler, setPhpIniEntries } from '@php-wasm/universal'; import path from 'path'; import { SQLITE_FILENAME } from './constants'; import { @@ -31,7 +32,7 @@ import getWpNowPath from './get-wp-now-path'; import getWordpressVersionsPath from './get-wordpress-versions-path'; import getSqlitePath from './get-sqlite-path'; -async function applyToInstances(phpInstances: NodePHP[], callback: Function) { +async function applyToInstances(phpInstances: PHP[], callback: Function) { for (let i = 0; i < phpInstances.length; i++) { await callback(phpInstances[i]); } @@ -39,41 +40,43 @@ async function applyToInstances(phpInstances: NodePHP[], callback: Function) { export default async function startWPNow( options: Partial = {} -): Promise<{ php: NodePHP; phpInstances: NodePHP[]; options: WPNowOptions }> { +): Promise<{ php: PHP; phpInstances: PHP[]; options: WPNowOptions }> { const { documentRoot } = options; - const nodePHPOptions: PHPLoaderOptions = { - requestHandler: { - documentRoot, - absoluteUrl: options.absoluteUrl, - }, - }; - const phpInstances = []; - for (let i = 0; i < Math.max(options.numberOfPhpInstances, 1); i++) { - phpInstances.push( - await NodePHP.load(options.phpVersion, nodePHPOptions) - ); - } - const php = phpInstances[0]; - php.setPhpIniEntry('memory_limit', '256M'); - - phpInstances.forEach((_php) => { - _php.mkdirTree(documentRoot); - _php.chdir(documentRoot); - _php.writeFile( - `${documentRoot}/index.php`, - ` { + const id = await loadNodeRuntime( options.phpVersion ); + const php = new PHP(id) + await setPhpIniEntries(php, { + 'memory_limit': '256M' + }); + return php; + }, + documentRoot: documentRoot || '/wordpress', + absoluteUrl: options.absoluteUrl, + rewriteRules: [] }); + const php = await requestHandler.getPrimaryPhp() + + + php.mkdir(documentRoot); + php.chdir(documentRoot); + php.writeFile( + `${documentRoot}/index.php`, + ` { + await applyToInstances([php], async (_php) => { runIndexMode(_php, options); }); - return { php, phpInstances, options }; + return { php, phpInstances:[php], options }; } output?.log(`wp: ${options.wordPressVersion}`); await Promise.all([ @@ -90,7 +93,7 @@ export default async function startWPNow( } const isFirstTimeProject = !fs.existsSync(options.wpContentPath); - await applyToInstances(phpInstances, async (_php) => { + await applyToInstances([php], async (_php) => { switch (options.mode) { case WPNowMode.WP_CONTENT: await runWpContentMode(_php, options); @@ -135,20 +138,20 @@ export default async function startWPNow( return { php, - phpInstances, + phpInstances: [php], options, }; } async function runIndexMode( - php: NodePHP, + php: PHP, { documentRoot, projectPath }: WPNowOptions ) { - php.mount(projectPath, documentRoot); + php.mount(projectPath, createNodeFsMountHandler( documentRoot ) ); } async function runWpContentMode( - php: NodePHP, + php: PHP, { documentRoot, wordPressVersion, @@ -161,11 +164,11 @@ async function runWpContentMode( getWordpressVersionsPath(), wordPressVersion ); - php.mount(wordPressPath, documentRoot); + php.mount(wordPressPath, createNodeFsMountHandler( documentRoot ) ); await initWordPress(php, wordPressVersion, documentRoot, absoluteUrl); fs.ensureDirSync(wpContentPath); - php.mount(projectPath, `${documentRoot}/wp-content`); + php.mount(projectPath, createNodeFsMountHandler( `${documentRoot}/wp-content` )); mountSqlitePlugin(php, documentRoot); mountSqliteDatabaseDirectory(php, documentRoot, wpContentPath); @@ -173,7 +176,7 @@ async function runWpContentMode( } async function runWordPressDevelopMode( - php: NodePHP, + php: PHP, { documentRoot, projectPath, absoluteUrl }: WPNowOptions ) { await runWordPressMode(php, { @@ -184,10 +187,10 @@ async function runWordPressDevelopMode( } async function runWordPressMode( - php: NodePHP, + php: PHP, { documentRoot, projectPath, absoluteUrl }: WPNowOptions ) { - php.mount(projectPath, documentRoot); + php.mount(projectPath, createNodeFsMountHandler( documentRoot )); await initWordPress( php, @@ -200,7 +203,7 @@ async function runWordPressMode( } async function runPluginOrThemeMode( - php: NodePHP, + php: PHP, { wordPressVersion, documentRoot, @@ -214,7 +217,7 @@ async function runPluginOrThemeMode( getWordpressVersionsPath(), wordPressVersion ); - php.mount(wordPressPath, documentRoot); + php.mount(wordPressPath, createNodeFsMountHandler( documentRoot )); await initWordPress(php, wordPressVersion, documentRoot, absoluteUrl); fs.ensureDirSync(wpContentPath); @@ -222,13 +225,13 @@ async function runPluginOrThemeMode( path.join(getWordpressVersionsPath(), wordPressVersion, 'wp-content'), wpContentPath ); - php.mount(wpContentPath, `${documentRoot}/wp-content`); + php.mount(wpContentPath, createNodeFsMountHandler( `${documentRoot}/wp-content`)); const pluginName = path.basename(projectPath); const directoryName = mode === WPNowMode.PLUGIN ? 'plugins' : 'themes'; php.mount( projectPath, - `${documentRoot}/wp-content/${directoryName}/${pluginName}` + createNodeFsMountHandler( `${documentRoot}/wp-content/${directoryName}/${pluginName}`) ); if (mode === WPNowMode.THEME) { const templateName = getThemeTemplate(projectPath); @@ -238,7 +241,7 @@ async function runPluginOrThemeMode( if (fs.existsSync(templatePath)) { php.mount( templatePath, - `${documentRoot}/wp-content/${directoryName}/${templateName}` + createNodeFsMountHandler( `${documentRoot}/wp-content/${directoryName}/${templateName}`) ); } else { output?.error( @@ -252,14 +255,14 @@ async function runPluginOrThemeMode( } async function runWpPlaygroundMode( - php: NodePHP, + php: PHP, { documentRoot, wordPressVersion, wpContentPath, absoluteUrl }: WPNowOptions ) { const wordPressPath = path.join( getWordpressVersionsPath(), wordPressVersion ); - php.mount(wordPressPath, documentRoot); + php.mount(wordPressPath, createNodeFsMountHandler( documentRoot)); await initWordPress(php, wordPressVersion, documentRoot, absoluteUrl); fs.ensureDirSync(wpContentPath); @@ -267,13 +270,13 @@ async function runWpPlaygroundMode( path.join(getWordpressVersionsPath(), wordPressVersion, 'wp-content'), wpContentPath ); - php.mount(wpContentPath, `${documentRoot}/wp-content`); + php.mount(wpContentPath, createNodeFsMountHandler( `${documentRoot}/wp-content`)); mountSqlitePlugin(php, documentRoot); mountMuPlugins(php, documentRoot); } -async function login(php: NodePHP, options: WPNowOptions = {}) { +async function login(php: PHP, options: WPNowOptions = {}) { const { documentRoot } = options; await php.writeFile( @@ -326,7 +329,7 @@ async function login(php: NodePHP, options: WPNowOptions = {}) { * @param siteUrl */ async function initWordPress( - php: NodePHP, + php: PHP, wordPressVersion: string, vfsDocumentRoot: string, siteUrl: string @@ -356,7 +359,7 @@ async function initWordPress( } async function activatePluginOrTheme( - php: NodePHP, + php: PHP, { projectPath, mode }: WPNowOptions ) { if (mode === WPNowMode.PLUGIN) { @@ -377,22 +380,22 @@ export function getThemeTemplate(projectPath: string) { } } -function mountMuPlugins(php: NodePHP, vfsDocumentRoot: string) { +function mountMuPlugins(php: PHP, vfsDocumentRoot: string) { php.mount( path.join(getWpNowPath(), 'mu-plugins'), // VFS paths always use forward / slashes so // we can't use path.join() for them - `${vfsDocumentRoot}/wp-content/mu-plugins` + createNodeFsMountHandler( `${vfsDocumentRoot}/wp-content/mu-plugins`) ); } -function mountSqlitePlugin(php: NodePHP, vfsDocumentRoot: string) { +function mountSqlitePlugin(php: PHP, vfsDocumentRoot: string) { const sqlitePluginPath = `${vfsDocumentRoot}/wp-content/plugins/${SQLITE_FILENAME}`; if (php.listFiles(sqlitePluginPath).length === 0) { php.mount(getSqlitePath(), sqlitePluginPath); php.mount( path.join(getSqlitePath(), 'db.copy'), - `${vfsDocumentRoot}/wp-content/db.php` + createNodeFsMountHandler( `${vfsDocumentRoot}/wp-content/db.php`) ); } } @@ -405,14 +408,14 @@ function mountSqlitePlugin(php: NodePHP, vfsDocumentRoot: string) { * @param wpContentPath */ function mountSqliteDatabaseDirectory( - php: NodePHP, + php: PHP, vfsDocumentRoot: string, wpContentPath: string ) { fs.ensureDirSync(path.join(wpContentPath, 'database')); php.mount( path.join(wpContentPath, 'database'), - `${vfsDocumentRoot}/wp-content/database` + createNodeFsMountHandler( `${vfsDocumentRoot}/wp-content/database` ) ); } @@ -435,7 +438,7 @@ export function inferMode( return WPNowMode.PLAYGROUND; } -async function installationSteps(php: NodePHP, options: WPNowOptions) { +async function installationSteps(php: PHP, options: WPNowOptions) { const siteLanguage = options.siteLanguage; const executeStep = async ( step: 0 | 1 | 2 ) => { diff --git a/webpack.main.config.ts b/webpack.main.config.ts index eb5919073..058274bd5 100644 --- a/webpack.main.config.ts +++ b/webpack.main.config.ts @@ -84,9 +84,4 @@ export const mainBaseConfig: Configuration = { resolve: { extensions: [ '.js', '.ts', '.jsx', '.tsx', '.css', '.json' ], }, - externals: { - // We need to add PHP Wasm as an external because it uses the __dirname - // variable, and Webpack messes with it. - '@php-wasm/node': '@php-wasm/node', - }, }; From 3592e75fdafbc07ef20034eed604af6bb2c198b0 Mon Sep 17 00:00:00 2001 From: Jeroen Pfeil Date: Fri, 23 Aug 2024 18:31:54 +0700 Subject: [PATCH 02/20] Fix paths --- vendor/wp-now/src/execute-php.ts | 1 - vendor/wp-now/src/start-server.ts | 6 +++--- vendor/wp-now/src/wp-now.ts | 16 +++++++++++----- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/vendor/wp-now/src/execute-php.ts b/vendor/wp-now/src/execute-php.ts index 9c647f718..9bb29f3b4 100644 --- a/vendor/wp-now/src/execute-php.ts +++ b/vendor/wp-now/src/execute-php.ts @@ -30,7 +30,6 @@ export async function executePHP( const [, php] = phpInstances; try { - php.useHostFilesystem(); if (!path.isAbsolute(phpArgs[1])) { const maybePhpFile = path.join( wpNowOptions.projectPath, diff --git a/vendor/wp-now/src/start-server.ts b/vendor/wp-now/src/start-server.ts index 267363a90..9eaa0ea20 100644 --- a/vendor/wp-now/src/start-server.ts +++ b/vendor/wp-now/src/start-server.ts @@ -5,7 +5,7 @@ import express from 'express'; import compression from 'compression'; import compressible from 'compressible'; import { portFinder } from './port-finder'; -import { NodePHP } from '@php-wasm/node'; +import { PHP } from '@php-wasm/universal'; import startWPNow from './wp-now'; import { output } from './output'; import { addTrailingSlash } from './add-trailing-slash'; @@ -23,7 +23,7 @@ const requestBodyToBytes = async ( req ): Promise< Uint8Array > => export interface WPNowServer { url: string; - php: NodePHP; + php: PHP; options: WPNowOptions; stopServer: () => Promise; } @@ -42,12 +42,12 @@ export async function startServer( `The given path "${options.projectPath}" does not exist.` ); } + const app = express(); app.use(compression({ filter: shouldCompress })); app.use(addTrailingSlash('/wp-admin')); const port = options.port ?? await portFinder.getOpenPort(); const { php, options: wpNowOptions } = await startWPNow(options); - app.use('/', async (req, res) => { try { const requestHeaders = {}; diff --git a/vendor/wp-now/src/wp-now.ts b/vendor/wp-now/src/wp-now.ts index a744c1d61..4c93b56ff 100644 --- a/vendor/wp-now/src/wp-now.ts +++ b/vendor/wp-now/src/wp-now.ts @@ -1,5 +1,5 @@ import fs from 'fs-extra'; -import { loadNodeRuntime,createNodeFsMountHandler } from '@php-wasm/node'; +import { loadNodeRuntime } from '@php-wasm/node'; import { MountHandler, PHP, PHPRequestHandler, setPhpIniEntries } from '@php-wasm/universal'; import path from 'path'; import { SQLITE_FILENAME } from './constants'; @@ -42,8 +42,6 @@ export default async function startWPNow( options: Partial = {} ): Promise<{ php: PHP; phpInstances: PHP[]; options: WPNowOptions }> { const { documentRoot } = options; - - const requestHandler = new PHPRequestHandler({ phpFactory: async ({ isPrimary }) => { const id = await loadNodeRuntime( options.phpVersion ); @@ -60,7 +58,6 @@ export default async function startWPNow( const php = await requestHandler.getPrimaryPhp() - php.mkdir(documentRoot); php.chdir(documentRoot); php.writeFile( @@ -150,6 +147,15 @@ async function runIndexMode( php.mount(projectPath, createNodeFsMountHandler( documentRoot ) ); } +function createNodeFsMountHandler( localPath: string ): MountHandler { + return async function (php, FS, vfsMountPoint) { + FS.mount(FS.filesystems['NODEFS'], { root: localPath }, vfsMountPoint); + return () => { + FS!.unmount(localPath); + }; + }; +} + async function runWpContentMode( php: PHP, { @@ -392,7 +398,7 @@ function mountMuPlugins(php: PHP, vfsDocumentRoot: string) { function mountSqlitePlugin(php: PHP, vfsDocumentRoot: string) { const sqlitePluginPath = `${vfsDocumentRoot}/wp-content/plugins/${SQLITE_FILENAME}`; if (php.listFiles(sqlitePluginPath).length === 0) { - php.mount(getSqlitePath(), sqlitePluginPath); + php.mount(getSqlitePath(), createNodeFsMountHandler(sqlitePluginPath)); php.mount( path.join(getSqlitePath(), 'db.copy'), createNodeFsMountHandler( `${vfsDocumentRoot}/wp-content/db.php`) From b2d6a644c19499f8f4b92d1d0ca329dd31e05357 Mon Sep 17 00:00:00 2001 From: Antony Agrios Date: Fri, 23 Aug 2024 17:09:55 +0300 Subject: [PATCH 03/20] Update: Fix webpack --- webpack.main.config.ts | 17 +++++++++++++++++ webpack.rules.ts | 4 ++++ 2 files changed, 21 insertions(+) diff --git a/webpack.main.config.ts b/webpack.main.config.ts index 058274bd5..815ae1e08 100644 --- a/webpack.main.config.ts +++ b/webpack.main.config.ts @@ -1,10 +1,22 @@ import path from 'path'; // eslint-disable-next-line import/default import CopyWebpackPlugin from 'copy-webpack-plugin'; +import * as fs from 'fs-extra'; import { type Configuration, DefinePlugin } from 'webpack'; import { plugins } from './webpack.plugins'; import { rules } from './webpack.rules'; +function getWasmDirs( dir: string ) { + return fs + .readdirSync( dir, { withFileTypes: true } ) + .filter( ( dirent: fs.Dirent ) => dirent.isDirectory() ) + .map( ( dirent: fs.Dirent ) => dirent.name ) + .filter( ( name: string ) => name !== 'node_modules' ); +} + +const phpWasmDir = path.resolve( __dirname, 'node_modules/@php-wasm/node' ); +const wasmDirs = getWasmDirs( phpWasmDir ); + // Extra entries are bundled separately from the main bundle. They are primarily used // for worker threads and forked processes, which need to be loaded independently. const extraEntries = [ @@ -78,6 +90,11 @@ export const mainBaseConfig: Configuration = { from: path.resolve( __dirname, 'src/about-menu/studio-app-icon.png' ), to: path.resolve( __dirname, '.webpack/main/menu' ), }, + + ...wasmDirs.map( ( dir ) => ( { + from: path.join( phpWasmDir, dir ), + to: path.resolve( __dirname, `.webpack/main/${ dir }` ), + } ) ), ], } ), ], diff --git a/webpack.rules.ts b/webpack.rules.ts index a3d0b8760..6de78ef3e 100644 --- a/webpack.rules.ts +++ b/webpack.rules.ts @@ -18,6 +18,10 @@ export const rules: Required< ModuleOptions >[ 'rules' ] = [ }, }, }, + { + test: /\.wasm$/, + type: 'asset/inline', + }, { test: /\.tsx?$/, exclude: /(node_modules|\.webpack)/, From 76db7ad00d36e1da34d13da51923ba78a298fd17 Mon Sep 17 00:00:00 2001 From: Jeroen Pfeil Date: Fri, 23 Aug 2024 22:04:00 +0700 Subject: [PATCH 04/20] Fix issues --- vendor/wp-now/src/wp-now.ts | 53 +++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/vendor/wp-now/src/wp-now.ts b/vendor/wp-now/src/wp-now.ts index 4c93b56ff..7fe21622a 100644 --- a/vendor/wp-now/src/wp-now.ts +++ b/vendor/wp-now/src/wp-now.ts @@ -71,7 +71,7 @@ export default async function startWPNow( if (options.mode === WPNowMode.INDEX) { await applyToInstances([php], async (_php) => { - runIndexMode(_php, options); + await runIndexMode(_php, options); }); return { php, phpInstances:[php], options }; } @@ -144,7 +144,7 @@ async function runIndexMode( php: PHP, { documentRoot, projectPath }: WPNowOptions ) { - php.mount(projectPath, createNodeFsMountHandler( documentRoot ) ); + await php.mount(projectPath, createNodeFsMountHandler( documentRoot ) ); } function createNodeFsMountHandler( localPath: string ): MountHandler { @@ -170,15 +170,15 @@ async function runWpContentMode( getWordpressVersionsPath(), wordPressVersion ); - php.mount(wordPressPath, createNodeFsMountHandler( documentRoot ) ); + await php.mount(wordPressPath, createNodeFsMountHandler( documentRoot ) ); await initWordPress(php, wordPressVersion, documentRoot, absoluteUrl); fs.ensureDirSync(wpContentPath); - php.mount(projectPath, createNodeFsMountHandler( `${documentRoot}/wp-content` )); + await php.mount(projectPath, createNodeFsMountHandler( `${documentRoot}/wp-content` )); - mountSqlitePlugin(php, documentRoot); - mountSqliteDatabaseDirectory(php, documentRoot, wpContentPath); - mountMuPlugins(php, documentRoot); + await mountSqlitePlugin(php, documentRoot); + await mountSqliteDatabaseDirectory(php, documentRoot, wpContentPath); + await mountMuPlugins(php, documentRoot); } async function runWordPressDevelopMode( @@ -196,7 +196,8 @@ async function runWordPressMode( php: PHP, { documentRoot, projectPath, absoluteUrl }: WPNowOptions ) { - php.mount(projectPath, createNodeFsMountHandler( documentRoot )); + await php.mkdir(documentRoot) + await php.mount(documentRoot, createNodeFsMountHandler( projectPath )); await initWordPress( php, @@ -205,7 +206,7 @@ async function runWordPressMode( absoluteUrl ); - downloadMuPlugins(path.join(projectPath, 'wp-content', 'mu-plugins')); + await downloadMuPlugins(path.join(projectPath, 'wp-content', 'mu-plugins')); } async function runPluginOrThemeMode( @@ -223,7 +224,7 @@ async function runPluginOrThemeMode( getWordpressVersionsPath(), wordPressVersion ); - php.mount(wordPressPath, createNodeFsMountHandler( documentRoot )); + await php.mount(wordPressPath, createNodeFsMountHandler( documentRoot )); await initWordPress(php, wordPressVersion, documentRoot, absoluteUrl); fs.ensureDirSync(wpContentPath); @@ -231,11 +232,11 @@ async function runPluginOrThemeMode( path.join(getWordpressVersionsPath(), wordPressVersion, 'wp-content'), wpContentPath ); - php.mount(wpContentPath, createNodeFsMountHandler( `${documentRoot}/wp-content`)); + await php.mount(wpContentPath, createNodeFsMountHandler( `${documentRoot}/wp-content`)); const pluginName = path.basename(projectPath); const directoryName = mode === WPNowMode.PLUGIN ? 'plugins' : 'themes'; - php.mount( + await php.mount( projectPath, createNodeFsMountHandler( `${documentRoot}/wp-content/${directoryName}/${pluginName}`) ); @@ -245,7 +246,7 @@ async function runPluginOrThemeMode( // We assume that the theme template is in the parent directory const templatePath = path.join(projectPath, '..', templateName); if (fs.existsSync(templatePath)) { - php.mount( + await php.mount( templatePath, createNodeFsMountHandler( `${documentRoot}/wp-content/${directoryName}/${templateName}`) ); @@ -256,8 +257,8 @@ async function runPluginOrThemeMode( } } } - mountSqlitePlugin(php, documentRoot); - mountMuPlugins(php, documentRoot); + await mountSqlitePlugin(php, documentRoot); + await mountMuPlugins(php, documentRoot); } async function runWpPlaygroundMode( @@ -268,7 +269,7 @@ async function runWpPlaygroundMode( getWordpressVersionsPath(), wordPressVersion ); - php.mount(wordPressPath, createNodeFsMountHandler( documentRoot)); + await php.mount(wordPressPath, createNodeFsMountHandler( documentRoot)); await initWordPress(php, wordPressVersion, documentRoot, absoluteUrl); fs.ensureDirSync(wpContentPath); @@ -276,10 +277,10 @@ async function runWpPlaygroundMode( path.join(getWordpressVersionsPath(), wordPressVersion, 'wp-content'), wpContentPath ); - php.mount(wpContentPath, createNodeFsMountHandler( `${documentRoot}/wp-content`)); + await php.mount(wpContentPath, createNodeFsMountHandler( `${documentRoot}/wp-content`)); - mountSqlitePlugin(php, documentRoot); - mountMuPlugins(php, documentRoot); + await mountSqlitePlugin(php, documentRoot); + await mountMuPlugins(php, documentRoot); } async function login(php: PHP, options: WPNowOptions = {}) { @@ -386,8 +387,8 @@ export function getThemeTemplate(projectPath: string) { } } -function mountMuPlugins(php: PHP, vfsDocumentRoot: string) { - php.mount( +async function mountMuPlugins(php: PHP, vfsDocumentRoot: string) { + await php.mount( path.join(getWpNowPath(), 'mu-plugins'), // VFS paths always use forward / slashes so // we can't use path.join() for them @@ -395,11 +396,11 @@ function mountMuPlugins(php: PHP, vfsDocumentRoot: string) { ); } -function mountSqlitePlugin(php: PHP, vfsDocumentRoot: string) { +async function mountSqlitePlugin(php: PHP, vfsDocumentRoot: string) { const sqlitePluginPath = `${vfsDocumentRoot}/wp-content/plugins/${SQLITE_FILENAME}`; if (php.listFiles(sqlitePluginPath).length === 0) { - php.mount(getSqlitePath(), createNodeFsMountHandler(sqlitePluginPath)); - php.mount( + await php.mount(getSqlitePath(), createNodeFsMountHandler(sqlitePluginPath)); + await php.mount( path.join(getSqlitePath(), 'db.copy'), createNodeFsMountHandler( `${vfsDocumentRoot}/wp-content/db.php`) ); @@ -413,13 +414,13 @@ function mountSqlitePlugin(php: PHP, vfsDocumentRoot: string) { * @param vfsDocumentRoot * @param wpContentPath */ -function mountSqliteDatabaseDirectory( +async function mountSqliteDatabaseDirectory( php: PHP, vfsDocumentRoot: string, wpContentPath: string ) { fs.ensureDirSync(path.join(wpContentPath, 'database')); - php.mount( + await php.mount( path.join(wpContentPath, 'database'), createNodeFsMountHandler( `${vfsDocumentRoot}/wp-content/database` ) ); From 52ac2d05fee1aa9855e0cfb2c8dd7c83d605e89d Mon Sep 17 00:00:00 2001 From: Jeroen Pfeil Date: Fri, 23 Aug 2024 22:35:11 +0700 Subject: [PATCH 05/20] Use PHPRequestHandler, rotate PHP and allow url fopen for curl --- vendor/wp-now/src/start-server.ts | 4 ++-- vendor/wp-now/src/wp-now.ts | 18 +++++++++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/vendor/wp-now/src/start-server.ts b/vendor/wp-now/src/start-server.ts index 9eaa0ea20..1ff8fca07 100644 --- a/vendor/wp-now/src/start-server.ts +++ b/vendor/wp-now/src/start-server.ts @@ -47,7 +47,7 @@ export async function startServer( app.use(compression({ filter: shouldCompress })); app.use(addTrailingSlash('/wp-admin')); const port = options.port ?? await portFinder.getOpenPort(); - const { php, options: wpNowOptions } = await startWPNow(options); + const { php, options: wpNowOptions, requestHandler } = await startWPNow(options); app.use('/', async (req, res) => { try { const requestHeaders = {}; @@ -64,7 +64,7 @@ export async function startServer( method: req.method as HTTPMethod, body: await requestBodyToBytes( req ), }; - const resp = await php.request(data); + const resp = await requestHandler.request(data); res.statusCode = resp.httpStatusCode; Object.keys(resp.headers).forEach((key) => { res.setHeader(key, resp.headers[key]); diff --git a/vendor/wp-now/src/wp-now.ts b/vendor/wp-now/src/wp-now.ts index 7fe21622a..b78e45dfd 100644 --- a/vendor/wp-now/src/wp-now.ts +++ b/vendor/wp-now/src/wp-now.ts @@ -1,6 +1,6 @@ import fs from 'fs-extra'; import { loadNodeRuntime } from '@php-wasm/node'; -import { MountHandler, PHP, PHPRequestHandler, setPhpIniEntries } from '@php-wasm/universal'; +import { MountHandler, PHP, PHPRequestHandler, rotatePHPRuntime, setPhpIniEntries } from '@php-wasm/universal'; import path from 'path'; import { SQLITE_FILENAME } from './constants'; import { @@ -40,14 +40,16 @@ async function applyToInstances(phpInstances: PHP[], callback: Function) { export default async function startWPNow( options: Partial = {} -): Promise<{ php: PHP; phpInstances: PHP[]; options: WPNowOptions }> { +): Promise<{ php: PHP; phpInstances: PHP[]; options: WPNowOptions, requestHandler: PHPRequestHandler }> { const { documentRoot } = options; const requestHandler = new PHPRequestHandler({ phpFactory: async ({ isPrimary }) => { const id = await loadNodeRuntime( options.phpVersion ); const php = new PHP(id) await setPhpIniEntries(php, { - 'memory_limit': '256M' + 'memory_limit': '256M', + 'disable_functions': '', + 'allow_url_fopen': '1' }); return php; }, @@ -133,10 +135,20 @@ export default async function startWPNow( await activatePluginOrTheme(php, options); } + rotatePHPRuntime({ + php, + cwd: requestHandler.documentRoot, + recreateRuntime: async () => { + return await loadNodeRuntime(options.phpVersion) + }, + maxRequests: 400, + }); + return { php, phpInstances: [php], options, + requestHandler, }; } From 47b1fd39e162f6e286a0aecc26a1c8ca36750503 Mon Sep 17 00:00:00 2001 From: Antony Agrios Date: Mon, 26 Aug 2024 17:51:25 +0300 Subject: [PATCH 06/20] Update: Clean up code and tried to fix wp-cli execute error --- vendor/wp-now/src/execute-wp-cli.ts | 57 +++++++++----- vendor/wp-now/src/start-server.ts | 6 +- vendor/wp-now/src/tests/wp-now.spec.ts | 4 +- vendor/wp-now/src/wp-now.ts | 101 ++++++++++++------------- 4 files changed, 93 insertions(+), 75 deletions(-) diff --git a/vendor/wp-now/src/execute-wp-cli.ts b/vendor/wp-now/src/execute-wp-cli.ts index f13b17f25..d0edd21e3 100644 --- a/vendor/wp-now/src/execute-wp-cli.ts +++ b/vendor/wp-now/src/execute-wp-cli.ts @@ -3,8 +3,10 @@ import getWpCliPath from './get-wp-cli-path'; import getWpNowConfig from './config'; import { DEFAULT_PHP_VERSION, DEFAULT_WORDPRESS_VERSION } from './constants'; import { phpVar } from '@php-wasm/util'; -import { NodePHP } from '@php-wasm/node'; +import { createNodeFsMountHandler, loadNodeRuntime } from '@php-wasm/node'; import { getSqliteCommandPath } from '../../../src/lib/sqlite-command-versions'; +import { PHP, PHPRequestHandler, MountHandler, writeFiles } from '@php-wasm/universal'; +import { readFileSync } from 'fs'; const isWindows = process.platform === 'win32'; @@ -18,29 +20,35 @@ export async function executeWPCli( projectPath: string, args: string[] ): Promi wp: DEFAULT_WORDPRESS_VERSION, path: projectPath, }); - const php: NodePHP = await NodePHP.load(options.phpVersion,{ - requestHandler: { - documentRoot: options.documentRoot, - absoluteUrl: options.absoluteUrl, - } + + const requestHandler = new PHPRequestHandler({ + phpFactory: async ({ isPrimary, requestHandler:reqHandler }) => { + const id = await loadNodeRuntime( options.phpVersion ); + const php = new PHP(id); + return php; + }, + documentRoot: options.documentRoot, + absoluteUrl: options.absoluteUrl, + rewriteRules: [] }); - php.mount(projectPath, options.documentRoot); + + const php = await requestHandler.getPrimaryPhp() + + php.mount(projectPath, createNodeFsMountHandler(options.documentRoot) as unknown as MountHandler); //Set the SAPI name to cli before running the script await php.setSapiName('cli'); php.mkdir('/tmp'); - const stderrPath = '/tmp/stderr'; + const wpCliPath = '/tmp/wp-cli.phar'; + const stderrPath = '/tmp/stderr'; const sqliteCommandPath = '/tmp/sqlite-command'; const runCliPath = '/tmp/run-cli.php'; - php.writeFile(stderrPath, ''); - php.mount(getWpCliPath(), wpCliPath); - php.mount(getSqliteCommandPath(), sqliteCommandPath); - - php.writeFile( - runCliPath, - ` { try { const requestHeaders = {}; @@ -64,7 +64,7 @@ export async function startServer( method: req.method as HTTPMethod, body: await requestBodyToBytes( req ), }; - const resp = await requestHandler.request(data); + const resp = await php.requestHandler.request(data); res.statusCode = resp.httpStatusCode; Object.keys(resp.headers).forEach((key) => { res.setHeader(key, resp.headers[key]); diff --git a/vendor/wp-now/src/tests/wp-now.spec.ts b/vendor/wp-now/src/tests/wp-now.spec.ts index c8f74524c..559afb16a 100644 --- a/vendor/wp-now/src/tests/wp-now.spec.ts +++ b/vendor/wp-now/src/tests/wp-now.spec.ts @@ -761,7 +761,7 @@ describe('Test starting different modes', () => { `${php.documentRoot}/print-constants.php`, ` { `${php.documentRoot}/print-constants.php`, ` = {} -): Promise<{ php: PHP; phpInstances: PHP[]; options: WPNowOptions, requestHandler: PHPRequestHandler }> { +): Promise<{ php: PHP, options: WPNowOptions }> { const { documentRoot } = options; const requestHandler = new PHPRequestHandler({ - phpFactory: async ({ isPrimary }) => { + phpFactory: async ({ isPrimary, requestHandler:reqHandler }) => { const id = await loadNodeRuntime( options.phpVersion ); - const php = new PHP(id) + const php = new PHP(id); + if( reqHandler ) { + php.requestHandler = reqHandler + } + if(!isPrimary) { + proxyFileSystem(await requestHandler.getPrimaryPhp(), php, [ + '/tmp', + requestHandler.documentRoot, + '/internal/shared', + ]); + } await setPhpIniEntries(php, { 'memory_limit': '256M', 'disable_functions': '', - 'allow_url_fopen': '1' + 'allow_url_fopen': '1', + 'openssl.cafile': '/internal/shared/ca-bundle.crt' }); return php; }, @@ -66,16 +72,17 @@ export default async function startWPNow( `${documentRoot}/index.php`, ` { - await runIndexMode(_php, options); - }); - return { php, phpInstances:[php], options }; + await runIndexMode(php, options); + return { php, options }; } output?.log(`wp: ${options.wordPressVersion}`); await Promise.all([ @@ -92,28 +99,27 @@ export default async function startWPNow( } const isFirstTimeProject = !fs.existsSync(options.wpContentPath); - await applyToInstances([php], async (_php) => { + switch (options.mode) { case WPNowMode.WP_CONTENT: - await runWpContentMode(_php, options); + await runWpContentMode(php, options); break; case WPNowMode.WORDPRESS_DEVELOP: - await runWordPressDevelopMode(_php, options); + await runWordPressDevelopMode(php, options); break; case WPNowMode.WORDPRESS: - await runWordPressMode(_php, options); + await runWordPressMode(php, options); break; case WPNowMode.PLUGIN: - await runPluginOrThemeMode(_php, options); + await runPluginOrThemeMode(php, options); break; case WPNowMode.THEME: - await runPluginOrThemeMode(_php, options); + await runPluginOrThemeMode(php, options); break; case WPNowMode.PLAYGROUND: - await runWpPlaygroundMode(_php, options); + await runWpPlaygroundMode(php, options); break; } - }); if (options.blueprintObject) { output?.log(`blueprint steps: ${options.blueprintObject.steps.length}`); @@ -146,9 +152,7 @@ export default async function startWPNow( return { php, - phpInstances: [php], options, - requestHandler, }; } @@ -156,16 +160,7 @@ async function runIndexMode( php: PHP, { documentRoot, projectPath }: WPNowOptions ) { - await php.mount(projectPath, createNodeFsMountHandler( documentRoot ) ); -} - -function createNodeFsMountHandler( localPath: string ): MountHandler { - return async function (php, FS, vfsMountPoint) { - FS.mount(FS.filesystems['NODEFS'], { root: localPath }, vfsMountPoint); - return () => { - FS!.unmount(localPath); - }; - }; + await php.mount(projectPath, createNodeFsMountHandler( documentRoot ) as unknown as MountHandler); } async function runWpContentMode( @@ -182,11 +177,11 @@ async function runWpContentMode( getWordpressVersionsPath(), wordPressVersion ); - await php.mount(wordPressPath, createNodeFsMountHandler( documentRoot ) ); + await php.mount(wordPressPath, createNodeFsMountHandler( documentRoot )as unknown as MountHandler ); await initWordPress(php, wordPressVersion, documentRoot, absoluteUrl); fs.ensureDirSync(wpContentPath); - await php.mount(projectPath, createNodeFsMountHandler( `${documentRoot}/wp-content` )); + await php.mount(projectPath, createNodeFsMountHandler( `${documentRoot}/wp-content` )as unknown as MountHandler); await mountSqlitePlugin(php, documentRoot); await mountSqliteDatabaseDirectory(php, documentRoot, wpContentPath); @@ -208,8 +203,8 @@ async function runWordPressMode( php: PHP, { documentRoot, projectPath, absoluteUrl }: WPNowOptions ) { - await php.mkdir(documentRoot) - await php.mount(documentRoot, createNodeFsMountHandler( projectPath )); + php.mkdir(documentRoot) + await php.mount(documentRoot, createNodeFsMountHandler( projectPath ) as unknown as MountHandler); await initWordPress( php, @@ -236,7 +231,7 @@ async function runPluginOrThemeMode( getWordpressVersionsPath(), wordPressVersion ); - await php.mount(wordPressPath, createNodeFsMountHandler( documentRoot )); + await php.mount(wordPressPath, createNodeFsMountHandler( documentRoot ) as unknown as MountHandler); await initWordPress(php, wordPressVersion, documentRoot, absoluteUrl); fs.ensureDirSync(wpContentPath); @@ -244,13 +239,13 @@ async function runPluginOrThemeMode( path.join(getWordpressVersionsPath(), wordPressVersion, 'wp-content'), wpContentPath ); - await php.mount(wpContentPath, createNodeFsMountHandler( `${documentRoot}/wp-content`)); + await php.mount(wpContentPath, createNodeFsMountHandler( `${documentRoot}/wp-content`) as unknown as MountHandler); const pluginName = path.basename(projectPath); const directoryName = mode === WPNowMode.PLUGIN ? 'plugins' : 'themes'; await php.mount( projectPath, - createNodeFsMountHandler( `${documentRoot}/wp-content/${directoryName}/${pluginName}`) + createNodeFsMountHandler( `${documentRoot}/wp-content/${directoryName}/${pluginName}`) as unknown as MountHandler ); if (mode === WPNowMode.THEME) { const templateName = getThemeTemplate(projectPath); @@ -260,7 +255,7 @@ async function runPluginOrThemeMode( if (fs.existsSync(templatePath)) { await php.mount( templatePath, - createNodeFsMountHandler( `${documentRoot}/wp-content/${directoryName}/${templateName}`) + createNodeFsMountHandler( `${documentRoot}/wp-content/${directoryName}/${templateName}`) as unknown as MountHandler ); } else { output?.error( @@ -281,7 +276,7 @@ async function runWpPlaygroundMode( getWordpressVersionsPath(), wordPressVersion ); - await php.mount(wordPressPath, createNodeFsMountHandler( documentRoot)); + await php.mount(wordPressPath, createNodeFsMountHandler( documentRoot) as unknown as MountHandler); await initWordPress(php, wordPressVersion, documentRoot, absoluteUrl); fs.ensureDirSync(wpContentPath); @@ -289,7 +284,7 @@ async function runWpPlaygroundMode( path.join(getWordpressVersionsPath(), wordPressVersion, 'wp-content'), wpContentPath ); - await php.mount(wpContentPath, createNodeFsMountHandler( `${documentRoot}/wp-content`)); + await php.mount(wpContentPath, createNodeFsMountHandler( `${documentRoot}/wp-content`) as unknown as MountHandler); await mountSqlitePlugin(php, documentRoot); await mountMuPlugins(php, documentRoot); @@ -327,7 +322,7 @@ async function login(php: PHP, options: WPNowOptions = {}) { do_action( 'wp_login', $user->user_login, $user );` ); - await php.request( { + await php.requestHandler.request( { url: '/playground-login.php', } ); @@ -404,17 +399,17 @@ async function mountMuPlugins(php: PHP, vfsDocumentRoot: string) { path.join(getWpNowPath(), 'mu-plugins'), // VFS paths always use forward / slashes so // we can't use path.join() for them - createNodeFsMountHandler( `${vfsDocumentRoot}/wp-content/mu-plugins`) + createNodeFsMountHandler( `${vfsDocumentRoot}/wp-content/mu-plugins`) as unknown as MountHandler ); } async function mountSqlitePlugin(php: PHP, vfsDocumentRoot: string) { const sqlitePluginPath = `${vfsDocumentRoot}/wp-content/plugins/${SQLITE_FILENAME}`; if (php.listFiles(sqlitePluginPath).length === 0) { - await php.mount(getSqlitePath(), createNodeFsMountHandler(sqlitePluginPath)); + await php.mount(getSqlitePath(), createNodeFsMountHandler(sqlitePluginPath) as unknown as MountHandler); await php.mount( path.join(getSqlitePath(), 'db.copy'), - createNodeFsMountHandler( `${vfsDocumentRoot}/wp-content/db.php`) + createNodeFsMountHandler( `${vfsDocumentRoot}/wp-content/db.php`) as unknown as MountHandler ); } } @@ -434,7 +429,7 @@ async function mountSqliteDatabaseDirectory( fs.ensureDirSync(path.join(wpContentPath, 'database')); await php.mount( path.join(wpContentPath, 'database'), - createNodeFsMountHandler( `${vfsDocumentRoot}/wp-content/database` ) + createNodeFsMountHandler( `${vfsDocumentRoot}/wp-content/database` ) as unknown as MountHandler ); } @@ -461,7 +456,7 @@ async function installationSteps(php: PHP, options: WPNowOptions) { const siteLanguage = options.siteLanguage; const executeStep = async ( step: 0 | 1 | 2 ) => { - return php.request( { + return php.requestHandler.request( { url: `/wp-admin/install.php?step=${ step }`, method: 'POST', body: @@ -513,4 +508,4 @@ export async function moveDatabasesInSitu( projectPath: string ) { fs.copySync( path.join( getSqlitePath(), 'db.copy' ), dbPhpPath ); fs.rmSync( wpContentPath, { recursive: true, force: true } ); } -} \ No newline at end of file +} From a22e0caf4d82ab37dd0884c4101f7c815dcedea9 Mon Sep 17 00:00:00 2001 From: Antony Agrios Date: Tue, 27 Aug 2024 10:23:48 +0300 Subject: [PATCH 07/20] Update: Remove mounts for files --- vendor/wp-now/src/execute-wp-cli.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/vendor/wp-now/src/execute-wp-cli.ts b/vendor/wp-now/src/execute-wp-cli.ts index d0edd21e3..1ac2d593c 100644 --- a/vendor/wp-now/src/execute-wp-cli.ts +++ b/vendor/wp-now/src/execute-wp-cli.ts @@ -22,9 +22,10 @@ export async function executeWPCli( projectPath: string, args: string[] ): Promi }); const requestHandler = new PHPRequestHandler({ - phpFactory: async ({ isPrimary, requestHandler:reqHandler }) => { + phpFactory: async ({ requestHandler:reqHandler }) => { const id = await loadNodeRuntime( options.phpVersion ); const php = new PHP(id); + php.requestHandler = reqHandler; return php; }, documentRoot: options.documentRoot, @@ -87,15 +88,11 @@ export async function executeWPCli( projectPath: string, args: string[] ): Promi require( '${wpCliPath}' );` } - await writeFiles(php, '/', createFiles); try{ php.mkdir(sqliteCommandPath); console.log('before cli') - await php.mount(wpCliPath, createNodeFsMountHandler(getWpCliPath()) as unknown as MountHandler) - console.log('after cli') - console.log('before sqlite') await php.mount(sqliteCommandPath, createNodeFsMountHandler(getSqliteCommandPath()) as unknown as MountHandler) console.log('after sqlite') }catch(e){ From 9a5292ee1936292a8a1c7bbe8086ad6d65aac85a Mon Sep 17 00:00:00 2001 From: Antony Agrios Date: Tue, 27 Aug 2024 10:57:51 +0300 Subject: [PATCH 08/20] Update: Try to fix wp-cli error --- src/lib/wpcli-versions.ts | 1 + vendor/wp-now/src/execute-wp-cli.ts | 9 +-------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/lib/wpcli-versions.ts b/src/lib/wpcli-versions.ts index ed52ade00..5dde1e200 100644 --- a/src/lib/wpcli-versions.ts +++ b/src/lib/wpcli-versions.ts @@ -55,6 +55,7 @@ async function getLatestWPCliVersion() { export const getWPCliVersionFromInstallation = async () => { const { stdout } = await executeWPCli( '.', [ '--version' ] ); + console.log( stdout ); if ( stdout?.startsWith( 'WP-CLI ' ) ) { const version = stdout.split( ' ' )[ 1 ]; if ( ! version ) { diff --git a/vendor/wp-now/src/execute-wp-cli.ts b/vendor/wp-now/src/execute-wp-cli.ts index 1ac2d593c..92a5e7ab8 100644 --- a/vendor/wp-now/src/execute-wp-cli.ts +++ b/vendor/wp-now/src/execute-wp-cli.ts @@ -35,7 +35,7 @@ export async function executeWPCli( projectPath: string, args: string[] ): Promi const php = await requestHandler.getPrimaryPhp() - php.mount(projectPath, createNodeFsMountHandler(options.documentRoot) as unknown as MountHandler); + php.mount(options.documentRoot, createNodeFsMountHandler(projectPath) as unknown as MountHandler); //Set the SAPI name to cli before running the script await php.setSapiName('cli'); @@ -92,23 +92,16 @@ export async function executeWPCli( projectPath: string, args: string[] ): Promi try{ php.mkdir(sqliteCommandPath); - console.log('before cli') await php.mount(sqliteCommandPath, createNodeFsMountHandler(getSqliteCommandPath()) as unknown as MountHandler) - console.log('after sqlite') }catch(e){ console.log(e) } - // Set site's folder as the current working directory as the terminal will opened in that location. - php.chdir(options.documentRoot); - try { const result = await php.run({ scriptPath: runCliPath, }); - const stderr = php.readFileAsText(stderrPath).replace('PHP.run() output was: #!/usr/bin/env php', '').trim(); - return { stdout: result.text.replace('#!/usr/bin/env php', '').trim(), stderr, exitCode: result.exitCode }; } catch (error) { const stderr = php.readFileAsText(stderrPath).replace('PHP.run() output was: #!/usr/bin/env php', '').trim(); From 7b9a6cb4fa4b25fa4d7bf964d326cc80d0e18072 Mon Sep 17 00:00:00 2001 From: Jeroen Pfeil Date: Tue, 27 Aug 2024 16:35:59 +0700 Subject: [PATCH 09/20] Mkdir and await mount for documentroot --- vendor/wp-now/src/execute-wp-cli.ts | 4 +++- vendor/wp-now/src/wp-now.ts | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/vendor/wp-now/src/execute-wp-cli.ts b/vendor/wp-now/src/execute-wp-cli.ts index 92a5e7ab8..716bbbafd 100644 --- a/vendor/wp-now/src/execute-wp-cli.ts +++ b/vendor/wp-now/src/execute-wp-cli.ts @@ -35,7 +35,9 @@ export async function executeWPCli( projectPath: string, args: string[] ): Promi const php = await requestHandler.getPrimaryPhp() - php.mount(options.documentRoot, createNodeFsMountHandler(projectPath) as unknown as MountHandler); + + php.mkdir(options.documentRoot); + await php.mount(options.documentRoot, createNodeFsMountHandler(projectPath) as unknown as MountHandler); //Set the SAPI name to cli before running the script await php.setSapiName('cli'); diff --git a/vendor/wp-now/src/wp-now.ts b/vendor/wp-now/src/wp-now.ts index 8d44d4e25..0112a79bc 100644 --- a/vendor/wp-now/src/wp-now.ts +++ b/vendor/wp-now/src/wp-now.ts @@ -73,7 +73,7 @@ export default async function startWPNow( ` Date: Tue, 27 Aug 2024 17:09:47 +0700 Subject: [PATCH 10/20] Change directory when running CLI commands --- src/lib/import-export/import/importers/importer.ts | 5 +++-- vendor/wp-now/src/execute-wp-cli.ts | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/lib/import-export/import/importers/importer.ts b/src/lib/import-export/import/importers/importer.ts index fffb1db0e..ee746515b 100644 --- a/src/lib/import-export/import/importers/importer.ts +++ b/src/lib/import-export/import/importers/importer.ts @@ -49,7 +49,7 @@ abstract class BaseImporter extends EventEmitter implements Importer { try { await move( sqlFile, tmpPath ); - const { stderr, exitCode } = await server.executeWpCliCommand( + const { stderr, exitCode, stdout } = await server.executeWpCliCommand( `sqlite import ${ sqlTempFile } --require=/tmp/sqlite-command/command.php` ); @@ -58,7 +58,8 @@ abstract class BaseImporter extends EventEmitter implements Importer { } if ( exitCode ) { - throw new Error( 'Database import failed' ); + console.log(tmpPath) + throw new Error( 'Database import failed: ' + stdout ); } } finally { await this.safelyDeleteFile( tmpPath ); diff --git a/vendor/wp-now/src/execute-wp-cli.ts b/vendor/wp-now/src/execute-wp-cli.ts index 716bbbafd..c3e46b54b 100644 --- a/vendor/wp-now/src/execute-wp-cli.ts +++ b/vendor/wp-now/src/execute-wp-cli.ts @@ -100,6 +100,7 @@ export async function executeWPCli( projectPath: string, args: string[] ): Promi } try { + php.chdir(options.documentRoot); const result = await php.run({ scriptPath: runCliPath, }); From 164d46c2f9ec681d901e51695c049d64a5de8399 Mon Sep 17 00:00:00 2001 From: Antony Agrios Date: Tue, 27 Aug 2024 17:06:34 +0300 Subject: [PATCH 11/20] Update: fix tests --- jest.config.ts | 12 +- package-lock.json | 752 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 3 +- 3 files changed, 765 insertions(+), 2 deletions(-) diff --git a/jest.config.ts b/jest.config.ts index 91ce1d4a7..6c65e8107 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -1,14 +1,24 @@ module.exports = { roots: [ '/src' ], + preset: 'ts-jest', transform: { - '^.+\\.tsx?$': [ + '^.+\\.(ts|tsx)$': [ 'ts-jest', { diagnostics: { exclude: [ '**/vendor/wp-now/**/*' ], }, + useESM: true, + tsconfig: { + module: 'esnext', + }, }, ], + '^.+\\.m?js$': [ 'babel-jest', { presets: [ '@babel/preset-env' ] } ], + }, + transformIgnorePatterns: [ 'node_modules/(?!(@php-wasm|@wp-playground)/)' ], + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', }, testEnvironment: 'jsdom', globals: { diff --git a/package-lock.json b/package-lock.json index a1c96faca..c8185b5ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -79,6 +79,7 @@ "@wordpress/element": "^5.27.0", "@wordpress/react-i18n": "^3.48.0", "autoprefixer": "^10.4.16", + "babel-preset-env": "^1.7.0", "copy-webpack-plugin": "^12.0.2", "css-loader": "^6.0.0", "ejs": "^3.1.10", @@ -7357,6 +7358,214 @@ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==" }, + "node_modules/babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "node_modules/babel-code-frame/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/babel-code-frame/node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", + "dev": true + }, + "node_modules/babel-code-frame/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha512-gCtfYORSG1fUMX4kKraymq607FWgMWg+j42IFPc18kFQEsmtaibP4UrqsXt8FlEJle25HUd4tsoDR7H2wDhe9Q==", + "dev": true, + "dependencies": { + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha512-RL8n2NiEj+kKztlrVJM9JT1cXzzAdvWFh76xh/H1I4nKwunzE4INBXn8ieCZ+wh4zWszZk7NBS1s/8HR5jDkzQ==", + "dev": true, + "dependencies": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha512-bHkmjcC9lM1kmZcVpA5t2om2nzT/xiZpo6TJq7UlZ3wqKfzia4veeXbIhKvJXAMzhhEBd3cR1IElL5AenWEUpA==", + "dev": true, + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha512-qe5csbhbvq6ccry9G7tkXbzNtcDiH4r51rrPUbwwoTzZ18AqxWYRZT6AOmxrpxKnQBW0pYlBI/8vh73Z//78nQ==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha512-Oo6+e2iX+o9eVvJ9Y5eKL5iryeRdsIkwRYheCuhYdVHsdEQysbc2z2QkqCLIYnNxkT5Ss3ggrHdXiDI7Dhrn4Q==", + "dev": true, + "dependencies": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha512-WfgKFX6swFB1jS2vo+DwivRN4NB8XUdM3ij0Y1gnC21y1tdBoe6xjVnd7NSI6alv+gZXCtJqvrTeMW3fR/c0ng==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha512-zAYl3tqerLItvG5cKYw7f1SpvIxS9zi7ohyGHaI9cgDUjAT6YcY9jIEH5CstetP5wHIVSceXwNS7Z5BpJg+rOw==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha512-Op9IhEaxhbRT8MDXx2iNuMgciu2V8lDvYCNQbDGjdBNCjaMvyLf4wl4A3b8IgndCyQF8TwfgsQ8T3VD8aX1/pA==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha512-VlPiWmqmGJp0x0oK27Out1D+71nVVCTSdlbhIVoaBAj2lUgrNjBCRR9+llO4lTSb2O4r7PJg+RobRkhBrf6ofg==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha512-RYqaPD0mQyQIFRu7Ho5wE2yvA/5jxqCIj/Lv4BXNq23mHYu/vxikOy2JueLiBxQknwapwrJeNCesvY0ZcfnlHg==", + "dev": true, + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha512-sLI+u7sXJh6+ToqDr57Bv973kCepItDhMou0xCP2YPVmR1jkHSCY+p1no8xErbV1Siz5QE8qKT1WIwybSWlqjw==", + "dev": true, + "dependencies": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -7378,6 +7587,24 @@ "@babel/core": "^7.8.0" } }, + "node_modules/babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha512-B1M5KBP29248dViEo1owyY32lk1ZSH2DaNNrXLGt8lyjjHm7pBqAdQ7VKUPR6EEDO323+OvT3MQXbCin8ooWdA==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -7497,6 +7724,342 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha512-4Zp4unmHgw30A1eWI5EpACji2qMocisdXhAftfhXoSV9j0Tvj6nRFE3tOmRY912E0FMRm/L5xWE7MGVT2FoLnw==", + "dev": true + }, + "node_modules/babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha512-Z/flU+T9ta0aIEKl1tGEmN/pZiI1uXmCiGFRegKacQfEJzp7iNsKloZmyJlQr+75FCJtiFfGIK03SiCvCt9cPQ==", + "dev": true + }, + "node_modules/babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha512-Gx9CH3Q/3GKbhs07Bszw5fPTlU+ygrOGfAhEt7W2JICwufpC4SuO0mG0+4NykPBSYPMJhqvVlDBU17qB1D+hMQ==", + "dev": true + }, + "node_modules/babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha512-7BgYJujNCg0Ti3x0c/DL3tStvnKS6ktIYOmo9wginv/dfZOrbSZ+qG4IRRHMBOzZ5Awb1skTiAsQXg/+IWkZYw==", + "dev": true, + "dependencies": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha512-PCqwwzODXW7JMrzu+yZIaYbPQSKjDTAsNNlK2l5Gg9g4rz2VzLnZsStvp/3c46GfXpwkyufb3NCyG9+50FF1Vg==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha512-2+ujAT2UMBzYFm7tidUsYh+ZoIutxJ3pN9IYrF1/H6dCKtECfhmB8UkHVpyxDwkj0CYbQG35ykoz925TUnBc3A==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha512-YiN6sFAQ5lML8JjCmr7uerS5Yc/EMbgg9G8ZNmk2E3nYX4ckHR01wrkeeMijEf5WHNK5TW0Sl0Uu3pv3EdOJWw==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha512-5Dy7ZbRinGrNtmWpquZKZ3EGY8sDgIVB4CU8Om8q8tnMLrD/m94cKglVcHps0BCTdZ0TJeeAWOq2TK9MIY6cag==", + "dev": true, + "dependencies": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha512-C/uAv4ktFP/Hmh01gMTvYvICrKze0XVX9f2PdIXuriCSvUmV9j+u+BB9f5fJK3+878yMK6dkdcq+Ymr9mrcLzw==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha512-aNv/GDAW0j/f4Uy1OEPZn1mqD+Nfy9viFGBfQ5bZyT35YqOiqx7/tXdyfZkJ1sC21NyEsBdfDY6PYmLHF4r5iA==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha512-ossocTuPOssfxO2h+Z3/Ea1Vo1wWx31Uqy9vIiJusOP4TbF7tPs9U0sJ9pX9OJPf4lXRGj5+6Gkl/HHKiAP5ug==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha512-DLuRwoygCoXx+YfxHLkVx5/NpeSbVwfoTeBykpJK7JhYWlL/O8hgAK/reforUnZDlxasOrVPPJVI/guE3dCwkw==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha512-iFp5KIcorf11iBqu/y/a7DK3MN5di3pNCzto61FqCNnUX4qeBwcV1SLqe10oXNnCaxBUImX3SckX2/o1nsrTcg==", + "dev": true, + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha512-tjFl0cwMPpDYyoqYA9li1/7mGFit39XiNX5DKC/uCNjBctMxyL1/PT/l4rSlbvBG1pOKI88STRdUsWXB3/Q9hQ==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha512-LnIIdGWIKdw7zwckqx+eGjcS8/cl8D74A3BpJbGjKTFFNJSMrjN4bIh22HY1AlkUbeLG6X6OZj56BDvWD+OeFA==", + "dev": true, + "dependencies": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "dev": true, + "dependencies": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha512-ONFIPsq8y4bls5PPsAWYXH/21Hqv64TBxdje0FvU3MhIV6QM2j5YS7KvAzg/nTIVLot2D2fmFQrFWCbgHlFEjg==", + "dev": true, + "dependencies": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha512-LpVbiT9CLsuAIp3IG0tfbVo81QIhn6pE8xBJ7XSeCtFlMltuar5VuBV6y6Q45tpui9QWcy5i0vLQfCfrnF7Kiw==", + "dev": true, + "dependencies": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha512-8G5hpZMecb53vpD3mjs64NhI1au24TAmokQ4B+TBFBjN9cVoGoOvotdrMMRmHvVZUEvqGUPWL514woru1ChZMA==", + "dev": true, + "dependencies": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha512-8HxlW+BB5HqniD+nLkQ4xSAVq3bR/pcYW9IigY+2y0dI+Y7INFeTbfAQr+63T3E4UDsZGjyb+l9txUnABWxlOQ==", + "dev": true, + "dependencies": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha512-mDdocSfUVm1/7Jw/FIRNw9vPrBQNePy6wZJlR8HAUBLybNp1w/6lr6zZ2pjMShee65t/ybR5pT8ulkLzD1xwiw==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha512-3Ghhi26r4l3d0Js933E5+IhHwk0A1yiutj9gwvzmFbVV0sPMYk2lekhOufHBswX7NCoSeF4Xrl3sCIuSIa+zOg==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha512-CYP359ADryTo3pCsH0oxRo/0yn6UsEZLqYohHmvLQdfS9xkf+MbCzE3/Kolw9OYIY4ZMilH25z/5CbQbwDD+lQ==", + "dev": true, + "dependencies": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha512-x8b9W0ngnKzDMHimVtTfn5ryimars1ByTqsfBDwAqLibmuuQY6pgBQi5z1ErIsUOWBdw1bW9FSz5RZUojM4apg==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha512-fz6J2Sf4gYN6gWgRZaoFXmq93X+Li/8vf+fb0sGDVtdeWvxC9y5/bTD7bvfWMEq6zetGEHpWjtzRGSugt5kNqw==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha512-v61Dbbihf5XxnYjtBN04B/JBvsScY37R1cZT5r9permN1cp+b70DY3Ib3fIkgn1DI9U3tGgBJZVD8p/mE/4JbQ==", + "dev": true, + "dependencies": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + } + }, + "node_modules/babel-plugin-transform-es2015-unicode-regex/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/babel-plugin-transform-es2015-unicode-regex/node_modules/regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha512-tJ9+S4oKjxY8IZ9jmjnp/mtytu1u3iyIQAfmI51IKWH6bFf7XR1ybtaO6j7INhZKXOTYADk7V5qxaqLkmNxiZQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "node_modules/babel-plugin-transform-es2015-unicode-regex/node_modules/regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha512-jlQ9gYLfk2p3V5Ag5fYhA7fv7OHzd1KUH0PRP46xc3TgwjwgROIW572AfYg/X9kaNq/LJnu6oJcFRXlIrGoTRw==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha512-LzXDmbMkklvNhprr20//RStKVcT8Cu+SQtX18eMHLhjHf2yFzwtQ0S2f0jQ+89rokoNdmwoSqYzAhq86FxlLSQ==", + "dev": true, + "dependencies": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha512-LS+dBkUGlNR15/5WHKe/8Neawx663qttS6AGqoOUhICc9d1KciBvtrQSuc0PI+CxQ2Q/S1aKuJ+u64GtLdcEZg==", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.10.0" + } + }, + "node_modules/babel-plugin-transform-regenerator/node_modules/regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + }, + "node_modules/babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", @@ -7520,6 +8083,66 @@ "@babel/core": "^7.0.0" } }, + "node_modules/babel-preset-env": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", + "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", + "dev": true, + "dependencies": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" + } + }, + "node_modules/babel-preset-env/node_modules/browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + }, + "bin": { + "browserslist": "cli.js" + } + }, + "node_modules/babel-preset-env/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/babel-preset-jest": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", @@ -7550,6 +8173,90 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, + "node_modules/babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==", + "dev": true, + "dependencies": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-traverse/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/babel-traverse/node_modules/globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-traverse/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "node_modules/babel-types/node_modules/to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true, + "bin": { + "babylon": "bin/babylon.js" + } + }, "node_modules/bail": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", @@ -12221,6 +12928,27 @@ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -12883,6 +13611,15 @@ "node": ">=10.13.0" } }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/ip-address": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", @@ -18034,6 +18771,15 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, + "node_modules/private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -18696,6 +19442,12 @@ "node": ">=4" } }, + "node_modules/regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha512-x+Y3yA24uF68m5GA+tBjbGYo64xXVJpbToBaWCoSNSc1hdk6dfctaRWrNFTVJZIIhL5GxW8zwjoixbnifnK59g==", + "dev": true + }, "node_modules/regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", diff --git a/package.json b/package.json index 7ed91420f..93d1bd7ee 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "@wordpress/element": "^5.27.0", "@wordpress/react-i18n": "^3.48.0", "autoprefixer": "^10.4.16", + "babel-preset-env": "^1.7.0", "copy-webpack-plugin": "^12.0.2", "css-loader": "^6.0.0", "ejs": "^3.1.10", @@ -101,8 +102,8 @@ "@formatjs/intl-locale": "^3.4.5", "@formatjs/intl-localematcher": "^0.5.4", "@php-wasm/node": "0.9.19", - "@php-wasm/universal": "0.9.19", "@php-wasm/scopes": "0.9.19", + "@php-wasm/universal": "0.9.19", "@rive-app/react-canvas": "^4.12.0", "@sentry/electron": "^4.17.0", "@sentry/webpack-plugin": "^2.16.1", From a94b03ef045b1362c142217435974f5e4d21533a Mon Sep 17 00:00:00 2001 From: Antony Agrios Date: Tue, 27 Aug 2024 17:12:45 +0300 Subject: [PATCH 12/20] Update: fix lint errors --- src/lib/import-export/import/importers/importer.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/import-export/import/importers/importer.ts b/src/lib/import-export/import/importers/importer.ts index ee746515b..c66b88231 100644 --- a/src/lib/import-export/import/importers/importer.ts +++ b/src/lib/import-export/import/importers/importer.ts @@ -58,7 +58,6 @@ abstract class BaseImporter extends EventEmitter implements Importer { } if ( exitCode ) { - console.log(tmpPath) throw new Error( 'Database import failed: ' + stdout ); } } finally { From f299c8ef487f5504c1dca363731ee7e463bc472c Mon Sep 17 00:00:00 2001 From: Antony Agrios Date: Wed, 28 Aug 2024 18:17:34 +0300 Subject: [PATCH 13/20] Update: Add certificates to handle ssl connections for various wp-cli commands (eg core update) --- package-lock.json | 667 ++++++++++++++++++++++++---- package.json | 6 +- src/setup-wp-server-files.ts | 1 + vendor/wp-now/src/execute-wp-cli.ts | 118 ++--- 4 files changed, 651 insertions(+), 141 deletions(-) diff --git a/package-lock.json b/package-lock.json index c8185b5ba..04d95f0c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,9 +13,9 @@ "@automattic/generate-password": "^0.1.0", "@formatjs/intl-locale": "^3.4.5", "@formatjs/intl-localematcher": "^0.5.4", - "@php-wasm/node": "0.9.19", - "@php-wasm/scopes": "0.9.19", - "@php-wasm/universal": "0.9.19", + "@php-wasm/node": "0.9.34", + "@php-wasm/scopes": "0.9.34", + "@php-wasm/universal": "0.9.34", "@rive-app/react-canvas": "^4.12.0", "@sentry/electron": "^4.17.0", "@sentry/webpack-plugin": "^2.16.1", @@ -3525,6 +3525,380 @@ "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==", "dev": true }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -4383,12 +4757,11 @@ } }, "node_modules/@php-wasm/logger": { - "version": "0.9.19", - "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-0.9.19.tgz", - "integrity": "sha512-G5iZkSpVCOi1F0I6SBBcGv+JtcFWjg4woxKz4PAx9OFHGDIsIZABosS+uS/6E1UcqKw3Wx9J/CyDHqei6WZM+A==", - "license": "GPL-2.0-or-later", + "version": "0.9.34", + "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-0.9.34.tgz", + "integrity": "sha512-EsxVh6BwY499to/YyYkXWO5qW/RPoypWneyzI7U96AD3eUYf9ZUrowU5/HwPg8BK7pLQQHPQw5PpkQ6XQb7Rfg==", "dependencies": { - "@php-wasm/node-polyfills": "0.9.19" + "@php-wasm/node-polyfills": "0.9.34" }, "engines": { "node": ">=18.18.0", @@ -4396,20 +4769,20 @@ } }, "node_modules/@php-wasm/node": { - "version": "0.9.19", - "resolved": "https://registry.npmjs.org/@php-wasm/node/-/node-0.9.19.tgz", - "integrity": "sha512-6P4r86f1aIfGfTMsm3yIykIzt+bT9IF809yKoO3HZqSJpg09+8WkjwpMa/Gx/gEfyiYzeWJv6preQbzzcr17bA==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/logger": "0.9.19", - "@php-wasm/node-polyfills": "0.9.19", - "@php-wasm/universal": "0.9.19", - "@php-wasm/util": "0.9.19", - "@wp-playground/common": "0.9.19", + "version": "0.9.34", + "resolved": "https://registry.npmjs.org/@php-wasm/node/-/node-0.9.34.tgz", + "integrity": "sha512-b6LQJ0tsXygEwDAd7vPnQPrg3TYYH4niWKx5gsfWUYB/jW/PS5k584KRqTJiOK4wQoA9F2+LODa3J0d5OlaNUg==", + "dependencies": { + "@php-wasm/logger": "0.9.34", + "@php-wasm/node-polyfills": "0.9.34", + "@php-wasm/universal": "0.9.34", + "@php-wasm/util": "0.9.34", + "@wp-playground/common": "0.9.34", + "@wp-playground/wordpress": "0.9.34", "comlink": "^4.4.1", "express": "4.19.2", "ini": "4.1.2", - "ws": "8.13.0", + "ws": "8.18.0", "yargs": "17.7.2" }, "engines": { @@ -4418,10 +4791,9 @@ } }, "node_modules/@php-wasm/node-polyfills": { - "version": "0.9.19", - "resolved": "https://registry.npmjs.org/@php-wasm/node-polyfills/-/node-polyfills-0.9.19.tgz", - "integrity": "sha512-DL5xztYdIotRwMo3nIWEjQOWQZjx+KPq9j2uKFkH52APVRSMdKk2MJLf1raOojnYRNjXSsvAGOMh5SY3xi97aQ==", - "license": "GPL-2.0-or-later" + "version": "0.9.34", + "resolved": "https://registry.npmjs.org/@php-wasm/node-polyfills/-/node-polyfills-0.9.34.tgz", + "integrity": "sha512-jQS2JLLTj66+0xl3PtnOScGqs9LffOZeSlgtZ78e739AegpfE1vNJuretVCOlIQNTR4H+6YOC1zXFdl9DHTT5A==" }, "node_modules/@php-wasm/node/node_modules/ini": { "version": "4.1.2", @@ -4431,35 +4803,13 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@php-wasm/node/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/@php-wasm/progress": { - "version": "0.9.19", - "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-0.9.19.tgz", - "integrity": "sha512-qZKyLbTH2WqrNoOytGtDgdNE3EnK0J/X4e954NHY/VWzSLX87vS5+lcrMBn92nEgAea9o6W4ym2EmkVV6TYIOw==", - "license": "GPL-2.0-or-later", + "version": "0.9.34", + "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-0.9.34.tgz", + "integrity": "sha512-8EeVtLvLnTSEcbzFP4wdlQsHUzfzvvkvetDPGJh57Ehhy29LceSwNL4K5Opu/JCX1t3NMevgxPBAZM9rLNXlNQ==", "dependencies": { - "@php-wasm/logger": "0.9.19", - "@php-wasm/node-polyfills": "0.9.19" + "@php-wasm/logger": "0.9.34", + "@php-wasm/node-polyfills": "0.9.34" }, "engines": { "node": ">=18.18.0", @@ -4467,36 +4817,33 @@ } }, "node_modules/@php-wasm/scopes": { - "version": "0.9.19", - "resolved": "https://registry.npmjs.org/@php-wasm/scopes/-/scopes-0.9.19.tgz", - "integrity": "sha512-hSlNm/CAO6gcmPXHibAlPITZQ4+XyGC0ELCp0fI150WqzM1aqOp/X7B8PTIrYqsv7VgBRJDR6X/wtc53WZx1fw==", - "license": "GPL-2.0-or-later", + "version": "0.9.34", + "resolved": "https://registry.npmjs.org/@php-wasm/scopes/-/scopes-0.9.34.tgz", + "integrity": "sha512-AebuRIuDIPNlAg5rusda4oAZJWLPxwm7dS4yxVJAHOcwDy/OlBPvI1KF/KLdai/I1njtmQKg8p96Fo9Wa8BBeA==", "engines": { "node": ">=16.15.1", "npm": ">=8.11.0" } }, "node_modules/@php-wasm/stream-compression": { - "version": "0.9.19", - "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-0.9.19.tgz", - "integrity": "sha512-CG58UIHRS0sEgrYGf8ICBHy3d3kKbVxjDlVRLIUJxcGfNxAFy+taWXjwWim/Ne5l75FuQXG+ku/jbCjD8dh3lw==", - "license": "GPL-2.0-or-later", + "version": "0.9.34", + "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-0.9.34.tgz", + "integrity": "sha512-3XcNcwSBhX3TIIGtXsH4D8yzzC7iAhMLG9nqmPMnOk9gP3bO89WvapZV+pzLsSVIRqcSBvMrdLNfaFQgqZYEkw==", "dependencies": { - "@php-wasm/node-polyfills": "0.9.19", - "@php-wasm/util": "0.9.19" + "@php-wasm/node-polyfills": "0.9.34", + "@php-wasm/util": "0.9.34" } }, "node_modules/@php-wasm/universal": { - "version": "0.9.19", - "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-0.9.19.tgz", - "integrity": "sha512-BVmdr1HuFoGUiamTL+UTbD3CGUoz68egPBh79SHn0vmqkxVhm29qhOIjvM+MQ2YWkUyUCK/FB4yCiTU6vms/zQ==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/logger": "0.9.19", - "@php-wasm/node-polyfills": "0.9.19", - "@php-wasm/progress": "0.9.19", - "@php-wasm/stream-compression": "0.9.19", - "@php-wasm/util": "0.9.19", + "version": "0.9.34", + "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-0.9.34.tgz", + "integrity": "sha512-QhPt3Qv0gKTZSjBFEEDOicJ33f08Rdl44WkX8zZbCN7QDd6XRGxkWAGaiFK8E38Ww+Z/8pSElK65qnJGfWxLhw==", + "dependencies": { + "@php-wasm/logger": "0.9.34", + "@php-wasm/node-polyfills": "0.9.34", + "@php-wasm/progress": "0.9.34", + "@php-wasm/stream-compression": "0.9.34", + "@php-wasm/util": "0.9.34", "comlink": "^4.4.1", "ini": "4.1.2" }, @@ -4509,15 +4856,14 @@ "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": "0.9.19", - "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-0.9.19.tgz", - "integrity": "sha512-OT69YowT6b/his2fSvd/PUJb6XmWLHaVZEsjl1aH0uNbA82hh+bce2scukzcWbEefBI7VIJeV4IHsNfMqHbPLg==", + "version": "0.9.34", + "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-0.9.34.tgz", + "integrity": "sha512-4R6hrqz30QKmrIcqLoUKh3FqmrzXCdNNNI7yWc2nad061vzi8HUvL47f5+mcjX1mEjDPZWlmqXWBtJr6oNJoEg==", "engines": { "node": ">=18.18.0", "npm": ">=8.11.0" @@ -6667,15 +7013,56 @@ } }, "node_modules/@wp-playground/common": { - "version": "0.9.19", - "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-0.9.19.tgz", - "integrity": "sha512-rmaOJDv3fQBFTUF482Y3/XsoEiOkEP+iIX6w5w9ZH7tm05QhWMaksuSqc2yJst2nzPCaZzPWoCRQ7k0FAi6dpA==", - "license": "GPL-2.0-or-later", + "version": "0.9.34", + "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-0.9.34.tgz", + "integrity": "sha512-vIEj3VOtepcm6q0Vd7ETT0kObA5IiqrXdJL0mBzvVDdlodMooyKxfGa03FdCPYnzjBrtILIcCAfBSokw2TEdDQ==", + "dependencies": { + "@php-wasm/universal": "0.9.34", + "@php-wasm/util": "0.9.34", + "comlink": "^4.4.1", + "ini": "4.1.2" + }, "engines": { "node": ">=18.18.0", "npm": ">=8.11.0" } }, + "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==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@wp-playground/wordpress": { + "version": "0.9.34", + "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-0.9.34.tgz", + "integrity": "sha512-rm5SgIdg2IurNEOXJf/RZQDE1fjO31yOd6aknzuEjUCuH+zPXphwp8KTcFTe0kF5kxDfkvU5OdOpHN868bkjgg==", + "dependencies": { + "@php-wasm/node": "0.9.34", + "@php-wasm/universal": "0.9.34", + "@php-wasm/util": "0.9.34", + "@wp-playground/common": "0.9.34", + "comlink": "^4.4.1", + "express": "4.19.2", + "ini": "4.1.2", + "ws": "8.18.0", + "yargs": "17.7.2" + }, + "engines": { + "node": ">=18.18.0", + "npm": ">=8.11.0" + } + }, + "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==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/@xmldom/xmldom": { "version": "0.8.10", "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", @@ -9206,8 +9593,7 @@ "node_modules/comlink": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.4.1.tgz", - "integrity": "sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q==", - "license": "Apache-2.0" + "integrity": "sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q==" }, "node_modules/comma-separated-tokens": { "version": "2.0.3", @@ -11070,6 +11456,45 @@ "dev": true, "optional": true }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "peer": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -19800,6 +20225,24 @@ "node": ">=8.0" } }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -19896,9 +20339,9 @@ } }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dependencies": { "loose-envify": "^1.1.0" } @@ -22452,6 +22895,63 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/vite": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz", + "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, "node_modules/w3c-xmlserializer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", @@ -23078,7 +23578,6 @@ "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "dev": true, "engines": { "node": ">=10.0.0" }, diff --git a/package.json b/package.json index 93d1bd7ee..f4bdd3008 100644 --- a/package.json +++ b/package.json @@ -101,9 +101,9 @@ "@automattic/generate-password": "^0.1.0", "@formatjs/intl-locale": "^3.4.5", "@formatjs/intl-localematcher": "^0.5.4", - "@php-wasm/node": "0.9.19", - "@php-wasm/scopes": "0.9.19", - "@php-wasm/universal": "0.9.19", + "@php-wasm/node": "0.9.34", + "@php-wasm/scopes": "0.9.34", + "@php-wasm/universal": "0.9.34", "@rive-app/react-canvas": "^4.12.0", "@sentry/electron": "^4.17.0", "@sentry/webpack-plugin": "^2.16.1", diff --git a/src/setup-wp-server-files.ts b/src/setup-wp-server-files.ts index bc4f34f27..b9496a922 100644 --- a/src/setup-wp-server-files.ts +++ b/src/setup-wp-server-files.ts @@ -1,6 +1,7 @@ import path from 'path'; import fs from 'fs-extra'; import semver from 'semver'; +import { executeWPCli } from '../vendor/wp-now/src/execute-wp-cli'; import { SQLITE_FILENAME } from '../vendor/wp-now/src/constants'; import { getWordPressVersionPath } from '../vendor/wp-now/src/download'; import getSqlitePath from '../vendor/wp-now/src/get-sqlite-path'; diff --git a/vendor/wp-now/src/execute-wp-cli.ts b/vendor/wp-now/src/execute-wp-cli.ts index c3e46b54b..690cfa033 100644 --- a/vendor/wp-now/src/execute-wp-cli.ts +++ b/vendor/wp-now/src/execute-wp-cli.ts @@ -1,11 +1,12 @@ import { downloadWpCli } from './download'; +import { rootCertificates } from 'tls'; import getWpCliPath from './get-wp-cli-path'; import getWpNowConfig from './config'; import { DEFAULT_PHP_VERSION, DEFAULT_WORDPRESS_VERSION } from './constants'; import { phpVar } from '@php-wasm/util'; -import { createNodeFsMountHandler, loadNodeRuntime } from '@php-wasm/node'; +import { createNodeFsMountHandler, getPHPLoaderModule, withNetworking } from '@php-wasm/node'; import { getSqliteCommandPath } from '../../../src/lib/sqlite-command-versions'; -import { PHP, PHPRequestHandler, MountHandler, writeFiles } from '@php-wasm/universal'; +import { PHP, PHPRequestHandler, MountHandler, writeFiles, setPhpIniEntries, loadPHPRuntime } from '@php-wasm/universal'; import { readFileSync } from 'fs'; const isWindows = process.platform === 'win32'; @@ -21,19 +22,24 @@ export async function executeWPCli( projectPath: string, args: string[] ): Promi path: projectPath, }); - const requestHandler = new PHPRequestHandler({ - phpFactory: async ({ requestHandler:reqHandler }) => { - const id = await loadNodeRuntime( options.phpVersion ); - const php = new PHP(id); - php.requestHandler = reqHandler; - return php; - }, - documentRoot: options.documentRoot, - absoluteUrl: options.absoluteUrl, - rewriteRules: [] - }); - - const php = await requestHandler.getPrimaryPhp() + const id = await loadPHPRuntime( + await getPHPLoaderModule(options.phpVersion), + await withNetworking({}) + ); + const php = new PHP(id); + // const requestHandler = new PHPRequestHandler({ + // phpFactory: async ({ requestHandler:reqHandler }) => { + // const id = await loadNodeRuntime( options.phpVersion ); + // const php = new PHP(id); + // php.requestHandler = reqHandler; + // return php; + // }, + // documentRoot: options.documentRoot, + // absoluteUrl: options.absoluteUrl, + // rewriteRules: [] + // }); + // + // const php = await requestHandler.getPrimaryPhp() php.mkdir(options.documentRoot); @@ -50,48 +56,52 @@ export async function executeWPCli( projectPath: string, args: string[] ): Promi const runCliPath = '/tmp/run-cli.php'; const createFiles = { [wpCliPath]: readFileSync(getWpCliPath()), - [stderrPath]: '', - [runCliPath]: ` Date: Thu, 29 Aug 2024 12:53:09 +0300 Subject: [PATCH 14/20] Update: Remove php-wasm patch --- patches/@php-wasm+node+0.6.16.patch | 256 ---------------------------- 1 file changed, 256 deletions(-) delete mode 100644 patches/@php-wasm+node+0.6.16.patch diff --git a/patches/@php-wasm+node+0.6.16.patch b/patches/@php-wasm+node+0.6.16.patch deleted file mode 100644 index 8fea5e52c..000000000 --- a/patches/@php-wasm+node+0.6.16.patch +++ /dev/null @@ -1,256 +0,0 @@ -diff --git a/node_modules/@php-wasm/node/index.cjs b/node_modules/@php-wasm/node/index.cjs -index 1be4252..7f01cfd 100644 ---- a/node_modules/@php-wasm/node/index.cjs -+++ b/node_modules/@php-wasm/node/index.cjs -@@ -4447,7 +4447,6 @@ function init(RuntimeName, PHPLoader) { - old_node.name = new_name; - new_dir.contents[new_name] = old_node; - new_dir.timestamp = old_node.parent.timestamp; -- old_node.parent = new_dir; - }, - unlink(parent, name) { - delete parent.contents[name]; -@@ -5736,6 +5735,7 @@ function init(RuntimeName, PHPLoader) { - FS.hashRemoveNode(old_node); - try { - old_dir.node_ops.rename(old_node, new_dir, new_name); -+ old_node.parent = new_dir; - } catch (e) { - throw e; - } finally { -@@ -6650,6 +6650,11 @@ function init(RuntimeName, PHPLoader) { - doStat: function(func, path, buf) { - try { - var stat = func(path); -+ if (NODEFS.isWindows) { -+ // Node.js on Windows never represents permission bit 'x', so -+ // propagate read bits to execute bits. -+ stat.mode = stat.mode | (stat.mode & 292) >> 2; -+ } - } catch (e) { - if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { - return -54; -@@ -12077,7 +12082,6 @@ function init2(RuntimeName, PHPLoader) { - old_node.name = new_name; - new_dir.contents[new_name] = old_node; - new_dir.timestamp = old_node.parent.timestamp; -- old_node.parent = new_dir; - }, - unlink(parent, name) { - delete parent.contents[name]; -@@ -13366,6 +13370,7 @@ function init2(RuntimeName, PHPLoader) { - FS.hashRemoveNode(old_node); - try { - old_dir.node_ops.rename(old_node, new_dir, new_name); -+ old_node.parent = new_dir; - } catch (e) { - throw e; - } finally { -@@ -14280,6 +14285,11 @@ function init2(RuntimeName, PHPLoader) { - doStat: function(func, path, buf) { - try { - var stat = func(path); -+ if (NODEFS.isWindows) { -+ // Node.js on Windows never represents permission bit 'x', so -+ // propagate read bits to execute bits. -+ stat.mode = stat.mode | (stat.mode & 292) >> 2; -+ } - } catch (e) { - if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { - return -54; -@@ -19707,7 +19717,6 @@ function init3(RuntimeName, PHPLoader) { - old_node.name = new_name; - new_dir.contents[new_name] = old_node; - new_dir.timestamp = old_node.parent.timestamp; -- old_node.parent = new_dir; - }, - unlink(parent, name) { - delete parent.contents[name]; -@@ -20996,6 +21005,7 @@ function init3(RuntimeName, PHPLoader) { - FS.hashRemoveNode(old_node); - try { - old_dir.node_ops.rename(old_node, new_dir, new_name); -+ old_node.parent = new_dir; - } catch (e) { - throw e; - } finally { -@@ -21910,6 +21920,11 @@ function init3(RuntimeName, PHPLoader) { - doStat: function(func, path, buf) { - try { - var stat = func(path); -+ if (NODEFS.isWindows) { -+ // Node.js on Windows never represents permission bit 'x', so -+ // propagate read bits to execute bits. -+ stat.mode = stat.mode | (stat.mode & 292) >> 2; -+ } - } catch (e) { - if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { - return -54; -@@ -27332,7 +27347,6 @@ function init4(RuntimeName, PHPLoader) { - old_node.name = new_name; - new_dir.contents[new_name] = old_node; - new_dir.timestamp = old_node.parent.timestamp; -- old_node.parent = new_dir; - }, - unlink(parent, name) { - delete parent.contents[name]; -@@ -28621,6 +28635,7 @@ function init4(RuntimeName, PHPLoader) { - FS.hashRemoveNode(old_node); - try { - old_dir.node_ops.rename(old_node, new_dir, new_name); -+ old_node.parent = new_dir; - } catch (e) { - throw e; - } finally { -@@ -29535,6 +29550,11 @@ function init4(RuntimeName, PHPLoader) { - doStat: function(func, path, buf) { - try { - var stat = func(path); -+ if (NODEFS.isWindows) { -+ // Node.js on Windows never represents permission bit 'x', so -+ // propagate read bits to execute bits. -+ stat.mode = stat.mode | (stat.mode & 292) >> 2; -+ } - } catch (e) { - if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { - return -54; -@@ -34930,7 +34950,6 @@ function init5(RuntimeName, PHPLoader) { - old_node.name = new_name; - new_dir.contents[new_name] = old_node; - new_dir.timestamp = old_node.parent.timestamp; -- old_node.parent = new_dir; - }, - unlink(parent, name) { - delete parent.contents[name]; -@@ -36219,6 +36238,7 @@ function init5(RuntimeName, PHPLoader) { - FS.hashRemoveNode(old_node); - try { - old_dir.node_ops.rename(old_node, new_dir, new_name); -+ old_node.parent = new_dir; - } catch (e) { - throw e; - } finally { -@@ -37133,6 +37153,11 @@ function init5(RuntimeName, PHPLoader) { - doStat: function(func, path, buf) { - try { - var stat = func(path); -+ if (NODEFS.isWindows) { -+ // Node.js on Windows never represents permission bit 'x', so -+ // propagate read bits to execute bits. -+ stat.mode = stat.mode | (stat.mode & 292) >> 2; -+ } - } catch (e) { - if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { - return -54; -@@ -42513,7 +42538,6 @@ function init6(RuntimeName, PHPLoader) { - old_node.name = new_name; - new_dir.contents[new_name] = old_node; - new_dir.timestamp = old_node.parent.timestamp; -- old_node.parent = new_dir; - }, - unlink(parent, name) { - delete parent.contents[name]; -@@ -43802,6 +43826,7 @@ function init6(RuntimeName, PHPLoader) { - FS.hashRemoveNode(old_node); - try { - old_dir.node_ops.rename(old_node, new_dir, new_name); -+ old_node.parent = new_dir; - } catch (e) { - throw e; - } finally { -@@ -44716,6 +44741,11 @@ function init6(RuntimeName, PHPLoader) { - doStat: function(func, path, buf) { - try { - var stat = func(path); -+ if (NODEFS.isWindows) { -+ // Node.js on Windows never represents permission bit 'x', so -+ // propagate read bits to execute bits. -+ stat.mode = stat.mode | (stat.mode & 292) >> 2; -+ } - } catch (e) { - if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { - return -54; -@@ -50091,7 +50121,6 @@ function init7(RuntimeName, PHPLoader) { - old_node.name = new_name; - new_dir.contents[new_name] = old_node; - new_dir.timestamp = old_node.parent.timestamp; -- old_node.parent = new_dir; - }, - unlink(parent, name) { - delete parent.contents[name]; -@@ -51380,6 +51409,7 @@ function init7(RuntimeName, PHPLoader) { - FS.hashRemoveNode(old_node); - try { - old_dir.node_ops.rename(old_node, new_dir, new_name); -+ old_node.parent = new_dir; - } catch (e) { - throw e; - } finally { -@@ -52294,6 +52324,11 @@ function init7(RuntimeName, PHPLoader) { - doStat: function(func, path, buf) { - try { - var stat = func(path); -+ if (NODEFS.isWindows) { -+ // Node.js on Windows never represents permission bit 'x', so -+ // propagate read bits to execute bits. -+ stat.mode = stat.mode | (stat.mode & 292) >> 2; -+ } - } catch (e) { - if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { - return -54; -@@ -57537,7 +57572,6 @@ function init8(RuntimeName, PHPLoader) { - old_node.name = new_name; - new_dir.contents[new_name] = old_node; - new_dir.timestamp = old_node.parent.timestamp; -- old_node.parent = new_dir; - }, - unlink(parent, name) { - delete parent.contents[name]; -@@ -58826,6 +58860,7 @@ function init8(RuntimeName, PHPLoader) { - FS.hashRemoveNode(old_node); - try { - old_dir.node_ops.rename(old_node, new_dir, new_name); -+ old_node.parent = new_dir; - } catch (e) { - throw e; - } finally { -@@ -59740,6 +59775,11 @@ function init8(RuntimeName, PHPLoader) { - doStat: function(func, path, buf) { - try { - var stat = func(path); -+ if (NODEFS.isWindows) { -+ // Node.js on Windows never represents permission bit 'x', so -+ // propagate read bits to execute bits. -+ stat.mode = stat.mode | (stat.mode & 292) >> 2; -+ } - } catch (e) { - if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { - return -54; -@@ -64968,7 +65008,6 @@ function init9(RuntimeName, PHPLoader) { - old_node.name = new_name; - new_dir.contents[new_name] = old_node; - new_dir.timestamp = old_node.parent.timestamp; -- old_node.parent = new_dir; - }, - unlink(parent, name) { - delete parent.contents[name]; -@@ -66257,6 +66296,7 @@ function init9(RuntimeName, PHPLoader) { - FS.hashRemoveNode(old_node); - try { - old_dir.node_ops.rename(old_node, new_dir, new_name); -+ old_node.parent = new_dir; - } catch (e) { - throw e; - } finally { -@@ -67171,6 +67211,11 @@ function init9(RuntimeName, PHPLoader) { - doStat: function(func, path, buf) { - try { - var stat = func(path); -+ if (NODEFS.isWindows) { -+ // Node.js on Windows never represents permission bit 'x', so -+ // propagate read bits to execute bits. -+ stat.mode = stat.mode | (stat.mode & 292) >> 2; -+ } - } catch (e) { - if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { - return -54; From 8226099bbc7eac66a8f7621b4af7f94e9795acca Mon Sep 17 00:00:00 2001 From: Jeroen Pfeil Date: Thu, 29 Aug 2024 17:05:16 +0700 Subject: [PATCH 15/20] Remove unused import --- src/setup-wp-server-files.ts | 1 - vendor/wp-now/src/execute-wp-cli.ts | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/setup-wp-server-files.ts b/src/setup-wp-server-files.ts index b9496a922..bc4f34f27 100644 --- a/src/setup-wp-server-files.ts +++ b/src/setup-wp-server-files.ts @@ -1,7 +1,6 @@ import path from 'path'; import fs from 'fs-extra'; import semver from 'semver'; -import { executeWPCli } from '../vendor/wp-now/src/execute-wp-cli'; import { SQLITE_FILENAME } from '../vendor/wp-now/src/constants'; import { getWordPressVersionPath } from '../vendor/wp-now/src/download'; import getSqlitePath from '../vendor/wp-now/src/get-sqlite-path'; diff --git a/vendor/wp-now/src/execute-wp-cli.ts b/vendor/wp-now/src/execute-wp-cli.ts index 690cfa033..e3c282ee2 100644 --- a/vendor/wp-now/src/execute-wp-cli.ts +++ b/vendor/wp-now/src/execute-wp-cli.ts @@ -6,7 +6,7 @@ import { DEFAULT_PHP_VERSION, DEFAULT_WORDPRESS_VERSION } from './constants'; import { phpVar } from '@php-wasm/util'; import { createNodeFsMountHandler, getPHPLoaderModule, withNetworking } from '@php-wasm/node'; import { getSqliteCommandPath } from '../../../src/lib/sqlite-command-versions'; -import { PHP, PHPRequestHandler, MountHandler, writeFiles, setPhpIniEntries, loadPHPRuntime } from '@php-wasm/universal'; +import { PHP, MountHandler, writeFiles, setPhpIniEntries, loadPHPRuntime } from '@php-wasm/universal'; import { readFileSync } from 'fs'; const isWindows = process.platform === 'win32'; @@ -41,7 +41,6 @@ export async function executeWPCli( projectPath: string, args: string[] ): Promi // // const php = await requestHandler.getPrimaryPhp() - php.mkdir(options.documentRoot); await php.mount(options.documentRoot, createNodeFsMountHandler(projectPath) as unknown as MountHandler); From 1ffa68f9a1773012e3075a574a0cfc3b182e76f9 Mon Sep 17 00:00:00 2001 From: Jeroen Pfeil Date: Thu, 29 Aug 2024 17:05:51 +0700 Subject: [PATCH 16/20] Remove console log --- src/lib/wpcli-versions.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/wpcli-versions.ts b/src/lib/wpcli-versions.ts index 5dde1e200..ed52ade00 100644 --- a/src/lib/wpcli-versions.ts +++ b/src/lib/wpcli-versions.ts @@ -55,7 +55,6 @@ async function getLatestWPCliVersion() { export const getWPCliVersionFromInstallation = async () => { const { stdout } = await executeWPCli( '.', [ '--version' ] ); - console.log( stdout ); if ( stdout?.startsWith( 'WP-CLI ' ) ) { const version = stdout.split( ' ' )[ 1 ]; if ( ! version ) { From 449693657e3f57d54842c87363f449c23454a8f1 Mon Sep 17 00:00:00 2001 From: Jeroen Pfeil Date: Thu, 29 Aug 2024 17:12:19 +0700 Subject: [PATCH 17/20] Update to latest playground version --- package-lock.json | 181 ++++++++++++++++++++++++++++++---------------- package.json | 8 +- 2 files changed, 122 insertions(+), 67 deletions(-) diff --git a/package-lock.json b/package-lock.json index 04d95f0c1..e86d298fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,9 +13,9 @@ "@automattic/generate-password": "^0.1.0", "@formatjs/intl-locale": "^3.4.5", "@formatjs/intl-localematcher": "^0.5.4", - "@php-wasm/node": "0.9.34", - "@php-wasm/scopes": "0.9.34", - "@php-wasm/universal": "0.9.34", + "@php-wasm/node": "^0.9.35", + "@php-wasm/scopes": "^0.9.35", + "@php-wasm/universal": "^0.9.35", "@rive-app/react-canvas": "^4.12.0", "@sentry/electron": "^4.17.0", "@sentry/webpack-plugin": "^2.16.1", @@ -23,7 +23,7 @@ "@wordpress/compose": "^6.27.0", "@wordpress/i18n": "^4.50.0", "@wordpress/icons": "^9.40.0", - "@wp-playground/blueprints": "0.9.19", + "@wp-playground/blueprints": "^0.9.35", "adm-zip": "^0.5.14", "archiver": "^6.0.1", "atomically": "^2.0.3", @@ -4757,11 +4757,12 @@ } }, "node_modules/@php-wasm/logger": { - "version": "0.9.34", - "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-0.9.34.tgz", - "integrity": "sha512-EsxVh6BwY499to/YyYkXWO5qW/RPoypWneyzI7U96AD3eUYf9ZUrowU5/HwPg8BK7pLQQHPQw5PpkQ6XQb7Rfg==", + "version": "0.9.35", + "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-0.9.35.tgz", + "integrity": "sha512-T9O0DgJFCYoYe+JehJDgStmmuyzMVhm7rf5ie1+CXqZaWVgzjOALu+Zc5mGe1WWluoQ11nYDGCA4F3C8YcmYbA==", + "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/node-polyfills": "0.9.34" + "@php-wasm/node-polyfills": "0.9.35" }, "engines": { "node": ">=18.18.0", @@ -4769,16 +4770,17 @@ } }, "node_modules/@php-wasm/node": { - "version": "0.9.34", - "resolved": "https://registry.npmjs.org/@php-wasm/node/-/node-0.9.34.tgz", - "integrity": "sha512-b6LQJ0tsXygEwDAd7vPnQPrg3TYYH4niWKx5gsfWUYB/jW/PS5k584KRqTJiOK4wQoA9F2+LODa3J0d5OlaNUg==", - "dependencies": { - "@php-wasm/logger": "0.9.34", - "@php-wasm/node-polyfills": "0.9.34", - "@php-wasm/universal": "0.9.34", - "@php-wasm/util": "0.9.34", - "@wp-playground/common": "0.9.34", - "@wp-playground/wordpress": "0.9.34", + "version": "0.9.35", + "resolved": "https://registry.npmjs.org/@php-wasm/node/-/node-0.9.35.tgz", + "integrity": "sha512-ypQIQAqD7xvQ6ovSsFCGYNKXfJ8cLPanA7w2iDfcYzjuSPDEtE9tWgBRgYg/sepcjGCsn1PWt4cMPspo9MvTpA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/logger": "0.9.35", + "@php-wasm/node-polyfills": "0.9.35", + "@php-wasm/universal": "0.9.35", + "@php-wasm/util": "0.9.35", + "@wp-playground/common": "0.9.35", + "@wp-playground/wordpress": "0.9.35", "comlink": "^4.4.1", "express": "4.19.2", "ini": "4.1.2", @@ -4791,9 +4793,10 @@ } }, "node_modules/@php-wasm/node-polyfills": { - "version": "0.9.34", - "resolved": "https://registry.npmjs.org/@php-wasm/node-polyfills/-/node-polyfills-0.9.34.tgz", - "integrity": "sha512-jQS2JLLTj66+0xl3PtnOScGqs9LffOZeSlgtZ78e739AegpfE1vNJuretVCOlIQNTR4H+6YOC1zXFdl9DHTT5A==" + "version": "0.9.35", + "resolved": "https://registry.npmjs.org/@php-wasm/node-polyfills/-/node-polyfills-0.9.35.tgz", + "integrity": "sha512-yTLTrNwklfx2FAk3hgaZLBdW03gwOa5+SH7hl7GqdSKaTOayGddL75iEWmJOV4mIvdwbj3dbPE6yT/B/B2880Q==", + "license": "GPL-2.0-or-later" }, "node_modules/@php-wasm/node/node_modules/ini": { "version": "4.1.2", @@ -4804,12 +4807,13 @@ } }, "node_modules/@php-wasm/progress": { - "version": "0.9.34", - "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-0.9.34.tgz", - "integrity": "sha512-8EeVtLvLnTSEcbzFP4wdlQsHUzfzvvkvetDPGJh57Ehhy29LceSwNL4K5Opu/JCX1t3NMevgxPBAZM9rLNXlNQ==", + "version": "0.9.35", + "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-0.9.35.tgz", + "integrity": "sha512-ybpKB7DyKbZzu1R5bdN2U1kBxe8290Jp2bMX4fZ0EaA3QGH89EQ0n3pps2ouB0a8I1kmOsMgza0mJowYuqjSWQ==", + "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "0.9.34", - "@php-wasm/node-polyfills": "0.9.34" + "@php-wasm/logger": "0.9.35", + "@php-wasm/node-polyfills": "0.9.35" }, "engines": { "node": ">=18.18.0", @@ -4817,33 +4821,36 @@ } }, "node_modules/@php-wasm/scopes": { - "version": "0.9.34", - "resolved": "https://registry.npmjs.org/@php-wasm/scopes/-/scopes-0.9.34.tgz", - "integrity": "sha512-AebuRIuDIPNlAg5rusda4oAZJWLPxwm7dS4yxVJAHOcwDy/OlBPvI1KF/KLdai/I1njtmQKg8p96Fo9Wa8BBeA==", + "version": "0.9.35", + "resolved": "https://registry.npmjs.org/@php-wasm/scopes/-/scopes-0.9.35.tgz", + "integrity": "sha512-kVcAuoZaq62MHYyIdWVnAhp/8thxkgB4y5OjSDqmCgf0r5CxvGqKRE5nnnKHscFv4C85Z2eKLgke8R05IGNiug==", + "license": "GPL-2.0-or-later", "engines": { "node": ">=16.15.1", "npm": ">=8.11.0" } }, "node_modules/@php-wasm/stream-compression": { - "version": "0.9.34", - "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-0.9.34.tgz", - "integrity": "sha512-3XcNcwSBhX3TIIGtXsH4D8yzzC7iAhMLG9nqmPMnOk9gP3bO89WvapZV+pzLsSVIRqcSBvMrdLNfaFQgqZYEkw==", + "version": "0.9.35", + "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-0.9.35.tgz", + "integrity": "sha512-6Vhi1ity0/tEqhWKdrbEqHGDT72ZZWigMlN0FSLNv+YsI/ThapxAQAjrhtssuHziF30Um7fbnkAbVpdwOmjr2Q==", + "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/node-polyfills": "0.9.34", - "@php-wasm/util": "0.9.34" + "@php-wasm/node-polyfills": "0.9.35", + "@php-wasm/util": "0.9.35" } }, "node_modules/@php-wasm/universal": { - "version": "0.9.34", - "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-0.9.34.tgz", - "integrity": "sha512-QhPt3Qv0gKTZSjBFEEDOicJ33f08Rdl44WkX8zZbCN7QDd6XRGxkWAGaiFK8E38Ww+Z/8pSElK65qnJGfWxLhw==", - "dependencies": { - "@php-wasm/logger": "0.9.34", - "@php-wasm/node-polyfills": "0.9.34", - "@php-wasm/progress": "0.9.34", - "@php-wasm/stream-compression": "0.9.34", - "@php-wasm/util": "0.9.34", + "version": "0.9.35", + "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-0.9.35.tgz", + "integrity": "sha512-zWyblhTadTDoV1KjahAME7T3sX6swdvs6xYJReGtatBkkYCDZUs7vdv55ccfbta3xwuD0+X33qTaup64++btrA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/logger": "0.9.35", + "@php-wasm/node-polyfills": "0.9.35", + "@php-wasm/progress": "0.9.35", + "@php-wasm/stream-compression": "0.9.35", + "@php-wasm/util": "0.9.35", "comlink": "^4.4.1", "ini": "4.1.2" }, @@ -4861,9 +4868,9 @@ } }, "node_modules/@php-wasm/util": { - "version": "0.9.34", - "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-0.9.34.tgz", - "integrity": "sha512-4R6hrqz30QKmrIcqLoUKh3FqmrzXCdNNNI7yWc2nad061vzi8HUvL47f5+mcjX1mEjDPZWlmqXWBtJr6oNJoEg==", + "version": "0.9.35", + "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-0.9.35.tgz", + "integrity": "sha512-CCw8MuCi7TNHBfKUcyPjS9yw5NXp7Sdp1wvlYi+quyc2rUvK8Ta5jk3bNkRRkyvKAzq48CbRvfzeWnf2Pv+HmA==", "engines": { "node": ">=18.18.0", "npm": ">=8.11.0" @@ -7004,21 +7011,67 @@ } }, "node_modules/@wp-playground/blueprints": { - "version": "0.9.19", - "resolved": "https://registry.npmjs.org/@wp-playground/blueprints/-/blueprints-0.9.19.tgz", - "integrity": "sha512-R8V6kXYAPlmq/DndQtcflo9XbdFzDgwhQUR0dayRt+FeQ3irCcQlyFOc4f8a19BxMq3ayDafmBL1rci3xQ5N3w==", + "version": "0.9.35", + "resolved": "https://registry.npmjs.org/@wp-playground/blueprints/-/blueprints-0.9.35.tgz", + "integrity": "sha512-LInXxE8gkEHYxiqQ8R+sFuAKHeSlZssmFiVhM0alrbyAm0msWtD1+6etBwKekuxAz6YxsxlK6r0+nFGZ+CxZQw==", + "dependencies": { + "@php-wasm/logger": "0.9.35", + "@php-wasm/node": "0.9.35", + "@php-wasm/node-polyfills": "0.9.35", + "@php-wasm/progress": "0.9.35", + "@php-wasm/scopes": "0.9.35", + "@php-wasm/universal": "0.9.35", + "@php-wasm/util": "0.9.35", + "@wp-playground/common": "0.9.35", + "@wp-playground/wordpress": "0.9.35", + "ajv": "8.12.0", + "comlink": "^4.4.1", + "ini": "4.1.2" + }, "engines": { "node": ">=18.18.0", "npm": ">=8.11.0" } }, + "node_modules/@wp-playground/blueprints/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@wp-playground/blueprints/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/blueprints/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, "node_modules/@wp-playground/common": { - "version": "0.9.34", - "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-0.9.34.tgz", - "integrity": "sha512-vIEj3VOtepcm6q0Vd7ETT0kObA5IiqrXdJL0mBzvVDdlodMooyKxfGa03FdCPYnzjBrtILIcCAfBSokw2TEdDQ==", + "version": "0.9.35", + "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-0.9.35.tgz", + "integrity": "sha512-QP7b1orPA3ai1caEytgRTrwoXqEsgeD4CT08szY7bCnWQuZLrPK8Q9vZuzq/z9RRJJ0+AxaRIi9dlvlOl4SpVQ==", + "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "0.9.34", - "@php-wasm/util": "0.9.34", + "@php-wasm/universal": "0.9.35", + "@php-wasm/util": "0.9.35", "comlink": "^4.4.1", "ini": "4.1.2" }, @@ -7031,19 +7084,21 @@ "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/wordpress": { - "version": "0.9.34", - "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-0.9.34.tgz", - "integrity": "sha512-rm5SgIdg2IurNEOXJf/RZQDE1fjO31yOd6aknzuEjUCuH+zPXphwp8KTcFTe0kF5kxDfkvU5OdOpHN868bkjgg==", - "dependencies": { - "@php-wasm/node": "0.9.34", - "@php-wasm/universal": "0.9.34", - "@php-wasm/util": "0.9.34", - "@wp-playground/common": "0.9.34", + "version": "0.9.35", + "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-0.9.35.tgz", + "integrity": "sha512-ExIdhgPPxWMqn7IMJuejOWdzeJgX85HLWsCiZEaA0o86fKZ+jZclmanAl4PzxkJKXD3bMfmfbMElTPDPmuRAsA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/node": "0.9.35", + "@php-wasm/universal": "0.9.35", + "@php-wasm/util": "0.9.35", + "@wp-playground/common": "0.9.35", "comlink": "^4.4.1", "express": "4.19.2", "ini": "4.1.2", @@ -7059,6 +7114,7 @@ "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" } @@ -20028,7 +20084,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, "engines": { "node": ">=0.10.0" } diff --git a/package.json b/package.json index f4bdd3008..853151d70 100644 --- a/package.json +++ b/package.json @@ -101,9 +101,9 @@ "@automattic/generate-password": "^0.1.0", "@formatjs/intl-locale": "^3.4.5", "@formatjs/intl-localematcher": "^0.5.4", - "@php-wasm/node": "0.9.34", - "@php-wasm/scopes": "0.9.34", - "@php-wasm/universal": "0.9.34", + "@php-wasm/node": "^0.9.35", + "@php-wasm/scopes": "^0.9.35", + "@php-wasm/universal": "^0.9.35", "@rive-app/react-canvas": "^4.12.0", "@sentry/electron": "^4.17.0", "@sentry/webpack-plugin": "^2.16.1", @@ -111,7 +111,7 @@ "@wordpress/compose": "^6.27.0", "@wordpress/i18n": "^4.50.0", "@wordpress/icons": "^9.40.0", - "@wp-playground/blueprints": "0.9.19", + "@wp-playground/blueprints": "^0.9.35", "adm-zip": "^0.5.14", "archiver": "^6.0.1", "atomically": "^2.0.3", From d1059f6cf421b9f77e1a1c5c477f0537f6df413e Mon Sep 17 00:00:00 2001 From: Jeroen Pfeil Date: Thu, 29 Aug 2024 18:10:48 +0700 Subject: [PATCH 18/20] Remove stdout --- src/lib/import-export/import/importers/importer.ts | 4 ++-- vendor/wp-now/src/execute-wp-cli.ts | 14 -------------- 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/src/lib/import-export/import/importers/importer.ts b/src/lib/import-export/import/importers/importer.ts index c66b88231..c086ab624 100644 --- a/src/lib/import-export/import/importers/importer.ts +++ b/src/lib/import-export/import/importers/importer.ts @@ -49,7 +49,7 @@ abstract class BaseImporter extends EventEmitter implements Importer { try { await move( sqlFile, tmpPath ); - const { stderr, exitCode, stdout } = await server.executeWpCliCommand( + const { stderr, exitCode } = await server.executeWpCliCommand( `sqlite import ${ sqlTempFile } --require=/tmp/sqlite-command/command.php` ); @@ -58,7 +58,7 @@ abstract class BaseImporter extends EventEmitter implements Importer { } if ( exitCode ) { - throw new Error( 'Database import failed: ' + stdout ); + throw new Error( 'Database import failed'); } } finally { await this.safelyDeleteFile( tmpPath ); diff --git a/vendor/wp-now/src/execute-wp-cli.ts b/vendor/wp-now/src/execute-wp-cli.ts index e3c282ee2..cdc7f1304 100644 --- a/vendor/wp-now/src/execute-wp-cli.ts +++ b/vendor/wp-now/src/execute-wp-cli.ts @@ -27,20 +27,6 @@ export async function executeWPCli( projectPath: string, args: string[] ): Promi await withNetworking({}) ); const php = new PHP(id); - // const requestHandler = new PHPRequestHandler({ - // phpFactory: async ({ requestHandler:reqHandler }) => { - // const id = await loadNodeRuntime( options.phpVersion ); - // const php = new PHP(id); - // php.requestHandler = reqHandler; - // return php; - // }, - // documentRoot: options.documentRoot, - // absoluteUrl: options.absoluteUrl, - // rewriteRules: [] - // }); - // - // const php = await requestHandler.getPrimaryPhp() - php.mkdir(options.documentRoot); await php.mount(options.documentRoot, createNodeFsMountHandler(projectPath) as unknown as MountHandler); From adde2143a2e69076e7e8f2b3ae92b6188ecfaf90 Mon Sep 17 00:00:00 2001 From: Jeroen Pfeil Date: Thu, 29 Aug 2024 18:14:55 +0700 Subject: [PATCH 19/20] Fix linting issue --- src/lib/import-export/import/importers/importer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/import-export/import/importers/importer.ts b/src/lib/import-export/import/importers/importer.ts index c086ab624..fffb1db0e 100644 --- a/src/lib/import-export/import/importers/importer.ts +++ b/src/lib/import-export/import/importers/importer.ts @@ -58,7 +58,7 @@ abstract class BaseImporter extends EventEmitter implements Importer { } if ( exitCode ) { - throw new Error( 'Database import failed'); + throw new Error( 'Database import failed' ); } } finally { await this.safelyDeleteFile( tmpPath ); From 9fdb2d2c0d2c6ce73d22f8be0f7fee69f68c61b1 Mon Sep 17 00:00:00 2001 From: Antony Agrios Date: Thu, 29 Aug 2024 14:25:33 +0300 Subject: [PATCH 20/20] Update: Switch back to loadNodeRuntime --- vendor/wp-now/src/execute-wp-cli.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/vendor/wp-now/src/execute-wp-cli.ts b/vendor/wp-now/src/execute-wp-cli.ts index cdc7f1304..991ded95a 100644 --- a/vendor/wp-now/src/execute-wp-cli.ts +++ b/vendor/wp-now/src/execute-wp-cli.ts @@ -4,7 +4,7 @@ import getWpCliPath from './get-wp-cli-path'; import getWpNowConfig from './config'; import { DEFAULT_PHP_VERSION, DEFAULT_WORDPRESS_VERSION } from './constants'; import { phpVar } from '@php-wasm/util'; -import { createNodeFsMountHandler, getPHPLoaderModule, withNetworking } from '@php-wasm/node'; +import { createNodeFsMountHandler, loadNodeRuntime } from '@php-wasm/node'; import { getSqliteCommandPath } from '../../../src/lib/sqlite-command-versions'; import { PHP, MountHandler, writeFiles, setPhpIniEntries, loadPHPRuntime } from '@php-wasm/universal'; import { readFileSync } from 'fs'; @@ -22,10 +22,7 @@ export async function executeWPCli( projectPath: string, args: string[] ): Promi path: projectPath, }); - const id = await loadPHPRuntime( - await getPHPLoaderModule(options.phpVersion), - await withNetworking({}) - ); + const id = await loadNodeRuntime(options.phpVersion); const php = new PHP(id); php.mkdir(options.documentRoot); await php.mount(options.documentRoot, createNodeFsMountHandler(projectPath) as unknown as MountHandler);