@php-wasm/web 3.1.25 → 3.1.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.cjs CHANGED
@@ -21,5 +21,5 @@ Content-Length: 0\r
21
21
  \r
22
22
  `);H=new ReadableStream({async start(B){A.length>0&&B.enqueue(A);const F=l==="content-length"&&h!==void 0&&R>=h;(i||F)&&B.close()},async pull(B){const{done:F,value:D}=await k.read();if(R+=(D==null?void 0:D.length)||0,D&&(B.enqueue(D),q=u.concatUint8Arrays([q,D||new Uint8Array]).slice(-5)),F||l==="content-length"&&h!==void 0&&R>=h||l==="chunked"&&q.every((ge,Ie)=>ge===me[Ie])){B.close();return}}}),l==="chunked"&&(H=H.pipeThrough(new Xe))}const w=S.headers.get("Host")??t,m=new URL(S.path,n+"://"+w);return{request:new Request(m.toString(),{method:S.method,headers:S.headers,body:H,duplex:H?"half":void 0}),expectsContinue:S.expectsContinue}}static parseRequestHeaders(e){var c;const t=new TextDecoder().decode(e),n=t.split(`
23
23
  `)[0],[r,i]=n.split(" "),a=new Headers;for(const S of t.split(`\r
24
- `).slice(1)){if(S==="")break;const l=S.indexOf(":");if(l===-1)continue;const h=S.slice(0,l).trim(),A=S.slice(l+1).trimStart();h!==""&&a.set(h,A)}const _=((c=a.get("Expect"))==null?void 0:c.toLowerCase())==="100-continue";return a.delete("Expect"),{method:r,path:i,headers:a,expectsContinue:_}}}function rt(s,e){const t=s.length,n=e.length,r=t-n;for(let i=0;i<=r;i++){let a=!0;for(let _=0;_<n;_++)if(s[i+_]!==e[_]){a=!1;break}if(a)return i}return-1}async function st(s=d.LatestSupportedPHPVersion){switch(s){case"8.5":return(await import("@php-wasm/web-8-5")).getIntlExtensionPath();case"8.4":return(await import("@php-wasm/web-8-4")).getIntlExtensionPath();case"8.3":return(await import("@php-wasm/web-8-3")).getIntlExtensionPath();case"8.2":return(await import("@php-wasm/web-8-2")).getIntlExtensionPath();case"8.1":return(await import("@php-wasm/web-8-1")).getIntlExtensionPath();case"8.0":return(await import("@php-wasm/web-8-0")).getIntlExtensionPath();case"7.4":return(await import("@php-wasm/web-7-4")).getIntlExtensionPath()}throw new Error(`Unsupported PHP version ${s}`)}async function it(s,e,t,n=[]){if(!n.length)return t;const r=await Promise.all(n.map(i=>at(s,e,i)));return d.withResolvedPHPExtensions(t,r)}async function at(s,e,t){if(typeof t=="object"&&"source"in t){if(e==="asyncify")throw new Error("External PHP extensions require JSPI. Asyncify is only supported for PHP.wasm bundled extensions.");return await d.resolvePHPExtension({...t,phpVersion:s})}const n=typeof t=="string"?t:t.name;if(n!=="intl")throw new Error(`Unknown bundled PHP web extension: ${String(n)}.`);const r=Be.createMemoizedFetch(fetch),i=await st(s),a=(await import("../intl/shared/icu.dat")).default,[_,c]=await Promise.all([i,a].map(async S=>{const l=await r(S);if(!l.ok)throw new Error(`Failed to fetch bundled PHP web extension asset: ${l.url||S} (${l.status} ${l.statusText}).`);return await l.arrayBuffer()}));return await d.resolvePHPExtension({source:{format:"so",name:"intl",bytes:new Uint8Array(_)},phpVersion:s,env:{ICU_DATA:"/internal/shared"},extraFiles:{targetPath:"/internal/shared",files:{"icudt74l.dat":new Uint8Array(c)}}})}const _t=()=>({websocket:{decorator:s=>class extends s{constructor(){try{super()}catch{}}send(){return null}}}});async function ot(s,e={}){var c;"setImmediate"in globalThis||(globalThis.setImmediate=S=>setTimeout(S,0));const t=await Ue.jspi()?"jspi":"asyncify";let n={..._t(),...e.emscriptenOptions||{},phpWasmAsyncMode:t};e.tcpOverFetch&&(n=Qe(n,e.tcpOverFetch));const r=d.isLegacyPHPVersion(s),i=[...e.extensions??[]];if(e.withIntl&&!ct(i,"intl")&&i.push("intl"),r){const S=await n,l=S.preRun||[];n={...S,preRun:[...l,d.createLegacyPhpIniPreRunStep()]}}if(r&&i.length)throw new Error(`Extensions are not available for legacy PHP ${s}.`);r||(n=it(s,t,await n,i));const[a,_]=await Promise.all([ce(s),n]);return(c=e.onPhpLoaderModuleLoaded)==null||c.call(e,a),await d.loadPHPRuntime(a,_)}function ct(s,e){return s.some(t=>typeof t=="string"?t===e:!("source"in t)&&t.name===e)}function St(s,e){window.addEventListener("message",t=>{t.source===s.contentWindow&&(e&&t.origin!==e||typeof t.data!="object"||t.data.type!=="relay"||window.parent.postMessage(t.data,"*"))}),window.addEventListener("message",t=>{var n;t.source===window.parent&&(typeof t.data!="object"||t.data.type!=="relay"||(n=s==null?void 0:s.contentWindow)==null||n.postMessage(t.data))})}async function lt(s){const e=new Worker(s,{type:"module"});return new Promise((t,n)=>{e.onerror=i=>{const a=new Error(`WebWorker failed to load at ${s}. ${i.message?`Original error: ${i.message}`:""}`);a.filename=i.filename,n(a)};function r(i){i.data==="worker-script-started"&&(t(e),e.removeEventListener("message",r))}e.addEventListener("message",r)})}const Ct=1e3;function ht(s,e={initialSync:{}}){return e={...e,initialSync:{...e.initialSync,direction:e.initialSync.direction??"opfs-to-memfs"}},async function(t,n,r){var a;e.initialSync.direction==="opfs-to-memfs"?(d.FSHelpers.fileExists(n,r)&&d.FSHelpers.rmdir(n,r),d.FSHelpers.mkdir(n,r),await ut(n,s,r)):await Le(n,s,r,e.initialSync.onProgress);const i=Ht(t,s,r);return(a=e.onMount)==null||a.call(e,i),i.unmount}}async function ut(s,e,t){d.FSHelpers.mkdir(s,t);const n=new u.Semaphore({concurrency:40}),r=[],i=[[e,t]];for(;i.length>0;){const[a,_]=i.pop();for await(const c of a.values()){const S=n.run(async()=>{const l=u.joinPaths(_,c.name);if(c.kind==="directory"){try{s.mkdir(l)}catch(h){if((h==null?void 0:h.errno)!==20)throw v.logger.error(h),h}i.push([c,l])}else if(c.kind==="file"){const h=await c.getFile(),A=new Uint8Array(await h.arrayBuffer());s.createDataFile(_,c.name,A,!0,!0,!0)}r.splice(r.indexOf(S),1)});r.push(S)}for(;i.length===0&&r.length>0;)await Promise.any(r)}}async function Le(s,e,t,n){s.mkdirTree(t);const r=[];async function i(l,h){await Promise.all(s.readdir(l).filter(A=>A!=="."&&A!=="..").map(async A=>{const H=u.joinPaths(l,A);if(!At(s,H)){r.push([h,H,A]);return}const w=await h.getDirectoryHandle(A,{create:!0});return await i(H,w)}))}await i(t,e);let a=0;const _=n&&Et(n,100),c=100,S=new Set;try{for(const[l,h,A]of r){const H=G(l,A,s,h).then(()=>{a++,S.delete(H),_==null||_({files:a,total:r.length})});S.add(H),S.size>=c&&(await Promise.race(S),_==null||_({files:a,total:r.length}))}}finally{await Promise.allSettled(S)}}function At(s,e){return s.isDir(s.lookupPath(e,{follow:!0}).node.mode)}async function G(s,e,t,n){let r;try{r=t.readFile(n,{encoding:"binary"})}catch{return}const i=await s.getFileHandle(e,{create:!0}),a=i.createWritable!==void 0?await i.createWritable():await i.createSyncAccessHandle();try{await a.truncate(0),await a.write(r)}finally{await a.close()}}function Ht(s,e,t,n={}){const r=[],i=J.journalFSEvents(s,t,H=>{r.push(H)}),a=new dt(s,e,t);let _;function c(){return _===void 0&&(_=h().finally(()=>{_=void 0})),_}async function S(){try{await c()}finally{i(),s.removeEventListener("request.end",l),s.removeEventListener("filesystem.write",l)}}function l(){c().catch(H=>{v.logger.error(H)})}async function h(){const H=n.maxFlushPasses??Ct;for(let w=0;r.length>0;w++){if(w>=H){const m=r.length,M=m===1?`${m} journal entry remains`:`${m} journal entries remain`;throw new Error(`OPFS flush for "${t}" did not settle after ${H} journal batches; ${M}. This can happen when filesystem writes are continuously enqueued while flushing.`)}await A()}}async function A(){if(r.length===0)return;const H=await s.semaphore.acquire(),w=[...r];r.splice(0,w.length);const m=J.normalizeFilesystemOperations(w);try{for(const M of m)await a.processEntry(M)}finally{H()}}return s.addEventListener("request.end",l),s.addEventListener("filesystem.write",l),{flush:c,unmount:S}}class dt{constructor(e,t,n){this.php=e,this.opfs=t,this.memfsRoot=_e(n)}toOpfsPath(e){return _e(e.substring(this.memfsRoot.length))}async processEntry(e){if(!e.path.startsWith(this.memfsRoot)||e.path===this.memfsRoot)return;const t=this.toOpfsPath(e.path),n=await oe(this.opfs,t),r=ft(t);if(r)try{if(e.operation==="DELETE")try{await n.removeEntry(r,{recursive:!0})}catch{}else if(e.operation==="CREATE")e.nodeType==="directory"?await n.getDirectoryHandle(r,{create:!0}):await n.getFileHandle(r,{create:!0});else if(e.operation==="WRITE")await G(n,r,this.php[d.__private__dont__use].FS,e.path);else if(e.operation==="RENAME"&&e.toPath.startsWith(this.memfsRoot)){const i=this.toOpfsPath(e.toPath),a=await oe(this.opfs,i);if(e.nodeType==="directory"){const _=await a.getDirectoryHandle(r,{create:!0});await Le(this.php[d.__private__dont__use].FS,_,e.toPath),await n.removeEntry(r,{recursive:!0})}else{try{await n.removeEntry(r)}catch{}await G(a,u.basename(i),this.php[d.__private__dont__use].FS,e.toPath)}}}catch(i){throw v.logger.log({entry:e,name:r}),v.logger.error(i),i}}}function _e(s){return s.replace(/\/$/,"").replace(/\/\/+/g,"/")}function ft(s){return s.substring(s.lastIndexOf("/")+1)}async function oe(s,e){const t=e.replace(/^\/+|\/+$/g,"").replace(/\/+/,"/");if(!t)return s;const n=t.split("/");let r=s;for(let i=0;i<n.length-1;i++){const a=n[i];r=await r.getDirectoryHandle(a,{create:!0})}return r}function Et(s,e){let t=0,n,r;return function(...a){r=a;const _=Date.now()-t;if(n===void 0){const c=Math.max(0,e-_);n=setTimeout(()=>{n=void 0,t=Date.now(),s(...r)},c)}}}Object.defineProperty(exports,"consumeAPI",{enumerable:!0,get:()=>d.consumeAPI});Object.defineProperty(exports,"exposeAPI",{enumerable:!0,get:()=>d.exposeAPI});Object.defineProperty(exports,"FirewallInterferenceError",{enumerable:!0,get:()=>$.FirewallInterferenceError});Object.defineProperty(exports,"fetchWithCorsProxy",{enumerable:!0,get:()=>$.fetchWithCorsProxy});exports.certificateToPEM=Ve;exports.createDirectoryHandleMountHandler=ht;exports.generateCertificate=pe;exports.getPHPLoaderModule=ce;exports.loadWebRuntime=ot;exports.privateKeyToPEM=ze;exports.setupPostMessageRelay=St;exports.spawnPHPWorkerThread=lt;
24
+ `).slice(1)){if(S==="")break;const l=S.indexOf(":");if(l===-1)continue;const h=S.slice(0,l).trim(),A=S.slice(l+1).trimStart();h!==""&&a.set(h,A)}const _=((c=a.get("Expect"))==null?void 0:c.toLowerCase())==="100-continue";return a.delete("Expect"),{method:r,path:i,headers:a,expectsContinue:_}}}function rt(s,e){const t=s.length,n=e.length,r=t-n;for(let i=0;i<=r;i++){let a=!0;for(let _=0;_<n;_++)if(s[i+_]!==e[_]){a=!1;break}if(a)return i}return-1}async function st(s=d.LatestSupportedPHPVersion){switch(s){case"8.5":return(await import("@php-wasm/web-8-5")).getIntlExtensionPath();case"8.4":return(await import("@php-wasm/web-8-4")).getIntlExtensionPath();case"8.3":return(await import("@php-wasm/web-8-3")).getIntlExtensionPath();case"8.2":return(await import("@php-wasm/web-8-2")).getIntlExtensionPath();case"8.1":return(await import("@php-wasm/web-8-1")).getIntlExtensionPath();case"8.0":return(await import("@php-wasm/web-8-0")).getIntlExtensionPath();case"7.4":return(await import("@php-wasm/web-7-4")).getIntlExtensionPath()}throw new Error(`Unsupported PHP version ${s}`)}async function it(s,e,t,n=[]){if(!n.length)return t;const r=await Promise.all(n.map(i=>at(s,e,i)));return d.withResolvedPHPExtensions(t,r)}async function at(s,e,t){if(typeof t=="object"&&"source"in t){if(e==="asyncify")throw new Error("External PHP extensions require JSPI. Asyncify is only supported for PHP.wasm bundled extensions.");return await d.resolvePHPExtension({...t,phpVersion:s})}const n=typeof t=="string"?t:t.name;if(n!=="intl")throw new Error(`Unknown bundled PHP web extension: ${String(n)}.`);const r=Be.createMemoizedFetch(fetch),i=await st(s),a=(await import("../intl/shared/icu.dat")).default,[_,c]=await Promise.all([i,a].map(async S=>{const l=await r(S);if(!l.ok)throw new Error(`Failed to fetch bundled PHP web extension asset: ${l.url||S} (${l.status} ${l.statusText}).`);return await l.arrayBuffer()}));return await d.resolvePHPExtension({source:{format:"so",name:"intl",bytes:new Uint8Array(_)},phpVersion:s,env:{ICU_DATA:"/internal/shared"},extraFiles:{files:{"/internal/shared/icudt74l.dat":new Uint8Array(c)}}})}const _t=()=>({websocket:{decorator:s=>class extends s{constructor(){try{super()}catch{}}send(){return null}}}});async function ot(s,e={}){var c;"setImmediate"in globalThis||(globalThis.setImmediate=S=>setTimeout(S,0));const t=await Ue.jspi()?"jspi":"asyncify";let n={..._t(),...e.emscriptenOptions||{},phpWasmAsyncMode:t};e.tcpOverFetch&&(n=Qe(n,e.tcpOverFetch));const r=d.isLegacyPHPVersion(s),i=[...e.extensions??[]];if(e.withIntl&&!ct(i,"intl")&&i.push("intl"),r){const S=await n,l=S.preRun||[];n={...S,preRun:[...l,d.createLegacyPhpIniPreRunStep()]}}if(r&&i.length)throw new Error(`Extensions are not available for legacy PHP ${s}.`);r||(n=it(s,t,await n,i));const[a,_]=await Promise.all([ce(s),n]);return(c=e.onPhpLoaderModuleLoaded)==null||c.call(e,a),await d.loadPHPRuntime(a,_)}function ct(s,e){return s.some(t=>typeof t=="string"?t===e:!("source"in t)&&t.name===e)}function St(s,e){window.addEventListener("message",t=>{t.source===s.contentWindow&&(e&&t.origin!==e||typeof t.data!="object"||t.data.type!=="relay"||window.parent.postMessage(t.data,"*"))}),window.addEventListener("message",t=>{var n;t.source===window.parent&&(typeof t.data!="object"||t.data.type!=="relay"||(n=s==null?void 0:s.contentWindow)==null||n.postMessage(t.data))})}async function lt(s){const e=new Worker(s,{type:"module"});return new Promise((t,n)=>{e.onerror=i=>{const a=new Error(`WebWorker failed to load at ${s}. ${i.message?`Original error: ${i.message}`:""}`);a.filename=i.filename,n(a)};function r(i){i.data==="worker-script-started"&&(t(e),e.removeEventListener("message",r))}e.addEventListener("message",r)})}const Ct=1e3;function ht(s,e={initialSync:{}}){return e={...e,initialSync:{...e.initialSync,direction:e.initialSync.direction??"opfs-to-memfs"}},async function(t,n,r){var a;e.initialSync.direction==="opfs-to-memfs"?(d.FSHelpers.fileExists(n,r)&&d.FSHelpers.rmdir(n,r),d.FSHelpers.mkdir(n,r),await ut(n,s,r)):await Le(n,s,r,e.initialSync.onProgress);const i=Ht(t,s,r);return(a=e.onMount)==null||a.call(e,i),i.unmount}}async function ut(s,e,t){d.FSHelpers.mkdir(s,t);const n=new u.Semaphore({concurrency:40}),r=[],i=[[e,t]];for(;i.length>0;){const[a,_]=i.pop();for await(const c of a.values()){const S=n.run(async()=>{const l=u.joinPaths(_,c.name);if(c.kind==="directory"){try{s.mkdir(l)}catch(h){if((h==null?void 0:h.errno)!==20)throw v.logger.error(h),h}i.push([c,l])}else if(c.kind==="file"){const h=await c.getFile(),A=new Uint8Array(await h.arrayBuffer());s.createDataFile(_,c.name,A,!0,!0,!0)}r.splice(r.indexOf(S),1)});r.push(S)}for(;i.length===0&&r.length>0;)await Promise.any(r)}}async function Le(s,e,t,n){s.mkdirTree(t);const r=[];async function i(l,h){await Promise.all(s.readdir(l).filter(A=>A!=="."&&A!=="..").map(async A=>{const H=u.joinPaths(l,A);if(!At(s,H)){r.push([h,H,A]);return}const w=await h.getDirectoryHandle(A,{create:!0});return await i(H,w)}))}await i(t,e);let a=0;const _=n&&Et(n,100),c=100,S=new Set;try{for(const[l,h,A]of r){const H=G(l,A,s,h).then(()=>{a++,S.delete(H),_==null||_({files:a,total:r.length})});S.add(H),S.size>=c&&(await Promise.race(S),_==null||_({files:a,total:r.length}))}}finally{await Promise.allSettled(S)}}function At(s,e){return s.isDir(s.lookupPath(e,{follow:!0}).node.mode)}async function G(s,e,t,n){let r;try{r=t.readFile(n,{encoding:"binary"})}catch{return}const i=await s.getFileHandle(e,{create:!0}),a=i.createWritable!==void 0?await i.createWritable():await i.createSyncAccessHandle();try{await a.truncate(0),await a.write(r)}finally{await a.close()}}function Ht(s,e,t,n={}){const r=[],i=J.journalFSEvents(s,t,H=>{r.push(H)}),a=new dt(s,e,t);let _;function c(){return _===void 0&&(_=h().finally(()=>{_=void 0})),_}async function S(){try{await c()}finally{i(),s.removeEventListener("request.end",l),s.removeEventListener("filesystem.write",l)}}function l(){c().catch(H=>{v.logger.error(H)})}async function h(){const H=n.maxFlushPasses??Ct;for(let w=0;r.length>0;w++){if(w>=H){const m=r.length,M=m===1?`${m} journal entry remains`:`${m} journal entries remain`;throw new Error(`OPFS flush for "${t}" did not settle after ${H} journal batches; ${M}. This can happen when filesystem writes are continuously enqueued while flushing.`)}await A()}}async function A(){if(r.length===0)return;const H=await s.semaphore.acquire(),w=[...r];r.splice(0,w.length);const m=J.normalizeFilesystemOperations(w);try{for(const M of m)await a.processEntry(M)}finally{H()}}return s.addEventListener("request.end",l),s.addEventListener("filesystem.write",l),{flush:c,unmount:S}}class dt{constructor(e,t,n){this.php=e,this.opfs=t,this.memfsRoot=_e(n)}toOpfsPath(e){return _e(e.substring(this.memfsRoot.length))}async processEntry(e){if(!e.path.startsWith(this.memfsRoot)||e.path===this.memfsRoot)return;const t=this.toOpfsPath(e.path),n=await oe(this.opfs,t),r=ft(t);if(r)try{if(e.operation==="DELETE")try{await n.removeEntry(r,{recursive:!0})}catch{}else if(e.operation==="CREATE")e.nodeType==="directory"?await n.getDirectoryHandle(r,{create:!0}):await n.getFileHandle(r,{create:!0});else if(e.operation==="WRITE")await G(n,r,this.php[d.__private__dont__use].FS,e.path);else if(e.operation==="RENAME"&&e.toPath.startsWith(this.memfsRoot)){const i=this.toOpfsPath(e.toPath),a=await oe(this.opfs,i);if(e.nodeType==="directory"){const _=await a.getDirectoryHandle(r,{create:!0});await Le(this.php[d.__private__dont__use].FS,_,e.toPath),await n.removeEntry(r,{recursive:!0})}else{try{await n.removeEntry(r)}catch{}await G(a,u.basename(i),this.php[d.__private__dont__use].FS,e.toPath)}}}catch(i){throw v.logger.log({entry:e,name:r}),v.logger.error(i),i}}}function _e(s){return s.replace(/\/$/,"").replace(/\/\/+/g,"/")}function ft(s){return s.substring(s.lastIndexOf("/")+1)}async function oe(s,e){const t=e.replace(/^\/+|\/+$/g,"").replace(/\/+/,"/");if(!t)return s;const n=t.split("/");let r=s;for(let i=0;i<n.length-1;i++){const a=n[i];r=await r.getDirectoryHandle(a,{create:!0})}return r}function Et(s,e){let t=0,n,r;return function(...a){r=a;const _=Date.now()-t;if(n===void 0){const c=Math.max(0,e-_);n=setTimeout(()=>{n=void 0,t=Date.now(),s(...r)},c)}}}Object.defineProperty(exports,"consumeAPI",{enumerable:!0,get:()=>d.consumeAPI});Object.defineProperty(exports,"exposeAPI",{enumerable:!0,get:()=>d.exposeAPI});Object.defineProperty(exports,"FirewallInterferenceError",{enumerable:!0,get:()=>$.FirewallInterferenceError});Object.defineProperty(exports,"fetchWithCorsProxy",{enumerable:!0,get:()=>$.fetchWithCorsProxy});exports.certificateToPEM=Ve;exports.createDirectoryHandleMountHandler=ht;exports.generateCertificate=pe;exports.getPHPLoaderModule=ce;exports.loadWebRuntime=ot;exports.privateKeyToPEM=ze;exports.setupPostMessageRelay=St;exports.spawnPHPWorkerThread=lt;
25
25
  //# sourceMappingURL=index.cjs.map