diff --git a/package.json b/package.json index 2420479f77..a515a23948 100644 --- a/package.json +++ b/package.json @@ -5,9 +5,10 @@ "scripts": { "build": "nx run-many --all --target=build", "build:website": "nx build playground-website", + "build:remote": "nx build playground-remote", "build:docs": "nx build docs-site", "deploy:docs": "gh-pages -d dist/docs/build -t true", - "dev": "nx dev playground-website", + "dev": "nx dev playground-remote --host 0.0.0.0", "format": "nx format", "format:uncommitted": "nx format --fix --parallel --uncommitted", "lint": "nx run-many --all --target=lint", diff --git a/packages/php-wasm/node/package.json b/packages/php-wasm/node/package.json index d0ef532ede..55ba1b64a3 100644 --- a/packages/php-wasm/node/package.json +++ b/packages/php-wasm/node/package.json @@ -30,7 +30,7 @@ "types": "index.d.ts", "gitHead": "2f8d8f3cea548fbd75111e8659a92f601cddc593", "engines": { - "node": ">=18.18.2", + "node": ">=18.18.0", "npm": ">=8.11.0" } } diff --git a/packages/php-wasm/universal/src/lib/php-request-handler.ts b/packages/php-wasm/universal/src/lib/php-request-handler.ts index 17d719decf..301289ccf7 100644 --- a/packages/php-wasm/universal/src/lib/php-request-handler.ts +++ b/packages/php-wasm/universal/src/lib/php-request-handler.ts @@ -361,7 +361,11 @@ export function seemsLikeAPHPRequestHandlerPath(path: string): boolean { } function seemsLikeAPHPFile(path: string) { - return path.endsWith('.php') || path.includes('.php/'); + return ( + path.endsWith('.php') || + path.includes('.php/') || + path.match(/sitemap.*.xml$/) != null + ); } function seemsLikeADirectoryRoot(path: string) { diff --git a/packages/playground/client/src/index.ts b/packages/playground/client/src/index.ts index 9da85ff0e6..de412aa31e 100644 --- a/packages/playground/client/src/index.ts +++ b/packages/playground/client/src/index.ts @@ -79,7 +79,6 @@ export async function startPlaygroundWeb({ onClientConnected = () => {}, sapiName, }: StartPlaygroundOptions): Promise { - assertValidRemote(remoteUrl); allowStorageAccessByUserActivation(iframe); remoteUrl = setQueryParams(remoteUrl, { @@ -173,22 +172,8 @@ async function doStartPlaygroundWeb( return playground; } -const officialRemoteOrigin = 'https://playground.wordpress.net'; -function assertValidRemote(remoteHtmlUrl: string) { - const url = new URL(remoteHtmlUrl, officialRemoteOrigin); - if ( - (url.origin === officialRemoteOrigin || url.hostname === 'localhost') && - url.pathname !== '/remote.html' - ) { - throw new Error( - `Invalid remote URL: ${url}. ` + - `Expected origin to be ${officialRemoteOrigin}/remote.html.` - ); - } -} - function setQueryParams(url: string, params: Record) { - const urlObject = new URL(url, officialRemoteOrigin); + const urlObject = new URL(url, window.location.href); const qs = new URLSearchParams(urlObject.search); for (const [key, value] of Object.entries(params)) { if (value !== undefined && value !== null && value !== false) { diff --git a/packages/playground/remote/index.html b/packages/playground/remote/index.html new file mode 100644 index 0000000000..4bda9481c8 --- /dev/null +++ b/packages/playground/remote/index.html @@ -0,0 +1,16 @@ + + + + + + Wordpress for teaching + + + + +
+

Version:

+ + + + diff --git a/packages/playground/remote/package.json b/packages/playground/remote/package.json index 28585760aa..f0aba558b9 100644 --- a/packages/playground/remote/package.json +++ b/packages/playground/remote/package.json @@ -1,6 +1,6 @@ { "name": "@wp-playground/remote", - "version": "0.0.1", + "version": "0.0.5", "description": "WordPress Playground remote host", "repository": { "type": "git", diff --git a/packages/playground/remote/service-worker.ts b/packages/playground/remote/service-worker.ts index 62bb607870..96ea725c08 100644 --- a/packages/playground/remote/service-worker.ts +++ b/packages/playground/remote/service-worker.ts @@ -6,13 +6,32 @@ import { getURLScope, removeURLScope } from '@php-wasm/scopes'; import { applyRewriteRules } from '@php-wasm/universal'; import { awaitReply, - convertFetchEventToPHPRequest, + convertFetchEventToPHPRequest as convertFetchEvent, initializeServiceWorker, cloneRequest, broadcastMessageExpectReply, } from '@php-wasm/web-service-worker'; import { wordPressRewriteRules } from '@wp-playground/wordpress'; +async function convertFetchEventToPHPRequest(event: any) { + const fullUrl = new URL(event.request.url); + const scope = getURLScope(fullUrl); + const res: any = await convertFetchEvent(event); + const contentType: string = res.headers.get('content-type'); + if (contentType?.match(/text\/html/)) { + const canonical: string = await res.text(); + let relative = canonical.replace( + /(http|https):[\/\\]+(localhost|127.0.0.1|playground\.wordpress\.net|diy-pwa\.com)[:0-9]*\/scope:\d.\d*/g, + `/scope:${scope}` + ); + relative = relative.replace(/http:/g, 'https:'); + const resNew = new Response(relative, res); + return resNew; + } else { + return res; + } +} + if (!(self as any).document) { // Workaround: vite translates import.meta.url // to document.currentScript which fails inside of diff --git a/packages/playground/remote/src/style.css b/packages/playground/remote/src/style.css new file mode 100644 index 0000000000..f80fca63bc --- /dev/null +++ b/packages/playground/remote/src/style.css @@ -0,0 +1,14 @@ +body { + margin: 0; +} + +iframe { + display: block; + /* iframes are inline by default */ + background: #000; + border: none; + /* Reset default border */ + height: 100vh; + /* Viewport-relative units */ + width: 100vw; +} diff --git a/packages/playground/remote/src/version.ts b/packages/playground/remote/src/version.ts new file mode 100644 index 0000000000..eaaecfb2ff --- /dev/null +++ b/packages/playground/remote/src/version.ts @@ -0,0 +1,9 @@ +import info from '../package.json' assert { type: 'json' }; + +class VersionNumber extends HTMLElement { + connectedCallback() { + this.innerHTML = info.version; + } +} + +customElements.define('x-version', VersionNumber); diff --git a/packages/playground/remote/vite.config.ts b/packages/playground/remote/vite.config.ts index 9421ce288d..e11f166ceb 100644 --- a/packages/playground/remote/vite.config.ts +++ b/packages/playground/remote/vite.config.ts @@ -91,6 +91,7 @@ export default defineConfig({ assetsInlineLimit: 0, rollupOptions: { input: { + index: path('/index.html'), wordpress: path('/remote.html'), }, },