diff --git a/packages/php-wasm/web/src/lib/worker-thread/spawn-php-worker-thread.ts b/packages/php-wasm/web/src/lib/worker-thread/spawn-php-worker-thread.ts index c9e315087d..5713638014 100644 --- a/packages/php-wasm/web/src/lib/worker-thread/spawn-php-worker-thread.ts +++ b/packages/php-wasm/web/src/lib/worker-thread/spawn-php-worker-thread.ts @@ -21,6 +21,10 @@ export async function spawnPHPWorkerThread( (error as any).filename = e.filename; reject(error); }; + worker.postMessage({ + type: 'startup-options', + startupOptions, + }); // There is no way to know when the worker script has started // executing, so we use a message to signal that. function onStartup(event: { data: string }) { diff --git a/packages/playground/remote/src/lib/worker-utils.ts b/packages/playground/remote/src/lib/worker-utils.ts index c3f90e0dca..a5914ebfc1 100644 --- a/packages/playground/remote/src/lib/worker-utils.ts +++ b/packages/playground/remote/src/lib/worker-utils.ts @@ -33,18 +33,23 @@ export type ParsedStartupOptions = { }; export const receivedParams: ReceivedStartupOptions = {}; -const url = self?.location?.href; -if (typeof url !== 'undefined') { - const params = new URL(self.location.href).searchParams; - receivedParams.wpVersion = params.get('wpVersion') || undefined; - receivedParams.phpVersion = params.get('phpVersion') || undefined; - receivedParams.storage = params.get('storage') || undefined; - // Default to CLI to support the WP-CLI Blueprint step - receivedParams.sapiName = params.get('sapiName') || 'cli'; - receivedParams.phpExtensions = params.getAll('php-extension'); - receivedParams.siteSlug = params.get('site-slug') || undefined; -} +self.addEventListener('message', (event) => { + if (event.data?.type === 'startup-options') { + const { startupOptions } = event.data; + receivedParams.wpVersion = startupOptions.wpVersion; + receivedParams.phpVersion = startupOptions.phpVersion; + receivedParams.sapiName = startupOptions.sapiName; + receivedParams.storage = startupOptions.storage; + receivedParams.phpExtensions = startupOptions.phpExtensions; + receivedParams.siteSlug = startupOptions.siteSlug; + } +}); +// TODO find a better way to pass the startup options +while (!receivedParams.wpVersion) { + // wait for the next event loop + await new Promise((resolve) => setTimeout(resolve, 0)); +} export const requestedWPVersion = receivedParams.wpVersion || ''; export const startupOptions = { wpVersion: SupportedWordPressVersionsList.includes(requestedWPVersion)