diff --git a/apps/cli/lib/pull/reprint.phar b/apps/cli/lib/pull/reprint.phar index 5f57df79bd..dff211c15f 100755 Binary files a/apps/cli/lib/pull/reprint.phar and b/apps/cli/lib/pull/reprint.phar differ diff --git a/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/SHA256SUMS b/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/SHA256SUMS new file mode 100644 index 0000000000..9b300ef8e1 --- /dev/null +++ b/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/SHA256SUMS @@ -0,0 +1,6 @@ +f3a4cf8ab6e755287a9b8a7fdefc4095712a01454039d2db86984df5425311e2 wp_mysql_parser-php8.0-jspi.so +60f694799adee3721fbbb7e6f41159dc68d17686f2c5df8f6e55a484dc90d207 wp_mysql_parser-php8.1-jspi.so +8612e0d9885adbb5684ab3cae160780cca31280ce2ae4b5ad0b4bdad74347e82 wp_mysql_parser-php8.2-jspi.so +13b27c54c2f1deac0d20c00ef922887971b56955cf450d18e8a0fa10ca68485c wp_mysql_parser-php8.3-jspi.so +c13e56c4ea128df4510e3f7303660fc1d8715457229162d1d8f7af63a4f63cbe wp_mysql_parser-php8.4-jspi.so +3193ea32c51a09a7e10ef5c66fc3c3ffd8fafb1e3c6d5b6a4dc170b21ea1b159 wp_mysql_parser-php8.5-jspi.so diff --git a/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/manifest.json b/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/manifest.json new file mode 100644 index 0000000000..060496ef14 --- /dev/null +++ b/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/manifest.json @@ -0,0 +1,31 @@ +{ + "name": "wp_mysql_parser", + "mode": "php-extension", + "artifacts": [ + { + "phpVersion": "8.5", + "sourcePath": "wp_mysql_parser-php8.5-jspi.so" + }, + { + "phpVersion": "8.4", + "sourcePath": "wp_mysql_parser-php8.4-jspi.so" + }, + { + "phpVersion": "8.3", + "sourcePath": "wp_mysql_parser-php8.3-jspi.so" + }, + { + "phpVersion": "8.2", + "sourcePath": "wp_mysql_parser-php8.2-jspi.so" + }, + { + "phpVersion": "8.1", + "sourcePath": "wp_mysql_parser-php8.1-jspi.so" + }, + { + "phpVersion": "8.0", + "sourcePath": "wp_mysql_parser-php8.0-jspi.so" + } + ], + "version": "b31fc53ea599d1a2211b75f4a3486b39e63ce01f" +} diff --git a/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/wp_mysql_parser-php8.0-jspi.so b/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/wp_mysql_parser-php8.0-jspi.so new file mode 100644 index 0000000000..501f71404f Binary files /dev/null and b/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/wp_mysql_parser-php8.0-jspi.so differ diff --git a/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/wp_mysql_parser-php8.1-jspi.so b/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/wp_mysql_parser-php8.1-jspi.so new file mode 100644 index 0000000000..243719b6f7 Binary files /dev/null and b/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/wp_mysql_parser-php8.1-jspi.so differ diff --git a/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/wp_mysql_parser-php8.2-jspi.so b/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/wp_mysql_parser-php8.2-jspi.so new file mode 100644 index 0000000000..c1be9269a1 Binary files /dev/null and b/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/wp_mysql_parser-php8.2-jspi.so differ diff --git a/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/wp_mysql_parser-php8.3-jspi.so b/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/wp_mysql_parser-php8.3-jspi.so new file mode 100644 index 0000000000..f655770fdc Binary files /dev/null and b/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/wp_mysql_parser-php8.3-jspi.so differ diff --git a/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/wp_mysql_parser-php8.4-jspi.so b/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/wp_mysql_parser-php8.4-jspi.so new file mode 100644 index 0000000000..7eac08f862 Binary files /dev/null and b/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/wp_mysql_parser-php8.4-jspi.so differ diff --git a/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/wp_mysql_parser-php8.5-jspi.so b/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/wp_mysql_parser-php8.5-jspi.so new file mode 100644 index 0000000000..afd2506dfd Binary files /dev/null and b/apps/cli/lib/pull/wasm-extensions/wp_mysql_parser/wp_mysql_parser-php8.5-jspi.so differ diff --git a/apps/cli/lib/pull/wasm-extensions/wp_native_apis/SHA256SUMS b/apps/cli/lib/pull/wasm-extensions/wp_native_apis/SHA256SUMS new file mode 100644 index 0000000000..5a3dc0e253 --- /dev/null +++ b/apps/cli/lib/pull/wasm-extensions/wp_native_apis/SHA256SUMS @@ -0,0 +1 @@ +783d5cf85b490e773c996591c6f86e54cd1b98924026b00c0eb99b86f2a6630f wp_native_apis-php8.4-jspi.so diff --git a/apps/cli/lib/pull/wasm-extensions/wp_native_apis/manifest.json b/apps/cli/lib/pull/wasm-extensions/wp_native_apis/manifest.json new file mode 100644 index 0000000000..a23818ec22 --- /dev/null +++ b/apps/cli/lib/pull/wasm-extensions/wp_native_apis/manifest.json @@ -0,0 +1,11 @@ +{ + "name": "wp_native_apis", + "version": "cb3aa252c65f9c8a592ef45838948c9d11de79df", + "artifacts": [ + { + "phpVersion": "8.4", + "sourcePath": "wp_native_apis-php8.4-jspi.so" + } + ], + "mode": "php-extension" +} diff --git a/apps/cli/lib/pull/wasm-extensions/wp_native_apis/wp_native_apis-php8.4-jspi.so b/apps/cli/lib/pull/wasm-extensions/wp_native_apis/wp_native_apis-php8.4-jspi.so new file mode 100644 index 0000000000..978338557f Binary files /dev/null and b/apps/cli/lib/pull/wasm-extensions/wp_native_apis/wp_native_apis-php8.4-jspi.so differ diff --git a/apps/cli/reprint-child.ts b/apps/cli/reprint-child.ts index 5b2ba6e189..8b4fa78562 100644 --- a/apps/cli/reprint-child.ts +++ b/apps/cli/reprint-child.ts @@ -5,13 +5,21 @@ * the parent's event loop stays responsive for Ctrl+C handling and * progress reporting. The parent communicates via IPC messages. */ +import { existsSync } from 'node:fs'; +import path from 'node:path'; import { rootCertificates } from 'node:tls'; -import { createNodeFsMountHandler, loadNodeRuntime } from '@php-wasm/node'; +import { createNodeFsMountHandler, loadNodeRuntime, withNetworking } from '@php-wasm/node'; import { PHP, ProcessIdAllocator, setPhpIniEntries } from '@php-wasm/universal'; import { createSpawnHandler } from '@php-wasm/util'; -import { LatestSupportedPHPVersion } from '@studio/common/types/php-versions'; +import type { SupportedPHPVersion } from '@studio/common/types/php-versions'; const processIdAllocator = new ProcessIdAllocator(); +const REPRINT_PHP_VERSION = '8.4' satisfies SupportedPHPVersion; +const WASM_EXTENSIONS_DIR = path.join( import.meta.dirname, 'wasm-extensions' ); +const REQUIRED_EXTENSION_MANIFESTS = [ + path.join( WASM_EXTENSIONS_DIR, 'wp_native_apis', 'manifest.json' ), + path.join( WASM_EXTENSIONS_DIR, 'wp_mysql_parser', 'manifest.json' ), +] as const; // Proxy configuration env vars must reach reprint.phar so it can route // outbound HTTP through the user's proxy (e.g. tsocks / corporate @@ -93,6 +101,71 @@ async function mountDirectory( php: PHP, mount: ReprintMount ) { await php.mount( mount.vfsPath, createNodeFsMountHandler( mount.hostPath ) ); } +function assertExtensionManifestsExist() { + const missing = REQUIRED_EXTENSION_MANIFESTS.filter( + ( manifestPath ) => ! existsSync( manifestPath ) + ); + if ( missing.length > 0 ) { + throw new Error( + `Missing bundled PHP WASM extension manifest(s): ${ missing.join( + ', ' + ) }. Rebuild the Studio CLI so pull-reprint can load its native extensions.` + ); + } +} + +function createRequiredExtensionOptions() { + assertExtensionManifestsExist(); + + return REQUIRED_EXTENSION_MANIFESTS.map( ( manifestUrl ) => ( { + source: { + format: 'manifest' as const, + manifestUrl, + }, + } ) ); +} + +function writeNativeExtensionAssertion( php: PHP ) { + php.writeFile( + '/tmp/assert-native-reprint-extensions.php', + `