@php-wasm/universal 3.1.34 → 3.1.36

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
@@ -80,7 +80,7 @@ ${JSON.stringify(r.headers,null,2)}
80
80
  ==== PHP stderr ====
81
81
 
82
82
  `),process.stderr.write(r.errors)),process.stderr.write(`
83
- `)}class HttpCookieStore{constructor(){this.cookies={}}rememberCookiesFromResponseHeaders(e){if(e!=null&&e["set-cookie"])for(const t of e["set-cookie"])try{if(!t.includes("="))continue;const s=t.indexOf("="),n=t.substring(0,s),o=t.substring(s+1).split(";")[0];this.cookies[n]=o}catch(s){logger.logger.error(s)}}getCookieRequestHeader(){const e=[];for(const t in this.cookies)e.push(`${t}=${this.cookies[t]}`);return e.join("; ")}}function streamReadFileFromPHP(r,e){return new ReadableStream({async pull(t){const s=await r.readFileAsBuffer(e);t.enqueue(s),t.close()}})}async function*iteratePhpFiles(r,e,{relativePaths:t=!0,pathPrefix:s,exceptPaths:n=[]}={}){e=util.normalizePath(e);const o=[e];for(;o.length;){const i=o.pop();if(!i)return;const a=await r.listFiles(i);for(const l of a){const c=`${i}/${l}`;if(n.includes(c.substring(e.length+1)))continue;await r.isDir(c)?o.push(c):yield new streamCompression.StreamedFile(streamReadFileFromPHP(r,c),t?util.joinPaths(s||"",c.substring(e.length+1)):c)}}}function writeFilesStreamToPhp(r,e){return new WritableStream({async write(t){const s=util.joinPaths(e,t.name);t.type==="directory"?await r.mkdir(s):(await r.mkdir(util.dirname(s)),await r.writeFile(s,new Uint8Array(await t.arrayBuffer())))}})}class SinglePHPInstanceManager{constructor(e){if(this.isAcquired=!1,!e.php&&!e.phpFactory)throw new Error("SinglePHPInstanceManager requires either php or phpFactory");this.php=e.php,this.phpFactory=e.phpFactory}async getPrimaryPhp(){return this.php?this.php:(this.phpPromise||(this.phpPromise=this.phpFactory().then(e=>(this.php=e,this.phpPromise=void 0,e))),this.phpPromise)}async acquirePHPInstance(){if(this.isAcquired)throw new Error("The PHP instance already acquired. SinglePHPInstanceManager cannot spawn another PHP instance since, by definition, it only manages a single PHP instance.");const e=await this.getPrimaryPhp();return this.isAcquired=!0,{php:e,reap:()=>{this.isAcquired=!1}}}async[Symbol.asyncDispose](){this.php&&this.php.exit()}}class MaxPhpInstancesError extends Error{constructor(e){super(`Requested more concurrent PHP instances than the limit (${e}).`),this.name=this.constructor.name}}class PHPProcessManager{constructor(e){this.instances=[],this.idleInstances=[],this.maxPhpInstances=(e==null?void 0:e.maxPhpInstances)??2,this.phpFactory=e==null?void 0:e.phpFactory,this.semaphore=new util.Semaphore({concurrency:this.maxPhpInstances,timeout:(e==null?void 0:e.timeout)||3e4})}async getPrimaryPhp(){if(this.instances.length>0)return this.instances[0];this.primaryPhpPromise||(this.primaryPhpPromise=this.spawnInstance(!0));try{return await this.primaryPhpPromise}finally{this.primaryPhpPromise=void 0}}async acquirePHPInstance(){let e;try{e=await this.semaphore.acquire()}catch(s){throw s instanceof util.AcquireTimeoutError?new MaxPhpInstancesError(this.maxPhpInstances):s}const t=await this.getOrSpawnInstance();return{php:t,reap:()=>{this.idleInstances.push(t),e()}}}async getOrSpawnInstance(){return this.instances.length===0&&await this.getPrimaryPhp(),this.idleInstances.length===0&&await this.spawnInstance(!1),this.idleInstances.pop()}async spawnInstance(e){if(!this.phpFactory)throw new Error("phpFactory must be set before spawning instances.");const t=await this.phpFactory({isPrimary:e});return this.instances.push(t),this.idleInstances.push(t),t}async[Symbol.asyncDispose](){for(const e of this.instances)e.exit();this.instances=[],this.idleInstances=[]}}const SupportedPHPVersions=["8.5","8.4","8.3","8.2","8.1","8.0","7.4"],LatestSupportedPHPVersion=SupportedPHPVersions[0],SupportedPHPVersionsList=SupportedPHPVersions,LegacyPHPVersions=["5.2"];function isLegacyPHPVersion(r){return LegacyPHPVersions.includes(r??"")}const AllPHPVersions=[...SupportedPHPVersions,...LegacyPHPVersions],LEGACY_PHP_INI_PATH="/internal/shared/php.ini",LEGACY_PHP_INI_CONTENT=["auto_prepend_file=/internal/shared/auto_prepend_file.php","memory_limit=256M","ignore_repeated_errors = 1","error_reporting = E_ALL","display_errors = 1","html_errors = 1","display_startup_errors = On","log_errors = 1","always_populate_raw_post_data = -1","upload_max_filesize = 2000M","post_max_size = 2000M","allow_url_fopen = On","allow_url_include = Off","session.save_path = /home/web_user","implicit_flush = 1","output_buffering = 0","max_execution_time = 0","max_input_time = -1","disable_functions = ini_get_all","opcache.enable = 0","opcache.enable_cli = 0"].join(`
83
+ `)}class HttpCookieStore{constructor(){this.cookies={}}rememberCookiesFromResponseHeaders(e){if(e!=null&&e["set-cookie"])for(const t of e["set-cookie"])try{if(!t.includes("="))continue;const s=t.indexOf("="),n=t.substring(0,s),o=t.substring(s+1).split(";")[0];this.cookies[n]=o}catch(s){logger.logger.error(s)}}getCookieRequestHeader(){const e=[];for(const t in this.cookies)e.push(`${t}=${this.cookies[t]}`);return e.join("; ")}}function streamReadFileFromPHP(r,e){return new ReadableStream({async pull(t){const s=await r.readFileAsBuffer(e);t.enqueue(s),t.close()}})}async function*iteratePhpFiles(r,e,{relativePaths:t=!0,pathPrefix:s,exceptPaths:n=[]}={}){e=util.normalizePath(e);const o=[e];for(;o.length;){const i=o.pop();if(!i)return;const a=await r.listFiles(i);for(const l of a){const c=`${i}/${l}`;if(n.includes(c.substring(e.length+1)))continue;await r.isDir(c)?o.push(c):yield new streamCompression.StreamedFile(streamReadFileFromPHP(r,c),t?util.joinPaths(s||"",c.substring(e.length+1)):c)}}}function writeFilesStreamToPhp(r,e){return new WritableStream({async write(t){const s=util.joinPaths(e,t.name);t.type==="directory"?await r.mkdir(s):(await r.mkdir(util.dirname(s)),await r.writeFile(s,new Uint8Array(await t.arrayBuffer())))}})}class SinglePHPInstanceManager{constructor(e){if(this.isAcquired=!1,!e.php&&!e.phpFactory)throw new Error("SinglePHPInstanceManager requires either php or phpFactory");this.php=e.php,this.phpFactory=e.phpFactory}async getPrimaryPhp(){return this.php?this.php:(this.phpPromise||(this.phpPromise=this.phpFactory().then(e=>(this.php=e,this.phpPromise=void 0,e))),this.phpPromise)}async acquirePHPInstance(){if(this.isAcquired)throw new Error("The PHP instance already acquired. SinglePHPInstanceManager cannot spawn another PHP instance since, by definition, it only manages a single PHP instance.");const e=await this.getPrimaryPhp();return this.isAcquired=!0,{php:e,reap:()=>{this.isAcquired=!1}}}async[Symbol.asyncDispose](){this.php&&this.php.exit()}}class MaxPhpInstancesError extends Error{constructor(e){super(`Requested more concurrent PHP instances than the limit (${e}).`),this.name=this.constructor.name}}class PHPProcessManager{constructor(e){this.instances=[],this.idleInstances=[],this.maxPhpInstances=(e==null?void 0:e.maxPhpInstances)??2,this.phpFactory=e==null?void 0:e.phpFactory,this.semaphore=new util.Semaphore({concurrency:this.maxPhpInstances,timeout:(e==null?void 0:e.timeout)||3e4})}async getPrimaryPhp(){if(this.instances.length>0)return this.instances[0];this.primaryPhpPromise||(this.primaryPhpPromise=this.spawnInstance(!0));try{return await this.primaryPhpPromise}finally{this.primaryPhpPromise=void 0}}async acquirePHPInstance(){let e;try{e=await this.semaphore.acquire()}catch(s){throw s instanceof util.AcquireTimeoutError?new MaxPhpInstancesError(this.maxPhpInstances):s}const t=await this.getOrSpawnInstance();return{php:t,reap:()=>{this.idleInstances.push(t),e()}}}async getOrSpawnInstance(){return this.instances.length===0&&await this.getPrimaryPhp(),this.idleInstances.length===0&&await this.spawnInstance(!1),this.idleInstances.pop()}async spawnInstance(e){if(!this.phpFactory)throw new Error("phpFactory must be set before spawning instances.");const t=await this.phpFactory({isPrimary:e});return this.instances.push(t),this.idleInstances.push(t),t}async[Symbol.asyncDispose](){for(const e of this.instances)e.exit();this.instances=[],this.idleInstances=[]}}const PHPNextVersion="next",SupportedPHPVersions=["8.5","8.4","8.3","8.2","8.1","8.0","7.4"],LatestSupportedPHPVersion=SupportedPHPVersions[0],SupportedPHPVersionsList=SupportedPHPVersions,LegacyPHPVersions=["5.2"];function isPHPNextVersion(r){return r===PHPNextVersion}function isLegacyPHPVersion(r){return LegacyPHPVersions.includes(r??"")}const AllPHPVersions=[PHPNextVersion,...SupportedPHPVersions,...LegacyPHPVersions],LEGACY_PHP_INI_PATH="/internal/shared/php.ini",LEGACY_PHP_INI_CONTENT=["auto_prepend_file=/internal/shared/auto_prepend_file.php","memory_limit=256M","ignore_repeated_errors = 1","error_reporting = E_ALL","display_errors = 1","html_errors = 1","display_startup_errors = On","log_errors = 1","always_populate_raw_post_data = -1","upload_max_filesize = 2000M","post_max_size = 2000M","allow_url_fopen = On","allow_url_include = Off","session.save_path = /home/web_user","implicit_flush = 1","output_buffering = 0","max_execution_time = 0","max_input_time = -1","disable_functions = ini_get_all","opcache.enable = 0","opcache.enable_cli = 0"].join(`
84
84
  `);function createLegacyPhpIniPreRunStep(){return r=>{r.FS.mkdirTree("/internal/shared"),r.FS.writeFile(LEGACY_PHP_INI_PATH,LEGACY_PHP_INI_CONTENT)}}const DEFAULT_BASE_URL="http://example.com";function toRelativeUrl(r){return r.origin==="null"?r.toString():r.toString().substring(r.origin.length)}function removePathPrefix(r,e){return!e||!r.startsWith(e)?r:r.substring(e.length)}function ensurePathPrefix(r,e){return!e||r.startsWith(e)?r:e+r}async function encodeAsMultipart(r){const e=`----${Math.random().toString(36).slice(2)}`,t=`multipart/form-data; boundary=${e}`,s=new TextEncoder,n=[];for(const[l,c]of Object.entries(r))n.push(`--${e}\r
