/* eslint-disable no-restricted-globals */ import { PhpCgiWorker } from "php-cgi-wasm/PhpCgiWorker.mjs"; import { PGlite } from '@electric-sql/pglite'; // Log requests const onRequest = (request, response) => { const url = new URL(request.url); const logLine = `[${(new Date).toISOString()}]` + `#${php.count} 127.0.0.1 - "${request.method}` + ` ${url.pathname}" - HTTP/1.1 ${response.status}`; console.log(logLine); }; // Formatted 404s const notFound = request => { return new Response( `

404

${request.url} not found`, {status: 404, headers:{'Content-Type': 'text/html'}} ); }; const sharedLibs = [ `php\${PHP_VERSION}-zlib.so`, `php\${PHP_VERSION}-zip.so`, `php\${PHP_VERSION}-gd.so`, `php\${PHP_VERSION}-iconv.so`, `php\${PHP_VERSION}-intl.so`, `php\${PHP_VERSION}-openssl.so`, `php\${PHP_VERSION}-dom.so`, `php\${PHP_VERSION}-mbstring.so`, `php\${PHP_VERSION}-sqlite.so`, `php\${PHP_VERSION}-pdo-sqlite.so`, `php\${PHP_VERSION}-xml.so`, `php\${PHP_VERSION}-simplexml.so`, {url: `libxml2.so`, ini: false}, ]; const files = [{ parent: '/preload/', name: 'icudt72l.dat', url: './icudt72l.dat' }]; const actions = { runSql: (php, database, sql) => { console.log({database}); const pglite = new PGlite(database); return pglite.query(sql); }, execSql: (php, database, sql) => { console.log(database) const pglite = new PGlite(database); return pglite.exec(sql); } }; // Spawn the PHP-CGI binary const php = new PhpCgiWorker({ onRequest, notFound , sharedLibs , files , PGlite , actions , staticFS: false , prefix: '/php-wasm/cgi-bin/' , exclude: ['/php-wasm/cgi-bin/~!@', '/php-wasm/cgi-bin/.'] , docroot: '/persist/www' , types: { jpeg: 'image/jpeg' , jpg: 'image/jpeg' , gif: 'image/gif' , png: 'image/png' , svg: 'image/svg+xml' } }); // Set up the event handlers self.addEventListener('install', event => php.handleInstallEvent(event)); self.addEventListener('activate', event => php.handleActivateEvent(event)); self.addEventListener('fetch', event => php.handleFetchEvent(event)); self.addEventListener('message', event => php.handleMessageEvent(event)); // Extras self.addEventListener('install', event => console.log('Install')); self.addEventListener('activate', event => console.log('Activate'));