Files
setup-php/dist/index.js
T

1 line
49 KiB
JavaScript

import{createRequire as e}from"module";var t={26:function(e,t){(function(e,s){true?s(t):0})(this,function(e){"use strict";const t=/^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i;const validateAndParse=e=>{if(typeof e!=="string"){throw new TypeError("Invalid argument expected string")}const s=e.match(t);if(!s){throw new Error(`Invalid argument not valid semver ('${e}' received)`)}s.shift();return s};const isWildcard=e=>e==="*"||e==="x"||e==="X";const tryParse=e=>{const t=parseInt(e,10);return isNaN(t)?e:t};const forceType=(e,t)=>typeof e!==typeof t?[String(e),String(t)]:[e,t];const compareStrings=(e,t)=>{if(isWildcard(e)||isWildcard(t))return 0;const[s,r]=forceType(tryParse(e),tryParse(t));if(s>r)return 1;if(s<r)return-1;return 0};const compareSegments=(e,t)=>{for(let s=0;s<Math.max(e.length,t.length);s++){const r=compareStrings(e[s]||"0",t[s]||"0");if(r!==0)return r}return 0};const compareVersions=(e,t)=>{const s=validateAndParse(e);const r=validateAndParse(t);const n=s.pop();const i=r.pop();const o=compareSegments(s,r);if(o!==0)return o;if(n&&i){return compareSegments(n.split("."),i.split("."))}else if(n||i){return n?-1:1}return 0};const compare=(e,t,r)=>{assertValidOperator(r);const n=compareVersions(e,t);return s[r].includes(n)};const s={">":[1],">=":[0,1],"=":[0],"<=":[-1,0],"<":[-1],"!=":[-1,1]};const r=Object.keys(s);const assertValidOperator=e=>{if(typeof e!=="string"){throw new TypeError(`Invalid operator type, expected string but got ${typeof e}`)}if(r.indexOf(e)===-1){throw new Error(`Invalid operator, expected one of ${r.join("|")}`)}};const satisfies=(e,t)=>{t=t.replace(/([><=]+)\s+/g,"$1");if(t.includes("||")){return t.split("||").some(t=>satisfies(e,t))}else if(t.includes(" - ")){const[s,r]=t.split(" - ",2);return satisfies(e,`>=${s} <=${r}`)}else if(t.includes(" ")){return t.trim().replace(/\s{2,}/g," ").split(" ").every(t=>satisfies(e,t))}const s=t.match(/^([<>=~^]+)/);const r=s?s[1]:"=";if(r!=="^"&&r!=="~")return compare(e,t,r);const[n,i,o,,a]=validateAndParse(e);const[c,l,d,,u]=validateAndParse(t);const p=[n,i,o];const f=[c,l!==null&&l!==void 0?l:"x",d!==null&&d!==void 0?d:"x"];if(u){if(!a)return false;if(compareSegments(p,f)!==0)return false;if(compareSegments(a.split("."),u.split("."))===-1)return false}const h=f.findIndex(e=>e!=="0")+1;const w=r==="~"?2:h>1?h:1;if(compareSegments(p.slice(0,w),f.slice(0,w))!==0)return false;if(compareSegments(p.slice(w),f.slice(w))===-1)return false;return true};const validate=e=>typeof e==="string"&&/^[v\d]/.test(e)&&t.test(e);const validateStrict=e=>typeof e==="string"&&/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/.test(e);e.compare=compare;e.compareVersions=compareVersions;e.satisfies=satisfies;e.validate=validate;e.validateStrict=validateStrict})}};var s={};function __nccwpck_require__(e){var r=s[e];if(r!==undefined){return r.exports}var n=s[e]={exports:{}};var i=true;try{t[e].call(n.exports,n,n.exports,__nccwpck_require__);i=false}finally{if(i)delete s[e]}return n.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=decodeURIComponent(new URL(".",import.meta.url).pathname).slice(import.meta.url.match(/^file:\/\/\/\w:/)?1:0,-1)+"/";(()=>{__nccwpck_require__.d=(e,t)=>{for(var s in t){if(__nccwpck_require__.o(t,s)&&!__nccwpck_require__.o(e,s)){Object.defineProperty(e,s,{enumerable:true,get:t[s]})}}}})();(()=>{__nccwpck_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)})();var r={};__nccwpck_require__.d(r,{IT:()=>getScript,eF:()=>run,GJ:()=>setEnv});const n=e(import.meta.url)("url");const i=e(import.meta.url)("path");const o=e(import.meta.url)("string_decoder");const a=e(import.meta.url)("os");const c=e(import.meta.url)("events");const l=e(import.meta.url)("child_process");const d=e(import.meta.url)("assert");const u=e(import.meta.url)("fs");var p=undefined&&undefined.__awaiter||function(e,t,s,r){function adopt(e){return e instanceof s?e:new s(function(t){t(e)})}return new(s||(s=Promise))(function(s,n){function fulfilled(e){try{step(r.next(e))}catch(e){n(e)}}function rejected(e){try{step(r["throw"](e))}catch(e){n(e)}}function step(e){e.done?s(e.value):adopt(e.value).then(fulfilled,rejected)}step((r=r.apply(e,t||[])).next())})};const{chmod:f,copyFile:h,lstat:w,mkdir:m,open:g,readdir:v,rename:y,rm:_,rmdir:x,stat:b,symlink:$,unlink:E}=u.promises;const P=process.platform==="win32";function readlink(e){return p(this,void 0,void 0,function*(){const t=yield fs.promises.readlink(e);if(P&&!t.endsWith("\\")){return`${t}\\`}return t})}const k=268435456;const S=u.constants.O_RDONLY;function exists(e){return p(this,void 0,void 0,function*(){try{yield b(e)}catch(e){if(e.code==="ENOENT"){return false}throw e}return true})}function isDirectory(e){return p(this,arguments,void 0,function*(e,t=false){const s=t?yield b(e):yield w(e);return s.isDirectory()})}function isRooted(e){e=normalizeSeparators(e);if(!e){throw new Error('isRooted() parameter "p" cannot be empty')}if(P){return e.startsWith("\\")||/^[A-Z]:/i.test(e)}return e.startsWith("/")}function tryGetExecutablePath(e,t){return p(this,void 0,void 0,function*(){let s=undefined;try{s=yield b(e)}catch(t){if(t.code!=="ENOENT"){console.log(`Unexpected error attempting to determine if executable file exists '${e}': ${t}`)}}if(s&&s.isFile()){if(P){const s=i.extname(e).toUpperCase();if(t.some(e=>e.toUpperCase()===s)){return e}}else{if(isUnixExecutable(s)){return e}}}const r=e;for(const n of t){e=r+n;s=undefined;try{s=yield b(e)}catch(t){if(t.code!=="ENOENT"){console.log(`Unexpected error attempting to determine if executable file exists '${e}': ${t}`)}}if(s&&s.isFile()){if(P){try{const t=i.dirname(e);const s=i.basename(e).toUpperCase();for(const r of yield v(t)){if(s===r.toUpperCase()){e=i.join(t,r);break}}}catch(t){console.log(`Unexpected error attempting to determine the actual case of the file '${e}': ${t}`)}return e}else{if(isUnixExecutable(s)){return e}}}}return""})}function normalizeSeparators(e){e=e||"";if(P){e=e.replace(/\//g,"\\");return e.replace(/\\\\+/g,"\\")}return e.replace(/\/\/+/g,"/")}function isUnixExecutable(e){return(e.mode&1)>0||(e.mode&8)>0&&process.getgid!==undefined&&e.gid===process.getgid()||(e.mode&64)>0&&process.getuid!==undefined&&e.uid===process.getuid()}function getCmdPath(){var e;return(e=process.env["COMSPEC"])!==null&&e!==void 0?e:`cmd.exe`}var C=undefined&&undefined.__awaiter||function(e,t,s,r){function adopt(e){return e instanceof s?e:new s(function(t){t(e)})}return new(s||(s=Promise))(function(s,n){function fulfilled(e){try{step(r.next(e))}catch(e){n(e)}}function rejected(e){try{step(r["throw"](e))}catch(e){n(e)}}function step(e){e.done?s(e.value):adopt(e.value).then(fulfilled,rejected)}step((r=r.apply(e,t||[])).next())})};function cp(e,t){return C(this,arguments,void 0,function*(e,t,s={}){const{force:r,recursive:n,copySourceDirectory:i}=readCopyOptions(s);const o=(yield ioUtil.exists(t))?yield ioUtil.stat(t):null;if(o&&o.isFile()&&!r){return}const a=o&&o.isDirectory()&&i?path.join(t,path.basename(e)):t;if(!(yield ioUtil.exists(e))){throw new Error(`no such file or directory: ${e}`)}const c=yield ioUtil.stat(e);if(c.isDirectory()){if(!n){throw new Error(`Failed to copy. ${e} is a directory, but tried to copy without recursive flag.`)}else{yield cpDirRecursive(e,a,0,r)}}else{if(path.relative(e,a)===""){throw new Error(`'${a}' and '${e}' are the same file`)}yield io_copyFile(e,a,r)}})}function mv(e,t){return C(this,arguments,void 0,function*(e,t,s={}){if(yield ioUtil.exists(t)){let r=true;if(yield ioUtil.isDirectory(t)){t=path.join(t,path.basename(e));r=yield ioUtil.exists(t)}if(r){if(s.force==null||s.force){yield rmRF(t)}else{throw new Error("Destination already exists")}}}yield mkdirP(path.dirname(t));yield ioUtil.rename(e,t)})}function rmRF(e){return C(this,void 0,void 0,function*(){if(ioUtil.IS_WINDOWS){if(/[*"<>|]/.test(e)){throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows')}}try{yield ioUtil.rm(e,{force:true,maxRetries:3,recursive:true,retryDelay:300})}catch(e){throw new Error(`File was unable to be removed ${e}`)}})}function mkdirP(e){return C(this,void 0,void 0,function*(){ok(e,"a path argument must be provided");yield ioUtil.mkdir(e,{recursive:true})})}function which(e,t){return C(this,void 0,void 0,function*(){if(!e){throw new Error("parameter 'tool' is required")}if(t){const t=yield which(e,false);if(!t){if(P){throw new Error(`Unable to locate executable file: ${e}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`)}else{throw new Error(`Unable to locate executable file: ${e}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`)}}return t}const s=yield findInPath(e);if(s&&s.length>0){return s[0]}return""})}function findInPath(e){return C(this,void 0,void 0,function*(){if(!e){throw new Error("parameter 'tool' is required")}const t=[];if(P&&process.env["PATHEXT"]){for(const e of process.env["PATHEXT"].split(i.delimiter)){if(e){t.push(e)}}}if(isRooted(e)){const s=yield tryGetExecutablePath(e,t);if(s){return[s]}return[]}if(e.includes(i.sep)){return[]}const s=[];if(process.env.PATH){for(const e of process.env.PATH.split(i.delimiter)){if(e){s.push(e)}}}const r=[];for(const n of s){const s=yield tryGetExecutablePath(i.join(n,e),t);if(s){r.push(s)}}return r})}function readCopyOptions(e){const t=e.force==null?true:e.force;const s=Boolean(e.recursive);const r=e.copySourceDirectory==null?true:Boolean(e.copySourceDirectory);return{force:t,recursive:s,copySourceDirectory:r}}function cpDirRecursive(e,t,s,r){return C(this,void 0,void 0,function*(){if(s>=255)return;s++;yield mkdirP(t);const n=yield ioUtil.readdir(e);for(const i of n){const n=`${e}/${i}`;const o=`${t}/${i}`;const a=yield ioUtil.lstat(n);if(a.isDirectory()){yield cpDirRecursive(n,o,s,r)}else{yield io_copyFile(n,o,r)}}yield ioUtil.chmod(t,(yield ioUtil.stat(e)).mode)})}function io_copyFile(e,t,s){return C(this,void 0,void 0,function*(){if((yield ioUtil.lstat(e)).isSymbolicLink()){try{yield ioUtil.lstat(t);yield ioUtil.unlink(t)}catch(e){if(e.code==="EPERM"){yield ioUtil.chmod(t,"0666");yield ioUtil.unlink(t)}}const s=yield ioUtil.readlink(e);yield ioUtil.symlink(s,t,ioUtil.IS_WINDOWS?"junction":null)}else if(!(yield ioUtil.exists(t))||s){yield ioUtil.copyFile(e,t)}})}const A=e(import.meta.url)("timers");var O=undefined&&undefined.__awaiter||function(e,t,s,r){function adopt(e){return e instanceof s?e:new s(function(t){t(e)})}return new(s||(s=Promise))(function(s,n){function fulfilled(e){try{step(r.next(e))}catch(e){n(e)}}function rejected(e){try{step(r["throw"](e))}catch(e){n(e)}}function step(e){e.done?s(e.value):adopt(e.value).then(fulfilled,rejected)}step((r=r.apply(e,t||[])).next())})};const U=process.platform==="win32";class ToolRunner extends c.EventEmitter{constructor(e,t,s){super();if(!e){throw new Error("Parameter 'toolPath' cannot be null or empty.")}this.toolPath=e;this.args=t||[];this.options=s||{}}_debug(e){if(this.options.listeners&&this.options.listeners.debug){this.options.listeners.debug(e)}}_getCommandString(e,t){const s=this._getSpawnFileName();const r=this._getSpawnArgs(e);let n=t?"":"[command]";if(U){if(this._isCmdFile()){n+=s;for(const e of r){n+=` ${e}`}}else if(e.windowsVerbatimArguments){n+=`"${s}"`;for(const e of r){n+=` ${e}`}}else{n+=this._windowsQuoteCmdArg(s);for(const e of r){n+=` ${this._windowsQuoteCmdArg(e)}`}}}else{n+=s;for(const e of r){n+=` ${e}`}}return n}_processLineBuffer(e,t,s){try{let r=t+e.toString();let n=r.indexOf(a.EOL);while(n>-1){const e=r.substring(0,n);s(e);r=r.substring(n+a.EOL.length);n=r.indexOf(a.EOL)}return r}catch(e){this._debug(`error processing line. Failed with error ${e}`);return""}}_getSpawnFileName(){if(U){if(this._isCmdFile()){return process.env["COMSPEC"]||"cmd.exe"}}return this.toolPath}_getSpawnArgs(e){if(U){if(this._isCmdFile()){let t=`/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;for(const s of this.args){t+=" ";t+=e.windowsVerbatimArguments?s:this._windowsQuoteCmdArg(s)}t+='"';return[t]}}return this.args}_endsWith(e,t){return e.endsWith(t)}_isCmdFile(){const e=this.toolPath.toUpperCase();return this._endsWith(e,".CMD")||this._endsWith(e,".BAT")}_windowsQuoteCmdArg(e){if(!this._isCmdFile()){return this._uvQuoteCmdArg(e)}if(!e){return'""'}const t=[" ","\t","&","(",")","[","]","{","}","^","=",";","!","'","+",",","`","~","|","<",">",'"'];let s=false;for(const r of e){if(t.some(e=>e===r)){s=true;break}}if(!s){return e}let r='"';let n=true;for(let t=e.length;t>0;t--){r+=e[t-1];if(n&&e[t-1]==="\\"){r+="\\"}else if(e[t-1]==='"'){n=true;r+='"'}else{n=false}}r+='"';return r.split("").reverse().join("")}_uvQuoteCmdArg(e){if(!e){return'""'}if(!e.includes(" ")&&!e.includes("\t")&&!e.includes('"')){return e}if(!e.includes('"')&&!e.includes("\\")){return`"${e}"`}let t='"';let s=true;for(let r=e.length;r>0;r--){t+=e[r-1];if(s&&e[r-1]==="\\"){t+="\\"}else if(e[r-1]==='"'){s=true;t+="\\"}else{s=false}}t+='"';return t.split("").reverse().join("")}_cloneExecOptions(e){e=e||{};const t={cwd:e.cwd||process.cwd(),env:e.env||process.env,silent:e.silent||false,windowsVerbatimArguments:e.windowsVerbatimArguments||false,failOnStdErr:e.failOnStdErr||false,ignoreReturnCode:e.ignoreReturnCode||false,delay:e.delay||1e4};t.outStream=e.outStream||process.stdout;t.errStream=e.errStream||process.stderr;return t}_getSpawnOptions(e,t){e=e||{};const s={};s.cwd=e.cwd;s.env=e.env;s["windowsVerbatimArguments"]=e.windowsVerbatimArguments||this._isCmdFile();if(e.windowsVerbatimArguments){s.argv0=`"${t}"`}return s}exec(){return O(this,void 0,void 0,function*(){if(!isRooted(this.toolPath)&&(this.toolPath.includes("/")||U&&this.toolPath.includes("\\"))){this.toolPath=i.resolve(process.cwd(),this.options.cwd||process.cwd(),this.toolPath)}this.toolPath=yield which(this.toolPath,true);return new Promise((e,t)=>O(this,void 0,void 0,function*(){this._debug(`exec tool: ${this.toolPath}`);this._debug("arguments:");for(const e of this.args){this._debug(` ${e}`)}const s=this._cloneExecOptions(this.options);if(!s.silent&&s.outStream){s.outStream.write(this._getCommandString(s)+a.EOL)}const r=new ExecState(s,this.toolPath);r.on("debug",e=>{this._debug(e)});if(this.options.cwd&&!(yield exists(this.options.cwd))){return t(new Error(`The cwd: ${this.options.cwd} does not exist!`))}const n=this._getSpawnFileName();const i=l.spawn(n,this._getSpawnArgs(s),this._getSpawnOptions(this.options,n));let o="";if(i.stdout){i.stdout.on("data",e=>{if(this.options.listeners&&this.options.listeners.stdout){this.options.listeners.stdout(e)}if(!s.silent&&s.outStream){s.outStream.write(e)}o=this._processLineBuffer(e,o,e=>{if(this.options.listeners&&this.options.listeners.stdline){this.options.listeners.stdline(e)}})})}let c="";if(i.stderr){i.stderr.on("data",e=>{r.processStderr=true;if(this.options.listeners&&this.options.listeners.stderr){this.options.listeners.stderr(e)}if(!s.silent&&s.errStream&&s.outStream){const t=s.failOnStdErr?s.errStream:s.outStream;t.write(e)}c=this._processLineBuffer(e,c,e=>{if(this.options.listeners&&this.options.listeners.errline){this.options.listeners.errline(e)}})})}i.on("error",e=>{r.processError=e.message;r.processExited=true;r.processClosed=true;r.CheckComplete()});i.on("exit",e=>{r.processExitCode=e;r.processExited=true;this._debug(`Exit code ${e} received from tool '${this.toolPath}'`);r.CheckComplete()});i.on("close",e=>{r.processExitCode=e;r.processExited=true;r.processClosed=true;this._debug(`STDIO streams have closed for tool '${this.toolPath}'`);r.CheckComplete()});r.on("done",(s,r)=>{if(o.length>0){this.emit("stdline",o)}if(c.length>0){this.emit("errline",c)}i.removeAllListeners();if(s){t(s)}else{e(r)}});if(this.options.input){if(!i.stdin){throw new Error("child process missing stdin")}i.stdin.end(this.options.input)}}))})}}function argStringToArray(e){const t=[];let s=false;let r=false;let n="";function append(e){if(r&&e!=='"'){n+="\\"}n+=e;r=false}for(let i=0;i<e.length;i++){const o=e.charAt(i);if(o==='"'){if(!r){s=!s}else{append(o)}continue}if(o==="\\"&&r){append(o);continue}if(o==="\\"&&s){r=true;continue}if(o===" "&&!s){if(n.length>0){t.push(n);n=""}continue}append(o)}if(n.length>0){t.push(n.trim())}return t}class ExecState extends c.EventEmitter{constructor(e,t){super();this.processClosed=false;this.processError="";this.processExitCode=0;this.processExited=false;this.processStderr=false;this.delay=1e4;this.done=false;this.timeout=null;if(!t){throw new Error("toolPath must not be empty")}this.options=e;this.toolPath=t;if(e.delay){this.delay=e.delay}}CheckComplete(){if(this.done){return}if(this.processClosed){this._setResult()}else if(this.processExited){this.timeout=(0,A.setTimeout)(ExecState.HandleTimeout,this.delay,this)}}_debug(e){this.emit("debug",e)}_setResult(){let e;if(this.processExited){if(this.processError){e=new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`)}else if(this.processExitCode!==0&&!this.options.ignoreReturnCode){e=new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`)}else if(this.processStderr&&this.options.failOnStdErr){e=new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`)}}if(this.timeout){clearTimeout(this.timeout);this.timeout=null}this.done=true;this.emit("done",e,this.processExitCode)}static HandleTimeout(e){if(e.done){return}if(!e.processClosed&&e.processExited){const t=`The STDIO streams did not close within ${e.delay/1e3} seconds of the exit event from process '${e.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;e._debug(t)}e._setResult()}}var j=undefined&&undefined.__awaiter||function(e,t,s,r){function adopt(e){return e instanceof s?e:new s(function(t){t(e)})}return new(s||(s=Promise))(function(s,n){function fulfilled(e){try{step(r.next(e))}catch(e){n(e)}}function rejected(e){try{step(r["throw"](e))}catch(e){n(e)}}function step(e){e.done?s(e.value):adopt(e.value).then(fulfilled,rejected)}step((r=r.apply(e,t||[])).next())})};function exec(e,t,s){return j(this,void 0,void 0,function*(){const r=argStringToArray(e);if(r.length===0){throw new Error(`Parameter 'commandLine' cannot be null or empty.`)}const n=r[0];t=r.slice(1).concat(t||[]);const i=new ToolRunner(n,t,s);return i.exec()})}function getExecOutput(e,t,s){return j(this,void 0,void 0,function*(){var r,n;let i="";let o="";const a=new StringDecoder("utf8");const c=new StringDecoder("utf8");const l=(r=s===null||s===void 0?void 0:s.listeners)===null||r===void 0?void 0:r.stdout;const d=(n=s===null||s===void 0?void 0:s.listeners)===null||n===void 0?void 0:n.stderr;const stdErrListener=e=>{o+=c.write(e);if(d){d(e)}};const stdOutListener=e=>{i+=a.write(e);if(l){l(e)}};const u=Object.assign(Object.assign({},s===null||s===void 0?void 0:s.listeners),{stdout:stdOutListener,stderr:stdErrListener});const p=yield exec(e,t,Object.assign(Object.assign({},s),{listeners:u}));i+=a.end();o+=c.end();return{exitCode:p,stdout:i,stderr:o}})}function toCommandValue(e){if(e instanceof Error){return e.toString()}return e}function escapeData(e){return toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function escapeProperty(e){return e.replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}function issueCommand(e,t,s){let r=`::${e}`;if(t&&Object.keys(t).length>0){r+=" ";const e=Object.entries(t).filter(([,e])=>e).map(([e,t])=>`${e}=${escapeProperty(t)}`).join(",");r+=e}r+=`::${escapeData(s)}`;process.stdout.write(r+a.EOL)}function error(e){issueCommand("error",{},e)}function setFailed(e){process.exitCode=1;error(e)}function getInput(e,t=false){const s=process.env[`INPUT_${e.replace(/ /g,"_").toUpperCase()}`]||"";if(t&&!s){throw new Error(`Input required and not supplied: ${e}`)}return s.trim()}const I=new Set([301,302,303,307,308]);async function fetch(e,t,s=5){const r={"User-Agent":`Mozilla/5.0 (${process.platform} ${process.arch}) setup-php`};if(t){r["Authorization"]="Bearer "+t}try{const t=await globalThis.fetch(e,{headers:r,redirect:s>0?"follow":"manual"});if(t.ok){const e=await t.text();return{data:e}}else if(I.has(t.status)&&s<=0){return{error:`${t.status}: Redirect error`}}else{return{error:`${t.status}: ${t.statusText}`}}}catch(e){return{error:`Fetch error: ${e.message}`}}}const L=i.dirname((0,n.fileURLToPath)(import.meta.url));async function readEnv(e){if(!/^[A-Za-z0-9_-]+$/.test(e)){return""}const t=e.toLowerCase();const s=e.toUpperCase();const r=[e,t,s,t.replace("_","-"),s.replace("_","-")].filter((e,t,s)=>s.indexOf(e)===t);return r.map(e=>process.env[e]||"").find(Boolean)||""}async function utils_getInput(e,t){const s=getInput(e);const r=await readEnv(e);switch(true){case s!="":return s;case s==""&&r!="":return r;case s==""&&r==""&&t:throw new Error(`Input required and not supplied: ${e}`);default:return""}}async function getManifestURLS(){return["https://raw.githubusercontent.com/shivammathur/setup-php/develop/src/configs/php-versions.json","https://setup-php.com/php-versions.json"]}async function parseVersion(e){switch(true){case/^pre(-installed)?$/.test(e):return"pre";case/^(latest|lowest|highest|nightly|master|\d+\.x)$/.test(e):for(const t of await getManifestURLS()){const s=await fetch(t);if(s["data"]??false){const t=JSON.parse(s["data"])[e];if(t===undefined){throw new Error(`Invalid PHP version: ${e.slice(0,20)}`)}if(typeof t!=="string"||!/^\d+\.\d+$/.test(t)){throw new Error(`Invalid PHP version in manifest: ${typeof t==="string"?t.slice(0,10):typeof t}`)}return t}}throw new Error(`Could not fetch the PHP version manifest.`);default:if(!/^\d+(\.\d+){0,2}$/.test(e)){throw new Error(`Invalid PHP version: ${e.slice(0,20)}`)}return e.includes(".")?e.split(".").slice(0,2).join("."):e+".0"}}async function parseIniFile(e){if(/^(production|development|none)$/.test(e)){return e}const t=e.match(/php\.ini-(production|development)$/);return t?t[1]:"production"}async function asyncForEach(e,t){for(const[s,r]of e.entries()){await t(r,s,e)}}async function color(e){switch(e){case"error":return"31";default:case"success":return"32";case"warning":return"33"}}async function utils_log(e,t,s){switch(t){case"win32":return'printf "\\033['+await color(s)+";1m"+e+' \\033[0m"';case"linux":case"darwin":default:return'echo "\\033['+await color(s)+";1m"+e+'\\033[0m"'}}async function stepLog(e,t){switch(t){case"win32":return'Step-Log "'+escapeForShell(e,t)+'"';case"linux":case"darwin":return'step_log "'+escapeForShell(e,t)+'"';default:return await utils_log("Platform "+t+" is not supported",t,"error")}}async function addLog(e,t,s,r){const n=escapeForShell(t,r);const i=escapeForShell(s,r);switch(r){case"win32":return`Add-Log "${e}" "${n}" "${i}"`;case"linux":case"darwin":return`add_log "${e}" "${n}" "${i}"`;default:return await utils_log("Platform "+r+" is not supported",r,"error")}}function escapeForShell(e,t){if(t==="win32"){return e.replace(/[`$"]/g,"`$&")}return e.replace(/[\\`$"]/g,"\\$&")}function safeArg(e,t){if(!/^[a-zA-Z0-9_./:@+,~^-]*$/.test(e)){return'"'+escapeForShell(e,t)+'"'}return e}function sanitizeShellInput(e,t=false){const s=t?/[$`"';|&(){}[\]\\<>*?\n\r\t]/g:/[$`"';|&(){}[\]\\\n\r\t]/g;return e.replace(s,"")}async function extensionArray(e){switch(e){case"":case" ":return[];default:return[e.match(/(^|,\s?)none(\s?,|$)/)?"none":"",...e.split(",").map(function(e){e=e.trim().replace(/^\\\s*/,"");if(/.+-.+\/.+@.+/.test(e)){return e}return e.toLowerCase().replace(/^(:)?(php[-_]|none|zend )|(-[^-]*)-/,"$1$3")})].filter(Boolean)}}async function CSVArray(e){switch(e){case"":case" ":return[];default:return e.split(/,(?=(?:(?:[^"']*["']){2})*[^"']*$)/).map(function(e){return e.trim().replace(/^["']|["']$|(?<==)["']/g,"").replace(/=(((?!E_).)*[?{}|&~![()^]+((?!E_).)+)/,"='$1'").replace(/=(.*?)(=.*)/,"='$1$2'").replace(/:\s*["'](.*?)/g,":$1")}).filter(Boolean)}}async function getExtensionPrefix(e){switch(true){default:return"extension";case/xdebug([2-3])?$|opcache|ioncube|eaccelerator/.test(e):return"zend_extension"}}async function suppressOutput(e){switch(e){case"win32":return" >$null 2>&1";case"linux":case"darwin":return" >/dev/null 2>&1";default:return await utils_log("Platform "+e+" is not supported",e,"error")}}async function addVerbose(e,t){const s=await readEnv("verbose");process.env["SETUP_PHP_TRACE"]=/^v{2,3}$/.test(s)?String(s.length-1):"0";if(!/^(true|v{1,3})$/.test(s)&&process.env["RUNNER_DEBUG"]!=="1"){return e}const r=await scriptExtension(t);const n=i.dirname(i.dirname(e));const o=u.mkdtempSync(n+"-verbose-");await u.promises.cp(n,o,{recursive:true,dereference:true});const a=i.join(o,"scripts");const c=i.join(a,i.basename(e));const l=/>[ \t]*(?:\/dev\/null|\$null)[ \t]+2>&1/g;for(const e of u.readdirSync(a,{recursive:true,encoding:"utf8"})){if(!e.endsWith(r))continue;const s=i.join(a,e);const d=u.readFileSync(s,"utf8");let p=d.replace(l,t==="win32"?"2>&1 | Out-Host":"");if(s===c){p=p.replaceAll(n,o)}if(p!==d)u.writeFileSync(s,p)}return c}async function getUnsupportedLog(e,t,s){return"\n"+await addLog("$cross",e,[e,"is not supported on PHP",t].join(" "),s)+"\n"}async function getCommand(e,t){switch(e){case"linux":case"darwin":return"add_"+t+" ";case"win32":return"Add-"+t.split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join("")+" ";default:return await utils_log("Platform "+e+" is not supported",e,"error")}}async function joins(...e){return[...e].join(" ")}async function scriptExtension(e){switch(e){case"win32":return".ps1";case"linux":case"darwin":return".sh";default:return await utils_log("Platform "+e+" is not supported",e,"error")}}async function scriptTool(e){switch(e){case"win32":return"pwsh ";case"linux":case"darwin":return"bash ";default:return await utils_log("Platform "+e+" is not supported",e,"error")}}async function customPackage(e,t,s,r){const n=e.replace(/\d+|(pdo|pecl)[_-]|[_-]db2/,"");const o=await scriptExtension(r);const a=i.join(L,"../src/scripts/"+t+"/"+n+o);const c=await getCommand(r,n);return"\n. "+a+"\n"+c+s}async function parseExtensionSource(e,t){const s=/(\w+)-(\w+:\/\/.{1,253}(?:[.:][^:/\s]{2,63})+\/)?([\w.-]+)\/([\w.-]+)@(.+)/;const r=s.exec(e);r[2]=r[2]?r[2].slice(0,-1):"https://github.com";return await joins("\nadd_extension_from_source",...r.splice(1,r.length),t)}const T=/^(latest|lowest|highest|nightly|master|pre|pre-installed|\d+\.x|\d+(\.\d+){0,2})$/;function validatePHPVersionInput(e,t){if(typeof e!=="string"||!T.test(e)){throw new Error(`Invalid PHP version in ${t}: ${typeof e==="string"?e.slice(0,20):typeof e}`)}return e}async function readPHPVersion(){const e=await utils_getInput("php-version",false);if(e){return validatePHPVersionInput(e,"php-version input")}const t=await utils_getInput("php-version-file",false)||".php-version";if(u.existsSync(t)){const e=u.readFileSync(t,"utf8");const s=e.match(/^[ \t]*(?:php[ \t]+)?([^\s#]+)[ \t]*(?:#.*)?$/m);return validatePHPVersionInput(s?s[1]:e.trim(),t)}else if(t!==".php-version"){throw new Error(`Could not find '${t}' file.`)}const s=await readEnv("COMPOSER_PROJECT_DIR");const r=i.join(s,"composer.lock");if(u.existsSync(r)){const e=JSON.parse(u.readFileSync(r,"utf8"));if(e["platform-overrides"]?.["php"]){return validatePHPVersionInput(e["platform-overrides"]["php"],"composer.lock platform-overrides.php")}}const n=i.join(s,"composer.json");if(u.existsSync(n)){const e=JSON.parse(u.readFileSync(n,"utf8"));if(e["config"]?.["platform"]?.["php"]){return validatePHPVersionInput(e["config"]["platform"]["php"],"composer.json config.platform.php")}}return"latest"}async function setVariable(e,t,s){switch(s){case"win32":return"\n$"+e+" = "+t+"\n";case"linux":case"darwin":default:return"\n"+e+'="$('+t+')"\n'}}async function addINIValuesUnix(e){const t=await CSVArray(e);let s="";await asyncForEach(t,async function(e){s+="\n"+await addLog("$tick",e,"Added to php.ini","linux")});return'echo "'+t.map(e=>escapeForShell(e,"linux")).join("\n")+'" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null 2>&1'+s}async function addINIValuesWindows(e){const t=await CSVArray(e);let s="\n";await asyncForEach(t,async function(e){s+=await addLog("$tick",e,"Added to php.ini","win32")+"\n"});return'Add-Content "$php_dir\\php.ini" "'+t.map(e=>escapeForShell(e,"win32")).join("\n")+'"'+s}async function addINIValues(e,t,s=false){let r="\n";switch(s){case true:r+=await stepLog("Add php.ini values",t)+await suppressOutput(t)+"\n";break;case false:default:r+=await stepLog("Add php.ini values",t)+"\n";break}switch(t){case"win32":return r+await addINIValuesWindows(e);case"darwin":case"linux":return r+await addINIValuesUnix(e);default:return await utils_log("Platform "+t+" is not supported",t,"error")}}async function addExtensionDarwin(e,t){const s=await extensionArray(e);let r="\n";let n="";await asyncForEach(s,async function(e){const s=t+e;const[i,o]=e.split("-");const a=await getExtensionPrefix(i);switch(true){case/^:/.test(i):n+="\ndisable_extension"+i.replace(/:/g," ");return;case/^none$/.test(i):r+="\ndisable_all_shared";return;case/.+-.+\/.+@.+/.test(e):r+=await parseExtensionSource(e,a);return;case/^(7\.4|8\.[0-5])relay(-v?\d+\.\d+\.\d+|-nightly)?$/.test(s):case/^(5\.[3-6]|7\.[0-4]|8\.[0-5])blackfire(-\d+\.\d+\.\d+)?$/.test(s):case/^couchbase|^event|^gearman$|^geos$|^ibm_db2$|^pdo_ibm$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(e):case/^(5\.[3-6]|7\.[0-4]|8\.[0-5])ioncube$/.test(s):case/(5\.6|7\.[0-3])phalcon3|7\.[2-4]phalcon4|(7\.4|8\.[0-4])phalcon5?/.test(s):case/(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(s):case/^(7\.[0-4]|8\.[0-5])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test(s):r+=await customPackage(i,"extensions",e,"darwin");return;case/.+-(stable|beta|alpha|devel|snapshot|rc|preview)/.test(e):r+=await joins("\nadd_unstable_extension",i,o,a);return;case/.+-\d+(\.\d+\.\d+.*)?/.test(e):r+=await joins("\nadd_pecl_extension",i,o,a);return;case/(5\.[3-6]|7\.0)pcov/.test(s):r+=await getUnsupportedLog("pcov",t,"darwin");return;case/^7\.[2-4]xdebug2$/.test(s):r+=await joins("\nadd_brew_extension","xdebug2",a,"2.9.8");return;case/(?<!5\.[3-5])(amqp|apcu|brotli|excimer|expect|gmagick|gnupg|grpc|igbinary|imagick|imap|interbase|lua|mailparse|maxminddb|mcrypt|memcache|memcached|mongodb|mongodb1|msgpack|newrelic|oauth|opentelemetry|pdo_firebird|pinba|protobuf|psr|raphf|rdkafka|redis|scalar_objects|seaslog|snmp|spx|ssh2|swoole|uopz|uploadprogress|uuid|vld|xdebug|xdebug2|xhprof|yaml|zmq|zstd)/.test(s):case/(?<!5\.[3-6])(ds|v8js)/.test(s):case/(5\.6|7\.[0-4])(propro)/.test(s):case/(?<!5\.[3-6]|7\.0)pcov/.test(s):case/(?<!5\.[3-6])(ast|vips|xlswriter)/.test(s):case/^(8\.[0-5])swow$/.test(s):r+=await joins("\nadd_brew_extension",i,a);return;case/^sqlite$/.test(e):e="sqlite3";break;default:break}r+=await joins("\nadd_extension",e,a)});return r+n}async function addExtensionWindows(e,t){const s=await extensionArray(e);let r="\n";let n="";await asyncForEach(s,async function(e){const[s,i]=e.split("-");const o=t+e;let a;switch(true){case/^:/.test(s):n+="\nDisable-Extension"+s.replace(/:/g," ");break;case/^none$/.test(s):r+="\nDisable-AllShared";break;case/^(5\.[3-6]|7\.[0-4]|8\.[0-5])blackfire(-\d+\.\d+\.\d+)?$/.test(o):case/^ibm_db2$|^pdo_ibm$|^pdo_oci$|^oci8$|^pdo_firebird$/.test(e):case/^(5\.[3-6]|7\.[0-4]|8\.[0-5])ioncube$/.test(o):case/^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$|^(7\.4|8\.[0-4])phalcon5?$/.test(o):case/^(7\.[1-4]|8\.[0-5])(pecl_)?http/.test(o):case/(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(o):case/^(7\.[0-4]|8\.[0-5])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test(o):r+=await customPackage(s,"extensions",e,"win32");return;case/.+-(stable|beta|alpha|devel|snapshot)/.test(e):r+=await joins("\nAdd-Extension",s,i.replace("stable",""));break;case/.+-.+\/.+@.+/.test(e):r+=await getUnsupportedLog(e,t,"win32");break;case/.+-\d+\.\d+\.\d+[a-zA-Z]+\d*/.test(e):a=/.+-(\d+\.\d+\.\d+)([a-zA-Z]+)\d*/.exec(o);r+=await joins("\nAdd-Extension",s,a[2].replace("preview","devel"),a[1]);break;case/.+-\d+(\.\d+\.\d+.*)?/.test(e):r+=await joins("\nAdd-Extension",s,"stable",i);break;case/7\.[2-4]xdebug2/.test(o):r+="\nAdd-Extension xdebug stable 2.9.8";break;case/(5\.[3-6]|7\.0)pcov/.test(o):r+=await getUnsupportedLog("pcov",t,"win32");break;case/^5\.[3-6](?<!pdo_)(mysql|mysqli|mysqlnd)$/.test(o):r+="\nAdd-Extension mysql\nAdd-Extension mysqli\nAdd-Extension mysqlnd";break;case/(?<!5\.[3-6])(?<!pdo_)(mysql|mysqli|mysqlnd)$/.test(o):r+="\nAdd-Extension mysqli\nAdd-Extension mysqlnd";break;case/^sqlite$/.test(e):e="sqlite3";r+=await joins("\nAdd-Extension",e);break;default:r+="\nAdd-Extension "+e;break}});return r+n}async function addExtensionLinux(e,t){const s=await extensionArray(e);let r="\n";let n="";await asyncForEach(s,async function(e){const s=t+e;const[i,o]=e.split(/-(.+)/).filter(Boolean);const a=await getExtensionPrefix(i);switch(true){case/^:/.test(i):n+="\ndisable_extension"+i.replace(/:/g," ");return;case/^none$/.test(i):r+="\ndisable_all_shared";return;case/.+-.+\/.+@.+/.test(e):r+=await parseExtensionSource(e,a);return;case/^(7\.4|8\.[0-5])relay(-v?\d+\.\d+\.\d+|-nightly)?$/.test(s):case/^(5\.[3-6]|7\.[0-4]|8\.[0-5])blackfire(-\d+\.\d+\.\d+)?$/.test(s):case/^((5\.[3-6])|(7\.[0-2]))pdo_cubrid$|^((5\.[3-6])|(7\.[0-4]))cubrid$/.test(s):case/^couchbase|^event|^gearman$|^geos$|^ibm_db2$|^pdo_ibm$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(e):case/(?<!5\.[3-5])intl-\d+\.\d+$/.test(s):case/^(5\.[3-6]|7\.[0-4]|8\.[0-5])ioncube$/.test(s):case/^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$|^(7\.4|8\.[0-4])phalcon5?$/.test(s):case/(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(s):case/^(7\.[0-4]|8\.[0-5])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test(s):r+=await customPackage(i,"extensions",e,"linux");return;case/.+-(stable|beta|alpha|devel|snapshot|rc|preview)/.test(e):r+=await joins("\nadd_unstable_extension",i,o,a);return;case/.+-\d+(\.\d+\.\d+.*)?/.test(e):r+=await joins("\nadd_pecl_extension",i,o,a);return;case/(5\.[3-6]|7\.0)pcov/.test(s):r+=await getUnsupportedLog("pcov",t,"linux");return;case/^7\.[2-4]xdebug2$/.test(s):r+=await joins("\nadd_pecl_extension","xdebug","2.9.8",a);return;case/^pdo[_-].+/.test(e):e=e.replace(/pdo[_-]|3/,"");r+="\nadd_pdo_extension "+e;return;case/^sqlite$/.test(e):e="sqlite3";break;default:break}r+=await joins("\nadd_extension",e,a)});return r+n}async function addExtension(e,t,s,r=false){const n=await stepLog("Setup Extensions",s);let i="\n";switch(r){case true:i+=n+await suppressOutput(s);break;case false:default:i+=n;break}switch(s){case"win32":return i+await addExtensionWindows(e,t);case"darwin":return i+await addExtensionDarwin(e,t);case"linux":return i+await addExtensionLinux(e,t);default:return await utils_log("Platform "+s+" is not supported",s,"error")}}async function checkXdebugError(e,t){if(/^5\.[3-6]$|^7\.[0-1]$/.test(t)&&e=="xdebug3"||/^8\.[0-9]$/.test(t)&&e=="xdebug2"){return e+" is not supported on PHP "+t}return""}async function addCoverageXdebug(e,t,s,r){let n="\n";const i=await checkXdebugError(e,t);if(!i){n+=await addExtension(":pcov:false",t,s,true)+r;e=e=="xdebug3"?"xdebug":e;n+=await addExtension(e,t,s,true)+r;n+=await setVariable("xdebug_version","php -r \"echo phpversion('xdebug');\"",s);n+=await getCommand(s,"extension_log")+'xdebug "Xdebug $xdebug_version enabled as coverage driver"'}else{n+=await addLog("$cross",e,i,s)}return n}async function addCoveragePCOV(e,t,s){let r="\n";switch(true){default:r+=await addExtension(":xdebug:false",e,t,true)+s;r+=await addExtension("pcov",e,t,true)+s;r+=await addINIValues("pcov.enabled=1",t,true)+"\n";r+=await setVariable("pcov_version","php -r \"echo phpversion('pcov');\"",t);r+=await getCommand(t,"extension_log")+'pcov "PCOV $pcov_version enabled as coverage driver"';break;case/5\.[3-6]|7\.0/.test(e):r+=await addLog("$cross","pcov","PHP 7.1 or newer is required",t);break}return r}async function disableCoverage(e,t,s){let r="\n";r+=await addExtension(":pcov:false",e,t,true)+s;r+=await addExtension(":xdebug:false",e,t,true)+s;r+=await addLog("$tick","none","Disabled Xdebug and PCOV",t);return r}async function addCoverage(e,t,s){e=e.toLowerCase();const r="\n"+await stepLog("Setup Coverage",s);const n=await suppressOutput(s)+"\n";switch(e){case"pcov":return r+await addCoveragePCOV(t,s,n);case"xdebug":case"xdebug2":case"xdebug3":return r+await addCoverageXdebug(e,t,s,n);case"none":return r+await disableCoverage(t,s,n);default:return""}}var F=__nccwpck_require__(26);async function search(e,t){const s=await fetch(`https://repo.packagist.org/p2/${e}.json`);if(s.error||s.data==="[]"){return null}const r=JSON.parse(s["data"]);if(r&&r.packages){const s=r.packages[e];s.sort((e,t)=>F.compareVersions(t.version,e.version));const n=s.find(e=>{if(e?.require?.php){return e?.require?.php.split("|").some(e=>e&&F.satisfies(t+".0",e))}return false});return n?n.version:null}return null}const V=i.dirname((0,n.fileURLToPath)(import.meta.url));const D=/@([a-z][a-z0-9-]*):([^@]*)$/i;const R=/@sha[^@]*$/i;function extractChecksum(e){const t=e.match(D);if(!t){const t=e.match(R);if(t){return{release:e.slice(0,-t[0].length),error:"Invalid checksum syntax, expected @sha256:<hash> or @sha512:<hash>"}}return{release:e}}e=e.slice(0,-t[0].length);const s=t[1].toLowerCase();if(!["sha256","sha512"].includes(s)){return{release:e,error:`Unsupported checksum algorithm ${s}, expected sha256 or sha512`}}const r=t[2].toLowerCase();const n=s==="sha256"?64:128;if(!new RegExp(`^[a-f0-9]{${n}}$`).test(r)){return{release:e,error:`Invalid ${s} checksum, expected ${n} hexadecimal characters`}}if(!/^[^:]+:v?\d+\.\d+\.\d+(?:-[\w.-]+)?(?:\+[\w.-]+)?$/.test(e)){return{release:e,error:"Checksum pinning requires a full version, for example tool:1.2.3"}}return{release:e,checksum:`${s}:${r}`}}function skipGitHubAuthForComposerVersion(e){if(!/^\d+\.\d+\.\d+(?:-[\w-]+)?$/.test(e)){return false}return u.readFileSync(i.join(V,"../src/configs/composer-gh-auth-no-op"),"utf8").trim().split(/\r?\n/).some(t=>{const[s,r]=t.trim().split(/\s+/);return F.compareVersions(e,s)>=0&&F.compareVersions(e,r)<0})}function cleanComposerAuthJson(){try{const e=process.env["COMPOSER_AUTH_JSON"]||"";if(!e.includes("github-oauth"))return;const t=JSON.parse(e);delete t["github-oauth"];if(!Object.keys(t).length){delete process.env["COMPOSER_AUTH_JSON"]}else{process.env["COMPOSER_AUTH_JSON"]=JSON.stringify(t)}}catch{return}}async function getSemverVersion(e){const fixSemver=e=>{if(/^\d+\.\d+\.\d+(-|$)/.test(e))return e;const t=e.match(/^(\d+\.\d+\.\d+)([A-Za-z]+[0-9A-Za-z.]+)$/);return t?`${t[1]}-${t[2]}`:e};const t=e["version_prefix"]+e["version"];const s=`https://api.github.com/repos/${e["repository"]}/git/matching-refs/tags%2F${t}.`;const r=await readEnv("GITHUB_TOKEN")||await readEnv("COMPOSER_TOKEN");const n=await fetch(s,r);if(n.error||n.data==="[]"){e.error=n.error??`No version found with prefix ${t}.`;return e.version}else{const e=JSON.parse(n.data);const t=e.map(e=>(e.ref?.split("/").pop()??"").replace(/^v(?=\d)/,"")).filter(e=>e.length>0);const s=new Map;const r=t.map(e=>{const t=fixSemver(e);s.set(t,e);return t});const i=r.toSorted((e,t)=>{try{return F.compareVersions(t,e)}catch{return t.localeCompare(e,"en",{numeric:true,sensitivity:"base"})}});return s.get(i[0])??i[0]}}async function getLatestVersion(e){if(!e.version&&e.fetch_latest==="false"){return"latest"}if(e.fetch_latest==="true"&&!e.repository){return"latest"}const t=await fetch(`${e.github}/${e.repository}/releases.atom`);if(t.data){const e=[...t.data.matchAll(/releases\/tag\/([a-zA-Z]*)?(\d+\.\d+\.\d+)"/g)].map(e=>e[2]);const s=e.toSorted((e,t)=>e.localeCompare(t,undefined,{numeric:true}));return s.at(-1)||"latest"}return"latest"}async function getVersion(e,t){const s=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;const r=/^composer:(stable|preview|snapshot|[12])$/;const n=/[><=^~]+.*/;const i=/^\d+(\.\d+)?$/;t.version=e.replace(/v?(\d)/,"$1").replace(/\.x/,"");switch(true){case r.test(t.release):case s.test(t.version):case n.test(t.version)&&t.type==="composer":return t.version;case i.test(t.version)&&t.type==="composer":t.release=`${t.tool}:${t.version}.*`;return`${t.version}.*`;case!!t.repository&&i.test(t.version):return await getSemverVersion(t);default:return t.version.replace(/[^a-zA-Z0-9_.:@+,/-]/g,"")}}async function getRelease(e,t){e=e.includes("/")?e.split("/")[1]:e;return e.includes(":")?[t.tool,e.split(":")[1]].join(":"):t.tool}async function filterList(e){const t=/^composer($|:.*)/;const s=/^composer:?($|preview$|snapshot$|v?\d+(\.\d+)?$|v?\d+\.\d+\.\d+[\w-]*$)/;const r=e.filter(e=>{const r=extractChecksum(e);return s.test(r.release)||t.test(r.release)&&(r.checksum!==undefined||r.error!==undefined)});let n="composer";e=e.filter(e=>!t.test(extractChecksum(e).release));switch(true){case r[0]==undefined:break;default:n=r.at(-1).replace(/v(\d\S*)/,"$1");break}e.unshift(n);return e}async function getUrl(e){const t=e.version??"latest";if(t==="latest"||t===""){return[e.domain,e.repository,e.prefix,"latest",e.verb,e.tool+e.extension].filter(Boolean).join("/")}else{return[e.domain,e.repository,e.prefix,e.verb,e.version_prefix+e.version,e.tool+e.extension].filter(Boolean).join("/")}}async function getPharUrl(e){if(e.version==="latest"){return e.domain+"/"+e.tool+".phar"}else{return e.domain+"/"+e.tool+"-"+e.version_prefix+e.version+".phar"}}async function addArchive(e){return await getCommand(e.os,"tool")+await joins(e.url,e.tool,e.version_parameter)+(e.checksum?" "+e.checksum:"")}async function addPackage(e){const t=await getCommand(e.os,"composer_tool");const s=e.repository.split("/");const r=[s[1],e.release,s[0]+"/",e.scope].map(t=>safeArg(t,e.os)).join(" ");if(!e.fallback)return t+r;const n=await getData(e.release.replace(/\.\*$/,""),e.php_version,e.os,e.fallback);if(n.error)return t+r;return t+r+" "+safeArg(n.url,e.os)+" "+(n.version_parameter||'""')}async function addBlackfirePlayer(e){switch(e.os){case"win32":return await addLog("$cross",e.tool,e.tool+" is not a windows tool","win32");default:if(e.version=="latest"){if(/5\.[5-6]|7\.0/.test(e.php_version)){e.version="1.9.3"}else if(/7\.[1-4]|8\.0/.test(e.php_version)){e.version="1.22.0"}}e.url=await getPharUrl(e);return addArchive(e)}}async function addCastor(e){e.tool="castor."+e.os.replace("win32","windows")+"-amd64";e.url=await getUrl(e);e.tool="castor";e.version_parameter=u.existsSync("castor.php")?e.version_parameter:"";return await addArchive(e)}async function addComposer(e){const t=e.version.replace("latest","stable");const s=e.github;const r=e.domain;const n="https://dl.cloudsmith.io";const i="https://artifacts.setup-php.com";const o=`composer-${e.php_version}-${t}.phar`;const a=`${s}/shivammathur/composer-cache/releases/latest/download/${o}`;const c=`${n}/public/shivammathur/composer-cache/raw/files/${o}`;const l=`${i}/composer/${o}`;const d=`${r}/download/latest-2.2.x/composer.phar`;const u=/^5\.[3-6]$|^7\.[0-1]$/.test(e.php_version);const p=`${r}/composer-${t}.phar`;const f=`${r}/download/${t}/composer.phar`;let h=`${a},${l},${c}`;let w=`${r}/composer.phar`;let m="";switch(true){case/^snapshot$/.test(t):w=u?d:w;break;case/^preview$|^2$/.test(t):w=u?d:p;break;case/^1$/.test(t):w=p;break;case/^\d+\.\d+\.\d+(?:-[\w.-]+)?(?:\+[\w.-]+)?$/.test(e.version):if(skipGitHubAuthForComposerVersion(e.version)){cleanComposerAuthJson();m=" true"}h=`${s}/${e.repository}/releases/download/${e.version}/composer.phar`;w=f;break;default:w=u?d:p}const g=await readEnv("NO_TOOLS_CACHE")!=="true";e.url=g?`${h},${w}`:w;e.version_parameter=e.version+m;return await addArchive(e)}async function addDeployer(e){if(e.version==="latest"){e.url=e.domain+"/deployer.phar"}else{const t=await fetch("https://deployer.org/manifest.json");const s=JSON.parse(t.data);const r=Object.keys(s).find(t=>s[t].version===e.version);if(r){e.url=s[r].url}else{return await addLog("$cross","deployer","Version missing in deployer manifest",e.os)}}return await addArchive(e)}async function addDevTools(e){switch(e.os){case"linux":case"darwin":return"add_devtools "+e.tool;case"win32":return await addLog("$tick",e.tool,e.tool+" is not a windows tool","win32");default:return await utils_log("Platform "+e.os+" is not supported",e.os,"error")}}async function addPECL(e){return await getCommand(e.os,"pecl")}async function addPhing(e){e.url=e.domain+"/get/phing-"+e.version+e.extension;if(e.version!="latest"){[e.prefix,e.verb]=["releases","download"];e.domain=e.github;e.extension="-"+e.version+e.extension;e.url+=","+await getUrl(e)}return await addArchive(e)}async function addPhive(e){switch(true){case/5\.[3-5]/.test(e.php_version):return await addLog("$cross","phive","Phive is not supported on PHP "+e.php_version,e.os);case/5\.6|7\.0/.test(e.php_version):e.version="0.12.1";break;case/7\.1/.test(e.php_version):e.version="0.13.5";break;case/7\.2/.test(e.php_version):e.version="0.14.5";break;case/7\.3|7\.4/.test(e.php_version):e.version="0.15.3";break;case/^latest$/.test(e.version):e.version=await getLatestVersion(e);break}e.extension="-"+e.version+e.extension;e.url=await getUrl(e);return await addArchive(e)}async function addPHPUnitTools(e){if(e.version==="latest"){e.version=await search(e.packagist,e.php_version)??"latest"}e.url=await getPharUrl(e);if(e.url.match(/-\d+/)){e.url+=","+e.url.replace(/-(\d+)\.\d+\.\d+/,"-$1")}return await addArchive(e)}async function addWPCLI(e){if(e.version==="latest"){e.uri="wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true";e.url=[e.domain,e.uri].join("/")}else{e.extension="-"+e.version+e.extension;e.url=await getUrl(e)}return await addArchive(e)}async function getData(e,t,s,r={}){const n=i.join(V,"../src/configs/tools.json");const o=u.readFileSync(n,"utf8");const a=JSON.parse(o);e=e.replace(/\s+/g,"");const c=extractChecksum(e);e=c.release;const l=e.split(":");const d=l[0];const p=l[1];let f;if(Object.hasOwn(a,d)){f={...a[d],tool:d}}else{const e=Object.keys(a).find(e=>a[e].alias==d);if(e){f={...a[e],tool:e}}else if(d.includes("/")){f={tool:d.split("/")[1],repository:d,type:"composer"}}else{f={tool:d}}}f={...f,...r};const h="https://github.com";const w=f.domain??h;const m={tool:f.tool,version:"",url:"",os:s,php_version:t,github:h,domain:w,extension:f.extension??".phar",repository:f.repository??"",prefix:w===h?"releases":"",verb:w===h?"download":"",fetch_latest:f.fetch_latest??"false",scope:f.scope??"global",version_parameter:f.version_parameter!=null?JSON.stringify(f.version_parameter):"",version_prefix:f.version_prefix??"",release:"",packagist:f.packagist??f.repository??"",type:f.type,function:f.function,alias:f.alias,fallback:f.fallback};m.checksum=c.checksum;m.error=c.error;m.release=await getRelease(e,m);if(m.error!==undefined)return m;m.version=p?await getVersion(p,m):await getLatestVersion(m);m.url=await getUrl(m);return m}const N={castor:addCastor,composer:addComposer,deployer:addDeployer,dev_tools:addDevTools,phive:addPhive,blackfire_player:addBlackfirePlayer,pecl:addPECL,phing:addPhing,phpunit:addPHPUnitTools,phpcpd:addPHPUnitTools,wp_cli:addWPCLI};async function supportsChecksum(e){switch(e.type){case"phar":return true;case"custom-function":return!["pecl","dev_tools"].includes(e.function??"");default:return false}}async function addTools(e,t,s){let r="\n";if(e==="none"){return""}else{r+=await stepLog("Setup Tools",s)}const n=await filterList(await CSVArray(e));await asyncForEach(n,async function(e){const n=await getData(e,t,s);r+="\n";switch(true){case n.error!==undefined:r+=await addLog("$cross",n.tool,n.error,n.os);break;case n.checksum!==undefined&&!await supportsChecksum(n):r+=await addLog("$cross",n.tool,"Checksum verification is not supported for "+n.tool,n.os);break;case"phar"===n.type:r+=await addArchive(n);break;case"composer"===n.type:r+=await addPackage(n);break;case"custom-package"===n.type:r+=await customPackage(n.tool.split("-")[0],"tools",n.version,n.os);break;case"custom-function"===n.type:if(!n.function){r+=await addLog("$cross",n.tool,n.tool+" has no function defined. Please report this issue.",n.os)}else{r+=await N[n.function](n)}break;case/^none$/.test(n.tool):break;default:r+=await addLog("$cross",n.tool,"Tool "+n.tool+" is not supported",n.os);break}});return r}const q=i.dirname((0,n.fileURLToPath)(import.meta.url));async function getScript(e){const t="https://setup-php.com/sponsor";const s=e+await scriptExtension(e);const r=i.join(q,"../src/scripts",s);const n=r.replace(e,"run");const o=sanitizeShellInput(await utils_getInput("extensions",false),true);const a=await utils_getInput("ini-values",false);const c=await utils_getInput("coverage",false);const l=await utils_getInput("tools",false);const d=await parseVersion(await readPHPVersion());const p=await parseIniFile(await utils_getInput("ini-file",false));let f=await joins(".",r,`'${d}'`,p);if(o){f+=await addExtension(o,d,e)}f+=await addTools(l,d,e);if(c){f+=await addCoverage(c,d,e)}if(a){f+=await addINIValues(a,e)}f+="\n"+await stepLog(`Sponsor setup-php`,e);f+="\n"+await addLog("$tick","setup-php",t,e);u.writeFileSync(n,f,{mode:493});return await addVerbose(n,e)}async function setEnv(){process.env["fail_fast"]=await utils_getInput("fail-fast",false);process.env["GITHUB_TOKEN"]??=await utils_getInput("github-token",false)}async function run(){await setEnv();const e=process.platform;const t=await scriptTool(e);const s=await getScript(e);await exec(t+s)}(async()=>{await run()})().catch(e=>{setFailed(e.message)});var z=r.IT;var H=r.eF;var Z=r.GJ;export{z as getScript,H as run,Z as setEnv};