85
85
  `),n.push(`Content-Disposition: form-data; name="${l}"`),c instanceof File&&n.push(`; filename="${c.name}"`),n.push(`\r
86
86
  `),c instanceof File&&(n.push("Content-Type: application/octet-stream"),n.push(`\r
@@ -101,5 +101,5 @@ ${JSON.stringify(r.headers,null,2)}
101
101
  * @license
102
102
  * Copyright 2019 Google LLC
103
103
  * SPDX-License-Identifier: Apache-2.0
104
- */const WireValueType={RAW:"RAW",HANDLER:"HANDLER"},MessageType={GET:"GET",SET:"SET",APPLY:"APPLY",CONSTRUCT:"CONSTRUCT",ENDPOINT:"ENDPOINT",RELEASE:"RELEASE"},isObject=r=>typeof r=="object"&&r!==null||typeof r=="function",proxyTransferHandler={canHandle:r=>isObject(r)&&r[proxyMarker],serialize(r){const{port1:e,port2:t}=new MessageChannel;return expose(r,e),[t,[t]]},deserialize(r){return r.start(),wrap(r)}},throwTransferHandler$1={canHandle:r=>isObject(r)&&throwMarker in r,serialize({value:r}){let e;return r instanceof Error?e={isError:!0,value:{message:r.message,name:r.name,stack:r.stack}}:e={isError:!1,value:r},[e,[]]},deserialize(r){throw r.isError?Object.assign(new Error(r.value.message),r.value):r.value}},transferHandlers=new Map([["proxy",proxyTransferHandler],["throw",throwTransferHandler$1]]);function isAllowedOrigin(r,e){for(const t of r)if(e===t||t==="*"||t instanceof RegExp&&t.test(e))return!0;return!1}function expose(r,e=globalThis,t=["*"],s){e.addEventListener("message",function n(o){if(!o||!o.data)return;if(!isAllowedOrigin(t,o.origin)){console.warn(`Invalid origin '${o.origin}' for comlink proxy`);return}const{id:i,type:a,path:l}={path:[],...o.data},c=(o.data.argumentList||[]).map(fromWireValue);let u;try{const d=l.slice(0,-1).reduce((P,S)=>P[S],r),h=l.reduce((P,S)=>P[S],r);switch(a){case MessageType.GET:u=h;break;case MessageType.SET:d[l.slice(-1)[0]]=fromWireValue(o.data.value),u=!0;break;case MessageType.APPLY:u=h.apply(d,c);break;case MessageType.CONSTRUCT:{const P=new h(...c);u=proxy(P)}break;case MessageType.ENDPOINT:{const{port1:P,port2:S}=new MessageChannel;expose(r,S),u=transfer(P,[P])}break;case MessageType.RELEASE:u=void 0;break;default:return}}catch(d){u={value:d,[throwMarker]:0}}Promise.resolve(u).catch(d=>({value:d,[throwMarker]:0})).then(d=>{const[h,P]=toWireValue(d);e.postMessage({...h,id:i},P),a===MessageType.RELEASE&&(e.removeEventListener("message",n),closeEndPoint(e),finalizer in r&&typeof r[finalizer]=="function"&&r[finalizer]())}).catch(()=>{const[d,h]=toWireValue({value:new TypeError("Unserializable return value"),[throwMarker]:0});e.postMessage({...d,id:i},h)}).finally(()=>{s==null||s(o)})}),e.start&&e.start()}function isMessagePort(r){return r.constructor.name==="MessagePort"}function closeEndPoint(r){isMessagePort(r)&&r.close()}function wrap(r,e){const t=new Map;return r.addEventListener("message",function(n){const{data:o}=n;if(!o||!o.id)return;const i=t.get(o.id);if(i)try{i(o)}finally{t.delete(o.id)}}),createProxy(r,t,[],e)}function throwIfProxyReleased(r){if(r)throw new Error("Proxy has been released and is not useable")}function releaseEndpoint(r){return requestResponseMessage(r,new Map,{type:MessageType.RELEASE}).then(()=>{closeEndPoint(r)})}const proxyCounter=new WeakMap,proxyFinalizers="FinalizationRegistry"in globalThis&&new FinalizationRegistry(r=>{const e=(proxyCounter.get(r)||0)-1;proxyCounter.set(r,e),e===0&&releaseEndpoint(r)});function registerProxy(r,e){const t=(proxyCounter.get(e)||0)+1;proxyCounter.set(e,t),proxyFinalizers&&proxyFinalizers.register(r,e,r)}function unregisterProxy(r){proxyFinalizers&&proxyFinalizers.unregister(r)}function createProxy(r,e,t=[],s=function(){}){let n=!1;const o=new Proxy(s,{get(i,a){if(throwIfProxyReleased(n),a===releaseProxy)return()=>{unregisterProxy(o),releaseEndpoint(r),e.clear(),n=!0};if(a==="then"){if(t.length===0)return{then:()=>o};const l=requestResponseMessage(r,e,{type:MessageType.GET,path:t.map(c=>c.toString())}).then(fromWireValue);return l.then.bind(l)}return createProxy(r,e,[...t,a])},set(i,a,l){throwIfProxyReleased(n);const[c,u]=toWireValue(l);return requestResponseMessage(r,e,{type:MessageType.SET,path:[...t,a].map(d=>d.toString()),value:c},u).then(fromWireValue)},apply(i,a,l){throwIfProxyReleased(n);const c=t[t.length-1];if(c===createEndpoint)return requestResponseMessage(r,e,{type:MessageType.ENDPOINT}).then(fromWireValue);if(c==="bind")return createProxy(r,e,t.slice(0,-1));const[u,d]=processArguments(l);return requestResponseMessage(r,e,{type:MessageType.APPLY,path:t.map(h=>h.toString()),argumentList:u},d).then(fromWireValue)},construct(i,a){throwIfProxyReleased(n);const[l,c]=processArguments(a);return requestResponseMessage(r,e,{type:MessageType.CONSTRUCT,path:t.map(u=>u.toString()),argumentList:l},c).then(fromWireValue)}});return registerProxy(o,r),o}function myFlat(r){return Array.prototype.concat.apply([],r)}function processArguments(r){const e=r.map(toWireValue);return[e.map(t=>t[0]),myFlat(e.map(t=>t[1]))]}const transferCache=new WeakMap;function transfer(r,e){return transferCache.set(r,e),r}function proxy(r){return Object.assign(r,{[proxyMarker]:!0})}function windowEndpoint(r,e=globalThis,t="*"){return{postMessage:(s,n)=>r.postMessage(s,t,n),addEventListener:e.addEventListener.bind(e),removeEventListener:e.removeEventListener.bind(e)}}function toWireValue(r){for(const[e,t]of transferHandlers)if(t.canHandle(r)){const[s,n]=t.serialize(r);return[{type:WireValueType.HANDLER,name:e,value:s},n]}return[{type:WireValueType.RAW,value:r},transferCache.get(r)||[]]}function fromWireValue(r){switch(r.type){case WireValueType.HANDLER:return transferHandlers.get(r.name).deserialize(r.value);case WireValueType.RAW:return r.value}}function requestResponseMessage(r,e,t,s){return new Promise(n=>{const o=generateUUID();e.set(o,n),r.start&&r.start(),r.postMessage({id:o,...t},s)})}function generateUUID(){return new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-")}function nodeEndpoint(r){const e=new WeakMap;return{postMessage:r.postMessage.bind(r),addEventListener:(t,s)=>{const n=o=>{"handleEvent"in s?s.handleEvent({data:o}):s({data:o})};r.on("message",n),e.set(s,n)},removeEventListener:(t,s)=>{const n=e.get(s);n&&(r.off("message",n),e.delete(s))},start:r.start&&r.start.bind(r)}}const proxyByListener=new WeakMap;function nodeProcessEndpoint(r){const e=r||process;if(typeof e.send!="function")throw new Error("IPC channel is not available. Did you forget to fork the process?");const t=e;return{postMessage(s,n){var o;if(n&&n.length>0)throw new Error("Transferable objects are not supported for nodeProcessEndpoint");(o=t.send)==null||o.call(t,s)},addEventListener(s,n){const o=typeof n=="function"?i=>n({data:i}):i=>n.handleEvent({data:i});proxyByListener.set(n,o),t.addListener(s,o)},removeEventListener(s,n){const o=proxyByListener.get(n);o&&(proxyByListener.delete(n),t.removeListener(s,o))},start(){}}}const list=[Error,EvalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError,AggregateError,globalThis.DOMException,globalThis.AssertionError,globalThis.SystemError].filter(Boolean).map(r=>[r.name,r]),errorConstructors=new Map(list);class NonError extends Error{constructor(e){super(NonError._prepareSuperMessage(e)),this.name="NonError"}static _prepareSuperMessage(e){try{return JSON.stringify(e)}catch{return String(e)}}}const errorProperties=[{property:"name",enumerable:!1},{property:"message",enumerable:!1},{property:"stack",enumerable:!1},{property:"code",enumerable:!0},{property:"cause",enumerable:!1},{property:"errors",enumerable:!1}],toJsonWasCalled=new WeakSet,toJSON=r=>{toJsonWasCalled.add(r);const e=r.toJSON();return toJsonWasCalled.delete(r),e},newError=r=>{const e=errorConstructors.get(r)??Error;return e===AggregateError?new e([]):new e},destroyCircular=({from:r,seen:e,to:t,forceEnumerable:s,maxDepth:n,depth:o,useToJSON:i,serialize:a})=>{if(t||(Array.isArray(r)?t=[]:!a&&isErrorLike(r)?t=newError(r.name):t={}),e.push(r),o>=n)return t;if(i&&typeof r.toJSON=="function"&&!toJsonWasCalled.has(r))return toJSON(r);const l=c=>destroyCircular({from:c,seen:[...e],forceEnumerable:s,maxDepth:n,depth:o,useToJSON:i,serialize:a});for(const[c,u]of Object.entries(r)){if(u&&u instanceof Uint8Array&&u.constructor.name==="Buffer"){t[c]="[object Buffer]";continue}if(u!==null&&typeof u=="object"&&typeof u.pipe=="function"){t[c]="[object Stream]";continue}if(typeof u!="function"){if(!u||typeof u!="object"){try{t[c]=u}catch{}continue}if(!e.includes(r[c])){o++,t[c]=l(r[c]);continue}t[c]="[Circular]"}}if(a||t instanceof Error)for(const{property:c,enumerable:u}of errorProperties)r[c]!==void 0&&r[c]!==null&&Object.defineProperty(t,c,{value:isErrorLike(r[c])||Array.isArray(r[c])?l(r[c]):r[c],enumerable:s?!0:u,configurable:!0,writable:!0});return t};function serializeError(r,e={}){const{maxDepth:t=Number.POSITIVE_INFINITY,useToJSON:s=!0}=e;return typeof r=="object"&&r!==null?destroyCircular({from:r,seen:[],forceEnumerable:!0,maxDepth:t,depth:0,useToJSON:s,serialize:!0}):typeof r=="function"?`[Function: ${r.name||"anonymous"}]`:r}function deserializeError(r,e={}){const{maxDepth:t=Number.POSITIVE_INFINITY}=e;return r instanceof Error?r:isMinimumViableSerializedError(r)?destroyCircular({from:r,seen:[],to:newError(r.name),maxDepth:t,depth:0,serialize:!1}):new NonError(r)}function isErrorLike(r){return!!r&&typeof r=="object"&&typeof r.name=="string"&&typeof r.message=="string"&&typeof r.stack=="string"}function isMinimumViableSerializedError(r){return!!r&&typeof r=="object"&&typeof r.message=="string"&&!Array.isArray(r)}const releaseApiProxy=releaseProxy;async function consumeAPISync(r){setupTransferHandlers();const e=await NodeSABSyncReceiveMessageTransport.create();return wrapSync(r,e)}function consumeAPI(r,e=void 0){setupTransferHandlers();let t;if(typeof process<"u"&&typeof process.versions<"u"&&typeof process.versions.node<"u")if("postMessage"in r)t=nodeEndpoint(r);else if("send"in r&&"addListener"in r)t=nodeProcessEndpoint(r);else throw new Error("consumeAPI: remote does not look like a Worker, MessagePort, or Process");else t=r instanceof Worker?r:windowEndpoint(r,e);const n=wrap(t),o=proxyClone(n);return new Proxy(o,{get:(i,a)=>a==="isConnected"?async()=>{for(;;)try{await runWithTimeout(n.isConnected(),200);break}catch{}}:n[a]})}async function runWithTimeout(r,e){return new Promise((t,s)=>{setTimeout(s,e),r.then(t)})}function exposeAPI(r,e,t){const{setReady:s,setFailed:n,exposedApi:o}=prepareForExpose(r,e);let i;if(t)if("addEventListener"in t)i=t;else if("postMessage"in t)i=nodeEndpoint(t);else if("send"in t&&"addListener"in t)i=nodeProcessEndpoint(t);else throw new Error("exposeAPI: targetWorker does not look like a Worker, MessagePort, or Process");else i=typeof window<"u"?windowEndpoint(self.parent):void 0;return expose(o,i),[s,n,o]}async function exposeSyncAPI(r,e){const{setReady:t,setFailed:s,exposedApi:n}=prepareForExpose(r),o=await NodeSABSyncReceiveMessageTransport.create(),i=nodeEndpoint(e);return exposeSync(n,i,o),[t,s,n]}function prepareForExpose(r,e){setupTransferHandlers();const t=Promise.resolve();let s,n;const o=new Promise((l,c)=>{s=l,n=c}),i=proxyClone(r),a=new Proxy(i,{get:(l,c)=>c==="isConnected"?()=>t:c==="isReady"?()=>o:c in l?l[c]:e==null?void 0:e[c]});return{setReady:s,setFailed:n,exposedApi:a}}let isTransferHandlersSetup=!1;function setupTransferHandlers(){if(isTransferHandlersSetup)return;isTransferHandlersSetup=!0,transferHandlers.set("EVENT",{canHandle:t=>t instanceof CustomEvent,serialize:t=>[{detail:t.detail},[]],deserialize:t=>t}),transferHandlers.set("FUNCTION",{canHandle:t=>typeof t=="function",serialize(t){const{port1:s,port2:n}=new MessageChannel;return expose(t,s),[n,[n]]},deserialize(t){return t.start(),wrap(t)}}),transferHandlers.set("MESSAGE_PORT",{canHandle:t=>t instanceof MessagePort,serialize(t){return[t,[t]]},deserialize(t){return t}}),transferHandlers.set("PHPResponse",{canHandle:t=>typeof t=="object"&&t!==null&&"headers"in t&&"bytes"in t&&"errors"in t&&"exitCode"in t&&"httpStatusCode"in t,serialize(t){const s=t.toRawData(),n=[];return s.bytes.buffer.byteLength>0&&n.push(s.bytes.buffer),[s,n]},deserialize(t){return PHPResponse.fromRawData(t)}});const r=transferHandlers.get("throw"),e=r==null?void 0:r.serialize;r.serialize=({value:t})=>{const s=e({value:t});return t.response&&(s[0].value.response=t.response),t.source&&(s[0].value.source=t.source),s},transferHandlers.set("StreamedPHPResponse",{canHandle:t=>t instanceof StreamedPHPResponse,serialize(t){const s=supportsTransferableStreams(),n=promiseToPort(t.exitCode),o=t.getHeadersStream();if(s)return[{__type:"StreamedPHPResponse",headers:o,stdout:t.stdout,stderr:t.stderr,exitCodePort:n},[o,t.stdout,t.stderr,n]];const i=streamToPort(o),a=streamToPort(t.stdout),l=streamToPort(t.stderr);return[{__type:"StreamedPHPResponse",headersPort:i,stdoutPort:a,stderrPort:l,exitCodePort:n},[i,a,l,n]]},deserialize(t){if(t.headers&&t.stdout&&t.stderr){const a=portToPromise(t.exitCodePort);return new StreamedPHPResponse(t.headers,t.stdout,t.stderr,a)}const s=portToStream(t.headersPort),n=portToStream(t.stdoutPort),o=portToStream(t.stderrPort),i=portToPromise(t.exitCodePort);return new StreamedPHPResponse(s,n,o,i)}})}let _cachedSupportsTransferableStreams;function supportsTransferableStreams(){if(typeof ReadableStream>"u"&&(_cachedSupportsTransferableStreams=!1),_cachedSupportsTransferableStreams===void 0)try{const{port1:r}=new MessageChannel,e=new ReadableStream;r.postMessage(e,[e]);try{r.close()}catch{}_cachedSupportsTransferableStreams=!0}catch{_cachedSupportsTransferableStreams=!1}return _cachedSupportsTransferableStreams}function streamToPort(r){const{port1:e,port2:t}=new MessageChannel;return(async()=>{const s=r.getReader();try{for(;;){const{done:n,value:o}=await s.read();if(n){try{e.postMessage({t:"close"})}catch{}try{e.close()}catch{}break}if(o){const i=o.byteOffset===0&&o.byteLength===o.buffer.byteLength?o:o.slice(),a=i.buffer;try{e.postMessage({t:"chunk",b:a},[a])}catch{e.postMessage({t:"chunk",b:i.buffer.slice(0)})}}}}catch(n){try{e.postMessage({t:"error",m:(n==null?void 0:n.message)||String(n)})}catch{}}finally{try{e.close()}catch{}}})(),t}function portToStream(r){return new ReadableStream({start(e){const t=n=>{const o=n.data;if(o)switch(o.t){case"chunk":try{e.enqueue(new Uint8Array(o.b))}catch{s()}break;case"close":safeStreamClose(e),s();break;case"error":safeStreamError(e,new Error(o.m||"Stream error")),s();break}},s=()=>{var n;try{(n=r.removeEventListener)==null||n.call(r,"message",t)}catch{}try{r.onmessage=null}catch{}try{r.close()}catch{}};r.addEventListener?r.addEventListener("message",t):r.on?r.on("message",n=>t({data:n})):r.onmessage=t,typeof r.start=="function"&&r.start()},cancel(){try{r.close()}catch{}}})}function promiseToPort(r){const{port1:e,port2:t}=new MessageChannel;return r.then(s=>{try{e.postMessage({t:"resolve",v:s})}catch{}}).catch(s=>{try{e.postMessage({t:"reject",m:(s==null?void 0:s.message)||String(s)})}catch{}}).finally(()=>{try{e.close()}catch{}}),t}function portToPromise(r){return new Promise((e,t)=>{const s=o=>{const i=o.data;i&&(i.t==="resolve"?(n(),e(i.v)):i.t==="reject"&&(n(),t(new Error(i.m||""))))},n=()=>{var o;try{(o=r.removeEventListener)==null||o.call(r,"message",s)}catch{}try{r.onmessage=null}catch{}try{r.close()}catch{}};r.addEventListener?r.addEventListener("message",s):r.on?r.on("message",o=>s({data:o})):r.onmessage=s,typeof r.start=="function"&&r.start()})}const throwTransferHandler=transferHandlers.get("throw"),throwTransferHandlerCustom={canHandle:throwTransferHandler.canHandle,serialize:({value:r})=>{let e;return r instanceof Error?(e={isError:!0,value:serializeError(r)},e.value.originalErrorClassName=r.constructor.name):e={isError:!1,value:r},[e,[]]},deserialize:r=>{if(r.isError){const e=deserializeError(r.value),t=new Error("Comlink method call failed");let s=e;for(;s.cause;)s=s.cause;throw s.cause=t,e}throw r.value}};transferHandlers.set("throw",throwTransferHandlerCustom);function proxyClone(r){return new Proxy(r,{get(e,t){switch(typeof e[t]){case"function":return(...s)=>e[t](...s);case"object":return e[t]===null?e[t]:proxyClone(e[t]);case"undefined":case"number":case"string":return e[t];default:return proxy(e[t])}}})}function safeStreamError(r,e){try{r.error(e)}catch{}}function safeStreamClose(r){try{r.close()}catch{}}const MAX_ADDRESSABLE_FILE_OFFSET=BigInt(Number.MAX_SAFE_INTEGER);class IntervalNode{constructor(e){this.left=null,this.right=null,this.range=e,this.max=e.end}}class FileLockIntervalTree{constructor(){this.root=null}isEmpty(){return this.root===null}insert(e){this.root=this.insertNode(this.root,e)}findOverlapping(e){const t=[];return this.findOverlappingRanges(this.root,e,t),t}remove(e){this.root=this.removeNode(this.root,e)}findLocksForProcess(e){const t=[];return this.findLocksForProcessInNode(this.root,e,t),t}findStrictestExistingLockType(){let e="unlocked";const t=s=>{if(s){if(s.range.type==="exclusive"){e="exclusive";return}s.range.type==="shared"&&(e="shared"),t(s.left),t(s.right)}};return t(this.root),e}insertNode(e,t){return e?(t.start<e.range.start?e.left=this.insertNode(e.left,t):e.right=this.insertNode(e.right,t),e.max=this.bigintMax(e.max,t.end),e):new IntervalNode(t)}bigintMax(...e){return e.reduce((t,s)=>s>t?s:t,e[0])}findOverlappingRanges(e,t,s){e&&(this.doRangesOverlap(e.range,t)&&s.push(e.range),e.left&&e.left.max>=t.start&&this.findOverlappingRanges(e.left,t,s),e.right&&e.range.start<=t.end&&this.findOverlappingRanges(e.right,t,s))}doRangesOverlap(e,t){return e.start<t.end&&t.start<e.end}removeNode(e,t){if(!e)return null;if(this.areRangesEqual(e.range,t)){if(!e.left)return e.right;if(!e.right)return e.left;const s=this.findMin(e.right);e.range=s.range,e.right=this.removeNode(e.right,s.range)}else t.start<e.range.start?e.left=this.removeNode(e.left,t):e.right=this.removeNode(e.right,t);return e.max=e.range.end,e.left&&(e.max=this.bigintMax(e.max,e.left.max)),e.right&&(e.max=this.bigintMax(e.max,e.right.max)),e}findMin(e){let t=e;for(;t.left;)t=t.left;return t}areRangesEqual(e,t){return e.start===t.start&&e.end===t.end&&e.pid===t.pid&&e.fd===t.fd}findLocksForProcessInNode(e,t,s){e&&(e.range.pid===t&&s.push(e.range),this.findLocksForProcessInNode(e.left,t,s),this.findLocksForProcessInNode(e.right,t,s))}}class FileLockManagerInMemory{constructor(){this.locks=new Map}lockWholeFile(e,t){if(this.locks.get(e)===void 0){if(t.type==="unlock")return!0;this.locks.set(e,new FileLock)}const n=this.locks.get(e).lockWholeFile(t);return this.forgetPathIfUnlocked(e),n}lockFileByteRange(e,t){if(!this.locks.has(e)){if(t.type==="unlocked")return!0;this.locks.set(e,new FileLock)}return this.locks.get(e).lockFileByteRange(t)}findFirstConflictingByteRangeLock(e,t){const s=this.locks.get(e);if(s!==void 0)return s.findFirstConflictingByteRangeLock(t)}releaseLocksForProcess(e){for(const[t,s]of this.locks.entries())s.releaseLocksForProcess(e),this.forgetPathIfUnlocked(t)}releaseLocksOnFdClose(e,t,s){const n=this.locks.get(s);n&&(n.releaseLocksOnFdClose(e,t),this.forgetPathIfUnlocked(s))}forgetPathIfUnlocked(e){const t=this.locks.get(e);t&&t.isUnlocked()&&this.locks.delete(e)}}class FileLock{constructor(){this.rangeLocks=new FileLockIntervalTree,this.wholeFileLock={type:"unlocked"}}lockWholeFile(e){if(e.type==="unlock")return this.wholeFileLock.type==="unlocked"||(this.wholeFileLock.type==="exclusive"&&this.wholeFileLock.pid===e.pid&&this.wholeFileLock.fd===e.fd?this.wholeFileLock={type:"unlocked"}:this.wholeFileLock.type==="shared"&&this.wholeFileLock.pidFds.has(e.pid)&&this.wholeFileLock.pidFds.get(e.pid).has(e.fd)&&(this.wholeFileLock.pidFds.get(e.pid).delete(e.fd),this.wholeFileLock.pidFds.get(e.pid).size===0&&this.wholeFileLock.pidFds.delete(e.pid),this.wholeFileLock.pidFds.size===0&&(this.wholeFileLock={type:"unlocked"}))),!0;if(this.isThereAConflictWithRequestedWholeFileLock(e))return!1;if(e.type==="exclusive")return this.wholeFileLock={type:"exclusive",pid:e.pid,fd:e.fd},!0;if(e.type==="shared"){this.wholeFileLock.type!=="shared"&&(this.wholeFileLock={type:"shared",pidFds:new Map});const t=this.wholeFileLock;return t.pidFds.has(e.pid)||t.pidFds.set(e.pid,new Set),t.pidFds.get(e.pid).add(e.fd),!0}throw new Error(`Unexpected wholeFileLock() op: '${e.type}'`)}lockFileByteRange(e){if(e.start===e.end&&(e={...e,end:MAX_ADDRESSABLE_FILE_OFFSET}),e.type==="unlocked"){const i=this.rangeLocks.findOverlapping(e).filter(a=>a.pid===e.pid);for(const a of i)this.rangeLocks.remove(a),a.start<e.start&&this.rangeLocks.insert({...a,end:e.start}),a.end>e.end&&this.rangeLocks.insert({...a,start:e.end});return!0}if(this.isThereAConflictWithRequestedRangeLock(e))return!1;const t=this.rangeLocks.findOverlapping(e).filter(i=>i.pid===e.pid);let s=e.start,n=e.end;for(const i of t)this.rangeLocks.remove(i),i.start<s&&(s=i.start),i.end>n&&(n=i.end);const o={...e,start:s,end:n};return this.rangeLocks.insert(o),!0}findFirstConflictingByteRangeLock(e){e.start===e.end&&(e={...e,end:MAX_ADDRESSABLE_FILE_OFFSET});const s=this.rangeLocks.findOverlapping(e).find(o=>o.pid!==e.pid&&(e.type==="exclusive"||o.type==="exclusive"));if(s)return s;if(this.wholeFileLock.type==="unlocked")return;if(this.wholeFileLock.type==="exclusive"||e.type==="exclusive")return{type:this.wholeFileLock.type,start:0n,end:0n,pid:-1}}releaseLocksForProcess(e){for(const t of this.rangeLocks.findLocksForProcess(e))this.lockFileByteRange({...t,type:"unlocked"});if(this.wholeFileLock.type==="exclusive"&&this.wholeFileLock.pid===e)this.lockWholeFile({pid:e,fd:this.wholeFileLock.fd,type:"unlock"});else if(this.wholeFileLock.type==="shared"&&this.wholeFileLock.pidFds.has(e))for(const t of this.wholeFileLock.pidFds.get(e))this.lockWholeFile({pid:e,fd:t,type:"unlock"})}releaseLocksOnFdClose(e,t){for(const s of this.rangeLocks.findLocksForProcess(e))this.lockFileByteRange({...s,type:"unlocked"});this.lockWholeFile({pid:e,fd:t,type:"unlock"})}isUnlocked(){return this.wholeFileLock.type==="unlocked"&&this.rangeLocks.isEmpty()}isThereAConflictWithRequestedRangeLock(e){return this.findFirstConflictingByteRangeLock(e)!==void 0}isThereAConflictWithRequestedWholeFileLock(e){return e.type==="exclusive"?!!(this.wholeFileLock.type==="exclusive"&&(this.wholeFileLock.fd!==e.fd||this.wholeFileLock.pid!==e.pid)||this.wholeFileLock.type==="shared"&&Array.from(this.wholeFileLock.pidFds).some(([s])=>s!==e.pid)||this.rangeLocks.findOverlapping({start:0n,end:MAX_ADDRESSABLE_FILE_OFFSET}).length>0):e.type==="shared"?this.wholeFileLock.type==="exclusive"&&this.wholeFileLock.pid!==e.pid||this.rangeLocks.findOverlapping({start:0n,end:MAX_ADDRESSABLE_FILE_OFFSET}).filter(n=>n.type==="exclusive").length>0:!1}}class FileLockManagerComposite{constructor({nativeLockManager:e,wasmLockManager:t}){this.nativeLockManager=e,this.wasmLockManager=t}lockWholeFile(e,t){if(t.type!=="unlock"){let s,n;try{if(s=this.nativeLockManager.lockWholeFile(e,t),!s)return!1;n=this.wasmLockManager.lockWholeFile(e,t)}catch(o){logger.logger.error("Unexpected error in lockWholeFile()",o)}finally{s&&!n&&this.nativeLockManager.lockWholeFile(e,{...t,type:"unlock"})}return!!s&&!!n}try{this.wasmLockManager.lockWholeFile(e,t)}catch(s){logger.logger.error("Unexpected error unlocking whole file with in-memory lock manager",s)}try{this.nativeLockManager.lockWholeFile(e,t)}catch(s){logger.logger.error("Unexpected error unlocking whole file with native lock manager",s)}return!0}lockFileByteRange(e,t,s){if(t.type!=="unlocked"){let n,o;try{if(n=this.nativeLockManager.lockFileByteRange(e,t,s),!n)return!1;o=this.wasmLockManager.lockFileByteRange(e,t,s)}catch(i){logger.logger.error("Unexpected error in lockFileByteRange()",i)}finally{n&&!o&&this.nativeLockManager.lockFileByteRange(e,{...t,type:"unlocked"},!1)}return!!n&&!!o}try{this.wasmLockManager.lockFileByteRange(e,t,s)}catch(n){logger.logger.error("Unexpected error unlocking byte range with in-memory lock manager",n)}try{this.nativeLockManager.lockFileByteRange(e,t,s)}catch(n){logger.logger.error("Unexpected error unlocking byte range with native lock manager",n)}return!0}findFirstConflictingByteRangeLock(e,t){try{const s=this.nativeLockManager.findFirstConflictingByteRangeLock(e,t);return s||this.wasmLockManager.findFirstConflictingByteRangeLock(e,t)}catch(s){logger.logger.error("Unexpected error in findFirstConflictingByteRangeLock()",s);return}}releaseLocksForProcess(e){try{this.wasmLockManager.releaseLocksForProcess(e)}catch(t){logger.logger.error("Unexpected error in wasmLockManager.releaseLocksForProcess()",t)}try{this.nativeLockManager.releaseLocksForProcess(e)}catch(t){logger.logger.error("Unexpected error in nativeLockManager.releaseLocksForProcess()",t)}}releaseLocksOnFdClose(e,t,s){try{this.wasmLockManager.releaseLocksOnFdClose(e,t,s)}catch(n){logger.logger.error("Unexpected error in wasmLockManager.releaseLocksOnFdClose()",n)}try{this.nativeLockManager.releaseLocksOnFdClose(e,t,s)}catch(n){logger.logger.error("Unexpected error in nativeLockManager.releaseLocksOnFdClose()",n)}}}function createObjectPoolProxy(r){if(r.length===0)throw new Error("At least one instance is required");const e=[...r],t=[];function s(){const i=e.shift();return i!==void 0?Promise.resolve(i):new Promise(a=>{t.push(a)})}function n(i){const a=t.shift();a?a(i):e.push(i)}function o(i){return s().then(a=>{const l=u=>{const d=u==null?void 0:u.finished;return d&&typeof d.then=="function"?Promise.resolve(d).then(()=>n(a),()=>n(a)):n(a),u};let c;try{c=i(a)}catch(u){throw n(a),u}return c!=null&&typeof c.then=="function"?c.then(u=>l(u),u=>{throw n(a),u}):l(c)})}return new Proxy({},{get(i,a){if(a in i)return i[a];if(a!=="then")return new Proxy(function(){},{apply(l,c,u){return o(d=>d[a](...u))},get(l,c){if(c==="then")return(u,d)=>o(h=>h[a]).then(u,d)}})}})}const maxValueForSigned32BitInteger=2**31-1;class ProcessIdAllocator{constructor(e=1,t=maxValueForSigned32BitInteger){this.claimed=new Set,this.initialId=e,this.maxId=t,this.nextId=e}claim(){const e=this.maxId-this.initialId+1;for(let t=0;t<e;t++)if(this.claimed.has(this.nextId))this.nextId++,this.nextId>this.maxId&&(this.nextId=this.initialId);else return this.claimed.add(this.nextId),this.nextId;throw new Error(`Unable to find free process ID after ${e} tries.`)}release(e){return this.claimed.has(e)?(this.claimed.delete(e),!0):!1}}exports.AllPHPVersions=AllPHPVersions;exports.DEFAULT_BASE_URL=DEFAULT_BASE_URL;exports.FSHelpers=FSHelpers;exports.FileLock=FileLock;exports.FileLockIntervalTree=FileLockIntervalTree;exports.FileLockManagerComposite=FileLockManagerComposite;exports.FileLockManagerInMemory=FileLockManagerInMemory;exports.HttpCookieStore=HttpCookieStore;exports.LEGACY_PHP_INI_CONTENT=LEGACY_PHP_INI_CONTENT;exports.LEGACY_PHP_INI_PATH=LEGACY_PHP_INI_PATH;exports.LatestSupportedPHPVersion=LatestSupportedPHPVersion;exports.LegacyPHPVersions=LegacyPHPVersions;exports.MAX_ADDRESSABLE_FILE_OFFSET=MAX_ADDRESSABLE_FILE_OFFSET;exports.PHP=PHP;exports.PHPExecutionFailureError=PHPExecutionFailureError;exports.PHPProcessManager=PHPProcessManager;exports.PHPRequestHandler=PHPRequestHandler;exports.PHPResponse=PHPResponse;exports.PHPWorker=PHPWorker;exports.PHP_EXTENSIONS_DIR=PHP_EXTENSIONS_DIR;exports.ProcessIdAllocator=ProcessIdAllocator;exports.SinglePHPInstanceManager=SinglePHPInstanceManager;exports.StreamedPHPResponse=StreamedPHPResponse;exports.SupportedPHPVersions=SupportedPHPVersions;exports.SupportedPHPVersionsList=SupportedPHPVersionsList;exports.UnhandledRejectionsTarget=UnhandledRejectionsTarget;exports.__private__dont__use=__private__dont__use;exports.applyRewriteRules=applyRewriteRules;exports.consumeAPI=consumeAPI;exports.consumeAPISync=consumeAPISync;exports.createLegacyPhpIniPreRunStep=createLegacyPhpIniPreRunStep;exports.createObjectPoolProxy=createObjectPoolProxy;exports.ensurePathPrefix=ensurePathPrefix;exports.exposeAPI=exposeAPI;exports.exposeSyncAPI=exposeSyncAPI;exports.getPhpIniEntries=getPhpIniEntries;exports.inferMimeType=inferMimeType;exports.installPHPExtensionFilesSync=installPHPExtensionFilesSync;exports.isExitCode=isExitCode;exports.isLegacyPHPVersion=isLegacyPHPVersion;exports.isPathToSharedFS=isPathToSharedFS;exports.iterateFiles=iteratePhpFiles;exports.loadPHPRuntime=loadPHPRuntime;exports.popLoadedRuntime=popLoadedRuntime;exports.portToStream=portToStream;exports.prettyPrintFullStackTrace=prettyPrintFullStackTrace;exports.printDebugDetails=printDebugDetails;exports.printResponseDebugDetails=printResponseDebugDetails;exports.proxyFileSystem=proxyFileSystem;exports.releaseApiProxy=releaseApiProxy;exports.removePathPrefix=removePathPrefix;exports.resolvePHPExtension=resolvePHPExtension;exports.rotatePHPRuntime=rotatePHPRuntime;exports.sandboxedSpawnHandlerFactory=sandboxedSpawnHandlerFactory;exports.setPhpIniEntries=setPhpIniEntries;exports.streamToPort=streamToPort;exports.toRelativeUrl=toRelativeUrl;exports.withPHPIniValues=withPHPIniValues;exports.withResolvedPHPExtensions=withResolvedPHPExtensions;exports.writeFiles=writeFiles;exports.writeFilesStreamToPhp=writeFilesStreamToPhp;
104
+ */const WireValueType={RAW:"RAW",HANDLER:"HANDLER"},MessageType={GET:"GET",SET:"SET",APPLY:"APPLY",CONSTRUCT:"CONSTRUCT",ENDPOINT:"ENDPOINT",RELEASE:"RELEASE"},isObject=r=>typeof r=="object"&&r!==null||typeof r=="function",proxyTransferHandler={canHandle:r=>isObject(r)&&r[proxyMarker],serialize(r){const{port1:e,port2:t}=new MessageChannel;return expose(r,e),[t,[t]]},deserialize(r){return r.start(),wrap(r)}},throwTransferHandler$1={canHandle:r=>isObject(r)&&throwMarker in r,serialize({value:r}){let e;return r instanceof Error?e={isError:!0,value:{message:r.message,name:r.name,stack:r.stack}}:e={isError:!1,value:r},[e,[]]},deserialize(r){throw r.isError?Object.assign(new Error(r.value.message),r.value):r.value}},transferHandlers=new Map([["proxy",proxyTransferHandler],["throw",throwTransferHandler$1]]);function isAllowedOrigin(r,e){for(const t of r)if(e===t||t==="*"||t instanceof RegExp&&t.test(e))return!0;return!1}function expose(r,e=globalThis,t=["*"],s){e.addEventListener("message",function n(o){if(!o||!o.data)return;if(!isAllowedOrigin(t,o.origin)){console.warn(`Invalid origin '${o.origin}' for comlink proxy`);return}const{id:i,type:a,path:l}={path:[],...o.data},c=(o.data.argumentList||[]).map(fromWireValue);let u;try{const d=l.slice(0,-1).reduce((P,S)=>P[S],r),h=l.reduce((P,S)=>P[S],r);switch(a){case MessageType.GET:u=h;break;case MessageType.SET:d[l.slice(-1)[0]]=fromWireValue(o.data.value),u=!0;break;case MessageType.APPLY:u=h.apply(d,c);break;case MessageType.CONSTRUCT:{const P=new h(...c);u=proxy(P)}break;case MessageType.ENDPOINT:{const{port1:P,port2:S}=new MessageChannel;expose(r,S),u=transfer(P,[P])}break;case MessageType.RELEASE:u=void 0;break;default:return}}catch(d){u={value:d,[throwMarker]:0}}Promise.resolve(u).catch(d=>({value:d,[throwMarker]:0})).then(d=>{const[h,P]=toWireValue(d);e.postMessage({...h,id:i},P),a===MessageType.RELEASE&&(e.removeEventListener("message",n),closeEndPoint(e),finalizer in r&&typeof r[finalizer]=="function"&&r[finalizer]())}).catch(()=>{const[d,h]=toWireValue({value:new TypeError("Unserializable return value"),[throwMarker]:0});e.postMessage({...d,id:i},h)}).finally(()=>{s==null||s(o)})}),e.start&&e.start()}function isMessagePort(r){return r.constructor.name==="MessagePort"}function closeEndPoint(r){isMessagePort(r)&&r.close()}function wrap(r,e){const t=new Map;return r.addEventListener("message",function(n){const{data:o}=n;if(!o||!o.id)return;const i=t.get(o.id);if(i)try{i(o)}finally{t.delete(o.id)}}),createProxy(r,t,[],e)}function throwIfProxyReleased(r){if(r)throw new Error("Proxy has been released and is not useable")}function releaseEndpoint(r){return requestResponseMessage(r,new Map,{type:MessageType.RELEASE}).then(()=>{closeEndPoint(r)})}const proxyCounter=new WeakMap,proxyFinalizers="FinalizationRegistry"in globalThis&&new FinalizationRegistry(r=>{const e=(proxyCounter.get(r)||0)-1;proxyCounter.set(r,e),e===0&&releaseEndpoint(r)});function registerProxy(r,e){const t=(proxyCounter.get(e)||0)+1;proxyCounter.set(e,t),proxyFinalizers&&proxyFinalizers.register(r,e,r)}function unregisterProxy(r){proxyFinalizers&&proxyFinalizers.unregister(r)}function createProxy(r,e,t=[],s=function(){}){let n=!1;const o=new Proxy(s,{get(i,a){if(throwIfProxyReleased(n),a===releaseProxy)return()=>{unregisterProxy(o),releaseEndpoint(r),e.clear(),n=!0};if(a==="then"){if(t.length===0)return{then:()=>o};const l=requestResponseMessage(r,e,{type:MessageType.GET,path:t.map(c=>c.toString())}).then(fromWireValue);return l.then.bind(l)}return createProxy(r,e,[...t,a])},set(i,a,l){throwIfProxyReleased(n);const[c,u]=toWireValue(l);return requestResponseMessage(r,e,{type:MessageType.SET,path:[...t,a].map(d=>d.toString()),value:c},u).then(fromWireValue)},apply(i,a,l){throwIfProxyReleased(n);const c=t[t.length-1];if(c===createEndpoint)return requestResponseMessage(r,e,{type:MessageType.ENDPOINT}).then(fromWireValue);if(c==="bind")return createProxy(r,e,t.slice(0,-1));const[u,d]=processArguments(l);return requestResponseMessage(r,e,{type:MessageType.APPLY,path:t.map(h=>h.toString()),argumentList:u},d).then(fromWireValue)},construct(i,a){throwIfProxyReleased(n);const[l,c]=processArguments(a);return requestResponseMessage(r,e,{type:MessageType.CONSTRUCT,path:t.map(u=>u.toString()),argumentList:l},c).then(fromWireValue)}});return registerProxy(o,r),o}function myFlat(r){return Array.prototype.concat.apply([],r)}function processArguments(r){const e=r.map(toWireValue);return[e.map(t=>t[0]),myFlat(e.map(t=>t[1]))]}const transferCache=new WeakMap;function transfer(r,e){return transferCache.set(r,e),r}function proxy(r){return Object.assign(r,{[proxyMarker]:!0})}function windowEndpoint(r,e=globalThis,t="*"){return{postMessage:(s,n)=>r.postMessage(s,t,n),addEventListener:e.addEventListener.bind(e),removeEventListener:e.removeEventListener.bind(e)}}function toWireValue(r){for(const[e,t]of transferHandlers)if(t.canHandle(r)){const[s,n]=t.serialize(r);return[{type:WireValueType.HANDLER,name:e,value:s},n]}return[{type:WireValueType.RAW,value:r},transferCache.get(r)||[]]}function fromWireValue(r){switch(r.type){case WireValueType.HANDLER:return transferHandlers.get(r.name).deserialize(r.value);case WireValueType.RAW:return r.value}}function requestResponseMessage(r,e,t,s){return new Promise(n=>{const o=generateUUID();e.set(o,n),r.start&&r.start(),r.postMessage({id:o,...t},s)})}function generateUUID(){return new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-")}function nodeEndpoint(r){const e=new WeakMap;return{postMessage:r.postMessage.bind(r),addEventListener:(t,s)=>{const n=o=>{"handleEvent"in s?s.handleEvent({data:o}):s({data:o})};r.on("message",n),e.set(s,n)},removeEventListener:(t,s)=>{const n=e.get(s);n&&(r.off("message",n),e.delete(s))},start:r.start&&r.start.bind(r)}}const proxyByListener=new WeakMap;function nodeProcessEndpoint(r){const e=r||process;if(typeof e.send!="function")throw new Error("IPC channel is not available. Did you forget to fork the process?");const t=e;return{postMessage(s,n){var o;if(n&&n.length>0)throw new Error("Transferable objects are not supported for nodeProcessEndpoint");(o=t.send)==null||o.call(t,s)},addEventListener(s,n){const o=typeof n=="function"?i=>n({data:i}):i=>n.handleEvent({data:i});proxyByListener.set(n,o),t.addListener(s,o)},removeEventListener(s,n){const o=proxyByListener.get(n);o&&(proxyByListener.delete(n),t.removeListener(s,o))},start(){}}}const list=[Error,EvalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError,AggregateError,globalThis.DOMException,globalThis.AssertionError,globalThis.SystemError].filter(Boolean).map(r=>[r.name,r]),errorConstructors=new Map(list);class NonError extends Error{constructor(e){super(NonError._prepareSuperMessage(e)),this.name="NonError"}static _prepareSuperMessage(e){try{return JSON.stringify(e)}catch{return String(e)}}}const errorProperties=[{property:"name",enumerable:!1},{property:"message",enumerable:!1},{property:"stack",enumerable:!1},{property:"code",enumerable:!0},{property:"cause",enumerable:!1},{property:"errors",enumerable:!1}],toJsonWasCalled=new WeakSet,toJSON=r=>{toJsonWasCalled.add(r);const e=r.toJSON();return toJsonWasCalled.delete(r),e},newError=r=>{const e=errorConstructors.get(r)??Error;return e===AggregateError?new e([]):new e},destroyCircular=({from:r,seen:e,to:t,forceEnumerable:s,maxDepth:n,depth:o,useToJSON:i,serialize:a})=>{if(t||(Array.isArray(r)?t=[]:!a&&isErrorLike(r)?t=newError(r.name):t={}),e.push(r),o>=n)return t;if(i&&typeof r.toJSON=="function"&&!toJsonWasCalled.has(r))return toJSON(r);const l=c=>destroyCircular({from:c,seen:[...e],forceEnumerable:s,maxDepth:n,depth:o,useToJSON:i,serialize:a});for(const[c,u]of Object.entries(r)){if(u&&u instanceof Uint8Array&&u.constructor.name==="Buffer"){t[c]="[object Buffer]";continue}if(u!==null&&typeof u=="object"&&typeof u.pipe=="function"){t[c]="[object Stream]";continue}if(typeof u!="function"){if(!u||typeof u!="object"){try{t[c]=u}catch{}continue}if(!e.includes(r[c])){o++,t[c]=l(r[c]);continue}t[c]="[Circular]"}}if(a||t instanceof Error)for(const{property:c,enumerable:u}of errorProperties)r[c]!==void 0&&r[c]!==null&&Object.defineProperty(t,c,{value:isErrorLike(r[c])||Array.isArray(r[c])?l(r[c]):r[c],enumerable:s?!0:u,configurable:!0,writable:!0});return t};function serializeError(r,e={}){const{maxDepth:t=Number.POSITIVE_INFINITY,useToJSON:s=!0}=e;return typeof r=="object"&&r!==null?destroyCircular({from:r,seen:[],forceEnumerable:!0,maxDepth:t,depth:0,useToJSON:s,serialize:!0}):typeof r=="function"?`[Function: ${r.name||"anonymous"}]`:r}function deserializeError(r,e={}){const{maxDepth:t=Number.POSITIVE_INFINITY}=e;return r instanceof Error?r:isMinimumViableSerializedError(r)?destroyCircular({from:r,seen:[],to:newError(r.name),maxDepth:t,depth:0,serialize:!1}):new NonError(r)}function isErrorLike(r){return!!r&&typeof r=="object"&&typeof r.name=="string"&&typeof r.message=="string"&&typeof r.stack=="string"}function isMinimumViableSerializedError(r){return!!r&&typeof r=="object"&&typeof r.message=="string"&&!Array.isArray(r)}const releaseApiProxy=releaseProxy;async function consumeAPISync(r){setupTransferHandlers();const e=await NodeSABSyncReceiveMessageTransport.create();return wrapSync(r,e)}function consumeAPI(r,e=void 0){setupTransferHandlers();let t;if(typeof process<"u"&&typeof process.versions<"u"&&typeof process.versions.node<"u")if("postMessage"in r)t=nodeEndpoint(r);else if("send"in r&&"addListener"in r)t=nodeProcessEndpoint(r);else throw new Error("consumeAPI: remote does not look like a Worker, MessagePort, or Process");else t=r instanceof Worker?r:windowEndpoint(r,e);const n=wrap(t),o=proxyClone(n);return new Proxy(o,{get:(i,a)=>a==="isConnected"?async()=>{for(;;)try{await runWithTimeout(n.isConnected(),200);break}catch{}}:n[a]})}async function runWithTimeout(r,e){return new Promise((t,s)=>{setTimeout(s,e),r.then(t)})}function exposeAPI(r,e,t){const{setReady:s,setFailed:n,exposedApi:o}=prepareForExpose(r,e);let i;if(t)if("addEventListener"in t)i=t;else if("postMessage"in t)i=nodeEndpoint(t);else if("send"in t&&"addListener"in t)i=nodeProcessEndpoint(t);else throw new Error("exposeAPI: targetWorker does not look like a Worker, MessagePort, or Process");else i=typeof window<"u"?windowEndpoint(self.parent):void 0;return expose(o,i),[s,n,o]}async function exposeSyncAPI(r,e){const{setReady:t,setFailed:s,exposedApi:n}=prepareForExpose(r),o=await NodeSABSyncReceiveMessageTransport.create(),i=nodeEndpoint(e);return exposeSync(n,i,o),[t,s,n]}function prepareForExpose(r,e){setupTransferHandlers();const t=Promise.resolve();let s,n;const o=new Promise((l,c)=>{s=l,n=c}),i=proxyClone(r),a=new Proxy(i,{get:(l,c)=>c==="isConnected"?()=>t:c==="isReady"?()=>o:c in l?l[c]:e==null?void 0:e[c]});return{setReady:s,setFailed:n,exposedApi:a}}let isTransferHandlersSetup=!1;function setupTransferHandlers(){if(isTransferHandlersSetup)return;isTransferHandlersSetup=!0,transferHandlers.set("EVENT",{canHandle:t=>t instanceof CustomEvent,serialize:t=>[{detail:t.detail},[]],deserialize:t=>t}),transferHandlers.set("FUNCTION",{canHandle:t=>typeof t=="function",serialize(t){const{port1:s,port2:n}=new MessageChannel;return expose(t,s),[n,[n]]},deserialize(t){return t.start(),wrap(t)}}),transferHandlers.set("MESSAGE_PORT",{canHandle:t=>t instanceof MessagePort,serialize(t){return[t,[t]]},deserialize(t){return t}}),transferHandlers.set("PHPResponse",{canHandle:t=>typeof t=="object"&&t!==null&&"headers"in t&&"bytes"in t&&"errors"in t&&"exitCode"in t&&"httpStatusCode"in t,serialize(t){const s=t.toRawData(),n=[];return s.bytes.buffer.byteLength>0&&n.push(s.bytes.buffer),[s,n]},deserialize(t){return PHPResponse.fromRawData(t)}});const r=transferHandlers.get("throw"),e=r==null?void 0:r.serialize;r.serialize=({value:t})=>{const s=e({value:t});return t.response&&(s[0].value.response=t.response),t.source&&(s[0].value.source=t.source),s},transferHandlers.set("StreamedPHPResponse",{canHandle:t=>t instanceof StreamedPHPResponse,serialize(t){const s=supportsTransferableStreams(),n=promiseToPort(t.exitCode),o=t.getHeadersStream();if(s)return[{__type:"StreamedPHPResponse",headers:o,stdout:t.stdout,stderr:t.stderr,exitCodePort:n},[o,t.stdout,t.stderr,n]];const i=streamToPort(o),a=streamToPort(t.stdout),l=streamToPort(t.stderr);return[{__type:"StreamedPHPResponse",headersPort:i,stdoutPort:a,stderrPort:l,exitCodePort:n},[i,a,l,n]]},deserialize(t){if(t.headers&&t.stdout&&t.stderr){const a=portToPromise(t.exitCodePort);return new StreamedPHPResponse(t.headers,t.stdout,t.stderr,a)}const s=portToStream(t.headersPort),n=portToStream(t.stdoutPort),o=portToStream(t.stderrPort),i=portToPromise(t.exitCodePort);return new StreamedPHPResponse(s,n,o,i)}})}let _cachedSupportsTransferableStreams;function supportsTransferableStreams(){if(typeof ReadableStream>"u"&&(_cachedSupportsTransferableStreams=!1),_cachedSupportsTransferableStreams===void 0)try{const{port1:r}=new MessageChannel,e=new ReadableStream;r.postMessage(e,[e]);try{r.close()}catch{}_cachedSupportsTransferableStreams=!0}catch{_cachedSupportsTransferableStreams=!1}return _cachedSupportsTransferableStreams}function streamToPort(r){const{port1:e,port2:t}=new MessageChannel;return(async()=>{const s=r.getReader();try{for(;;){const{done:n,value:o}=await s.read();if(n){try{e.postMessage({t:"close"})}catch{}try{e.close()}catch{}break}if(o){const i=o.byteOffset===0&&o.byteLength===o.buffer.byteLength?o:o.slice(),a=i.buffer;try{e.postMessage({t:"chunk",b:a},[a])}catch{e.postMessage({t:"chunk",b:i.buffer.slice(0)})}}}}catch(n){try{e.postMessage({t:"error",m:(n==null?void 0:n.message)||String(n)})}catch{}}finally{try{e.close()}catch{}}})(),t}function portToStream(r){return new ReadableStream({start(e){const t=n=>{const o=n.data;if(o)switch(o.t){case"chunk":try{e.enqueue(new Uint8Array(o.b))}catch{s()}break;case"close":safeStreamClose(e),s();break;case"error":safeStreamError(e,new Error(o.m||"Stream error")),s();break}},s=()=>{var n;try{(n=r.removeEventListener)==null||n.call(r,"message",t)}catch{}try{r.onmessage=null}catch{}try{r.close()}catch{}};r.addEventListener?r.addEventListener("message",t):r.on?r.on("message",n=>t({data:n})):r.onmessage=t,typeof r.start=="function"&&r.start()},cancel(){try{r.close()}catch{}}})}function promiseToPort(r){const{port1:e,port2:t}=new MessageChannel;return r.then(s=>{try{e.postMessage({t:"resolve",v:s})}catch{}}).catch(s=>{try{e.postMessage({t:"reject",m:(s==null?void 0:s.message)||String(s)})}catch{}}).finally(()=>{try{e.close()}catch{}}),t}function portToPromise(r){return new Promise((e,t)=>{const s=o=>{const i=o.data;i&&(i.t==="resolve"?(n(),e(i.v)):i.t==="reject"&&(n(),t(new Error(i.m||""))))},n=()=>{var o;try{(o=r.removeEventListener)==null||o.call(r,"message",s)}catch{}try{r.onmessage=null}catch{}try{r.close()}catch{}};r.addEventListener?r.addEventListener("message",s):r.on?r.on("message",o=>s({data:o})):r.onmessage=s,typeof r.start=="function"&&r.start()})}const throwTransferHandler=transferHandlers.get("throw"),throwTransferHandlerCustom={canHandle:throwTransferHandler.canHandle,serialize:({value:r})=>{let e;return r instanceof Error?(e={isError:!0,value:serializeError(r)},e.value.originalErrorClassName=r.constructor.name):e={isError:!1,value:r},[e,[]]},deserialize:r=>{if(r.isError){const e=deserializeError(r.value),t=new Error("Comlink method call failed");let s=e;for(;s.cause;)s=s.cause;throw s.cause=t,e}throw r.value}};transferHandlers.set("throw",throwTransferHandlerCustom);function proxyClone(r){return new Proxy(r,{get(e,t){switch(typeof e[t]){case"function":return(...s)=>e[t](...s);case"object":return e[t]===null?e[t]:proxyClone(e[t]);case"undefined":case"number":case"string":return e[t];default:return proxy(e[t])}}})}function safeStreamError(r,e){try{r.error(e)}catch{}}function safeStreamClose(r){try{r.close()}catch{}}const MAX_ADDRESSABLE_FILE_OFFSET=BigInt(Number.MAX_SAFE_INTEGER);class IntervalNode{constructor(e){this.left=null,this.right=null,this.range=e,this.max=e.end}}class FileLockIntervalTree{constructor(){this.root=null}isEmpty(){return this.root===null}insert(e){this.root=this.insertNode(this.root,e)}findOverlapping(e){const t=[];return this.findOverlappingRanges(this.root,e,t),t}remove(e){this.root=this.removeNode(this.root,e)}findLocksForProcess(e){const t=[];return this.findLocksForProcessInNode(this.root,e,t),t}findStrictestExistingLockType(){let e="unlocked";const t=s=>{if(s){if(s.range.type==="exclusive"){e="exclusive";return}s.range.type==="shared"&&(e="shared"),t(s.left),t(s.right)}};return t(this.root),e}insertNode(e,t){return e?(t.start<e.range.start?e.left=this.insertNode(e.left,t):e.right=this.insertNode(e.right,t),e.max=this.bigintMax(e.max,t.end),e):new IntervalNode(t)}bigintMax(...e){return e.reduce((t,s)=>s>t?s:t,e[0])}findOverlappingRanges(e,t,s){e&&(this.doRangesOverlap(e.range,t)&&s.push(e.range),e.left&&e.left.max>=t.start&&this.findOverlappingRanges(e.left,t,s),e.right&&e.range.start<=t.end&&this.findOverlappingRanges(e.right,t,s))}doRangesOverlap(e,t){return e.start<t.end&&t.start<e.end}removeNode(e,t){if(!e)return null;if(this.areRangesEqual(e.range,t)){if(!e.left)return e.right;if(!e.right)return e.left;const s=this.findMin(e.right);e.range=s.range,e.right=this.removeNode(e.right,s.range)}else t.start<e.range.start?e.left=this.removeNode(e.left,t):e.right=this.removeNode(e.right,t);return e.max=e.range.end,e.left&&(e.max=this.bigintMax(e.max,e.left.max)),e.right&&(e.max=this.bigintMax(e.max,e.right.max)),e}findMin(e){let t=e;for(;t.left;)t=t.left;return t}areRangesEqual(e,t){return e.start===t.start&&e.end===t.end&&e.pid===t.pid&&e.fd===t.fd}findLocksForProcessInNode(e,t,s){e&&(e.range.pid===t&&s.push(e.range),this.findLocksForProcessInNode(e.left,t,s),this.findLocksForProcessInNode(e.right,t,s))}}class FileLockManagerInMemory{constructor(){this.locks=new Map}lockWholeFile(e,t){if(this.locks.get(e)===void 0){if(t.type==="unlock")return!0;this.locks.set(e,new FileLock)}const n=this.locks.get(e).lockWholeFile(t);return this.forgetPathIfUnlocked(e),n}lockFileByteRange(e,t){if(!this.locks.has(e)){if(t.type==="unlocked")return!0;this.locks.set(e,new FileLock)}return this.locks.get(e).lockFileByteRange(t)}findFirstConflictingByteRangeLock(e,t){const s=this.locks.get(e);if(s!==void 0)return s.findFirstConflictingByteRangeLock(t)}releaseLocksForProcess(e){for(const[t,s]of this.locks.entries())s.releaseLocksForProcess(e),this.forgetPathIfUnlocked(t)}releaseLocksOnFdClose(e,t,s){const n=this.locks.get(s);n&&(n.releaseLocksOnFdClose(e,t),this.forgetPathIfUnlocked(s))}forgetPathIfUnlocked(e){const t=this.locks.get(e);t&&t.isUnlocked()&&this.locks.delete(e)}}class FileLock{constructor(){this.rangeLocks=new FileLockIntervalTree,this.wholeFileLock={type:"unlocked"}}lockWholeFile(e){if(e.type==="unlock")return this.wholeFileLock.type==="unlocked"||(this.wholeFileLock.type==="exclusive"&&this.wholeFileLock.pid===e.pid&&this.wholeFileLock.fd===e.fd?this.wholeFileLock={type:"unlocked"}:this.wholeFileLock.type==="shared"&&this.wholeFileLock.pidFds.has(e.pid)&&this.wholeFileLock.pidFds.get(e.pid).has(e.fd)&&(this.wholeFileLock.pidFds.get(e.pid).delete(e.fd),this.wholeFileLock.pidFds.get(e.pid).size===0&&this.wholeFileLock.pidFds.delete(e.pid),this.wholeFileLock.pidFds.size===0&&(this.wholeFileLock={type:"unlocked"}))),!0;if(this.isThereAConflictWithRequestedWholeFileLock(e))return!1;if(e.type==="exclusive")return this.wholeFileLock={type:"exclusive",pid:e.pid,fd:e.fd},!0;if(e.type==="shared"){this.wholeFileLock.type!=="shared"&&(this.wholeFileLock={type:"shared",pidFds:new Map});const t=this.wholeFileLock;return t.pidFds.has(e.pid)||t.pidFds.set(e.pid,new Set),t.pidFds.get(e.pid).add(e.fd),!0}throw new Error(`Unexpected wholeFileLock() op: '${e.type}'`)}lockFileByteRange(e){if(e.start===e.end&&(e={...e,end:MAX_ADDRESSABLE_FILE_OFFSET}),e.type==="unlocked"){const i=this.rangeLocks.findOverlapping(e).filter(a=>a.pid===e.pid);for(const a of i)this.rangeLocks.remove(a),a.start<e.start&&this.rangeLocks.insert({...a,end:e.start}),a.end>e.end&&this.rangeLocks.insert({...a,start:e.end});return!0}if(this.isThereAConflictWithRequestedRangeLock(e))return!1;const t=this.rangeLocks.findOverlapping(e).filter(i=>i.pid===e.pid);let s=e.start,n=e.end;for(const i of t)this.rangeLocks.remove(i),i.start<s&&(s=i.start),i.end>n&&(n=i.end);const o={...e,start:s,end:n};return this.rangeLocks.insert(o),!0}findFirstConflictingByteRangeLock(e){e.start===e.end&&(e={...e,end:MAX_ADDRESSABLE_FILE_OFFSET});const s=this.rangeLocks.findOverlapping(e).find(o=>o.pid!==e.pid&&(e.type==="exclusive"||o.type==="exclusive"));if(s)return s;if(this.wholeFileLock.type==="unlocked")return;if(this.wholeFileLock.type==="exclusive"||e.type==="exclusive")return{type:this.wholeFileLock.type,start:0n,end:0n,pid:-1}}releaseLocksForProcess(e){for(const t of this.rangeLocks.findLocksForProcess(e))this.lockFileByteRange({...t,type:"unlocked"});if(this.wholeFileLock.type==="exclusive"&&this.wholeFileLock.pid===e)this.lockWholeFile({pid:e,fd:this.wholeFileLock.fd,type:"unlock"});else if(this.wholeFileLock.type==="shared"&&this.wholeFileLock.pidFds.has(e))for(const t of this.wholeFileLock.pidFds.get(e))this.lockWholeFile({pid:e,fd:t,type:"unlock"})}releaseLocksOnFdClose(e,t){for(const s of this.rangeLocks.findLocksForProcess(e))this.lockFileByteRange({...s,type:"unlocked"});this.lockWholeFile({pid:e,fd:t,type:"unlock"})}isUnlocked(){return this.wholeFileLock.type==="unlocked"&&this.rangeLocks.isEmpty()}isThereAConflictWithRequestedRangeLock(e){return this.findFirstConflictingByteRangeLock(e)!==void 0}isThereAConflictWithRequestedWholeFileLock(e){return e.type==="exclusive"?!!(this.wholeFileLock.type==="exclusive"&&(this.wholeFileLock.fd!==e.fd||this.wholeFileLock.pid!==e.pid)||this.wholeFileLock.type==="shared"&&Array.from(this.wholeFileLock.pidFds).some(([s])=>s!==e.pid)||this.rangeLocks.findOverlapping({start:0n,end:MAX_ADDRESSABLE_FILE_OFFSET}).length>0):e.type==="shared"?this.wholeFileLock.type==="exclusive"&&this.wholeFileLock.pid!==e.pid||this.rangeLocks.findOverlapping({start:0n,end:MAX_ADDRESSABLE_FILE_OFFSET}).filter(n=>n.type==="exclusive").length>0:!1}}class FileLockManagerComposite{constructor({nativeLockManager:e,wasmLockManager:t}){this.nativeLockManager=e,this.wasmLockManager=t}lockWholeFile(e,t){if(t.type!=="unlock"){let s,n;try{if(s=this.nativeLockManager.lockWholeFile(e,t),!s)return!1;n=this.wasmLockManager.lockWholeFile(e,t)}catch(o){logger.logger.error("Unexpected error in lockWholeFile()",o)}finally{s&&!n&&this.nativeLockManager.lockWholeFile(e,{...t,type:"unlock"})}return!!s&&!!n}try{this.wasmLockManager.lockWholeFile(e,t)}catch(s){logger.logger.error("Unexpected error unlocking whole file with in-memory lock manager",s)}try{this.nativeLockManager.lockWholeFile(e,t)}catch(s){logger.logger.error("Unexpected error unlocking whole file with native lock manager",s)}return!0}lockFileByteRange(e,t,s){if(t.type!=="unlocked"){let n,o;try{if(n=this.nativeLockManager.lockFileByteRange(e,t,s),!n)return!1;o=this.wasmLockManager.lockFileByteRange(e,t,s)}catch(i){logger.logger.error("Unexpected error in lockFileByteRange()",i)}finally{n&&!o&&this.nativeLockManager.lockFileByteRange(e,{...t,type:"unlocked"},!1)}return!!n&&!!o}try{this.wasmLockManager.lockFileByteRange(e,t,s)}catch(n){logger.logger.error("Unexpected error unlocking byte range with in-memory lock manager",n)}try{this.nativeLockManager.lockFileByteRange(e,t,s)}catch(n){logger.logger.error("Unexpected error unlocking byte range with native lock manager",n)}return!0}findFirstConflictingByteRangeLock(e,t){try{const s=this.nativeLockManager.findFirstConflictingByteRangeLock(e,t);return s||this.wasmLockManager.findFirstConflictingByteRangeLock(e,t)}catch(s){logger.logger.error("Unexpected error in findFirstConflictingByteRangeLock()",s);return}}releaseLocksForProcess(e){try{this.wasmLockManager.releaseLocksForProcess(e)}catch(t){logger.logger.error("Unexpected error in wasmLockManager.releaseLocksForProcess()",t)}try{this.nativeLockManager.releaseLocksForProcess(e)}catch(t){logger.logger.error("Unexpected error in nativeLockManager.releaseLocksForProcess()",t)}}releaseLocksOnFdClose(e,t,s){try{this.wasmLockManager.releaseLocksOnFdClose(e,t,s)}catch(n){logger.logger.error("Unexpected error in wasmLockManager.releaseLocksOnFdClose()",n)}try{this.nativeLockManager.releaseLocksOnFdClose(e,t,s)}catch(n){logger.logger.error("Unexpected error in nativeLockManager.releaseLocksOnFdClose()",n)}}}function createObjectPoolProxy(r){if(r.length===0)throw new Error("At least one instance is required");const e=[...r],t=[];function s(){const i=e.shift();return i!==void 0?Promise.resolve(i):new Promise(a=>{t.push(a)})}function n(i){const a=t.shift();a?a(i):e.push(i)}function o(i){return s().then(a=>{const l=u=>{const d=u==null?void 0:u.finished;return d&&typeof d.then=="function"?Promise.resolve(d).then(()=>n(a),()=>n(a)):n(a),u};let c;try{c=i(a)}catch(u){throw n(a),u}return c!=null&&typeof c.then=="function"?c.then(u=>l(u),u=>{throw n(a),u}):l(c)})}return new Proxy({},{get(i,a){if(a in i)return i[a];if(a!=="then")return new Proxy(function(){},{apply(l,c,u){return o(d=>d[a](...u))},get(l,c){if(c==="then")return(u,d)=>o(h=>h[a]).then(u,d)}})}})}const maxValueForSigned32BitInteger=2**31-1;class ProcessIdAllocator{constructor(e=1,t=maxValueForSigned32BitInteger){this.claimed=new Set,this.initialId=e,this.maxId=t,this.nextId=e}claim(){const e=this.maxId-this.initialId+1;for(let t=0;t<e;t++)if(this.claimed.has(this.nextId))this.nextId++,this.nextId>this.maxId&&(this.nextId=this.initialId);else return this.claimed.add(this.nextId),this.nextId;throw new Error(`Unable to find free process ID after ${e} tries.`)}release(e){return this.claimed.has(e)?(this.claimed.delete(e),!0):!1}}exports.AllPHPVersions=AllPHPVersions;exports.DEFAULT_BASE_URL=DEFAULT_BASE_URL;exports.FSHelpers=FSHelpers;exports.FileLock=FileLock;exports.FileLockIntervalTree=FileLockIntervalTree;exports.FileLockManagerComposite=FileLockManagerComposite;exports.FileLockManagerInMemory=FileLockManagerInMemory;exports.HttpCookieStore=HttpCookieStore;exports.LEGACY_PHP_INI_CONTENT=LEGACY_PHP_INI_CONTENT;exports.LEGACY_PHP_INI_PATH=LEGACY_PHP_INI_PATH;exports.LatestSupportedPHPVersion=LatestSupportedPHPVersion;exports.LegacyPHPVersions=LegacyPHPVersions;exports.MAX_ADDRESSABLE_FILE_OFFSET=MAX_ADDRESSABLE_FILE_OFFSET;exports.PHP=PHP;exports.PHPExecutionFailureError=PHPExecutionFailureError;exports.PHPNextVersion=PHPNextVersion;exports.PHPProcessManager=PHPProcessManager;exports.PHPRequestHandler=PHPRequestHandler;exports.PHPResponse=PHPResponse;exports.PHPWorker=PHPWorker;exports.PHP_EXTENSIONS_DIR=PHP_EXTENSIONS_DIR;exports.ProcessIdAllocator=ProcessIdAllocator;exports.SinglePHPInstanceManager=SinglePHPInstanceManager;exports.StreamedPHPResponse=StreamedPHPResponse;exports.SupportedPHPVersions=SupportedPHPVersions;exports.SupportedPHPVersionsList=SupportedPHPVersionsList;exports.UnhandledRejectionsTarget=UnhandledRejectionsTarget;exports.__private__dont__use=__private__dont__use;exports.applyRewriteRules=applyRewriteRules;exports.consumeAPI=consumeAPI;exports.consumeAPISync=consumeAPISync;exports.createLegacyPhpIniPreRunStep=createLegacyPhpIniPreRunStep;exports.createObjectPoolProxy=createObjectPoolProxy;exports.ensurePathPrefix=ensurePathPrefix;exports.exposeAPI=exposeAPI;exports.exposeSyncAPI=exposeSyncAPI;exports.getPhpIniEntries=getPhpIniEntries;exports.inferMimeType=inferMimeType;exports.installPHPExtensionFilesSync=installPHPExtensionFilesSync;exports.isExitCode=isExitCode;exports.isLegacyPHPVersion=isLegacyPHPVersion;exports.isPHPNextVersion=isPHPNextVersion;exports.isPathToSharedFS=isPathToSharedFS;exports.iterateFiles=iteratePhpFiles;exports.loadPHPRuntime=loadPHPRuntime;exports.popLoadedRuntime=popLoadedRuntime;exports.portToStream=portToStream;exports.prettyPrintFullStackTrace=prettyPrintFullStackTrace;exports.printDebugDetails=printDebugDetails;exports.printResponseDebugDetails=printResponseDebugDetails;exports.proxyFileSystem=proxyFileSystem;exports.releaseApiProxy=releaseApiProxy;exports.removePathPrefix=removePathPrefix;exports.resolvePHPExtension=resolvePHPExtension;exports.rotatePHPRuntime=rotatePHPRuntime;exports.sandboxedSpawnHandlerFactory=sandboxedSpawnHandlerFactory;exports.setPhpIniEntries=setPhpIniEntries;exports.streamToPort=streamToPort;exports.toRelativeUrl=toRelativeUrl;exports.withPHPIniValues=withPHPIniValues;exports.withResolvedPHPExtensions=withResolvedPHPExtensions;exports.writeFiles=writeFiles;exports.writeFilesStreamToPhp=writeFilesStreamToPhp;
105
105
  //# sourceMappingURL=index.cjs.map