fern-api 4.32.1 → 4.32.2

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.
Files changed (2) hide show
  1. package/cli.cjs +5 -5
  2. package/package.json +1 -1
package/cli.cjs CHANGED
@@ -1653,7 +1653,7 @@ ${r_a.default.cursorShow}`)}releaseCursor(){this.extraLinesUnderPrompt>0&&nBi(th
1653
1653
  `+jPe.default.red(">> ")+t),this.screen.render(r,n)}getMaskedValue(t){return this.status==="answered"?this.opt.mask?jPe.default.cyan(p_a(t,this.opt.mask)):jPe.default.italic(jPe.default.dim("[hidden]")):this.opt.mask?p_a(t,this.opt.mask):jPe.default.italic(jPe.default.dim("[input is hidden] "))}getSpinningValue(t){return this.getMaskedValue(t)}filterInput(t){return t||(this.opt.default==null?"":this.opt.default)}onEnd(t){this.status="answered",this.answer=t.value,this.render(),this.screen.done(),this.done(t.value)}onError(t){this.render(t.isValid)}onKeypress(){this.opt.default&&=void 0,this.render()}};var JEr=_e(MI(),1);var l1a=_e(jBi(),1),HEr=require("child_process"),k9e=require("fs"),$Er=_e(require("path"),1),p1a=_e(require("os"),1),f1a=require("crypto"),IOi=_e(u1a(),1);var qEr=class extends Error{originalError;constructor(t){super(`Failed to create temporary file. ${t.message}`),this.originalError=t}};var WCt=class extends Error{originalError;constructor(t){super(`Failed to launch editor. ${t.message}`),this.originalError=t}};var GEr=class extends Error{originalError;constructor(t){super(`Failed to read temporary file. ${t.message}`),this.originalError=t}};var WEr=class extends Error{originalError;constructor(t){super(`Failed to remove temporary file. ${t.message}`),this.originalError=t}};function KEr(e="",t,r){let n=new wOi(e,r);n.runAsync((i,o)=>{if(i)setImmediate(t,i,void 0);else try{n.cleanup(),setImmediate(t,void 0,o)}catch(s){setImmediate(t,s,void 0)}})}function c1a(e){return e?e.replace(/[^a-zA-Z0-9_.-]/g,"_"):""}function Jbf(e){let t=[],r="";for(let n=0;n<e.length;n++){let i=e.charAt(n);n>0&&i===" "&&e[n-1]!=="\\"&&r.length>0?(t.push(r),r=""):r=`${r}${i}`}return r.length>0&&t.push(r),t}var wOi=class{text="";tempFile;editor;lastExitStatus=0;fileOptions={};get temp_file(){return console.log("DEPRECATED: temp_file. Use tempFile moving forward."),this.tempFile}get last_exit_status(){return console.log("DEPRECATED: last_exit_status. Use lastExitStatus moving forward."),this.lastExitStatus}constructor(t="",r){this.text=t,r&&(this.fileOptions=r),this.determineEditor(),this.createTemporaryFile()}run(){return this.launchEditor(),this.readTemporaryFile(),this.text}runAsync(t){try{this.launchEditorAsync(()=>{try{this.readTemporaryFile(),setImmediate(t,void 0,this.text)}catch(r){setImmediate(t,r,void 0)}})}catch(r){setImmediate(t,r,void 0)}}cleanup(){this.removeTemporaryFile()}determineEditor(){let t=process.env.VISUAL?process.env.VISUAL:process.env.EDITOR?process.env.EDITOR:process.platform.startsWith("win")?"notepad":"vim",r=Jbf(t).map(i=>i.replace("\\ "," ")),n=r.shift();this.editor={args:r,bin:n}}createTemporaryFile(){try{let t=this.fileOptions.dir??p1a.default.tmpdir(),r=(0,f1a.randomUUID)(),n=c1a(this.fileOptions.prefix),i=c1a(this.fileOptions.postfix),o=`${n}${r}${i}`,s=$Er.default.resolve(t,o),a=$Er.default.resolve(t)+$Er.default.sep;if(!s.startsWith(a))throw new Error("Resolved temporary file escaped the base directory");this.tempFile=s;let u={encoding:"utf8",flag:"wx"};Object.prototype.hasOwnProperty.call(this.fileOptions,"mode")&&(u.mode=this.fileOptions.mode),(0,k9e.writeFileSync)(this.tempFile,this.text,u)}catch(t){throw new qEr(t)}}readTemporaryFile(){try{let t=(0,k9e.readFileSync)(this.tempFile);if(t.length===0)this.text="";else{let r=(0,l1a.detect)(t)??"utf8";IOi.default.encodingExists(r)||(r="utf8"),this.text=IOi.default.decode(t,r)}}catch(t){throw new GEr(t)}}removeTemporaryFile(){try{(0,k9e.unlinkSync)(this.tempFile)}catch(t){throw new WEr(t)}}launchEditor(){try{let t=(0,HEr.spawnSync)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"});this.lastExitStatus=t.status??0}catch(t){throw new WCt(t)}}launchEditorAsync(t){try{(0,HEr.spawn)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"}).on("exit",n=>{this.lastExitStatus=n,setImmediate(t)})}catch(r){throw new WCt(r)}}};var d1a=_e(LQ(),1);var $Ct=class extends LI{_run(t){this.done=t,this.editorResult=new d1a.Subject;let r=r1(this.rl);this.lineSubscription=r.line.subscribe(this.startExternalEditor.bind(this));let n=this.opt.waitUserInput===void 0?!0:this.opt.waitUserInput,i=this.handleSubmitEvents(this.editorResult);return i.success.forEach(this.onEnd.bind(this)),i.error.forEach(this.onError.bind(this)),this.currentText=this.opt.default,this.opt.default=null,n?this.render():this.startExternalEditor(),this}render(t){let r="",n=this.getQuestion();n+=this.status==="answered"?JEr.default.dim("Received"):JEr.default.dim("Press <enter> to launch your preferred editor."),t&&(r=JEr.default.red(">> ")+t),this.screen.render(n,r)}startExternalEditor(){this.rl.pause(),KEr(this.currentText,this.endExternalEditor.bind(this),{postfix:this.opt.postfix??".txt"})}endExternalEditor(t,r){this.rl.resume(),t?this.editorResult.error(t):this.editorResult.next(r)}onEnd(t){this.editorResult.unsubscribe(),this.lineSubscription.unsubscribe(),this.answer=t.value,this.status="answered",this.render(),this.screen.done(),this.done(this.answer)}onError(t){this.render(t.isValid)}};var y1a=require("stream");var g1a=_e(require("readline"),1),A1a=_e(h1a(),1),zPe=class{constructor(t){this.rl||=g1a.default.createInterface(Xbf(t)),this.rl.resume(),this.onForceClose=this.onForceClose.bind(this),process.on("exit",this.onForceClose),this.rl.on("SIGINT",this.onForceClose)}onForceClose(){this.close(),process.kill(process.pid,"SIGINT"),console.log("")}close(){this.rl.removeListener("SIGINT",this.onForceClose),process.removeListener("exit",this.onForceClose),this.rl.output.unmute(),this.activePrompt&&typeof this.activePrompt.close=="function"&&this.activePrompt.close(),this.rl.output.end(),this.rl.pause(),this.rl.close()}};function Xbf(e={}){e.skipTTYChecks=e.skipTTYChecks===void 0?!0:e.skipTTYChecks;let t=e.input||process.stdin;if(!e.skipTTYChecks&&!t.isTTY){let i=new Error("Prompts can not be meaningfully rendered in non-TTY environments");throw i.isTtyError=!0,i}let r=new A1a.default;return r.pipe(e.output||process.stdout),{terminal:!0,...e,input:t,output:r}}var HCt=class extends zPe{constructor(t={}){super(t),this.log=new y1a.Writable({write:(r,n,i)=>{this.writeLog(r),i()}}),this.bottomBar=t.bottomBar||"",this.render()}render(){return this.write(this.bottomBar),this}clean(){return TCt(this.rl,this.bottomBar.split(`
1654
1654
  `).length),this}updateBottomBar(t){return TCt(this.rl,1),this.rl.output.unmute(),this.clean(),this.bottomBar=t,this.render(),this.rl.output.mute(),this}writeLog(t){return this.rl.output.unmute(),this.clean(),this.rl.output.write(this.enforceLF(t.toString())),this.render(),this.rl.output.mute(),this}enforceLF(t){return/[\n\r]$/.test(t)?t:t+`
1655
1655
  `}write(t){let r=t.split(/\n/);this.height=r.length,this.rl.setPrompt(r.at(-1)),this.rl.output.rows===0&&this.rl.output.columns===0&&yEr(this.rl,t.length+this.rl.line.length),this.rl.output.write(t)}};var Ef=_e(LQ(),1),v1a=_e(uCt(),1);var YEr=_e(LQ(),1),b1a=_e(uCt(),1),XEr=function(e,t,r){return typeof e[t]!="function"?(0,YEr.of)(e):(0,YEr.from)((0,b1a.default)(e[t])(r).then(n=>(e[t]=n,e)))};var E1a={set:(e,t="",r)=>{let n=e;t.split(".").forEach((i,o,s)=>{i==="__proto__"||i==="constructor"||(o===s.length-1?n[i]=r:(!(i in n)||typeof n[i]!="object")&&(n[i]={}),n=n[i])})},get:(e,t="",r)=>{let n=o=>String.prototype.split.call(t,o).filter(Boolean).reduce((s,a)=>s!=null?s[a]:s,e),i=n(/[,[\]]+?/)||n(/[,.[\]]+?/);return i===void 0||i===e?r:i}},Q9e=class extends zPe{constructor(t,r){super(r),this.prompts=t}run(t,r){this.answers=typeof r=="object"?{...r}:{};let n;return Array.isArray(t)?n=(0,Ef.from)(t):(0,Ef.isObservable)(t)?n=t:Object.values(t).every(i=>typeof i=="object"&&!Array.isArray(i)&&i!=null)?n=(0,Ef.from)(Object.entries(t).map(([i,o])=>({name:i,...o}))):n=(0,Ef.from)([t]),this.process=n.pipe((0,Ef.concatMap)(this.processQuestion.bind(this)),(0,Ef.publish)()),this.process.connect(),this.process.pipe((0,Ef.reduce)((i,o)=>(E1a.set(i,o.name,o.answer),i),this.answers)).toPromise(Promise).then(this.onCompletion.bind(this),this.onError.bind(this))}onCompletion(){return this.close(),this.answers}onError(t){return this.close(),Promise.reject(t)}processQuestion(t){return t={...t},(0,Ef.defer)(()=>(0,Ef.of)(t).pipe((0,Ef.concatMap)(this.setDefaultType.bind(this)),(0,Ef.concatMap)(this.filterIfRunnable.bind(this)),(0,Ef.concatMap)(()=>XEr(t,"message",this.answers)),(0,Ef.concatMap)(()=>XEr(t,"default",this.answers)),(0,Ef.concatMap)(()=>XEr(t,"choices",this.answers)),(0,Ef.concatMap)(this.fetchAnswer.bind(this))))}fetchAnswer(t){let r=this.prompts[t.type];return this.activePrompt=new r(t,this.rl,this.answers),(0,Ef.defer)(()=>(0,Ef.from)(this.activePrompt.run().then(n=>({name:t.name,answer:n}))))}setDefaultType(t){return this.prompts[t.type]||(t.type="input"),(0,Ef.defer)(()=>(0,Ef.of)(t))}filterIfRunnable(t){if(t.askAnswered!==!0&&E1a.get(this.answers,t.name)!==void 0)return Ef.EMPTY;if(t.when===!1)return Ef.EMPTY;if(typeof t.when!="function")return(0,Ef.of)(t);let{answers:r}=this;return(0,Ef.defer)(()=>(0,Ef.from)((0,v1a.default)(t.when)(r).then(n=>{if(n)return t})).pipe((0,Ef.filter)(n=>n!=null)))}};function I1a(e){let t=function(r,n){let i;try{i=new Q9e(t.prompts,e)}catch(s){return Promise.reject(s)}let o=i.run(r,n);return o.ui=i,o};return t.prompts={},t.registerPrompt=function(r,n){return t.prompts[r]=n,this},t.restoreDefaultPrompts=function(){this.registerPrompt("list",RCt),this.registerPrompt("input",NPe),this.registerPrompt("number",FCt),this.registerPrompt("confirm",kCt),this.registerPrompt("rawlist",QCt),this.registerPrompt("expand",NCt),this.registerPrompt("checkbox",jCt),this.registerPrompt("password",MCt),this.registerPrompt("editor",$Ct)},t.restoreDefaultPrompts(),t}var xOi=I1a();function e0f(e,t){xOi.registerPrompt(e,t)}function t0f(){xOi.restoreDefaultPrompts()}var r0f={prompt:xOi,ui:{BottomBar:HCt,Prompt:Q9e},createPromptModule:I1a,registerPrompt:e0f,restoreDefaultPrompts:t0f,Separator:gF},lp=r0f;var N9e=require("path");function C1a(){let e=n0f();return async t=>{for(let r of t)r.module=e(r.filename);return t}}function n0f(e=process.argv[1]?(0,N9e.dirname)(process.argv[1]):process.cwd(),t=N9e.sep==="\\"){let r=t?w1a(e):e;return n=>{if(!n)return;let i=t?w1a(n):n,{dir:o,base:s,ext:a}=N9e.posix.parse(i);(a===".js"||a===".mjs"||a===".cjs")&&(s=s.slice(0,-1*a.length));let u=decodeURIComponent(s);o||(o=".");let c=o.lastIndexOf("/node_modules");if(c>-1)return`${o.slice(c+14).replace(/\//g,".")}:${u}`;if(o.startsWith(r)){let l=o.slice(r.length+1).replace(/\//g,".");return l?`${l}:${u}`:u}return u}}function w1a(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var _Oi=e=>{if("flags"in e){let t=x1a(e.flags),r=_1a(e.flags);return{...e,featureFlags:t,featureFlagPayloads:r}}{let t=e.featureFlags??{},r=Object.fromEntries(Object.entries(e.featureFlagPayloads||{}).map(([i,o])=>[i,SOi(o)])),n=Object.fromEntries(Object.entries(t).map(([i,o])=>[i,i0f(i,o,r[i])]));return{...e,featureFlags:t,featureFlagPayloads:r,flags:n}}};function i0f(e,t,r){return{key:e,enabled:typeof t=="string"?!0:t,variant:typeof t=="string"?t:void 0,reason:void 0,metadata:{id:void 0,version:void 0,payload:r?JSON.stringify(r):void 0,description:void 0}}}var x1a=e=>Object.fromEntries(Object.entries(e??{}).map(([t,r])=>[t,KCt(r)]).filter(([,t])=>t!==void 0)),_1a=e=>{let t=e??{};return Object.fromEntries(Object.keys(t).filter(r=>{let n=t[r];return n.enabled&&n.metadata&&n.metadata.payload!==void 0}).map(r=>{let n=t[r].metadata?.payload;return[r,n?SOi(n):void 0]}))};var KCt=e=>e===void 0?void 0:e.variant??e.enabled,SOi=e=>{if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}};var ZEr="0123456789abcdef",evr=class e{constructor(t){this.bytes=t}static ofInner(t){if(t.length===16)return new e(t);throw new TypeError("not 128-bit length")}static fromFieldsV7(t,r,n,i){if(!Number.isInteger(t)||!Number.isInteger(r)||!Number.isInteger(n)||!Number.isInteger(i)||t<0||r<0||n<0||i<0||t>0xffffffffffff||r>4095||n>1073741823||i>4294967295)throw new RangeError("invalid field value");let o=new Uint8Array(16);return o[0]=t/2**40,o[1]=t/2**32,o[2]=t/2**24,o[3]=t/2**16,o[4]=t/256,o[5]=t,o[6]=112|r>>>8,o[7]=r,o[8]=128|n>>>24,o[9]=n>>>16,o[10]=n>>>8,o[11]=n,o[12]=i>>>24,o[13]=i>>>16,o[14]=i>>>8,o[15]=i,new e(o)}static parse(t){let r;switch(t.length){case 32:r=/^[0-9a-f]{32}$/i.exec(t)?.[0];break;case 36:r=/^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(t)?.slice(1,6).join("");break;case 38:r=/^\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\}$/i.exec(t)?.slice(1,6).join("");break;case 45:r=/^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(t)?.slice(1,6).join("");break;default:break}if(r){let n=new Uint8Array(16);for(let i=0;i<16;i+=4){let o=parseInt(r.substring(2*i,2*i+8),16);n[i+0]=o>>>24,n[i+1]=o>>>16,n[i+2]=o>>>8,n[i+3]=o}return new e(n)}throw new SyntaxError("could not parse UUID string")}toString(){let t="";for(let r=0;r<this.bytes.length;r++)t+=ZEr.charAt(this.bytes[r]>>>4),t+=ZEr.charAt(15&this.bytes[r]),(r===3||r===5||r===7||r===9)&&(t+="-");return t}toHex(){let t="";for(let r=0;r<this.bytes.length;r++)t+=ZEr.charAt(this.bytes[r]>>>4),t+=ZEr.charAt(15&this.bytes[r]);return t}toJSON(){return this.toString()}getVariant(){let t=this.bytes[8]>>>4;if(t<0)throw new Error("unreachable");if(t<=7)return this.bytes.every(r=>r===0)?"NIL":"VAR_0";if(t<=11)return"VAR_10";if(t<=13)return"VAR_110";if(t<=15)return this.bytes.every(r=>r===255)?"MAX":"VAR_RESERVED";throw new Error("unreachable")}getVersion(){return this.getVariant()==="VAR_10"?this.bytes[6]>>>4:void 0}clone(){return new e(this.bytes.slice(0))}equals(t){return this.compareTo(t)===0}compareTo(t){for(let r=0;r<16;r++){let n=this.bytes[r]-t.bytes[r];if(n!==0)return Math.sign(n)}return 0}},BOi=class{constructor(t){this.timestamp=0,this.counter=0,this.random=t??o0f()}generate(){return this.generateOrResetCore(Date.now(),1e4)}generateOrAbort(){return this.generateOrAbortCore(Date.now(),1e4)}generateOrResetCore(t,r){let n=this.generateOrAbortCore(t,r);return n===void 0&&(this.timestamp=0,n=this.generateOrAbortCore(t,r)),n}generateOrAbortCore(t,r){if(!Number.isInteger(t)||t<1||t>0xffffffffffff)throw new RangeError("`unixTsMs` must be a 48-bit positive integer");if(r<0||r>0xffffffffffff)throw new RangeError("`rollbackAllowance` out of reasonable range");if(t>this.timestamp)this.timestamp=t,this.resetCounter();else{if(!(t+r>=this.timestamp))return;this.counter++,this.counter>4398046511103&&(this.timestamp++,this.resetCounter())}return evr.fromFieldsV7(this.timestamp,Math.trunc(this.counter/2**30),this.counter&2**30-1,this.random.nextUint32())}resetCounter(){this.counter=1024*this.random.nextUint32()+(1023&this.random.nextUint32())}generateV4(){let t=new Uint8Array(Uint32Array.of(this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32()).buffer);return t[6]=64|t[6]>>>4,t[8]=128|t[8]>>>2,evr.ofInner(t)}},o0f=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())}),S1a,sK=()=>s0f().toString(),s0f=()=>(S1a||(S1a=new BOi)).generate();var yF=(function(e){return e.AnonymousId="anonymous_id",e.DistinctId="distinct_id",e.Props="props",e.EnablePersonProcessing="enable_person_processing",e.PersonMode="person_mode",e.FeatureFlagDetails="feature_flag_details",e.FeatureFlags="feature_flags",e.FeatureFlagPayloads="feature_flag_payloads",e.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",e.BootstrapFeatureFlags="bootstrap_feature_flags",e.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",e.OverrideFeatureFlags="override_feature_flags",e.Queue="queue",e.OptedOut="opted_out",e.SessionId="session_id",e.SessionStartTimestamp="session_start_timestamp",e.SessionLastTimestamp="session_timestamp",e.PersonProperties="person_properties",e.GroupProperties="group_properties",e.InstalledAppBuild="installed_app_build",e.InstalledAppVersion="installed_app_version",e.SessionReplay="session_replay",e.SurveyLastSeenDate="survey_last_seen_date",e.SurveysSeen="surveys_seen",e.Surveys="surveys",e.RemoteConfig="remote_config",e.FlagsEndpointWasHit="flags_endpoint_was_hit",e})({});var a0f=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterest","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"],B1a=function(e,t=[]){if(!e)return!1;let r=e.toLowerCase();return a0f.concat(t).some(n=>{let i=n.toLowerCase();return r.indexOf(i)!==-1})};var c0f=Array.isArray,O1a=Object.prototype,$Ny=O1a.hasOwnProperty,OOi=O1a.toString,POi=c0f||function(e){return OOi.call(e)==="[object Array]"};var TOi=e=>e===Object(e)&&!POi(e);var j9e=e=>e===void 0,JCt=e=>OOi.call(e)=="[object String]",P1a=e=>JCt(e)&&e.trim().length===0;var T1a=e=>OOi.call(e)=="[object Number]"&&e===e;var DOi=e=>e instanceof Error;function YCt(e){return e===null||typeof e!="object"}function VPe(e,t){return Object.prototype.toString.call(e)===`[object ${t}]`}function D1a(e){return VPe(e,"ErrorEvent")}function tvr(e){return!j9e(Event)&&l0f(e,Event)}function R1a(e){return VPe(e,"Object")}function l0f(e,t){try{return e instanceof t}catch{return!1}}function XCt(e,t,r,n,i){return t>r&&(n.warn("min cannot be greater than max."),t=r),T1a(e)?e>r?(n.warn(" cannot be greater than max: "+r+". Using max value instead."),r):e<t?(n.warn(" cannot be less than min: "+t+". Using min value instead."),t):e:(n.warn(" must be a number. using max or fallback. max: "+r+", fallback: "+i),XCt(i||r,t,r,n))}var p0f=864e5,rvr=class{constructor(t){this._buckets={},this._onBucketRateLimited=t._onBucketRateLimited,this._bucketSize=XCt(t.bucketSize,0,100,t._logger),this._refillRate=XCt(t.refillRate,0,this._bucketSize,t._logger),this._refillInterval=XCt(t.refillInterval,0,p0f,t._logger)}_applyRefill(t,r){let n=r-t.lastAccess,i=Math.floor(n/this._refillInterval);if(i>0){let o=i*this._refillRate;t.tokens=Math.min(t.tokens+o,this._bucketSize),t.lastAccess=t.lastAccess+i*this._refillInterval}}consumeRateLimit(t){let r=Date.now(),n=String(t),i=this._buckets[n];return i?this._applyRefill(i,r):(i={tokens:this._bucketSize,lastAccess:r},this._buckets[n]=i),i.tokens===0?!0:(i.tokens--,i.tokens===0&&this._onBucketRateLimited?.(t),i.tokens===0)}stop(){this._buckets={}}};var nvr=class{add(t){let r=sK();return this.promiseByIds[r]=t,t.catch(()=>{}).finally(()=>{delete this.promiseByIds[r]}),t}async join(){let t=Object.values(this.promiseByIds),r=t.length;for(;r>0;)await Promise.all(t),t=Object.values(this.promiseByIds),r=t.length}get length(){return Object.keys(this.promiseByIds).length}constructor(){this.promiseByIds={}}};function f0f(e=console){return{log:e.log.bind(e),warn:e.warn.bind(e),error:e.error.bind(e),debug:e.debug.bind(e)}}var F1a=(e,t,r)=>{function n(o,...s){t(()=>{let a=r[o];a(e,...s)})}return{info:(...o)=>{n("log",...o)},warn:(...o)=>{n("warn",...o)},error:(...o)=>{n("error",...o)},critical:(...o)=>{r.error(e,...o)},createLogger:o=>F1a(`${e} ${o}`,t,r)}},d0f=e=>e();function k1a(e,t=d0f){return F1a(e,t,f0f())}var L9e="Mobile",ovr="iOS",M9e="Android",Q1a="Tablet",ojy=M9e+" "+Q1a;var m0f="Apple",sjy=m0f+" Watch",N1a="Safari",svr="BlackBerry",j1a="Samsung",h0f=j1a+"Browser",g0f=j1a+" Internet",avr="Chrome",A0f=avr+" OS",y0f=avr+" "+ovr,M1a="Internet Explorer",b0f=M1a+" "+L9e,FOi="Opera",ajy=FOi+" Mini",L1a="Edge",E0f="Microsoft "+L1a,kOi="Firefox",v0f=kOi+" "+ovr,QOi="Nintendo",NOi="PlayStation",ivr="Xbox",I0f=M9e+" "+L9e,w0f=L9e+" "+N1a,ZCt="Windows",C0f=ZCt+" Phone";var U1a="Generic",ujy=U1a+" "+L9e.toLowerCase(),cjy=U1a+" "+Q1a.toLowerCase(),x0f="Konqueror",TP="(\\d+(\\.\\d+)?)",ROi=new RegExp("Version/"+TP),ljy=new RegExp(ivr,"i"),pjy=new RegExp(NOi+" \\w+","i"),fjy=new RegExp(QOi+" \\w+","i"),_0f=new RegExp(svr+"|PlayBook|BB10","i"),S0f={"NT3.51":"NT 3.11","NT4.0":"NT 4.0","5.0":"2000","5.1":"XP","5.2":"XP","6.0":"Vista","6.1":"7","6.2":"8","6.3":"8.1","6.4":"10","10.0":"10"};var djy={[b0f]:[new RegExp("rv:"+TP)],[E0f]:[new RegExp(L1a+"?\\/"+TP)],[avr]:[new RegExp("("+avr+"|CrMo)\\/"+TP)],[y0f]:[new RegExp("CriOS\\/"+TP)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+TP)],[N1a]:[ROi],[w0f]:[ROi],[FOi]:[new RegExp("("+FOi+"|OPR)\\/"+TP)],[kOi]:[new RegExp(kOi+"\\/"+TP)],[v0f]:[new RegExp("FxiOS\\/"+TP)],[x0f]:[new RegExp("Konqueror[:/]?"+TP,"i")],[svr]:[new RegExp(svr+" "+TP),ROi],[I0f]:[new RegExp("android\\s"+TP,"i")],[g0f]:[new RegExp(h0f+"\\/"+TP)],[M1a]:[new RegExp("(rv:|MSIE )"+TP)],Mozilla:[new RegExp("rv:"+TP)]};var mjy=[[new RegExp(ivr+"; "+ivr+" (.*?)[);]","i"),e=>[ivr,e&&e[1]||""]],[new RegExp(QOi,"i"),[QOi,""]],[new RegExp(NOi,"i"),[NOi,""]],[_0f,[svr,""]],[new RegExp(ZCt,"i"),(e,t)=>{if(/Phone/.test(t)||/WPDesktop/.test(t))return[C0f,""];if(new RegExp(L9e).test(t)&&!/IEMobile\b/.test(t))return[ZCt+" "+L9e,""];let r=/Windows NT ([0-9.]+)/i.exec(t);if(r&&r[1]){let n=r[1],i=S0f[n]||"";return/arm/i.test(t)&&(i="RT"),[ZCt,i]}return[ZCt,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,e=>{if(e&&e[3]){let t=[e[3],e[4],e[5]||"0"];return[ovr,t.join(".")]}return[ovr,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,e=>{let t="";return e&&e.length>=3&&(t=j9e(e[2])?e[3]:e[2]),["watchOS",t]}],[new RegExp("("+M9e+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+M9e+")","i"),e=>{if(e&&e[2]){let t=[e[2],e[3],e[4]||"0"];return[M9e,t.join(".")]}return[M9e,""]}],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,e=>{let t=["Mac OS X",""];if(e&&e[1]){let r=[e[1],e[2],e[3]||"0"];t[1]=r.join(".")}return t}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[A0f,""]],[/Linux|debian/i,["Linux",""]]];var z1a="utf8";function V1a(e,t){if(!e||typeof e!="string"||B0f(e))throw new Error(t)}function B0f(e){return e.trim().length===0}function q1a(e){return e?.replace(/\/+$/,"")}async function G1a(e,t){let r=null;for(let n=0;n<t.retryCount+1;n++){n>0&&await new Promise(i=>setTimeout(i,t.retryDelay));try{return await e()}catch(i){if(r=i,!t.retryCheck(i))throw i}}throw r}function uvr(){return new Date().toISOString()}function qPe(e,t){let r=setTimeout(e,t);return r?.unref&&r?.unref(),r}var W1a=e=>e instanceof Error;function jOi(e){return Promise.all(e.map(t=>(t??Promise.resolve()).then(r=>({status:"fulfilled",value:r}),r=>({status:"rejected",reason:r}))))}var cvr=class{constructor(){this.events={},this.events={}}on(t,r){return this.events[t]||(this.events[t]=[]),this.events[t].push(r),()=>{this.events[t]=this.events[t].filter(n=>n!==r)}}emit(t,r){for(let n of this.events[t]||[])n(r);for(let n of this.events["*"]||[])n(t,r)}};function $1a(){return"CompressionStream"in globalThis}async function MOi(e,t=!0){try{let n=new Blob([e],{type:"text/plain"}).stream().pipeThrough(new CompressionStream("gzip"));return await new Response(n).blob()}catch(r){return t&&console.error("Failed to gzip compress data",r),null}}var GPe=class extends Error{constructor(t,r){super("HTTP error while fetching PostHog: status="+t.status+", reqByteLength="+r),this.response=t,this.reqByteLength=r,this.name="PostHogFetchHttpError"}get status(){return this.response.status}get text(){return this.response.text()}get json(){return this.response.json()}},U9e=class extends Error{constructor(t){super("Network error while fetching PostHog",t instanceof Error?{cause:t}:{}),this.error=t,this.name="PostHogFetchNetworkError"}};async function H1a(e){if(e instanceof GPe){let t="";try{t=await e.text}catch{}console.error(`Error while flushing PostHog: message=${e.message}, response body=${t}`,e)}else console.error("Error while flushing PostHog",e);return Promise.resolve()}function LOi(e){return typeof e=="object"&&(e instanceof GPe||e instanceof U9e)}function K1a(e){return typeof e=="object"&&e instanceof GPe&&e.status===413}var ext=class{constructor(t,r={}){this.flushPromise=null,this.shutdownPromise=null,this.promiseQueue=new nvr,this._events=new cvr,this._isInitialized=!1,V1a(t,"You must pass your PostHog project's api key."),this.apiKey=t,this.host=q1a(r.host||"https://us.i.posthog.com"),this.flushAt=r.flushAt?Math.max(r.flushAt,1):20,this.maxBatchSize=Math.max(this.flushAt,r.maxBatchSize??100),this.maxQueueSize=Math.max(this.flushAt,r.maxQueueSize??1e3),this.flushInterval=r.flushInterval??1e4,this.preloadFeatureFlags=r.preloadFeatureFlags??!0,this.defaultOptIn=r.defaultOptIn??!0,this.disableSurveys=r.disableSurveys??!1,this._retryOptions={retryCount:r.fetchRetryCount??3,retryDelay:r.fetchRetryDelay??3e3,retryCheck:LOi},this.requestTimeout=r.requestTimeout??1e4,this.featureFlagsRequestTimeoutMs=r.featureFlagsRequestTimeoutMs??3e3,this.remoteConfigRequestTimeoutMs=r.remoteConfigRequestTimeoutMs??3e3,this.disableGeoip=r.disableGeoip??!0,this.disabled=r.disabled??!1,this.historicalMigration=r?.historicalMigration??!1,this._initPromise=Promise.resolve(),this._isInitialized=!0,this._logger=k1a("[PostHog]",this.logMsgIfDebug.bind(this)),this.evaluationContexts=r?.evaluationContexts??r?.evaluationEnvironments,r?.evaluationEnvironments&&!r?.evaluationContexts&&this._logger.warn("evaluationEnvironments is deprecated. Use evaluationContexts instead. This property will be removed in a future version."),this.disableCompression=!$1a()||(r?.disableCompression??!1)}logMsgIfDebug(t){this.isDebug&&t()}wrap(t){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized)return t();this._initPromise.then(()=>t())}getCommonEventProperties(){return{$lib:this.getLibraryId(),$lib_version:this.getLibraryVersion()}}get optedOut(){return this.getPersistedProperty(yF.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(yF.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(yF.OptedOut,!0)})}on(t,r){return this._events.on(t,r)}debug(t=!0){if(this.removeDebugCallback?.(),t){let r=this.on("*",(n,i)=>this._logger.info(n,i));this.removeDebugCallback=()=>{r(),this.removeDebugCallback=void 0}}}get isDebug(){return!!this.removeDebugCallback}get isDisabled(){return this.disabled}buildPayload(t){return{distinct_id:t.distinct_id,event:t.event,properties:{...t.properties||{},...this.getCommonEventProperties()}}}addPendingPromise(t){return this.promiseQueue.add(t)}identifyStateless(t,r,n){this.wrap(()=>{let i={...this.buildPayload({distinct_id:t,event:"$identify",properties:r})};this.enqueue("identify",i,n)})}async identifyStatelessImmediate(t,r,n){let i={...this.buildPayload({distinct_id:t,event:"$identify",properties:r})};await this.sendImmediate("identify",i,n)}captureStateless(t,r,n,i){this.wrap(()=>{let o=this.buildPayload({distinct_id:t,event:r,properties:n});this.enqueue("capture",o,i)})}async captureStatelessImmediate(t,r,n,i){let o=this.buildPayload({distinct_id:t,event:r,properties:n});await this.sendImmediate("capture",o,i)}aliasStateless(t,r,n,i){this.wrap(()=>{let o=this.buildPayload({event:"$create_alias",distinct_id:r,properties:{...n||{},distinct_id:r,alias:t}});this.enqueue("alias",o,i)})}async aliasStatelessImmediate(t,r,n,i){let o=this.buildPayload({event:"$create_alias",distinct_id:r,properties:{...n||{},distinct_id:r,alias:t}});await this.sendImmediate("alias",o,i)}groupIdentifyStateless(t,r,n,i,o,s){this.wrap(()=>{let a=this.buildPayload({distinct_id:o||`$${t}_${r}`,event:"$groupidentify",properties:{$group_type:t,$group_key:r,$group_set:n||{},...s||{}}});this.enqueue("capture",a,i)})}async getRemoteConfig(){await this._initPromise;let t=this.host;t==="https://us.i.posthog.com"?t="https://us-assets.i.posthog.com":t==="https://eu.i.posthog.com"&&(t="https://eu-assets.i.posthog.com");let r=`${t}/array/${this.apiKey}/config`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}};return this.fetchWithRetry(r,n,{retryCount:0},this.remoteConfigRequestTimeoutMs).then(i=>i.json()).catch(i=>{this._logger.error("Remote config could not be loaded",i),this._events.emit("error",i)})}async getFlags(t,r={},n={},i={},o={},s=!0){await this._initPromise;let a=s?"&config=true":"",u=`${this.host}/flags/?v=2${a}`,c={token:this.apiKey,distinct_id:t,groups:r,person_properties:n,group_properties:i,...o};this.evaluationContexts&&this.evaluationContexts.length>0&&(c.evaluation_contexts=this.evaluationContexts);let l={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"},body:JSON.stringify(c)};return this._logger.info("Flags URL",u),this.fetchWithRetry(u,l,{retryCount:0},this.featureFlagsRequestTimeoutMs).then(p=>p.json()).then(p=>({success:!0,response:_Oi(p)})).catch(p=>(this._events.emit("error",p),{success:!1,error:this.categorizeRequestError(p)}))}categorizeRequestError(t){if(t instanceof GPe)return{type:"api_error",statusCode:t.status};if(t instanceof U9e){let r=t.error;return r instanceof Error&&(r.name==="AbortError"||r.name==="TimeoutError")?{type:"timeout"}:{type:"connection_error"}}return{type:"unknown_error"}}async getFeatureFlagStateless(t,r,n={},i={},o={},s){await this._initPromise;let a=await this.getFeatureFlagDetailStateless(t,r,n,i,o,s);if(a===void 0)return{response:void 0,requestId:void 0};let u=KCt(a.response);return u===void 0&&(u=!1),{response:u,requestId:a.requestId}}async getFeatureFlagDetailStateless(t,r,n={},i={},o={},s){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(r,n,i,o,s,[t]);return a===void 0?void 0:{response:a.flags[t],requestId:a.requestId,evaluatedAt:a.evaluatedAt}}async getFeatureFlagPayloadStateless(t,r,n={},i={},o={},s){await this._initPromise;let a=await this.getFeatureFlagPayloadsStateless(r,n,i,o,s,[t]);if(!a)return;let u=a[t];return u===void 0?null:u}async getFeatureFlagPayloadsStateless(t,r={},n={},i={},o,s){return await this._initPromise,(await this.getFeatureFlagsAndPayloadsStateless(t,r,n,i,o,s)).payloads}async getFeatureFlagsStateless(t,r={},n={},i={},o,s){return await this._initPromise,await this.getFeatureFlagsAndPayloadsStateless(t,r,n,i,o,s)}async getFeatureFlagsAndPayloadsStateless(t,r={},n={},i={},o,s){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(t,r,n,i,o,s);return a?{flags:a.featureFlags,payloads:a.featureFlagPayloads,requestId:a.requestId}:{flags:void 0,payloads:void 0,requestId:void 0}}async getFeatureFlagDetailsStateless(t,r={},n={},i={},o,s){await this._initPromise;let a={};(o??this.disableGeoip)&&(a.geoip_disable=!0),s&&(a.flag_keys_to_evaluate=s);let u=await this.getFlags(t,r,n,i,a);if(!u.success)return;let c=u.response;return c.errorsWhileComputingFlags&&console.error("[FEATURE FLAGS] Error while computing feature flags, some flags may be missing or incorrect. Learn more at https://posthog.com/docs/feature-flags/best-practices"),c.quotaLimited?.includes("feature_flags")?(console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - feature flags unavailable. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),{flags:{},featureFlags:{},featureFlagPayloads:{},requestId:c?.requestId,quotaLimited:c.quotaLimited}):c}async getSurveysStateless(){if(await this._initPromise,this.disableSurveys===!0)return this._logger.info("Loading surveys is disabled."),[];let t=`${this.host}/api/surveys/?token=${this.apiKey}`,r={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}},i=(await this.fetchWithRetry(t,r).then(o=>{if(o.status!==200||!o.json){let s=`Surveys API could not be loaded: ${o.status}`,a=new Error(s);this._logger.error(a),this._events.emit("error",new Error(s));return}return o.json()}).catch(o=>{this._logger.error("Surveys API could not be loaded",o),this._events.emit("error",o)}))?.surveys;return i&&this._logger.info("Surveys fetched from API: ",JSON.stringify(i)),i??[]}get props(){return this._props||(this._props=this.getPersistedProperty(yF.Props)),this._props||{}}set props(t){this._props=t}async register(t){this.wrap(()=>{this.props={...this.props,...t},this.setPersistedProperty(yF.Props,this.props)})}async unregister(t){this.wrap(()=>{delete this.props[t],this.setPersistedProperty(yF.Props,this.props)})}processBeforeEnqueue(t){return t}async flushStorage(){}enqueue(t,r,n){this.wrap(()=>{if(this.optedOut)return void this._events.emit(t,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,r,n);if(i=this.processBeforeEnqueue(i),i===null)return;let o=this.getPersistedProperty(yF.Queue)||[];o.length>=this.maxQueueSize&&(o.shift(),this._logger.info("Queue is full, the oldest event is dropped.")),o.push({message:i}),this.setPersistedProperty(yF.Queue,o),this._events.emit(t,i),o.length>=this.flushAt&&this.flushBackground(),this.flushInterval&&!this._flushTimer&&(this._flushTimer=qPe(()=>this.flushBackground(),this.flushInterval))})}async sendImmediate(t,r,n){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized||await this._initPromise,this.optedOut)return void this._events.emit(t,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,r,n);if(i=this.processBeforeEnqueue(i),i===null)return;let o={api_key:this.apiKey,batch:[i],sent_at:uvr()};this.historicalMigration&&(o.historical_migration=!0);let s=JSON.stringify(o),a=`${this.host}/batch/`,u=this.disableCompression?null:await MOi(s,this.isDebug),c={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...u!==null&&{"Content-Encoding":"gzip"}},body:u||s};try{await this.fetchWithRetry(a,c)}catch(l){this._events.emit("error",l)}}prepareMessage(t,r,n){let i={...r,type:t,library:this.getLibraryId(),library_version:this.getLibraryVersion(),timestamp:n?.timestamp?n?.timestamp:uvr(),uuid:n?.uuid?n.uuid:sK()};return(n?.disableGeoip??this.disableGeoip)&&(i.properties||(i.properties={}),i.properties.$geoip_disable=!0),i.distinctId&&(i.distinct_id=i.distinctId,delete i.distinctId),i}clearFlushTimer(){this._flushTimer&&(clearTimeout(this._flushTimer),this._flushTimer=void 0)}flushBackground(){this.flush().catch(async t=>{await H1a(t)})}async flush(){let t=jOi([this.flushPromise]).then(()=>this._flush());return this.flushPromise=t,this.addPendingPromise(t),jOi([t]).then(()=>{this.flushPromise===t&&(this.flushPromise=null)}),t}getCustomHeaders(){let t=this.getCustomUserAgent(),r={};return t&&t!==""&&(r["User-Agent"]=t),r}async _flush(){this.clearFlushTimer(),await this._initPromise;let t=this.getPersistedProperty(yF.Queue)||[];if(!t.length)return;let r=[],n=t.length;for(;t.length>0&&r.length<n;){let i=t.slice(0,this.maxBatchSize),o=i.map(f=>f.message),s=async()=>{let m=(this.getPersistedProperty(yF.Queue)||[]).slice(i.length);this.setPersistedProperty(yF.Queue,m),t=m,await this.flushStorage()},a={api_key:this.apiKey,batch:o,sent_at:uvr()};this.historicalMigration&&(a.historical_migration=!0);let u=JSON.stringify(a),c=`${this.host}/batch/`,l=this.disableCompression?null:await MOi(u,this.isDebug),p={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...l!==null&&{"Content-Encoding":"gzip"}},body:l||u},d={retryCheck:f=>K1a(f)?!1:LOi(f)};try{await this.fetchWithRetry(c,p,d)}catch(f){if(K1a(f)&&o.length>1){this.maxBatchSize=Math.max(1,Math.floor(o.length/2)),this._logger.warn(`Received 413 when sending batch of size ${o.length}, reducing batch size to ${this.maxBatchSize}`);continue}throw f instanceof U9e||await s(),this._events.emit("error",f),f}await s(),r.push(...o)}this._events.emit("flush",r)}async fetchWithRetry(t,r,n,i){AbortSignal.timeout??=function(a){let u=new AbortController;return setTimeout(()=>u.abort(),a),u.signal};let o=r.body?r.body:"",s=-1;try{s=o instanceof Blob?o.size:Buffer.byteLength(o,z1a)}catch{o instanceof Blob?s=o.size:s=new TextEncoder().encode(o).length}return await G1a(async()=>{let a=null;try{a=await this.fetch(t,{signal:AbortSignal.timeout(i??this.requestTimeout),...r})}catch(c){throw new U9e(c)}if(!(r.mode==="no-cors")&&(a.status<200||a.status>=400))throw new GPe(a,s);return a},{...this._retryOptions,...n})}async _shutdown(t=3e4){await this._initPromise;let r=!1;this.clearFlushTimer();let n=async()=>{try{for(await this.promiseQueue.join();!((this.getPersistedProperty(yF.Queue)||[]).length===0||(await this.flush(),r)););}catch(i){if(!LOi(i))throw i;await H1a(i)}};return Promise.race([new Promise((i,o)=>{qPe(()=>{this._logger.error("Timed out while shutting down PostHog"),r=!0,o("Timeout while shutting down PostHog. Some events may not have been sent.")},t)}),n()])}async shutdown(t=3e4){return this.shutdownPromise?this._logger.warn("shutdown() called while already shutting down. shutdown() is meant to be called once before process exit - use flush() for per-request cleanup"):this.shutdownPromise=this._shutdown(t).finally(()=>{this.shutdownPromise=null}),this.shutdownPromise}};var bF={};Y(bF,{DOMExceptionCoercer:()=>qOi,ErrorCoercer:()=>GOi,ErrorEventCoercer:()=>WOi,ErrorPropertiesBuilder:()=>UOi,EventCoercer:()=>KOi,ObjectCoercer:()=>HOi,PrimitiveCoercer:()=>JOi,PromiseRejectionEventCoercer:()=>YOi,ReduceableCache:()=>XOi,StringCoercer:()=>$Oi,chromeStackLineParser:()=>zOi,createDefaultStackParser:()=>V0f,createStackParser:()=>sSa,geckoStackLineParser:()=>VOi,nodeStackLineParser:()=>rSa,opera10StackLineParser:()=>Z1a,opera11StackLineParser:()=>eSa,reverseAndStripFrames:()=>oSa,winjsStackLineParser:()=>X1a});var lvr,J1a,pvr;function Y1a(e){let t=globalThis._posthogChunkIds;if(!t)return;let r=Object.keys(t);return pvr&&r.length===J1a||(J1a=r.length,pvr=r.reduce((n,i)=>{lvr||(lvr={});let o=lvr[i];if(o)n[o[0]]=o[1];else{let s=e(i);for(let a=s.length-1;a>=0;a--){let c=s[a]?.filename,l=t[i];if(c&&l){n[c]=l,lvr[i]=[c,l];break}}}return n},{})),pvr}var P0f=4,UOi=class{constructor(t,r,n=[]){this.coercers=t,this.stackParser=r,this.modifiers=n}buildFromUnknown(t,r={}){let i=r&&r.mechanism||{handled:!0,type:"generic"},s=this.buildCoercingContext(i,r,0).apply(t),a=this.buildParsingContext(r),u=this.parseStacktrace(s,a);return{$exception_list:this.convertToExceptionList(u,i),$exception_level:"error"}}async modifyFrames(t){for(let r of t)r.stacktrace&&r.stacktrace.frames&&POi(r.stacktrace.frames)&&(r.stacktrace.frames=await this.applyModifiers(r.stacktrace.frames));return t}coerceFallback(t){return{type:"Error",value:"Unknown error",stack:t.syntheticException?.stack,synthetic:!0}}parseStacktrace(t,r){let n;t.cause!=null&&(n=this.parseStacktrace(t.cause,r));let i;return t.stack!=""&&t.stack!=null&&(i=this.applyChunkIds(this.stackParser(t.stack,t.synthetic?r.skipFirstLines:0),r.chunkIdMap)),{...t,cause:n,stack:i}}applyChunkIds(t,r){return t.map(n=>(n.filename&&r&&(n.chunk_id=r[n.filename]),n))}applyCoercers(t,r){for(let n of this.coercers)if(n.match(t))return n.coerce(t,r);return this.coerceFallback(r)}async applyModifiers(t){let r=t;for(let n of this.modifiers)r=await n(r);return r}convertToExceptionList(t,r){let n={type:t.type,value:t.value,mechanism:{type:r.type??"generic",handled:r.handled??!0,synthetic:t.synthetic??!1}};t.stack&&(n.stacktrace={type:"raw",frames:t.stack});let i=[n];return t.cause!=null&&i.push(...this.convertToExceptionList(t.cause,{...r,handled:!0})),i}buildParsingContext(t){return{chunkIdMap:Y1a(this.stackParser),skipFirstLines:t.skipFirstLines??1}}buildCoercingContext(t,r,n=0){let i=(s,a)=>{if(a<=P0f){let u=this.buildCoercingContext(t,r,a);return this.applyCoercers(s,u)}};return{...r,syntheticException:n==0?r.syntheticException:void 0,mechanism:t,apply:s=>i(s,n),next:s=>i(s,n+1)}}};var i1="?";function aK(e,t,r,n,i){let o={platform:e,filename:t,function:r==="<anonymous>"?i1:r,in_app:!0};return j9e(n)||(o.lineno=n),j9e(i)||(o.colno=i),o}var fvr=(e,t)=>{let r=e.indexOf("safari-extension")!==-1,n=e.indexOf("safari-web-extension")!==-1;return r||n?[e.indexOf("@")!==-1?e.split("@")[0]:i1,r?`safari-extension:${t}`:`safari-web-extension:${t}`]:[e,t]};var T0f=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,D0f=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,R0f=/\((\S*)(?::(\d+))(?::(\d+))\)/,zOi=(e,t)=>{let r=T0f.exec(e);if(r){let[,i,o,s]=r;return aK(t,i,i1,+o,+s)}let n=D0f.exec(e);if(n){if(n[2]&&n[2].indexOf("eval")===0){let a=R0f.exec(n[2]);a&&(n[2]=a[1],n[3]=a[2],n[4]=a[3])}let[o,s]=fvr(n[1]||i1,n[2]);return aK(t,s,o,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var F0f=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,k0f=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,VOi=(e,t)=>{let r=F0f.exec(e);if(r){if(r[3]&&r[3].indexOf(" > eval")>-1){let s=k0f.exec(r[3]);s&&(r[1]=r[1]||"eval",r[3]=s[1],r[4]=s[2],r[5]="")}let i=r[3],o=r[1]||i1;return[o,i]=fvr(o,i),aK(t,i,o,r[4]?+r[4]:void 0,r[5]?+r[5]:void 0)}};var Q0f=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,X1a=(e,t)=>{let r=Q0f.exec(e);return r?aK(t,r[2],r[1]||i1,+r[3],r[4]?+r[4]:void 0):void 0};var N0f=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,Z1a=(e,t)=>{let r=N0f.exec(e);return r?aK(t,r[2],r[3]||i1,+r[1]):void 0},j0f=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,eSa=(e,t)=>{let r=j0f.exec(e);return r?aK(t,r[5],r[3]||r[4]||i1,+r[1],+r[2]):void 0};var M0f=/^\s*[-]{4,}$/,L0f=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,rSa=(e,t)=>{let r=e.match(L0f);if(r){let n,i,o,s,a;if(r[1]){o=r[1];let l=o.lastIndexOf(".");if(o[l-1]==="."&&l--,l>0){n=o.slice(0,l),i=o.slice(l+1);let p=n.indexOf(".Module");p>0&&(o=o.slice(p+1),n=n.slice(0,p))}s=void 0}i&&(s=n,a=i),i==="<anonymous>"&&(a=void 0,o=void 0),o===void 0&&(a=a||i1,o=s?`${s}.${a}`:a);let u=r[2]?.startsWith("file://")?r[2].slice(7):r[2],c=r[5]==="native";return u?.match(/\/[A-Z]:/)&&(u=u.slice(1)),!u&&r[5]&&!c&&(u=r[5]),{filename:u?decodeURI(u):void 0,module:void 0,function:o,lineno:tSa(r[3]),colno:tSa(r[4]),in_app:U0f(u||"",c),platform:t}}if(e.match(M0f))return{filename:e,platform:t}};function U0f(e,t=!1){return!(t||e&&!e.startsWith("/")&&!e.match(/^[A-Z]:/)&&!e.startsWith(".")&&!e.match(/^[a-zA-Z]([a-zA-Z0-9.\-+])*:\/\//))&&e!==void 0&&!e.includes("node_modules/")}function tSa(e){return parseInt(e||"",10)||void 0}var nSa=/\(error: (.*)\)/,iSa=50;function oSa(e){if(!e.length)return[];let t=Array.from(e);return t.reverse(),t.slice(0,iSa).map(r=>({...r,filename:r.filename||z0f(t).filename,function:r.function||i1}))}function z0f(e){return e[e.length-1]||{}}function V0f(){return sSa("web:javascript",zOi,VOi)}function sSa(e,...t){return(r,n=0)=>{let i=[],o=r.split(`
1656
- `);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let u=nSa.test(a)?a.replace(nSa,"$1"):a;if(!u.match(/\S*Error: /)){for(let c of t){let l=c(u,e);if(l){i.push(l);break}}if(i.length>=iSa)break}}return oSa(i)}}var qOi=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=JCt(t.stack);return{type:this.getType(t),value:this.getValue(t),stack:n?t.stack:void 0,cause:t.cause?r.next(t.cause):void 0,synthetic:!1}}getType(t){return this.isDOMError(t)?"DOMError":"DOMException"}getValue(t){let r=t.name||(this.isDOMError(t)?"DOMError":"DOMException");return t.message?`${r}: ${t.message}`:r}isDOMException(t){return VPe(t,"DOMException")}isDOMError(t){return VPe(t,"DOMError")}};var GOi=class{match(t){return DOi(t)}coerce(t,r){return{type:this.getType(t),value:this.getMessage(t,r),stack:this.getStack(t),cause:t.cause?r.next(t.cause):void 0,synthetic:!1}}getType(t){return t.name||t.constructor.name}getMessage(t,r){let n=t.message;return n.error&&typeof n.error.message=="string"?String(n.error.message):String(n)}getStack(t){return t.stacktrace||t.stack||void 0}};var WOi=class{constructor(){}match(t){return D1a(t)&&t.error!=null}coerce(t,r){let n=r.apply(t.error);return n||{type:"ErrorEvent",value:t.message,stack:r.syntheticException?.stack,synthetic:!0}}};var q0f=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,$Oi=class{match(t){return typeof t=="string"}coerce(t,r){let[n,i]=this.getInfos(t);return{type:n??"Error",value:i??t,stack:r.syntheticException?.stack,synthetic:!0}}getInfos(t){let r="Error",n=t,i=t.match(q0f);return i&&(r=i[1],n=i[2]),[r,n]}};var aSa=["fatal","error","warning","log","info","debug"];function dvr(e,t=40){let r=Object.keys(e);if(r.sort(),!r.length)return"[object has no keys]";for(let n=r.length;n>0;n--){let i=r.slice(0,n).join(", ");if(!(i.length>t))return n===r.length||i.length<=t?i:`${i.slice(0,t)}...`}return""}var HOi=class{match(t){return typeof t=="object"&&t!==null}coerce(t,r){let n=this.getErrorPropertyFromObject(t);return n?r.apply(n):{type:this.getType(t),value:this.getValue(t),stack:r.syntheticException?.stack,level:this.isSeverityLevel(t.level)?t.level:"error",synthetic:!0}}getType(t){return tvr(t)?t.constructor.name:"Error"}getValue(t){if("name"in t&&typeof t.name=="string"){let i=`'${t.name}' captured as exception`;return"message"in t&&typeof t.message=="string"&&(i+=` with message: '${t.message}'`),i}if("message"in t&&typeof t.message=="string")return t.message;let r=this.getObjectClassName(t),n=dvr(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return JCt(t)&&!P1a(t)&&aSa.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(W1a(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var KOi=class{match(t){return tvr(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${dvr(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var JOi=class{match(t){return YCt(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var YOi=class{match(t){return VPe(t,"PromiseRejectionEvent")}coerce(t,r){let n=this.getUnhandledRejectionReason(t);return YCt(n)?{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(n)}`,stack:r.syntheticException?.stack,synthetic:!0}:r.apply(n)}getUnhandledRejectionReason(t){if(YCt(t))return t;try{if("reason"in t)return t.reason;if("detail"in t&&"reason"in t.detail)return t.detail.reason}catch{}return t}};var XOi=class{constructor(t){this._maxSize=t,this._cache=new Map}get(t){let r=this._cache.get(t);if(r!==void 0)return this._cache.delete(t),this._cache.set(t,r),r}set(t,r){this._cache.set(t,r)}reduce(){for(;this._cache.size>=this._maxSize;){let t=this._cache.keys().next().value;t&&this._cache.delete(t)}}};var lSa=require("fs"),pSa=require("readline"),mvr=new bF.ReduceableCache(25),fSa=new bF.ReduceableCache(20),ZOi=7,G0f=1e3,W0f=1e4;async function dSa(e){let t={};for(let i=e.length-1;i>=0;i--){let o=e[i],s=o?.filename;if(!o||typeof s!="string"||typeof o.lineno!="number"||J0f(s)||Y0f(o))continue;t[s]||(t[s]=[]),t[s].push(o.lineno)}let r=Object.keys(t);if(r.length==0)return e;let n=[];for(let i of r){if(fSa.get(i))continue;let o=t[i];if(!o)continue;o.sort((u,c)=>u-c);let s=Z0f(o);if(s.every(u=>X0f(i,u)))continue;let a=eEf(mvr,i,{});n.push($0f(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&H0f(e,mvr),mvr.reduce(),e}function $0f(e,t,r){return new Promise(n=>{let i=(0,lSa.createReadStream)(e),o=(0,pSa.createInterface)({input:i});function s(){i.destroy(),n()}let a=0,u=0,c=t[u];if(c===void 0)return void s();let l=c[0],p=c[1];function d(){fSa.set(e,1),o.close(),o.removeAllListeners(),s()}i.on("error",d),o.on("error",d),o.on("close",s),o.on("line",f=>{if(a++,!(a<l)&&(r[a]=tEf(f,0),a>=p)){if(u===t.length-1){o.close(),o.removeAllListeners();return}u++;let m=t[u];if(m===void 0){o.close(),o.removeAllListeners();return}l=m[0],p=m[1]}})})}function H0f(e,t){for(let r of e)if(r.filename&&r.context_line===void 0&&typeof r.lineno=="number"){let n=t.get(r.filename);if(n===void 0)continue;K0f(r.lineno,r,n)}}function K0f(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=mSa(e);i<e;i++){let o=r[i];if(o===void 0)return void uSa(t);t.pre_context.push(o)}if(r[e]===void 0)return void uSa(t);t.context_line=r[e];let n=hSa(e);t.post_context=[];for(let i=e+1;i<=n;i++){let o=r[i];if(o===void 0)break;t.post_context.push(o)}}function uSa(e){delete e.pre_context,delete e.context_line,delete e.post_context}function J0f(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function Y0f(e){return e.lineno!==void 0&&e.lineno>W0f||e.colno!==void 0&&e.colno>G0f}function X0f(e,t){let r=mvr.get(e);if(r===void 0)return!1;for(let n=t[0];n<=t[1];n++)if(r[n]===void 0)return!1;return!0}function Z0f(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=cSa(r),i=[];for(;;){if(t===e.length-1){i.push(n);break}let o=e[t+1];if(typeof o!="number")break;o<=n[1]?n[1]=o+ZOi:(i.push(n),n=cSa(o)),t++}return i}function cSa(e){return[mSa(e),hSa(e)]}function mSa(e){return Math.max(1,e-ZOi)}function hSa(e){return e+ZOi}function eEf(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function tEf(e,t){let r=e,n=r.length;if(n<=150)return r;t>n&&(t=n);let i=Math.max(t-60,0);i<5&&(i=0);let o=Math.min(i+140,n);return o>n-5&&(o=n),o===n&&(i=Math.max(o-140,0)),r=r.slice(i,o),i>0&&(r=`...${r}`),o<n&&(r+="..."),r}function rEf(e,t){let r=!1;return Object.assign(n=>{let o=global.process.listeners("uncaughtException").filter(s=>s.name!=="domainUncaughtExceptionClear"&&s._posthogErrorHandler!==!0).length===0;e(n,{mechanism:{type:"onuncaughtexception",handled:!1}}),!r&&o&&(r=!0,t(n))},{_posthogErrorHandler:!0})}function gSa(e,t){globalThis.process?.on("uncaughtException",rEf(e,t))}function ASa(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var nEf=2e3,sV=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new rvr({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return TOi(t)&&"__posthog_previously_captured_error"in t&&t.__posthog_previously_captured_error===!0}static async buildEventMessage(t,r,n,i){let o={...i};n||(o.$process_person_profile=!1);let s=this.errorPropertiesBuilder.buildFromUnknown(t,r);return s.$exception_list=await this.errorPropertiesBuilder.modifyFrames(s.$exception_list),{event:"$exception",distinctId:n||sK(),properties:{...s,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(gSa(this.onException.bind(this),this.onFatalError.bind(this)),ASa(this.onException.bind(this)))}onException(t,r){this.client.addPendingPromise((async()=>{if(!e.isPreviouslyCapturedError(t)){let n=await e.buildEventMessage(t,r),o=n.properties?.$exception_list[0]?.type??"Exception";return this._rateLimiter.consumeRateLimit(o)?void this._logger.info("Skipping exception capture because of client rate limiting.",{exception:o}):this.client.capture(n)}})())}async onFatalError(t){console.error(t),await this.client.shutdown(nEf),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var ySa="5.26.2";var txt={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};async function bSa(e){let t=globalThis.crypto?.subtle;if(!t)throw new Error("SubtleCrypto API not available");let r=await t.digest("SHA-1",new TextEncoder().encode(e));return Array.from(new Uint8Array(r)).map(i=>i.toString(16).padStart(2,"0")).join("")}var iEf=6e4,oEf=1152921504606847e3,sEf=["is_not"],z9e=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},ah=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},uK=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},hvr=class{constructor({pollingInterval:t,personalApiKey:r,projectApiKey:n,timeout:i,host:o,customHeaders:s,...a}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollingInterval=t,this.personalApiKey=r,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=i,this.projectApiKey=n,this.host=o,this.poller=void 0,this.fetch=a.fetch||fetch,this.onError=a.onError,this.customHeaders=s,this.onLoad=a.onLoad,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.loadFeatureFlags()}debug(t=!0){this.debugMode=t}logMsgIfDebug(t){this.debugMode&&t()}createEvaluationContext(t,r={},n={},i={},o={}){return{distinctId:t,groups:r,personProperties:n,groupProperties:i,evaluationCache:o}}async getFeatureFlag(t,r,n={},i={},o={}){await this.loadFeatureFlags();let s,a;if(!this.loadedSuccessfullyOnce)return s;if(a=this.featureFlagsByKey[t],a!==void 0){let u=this.createEvaluationContext(r,n,i,o);try{s=(await this.computeFlagAndPayloadLocally(a,u)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${t} -> ${s}`))}catch(c){c instanceof uK||c instanceof ah?this.logMsgIfDebug(()=>console.debug(`${c.name} when computing flag locally: ${t}: ${c.message}`)):c instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${t}: ${c}`))}}return s}async getAllFlagsAndPayloads(t,r){await this.loadFeatureFlags();let n={},i={},o=this.featureFlags.length==0,s=r?r.map(u=>this.featureFlagsByKey[u]).filter(Boolean):this.featureFlags,a={...t,evaluationCache:t.evaluationCache??{}};return await Promise.all(s.map(async u=>{try{let{value:c,payload:l}=await this.computeFlagAndPayloadLocally(u,a);n[u.key]=c,l&&(i[u.key]=l)}catch(c){c instanceof uK||c instanceof ah?this.logMsgIfDebug(()=>console.debug(`${c.name} when computing flag locally: ${u.key}: ${c.message}`)):c instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${u.key}: ${c}`)),o=!0}})),{response:n,payloads:i,fallbackToFlags:o}}async computeFlagAndPayloadLocally(t,r,n={}){let{matchValue:i,skipLoadCheck:o=!1}=n;if(o||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};let s;s=i!==void 0?i:await this.computeFlagValueLocally(t,r);let a=this.getFeatureFlagPayload(t.key,s);return{value:s,payload:a}}async computeFlagValueLocally(t,r){let{distinctId:n,groups:i,personProperties:o,groupProperties:s}=r;if(t.ensure_experience_continuity)throw new ah("Flag has experience continuity enabled");if(!t.active)return!1;let u=(t.filters||{}).aggregation_group_type_index;if(u!=null){let c=this.groupTypeMapping[String(u)];if(!c)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${u} for feature flag ${t.key}`)),new ah("Flag has unknown group type index");if(!(c in i))return this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute group feature flag: ${t.key} without group names passed in`)),!1;t.bucketing_identifier==="device_id"&&(o?.$device_id===void 0||o?.$device_id===null||o?.$device_id==="")&&this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Ignoring bucketing_identifier for group flag: ${t.key}`));let l=s[c];return await this.matchFeatureFlagProperties(t,i[c],l,r)}{let c=this.getBucketingValueForFlag(t,n,o);if(c===void 0)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute feature flag: ${t.key} without $device_id, falling back to server evaluation`)),new ah(`Can't compute feature flag: ${t.key} without $device_id`);return await this.matchFeatureFlagProperties(t,c,o,r)}}getBucketingValueForFlag(t,r,n){if(t.filters?.aggregation_group_type_index!=null)return r;if(t.bucketing_identifier==="device_id"){let i=n?.$device_id;return i==null||i===""?void 0:i}return r}getFeatureFlagPayload(t,r){let n=null;if(r!==!1&&r!=null&&(typeof r=="boolean"?n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r.toString()]||null:typeof r=="string"&&(n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r]||null),n!=null)){if(typeof n=="object")return n;if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}return null}async evaluateFlagDependency(t,r,n){let{evaluationCache:i}=n,o=t.key;if(!this.featureFlagsByKey)throw new ah("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new ah(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new ah(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new ah(`Circular dependency detected for flag '${o}' (empty dependency chain)`);for(let u of s){if(!(u in i)){let l=this.featureFlagsByKey[u];if(l)if(l.active)try{let p=await this.computeFlagValueLocally(l,n);i[u]=p}catch(p){throw new ah(`Error evaluating flag dependency '${u}' for flag '${o}': ${p}`)}else i[u]=!1;else throw new ah(`Missing flag dependency '${u}' for flag '${o}'`)}if(i[u]==null)throw new ah(`Dependency '${u}' could not be evaluated`)}let a=i[o];return this.flagEvaluatesToExpectedValue(t.value,a)}flagEvaluatesToExpectedValue(t,r){return typeof t=="boolean"?t===r||typeof r=="string"&&r!==""&&t===!0:typeof t=="string"?r===t:!1}async matchFeatureFlagProperties(t,r,n,i){let o=t.filters||{},s=o.groups||[],a=!1,u;for(let c of s)try{if(await this.isConditionMatch(t,r,c,n,i)){let l=c.variant,p=o.multivariate?.variants||[];u=l&&p.some(d=>d.key===l)?l:await this.getMatchingVariant(t,r)||!0;break}}catch(l){if(l instanceof uK)throw l;if(l instanceof ah)a=!0;else throw l}if(u!==void 0)return u;if(a)throw new ah("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(t,r,n,i,o){let s=n.rollout_percentage,a=u=>{this.logMsgIfDebug(()=>console.warn(u))};if((n.properties||[]).length>0){for(let u of n.properties){let c=u.type,l=!1;if(l=c==="cohort"?CSa(u,i,this.cohorts,this.debugMode):c==="flag"?await this.evaluateFlagDependency(u,i,o):wSa(u,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await ESa(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await ESa(t.key,r,"variant"),i=this.variantLookupTable(t).find(o=>n>=o.valueMin&&n<o.valueMax);if(i)return i.key}variantLookupTable(t){let r=[],n=0,i=0;return((t.filters||{}).multivariate?.variants||[]).forEach(a=>{i=n+a.rollout_percentage/100,r.push({valueMin:n,valueMax:i,key:a.key}),n=i}),r}updateFlagState(t){this.featureFlags=t.flags,this.featureFlagsByKey=t.flags.reduce((r,n)=>(r[n.key]=n,r),{}),this.groupTypeMapping=t.groupTypeMapping,this.cohorts=t.cohorts,this.loadedSuccessfullyOnce=!0}warnAboutExperienceContinuityFlags(t){if(this.strictLocalEvaluation)return;let r=t.filter(n=>n.ensure_experience_continuity);r.length>0&&console.warn(`[PostHog] You are using local evaluation but ${r.length} flag(s) have experience continuity enabled: ${r.map(n=>n.key).join(", ")}. Experience continuity is incompatible with local evaluation and will cause a server request on every flag evaluation, negating local evaluation cost savings. To avoid server requests and unexpected costs, either disable experience continuity on these flags in PostHog, use strictLocalEvaluation: true in client init, or pass onlyEvaluateLocally: true per flag call (flags that cannot be evaluated locally will return undefined).`)}async loadFromCache(t){if(!this.cacheProvider)return!1;try{let r=await this.cacheProvider.getFlagDefinitions();return r?(this.updateFlagState(r),this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] ${t} (${r.flags.length} flags)`)),this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(r.flags),!0):!1}catch(r){return this.onError?.(new Error(`Failed to load from cache: ${r}`)),!1}}async loadFeatureFlags(t=!1){if(!(this.loadedSuccessfullyOnce&&!t))return!t&&this.nextFetchAllowedAt&&Date.now()<this.nextFetchAllowedAt?void this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Skipping fetch, in backoff period")):(this.loadingPromise||(this.loadingPromise=this._loadFeatureFlags().catch(r=>this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Failed to load feature flags: ${r}`))).finally(()=>{this.loadingPromise=void 0})),this.loadingPromise)}isLocalEvaluationReady(){return(this.loadedSuccessfullyOnce??!1)&&(this.featureFlags?.length??0)>0}getFlagDefinitionsLoadedAt(){return this.flagDefinitionsLoadedAt}getPollingInterval(){return this.shouldBeginExponentialBackoff?Math.min(iEf,this.pollingInterval*2**this.backOffCount):this.pollingInterval}beginBackoff(){this.shouldBeginExponentialBackoff=!0,this.backOffCount+=1,this.nextFetchAllowedAt=Date.now()+this.getPollingInterval()}clearBackoff(){this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.nextFetchAllowedAt=void 0}async _loadFeatureFlags(){this.poller&&(clearTimeout(this.poller),this.poller=void 0),this.poller=setTimeout(()=>this.loadFeatureFlags(!0),this.getPollingInterval());try{let t=!0;if(this.cacheProvider)try{t=await this.cacheProvider.shouldFetchFlagDefinitions()}catch(n){this.onError?.(new Error(`Error in shouldFetchFlagDefinitions: ${n}`))}if(!t&&(await this.loadFromCache("Loaded flags from cache (skipped fetch)")||this.loadedSuccessfullyOnce))return;let r=await this._requestFeatureFlagDefinitions();if(!r)return;switch(r.status){case 304:this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Flags not modified (304), using cached data")),this.flagsEtag=r.headers?.get("ETag")??this.flagsEtag,this.loadedSuccessfullyOnce=!0,this.clearBackoff();return;case 401:throw this.beginBackoff(),new z9e(`Your project key or personal API key is invalid. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 402:console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - unsetting all local flags. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={};return;case 403:throw this.beginBackoff(),new z9e(`Your personal API key does not have permission to fetch feature flag definitions for local evaluation. Setting next polling interval to ${this.getPollingInterval()}ms. Are you sure you're using the correct personal and Project API key pair? More information: https://posthog.com/docs/api/overview`);case 429:throw this.beginBackoff(),new z9e(`You are being rate limited. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 200:{let n=await r.json()??{};if(!("flags"in n))return void this.onError?.(new Error(`Invalid response when getting feature flags: ${JSON.stringify(n)}`));this.flagsEtag=r.headers?.get("ETag")??void 0;let i={flags:n.flags??[],groupTypeMapping:n.group_type_mapping||{},cohorts:n.cohorts||{}};if(this.updateFlagState(i),this.flagDefinitionsLoadedAt=Date.now(),this.clearBackoff(),this.cacheProvider&&t)try{await this.cacheProvider.onFlagDefinitionsReceived(i)}catch(o){this.onError?.(new Error(`Failed to store in cache: ${o}`))}this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(i.flags);break}default:return}}catch(t){t instanceof z9e&&this.onError?.(t)}}getPersonalApiKeyRequestOptions(t="GET",r){let n={...this.customHeaders,"Content-Type":"application/json",Authorization:`Bearer ${this.personalApiKey}`};return r&&(n["If-None-Match"]=r),{method:t,headers:n}}_requestFeatureFlagDefinitions(){let t=`${this.host}/api/feature_flag/local_evaluation?token=${this.projectApiKey}&send_cohorts`,r=this.getPersonalApiKeyRequestOptions("GET",this.flagsEtag),n=null;if(this.timeout&&typeof this.timeout=="number"){let i=new AbortController;n=qPe(()=>{i.abort()},this.timeout),r.signal=i.signal}try{let i=this.fetch;return i(t,r)}finally{clearTimeout(n)}}async stopPoller(t=3e4){if(clearTimeout(this.poller),this.cacheProvider)try{let r=this.cacheProvider.shutdown();r instanceof Promise&&await Promise.race([r,new Promise((n,i)=>setTimeout(()=>i(new Error(`Cache shutdown timeout after ${t}ms`)),t))])}catch(r){this.onError?.(new Error(`Error during cache shutdown: ${r}`))}}};async function ESa(e,t,r=""){let n=await bSa(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/oEf}function wSa(e,t,r){let n=e.key,i=e.value,o=e.operator||"exact";if(n in t){if(o==="is_not_set")throw new ah("Operator is_not_set is not supported")}else throw new ah(`Property ${n} not found in propertyValues`);let s=t[n];if(s==null&&!sEf.includes(o))return r&&r(`Property ${n} cannot have a value of null/undefined with the ${o} operator`),!1;function a(c,l){return Array.isArray(c)?c.map(p=>String(p).toLowerCase()).includes(String(l).toLowerCase()):String(c).toLowerCase()===String(l).toLowerCase()}function u(c,l,p){if(p==="gt")return c>l;if(p==="gte")return c>=l;if(p==="lt")return c<l;if(p==="lte")return c<=l;throw new Error(`Invalid operator: ${p}`)}switch(o){case"exact":return a(i,s);case"is_not":return!a(i,s);case"is_set":return n in t;case"icontains":return String(s).toLowerCase().includes(String(i).toLowerCase());case"not_icontains":return!String(s).toLowerCase().includes(String(i).toLowerCase());case"regex":return vSa(String(i))&&String(s).match(String(i))!==null;case"not_regex":return vSa(String(i))&&String(s).match(String(i))===null;case"gt":case"gte":case"lt":case"lte":{let c=typeof i=="number"?i:null;if(typeof i=="string")try{c=parseFloat(i)}catch{}return c==null||s==null?u(String(s),String(i),o):typeof s=="string"?u(s,String(i),o):u(s,c,o)}case"is_date_after":case"is_date_before":{if(typeof i=="boolean")throw new ah("Date operations cannot be performed on boolean values");let c=uEf(String(i));if(c==null&&(c=ISa(i)),c==null)throw new ah(`Invalid date: ${i}`);let l=ISa(s);return["is_date_before"].includes(o)?l<c:l>c}default:throw new ah(`Unknown operator: ${o}`)}}function aEf(e,t){if(!(e in t))throw new uK(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}function CSa(e,t,r,n=!1){let i=String(e.value);aEf(i,r);let o=r[i];return xSa(o,t,r,n)}function xSa(e,t,r,n=!1){if(!e)return!0;let i=e.type,o=e.values;if(!o||o.length===0)return!0;let s=!1;if("values"in o[0]){for(let a of o)try{let u=xSa(a,t,r,n);if(i==="AND"){if(!u)return!1}else if(u)return!0}catch(u){if(u instanceof uK)throw u;if(u instanceof ah)n&&console.debug(`Failed to compute property ${a} locally: ${u}`),s=!0;else throw u}if(s)throw new ah("Can't match cohort without a given cohort property value");return i==="AND"}for(let a of o)try{let u;if(a.type==="cohort")u=CSa(a,t,r,n);else if(a.type==="flag"){n&&console.warn(`[FEATURE FLAGS] Flag dependency filters are not supported in local evaluation. Skipping condition with dependency on flag '${a.key||"unknown"}'`);continue}else u=wSa(a,t);let c=a.negation||!1;if(i==="AND"){if(!u&&!c||u&&c)return!1}else if(u&&!c||!u&&c)return!0}catch(u){if(u instanceof uK)throw u;if(u instanceof ah)n&&console.debug(`Failed to compute property ${a} locally: ${u}`),s=!0;else throw u}if(s)throw new ah("can't match cohort without a given cohort property value");return i==="AND"}function vSa(e){try{return new RegExp(e),!0}catch{return!1}}function ISa(e){if(e instanceof Date)return e;if(typeof e=="string"||typeof e=="number"){let t=new Date(e);if(!isNaN(t.valueOf()))return t;throw new ah(`${e} is in an invalid date format`)}throw new ah(`The date provided ${e} must be a string, number, or date object`)}function uEf(e){let t=/^-?(?<number>[0-9]+)(?<interval>[a-z])$/,r=e.match(t),n=new Date(new Date().toISOString());if(!r)return null;{if(!r.groups)return null;let i=parseInt(r.groups.number);if(i>=1e4)return null;let o=r.groups.interval;if(o=="h")n.setUTCHours(n.getUTCHours()-i);else if(o=="d")n.setUTCDate(n.getUTCDate()-i);else if(o=="w")n.setUTCDate(n.getUTCDate()-7*i);else if(o=="m")n.setUTCMonth(n.getUTCMonth()-i);else{if(o!="y")return null;n.setUTCFullYear(n.getUTCFullYear()-i)}return n}}var gvr=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var cEf=100,_Sa=3e4,lEf=5e4,Avr=class extends ext{constructor(t,r={}){if(super(t,r),this._memoryStorage=new gvr,this.options=r,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof r.featureFlagsPollingInterval=="number"?Math.max(r.featureFlagsPollingInterval,cEf):_Sa,r.personalApiKey){if(r.personalApiKey.includes("phc_"))throw new Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');r.enableLocalEvaluation!==!1&&(this.featureFlagsPoller=new hvr({pollingInterval:this.options.featureFlagsPollingInterval,personalApiKey:r.personalApiKey,projectApiKey:t,timeout:r.requestTimeout??1e4,host:this.host,fetch:r.fetch,onError:i=>{this._events.emit("error",i)},onLoad:i=>{this._events.emit("localEvaluationFlagsLoaded",i)},customHeaders:this.getCustomHeaders(),cacheProvider:r.flagDefinitionCacheProvider,strictLocalEvaluation:r.strictLocalEvaluation}))}this.errorTracking=new sV(this,r,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=r.maxCacheSize||lEf}getPersistedProperty(t){return this._memoryStorage.getProperty(t)}setPersistedProperty(t,r){return this._memoryStorage.setProperty(t,r)}fetch(t,r){return this.options.fetch?this.options.fetch(t,r):fetch(t,r)}getLibraryVersion(){return ySa}getCustomUserAgent(){return`${this.getLibraryId()}/${this.getLibraryVersion()}`}enable(){return super.optIn()}disable(){return super.optOut()}debug(t=!0){super.debug(t),this.featureFlagsPoller?.debug(t)}capture(t){typeof t=="string"&&this._logger.warn("Called capture() with a string as the first argument when an object was expected."),t.event==="$exception"&&!t._originatedFromCaptureException&&this._logger.warn("Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this.addPendingPromise(this.prepareEventMessage(t).then(({distinctId:r,event:n,properties:i,options:o})=>super.captureStateless(r,n,i,{timestamp:o.timestamp,disableGeoip:o.disableGeoip,uuid:o.uuid})).catch(r=>{r&&console.error(r)}))}async captureImmediate(t){return typeof t=="string"&&this._logger.warn("Called captureImmediate() with a string as the first argument when an object was expected."),t.event==="$exception"&&!t._originatedFromCaptureException&&this._logger.warn("Capturing a `$exception` event via `posthog.captureImmediate('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureExceptionImmediate(error)` instead, which attaches this metadata by default."),this.addPendingPromise(this.prepareEventMessage(t).then(({distinctId:r,event:n,properties:i,options:o})=>super.captureStatelessImmediate(r,n,i,{timestamp:o.timestamp,disableGeoip:o.disableGeoip,uuid:o.uuid})).catch(r=>{r&&console.error(r)}))}identify({distinctId:t,properties:r={},disableGeoip:n}){let{$set:i,$set_once:o,$anon_distinct_id:s,...a}=r,l={$set:i||a,$set_once:o||{},$anon_distinct_id:s??void 0};super.identifyStateless(t,l,{disableGeoip:n})}async identifyImmediate({distinctId:t,properties:r={},disableGeoip:n}){let{$set:i,$set_once:o,$anon_distinct_id:s,...a}=r,l={$set:i||a,$set_once:o||{},$anon_distinct_id:s??void 0};super.identifyStatelessImmediate(t,l,{disableGeoip:n})}alias(t){super.aliasStateless(t.alias,t.distinctId,void 0,{disableGeoip:t.disableGeoip})}async aliasImmediate(t){await super.aliasStatelessImmediate(t.alias,t.distinctId,void 0,{disableGeoip:t.disableGeoip})}isLocalEvaluationReady(){return this.featureFlagsPoller?.isLocalEvaluationReady()??!1}async waitForLocalEvaluationReady(t=_Sa){return this.isLocalEvaluationReady()?!0:this.featureFlagsPoller===void 0?!1:new Promise(r=>{let n=setTimeout(()=>{i(),r(!1)},t),i=this._events.on("localEvaluationFlagsLoaded",o=>{clearTimeout(n),i(),r(o>0)})})}_resolveDistinctId(t,r){return typeof t=="string"?{distinctId:t,options:r}:{distinctId:this.context?.get()?.distinctId,options:t}}async _getFeatureFlagResult(t,r,n={},i){let o=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&t in this._flagOverrides){let w=this._flagOverrides[t];if(w===void 0)return;let x=this._payloadOverrides?.[t];return{key:t,enabled:w!==!1,variant:typeof w=="string"?w:void 0,payload:x}}let{groups:s,disableGeoip:a}=n,{onlyEvaluateLocally:u,personProperties:c,groupProperties:l}=n,p=this.addLocalPersonAndGroupProperties(r,s,c,l);c=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(r,s,c,l);u==null&&(u=this.options.strictLocalEvaluation??!1);let f,m=!1,h,g,A,E,v,b;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let w=this.featureFlagsPoller?.featureFlagsByKey[t];if(w)try{let x=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(w,d,{matchValue:i});if(x){m=!0;let C=x.value;E=w.id,b="Evaluated locally",f={key:t,enabled:C!==!1,variant:typeof C=="string"?C:void 0,payload:x.payload??void 0}}}catch(x){if(x instanceof uK||x instanceof ah)this._logger?.info(`${x.name} when computing flag locally: ${t}: ${x.message}`);else throw x}}if(!m&&!u){let w=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(w===void 0)A=txt.UNKNOWN_ERROR;else{h=w.requestId,g=w.evaluatedAt;let x=[];w.errorsWhileComputingFlags&&x.push(txt.ERRORS_WHILE_COMPUTING),w.quotaLimited?.includes("feature_flags")&&x.push(txt.QUOTA_LIMITED);let C=w.flags[t];if(C===void 0)x.push(txt.FLAG_MISSING);else{E=C.metadata?.id,v=C.metadata?.version,b=C.reason?.description??C.reason?.code;let _;if(C.metadata?.payload!==void 0)try{_=JSON.parse(C.metadata.payload)}catch{_=C.metadata.payload}f={key:t,enabled:C.enabled,variant:C.variant,payload:_}}x.length>0&&(A=x.join(","))}}if(o){let w=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,x=`${t}_${w}`;if(!(r in this.distinctIdHasSentFlagCalls)||!this.distinctIdHasSentFlagCalls[r].includes(x)){Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(x):this.distinctIdHasSentFlagCalls[r]=[x];let C={$feature_flag:t,$feature_flag_response:w,$feature_flag_id:E,$feature_flag_version:v,$feature_flag_reason:b,locally_evaluated:m,[`$feature/${t}`]:w,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():g};if(m&&this.featureFlagsPoller){let _=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();_!==void 0&&(C.$feature_flag_definitions_loaded_at=_)}A&&(C.$feature_flag_error=A),this.capture({distinctId:r,event:"$feature_flag_called",properties:C,groups:s,disableGeoip:a})}}return f!==void 0&&this._payloadOverrides!==void 0&&t in this._payloadOverrides&&(f={...f,payload:this._payloadOverrides[t]}),f}async getFeatureFlag(t,r,n){let i=await this._getFeatureFlagResult(t,r,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(i!==void 0)return i.enabled===!1?!1:i.variant??!0}async getFeatureFlagPayload(t,r,n,i){if(this._payloadOverrides!==void 0&&t in this._payloadOverrides)return this._payloadOverrides[t];let o=await this._getFeatureFlagResult(t,r,{...i,sendFeatureFlagEvents:!1},n);if(o!==void 0)return o.payload??null}async getFeatureFlagResult(t,r,n){let{distinctId:i,options:o}=this._resolveDistinctId(r,n);return i?this._getFeatureFlagResult(t,i,{...o,sendFeatureFlagEvents:o?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0}):void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()")}async getRemoteConfigPayload(t){if(!this.options.personalApiKey)throw new Error("Personal API key is required for remote config payload decryption");let r=await this._requestRemoteConfigPayload(t);if(!r)return;let n=await r.json();if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}async isFeatureEnabled(t,r,n){let i=await this.getFeatureFlag(t,r,n);if(i!==void 0)return!!i||!1}async getAllFlags(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);return n?(await this.getAllFlagsAndPayloads(n,i)).featureFlags||{}:(this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{})}async getAllFlagsAndPayloads(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);if(!n)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};let{groups:o,disableGeoip:s,flagKeys:a}=i||{},{onlyEvaluateLocally:u,personProperties:c,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,c,l);c=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,c,l);u==null&&(u=this.options.strictLocalEvaluation??!1);let f=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),m={},h={},g=!0;if(f&&(m=f.response,h=f.payloads,g=f.fallbackToFlags),g&&!u){let A=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);m={...m,...A.flags||{}},h={...h,...A.payloads||{}}}return this._flagOverrides!==void 0&&(m={...m,...this._flagOverrides}),this._payloadOverrides!==void 0&&(h={...h,...this._payloadOverrides}),{featureFlags:m,featureFlagPayloads:h}}groupIdentify({groupType:t,groupKey:r,properties:n,distinctId:i,disableGeoip:o}){super.groupIdentifyStateless(t,r,n,{disableGeoip:o},i)}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(t){let r=n=>Object.fromEntries(n.map(i=>[i,!0]));if(t===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(t)){this._flagOverrides=r(t);return}if(this._isFeatureFlagOverrideOptions(t)){"flags"in t&&(t.flags===!1?this._flagOverrides=void 0:Array.isArray(t.flags)?this._flagOverrides=r(t.flags):t.flags!==void 0&&(this._flagOverrides={...t.flags})),"payloads"in t&&(t.payloads===!1?this._payloadOverrides=void 0:t.payloads!==void 0&&(this._payloadOverrides={...t.payloads}));return}this._flagOverrides={...t}}_isFeatureFlagOverrideOptions(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let r=t;if("flags"in r){let n=r.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in r){let n=r.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(t,r,n){return this.context?this.context.run(t,r,n):r()}getContext(){return this.context?.get()}enterContext(t,r){this.context?.enter(t,r)}async _shutdown(t){return this.featureFlagsPoller?.stopPoller(t),this.errorTracking.shutdown(),super._shutdown(t)}async _requestRemoteConfigPayload(t){if(!this.options.personalApiKey)return;let r=`${this.host}/api/projects/@current/feature_flags/${t}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},i=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let o=new AbortController;i=qPe(()=>{o.abort()},this.options.requestTimeout),n.signal=o.signal}try{return await this.fetch(r,n)}catch(o){this._events.emit("error",o);return}finally{i&&clearTimeout(i)}}extractPropertiesFromEvent(t,r){if(!t)return{personProperties:{},groupProperties:{}};let n={},i={};for(let[o,s]of Object.entries(t))if(R1a(s)&&r&&o in r){let a={};for(let[u,c]of Object.entries(s))a[String(u)]=String(c);i[String(o)]=a}else n[String(o)]=String(s);return{personProperties:n,groupProperties:i}}async getFeatureFlagsForEvent(t,r,n,i){let o=i?.personProperties||{},s=i?.groupProperties||{},a=i?.flagKeys;if(i?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let c={};for(let[l,p]of Object.entries(r||{}))c[l]=String(p);return await this.getAllFlags(t,{groups:c,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}else return{};if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let c={};for(let[l,p]of Object.entries(r||{}))c[l]=String(p);return await this.getAllFlags(t,{groups:c,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}return(await super.getFeatureFlagsStateless(t,r,o,s,n)).flags}addLocalPersonAndGroupProperties(t,r,n,i){let o={distinct_id:t,...n||{}},s={};if(r)for(let a of Object.keys(r))s[a]={$group_key:r[a],...i?.[a]||{}};return{allPersonProperties:o,allGroupProperties:s}}createFeatureFlagEvaluationContext(t,r,n,i){return{distinctId:t,groups:r||{},personProperties:n||{},groupProperties:i||{},evaluationCache:{}}}captureException(t,r,n,i){if(!sV.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");this.addPendingPromise(sV.buildEventMessage(t,{syntheticException:o},r,n).then(s=>this.capture({...s,uuid:i})))}}async captureExceptionImmediate(t,r,n){if(!sV.isPreviouslyCapturedError(t)){let i=new Error("PostHog syntheticException");this.addPendingPromise(sV.buildEventMessage(t,{syntheticException:i},r,n).then(o=>this.captureImmediate(o)))}}async prepareEventMessage(t){let{distinctId:r,event:n,properties:i,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:u,uuid:c}=t,l=this.context?.get(),p=r||l?.distinctId,d={...this.props,...l?.properties||{},...i||{}};p||(p=sK(),d.$process_person_profile=!1),l?.sessionId&&!d.$session_id&&(d.$session_id=l.sessionId);let f=this._runBeforeSend({distinctId:p,event:n,properties:d,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:u,uuid:c});if(!f)return Promise.reject(null);let m=await Promise.resolve().then(async()=>{if(s){let h=typeof s=="object"?s:void 0;return await this.getFeatureFlagsForEvent(f.distinctId,o,u,h)}return f.event,{}}).then(h=>{let g={};if(h)for(let[E,v]of Object.entries(h))g[`$feature/${E}`]=v;let A=Object.keys(h||{}).filter(E=>h?.[E]!==!1).sort();return A.length>0&&(g.$active_feature_flags=A),g}).catch(()=>({})).then(h=>({...h,...f.properties||{},$groups:f.groups||o}));return f.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof m.$raw_user_agent=="string"&&B1a(m.$raw_user_agent,this.options.custom_blocked_useragents||[])&&(f.event="$bot_pageview",m.$browser_type="bot"),{distinctId:f.distinctId,event:f.event,properties:m,options:{timestamp:f.timestamp,disableGeoip:f.disableGeoip,uuid:f.uuid}}}_runBeforeSend(t){let r=this.options.before_send;if(!r)return t;let n=Array.isArray(r)?r:[r],i=t;for(let o of n){if(i=o(i),!i)return this._logger.info(`Event '${t.event}' was rejected in beforeSend function`),null;if(!i.properties||Object.keys(i.properties).length===0){let s=`Event '${i.event}' has no properties after beforeSend function, this is likely an error.`;this._logger.warn(s)}}return i}};var SSa=require("async_hooks"),yvr=class{constructor(){this.storage=new SSa.AsyncLocalStorage}get(){return this.storage.getStore()}run(t,r,n){return this.storage.run(this.resolve(t,n),r)}enter(t,r){this.storage.enterWith(this.resolve(t,r))}resolve(t,r){if(r?.fresh===!0)return t;let n=this.get()||{};return{distinctId:t.distinctId??n.distinctId,sessionId:t.sessionId??n.sessionId,properties:{...n.properties||{},...t.properties||{}}}}};var BSa="posthog-node";function pEf(e,{organization:t,projectId:r,prefix:n,severityAllowList:i=["error"],sendExceptionsToPostHog:o=!0}={}){return s=>{if(!(i==="*"||i.includes(s.level)))return s;s.tags||(s.tags={});let u=s.tags[ePi.POSTHOG_ID_TAG];if(u===void 0)return s;let c=e.options.host??"https://us.i.posthog.com",l=new URL(`/project/${e.apiKey}/person/${u}`,c).toString();s.tags["PostHog Person URL"]=l;let p=s.exception?.values||[],d=p.map(m=>({...m,stacktrace:m.stacktrace?{...m.stacktrace,type:"raw",frames:(m.stacktrace.frames||[]).map(h=>({...h,platform:"node:javascript"}))}:void 0})),f={$exception_message:p[0]?.value||s.message,$exception_type:p[0]?.type,$exception_level:s.level,$exception_list:d,$sentry_event_id:s.event_id,$sentry_exception:s.exception,$sentry_exception_message:p[0]?.value||s.message,$sentry_exception_type:p[0]?.type,$sentry_tags:s.tags};return t&&r&&(f.$sentry_url=(n||"https://sentry.io/organizations/")+t+"/issues/?project="+r+"&query="+s.event_id),o&&e.capture({event:"$exception",distinctId:u,properties:f}),s}}var ePi=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=BSa,this.name=BSa,this.setupOnce=function(s,a){let u=a()?.getClient()?.getDsn()?.projectId;s(pEf(t,{organization:r,projectId:u,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};sV.errorPropertiesBuilder=new bF.ErrorPropertiesBuilder([new bF.EventCoercer,new bF.ErrorCoercer,new bF.ObjectCoercer,new bF.StringCoercer,new bF.PrimitiveCoercer],bF.createStackParser("node:javascript",bF.nodeStackLineParser),[C1a(),dSa]);var V9e=class extends Avr{getLibraryId(){return"posthog-node"}initializeContext(){return new yvr}};var bvr=class{posthog;constructor({posthogApiKey:t}){this.posthog=new V9e(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"4.32.1",usingAccessToken:!0}})}async flush(){await this.posthog.flush()}};var rxt=class{async sendEvent(){}async identify(){}async flush(){}};Vt();var q9e=require("fs/promises"),OSa=require("os"),PSa=require("path");var fEf="id",dEf=".fern",nxt=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new V9e(r),this.userId=t==null?void 0:ACi(t),this.token=t}async identify(){this.userId!=null&&this.posthog.alias({distinctId:this.userId,alias:await this.getPersistedDistinctId()})}async sendEvent(t){let r=await this.getUserEmail();this.posthog.capture({distinctId:this.userId??await this.getPersistedDistinctId(),event:"CLI",properties:{version:"4.32.1",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{}}})}async flush(){await this.posthog.flush()}userEmail;async getUserEmail(){if(this.userEmail!==null){if(this.userEmail!=null)return this.userEmail;if(this.token==null){this.userEmail=null;return}try{let t=await FA({token:this.token.value}).user.getMyself();if(t.ok&&t.body.email!=null)return this.userEmail=t.body.email,this.userEmail}catch{}this.userEmail=null}}persistedDistinctId;async getPersistedDistinctId(){if(this.persistedDistinctId==null){let t=We(Ut.of((0,OSa.homedir)()),Se.of(dEf),Se.of(fEf));await Xt(t)||(await(0,q9e.mkdir)((0,PSa.dirname)(t),{recursive:!0}),await(0,q9e.writeFile)(t,hC())),this.persistedDistinctId=(await(0,q9e.readFile)(t)).toString()}return this.persistedDistinctId}};var tPi;async function G9e(){return tPi==null&&(tPi=await mEf()),tPi}async function mEf(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new rxt;let r=await Dhr();return r!=null?new nxt({token:r,posthogApiKey:e}):await VH()!=null?new bvr({posthogApiKey:e}):new nxt({token:void 0,posthogApiKey:e})}catch{return new rxt}}Rt();var ixt=_e(require("process"),1);pNe();var RSa=_e(wAi(),1),FSa=_e(DSa(),1);function DC(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=A5(e),e.length===0))return 0;e=e.replace((0,FSa.default)()," ");let r=t.ambiguousIsNarrow?1:2,n=0;for(let i of e){let o=i.codePointAt(0);if(o<=31||o>=127&&o<=159||o>=768&&o<=879)continue;switch(RSa.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}function Evr(e){let t=0;for(let r of e.split(`
1656
+ `);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let u=nSa.test(a)?a.replace(nSa,"$1"):a;if(!u.match(/\S*Error: /)){for(let c of t){let l=c(u,e);if(l){i.push(l);break}}if(i.length>=iSa)break}}return oSa(i)}}var qOi=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=JCt(t.stack);return{type:this.getType(t),value:this.getValue(t),stack:n?t.stack:void 0,cause:t.cause?r.next(t.cause):void 0,synthetic:!1}}getType(t){return this.isDOMError(t)?"DOMError":"DOMException"}getValue(t){let r=t.name||(this.isDOMError(t)?"DOMError":"DOMException");return t.message?`${r}: ${t.message}`:r}isDOMException(t){return VPe(t,"DOMException")}isDOMError(t){return VPe(t,"DOMError")}};var GOi=class{match(t){return DOi(t)}coerce(t,r){return{type:this.getType(t),value:this.getMessage(t,r),stack:this.getStack(t),cause:t.cause?r.next(t.cause):void 0,synthetic:!1}}getType(t){return t.name||t.constructor.name}getMessage(t,r){let n=t.message;return n.error&&typeof n.error.message=="string"?String(n.error.message):String(n)}getStack(t){return t.stacktrace||t.stack||void 0}};var WOi=class{constructor(){}match(t){return D1a(t)&&t.error!=null}coerce(t,r){let n=r.apply(t.error);return n||{type:"ErrorEvent",value:t.message,stack:r.syntheticException?.stack,synthetic:!0}}};var q0f=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,$Oi=class{match(t){return typeof t=="string"}coerce(t,r){let[n,i]=this.getInfos(t);return{type:n??"Error",value:i??t,stack:r.syntheticException?.stack,synthetic:!0}}getInfos(t){let r="Error",n=t,i=t.match(q0f);return i&&(r=i[1],n=i[2]),[r,n]}};var aSa=["fatal","error","warning","log","info","debug"];function dvr(e,t=40){let r=Object.keys(e);if(r.sort(),!r.length)return"[object has no keys]";for(let n=r.length;n>0;n--){let i=r.slice(0,n).join(", ");if(!(i.length>t))return n===r.length||i.length<=t?i:`${i.slice(0,t)}...`}return""}var HOi=class{match(t){return typeof t=="object"&&t!==null}coerce(t,r){let n=this.getErrorPropertyFromObject(t);return n?r.apply(n):{type:this.getType(t),value:this.getValue(t),stack:r.syntheticException?.stack,level:this.isSeverityLevel(t.level)?t.level:"error",synthetic:!0}}getType(t){return tvr(t)?t.constructor.name:"Error"}getValue(t){if("name"in t&&typeof t.name=="string"){let i=`'${t.name}' captured as exception`;return"message"in t&&typeof t.message=="string"&&(i+=` with message: '${t.message}'`),i}if("message"in t&&typeof t.message=="string")return t.message;let r=this.getObjectClassName(t),n=dvr(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return JCt(t)&&!P1a(t)&&aSa.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(W1a(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var KOi=class{match(t){return tvr(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${dvr(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var JOi=class{match(t){return YCt(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var YOi=class{match(t){return VPe(t,"PromiseRejectionEvent")}coerce(t,r){let n=this.getUnhandledRejectionReason(t);return YCt(n)?{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(n)}`,stack:r.syntheticException?.stack,synthetic:!0}:r.apply(n)}getUnhandledRejectionReason(t){if(YCt(t))return t;try{if("reason"in t)return t.reason;if("detail"in t&&"reason"in t.detail)return t.detail.reason}catch{}return t}};var XOi=class{constructor(t){this._maxSize=t,this._cache=new Map}get(t){let r=this._cache.get(t);if(r!==void 0)return this._cache.delete(t),this._cache.set(t,r),r}set(t,r){this._cache.set(t,r)}reduce(){for(;this._cache.size>=this._maxSize;){let t=this._cache.keys().next().value;t&&this._cache.delete(t)}}};var lSa=require("fs"),pSa=require("readline"),mvr=new bF.ReduceableCache(25),fSa=new bF.ReduceableCache(20),ZOi=7,G0f=1e3,W0f=1e4;async function dSa(e){let t={};for(let i=e.length-1;i>=0;i--){let o=e[i],s=o?.filename;if(!o||typeof s!="string"||typeof o.lineno!="number"||J0f(s)||Y0f(o))continue;t[s]||(t[s]=[]),t[s].push(o.lineno)}let r=Object.keys(t);if(r.length==0)return e;let n=[];for(let i of r){if(fSa.get(i))continue;let o=t[i];if(!o)continue;o.sort((u,c)=>u-c);let s=Z0f(o);if(s.every(u=>X0f(i,u)))continue;let a=eEf(mvr,i,{});n.push($0f(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&H0f(e,mvr),mvr.reduce(),e}function $0f(e,t,r){return new Promise(n=>{let i=(0,lSa.createReadStream)(e),o=(0,pSa.createInterface)({input:i});function s(){i.destroy(),n()}let a=0,u=0,c=t[u];if(c===void 0)return void s();let l=c[0],p=c[1];function d(){fSa.set(e,1),o.close(),o.removeAllListeners(),s()}i.on("error",d),o.on("error",d),o.on("close",s),o.on("line",f=>{if(a++,!(a<l)&&(r[a]=tEf(f,0),a>=p)){if(u===t.length-1){o.close(),o.removeAllListeners();return}u++;let m=t[u];if(m===void 0){o.close(),o.removeAllListeners();return}l=m[0],p=m[1]}})})}function H0f(e,t){for(let r of e)if(r.filename&&r.context_line===void 0&&typeof r.lineno=="number"){let n=t.get(r.filename);if(n===void 0)continue;K0f(r.lineno,r,n)}}function K0f(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=mSa(e);i<e;i++){let o=r[i];if(o===void 0)return void uSa(t);t.pre_context.push(o)}if(r[e]===void 0)return void uSa(t);t.context_line=r[e];let n=hSa(e);t.post_context=[];for(let i=e+1;i<=n;i++){let o=r[i];if(o===void 0)break;t.post_context.push(o)}}function uSa(e){delete e.pre_context,delete e.context_line,delete e.post_context}function J0f(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function Y0f(e){return e.lineno!==void 0&&e.lineno>W0f||e.colno!==void 0&&e.colno>G0f}function X0f(e,t){let r=mvr.get(e);if(r===void 0)return!1;for(let n=t[0];n<=t[1];n++)if(r[n]===void 0)return!1;return!0}function Z0f(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=cSa(r),i=[];for(;;){if(t===e.length-1){i.push(n);break}let o=e[t+1];if(typeof o!="number")break;o<=n[1]?n[1]=o+ZOi:(i.push(n),n=cSa(o)),t++}return i}function cSa(e){return[mSa(e),hSa(e)]}function mSa(e){return Math.max(1,e-ZOi)}function hSa(e){return e+ZOi}function eEf(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function tEf(e,t){let r=e,n=r.length;if(n<=150)return r;t>n&&(t=n);let i=Math.max(t-60,0);i<5&&(i=0);let o=Math.min(i+140,n);return o>n-5&&(o=n),o===n&&(i=Math.max(o-140,0)),r=r.slice(i,o),i>0&&(r=`...${r}`),o<n&&(r+="..."),r}function rEf(e,t){let r=!1;return Object.assign(n=>{let o=global.process.listeners("uncaughtException").filter(s=>s.name!=="domainUncaughtExceptionClear"&&s._posthogErrorHandler!==!0).length===0;e(n,{mechanism:{type:"onuncaughtexception",handled:!1}}),!r&&o&&(r=!0,t(n))},{_posthogErrorHandler:!0})}function gSa(e,t){globalThis.process?.on("uncaughtException",rEf(e,t))}function ASa(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var nEf=2e3,sV=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new rvr({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return TOi(t)&&"__posthog_previously_captured_error"in t&&t.__posthog_previously_captured_error===!0}static async buildEventMessage(t,r,n,i){let o={...i};n||(o.$process_person_profile=!1);let s=this.errorPropertiesBuilder.buildFromUnknown(t,r);return s.$exception_list=await this.errorPropertiesBuilder.modifyFrames(s.$exception_list),{event:"$exception",distinctId:n||sK(),properties:{...s,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(gSa(this.onException.bind(this),this.onFatalError.bind(this)),ASa(this.onException.bind(this)))}onException(t,r){this.client.addPendingPromise((async()=>{if(!e.isPreviouslyCapturedError(t)){let n=await e.buildEventMessage(t,r),o=n.properties?.$exception_list[0]?.type??"Exception";return this._rateLimiter.consumeRateLimit(o)?void this._logger.info("Skipping exception capture because of client rate limiting.",{exception:o}):this.client.capture(n)}})())}async onFatalError(t){console.error(t),await this.client.shutdown(nEf),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var ySa="5.26.2";var txt={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};async function bSa(e){let t=globalThis.crypto?.subtle;if(!t)throw new Error("SubtleCrypto API not available");let r=await t.digest("SHA-1",new TextEncoder().encode(e));return Array.from(new Uint8Array(r)).map(i=>i.toString(16).padStart(2,"0")).join("")}var iEf=6e4,oEf=1152921504606847e3,sEf=["is_not"],z9e=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},ah=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},uK=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},hvr=class{constructor({pollingInterval:t,personalApiKey:r,projectApiKey:n,timeout:i,host:o,customHeaders:s,...a}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollingInterval=t,this.personalApiKey=r,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=i,this.projectApiKey=n,this.host=o,this.poller=void 0,this.fetch=a.fetch||fetch,this.onError=a.onError,this.customHeaders=s,this.onLoad=a.onLoad,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.loadFeatureFlags()}debug(t=!0){this.debugMode=t}logMsgIfDebug(t){this.debugMode&&t()}createEvaluationContext(t,r={},n={},i={},o={}){return{distinctId:t,groups:r,personProperties:n,groupProperties:i,evaluationCache:o}}async getFeatureFlag(t,r,n={},i={},o={}){await this.loadFeatureFlags();let s,a;if(!this.loadedSuccessfullyOnce)return s;if(a=this.featureFlagsByKey[t],a!==void 0){let u=this.createEvaluationContext(r,n,i,o);try{s=(await this.computeFlagAndPayloadLocally(a,u)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${t} -> ${s}`))}catch(c){c instanceof uK||c instanceof ah?this.logMsgIfDebug(()=>console.debug(`${c.name} when computing flag locally: ${t}: ${c.message}`)):c instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${t}: ${c}`))}}return s}async getAllFlagsAndPayloads(t,r){await this.loadFeatureFlags();let n={},i={},o=this.featureFlags.length==0,s=r?r.map(u=>this.featureFlagsByKey[u]).filter(Boolean):this.featureFlags,a={...t,evaluationCache:t.evaluationCache??{}};return await Promise.all(s.map(async u=>{try{let{value:c,payload:l}=await this.computeFlagAndPayloadLocally(u,a);n[u.key]=c,l&&(i[u.key]=l)}catch(c){c instanceof uK||c instanceof ah?this.logMsgIfDebug(()=>console.debug(`${c.name} when computing flag locally: ${u.key}: ${c.message}`)):c instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${u.key}: ${c}`)),o=!0}})),{response:n,payloads:i,fallbackToFlags:o}}async computeFlagAndPayloadLocally(t,r,n={}){let{matchValue:i,skipLoadCheck:o=!1}=n;if(o||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};let s;s=i!==void 0?i:await this.computeFlagValueLocally(t,r);let a=this.getFeatureFlagPayload(t.key,s);return{value:s,payload:a}}async computeFlagValueLocally(t,r){let{distinctId:n,groups:i,personProperties:o,groupProperties:s}=r;if(t.ensure_experience_continuity)throw new ah("Flag has experience continuity enabled");if(!t.active)return!1;let u=(t.filters||{}).aggregation_group_type_index;if(u!=null){let c=this.groupTypeMapping[String(u)];if(!c)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${u} for feature flag ${t.key}`)),new ah("Flag has unknown group type index");if(!(c in i))return this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute group feature flag: ${t.key} without group names passed in`)),!1;t.bucketing_identifier==="device_id"&&(o?.$device_id===void 0||o?.$device_id===null||o?.$device_id==="")&&this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Ignoring bucketing_identifier for group flag: ${t.key}`));let l=s[c];return await this.matchFeatureFlagProperties(t,i[c],l,r)}{let c=this.getBucketingValueForFlag(t,n,o);if(c===void 0)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute feature flag: ${t.key} without $device_id, falling back to server evaluation`)),new ah(`Can't compute feature flag: ${t.key} without $device_id`);return await this.matchFeatureFlagProperties(t,c,o,r)}}getBucketingValueForFlag(t,r,n){if(t.filters?.aggregation_group_type_index!=null)return r;if(t.bucketing_identifier==="device_id"){let i=n?.$device_id;return i==null||i===""?void 0:i}return r}getFeatureFlagPayload(t,r){let n=null;if(r!==!1&&r!=null&&(typeof r=="boolean"?n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r.toString()]||null:typeof r=="string"&&(n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r]||null),n!=null)){if(typeof n=="object")return n;if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}return null}async evaluateFlagDependency(t,r,n){let{evaluationCache:i}=n,o=t.key;if(!this.featureFlagsByKey)throw new ah("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new ah(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new ah(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new ah(`Circular dependency detected for flag '${o}' (empty dependency chain)`);for(let u of s){if(!(u in i)){let l=this.featureFlagsByKey[u];if(l)if(l.active)try{let p=await this.computeFlagValueLocally(l,n);i[u]=p}catch(p){throw new ah(`Error evaluating flag dependency '${u}' for flag '${o}': ${p}`)}else i[u]=!1;else throw new ah(`Missing flag dependency '${u}' for flag '${o}'`)}if(i[u]==null)throw new ah(`Dependency '${u}' could not be evaluated`)}let a=i[o];return this.flagEvaluatesToExpectedValue(t.value,a)}flagEvaluatesToExpectedValue(t,r){return typeof t=="boolean"?t===r||typeof r=="string"&&r!==""&&t===!0:typeof t=="string"?r===t:!1}async matchFeatureFlagProperties(t,r,n,i){let o=t.filters||{},s=o.groups||[],a=!1,u;for(let c of s)try{if(await this.isConditionMatch(t,r,c,n,i)){let l=c.variant,p=o.multivariate?.variants||[];u=l&&p.some(d=>d.key===l)?l:await this.getMatchingVariant(t,r)||!0;break}}catch(l){if(l instanceof uK)throw l;if(l instanceof ah)a=!0;else throw l}if(u!==void 0)return u;if(a)throw new ah("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(t,r,n,i,o){let s=n.rollout_percentage,a=u=>{this.logMsgIfDebug(()=>console.warn(u))};if((n.properties||[]).length>0){for(let u of n.properties){let c=u.type,l=!1;if(l=c==="cohort"?CSa(u,i,this.cohorts,this.debugMode):c==="flag"?await this.evaluateFlagDependency(u,i,o):wSa(u,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await ESa(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await ESa(t.key,r,"variant"),i=this.variantLookupTable(t).find(o=>n>=o.valueMin&&n<o.valueMax);if(i)return i.key}variantLookupTable(t){let r=[],n=0,i=0;return((t.filters||{}).multivariate?.variants||[]).forEach(a=>{i=n+a.rollout_percentage/100,r.push({valueMin:n,valueMax:i,key:a.key}),n=i}),r}updateFlagState(t){this.featureFlags=t.flags,this.featureFlagsByKey=t.flags.reduce((r,n)=>(r[n.key]=n,r),{}),this.groupTypeMapping=t.groupTypeMapping,this.cohorts=t.cohorts,this.loadedSuccessfullyOnce=!0}warnAboutExperienceContinuityFlags(t){if(this.strictLocalEvaluation)return;let r=t.filter(n=>n.ensure_experience_continuity);r.length>0&&console.warn(`[PostHog] You are using local evaluation but ${r.length} flag(s) have experience continuity enabled: ${r.map(n=>n.key).join(", ")}. Experience continuity is incompatible with local evaluation and will cause a server request on every flag evaluation, negating local evaluation cost savings. To avoid server requests and unexpected costs, either disable experience continuity on these flags in PostHog, use strictLocalEvaluation: true in client init, or pass onlyEvaluateLocally: true per flag call (flags that cannot be evaluated locally will return undefined).`)}async loadFromCache(t){if(!this.cacheProvider)return!1;try{let r=await this.cacheProvider.getFlagDefinitions();return r?(this.updateFlagState(r),this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] ${t} (${r.flags.length} flags)`)),this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(r.flags),!0):!1}catch(r){return this.onError?.(new Error(`Failed to load from cache: ${r}`)),!1}}async loadFeatureFlags(t=!1){if(!(this.loadedSuccessfullyOnce&&!t))return!t&&this.nextFetchAllowedAt&&Date.now()<this.nextFetchAllowedAt?void this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Skipping fetch, in backoff period")):(this.loadingPromise||(this.loadingPromise=this._loadFeatureFlags().catch(r=>this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Failed to load feature flags: ${r}`))).finally(()=>{this.loadingPromise=void 0})),this.loadingPromise)}isLocalEvaluationReady(){return(this.loadedSuccessfullyOnce??!1)&&(this.featureFlags?.length??0)>0}getFlagDefinitionsLoadedAt(){return this.flagDefinitionsLoadedAt}getPollingInterval(){return this.shouldBeginExponentialBackoff?Math.min(iEf,this.pollingInterval*2**this.backOffCount):this.pollingInterval}beginBackoff(){this.shouldBeginExponentialBackoff=!0,this.backOffCount+=1,this.nextFetchAllowedAt=Date.now()+this.getPollingInterval()}clearBackoff(){this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.nextFetchAllowedAt=void 0}async _loadFeatureFlags(){this.poller&&(clearTimeout(this.poller),this.poller=void 0),this.poller=setTimeout(()=>this.loadFeatureFlags(!0),this.getPollingInterval());try{let t=!0;if(this.cacheProvider)try{t=await this.cacheProvider.shouldFetchFlagDefinitions()}catch(n){this.onError?.(new Error(`Error in shouldFetchFlagDefinitions: ${n}`))}if(!t&&(await this.loadFromCache("Loaded flags from cache (skipped fetch)")||this.loadedSuccessfullyOnce))return;let r=await this._requestFeatureFlagDefinitions();if(!r)return;switch(r.status){case 304:this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Flags not modified (304), using cached data")),this.flagsEtag=r.headers?.get("ETag")??this.flagsEtag,this.loadedSuccessfullyOnce=!0,this.clearBackoff();return;case 401:throw this.beginBackoff(),new z9e(`Your project key or personal API key is invalid. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 402:console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - unsetting all local flags. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={};return;case 403:throw this.beginBackoff(),new z9e(`Your personal API key does not have permission to fetch feature flag definitions for local evaluation. Setting next polling interval to ${this.getPollingInterval()}ms. Are you sure you're using the correct personal and Project API key pair? More information: https://posthog.com/docs/api/overview`);case 429:throw this.beginBackoff(),new z9e(`You are being rate limited. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 200:{let n=await r.json()??{};if(!("flags"in n))return void this.onError?.(new Error(`Invalid response when getting feature flags: ${JSON.stringify(n)}`));this.flagsEtag=r.headers?.get("ETag")??void 0;let i={flags:n.flags??[],groupTypeMapping:n.group_type_mapping||{},cohorts:n.cohorts||{}};if(this.updateFlagState(i),this.flagDefinitionsLoadedAt=Date.now(),this.clearBackoff(),this.cacheProvider&&t)try{await this.cacheProvider.onFlagDefinitionsReceived(i)}catch(o){this.onError?.(new Error(`Failed to store in cache: ${o}`))}this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(i.flags);break}default:return}}catch(t){t instanceof z9e&&this.onError?.(t)}}getPersonalApiKeyRequestOptions(t="GET",r){let n={...this.customHeaders,"Content-Type":"application/json",Authorization:`Bearer ${this.personalApiKey}`};return r&&(n["If-None-Match"]=r),{method:t,headers:n}}_requestFeatureFlagDefinitions(){let t=`${this.host}/api/feature_flag/local_evaluation?token=${this.projectApiKey}&send_cohorts`,r=this.getPersonalApiKeyRequestOptions("GET",this.flagsEtag),n=null;if(this.timeout&&typeof this.timeout=="number"){let i=new AbortController;n=qPe(()=>{i.abort()},this.timeout),r.signal=i.signal}try{let i=this.fetch;return i(t,r)}finally{clearTimeout(n)}}async stopPoller(t=3e4){if(clearTimeout(this.poller),this.cacheProvider)try{let r=this.cacheProvider.shutdown();r instanceof Promise&&await Promise.race([r,new Promise((n,i)=>setTimeout(()=>i(new Error(`Cache shutdown timeout after ${t}ms`)),t))])}catch(r){this.onError?.(new Error(`Error during cache shutdown: ${r}`))}}};async function ESa(e,t,r=""){let n=await bSa(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/oEf}function wSa(e,t,r){let n=e.key,i=e.value,o=e.operator||"exact";if(n in t){if(o==="is_not_set")throw new ah("Operator is_not_set is not supported")}else throw new ah(`Property ${n} not found in propertyValues`);let s=t[n];if(s==null&&!sEf.includes(o))return r&&r(`Property ${n} cannot have a value of null/undefined with the ${o} operator`),!1;function a(c,l){return Array.isArray(c)?c.map(p=>String(p).toLowerCase()).includes(String(l).toLowerCase()):String(c).toLowerCase()===String(l).toLowerCase()}function u(c,l,p){if(p==="gt")return c>l;if(p==="gte")return c>=l;if(p==="lt")return c<l;if(p==="lte")return c<=l;throw new Error(`Invalid operator: ${p}`)}switch(o){case"exact":return a(i,s);case"is_not":return!a(i,s);case"is_set":return n in t;case"icontains":return String(s).toLowerCase().includes(String(i).toLowerCase());case"not_icontains":return!String(s).toLowerCase().includes(String(i).toLowerCase());case"regex":return vSa(String(i))&&String(s).match(String(i))!==null;case"not_regex":return vSa(String(i))&&String(s).match(String(i))===null;case"gt":case"gte":case"lt":case"lte":{let c=typeof i=="number"?i:null;if(typeof i=="string")try{c=parseFloat(i)}catch{}return c==null||s==null?u(String(s),String(i),o):typeof s=="string"?u(s,String(i),o):u(s,c,o)}case"is_date_after":case"is_date_before":{if(typeof i=="boolean")throw new ah("Date operations cannot be performed on boolean values");let c=uEf(String(i));if(c==null&&(c=ISa(i)),c==null)throw new ah(`Invalid date: ${i}`);let l=ISa(s);return["is_date_before"].includes(o)?l<c:l>c}default:throw new ah(`Unknown operator: ${o}`)}}function aEf(e,t){if(!(e in t))throw new uK(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}function CSa(e,t,r,n=!1){let i=String(e.value);aEf(i,r);let o=r[i];return xSa(o,t,r,n)}function xSa(e,t,r,n=!1){if(!e)return!0;let i=e.type,o=e.values;if(!o||o.length===0)return!0;let s=!1;if("values"in o[0]){for(let a of o)try{let u=xSa(a,t,r,n);if(i==="AND"){if(!u)return!1}else if(u)return!0}catch(u){if(u instanceof uK)throw u;if(u instanceof ah)n&&console.debug(`Failed to compute property ${a} locally: ${u}`),s=!0;else throw u}if(s)throw new ah("Can't match cohort without a given cohort property value");return i==="AND"}for(let a of o)try{let u;if(a.type==="cohort")u=CSa(a,t,r,n);else if(a.type==="flag"){n&&console.warn(`[FEATURE FLAGS] Flag dependency filters are not supported in local evaluation. Skipping condition with dependency on flag '${a.key||"unknown"}'`);continue}else u=wSa(a,t);let c=a.negation||!1;if(i==="AND"){if(!u&&!c||u&&c)return!1}else if(u&&!c||!u&&c)return!0}catch(u){if(u instanceof uK)throw u;if(u instanceof ah)n&&console.debug(`Failed to compute property ${a} locally: ${u}`),s=!0;else throw u}if(s)throw new ah("can't match cohort without a given cohort property value");return i==="AND"}function vSa(e){try{return new RegExp(e),!0}catch{return!1}}function ISa(e){if(e instanceof Date)return e;if(typeof e=="string"||typeof e=="number"){let t=new Date(e);if(!isNaN(t.valueOf()))return t;throw new ah(`${e} is in an invalid date format`)}throw new ah(`The date provided ${e} must be a string, number, or date object`)}function uEf(e){let t=/^-?(?<number>[0-9]+)(?<interval>[a-z])$/,r=e.match(t),n=new Date(new Date().toISOString());if(!r)return null;{if(!r.groups)return null;let i=parseInt(r.groups.number);if(i>=1e4)return null;let o=r.groups.interval;if(o=="h")n.setUTCHours(n.getUTCHours()-i);else if(o=="d")n.setUTCDate(n.getUTCDate()-i);else if(o=="w")n.setUTCDate(n.getUTCDate()-7*i);else if(o=="m")n.setUTCMonth(n.getUTCMonth()-i);else{if(o!="y")return null;n.setUTCFullYear(n.getUTCFullYear()-i)}return n}}var gvr=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var cEf=100,_Sa=3e4,lEf=5e4,Avr=class extends ext{constructor(t,r={}){if(super(t,r),this._memoryStorage=new gvr,this.options=r,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof r.featureFlagsPollingInterval=="number"?Math.max(r.featureFlagsPollingInterval,cEf):_Sa,r.personalApiKey){if(r.personalApiKey.includes("phc_"))throw new Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');r.enableLocalEvaluation!==!1&&(this.featureFlagsPoller=new hvr({pollingInterval:this.options.featureFlagsPollingInterval,personalApiKey:r.personalApiKey,projectApiKey:t,timeout:r.requestTimeout??1e4,host:this.host,fetch:r.fetch,onError:i=>{this._events.emit("error",i)},onLoad:i=>{this._events.emit("localEvaluationFlagsLoaded",i)},customHeaders:this.getCustomHeaders(),cacheProvider:r.flagDefinitionCacheProvider,strictLocalEvaluation:r.strictLocalEvaluation}))}this.errorTracking=new sV(this,r,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=r.maxCacheSize||lEf}getPersistedProperty(t){return this._memoryStorage.getProperty(t)}setPersistedProperty(t,r){return this._memoryStorage.setProperty(t,r)}fetch(t,r){return this.options.fetch?this.options.fetch(t,r):fetch(t,r)}getLibraryVersion(){return ySa}getCustomUserAgent(){return`${this.getLibraryId()}/${this.getLibraryVersion()}`}enable(){return super.optIn()}disable(){return super.optOut()}debug(t=!0){super.debug(t),this.featureFlagsPoller?.debug(t)}capture(t){typeof t=="string"&&this._logger.warn("Called capture() with a string as the first argument when an object was expected."),t.event==="$exception"&&!t._originatedFromCaptureException&&this._logger.warn("Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this.addPendingPromise(this.prepareEventMessage(t).then(({distinctId:r,event:n,properties:i,options:o})=>super.captureStateless(r,n,i,{timestamp:o.timestamp,disableGeoip:o.disableGeoip,uuid:o.uuid})).catch(r=>{r&&console.error(r)}))}async captureImmediate(t){return typeof t=="string"&&this._logger.warn("Called captureImmediate() with a string as the first argument when an object was expected."),t.event==="$exception"&&!t._originatedFromCaptureException&&this._logger.warn("Capturing a `$exception` event via `posthog.captureImmediate('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureExceptionImmediate(error)` instead, which attaches this metadata by default."),this.addPendingPromise(this.prepareEventMessage(t).then(({distinctId:r,event:n,properties:i,options:o})=>super.captureStatelessImmediate(r,n,i,{timestamp:o.timestamp,disableGeoip:o.disableGeoip,uuid:o.uuid})).catch(r=>{r&&console.error(r)}))}identify({distinctId:t,properties:r={},disableGeoip:n}){let{$set:i,$set_once:o,$anon_distinct_id:s,...a}=r,l={$set:i||a,$set_once:o||{},$anon_distinct_id:s??void 0};super.identifyStateless(t,l,{disableGeoip:n})}async identifyImmediate({distinctId:t,properties:r={},disableGeoip:n}){let{$set:i,$set_once:o,$anon_distinct_id:s,...a}=r,l={$set:i||a,$set_once:o||{},$anon_distinct_id:s??void 0};super.identifyStatelessImmediate(t,l,{disableGeoip:n})}alias(t){super.aliasStateless(t.alias,t.distinctId,void 0,{disableGeoip:t.disableGeoip})}async aliasImmediate(t){await super.aliasStatelessImmediate(t.alias,t.distinctId,void 0,{disableGeoip:t.disableGeoip})}isLocalEvaluationReady(){return this.featureFlagsPoller?.isLocalEvaluationReady()??!1}async waitForLocalEvaluationReady(t=_Sa){return this.isLocalEvaluationReady()?!0:this.featureFlagsPoller===void 0?!1:new Promise(r=>{let n=setTimeout(()=>{i(),r(!1)},t),i=this._events.on("localEvaluationFlagsLoaded",o=>{clearTimeout(n),i(),r(o>0)})})}_resolveDistinctId(t,r){return typeof t=="string"?{distinctId:t,options:r}:{distinctId:this.context?.get()?.distinctId,options:t}}async _getFeatureFlagResult(t,r,n={},i){let o=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&t in this._flagOverrides){let w=this._flagOverrides[t];if(w===void 0)return;let x=this._payloadOverrides?.[t];return{key:t,enabled:w!==!1,variant:typeof w=="string"?w:void 0,payload:x}}let{groups:s,disableGeoip:a}=n,{onlyEvaluateLocally:u,personProperties:c,groupProperties:l}=n,p=this.addLocalPersonAndGroupProperties(r,s,c,l);c=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(r,s,c,l);u==null&&(u=this.options.strictLocalEvaluation??!1);let f,m=!1,h,g,A,E,v,b;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let w=this.featureFlagsPoller?.featureFlagsByKey[t];if(w)try{let x=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(w,d,{matchValue:i});if(x){m=!0;let C=x.value;E=w.id,b="Evaluated locally",f={key:t,enabled:C!==!1,variant:typeof C=="string"?C:void 0,payload:x.payload??void 0}}}catch(x){if(x instanceof uK||x instanceof ah)this._logger?.info(`${x.name} when computing flag locally: ${t}: ${x.message}`);else throw x}}if(!m&&!u){let w=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(w===void 0)A=txt.UNKNOWN_ERROR;else{h=w.requestId,g=w.evaluatedAt;let x=[];w.errorsWhileComputingFlags&&x.push(txt.ERRORS_WHILE_COMPUTING),w.quotaLimited?.includes("feature_flags")&&x.push(txt.QUOTA_LIMITED);let C=w.flags[t];if(C===void 0)x.push(txt.FLAG_MISSING);else{E=C.metadata?.id,v=C.metadata?.version,b=C.reason?.description??C.reason?.code;let _;if(C.metadata?.payload!==void 0)try{_=JSON.parse(C.metadata.payload)}catch{_=C.metadata.payload}f={key:t,enabled:C.enabled,variant:C.variant,payload:_}}x.length>0&&(A=x.join(","))}}if(o){let w=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,x=`${t}_${w}`;if(!(r in this.distinctIdHasSentFlagCalls)||!this.distinctIdHasSentFlagCalls[r].includes(x)){Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(x):this.distinctIdHasSentFlagCalls[r]=[x];let C={$feature_flag:t,$feature_flag_response:w,$feature_flag_id:E,$feature_flag_version:v,$feature_flag_reason:b,locally_evaluated:m,[`$feature/${t}`]:w,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():g};if(m&&this.featureFlagsPoller){let _=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();_!==void 0&&(C.$feature_flag_definitions_loaded_at=_)}A&&(C.$feature_flag_error=A),this.capture({distinctId:r,event:"$feature_flag_called",properties:C,groups:s,disableGeoip:a})}}return f!==void 0&&this._payloadOverrides!==void 0&&t in this._payloadOverrides&&(f={...f,payload:this._payloadOverrides[t]}),f}async getFeatureFlag(t,r,n){let i=await this._getFeatureFlagResult(t,r,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(i!==void 0)return i.enabled===!1?!1:i.variant??!0}async getFeatureFlagPayload(t,r,n,i){if(this._payloadOverrides!==void 0&&t in this._payloadOverrides)return this._payloadOverrides[t];let o=await this._getFeatureFlagResult(t,r,{...i,sendFeatureFlagEvents:!1},n);if(o!==void 0)return o.payload??null}async getFeatureFlagResult(t,r,n){let{distinctId:i,options:o}=this._resolveDistinctId(r,n);return i?this._getFeatureFlagResult(t,i,{...o,sendFeatureFlagEvents:o?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0}):void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()")}async getRemoteConfigPayload(t){if(!this.options.personalApiKey)throw new Error("Personal API key is required for remote config payload decryption");let r=await this._requestRemoteConfigPayload(t);if(!r)return;let n=await r.json();if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}async isFeatureEnabled(t,r,n){let i=await this.getFeatureFlag(t,r,n);if(i!==void 0)return!!i||!1}async getAllFlags(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);return n?(await this.getAllFlagsAndPayloads(n,i)).featureFlags||{}:(this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{})}async getAllFlagsAndPayloads(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);if(!n)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};let{groups:o,disableGeoip:s,flagKeys:a}=i||{},{onlyEvaluateLocally:u,personProperties:c,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,c,l);c=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,c,l);u==null&&(u=this.options.strictLocalEvaluation??!1);let f=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),m={},h={},g=!0;if(f&&(m=f.response,h=f.payloads,g=f.fallbackToFlags),g&&!u){let A=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);m={...m,...A.flags||{}},h={...h,...A.payloads||{}}}return this._flagOverrides!==void 0&&(m={...m,...this._flagOverrides}),this._payloadOverrides!==void 0&&(h={...h,...this._payloadOverrides}),{featureFlags:m,featureFlagPayloads:h}}groupIdentify({groupType:t,groupKey:r,properties:n,distinctId:i,disableGeoip:o}){super.groupIdentifyStateless(t,r,n,{disableGeoip:o},i)}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(t){let r=n=>Object.fromEntries(n.map(i=>[i,!0]));if(t===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(t)){this._flagOverrides=r(t);return}if(this._isFeatureFlagOverrideOptions(t)){"flags"in t&&(t.flags===!1?this._flagOverrides=void 0:Array.isArray(t.flags)?this._flagOverrides=r(t.flags):t.flags!==void 0&&(this._flagOverrides={...t.flags})),"payloads"in t&&(t.payloads===!1?this._payloadOverrides=void 0:t.payloads!==void 0&&(this._payloadOverrides={...t.payloads}));return}this._flagOverrides={...t}}_isFeatureFlagOverrideOptions(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let r=t;if("flags"in r){let n=r.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in r){let n=r.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(t,r,n){return this.context?this.context.run(t,r,n):r()}getContext(){return this.context?.get()}enterContext(t,r){this.context?.enter(t,r)}async _shutdown(t){return this.featureFlagsPoller?.stopPoller(t),this.errorTracking.shutdown(),super._shutdown(t)}async _requestRemoteConfigPayload(t){if(!this.options.personalApiKey)return;let r=`${this.host}/api/projects/@current/feature_flags/${t}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},i=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let o=new AbortController;i=qPe(()=>{o.abort()},this.options.requestTimeout),n.signal=o.signal}try{return await this.fetch(r,n)}catch(o){this._events.emit("error",o);return}finally{i&&clearTimeout(i)}}extractPropertiesFromEvent(t,r){if(!t)return{personProperties:{},groupProperties:{}};let n={},i={};for(let[o,s]of Object.entries(t))if(R1a(s)&&r&&o in r){let a={};for(let[u,c]of Object.entries(s))a[String(u)]=String(c);i[String(o)]=a}else n[String(o)]=String(s);return{personProperties:n,groupProperties:i}}async getFeatureFlagsForEvent(t,r,n,i){let o=i?.personProperties||{},s=i?.groupProperties||{},a=i?.flagKeys;if(i?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let c={};for(let[l,p]of Object.entries(r||{}))c[l]=String(p);return await this.getAllFlags(t,{groups:c,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}else return{};if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let c={};for(let[l,p]of Object.entries(r||{}))c[l]=String(p);return await this.getAllFlags(t,{groups:c,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}return(await super.getFeatureFlagsStateless(t,r,o,s,n)).flags}addLocalPersonAndGroupProperties(t,r,n,i){let o={distinct_id:t,...n||{}},s={};if(r)for(let a of Object.keys(r))s[a]={$group_key:r[a],...i?.[a]||{}};return{allPersonProperties:o,allGroupProperties:s}}createFeatureFlagEvaluationContext(t,r,n,i){return{distinctId:t,groups:r||{},personProperties:n||{},groupProperties:i||{},evaluationCache:{}}}captureException(t,r,n,i){if(!sV.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");this.addPendingPromise(sV.buildEventMessage(t,{syntheticException:o},r,n).then(s=>this.capture({...s,uuid:i})))}}async captureExceptionImmediate(t,r,n){if(!sV.isPreviouslyCapturedError(t)){let i=new Error("PostHog syntheticException");this.addPendingPromise(sV.buildEventMessage(t,{syntheticException:i},r,n).then(o=>this.captureImmediate(o)))}}async prepareEventMessage(t){let{distinctId:r,event:n,properties:i,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:u,uuid:c}=t,l=this.context?.get(),p=r||l?.distinctId,d={...this.props,...l?.properties||{},...i||{}};p||(p=sK(),d.$process_person_profile=!1),l?.sessionId&&!d.$session_id&&(d.$session_id=l.sessionId);let f=this._runBeforeSend({distinctId:p,event:n,properties:d,groups:o,sendFeatureFlags:s,timestamp:a,disableGeoip:u,uuid:c});if(!f)return Promise.reject(null);let m=await Promise.resolve().then(async()=>{if(s){let h=typeof s=="object"?s:void 0;return await this.getFeatureFlagsForEvent(f.distinctId,o,u,h)}return f.event,{}}).then(h=>{let g={};if(h)for(let[E,v]of Object.entries(h))g[`$feature/${E}`]=v;let A=Object.keys(h||{}).filter(E=>h?.[E]!==!1).sort();return A.length>0&&(g.$active_feature_flags=A),g}).catch(()=>({})).then(h=>({...h,...f.properties||{},$groups:f.groups||o}));return f.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof m.$raw_user_agent=="string"&&B1a(m.$raw_user_agent,this.options.custom_blocked_useragents||[])&&(f.event="$bot_pageview",m.$browser_type="bot"),{distinctId:f.distinctId,event:f.event,properties:m,options:{timestamp:f.timestamp,disableGeoip:f.disableGeoip,uuid:f.uuid}}}_runBeforeSend(t){let r=this.options.before_send;if(!r)return t;let n=Array.isArray(r)?r:[r],i=t;for(let o of n){if(i=o(i),!i)return this._logger.info(`Event '${t.event}' was rejected in beforeSend function`),null;if(!i.properties||Object.keys(i.properties).length===0){let s=`Event '${i.event}' has no properties after beforeSend function, this is likely an error.`;this._logger.warn(s)}}return i}};var SSa=require("async_hooks"),yvr=class{constructor(){this.storage=new SSa.AsyncLocalStorage}get(){return this.storage.getStore()}run(t,r,n){return this.storage.run(this.resolve(t,n),r)}enter(t,r){this.storage.enterWith(this.resolve(t,r))}resolve(t,r){if(r?.fresh===!0)return t;let n=this.get()||{};return{distinctId:t.distinctId??n.distinctId,sessionId:t.sessionId??n.sessionId,properties:{...n.properties||{},...t.properties||{}}}}};var BSa="posthog-node";function pEf(e,{organization:t,projectId:r,prefix:n,severityAllowList:i=["error"],sendExceptionsToPostHog:o=!0}={}){return s=>{if(!(i==="*"||i.includes(s.level)))return s;s.tags||(s.tags={});let u=s.tags[ePi.POSTHOG_ID_TAG];if(u===void 0)return s;let c=e.options.host??"https://us.i.posthog.com",l=new URL(`/project/${e.apiKey}/person/${u}`,c).toString();s.tags["PostHog Person URL"]=l;let p=s.exception?.values||[],d=p.map(m=>({...m,stacktrace:m.stacktrace?{...m.stacktrace,type:"raw",frames:(m.stacktrace.frames||[]).map(h=>({...h,platform:"node:javascript"}))}:void 0})),f={$exception_message:p[0]?.value||s.message,$exception_type:p[0]?.type,$exception_level:s.level,$exception_list:d,$sentry_event_id:s.event_id,$sentry_exception:s.exception,$sentry_exception_message:p[0]?.value||s.message,$sentry_exception_type:p[0]?.type,$sentry_tags:s.tags};return t&&r&&(f.$sentry_url=(n||"https://sentry.io/organizations/")+t+"/issues/?project="+r+"&query="+s.event_id),o&&e.capture({event:"$exception",distinctId:u,properties:f}),s}}var ePi=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=BSa,this.name=BSa,this.setupOnce=function(s,a){let u=a()?.getClient()?.getDsn()?.projectId;s(pEf(t,{organization:r,projectId:u,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};sV.errorPropertiesBuilder=new bF.ErrorPropertiesBuilder([new bF.EventCoercer,new bF.ErrorCoercer,new bF.ObjectCoercer,new bF.StringCoercer,new bF.PrimitiveCoercer],bF.createStackParser("node:javascript",bF.nodeStackLineParser),[C1a(),dSa]);var V9e=class extends Avr{getLibraryId(){return"posthog-node"}initializeContext(){return new yvr}};var bvr=class{posthog;constructor({posthogApiKey:t}){this.posthog=new V9e(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"4.32.2",usingAccessToken:!0}})}async flush(){await this.posthog.flush()}};var rxt=class{async sendEvent(){}async identify(){}async flush(){}};Vt();var q9e=require("fs/promises"),OSa=require("os"),PSa=require("path");var fEf="id",dEf=".fern",nxt=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new V9e(r),this.userId=t==null?void 0:ACi(t),this.token=t}async identify(){this.userId!=null&&this.posthog.alias({distinctId:this.userId,alias:await this.getPersistedDistinctId()})}async sendEvent(t){let r=await this.getUserEmail();this.posthog.capture({distinctId:this.userId??await this.getPersistedDistinctId(),event:"CLI",properties:{version:"4.32.2",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{}}})}async flush(){await this.posthog.flush()}userEmail;async getUserEmail(){if(this.userEmail!==null){if(this.userEmail!=null)return this.userEmail;if(this.token==null){this.userEmail=null;return}try{let t=await FA({token:this.token.value}).user.getMyself();if(t.ok&&t.body.email!=null)return this.userEmail=t.body.email,this.userEmail}catch{}this.userEmail=null}}persistedDistinctId;async getPersistedDistinctId(){if(this.persistedDistinctId==null){let t=We(Ut.of((0,OSa.homedir)()),Se.of(dEf),Se.of(fEf));await Xt(t)||(await(0,q9e.mkdir)((0,PSa.dirname)(t),{recursive:!0}),await(0,q9e.writeFile)(t,hC())),this.persistedDistinctId=(await(0,q9e.readFile)(t)).toString()}return this.persistedDistinctId}};var tPi;async function G9e(){return tPi==null&&(tPi=await mEf()),tPi}async function mEf(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new rxt;let r=await Dhr();return r!=null?new nxt({token:r,posthogApiKey:e}):await VH()!=null?new bvr({posthogApiKey:e}):new nxt({token:void 0,posthogApiKey:e})}catch{return new rxt}}Rt();var ixt=_e(require("process"),1);pNe();var RSa=_e(wAi(),1),FSa=_e(DSa(),1);function DC(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=A5(e),e.length===0))return 0;e=e.replace((0,FSa.default)()," ");let r=t.ambiguousIsNarrow?1:2,n=0;for(let i of e){let o=i.codePointAt(0);if(o<=31||o>=127&&o<=159||o>=768&&o<=879)continue;switch(RSa.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}function Evr(e){let t=0;for(let r of e.split(`
1657
1657
  `))t=Math.max(t,DC(r));return t}var eBa=_e(nPi(),1);var gEf=/[\p{Lu}]/u,AEf=/[\p{Ll}]/u,NSa=/^[\p{Lu}](?![\p{Lu}])/gu,LSa=/([\p{Alpha}\p{N}_]|$)/u,iPi=/[_.\- ]+/,yEf=new RegExp("^"+iPi.source),jSa=new RegExp(iPi.source+LSa.source,"gu"),MSa=new RegExp("\\d+"+LSa.source,"gu"),bEf=(e,t,r,n)=>{let i=!1,o=!1,s=!1,a=!1;for(let u=0;u<e.length;u++){let c=e[u];a=u>2?e[u-3]==="-":!0,i&&gEf.test(c)?(e=e.slice(0,u)+"-"+e.slice(u),i=!1,s=o,o=!0,u++):o&&s&&AEf.test(c)&&(!a||n)?(e=e.slice(0,u-1)+"-"+e.slice(u-1),s=o,o=!1,i=!0):(i=t(c)===c&&r(c)!==c,s=o,o=r(c)===c&&t(c)!==c)}return e},EEf=(e,t)=>(NSa.lastIndex=0,e.replace(NSa,r=>t(r))),vEf=(e,t)=>(jSa.lastIndex=0,MSa.lastIndex=0,e.replace(jSa,(r,n)=>t(n)).replace(MSa,r=>t(r)));function oPi(e,t){if(!(typeof e=="string"||Array.isArray(e)))throw new TypeError("Expected the input to be `string | string[]`");if(t={pascalCase:!1,preserveConsecutiveUppercase:!1,...t},Array.isArray(e)?e=e.map(o=>o.trim()).filter(o=>o.length).join("-"):e=e.trim(),e.length===0)return"";let r=t.locale===!1?o=>o.toLowerCase():o=>o.toLocaleLowerCase(t.locale),n=t.locale===!1?o=>o.toUpperCase():o=>o.toLocaleUpperCase(t.locale);return e.length===1?iPi.test(e)?"":t.pascalCase?n(e):r(e):(e!==r(e)&&(e=bEf(e,r,n,t.preserveConsecutiveUppercase)),e=e.replace(yEf,""),e=t.preserveConsecutiveUppercase?EEf(e,r):r(e),t.pascalCase&&(e=n(e.charAt(0))+e.slice(1)),vEf(e,n))}var cPi=_e(zSa(),1);pNe();var VSa=(e=0)=>t=>`\x1B[${t+e}m`,qSa=(e=0)=>t=>`\x1B[${38+e};5;${t}m`,GSa=(e=0)=>(t,r,n)=>`\x1B[${38+e};2;${t};${r};${n}m`,Iy={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},ILy=Object.keys(Iy.modifier),xEf=Object.keys(Iy.color),_Ef=Object.keys(Iy.bgColor),wLy=[...xEf,..._Ef];function SEf(){let e=new Map;for(let[t,r]of Object.entries(Iy)){for(let[n,i]of Object.entries(r))Iy[n]={open:`\x1B[${i[0]}m`,close:`\x1B[${i[1]}m`},r[n]=Iy[n],e.set(i[0],i[1]);Object.defineProperty(Iy,t,{value:r,enumerable:!1})}return Object.defineProperty(Iy,"codes",{value:e,enumerable:!1}),Iy.color.close="\x1B[39m",Iy.bgColor.close="\x1B[49m",Iy.color.ansi=VSa(),Iy.color.ansi256=qSa(),Iy.color.ansi16m=GSa(),Iy.bgColor.ansi=VSa(10),Iy.bgColor.ansi256=qSa(10),Iy.bgColor.ansi16m=GSa(10),Object.defineProperties(Iy,{rgbToAnsi256:{value(t,r,n){return t===r&&r===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(r/255*5)+Math.round(n/255*5)},enumerable:!1},hexToRgb:{value(t){let r=/[a-f\d]{6}|[a-f\d]{3}/i.exec(t.toString(16));if(!r)return[0,0,0];let[n]=r;n.length===3&&(n=[...n].map(o=>o+o).join(""));let i=Number.parseInt(n,16);return[i>>16&255,i>>8&255,i&255]},enumerable:!1},hexToAnsi256:{value:t=>Iy.rgbToAnsi256(...Iy.hexToRgb(t)),enumerable:!1},ansi256ToAnsi:{value(t){if(t<8)return 30+t;if(t<16)return 90+(t-8);let r,n,i;if(t>=232)r=((t-232)*10+8)/255,n=r,i=r;else{t-=16;let a=t%36;r=Math.floor(t/36)/5,n=Math.floor(a/6)/5,i=a%6/5}let o=Math.max(r,n,i)*2;if(o===0)return 30;let s=30+(Math.round(i)<<2|Math.round(n)<<1|Math.round(r));return o===2&&(s+=60),s},enumerable:!1},rgbToAnsi:{value:(t,r,n)=>Iy.ansi256ToAnsi(Iy.rgbToAnsi256(t,r,n)),enumerable:!1},hexToAnsi:{value:t=>Iy.ansi256ToAnsi(Iy.hexToAnsi256(t)),enumerable:!1}}),Iy}var BEf=SEf(),WSa=BEf;var vvr=new Set(["\x1B","\x9B"]),OEf=39,aPi="\x07",KSa="[",PEf="]",JSa="m",uPi=`${PEf}8;;`,$Sa=e=>`${vvr.values().next().value}${KSa}${e}${JSa}`,HSa=e=>`${vvr.values().next().value}${uPi}${e}${aPi}`,TEf=e=>e.split(" ").map(t=>DC(t)),sPi=(e,t,r)=>{let n=[...t],i=!1,o=!1,s=DC(A5(e[e.length-1]));for(let[a,u]of n.entries()){let c=DC(u);if(s+c<=r?e[e.length-1]+=u:(e.push(u),s=0),vvr.has(u)&&(i=!0,o=n.slice(a+1).join("").startsWith(uPi)),i){o?u===aPi&&(i=!1,o=!1):u===JSa&&(i=!1);continue}s+=c,s===r&&a<n.length-1&&(e.push(""),s=0)}!s&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop())},DEf=e=>{let t=e.split(" "),r=t.length;for(;r>0&&!(DC(t[r-1])>0);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},REf=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",i,o,s=TEf(e),a=[""];for(let[c,l]of e.split(" ").entries()){r.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let p=DC(a[a.length-1]);if(c!==0&&(p>=t&&(r.wordWrap===!1||r.trim===!1)&&(a.push(""),p=0),(p>0||r.trim===!1)&&(a[a.length-1]+=" ",p++)),r.hard&&s[c]>t){let d=t-p,f=1+Math.floor((s[c]-d-1)/t);Math.floor((s[c]-1)/t)<f&&a.push(""),sPi(a,l,t);continue}if(p+s[c]>t&&p>0&&s[c]>0){if(r.wordWrap===!1&&p<t){sPi(a,l,t);continue}a.push("")}if(p+s[c]>t&&r.wordWrap===!1){sPi(a,l,t);continue}a[a.length-1]+=l}r.trim!==!1&&(a=a.map(c=>DEf(c)));let u=[...a.join(`
1658
1658
  `)];for(let[c,l]of u.entries()){if(n+=l,vvr.has(l)){let{groups:d}=new RegExp(`(?:\\${KSa}(?<code>\\d+)m|\\${uPi}(?<uri>.*)${aPi})`).exec(u.slice(c).join(""))||{groups:{}};if(d.code!==void 0){let f=Number.parseFloat(d.code);i=f===OEf?void 0:f}else d.uri!==void 0&&(o=d.uri.length===0?void 0:d.uri)}let p=WSa.codes.get(Number(i));u[c+1]===`
1659
1659
  `?(o&&(n+=HSa("")),i&&p&&(n+=$Sa(p))):l===`
@@ -2163,7 +2163,7 @@ Hint: Values starting with "@" (such as scoped npm packages) must be wrapped in
2163
2163
  Example: package-name: "@scope/package"`)}return{success:!1,warnings:[{type:"conflict",message:`Failed to parse generators.yml: ${o}`}]}}}checkDeprecatedFields(t,r){t.openapi!=null&&r.push({type:"deprecated",message:"The 'openapi' field is deprecated",suggestion:"Use 'api.specs' instead"}),t["openapi-overrides"]!=null&&r.push({type:"deprecated",message:"The 'openapi-overrides' field is deprecated",suggestion:"Use 'api.specs.[].overrides' instead"}),t["spec-origin"]!=null&&r.push({type:"deprecated",message:"The 'spec-origin' field is deprecated",suggestion:"Use 'api.specs.[].origin' instead"}),t["async-api"]!=null&&r.push({type:"deprecated",message:"The 'async-api' field is deprecated",suggestion:"Use 'api.specs' with asyncapi instead"}),t["api-settings"]!=null&&r.push({type:"deprecated",message:"The 'api-settings' field is deprecated",suggestion:"Use 'api.specs.[].settings' instead"}),t.whitelabel!=null&&r.push({type:"unsupported",message:"Whitelabel configuration is not yet supported in fern.yml"}),t.metadata!=null&&r.push({type:"unsupported",message:"Metadata configuration is not yet supported in fern.yml"}),t.reviewers!=null&&r.push({type:"unsupported",message:"Reviewers configuration is not yet supported in fern.yml"}),t.aliases!=null&&r.push({type:"unsupported",message:"Group aliases are not yet supported in fern.yml",suggestion:"Use multiple group names in target.group array instead"}),t["auth-schemes"]!=null&&r.push({type:"info",message:"Auth schemes configuration detected but not yet migrated",suggestion:"Auth schemes will be supported in a future version"})}async getAbsoluteFilePath(){let t=We(this.cwd,Se.of(Hd)),r=We(this.cwd,Se.of(y4e));if(await Xt(t,"file"))return t;if(await Xt(r,"file"))return r}};var QSt=class{cwd;logger;deleteOriginals;constructor(t){this.cwd=t.cwd,this.logger=t.logger,this.deleteOriginals=t.deleteOriginals??!0}async migrate(){let t=[],r=[],n=await this.findFernDirectory();if(n==null)return{success:!1,warnings:[{type:"conflict",message:"Could not find fern directory",suggestion:"Run this command from a directory containing a 'fern' folder"}],migratedFiles:r};let o=await new kSt({cwd:n}).migrate();if(t.push(...o.warnings),!o.success||o.org==null)return{success:!1,warnings:[...t,{type:"conflict",message:"Failed to migrate fern.config.json - organization is required"}],migratedFiles:r};o.absoluteFilePath!=null&&r.push(o.absoluteFilePath);let s=We(n,Se.of(GO)),a=await Xt(s,"directory"),u;if(a){let p=await this.migrateMultiApi({fernDir:n,apisDir:s,org:o.org,warnings:t,migratedFiles:r});if(!p.success)return{success:!1,warnings:t,migratedFiles:r};u=p.fernYml}else{let p=await this.migrateSingleApi({fernDir:n,org:o.org,warnings:t,migratedFiles:r});if(!p.success)return{success:!1,warnings:t,migratedFiles:r};u=p.fernYml}let c=We(this.cwd,Se.of(AE)),l=this.serializeFernYml(u);if(await(0,wrt.writeFile)(c,l,"utf-8"),this.deleteOriginals)for(let p of r)try{await(0,wrt.rm)(p),this.logger.debug(`Deleted ${p}`)}catch{t.push({type:"info",message:`Could not delete ${p}`})}return this.logger.info(`Created ${c}`),{success:!0,warnings:t,migratedFiles:r,outputPath:c}}async migrateSingleApi(t){let{fernDir:r,org:n,warnings:i,migratedFiles:o}=t,a=await new RDe({cwd:r}).migrate();i.push(...a.warnings),a.absoluteFilePath!=null&&o.push(a.absoluteFilePath);let u=await X5i({fernDir:r,generatorsYmlApi:a.rawApi});i.push(...u.warnings);let c={org:n};return u.api!=null&&(c.api=u.api),a.sdks!=null&&(c.sdks=a.sdks),{success:!0,fernYml:c}}async migrateMultiApi(t){let{fernDir:r,apisDir:n,org:i,warnings:o,migratedFiles:s}=t,u=(await(0,wrt.readdir)(n,{withFileTypes:!0})).filter(A=>A.isDirectory()).map(A=>A.name);if(u.length===0)return o.push({type:"conflict",message:"No API directories found in fern/apis/"}),{success:!1,fernYml:{org:i}};let c={},l={targets:{}},p,d;for(let A of u){let E=We(n,Se.of(A)),b=await new RDe({cwd:E,apiName:A}).migrate();if(o.push(...b.warnings),b.absoluteFilePath!=null&&s.push(b.absoluteFilePath),c[A]=b.rawApi,b.sdks!=null){for(let[I,w]of Object.entries(b.sdks.targets))l.targets[I]=w;b.sdks.defaultGroup!=null&&p==null&&(p=b.sdks.defaultGroup),b.sdks.autorelease!=null&&d==null&&(d=b.sdks.autorelease)}}let f=await Z5i({fernDir:r,apisDir:n,generatorsYmlApis:c});o.push(...f.warnings);let m={org:i,apis:f.apis};Object.keys(l.targets).length>0&&(p!=null&&(l.defaultGroup=p),d!=null&&(l.autorelease=d),m.sdks=l);let g=await new RDe({cwd:r}).detect();return g.found&&g.absoluteFilePath!=null&&(o.push({type:"info",message:"Found generators.yml in fern root alongside apis/ directory",suggestion:"Review the migrated configuration to ensure it's correct"}),s.push(g.absoluteFilePath)),{success:!0,fernYml:m}}async findFernDirectory(){if(this.cwd.split("/").pop()===$h)return this.cwd;let r=We(this.cwd,Se.of($h));if(await Xt(r,"directory"))return r}serializeFernYml(t){let r={edition:t.edition,org:t.org};return t.api!=null&&(r.api=t.api),t.apis!=null&&(r.apis=t.apis),t.ai!=null&&(r.ai=t.ai),t.cli!=null&&(r.cli=t.cli),t.sdks!=null&&(r.sdks=this.simplifySdks(t.sdks)),Ir.dump(r,{indent:2,lineWidth:120,noRefs:!0,sortKeys:!1,quotingType:'"',forceQuotes:!1})}simplifySdks(t){let r={...t},n={};for(let[i,o]of Object.entries(t.targets)){let s=o.output;if(typeof s=="string"){n[i]=o;continue}if(s.git==null&&s.path!=null){n[i]={...o,output:s.path};continue}n[i]=o}return r.targets=n,r}};var e8i=class{async handle(t,r){let i=await new QSt({cwd:t.cwd,logger:t.stdout,deleteOriginals:r.delete}).migrate();for(let o of i.warnings){switch(o.type){case"deprecated":t.stdout.warn(`Deprecated: ${o.message}`);break;case"unsupported":t.stdout.warn(`Unsupported: ${o.message}`);break;case"conflict":t.stderr.error(`Error: ${o.message}`);break;case"info":t.stdout.info(o.message);break}o.suggestion!=null&&t.stdout.info(` Suggestion: ${o.suggestion}`)}if(i.success){i.outputPath!=null&&t.stdout.debug(`Created: ${i.outputPath}`);return}throw new Kr({message:"Migration failed"})}};function t8i(e){let t=new e8i;va(e,"migrate","Migrate legacy configuration files to fern.yml",(r,n)=>t.handle(r,n),r=>r.option("delete",{type:"boolean",description:"Keep original files after migration",default:!0}))}function r8i(e){U1(e,"config","Configure, edit, and inspect your settings",[t8i])}var n8i=class{async handle(t,r){let n=await t.loadWorkspaceOrThrow();if(n.docs==null)throw new Kr({message:`No docs configuration found in fern.yml.
2164
2164
 
2165
2165
  Add a 'docs:' section to your fern.yml to get started.`});let o=await new bve({context:t}).check({workspace:n,strict:r.strict}),s=o.hasErrors||r.strict&&o.hasWarnings;if(r.json){let a=this.buildJsonResponse({result:o,hasErrors:s});if(t.stdout.info(JSON.stringify(a,null,2)),s)throw Kr.exit();return}if(o.violations.length>0)for(let a of o.violations){let u=a.severity==="warning"?be.yellow:be.red;process.stderr.write(`${u(`${a.displayRelativeFilepath}:${a.line}:${a.column}: ${a.message}`)}
2166
- `)}if(s)throw Kr.exit();if(o.warningCount>0){t.stderr.info(`${po.warning} ${be.yellow(`Found ${o.warningCount} warnings`)}`),t.stderr.info(be.dim(" Run 'fern docs check --strict' to treat warnings as errors"));return}t.stderr.info(`${po.success} ${be.green("All checks passed")}`)}buildJsonResponse({result:t,hasErrors:r}){let n={};return t.violations.length>0&&(n.docs=t.violations.map(i=>mK(i))),{success:!r,results:n}}};function i8i(e){let t=new n8i;va(e,"check","Validate docs configuration",(r,n)=>t.handle(r,n),r=>r.option("strict",{type:"boolean",description:"Treat warnings as errors",default:!1}).option("json",{type:"boolean",description:"Output results as JSON to stdout",default:!1}))}var f$a=_e(require("net"),1),d$a=_e(require("os"),1),z0n=class extends Error{constructor(t){super(`${t} is locked`)}},Crt={old:new Set,young:new Set},DJf=1e3*15;var NSt,RJf=()=>{let e=d$a.default.networkInterfaces(),t=new Set([void 0,"0.0.0.0"]);for(let r of Object.values(e))for(let n of r)t.add(n.address);return t},l$a=e=>new Promise((t,r)=>{let n=f$a.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),p$a=async(e,t)=>{if(e.host||e.port===0)return l$a(e);for(let r of t)try{await l$a({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},FJf=function*(e){e&&(yield*e),yield 0};async function Eve(e){let t,r=new Set;if(e&&(e.port&&(t=typeof e.port=="number"?[e.port]:e.port),e.exclude)){let i=e.exclude;if(typeof i[Symbol.iterator]!="function")throw new TypeError("The `exclude` option must be an iterable.");for(let o of i){if(typeof o!="number")throw new TypeError("Each item in the `exclude` option must be a number corresponding to the port you want excluded.");if(!Number.isSafeInteger(o))throw new TypeError(`Number ${o} in the exclude option is not a safe integer and can't be used`)}r=new Set(i)}NSt===void 0&&(NSt=setTimeout(()=>{NSt=void 0,Crt.old=Crt.young,Crt.young=new Set},DJf),NSt.unref&&NSt.unref());let n=RJf();for(let i of FJf(t))try{if(r.has(i))continue;let o=await p$a({...e,port:i},n);for(;Crt.old.has(o)||Crt.young.has(o);){if(i!==0)throw new z0n(i);o=await p$a({...e,port:i},n)}return Crt.young.add(o),o}catch(o){if(!["EADDRINUSE","EACCES"].includes(o.code)&&!(o instanceof z0n))throw o}throw new Error("No available ports found")}_g();Vt();var Pou=_e(a8i(),1),Tou=_e(BEn(),1),fIn=require("fs/promises"),Dou=_e(require("http"),1),Rou=_e(require("path"),1);var pXa=require("events"),REn=_e(require("fs"),1),VDe=_e(require("path"),1);var $Ya=_e(require("os"),1),HYa=300,Sve=20,uBt=1e7,KYa=$Ya.default.platform();var Knd=KYa==="darwin",_6i=KYa==="win32",Bve=Knd||_6i,JYa=3e3,YYa=2e4,S6i=1250;var NX;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})(NX||(NX={}));var zDe;(function(e){e.CHANGE="change",e.RENAME="rename"})(zDe||(zDe={}));var cBt;(function(e){e.CHANGE="change",e.ERROR="error"})(cBt||(cBt={}));var Za;(function(e){e.ADD="add",e.ADD_DIR="addDir",e.CHANGE="change",e.RENAME="rename",e.RENAME_DIR="renameDir",e.UNLINK="unlink",e.UNLINK_DIR="unlinkDir"})(Za||(Za={}));var kT;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(kT||(kT={}));var Jnd=(e,t=1,r)=>{t=Math.max(1,t);let n=r?.leading??!1,i=r?.trailing??!0,o=Math.max(r?.maxWait??1/0,t),s,a,u=0,c=0,l=()=>{let b=Date.now(),I=b-u,w=b-c,x=I>=t||w>=o;return[b,x]},p=b=>{if(c=b,!s)return;let I=s;s=void 0,e.apply(void 0,I)},d=()=>{E(0)},f=()=>{a&&(d(),p(Date.now()))},m=b=>{if(c=b,n)return p(b)},h=b=>{if(i&&s)return p(b);s=void 0},g=()=>{a=void 0;let[b,I]=l();return I?h(b):A(b)},A=b=>{let I=b-u,w=b-c,x=t-I,C=o-w,_=Math.min(x,C);return E(_)},E=b=>{a&&clearTimeout(a),!(b<=0)&&(a=setTimeout(g,b))},v=(...b)=>{let[I,w]=l(),x=!!a;if(s=b,u=I,(w||!a)&&E(t),w)return x?p(I):m(I)};return v.cancel=d,v.flush=f,v},OEn=Jnd;var T6i=_e(require("fs"),1),TEn=_e(require("path"),1);var If=_e(require("fs"),1),y1=require("util");var hae=(e,t)=>function(...n){return e.apply(void 0,n).catch(t)},jX=(e,t)=>function(...n){try{return e.apply(void 0,n)}catch(i){return t(i)}};var B6i=_e(require("process"),1),XYa=B6i.default.getuid?!B6i.default.getuid():!1,ZYa=1e4,Bk=()=>{};var lBt={isChangeErrorOk:e=>{if(!lBt.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!XYa&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!lBt.isNodeError(e))return!1;let{code:t}=e;return t==="EMFILE"||t==="ENFILE"||t==="EAGAIN"||t==="EBUSY"||t==="EACCESS"||t==="EACCES"||t==="EACCS"||t==="EPERM"},onChangeError:e=>{if(!lBt.isNodeError(e))throw e;if(!lBt.isChangeErrorOk(e))throw e}},xE=lBt;var O6i=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=ZYa,this.queueActive=new Set,this.queueWaiting=new Set,this.init=()=>{this.intervalId||(this.intervalId=setInterval(this.tick,this.interval))},this.reset=()=>{this.intervalId&&(clearInterval(this.intervalId),delete this.intervalId)},this.add=t=>{this.queueWaiting.add(t),this.queueActive.size<this.limit/2?this.tick():this.init()},this.remove=t=>{this.queueWaiting.delete(t),this.queueActive.delete(t)},this.schedule=()=>new Promise(t=>{let r=()=>this.remove(n),n=()=>t(r);this.add(n)}),this.tick=()=>{if(!(this.queueActive.size>=this.limit)){if(!this.queueWaiting.size)return this.reset();for(let t of this.queueWaiting){if(this.queueActive.size>=this.limit)break;this.queueWaiting.delete(t),this.queueActive.add(t),t()}}}}},eXa=new O6i;var gae=(e,t)=>function(n){return function i(...o){return eXa.schedule().then(s=>{let a=c=>(s(),c),u=c=>{if(s(),Date.now()>=n)throw c;if(t(c)){let l=Math.round(100*Math.random());return new Promise(d=>setTimeout(d,l)).then(()=>i.apply(void 0,o))}throw c};return e.apply(void 0,o).then(a,u)})}},Aae=(e,t)=>function(n){return function i(...o){try{return e.apply(void 0,o)}catch(s){if(Date.now()>n)throw s;if(t(s))return i.apply(void 0,o);throw s}}};var Ynd={attempt:{chmod:hae((0,y1.promisify)(If.default.chmod),xE.onChangeError),chown:hae((0,y1.promisify)(If.default.chown),xE.onChangeError),close:hae((0,y1.promisify)(If.default.close),Bk),fsync:hae((0,y1.promisify)(If.default.fsync),Bk),mkdir:hae((0,y1.promisify)(If.default.mkdir),Bk),realpath:hae((0,y1.promisify)(If.default.realpath),Bk),stat:hae((0,y1.promisify)(If.default.stat),Bk),unlink:hae((0,y1.promisify)(If.default.unlink),Bk),chmodSync:jX(If.default.chmodSync,xE.onChangeError),chownSync:jX(If.default.chownSync,xE.onChangeError),closeSync:jX(If.default.closeSync,Bk),existsSync:jX(If.default.existsSync,Bk),fsyncSync:jX(If.default.fsync,Bk),mkdirSync:jX(If.default.mkdirSync,Bk),realpathSync:jX(If.default.realpathSync,Bk),statSync:jX(If.default.statSync,Bk),unlinkSync:jX(If.default.unlinkSync,Bk)},retry:{close:gae((0,y1.promisify)(If.default.close),xE.isRetriableError),fsync:gae((0,y1.promisify)(If.default.fsync),xE.isRetriableError),open:gae((0,y1.promisify)(If.default.open),xE.isRetriableError),readFile:gae((0,y1.promisify)(If.default.readFile),xE.isRetriableError),rename:gae((0,y1.promisify)(If.default.rename),xE.isRetriableError),stat:gae((0,y1.promisify)(If.default.stat),xE.isRetriableError),write:gae((0,y1.promisify)(If.default.write),xE.isRetriableError),writeFile:gae((0,y1.promisify)(If.default.writeFile),xE.isRetriableError),closeSync:Aae(If.default.closeSync,xE.isRetriableError),fsyncSync:Aae(If.default.fsyncSync,xE.isRetriableError),openSync:Aae(If.default.openSync,xE.isRetriableError),readFileSync:Aae(If.default.readFileSync,xE.isRetriableError),renameSync:Aae(If.default.renameSync,xE.isRetriableError),statSync:Aae(If.default.statSync,xE.isRetriableError),writeSync:Aae(If.default.writeSync,xE.isRetriableError),writeFileSync:Aae(If.default.writeFileSync,xE.isRetriableError)}},tXa=Ynd;var PEn=_e(require("fs"),1),pBt=_e(require("path"),1);var P6i=()=>{};var Xnd=()=>{let e=P6i,t=P6i,r=!1,n=!1;return{promise:new Promise((u,c)=>{e=l=>(r=!0,u(l)),t=l=>(n=!0,c(l))}),resolve:e,reject:t,isPending:()=>!r&&!n,isResolved:()=>r,isRejected:()=>n}},rXa=Xnd;var Znd=()=>{let{promise:e,resolve:t,isPending:r}=rXa(),n=0,i=()=>{n+=1},o=()=>{n-=1,!n&&t()};return i(),queueMicrotask(o),{promise:e,isPending:r,increment:i,decrement:o}},nXa=Znd;var iXa={then:e=>{e()}};var oXa=e=>Array.isArray(e)?e:[e],sXa=e=>typeof e=="function";var eid=(e,t)=>{let r=t?.followSymlinks??!1,n=t?.depth??1/0,i=t?.limit??1/0,o=t?.ignore??[],s=oXa(o).map(J=>sXa(J)?J:H=>J.test(H)),a=J=>s.some(H=>H(J)),u=t?.signal??{aborted:!1},c=t?.onDirents||(()=>{}),l=[],p=new Set,d={},f=[],m=new Set,h={},g=[],A=new Set,E={},v={},b=new Set,I={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{},map:{}},w={directories:l,directoriesNames:p,directoriesNamesToPaths:d,files:f,filesNames:m,filesNamesToPaths:h,symlinks:g,symlinksNames:A,symlinksNamesToPaths:E,map:v},{promise:x,increment:C,decrement:_}=nXa(),R=0,U=(J,H,ge,me)=>{b.has(H)||R>=i||(R+=1,J.directories.push(H),J.directoriesNames.add(ge),l.push(H),p.add(ge),d.propertyIsEnumerable(ge)||(d[ge]=[]),d[ge].push(H),b.add(H),!(me>=n)&&(R>=i||K(H,me+1)))},q=(J,H,ge)=>{b.has(H)||R>=i||(R+=1,J.files.push(H),J.filesNames.add(ge),f.push(H),m.add(ge),h.propertyIsEnumerable(ge)||(h[ge]=[]),h[ge].push(H),b.add(H))},z=(J,H,ge,me)=>{b.has(H)||R>=i||(R+=1,J.symlinks.push(H),J.symlinksNames.add(ge),g.push(H),A.add(ge),E.propertyIsEnumerable(ge)||(E[ge]=[]),E[ge].push(H),b.add(H),r&&(me>=n||R>=i||Ee(H,me+1)))},Z=(J,H,ge,me,we)=>{u.aborted||a(H)||(me.isDirectory()?U(J,H,ge,we):me.isFile()?q(J,H,ge):me.isSymbolicLink()&&z(J,H,ge,we))},oe=(J,H,ge,me)=>{if(u.aborted)return;let we=H===pBt.default.sep?"":pBt.default.sep,Be=ge.name,le=`${H}${we}${Be}`;a(le)||(ge.isDirectory()?U(J,le,Be,me):ge.isFile()?q(J,le,Be):ge.isSymbolicLink()&&z(J,le,Be,me))},V=(J,H,ge,me)=>{for(let we=0,Be=ge.length;we<Be;we++)oe(J,H,ge[we],me)},K=(J,H)=>{u.aborted||H>n||R>=i||(C(),PEn.default.readdir(J,{withFileTypes:!0},(ge,me)=>{if(ge||u.aborted||!me.length)return _();(c(me)||iXa).then(()=>{let Be=v[J]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};V(Be,J,me,H),_()})}))},Ee=(J,H)=>{C(),PEn.default.realpath(J,(ge,me)=>{if(ge||u.aborted)return _();PEn.default.stat(me,(we,Be)=>{if(we||u.aborted)return _();let le=pBt.default.basename(me),ue=v[J]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};Z(ue,me,le,Be,H),_()})})};return(async(J,H=1)=>(J=pBt.default.normalize(J),b.add(J),K(J,H),await x,u.aborted?I:w))(e)},aXa=eid;var MX={lang:{debounce:OEn,attempt:e=>{try{return e()}catch(t){return MX.lang.castError(t)}},castArray:e=>MX.lang.isArray(e)?e:[e],castError:e=>MX.lang.isError(e)?e:MX.lang.isString(e)?new Error(e):new Error("Unknown error"),defer:e=>setTimeout(e,0),isArray:e=>Array.isArray(e),isError:e=>e instanceof Error,isFunction:e=>typeof e=="function",isNaN:e=>Number.isNaN(e),isNumber:e=>typeof e=="number",isPrimitive:e=>{if(e===null)return!0;let t=typeof e;return t!=="object"&&t!=="function"},isShallowEqual:(e,t)=>{if(e===t)return!0;if(MX.lang.isNaN(e))return MX.lang.isNaN(t);if(MX.lang.isPrimitive(e)||MX.lang.isPrimitive(t))return e===t;for(let r in e)if(!(r in t))return!1;for(let r in t)if(e[r]!==t[r])return!1;return!0},isSet:e=>e instanceof Set,isString:e=>typeof e=="string",isUndefined:e=>e===void 0,noop:()=>{},uniq:e=>e.length<2?e:Array.from(new Set(e))},fs:{getDepth:e=>Math.max(0,e.split(TEn.default.sep).length-1),getRealPath:(e,t)=>{try{return t?T6i.default.realpathSync.native(e):T6i.default.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===TEn.default.sep&&t.length-e.length>TEn.default.sep.length,poll:(e,t=YYa)=>tXa.retry.stat(t)(e,{bigint:!0}).catch(MX.lang.noop),readdir:async(e,t,r=1/0,n=1/0,i,o)=>{if(o&&r===1&&e in o){let s=o[e];return[s.directories,s.files]}else{let s=await aXa(e,{depth:r,limit:n,ignore:t,signal:i});return[s.directories,s.files]}}}},cl=MX;var DEn=_e(require("path"),1);var D6i=class{constructor(t,r,n){this.base=n,this.watcher=t,this.handler=r.handler,this.fswatcher=r.watcher,this.options=r.options,this.folderPath=r.folderPath,this.filePath=r.filePath,this.handlerBatched=this.base?this.base.onWatcherEvent.bind(this.base):this._makeHandlerBatched(this.options.debounce)}_isSubRoot(t){return this.filePath?t===this.filePath:t===this.folderPath||cl.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=HYa){return(()=>{let r=this.watcher._readyWait,n=[],i=new Set,o=async(a,u)=>{let c=this.options.ignoreInitial?[]:a,l=await this.eventsPopulate([...u]),p=this.eventsDeduplicate([...c,...l]);this.onTargetEvents(p)},s=cl.lang.debounce(()=>{this.watcher.isClosed()||(r=o(n,i),n=[],i=new Set)},t);return async(a,u="",c=!1)=>{c?await this.eventsPopulate([u],n,!0):i.add(u),r.then(s)}})()}eventsDeduplicate(t){if(t.length<2)return t;let r={};return t.reduce((n,i)=>{let[o,s]=i,a=r[s];return o===a||o===Za.CHANGE&&a===Za.ADD||(r[s]=o,n.push(i)),n},[])}async eventsPopulate(t,r=[],n=!1){return await Promise.all(t.map(async i=>{let o=await this.watcher._poller.update(i,this.options.pollingTimeout);await Promise.all(o.map(async s=>{r.push([s,i]),s===Za.ADD_DIR?await this.eventsPopulateAddDir(t,i,r,n):s===Za.UNLINK_DIR&&await this.eventsPopulateUnlinkDir(t,i,r,n)}))})),r}async eventsPopulateAddDir(t,r,n=[],i=!1){if(i)return n;let o=this.options.recursive?this.options.depth??Sve:Math.min(1,this.options.depth??Sve),s=this.options.limit??uBt,[a,u]=await cl.fs.readdir(r,this.options.ignore,o,s,this.watcher._closeSignal),c=[...a,...u];return await Promise.all(c.map(l=>{if(!this.watcher.isIgnored(l,this.options.ignore)&&!t.includes(l))return this.eventsPopulate([l],n,!0)})),n}async eventsPopulateUnlinkDir(t,r,n=[],i=!1){if(i)return n;for(let o of this.watcher._poller.stats.keys())cl.fs.isSubPath(r,o)&&(t.includes(o)||await this.eventsPopulate([o],n,!0));return n}onTargetAdd(t){this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAdd(t,this.options.renameTimeout):this.watcher.event(Za.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!Bve&&this.options.native!==!1&&this.watcher.watchDirectory(t,this.options,this.handler,void 0,this.base||this),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAddDir(t,this.options.renameTimeout):this.watcher.event(Za.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(Za.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(DEn.default.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(Za.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(DEn.default.dirname(t),t,!1),this.watcher.watchersClose(t),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlinkDir(t,this.options.renameTimeout):this.watcher.event(Za.UNLINK_DIR,t))}onTargetEvent(t){let[r,n]=t;r===Za.ADD?this.onTargetAdd(n):r===Za.ADD_DIR?this.onTargetAddDir(n):r===Za.CHANGE?this.onTargetChange(n):r===Za.UNLINK?this.onTargetUnlink(n):r===Za.UNLINK_DIR&&this.onTargetUnlinkDir(n)}onTargetEvents(t){for(let r of t)this.onTargetEvent(r)}onWatcherEvent(t,r,n=!1){return this.handlerBatched(t,r,n)}onWatcherChange(t=zDe.CHANGE,r){if(this.watcher.isClosed())return;let n=DEn.default.resolve(this.folderPath,r||"");this.filePath&&n!==this.folderPath&&n!==this.filePath||this.watcher.isIgnored(n,this.options.ignore)||this.onWatcherEvent(t,n)}onWatcherError(t){_6i&&t.code==="EPERM"?this.onWatcherChange(zDe.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on(cBt.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on(cBt.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(zDe.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&Bve&&this.options.native!==!1?this.options.depth??Sve:Math.min(1,this.options.depth??Sve),n=this.options.limit??uBt,[i,o]=await cl.fs.readdir(this.folderPath,this.options.ignore,r,n,this.watcher._closeSignal,this.options.readdirMap),s=[this.folderPath,...i,...o];await Promise.all(s.map(a=>{if(!this.watcher._poller.stats.has(a)&&!this.watcher.isIgnored(a,this.options.ignore))return this.onWatcherEvent(zDe.CHANGE,a,t)}))}}},uXa=D6i;var QT={interval:100,intervalId:void 0,fns:new Map,init:()=>{QT.intervalId||(QT.intervalId=setInterval(QT.resolve,QT.interval))},reset:()=>{QT.intervalId&&(clearInterval(QT.intervalId),delete QT.intervalId)},add:(e,t)=>{QT.fns.set(e,Date.now()+t),QT.init()},remove:e=>{QT.fns.delete(e)},resolve:()=>{if(!QT.fns.size)return QT.reset();let e=Date.now();for(let[t,r]of QT.fns)r>=e||(QT.remove(t),t())}},fBt=QT;var dBt=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=S6i){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{let p=this._watcher._poller.paths.find(n||-1,d=>d!==i);if(p&&p!==i){if(cl.fs.getRealPath(i,!0)===p)return;this._watcher.event(o.rename,p,i)}else this._watcher.event(o.add,i)};if(!n)return a();let u=()=>{s.add.delete(n),fBt.remove(c)},c=()=>{u(),a()};fBt.add(c,r);let l=()=>{let p=s.unlink.get(n);if(!p)return;u();let d=p();i===d?o.change&&this._watcher._poller.stats.has(i)&&this._watcher.event(o.change,i):this._watcher.event(o.rename,d,i)};s.add.set(n,l),l()}getLockUnlink(t,r=S6i){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{this._watcher.event(o.unlink,i)};if(!n)return a();let u=()=>{s.unlink.delete(n),fBt.remove(c)},c=()=>{u(),a()};fBt.add(c,r);let l=()=>(u(),i);s.unlink.set(n,l),s.add.get(n)?.()}getLockTargetAdd(t,r){let n=this._watcher._poller.getIno(t,Za.ADD,NX.FILE);return this.getLockAdd({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetAddDir(t,r){let n=this._watcher._poller.getIno(t,Za.ADD_DIR,NX.DIR);return this.getLockAdd({ino:n,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}getLockTargetUnlink(t,r){let n=this._watcher._poller.getIno(t,Za.UNLINK,NX.FILE);return this.getLockUnlink({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetUnlinkDir(t,r){let n=this._watcher._poller.getIno(t,Za.UNLINK_DIR,NX.DIR);return this.getLockUnlink({ino:n,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}reset(){this._locksAdd=new Map,this._locksAddDir=new Map,this._locksUnlink=new Map,this._locksUnlinkDir=new Map,this._locksDir={add:this._locksAddDir,unlink:this._locksUnlinkDir},this._locksFile={add:this._locksAdd,unlink:this._locksUnlink}}};dBt.DIR_EVENTS={add:Za.ADD_DIR,rename:Za.RENAME_DIR,unlink:Za.UNLINK_DIR};dBt.FILE_EVENTS={add:Za.ADD,change:Za.CHANGE,rename:Za.RENAME,unlink:Za.UNLINK};var cXa=dBt;var R6i=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(cl.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let n=this.map.get(t);if(cl.lang.isSet(n)){let i=n.delete(r);return n.size||this.map.delete(t),i}else if(n===r)return this.map.delete(t),!0}return!1}find(t,r){if(this.map.has(t)){let n=this.map.get(t);if(cl.lang.isSet(n))return Array.from(n).find(r);if(r(n))return n}}get(t){return this.map.get(t)}has(t,r){if(cl.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let n=this.map.get(t);return cl.lang.isSet(n)?n.has(r):n===r}return!1}set(t,r){if(this.map.has(t)){let n=this.map.get(t);cl.lang.isSet(n)?n.add(r):n!==r&&this.map.set(t,new Set([n,r]))}else this.map.set(t,r);return this}},F6i=R6i;var k6i=class{constructor(t){this.ino=t.ino<=Number.MAX_SAFE_INTEGER?Number(t.ino):t.ino,this.size=Number(t.size),this.atimeMs=Number(t.atimeMs),this.mtimeMs=Number(t.mtimeMs),this.ctimeMs=Number(t.ctimeMs),this.birthtimeMs=Number(t.birthtimeMs),this._isFile=t.isFile(),this._isDirectory=t.isDirectory(),this._isSymbolicLink=t.isSymbolicLink()}isFile(){return this._isFile}isDirectory(){return this._isDirectory}isSymbolicLink(){return this._isSymbolicLink}},lXa=k6i;var Q6i=class{constructor(){this.inos={},this.paths=new F6i,this.stats=new Map}getIno(t,r,n){let i=this.inos[r];if(!i)return;let o=i[t];if(o&&!(n&&o[1]!==n))return o[0]}getStats(t){return this.stats.get(t)}async poll(t,r){let n=await cl.fs.poll(t,r);if(!(!n||!(n.isFile()||n.isDirectory())))return new lXa(n)}reset(){this.inos={},this.paths=new F6i,this.stats=new Map}async update(t,r){let n=this.getStats(t),i=await this.poll(t,r);if(this.updateStats(t,i),!n&&i){if(i.isFile())return this.updateIno(t,Za.ADD,i),[Za.ADD];if(i.isDirectory())return this.updateIno(t,Za.ADD_DIR,i),[Za.ADD_DIR]}else if(n&&!i){if(n.isFile())return this.updateIno(t,Za.UNLINK,n),[Za.UNLINK];if(n.isDirectory())return this.updateIno(t,Za.UNLINK_DIR,n),[Za.UNLINK_DIR]}else if(n&&i){if(n.isFile()){if(i.isFile())return n.ino===i.ino&&!n.size&&!i.size?[]:(this.updateIno(t,Za.CHANGE,i),[Za.CHANGE]);if(i.isDirectory())return this.updateIno(t,Za.UNLINK,n),this.updateIno(t,Za.ADD_DIR,i),[Za.UNLINK,Za.ADD_DIR]}else if(n.isDirectory()){if(i.isFile())return this.updateIno(t,Za.UNLINK_DIR,n),this.updateIno(t,Za.ADD,i),[Za.UNLINK_DIR,Za.ADD];if(i.isDirectory())return n.ino===i.ino?[]:(this.updateIno(t,Za.UNLINK_DIR,n),this.updateIno(t,Za.ADD_DIR,i),[Za.UNLINK_DIR,Za.ADD_DIR])}}return[]}updateIno(t,r,n){let i=this.inos[r]=this.inos[r]||(this.inos[r]={}),o=n.isFile()?NX.FILE:NX.DIR;i[t]=[n.ino,o]}updateStats(t,r){if(r)this.paths.set(r.ino,t),this.stats.set(t,r);else{let n=this.stats.get(t)?.ino||-1;this.paths.delete(n,t),this.stats.delete(t)}}},N6i=Q6i;var j6i=class e extends pXa.EventEmitter{constructor(t,r,n){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(kT.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(i=>this.on(kT.CLOSE,i)),this._readyWait=new Promise(i=>this.on(kT.READY,i)),this._locker=new cXa(this),this._roots=new Set,this._poller=new N6i,this._pollers=new Set,this._subwatchers=new Set,this._watchers={},this._watchersLock=Promise.resolve(),this._watchersRestorable={},this.watch(t,r,n)}isClosed(){return this._closed}isIgnored(t,r){return!!r&&(cl.lang.isFunction(r)?!!r(t):r.test(t))}isReady(){return this._ready}close(){return this._locker.reset(),this._poller.reset(),this._roots.clear(),this.watchersClose(),this.isClosed()?!1:(this._closed=!0,this.emit(kT.CLOSE))}error(t){if(this.isClosed())return!1;let r=cl.lang.castError(t);return this.emit(kT.ERROR,r)}event(t,r,n){return this.isClosed()?!1:(this.emit(kT.ALL,t,r,n),this.emit(t,r,n))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(kT.READY))}pollerExists(t,r){for(let n of this._pollers)if(n.targetPath===t&&cl.lang.isShallowEqual(n.options,r))return!0;return!1}subwatcherExists(t,r){for(let n of this._subwatchers)if(n.targetPath===t&&cl.lang.isShallowEqual(n.options,r))return!0;return!1}watchersClose(t,r,n=!0){if(t){let i=this._watchers[t];if(i)for(let o of[...i])r&&o.filePath!==r||this.watcherClose(o);if(n)for(let o in this._watchers)cl.fs.isSubPath(t,o)&&this.watchersClose(o,r,!1)}else for(let i in this._watchers)this.watchersClose(i,r,!1)}watchersLock(t){return this._watchersLock.then(()=>this._watchersLock=new Promise(async r=>{await t(),r()}))}watchersRestore(){delete this._watchersRestoreTimeout;let t=Object.entries(this._watchersRestorable);this._watchersRestorable={};for(let[r,n]of t)this.watchPath(r,n.options,n.handler)}async watcherAdd(t,r){let{folderPath:n}=t;(this._watchers[n]=this._watchers[n]||[]).push(t);let o=new uXa(this,t,r);return await o.init(),o}watcherClose(t){t.watcher.close();let r=this._watchers[t.folderPath];if(r){let o=r.indexOf(t);r.splice(o,1),r.length||delete this._watchers[t.folderPath]}let n=t.filePath||t.folderPath;this._roots.has(n)&&(this._watchersRestorable[n]=t,this._watchersRestoreTimeout||(this._watchersRestoreTimeout=cl.lang.defer(()=>this.watchersRestore())))}watcherExists(t,r,n,i){if(this._watchers[t]?.find(a=>a.handler===n&&(!a.filePath||a.filePath===i)&&a.options.ignore===r.ignore&&!!a.options.native==!!r.native&&(!r.recursive||a.options.recursive)))return!0;let s=VDe.default.dirname(t);for(let a=1;a<1/0;a++){if(this._watchers[s]?.find(l=>(a===1||l.options.recursive&&a<=(l.options.depth??Sve))&&l.handler===n&&(!l.filePath||l.filePath===i)&&l.options.ignore===r.ignore&&!!l.options.native==!!r.native&&(!r.recursive||l.options.recursive&&Bve&&l.options.native!==!1)))return!0;if(!Bve)break;let c=VDe.default.dirname(t);if(s===c)break;s=c}return!1}async watchDirectories(t,r,n,i,o){if(this.isClosed())return;t=cl.lang.uniq(t).sort();let s;for(let a of t)if(!this.isIgnored(a,r.ignore)&&!this.watcherExists(a,r,n,i))try{let u=!r.recursive||Bve&&r.native!==!1?r:{...r,recursive:!1},l={watcher:REn.default.watch(a,u),handler:n,options:r,folderPath:a,filePath:i},p=s=await this.watcherAdd(l,o);if(this._roots.has(i||a)){let f={...r,ignoreInitial:!0,recursive:!1},m=VDe.default.dirname(a),h=a;await this.watchDirectories([m],f,n,h,p)}}catch(u){this.error(u)}return s}async watchDirectory(t,r,n,i,o){if(!this.isClosed()&&!this.isIgnored(t,r.ignore)){if(!r.recursive||Bve&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,n,i,o));{r={...r,recursive:!0};let s=r.depth??Sve,a=r.limit??uBt,[u]=await cl.fs.readdir(t,r.ignore,s,a,this._closeSignal,r.readdirMap);return this.watchersLock(async()=>{let c=await this.watchDirectories([t],r,n,i,o);if(u.length){let l=cl.fs.getDepth(t);for(let p of u){let d=cl.fs.getDepth(p),f=Math.max(0,s-(d-l)),m={...r,depth:f};await this.watchDirectories([p],m,n,i,o||c)}}})}}}async watchFileOnce(t,r,n){if(this.isClosed()||(r={...r,ignoreInitial:!1},this.subwatcherExists(t,r)))return;let i={targetPath:t,options:r},o=(c,l)=>{l===t&&(u(),n())},s=new e(o),a=()=>{this._subwatchers.add(i),this.on(kT.CLOSE,u),s.watchFile(t,r,o)},u=()=>{this._subwatchers.delete(i),this.removeListener(kT.CLOSE,u),s.close()};return a()}async watchFile(t,r,n){if(this.isClosed()||this.isIgnored(t,r.ignore))return;r={...r,recursive:!1};let i=VDe.default.dirname(t);return this.watchDirectory(i,r,n,t)}async watchPollingOnce(t,r,n){if(this.isClosed())return;let i=!1,o=new N6i,s=await this.watchPolling(t,r,async()=>{i||!(await o.update(t,r.pollingTimeout)).length||i||(i=!0,s(),n())})}async watchPolling(t,r,n){if(this.isClosed())return cl.lang.noop;if(this.pollerExists(t,r))return cl.lang.noop;let i={...r,interval:r.pollingInterval??JYa},o={targetPath:t,options:r},s=()=>{this._pollers.add(o),this.on(kT.CLOSE,a),REn.default.watchFile(t,i,n)},a=()=>{this._pollers.delete(o),this.removeListener(kT.CLOSE,a),REn.default.unwatchFile(t,n)};return cl.lang.attempt(s),()=>cl.lang.attempt(a)}async watchUnknownChild(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchFileOnce(t,r,i)}async watchUnknownTarget(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchPollingOnce(t,r,i)}async watchPaths(t,r,n){if(this.isClosed())return;if(t=cl.lang.uniq(t).sort(),t.every((o,s)=>t.every((a,u)=>u===s||!cl.fs.isSubPath(o,a))))await Promise.all(t.map(o=>this.watchPath(o,r,n)));else for(let o of t)await this.watchPath(o,r,n)}async watchPath(t,r,n){if(this.isClosed()||(t=VDe.default.resolve(t),this.isIgnored(t,r.ignore)))return;let i=await cl.fs.poll(t,r.pollingTimeout);if(i){if(i.isFile())return this.watchFile(t,r,n);if(i.isDirectory())return this.watchDirectory(t,r,n);this.error(`"${t}" is not supported`)}else{let o=VDe.default.dirname(t);return(await cl.fs.poll(o,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,n):this.watchUnknownTarget(t,r,n)}}async watch(t,r,n=cl.lang.noop){if(cl.lang.isFunction(t))return this.watch([],{},t);if(cl.lang.isUndefined(t))return this.watch([],r,n);if(cl.lang.isFunction(r))return this.watch(t,{},r);if(cl.lang.isUndefined(r))return this.watch(t,{},n);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let i=cl.lang.castArray(t);i.forEach(o=>this._roots.add(o)),await this.watchPaths(i,r,n),!this.isClosed()&&(n!==cl.lang.noop&&this.on(kT.ALL,n),r.readdirMap=void 0,this.ready())}},FEn=j6i;HEn();Vt();var Hrt=require("fs/promises"),AZa=require("os"),yZa=_e(require("path"),1),wod=".fern",Cod="logs";function xod(){return"cli@4.32.1"}var KDe=class{logFilePath=null;initialized=!1;sessionStartTime;constructor(){this.sessionStartTime=Date.now()}async initialize(){if(this.initialized)return;let t=We(Ut.of((0,AZa.homedir)()),Se.of(wod)),r=We(t,Se.of(Cod));await Xt(r)||await(0,Hrt.mkdir)(r,{recursive:!0});let i=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=We(r,Se.of(i));let o=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${yZa.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
2166
+ `)}if(s)throw Kr.exit();if(o.warningCount>0){t.stderr.info(`${po.warning} ${be.yellow(`Found ${o.warningCount} warnings`)}`),t.stderr.info(be.dim(" Run 'fern docs check --strict' to treat warnings as errors"));return}t.stderr.info(`${po.success} ${be.green("All checks passed")}`)}buildJsonResponse({result:t,hasErrors:r}){let n={};return t.violations.length>0&&(n.docs=t.violations.map(i=>mK(i))),{success:!r,results:n}}};function i8i(e){let t=new n8i;va(e,"check","Validate docs configuration",(r,n)=>t.handle(r,n),r=>r.option("strict",{type:"boolean",description:"Treat warnings as errors",default:!1}).option("json",{type:"boolean",description:"Output results as JSON to stdout",default:!1}))}var f$a=_e(require("net"),1),d$a=_e(require("os"),1),z0n=class extends Error{constructor(t){super(`${t} is locked`)}},Crt={old:new Set,young:new Set},DJf=1e3*15;var NSt,RJf=()=>{let e=d$a.default.networkInterfaces(),t=new Set([void 0,"0.0.0.0"]);for(let r of Object.values(e))for(let n of r)t.add(n.address);return t},l$a=e=>new Promise((t,r)=>{let n=f$a.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),p$a=async(e,t)=>{if(e.host||e.port===0)return l$a(e);for(let r of t)try{await l$a({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},FJf=function*(e){e&&(yield*e),yield 0};async function Eve(e){let t,r=new Set;if(e&&(e.port&&(t=typeof e.port=="number"?[e.port]:e.port),e.exclude)){let i=e.exclude;if(typeof i[Symbol.iterator]!="function")throw new TypeError("The `exclude` option must be an iterable.");for(let o of i){if(typeof o!="number")throw new TypeError("Each item in the `exclude` option must be a number corresponding to the port you want excluded.");if(!Number.isSafeInteger(o))throw new TypeError(`Number ${o} in the exclude option is not a safe integer and can't be used`)}r=new Set(i)}NSt===void 0&&(NSt=setTimeout(()=>{NSt=void 0,Crt.old=Crt.young,Crt.young=new Set},DJf),NSt.unref&&NSt.unref());let n=RJf();for(let i of FJf(t))try{if(r.has(i))continue;let o=await p$a({...e,port:i},n);for(;Crt.old.has(o)||Crt.young.has(o);){if(i!==0)throw new z0n(i);o=await p$a({...e,port:i},n)}return Crt.young.add(o),o}catch(o){if(!["EADDRINUSE","EACCES"].includes(o.code)&&!(o instanceof z0n))throw o}throw new Error("No available ports found")}_g();Vt();var Pou=_e(a8i(),1),Tou=_e(BEn(),1),fIn=require("fs/promises"),Dou=_e(require("http"),1),Rou=_e(require("path"),1);var pXa=require("events"),REn=_e(require("fs"),1),VDe=_e(require("path"),1);var $Ya=_e(require("os"),1),HYa=300,Sve=20,uBt=1e7,KYa=$Ya.default.platform();var Knd=KYa==="darwin",_6i=KYa==="win32",Bve=Knd||_6i,JYa=3e3,YYa=2e4,S6i=1250;var NX;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})(NX||(NX={}));var zDe;(function(e){e.CHANGE="change",e.RENAME="rename"})(zDe||(zDe={}));var cBt;(function(e){e.CHANGE="change",e.ERROR="error"})(cBt||(cBt={}));var Za;(function(e){e.ADD="add",e.ADD_DIR="addDir",e.CHANGE="change",e.RENAME="rename",e.RENAME_DIR="renameDir",e.UNLINK="unlink",e.UNLINK_DIR="unlinkDir"})(Za||(Za={}));var kT;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(kT||(kT={}));var Jnd=(e,t=1,r)=>{t=Math.max(1,t);let n=r?.leading??!1,i=r?.trailing??!0,o=Math.max(r?.maxWait??1/0,t),s,a,u=0,c=0,l=()=>{let b=Date.now(),I=b-u,w=b-c,x=I>=t||w>=o;return[b,x]},p=b=>{if(c=b,!s)return;let I=s;s=void 0,e.apply(void 0,I)},d=()=>{E(0)},f=()=>{a&&(d(),p(Date.now()))},m=b=>{if(c=b,n)return p(b)},h=b=>{if(i&&s)return p(b);s=void 0},g=()=>{a=void 0;let[b,I]=l();return I?h(b):A(b)},A=b=>{let I=b-u,w=b-c,x=t-I,C=o-w,_=Math.min(x,C);return E(_)},E=b=>{a&&clearTimeout(a),!(b<=0)&&(a=setTimeout(g,b))},v=(...b)=>{let[I,w]=l(),x=!!a;if(s=b,u=I,(w||!a)&&E(t),w)return x?p(I):m(I)};return v.cancel=d,v.flush=f,v},OEn=Jnd;var T6i=_e(require("fs"),1),TEn=_e(require("path"),1);var If=_e(require("fs"),1),y1=require("util");var hae=(e,t)=>function(...n){return e.apply(void 0,n).catch(t)},jX=(e,t)=>function(...n){try{return e.apply(void 0,n)}catch(i){return t(i)}};var B6i=_e(require("process"),1),XYa=B6i.default.getuid?!B6i.default.getuid():!1,ZYa=1e4,Bk=()=>{};var lBt={isChangeErrorOk:e=>{if(!lBt.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!XYa&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!lBt.isNodeError(e))return!1;let{code:t}=e;return t==="EMFILE"||t==="ENFILE"||t==="EAGAIN"||t==="EBUSY"||t==="EACCESS"||t==="EACCES"||t==="EACCS"||t==="EPERM"},onChangeError:e=>{if(!lBt.isNodeError(e))throw e;if(!lBt.isChangeErrorOk(e))throw e}},xE=lBt;var O6i=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=ZYa,this.queueActive=new Set,this.queueWaiting=new Set,this.init=()=>{this.intervalId||(this.intervalId=setInterval(this.tick,this.interval))},this.reset=()=>{this.intervalId&&(clearInterval(this.intervalId),delete this.intervalId)},this.add=t=>{this.queueWaiting.add(t),this.queueActive.size<this.limit/2?this.tick():this.init()},this.remove=t=>{this.queueWaiting.delete(t),this.queueActive.delete(t)},this.schedule=()=>new Promise(t=>{let r=()=>this.remove(n),n=()=>t(r);this.add(n)}),this.tick=()=>{if(!(this.queueActive.size>=this.limit)){if(!this.queueWaiting.size)return this.reset();for(let t of this.queueWaiting){if(this.queueActive.size>=this.limit)break;this.queueWaiting.delete(t),this.queueActive.add(t),t()}}}}},eXa=new O6i;var gae=(e,t)=>function(n){return function i(...o){return eXa.schedule().then(s=>{let a=c=>(s(),c),u=c=>{if(s(),Date.now()>=n)throw c;if(t(c)){let l=Math.round(100*Math.random());return new Promise(d=>setTimeout(d,l)).then(()=>i.apply(void 0,o))}throw c};return e.apply(void 0,o).then(a,u)})}},Aae=(e,t)=>function(n){return function i(...o){try{return e.apply(void 0,o)}catch(s){if(Date.now()>n)throw s;if(t(s))return i.apply(void 0,o);throw s}}};var Ynd={attempt:{chmod:hae((0,y1.promisify)(If.default.chmod),xE.onChangeError),chown:hae((0,y1.promisify)(If.default.chown),xE.onChangeError),close:hae((0,y1.promisify)(If.default.close),Bk),fsync:hae((0,y1.promisify)(If.default.fsync),Bk),mkdir:hae((0,y1.promisify)(If.default.mkdir),Bk),realpath:hae((0,y1.promisify)(If.default.realpath),Bk),stat:hae((0,y1.promisify)(If.default.stat),Bk),unlink:hae((0,y1.promisify)(If.default.unlink),Bk),chmodSync:jX(If.default.chmodSync,xE.onChangeError),chownSync:jX(If.default.chownSync,xE.onChangeError),closeSync:jX(If.default.closeSync,Bk),existsSync:jX(If.default.existsSync,Bk),fsyncSync:jX(If.default.fsync,Bk),mkdirSync:jX(If.default.mkdirSync,Bk),realpathSync:jX(If.default.realpathSync,Bk),statSync:jX(If.default.statSync,Bk),unlinkSync:jX(If.default.unlinkSync,Bk)},retry:{close:gae((0,y1.promisify)(If.default.close),xE.isRetriableError),fsync:gae((0,y1.promisify)(If.default.fsync),xE.isRetriableError),open:gae((0,y1.promisify)(If.default.open),xE.isRetriableError),readFile:gae((0,y1.promisify)(If.default.readFile),xE.isRetriableError),rename:gae((0,y1.promisify)(If.default.rename),xE.isRetriableError),stat:gae((0,y1.promisify)(If.default.stat),xE.isRetriableError),write:gae((0,y1.promisify)(If.default.write),xE.isRetriableError),writeFile:gae((0,y1.promisify)(If.default.writeFile),xE.isRetriableError),closeSync:Aae(If.default.closeSync,xE.isRetriableError),fsyncSync:Aae(If.default.fsyncSync,xE.isRetriableError),openSync:Aae(If.default.openSync,xE.isRetriableError),readFileSync:Aae(If.default.readFileSync,xE.isRetriableError),renameSync:Aae(If.default.renameSync,xE.isRetriableError),statSync:Aae(If.default.statSync,xE.isRetriableError),writeSync:Aae(If.default.writeSync,xE.isRetriableError),writeFileSync:Aae(If.default.writeFileSync,xE.isRetriableError)}},tXa=Ynd;var PEn=_e(require("fs"),1),pBt=_e(require("path"),1);var P6i=()=>{};var Xnd=()=>{let e=P6i,t=P6i,r=!1,n=!1;return{promise:new Promise((u,c)=>{e=l=>(r=!0,u(l)),t=l=>(n=!0,c(l))}),resolve:e,reject:t,isPending:()=>!r&&!n,isResolved:()=>r,isRejected:()=>n}},rXa=Xnd;var Znd=()=>{let{promise:e,resolve:t,isPending:r}=rXa(),n=0,i=()=>{n+=1},o=()=>{n-=1,!n&&t()};return i(),queueMicrotask(o),{promise:e,isPending:r,increment:i,decrement:o}},nXa=Znd;var iXa={then:e=>{e()}};var oXa=e=>Array.isArray(e)?e:[e],sXa=e=>typeof e=="function";var eid=(e,t)=>{let r=t?.followSymlinks??!1,n=t?.depth??1/0,i=t?.limit??1/0,o=t?.ignore??[],s=oXa(o).map(J=>sXa(J)?J:H=>J.test(H)),a=J=>s.some(H=>H(J)),u=t?.signal??{aborted:!1},c=t?.onDirents||(()=>{}),l=[],p=new Set,d={},f=[],m=new Set,h={},g=[],A=new Set,E={},v={},b=new Set,I={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{},map:{}},w={directories:l,directoriesNames:p,directoriesNamesToPaths:d,files:f,filesNames:m,filesNamesToPaths:h,symlinks:g,symlinksNames:A,symlinksNamesToPaths:E,map:v},{promise:x,increment:C,decrement:_}=nXa(),R=0,U=(J,H,ge,me)=>{b.has(H)||R>=i||(R+=1,J.directories.push(H),J.directoriesNames.add(ge),l.push(H),p.add(ge),d.propertyIsEnumerable(ge)||(d[ge]=[]),d[ge].push(H),b.add(H),!(me>=n)&&(R>=i||K(H,me+1)))},q=(J,H,ge)=>{b.has(H)||R>=i||(R+=1,J.files.push(H),J.filesNames.add(ge),f.push(H),m.add(ge),h.propertyIsEnumerable(ge)||(h[ge]=[]),h[ge].push(H),b.add(H))},z=(J,H,ge,me)=>{b.has(H)||R>=i||(R+=1,J.symlinks.push(H),J.symlinksNames.add(ge),g.push(H),A.add(ge),E.propertyIsEnumerable(ge)||(E[ge]=[]),E[ge].push(H),b.add(H),r&&(me>=n||R>=i||Ee(H,me+1)))},Z=(J,H,ge,me,we)=>{u.aborted||a(H)||(me.isDirectory()?U(J,H,ge,we):me.isFile()?q(J,H,ge):me.isSymbolicLink()&&z(J,H,ge,we))},oe=(J,H,ge,me)=>{if(u.aborted)return;let we=H===pBt.default.sep?"":pBt.default.sep,Be=ge.name,le=`${H}${we}${Be}`;a(le)||(ge.isDirectory()?U(J,le,Be,me):ge.isFile()?q(J,le,Be):ge.isSymbolicLink()&&z(J,le,Be,me))},V=(J,H,ge,me)=>{for(let we=0,Be=ge.length;we<Be;we++)oe(J,H,ge[we],me)},K=(J,H)=>{u.aborted||H>n||R>=i||(C(),PEn.default.readdir(J,{withFileTypes:!0},(ge,me)=>{if(ge||u.aborted||!me.length)return _();(c(me)||iXa).then(()=>{let Be=v[J]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};V(Be,J,me,H),_()})}))},Ee=(J,H)=>{C(),PEn.default.realpath(J,(ge,me)=>{if(ge||u.aborted)return _();PEn.default.stat(me,(we,Be)=>{if(we||u.aborted)return _();let le=pBt.default.basename(me),ue=v[J]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};Z(ue,me,le,Be,H),_()})})};return(async(J,H=1)=>(J=pBt.default.normalize(J),b.add(J),K(J,H),await x,u.aborted?I:w))(e)},aXa=eid;var MX={lang:{debounce:OEn,attempt:e=>{try{return e()}catch(t){return MX.lang.castError(t)}},castArray:e=>MX.lang.isArray(e)?e:[e],castError:e=>MX.lang.isError(e)?e:MX.lang.isString(e)?new Error(e):new Error("Unknown error"),defer:e=>setTimeout(e,0),isArray:e=>Array.isArray(e),isError:e=>e instanceof Error,isFunction:e=>typeof e=="function",isNaN:e=>Number.isNaN(e),isNumber:e=>typeof e=="number",isPrimitive:e=>{if(e===null)return!0;let t=typeof e;return t!=="object"&&t!=="function"},isShallowEqual:(e,t)=>{if(e===t)return!0;if(MX.lang.isNaN(e))return MX.lang.isNaN(t);if(MX.lang.isPrimitive(e)||MX.lang.isPrimitive(t))return e===t;for(let r in e)if(!(r in t))return!1;for(let r in t)if(e[r]!==t[r])return!1;return!0},isSet:e=>e instanceof Set,isString:e=>typeof e=="string",isUndefined:e=>e===void 0,noop:()=>{},uniq:e=>e.length<2?e:Array.from(new Set(e))},fs:{getDepth:e=>Math.max(0,e.split(TEn.default.sep).length-1),getRealPath:(e,t)=>{try{return t?T6i.default.realpathSync.native(e):T6i.default.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===TEn.default.sep&&t.length-e.length>TEn.default.sep.length,poll:(e,t=YYa)=>tXa.retry.stat(t)(e,{bigint:!0}).catch(MX.lang.noop),readdir:async(e,t,r=1/0,n=1/0,i,o)=>{if(o&&r===1&&e in o){let s=o[e];return[s.directories,s.files]}else{let s=await aXa(e,{depth:r,limit:n,ignore:t,signal:i});return[s.directories,s.files]}}}},cl=MX;var DEn=_e(require("path"),1);var D6i=class{constructor(t,r,n){this.base=n,this.watcher=t,this.handler=r.handler,this.fswatcher=r.watcher,this.options=r.options,this.folderPath=r.folderPath,this.filePath=r.filePath,this.handlerBatched=this.base?this.base.onWatcherEvent.bind(this.base):this._makeHandlerBatched(this.options.debounce)}_isSubRoot(t){return this.filePath?t===this.filePath:t===this.folderPath||cl.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=HYa){return(()=>{let r=this.watcher._readyWait,n=[],i=new Set,o=async(a,u)=>{let c=this.options.ignoreInitial?[]:a,l=await this.eventsPopulate([...u]),p=this.eventsDeduplicate([...c,...l]);this.onTargetEvents(p)},s=cl.lang.debounce(()=>{this.watcher.isClosed()||(r=o(n,i),n=[],i=new Set)},t);return async(a,u="",c=!1)=>{c?await this.eventsPopulate([u],n,!0):i.add(u),r.then(s)}})()}eventsDeduplicate(t){if(t.length<2)return t;let r={};return t.reduce((n,i)=>{let[o,s]=i,a=r[s];return o===a||o===Za.CHANGE&&a===Za.ADD||(r[s]=o,n.push(i)),n},[])}async eventsPopulate(t,r=[],n=!1){return await Promise.all(t.map(async i=>{let o=await this.watcher._poller.update(i,this.options.pollingTimeout);await Promise.all(o.map(async s=>{r.push([s,i]),s===Za.ADD_DIR?await this.eventsPopulateAddDir(t,i,r,n):s===Za.UNLINK_DIR&&await this.eventsPopulateUnlinkDir(t,i,r,n)}))})),r}async eventsPopulateAddDir(t,r,n=[],i=!1){if(i)return n;let o=this.options.recursive?this.options.depth??Sve:Math.min(1,this.options.depth??Sve),s=this.options.limit??uBt,[a,u]=await cl.fs.readdir(r,this.options.ignore,o,s,this.watcher._closeSignal),c=[...a,...u];return await Promise.all(c.map(l=>{if(!this.watcher.isIgnored(l,this.options.ignore)&&!t.includes(l))return this.eventsPopulate([l],n,!0)})),n}async eventsPopulateUnlinkDir(t,r,n=[],i=!1){if(i)return n;for(let o of this.watcher._poller.stats.keys())cl.fs.isSubPath(r,o)&&(t.includes(o)||await this.eventsPopulate([o],n,!0));return n}onTargetAdd(t){this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAdd(t,this.options.renameTimeout):this.watcher.event(Za.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!Bve&&this.options.native!==!1&&this.watcher.watchDirectory(t,this.options,this.handler,void 0,this.base||this),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAddDir(t,this.options.renameTimeout):this.watcher.event(Za.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(Za.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(DEn.default.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(Za.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(DEn.default.dirname(t),t,!1),this.watcher.watchersClose(t),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlinkDir(t,this.options.renameTimeout):this.watcher.event(Za.UNLINK_DIR,t))}onTargetEvent(t){let[r,n]=t;r===Za.ADD?this.onTargetAdd(n):r===Za.ADD_DIR?this.onTargetAddDir(n):r===Za.CHANGE?this.onTargetChange(n):r===Za.UNLINK?this.onTargetUnlink(n):r===Za.UNLINK_DIR&&this.onTargetUnlinkDir(n)}onTargetEvents(t){for(let r of t)this.onTargetEvent(r)}onWatcherEvent(t,r,n=!1){return this.handlerBatched(t,r,n)}onWatcherChange(t=zDe.CHANGE,r){if(this.watcher.isClosed())return;let n=DEn.default.resolve(this.folderPath,r||"");this.filePath&&n!==this.folderPath&&n!==this.filePath||this.watcher.isIgnored(n,this.options.ignore)||this.onWatcherEvent(t,n)}onWatcherError(t){_6i&&t.code==="EPERM"?this.onWatcherChange(zDe.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on(cBt.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on(cBt.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(zDe.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&Bve&&this.options.native!==!1?this.options.depth??Sve:Math.min(1,this.options.depth??Sve),n=this.options.limit??uBt,[i,o]=await cl.fs.readdir(this.folderPath,this.options.ignore,r,n,this.watcher._closeSignal,this.options.readdirMap),s=[this.folderPath,...i,...o];await Promise.all(s.map(a=>{if(!this.watcher._poller.stats.has(a)&&!this.watcher.isIgnored(a,this.options.ignore))return this.onWatcherEvent(zDe.CHANGE,a,t)}))}}},uXa=D6i;var QT={interval:100,intervalId:void 0,fns:new Map,init:()=>{QT.intervalId||(QT.intervalId=setInterval(QT.resolve,QT.interval))},reset:()=>{QT.intervalId&&(clearInterval(QT.intervalId),delete QT.intervalId)},add:(e,t)=>{QT.fns.set(e,Date.now()+t),QT.init()},remove:e=>{QT.fns.delete(e)},resolve:()=>{if(!QT.fns.size)return QT.reset();let e=Date.now();for(let[t,r]of QT.fns)r>=e||(QT.remove(t),t())}},fBt=QT;var dBt=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=S6i){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{let p=this._watcher._poller.paths.find(n||-1,d=>d!==i);if(p&&p!==i){if(cl.fs.getRealPath(i,!0)===p)return;this._watcher.event(o.rename,p,i)}else this._watcher.event(o.add,i)};if(!n)return a();let u=()=>{s.add.delete(n),fBt.remove(c)},c=()=>{u(),a()};fBt.add(c,r);let l=()=>{let p=s.unlink.get(n);if(!p)return;u();let d=p();i===d?o.change&&this._watcher._poller.stats.has(i)&&this._watcher.event(o.change,i):this._watcher.event(o.rename,d,i)};s.add.set(n,l),l()}getLockUnlink(t,r=S6i){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{this._watcher.event(o.unlink,i)};if(!n)return a();let u=()=>{s.unlink.delete(n),fBt.remove(c)},c=()=>{u(),a()};fBt.add(c,r);let l=()=>(u(),i);s.unlink.set(n,l),s.add.get(n)?.()}getLockTargetAdd(t,r){let n=this._watcher._poller.getIno(t,Za.ADD,NX.FILE);return this.getLockAdd({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetAddDir(t,r){let n=this._watcher._poller.getIno(t,Za.ADD_DIR,NX.DIR);return this.getLockAdd({ino:n,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}getLockTargetUnlink(t,r){let n=this._watcher._poller.getIno(t,Za.UNLINK,NX.FILE);return this.getLockUnlink({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetUnlinkDir(t,r){let n=this._watcher._poller.getIno(t,Za.UNLINK_DIR,NX.DIR);return this.getLockUnlink({ino:n,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}reset(){this._locksAdd=new Map,this._locksAddDir=new Map,this._locksUnlink=new Map,this._locksUnlinkDir=new Map,this._locksDir={add:this._locksAddDir,unlink:this._locksUnlinkDir},this._locksFile={add:this._locksAdd,unlink:this._locksUnlink}}};dBt.DIR_EVENTS={add:Za.ADD_DIR,rename:Za.RENAME_DIR,unlink:Za.UNLINK_DIR};dBt.FILE_EVENTS={add:Za.ADD,change:Za.CHANGE,rename:Za.RENAME,unlink:Za.UNLINK};var cXa=dBt;var R6i=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(cl.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let n=this.map.get(t);if(cl.lang.isSet(n)){let i=n.delete(r);return n.size||this.map.delete(t),i}else if(n===r)return this.map.delete(t),!0}return!1}find(t,r){if(this.map.has(t)){let n=this.map.get(t);if(cl.lang.isSet(n))return Array.from(n).find(r);if(r(n))return n}}get(t){return this.map.get(t)}has(t,r){if(cl.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let n=this.map.get(t);return cl.lang.isSet(n)?n.has(r):n===r}return!1}set(t,r){if(this.map.has(t)){let n=this.map.get(t);cl.lang.isSet(n)?n.add(r):n!==r&&this.map.set(t,new Set([n,r]))}else this.map.set(t,r);return this}},F6i=R6i;var k6i=class{constructor(t){this.ino=t.ino<=Number.MAX_SAFE_INTEGER?Number(t.ino):t.ino,this.size=Number(t.size),this.atimeMs=Number(t.atimeMs),this.mtimeMs=Number(t.mtimeMs),this.ctimeMs=Number(t.ctimeMs),this.birthtimeMs=Number(t.birthtimeMs),this._isFile=t.isFile(),this._isDirectory=t.isDirectory(),this._isSymbolicLink=t.isSymbolicLink()}isFile(){return this._isFile}isDirectory(){return this._isDirectory}isSymbolicLink(){return this._isSymbolicLink}},lXa=k6i;var Q6i=class{constructor(){this.inos={},this.paths=new F6i,this.stats=new Map}getIno(t,r,n){let i=this.inos[r];if(!i)return;let o=i[t];if(o&&!(n&&o[1]!==n))return o[0]}getStats(t){return this.stats.get(t)}async poll(t,r){let n=await cl.fs.poll(t,r);if(!(!n||!(n.isFile()||n.isDirectory())))return new lXa(n)}reset(){this.inos={},this.paths=new F6i,this.stats=new Map}async update(t,r){let n=this.getStats(t),i=await this.poll(t,r);if(this.updateStats(t,i),!n&&i){if(i.isFile())return this.updateIno(t,Za.ADD,i),[Za.ADD];if(i.isDirectory())return this.updateIno(t,Za.ADD_DIR,i),[Za.ADD_DIR]}else if(n&&!i){if(n.isFile())return this.updateIno(t,Za.UNLINK,n),[Za.UNLINK];if(n.isDirectory())return this.updateIno(t,Za.UNLINK_DIR,n),[Za.UNLINK_DIR]}else if(n&&i){if(n.isFile()){if(i.isFile())return n.ino===i.ino&&!n.size&&!i.size?[]:(this.updateIno(t,Za.CHANGE,i),[Za.CHANGE]);if(i.isDirectory())return this.updateIno(t,Za.UNLINK,n),this.updateIno(t,Za.ADD_DIR,i),[Za.UNLINK,Za.ADD_DIR]}else if(n.isDirectory()){if(i.isFile())return this.updateIno(t,Za.UNLINK_DIR,n),this.updateIno(t,Za.ADD,i),[Za.UNLINK_DIR,Za.ADD];if(i.isDirectory())return n.ino===i.ino?[]:(this.updateIno(t,Za.UNLINK_DIR,n),this.updateIno(t,Za.ADD_DIR,i),[Za.UNLINK_DIR,Za.ADD_DIR])}}return[]}updateIno(t,r,n){let i=this.inos[r]=this.inos[r]||(this.inos[r]={}),o=n.isFile()?NX.FILE:NX.DIR;i[t]=[n.ino,o]}updateStats(t,r){if(r)this.paths.set(r.ino,t),this.stats.set(t,r);else{let n=this.stats.get(t)?.ino||-1;this.paths.delete(n,t),this.stats.delete(t)}}},N6i=Q6i;var j6i=class e extends pXa.EventEmitter{constructor(t,r,n){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(kT.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(i=>this.on(kT.CLOSE,i)),this._readyWait=new Promise(i=>this.on(kT.READY,i)),this._locker=new cXa(this),this._roots=new Set,this._poller=new N6i,this._pollers=new Set,this._subwatchers=new Set,this._watchers={},this._watchersLock=Promise.resolve(),this._watchersRestorable={},this.watch(t,r,n)}isClosed(){return this._closed}isIgnored(t,r){return!!r&&(cl.lang.isFunction(r)?!!r(t):r.test(t))}isReady(){return this._ready}close(){return this._locker.reset(),this._poller.reset(),this._roots.clear(),this.watchersClose(),this.isClosed()?!1:(this._closed=!0,this.emit(kT.CLOSE))}error(t){if(this.isClosed())return!1;let r=cl.lang.castError(t);return this.emit(kT.ERROR,r)}event(t,r,n){return this.isClosed()?!1:(this.emit(kT.ALL,t,r,n),this.emit(t,r,n))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(kT.READY))}pollerExists(t,r){for(let n of this._pollers)if(n.targetPath===t&&cl.lang.isShallowEqual(n.options,r))return!0;return!1}subwatcherExists(t,r){for(let n of this._subwatchers)if(n.targetPath===t&&cl.lang.isShallowEqual(n.options,r))return!0;return!1}watchersClose(t,r,n=!0){if(t){let i=this._watchers[t];if(i)for(let o of[...i])r&&o.filePath!==r||this.watcherClose(o);if(n)for(let o in this._watchers)cl.fs.isSubPath(t,o)&&this.watchersClose(o,r,!1)}else for(let i in this._watchers)this.watchersClose(i,r,!1)}watchersLock(t){return this._watchersLock.then(()=>this._watchersLock=new Promise(async r=>{await t(),r()}))}watchersRestore(){delete this._watchersRestoreTimeout;let t=Object.entries(this._watchersRestorable);this._watchersRestorable={};for(let[r,n]of t)this.watchPath(r,n.options,n.handler)}async watcherAdd(t,r){let{folderPath:n}=t;(this._watchers[n]=this._watchers[n]||[]).push(t);let o=new uXa(this,t,r);return await o.init(),o}watcherClose(t){t.watcher.close();let r=this._watchers[t.folderPath];if(r){let o=r.indexOf(t);r.splice(o,1),r.length||delete this._watchers[t.folderPath]}let n=t.filePath||t.folderPath;this._roots.has(n)&&(this._watchersRestorable[n]=t,this._watchersRestoreTimeout||(this._watchersRestoreTimeout=cl.lang.defer(()=>this.watchersRestore())))}watcherExists(t,r,n,i){if(this._watchers[t]?.find(a=>a.handler===n&&(!a.filePath||a.filePath===i)&&a.options.ignore===r.ignore&&!!a.options.native==!!r.native&&(!r.recursive||a.options.recursive)))return!0;let s=VDe.default.dirname(t);for(let a=1;a<1/0;a++){if(this._watchers[s]?.find(l=>(a===1||l.options.recursive&&a<=(l.options.depth??Sve))&&l.handler===n&&(!l.filePath||l.filePath===i)&&l.options.ignore===r.ignore&&!!l.options.native==!!r.native&&(!r.recursive||l.options.recursive&&Bve&&l.options.native!==!1)))return!0;if(!Bve)break;let c=VDe.default.dirname(t);if(s===c)break;s=c}return!1}async watchDirectories(t,r,n,i,o){if(this.isClosed())return;t=cl.lang.uniq(t).sort();let s;for(let a of t)if(!this.isIgnored(a,r.ignore)&&!this.watcherExists(a,r,n,i))try{let u=!r.recursive||Bve&&r.native!==!1?r:{...r,recursive:!1},l={watcher:REn.default.watch(a,u),handler:n,options:r,folderPath:a,filePath:i},p=s=await this.watcherAdd(l,o);if(this._roots.has(i||a)){let f={...r,ignoreInitial:!0,recursive:!1},m=VDe.default.dirname(a),h=a;await this.watchDirectories([m],f,n,h,p)}}catch(u){this.error(u)}return s}async watchDirectory(t,r,n,i,o){if(!this.isClosed()&&!this.isIgnored(t,r.ignore)){if(!r.recursive||Bve&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,n,i,o));{r={...r,recursive:!0};let s=r.depth??Sve,a=r.limit??uBt,[u]=await cl.fs.readdir(t,r.ignore,s,a,this._closeSignal,r.readdirMap);return this.watchersLock(async()=>{let c=await this.watchDirectories([t],r,n,i,o);if(u.length){let l=cl.fs.getDepth(t);for(let p of u){let d=cl.fs.getDepth(p),f=Math.max(0,s-(d-l)),m={...r,depth:f};await this.watchDirectories([p],m,n,i,o||c)}}})}}}async watchFileOnce(t,r,n){if(this.isClosed()||(r={...r,ignoreInitial:!1},this.subwatcherExists(t,r)))return;let i={targetPath:t,options:r},o=(c,l)=>{l===t&&(u(),n())},s=new e(o),a=()=>{this._subwatchers.add(i),this.on(kT.CLOSE,u),s.watchFile(t,r,o)},u=()=>{this._subwatchers.delete(i),this.removeListener(kT.CLOSE,u),s.close()};return a()}async watchFile(t,r,n){if(this.isClosed()||this.isIgnored(t,r.ignore))return;r={...r,recursive:!1};let i=VDe.default.dirname(t);return this.watchDirectory(i,r,n,t)}async watchPollingOnce(t,r,n){if(this.isClosed())return;let i=!1,o=new N6i,s=await this.watchPolling(t,r,async()=>{i||!(await o.update(t,r.pollingTimeout)).length||i||(i=!0,s(),n())})}async watchPolling(t,r,n){if(this.isClosed())return cl.lang.noop;if(this.pollerExists(t,r))return cl.lang.noop;let i={...r,interval:r.pollingInterval??JYa},o={targetPath:t,options:r},s=()=>{this._pollers.add(o),this.on(kT.CLOSE,a),REn.default.watchFile(t,i,n)},a=()=>{this._pollers.delete(o),this.removeListener(kT.CLOSE,a),REn.default.unwatchFile(t,n)};return cl.lang.attempt(s),()=>cl.lang.attempt(a)}async watchUnknownChild(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchFileOnce(t,r,i)}async watchUnknownTarget(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchPollingOnce(t,r,i)}async watchPaths(t,r,n){if(this.isClosed())return;if(t=cl.lang.uniq(t).sort(),t.every((o,s)=>t.every((a,u)=>u===s||!cl.fs.isSubPath(o,a))))await Promise.all(t.map(o=>this.watchPath(o,r,n)));else for(let o of t)await this.watchPath(o,r,n)}async watchPath(t,r,n){if(this.isClosed()||(t=VDe.default.resolve(t),this.isIgnored(t,r.ignore)))return;let i=await cl.fs.poll(t,r.pollingTimeout);if(i){if(i.isFile())return this.watchFile(t,r,n);if(i.isDirectory())return this.watchDirectory(t,r,n);this.error(`"${t}" is not supported`)}else{let o=VDe.default.dirname(t);return(await cl.fs.poll(o,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,n):this.watchUnknownTarget(t,r,n)}}async watch(t,r,n=cl.lang.noop){if(cl.lang.isFunction(t))return this.watch([],{},t);if(cl.lang.isUndefined(t))return this.watch([],r,n);if(cl.lang.isFunction(r))return this.watch(t,{},r);if(cl.lang.isUndefined(r))return this.watch(t,{},n);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let i=cl.lang.castArray(t);i.forEach(o=>this._roots.add(o)),await this.watchPaths(i,r,n),!this.isClosed()&&(n!==cl.lang.noop&&this.on(kT.ALL,n),r.readdirMap=void 0,this.ready())}},FEn=j6i;HEn();Vt();var Hrt=require("fs/promises"),AZa=require("os"),yZa=_e(require("path"),1),wod=".fern",Cod="logs";function xod(){return"cli@4.32.2"}var KDe=class{logFilePath=null;initialized=!1;sessionStartTime;constructor(){this.sessionStartTime=Date.now()}async initialize(){if(this.initialized)return;let t=We(Ut.of((0,AZa.homedir)()),Se.of(wod)),r=We(t,Se.of(Cod));await Xt(r)||await(0,Hrt.mkdir)(r,{recursive:!0});let i=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=We(r,Se.of(i));let o=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${yZa.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
2167
2167
  `);await(0,Hrt.writeFile)(this.logFilePath,o,"utf-8"),this.initialized=!0}getLogFilePath(){return this.logFilePath}async writeEntry(t){if(!this.initialized||!this.logFilePath)return;let r=JSON.stringify(t)+`
2168
2168
  `;try{await(0,Hrt.appendFile)(this.logFilePath,r,"utf-8")}catch{}}async logFrontendMetrics(t){let r={timestamp:t.timestamp,source:t.source,level:t.level,eventType:this.getEventType(t.payload,t.isAggregate),isAggregate:t.isAggregate,data:t.payload};await this.writeEntry(r)}async logCliMetric(t,r="info"){let n={timestamp:t.timestamp,source:xod(),level:r,eventType:t.type,data:{durationMs:t.durationMs,metadata:t.metadata}};await this.writeEntry(n)}async logCliMemory(){let t=process.memoryUsage(),r={type:"cli_memory",timestamp:new Date().toISOString(),metadata:{heapUsed:t.heapUsed,heapTotal:t.heapTotal,external:t.external,rss:t.rss,heapUsedMB:Math.round(t.heapUsed/1024/1024*100)/100,heapTotalMB:Math.round(t.heapTotal/1024/1024*100)/100,rssMB:Math.round(t.rss/1024/1024*100)/100}};await this.logCliMetric(r)}async logCliReloadStart(){let t={type:"cli_reload_start",timestamp:new Date().toISOString()};await this.logCliMetric(t)}async logCliReloadFinish(t,r){let n={type:"cli_reload_finish",timestamp:new Date().toISOString(),durationMs:t,metadata:r};await this.logCliMetric(n)}async logCliDocsGeneration(t,r){let n={type:"cli_docs_generation",timestamp:new Date().toISOString(),durationMs:t,metadata:r};await this.logCliMetric(n)}async logCliValidation(t,r){let n={type:"cli_validation",timestamp:new Date().toISOString(),durationMs:t,metadata:{success:r}};await this.logCliMetric(n)}getEventType(t,r){return r?"aggregate_summary":"type"in t&&typeof t.type=="string"?t.type:"unknown"}static isMetricsMessage(t){if(typeof t!="object"||t===null)return!1;let r=t;return r.type==="metrics"&&typeof r.timestamp=="string"&&typeof r.source=="string"}};var sVi={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"};function bZa(e){let t=_od();if(t==null)return;let{port:r,debugLogger:n,getDocsLoadResponse:i}=e,o=new Map;function s(u){let c=JSON.stringify(u),l=[];for(let[p]of o)try{p.send(c)}catch{l.push(p)}for(let p of l){let d=o.get(p);d&&(clearInterval(d.pingInterval),o.delete(p))}}let a=t.serve({port:r,fetch(u,c){if(u.method==="OPTIONS")return new Response(null,{status:204,headers:sVi});let l=new URL(u.url);if(u.headers.get("upgrade")?.toLowerCase()==="websocket"){c.upgrade(u,{data:{connectionId:`${Date.now()}`}});return}if(u.method==="POST"&&l.pathname==="/v2/registry/docs/load-with-url")return new Response(JSON.stringify(i()),{headers:{"Content-Type":"application/json",...sVi}});let p=/^\/_local\/(.*)/.exec(l.pathname);return u.method==="GET"&&p!=null?new Response(t.file(`/${p[1]}`),{headers:sVi}):new Response("Not Found",{status:404})},websocket:{open(u){let{connectionId:c}=u.data,l=setInterval(()=>{let p=o.get(u);if(!p)return;let d=Date.now();if(d-p.lastPong>9e4){u.close();return}try{u.send(JSON.stringify({type:"ping",timestamp:d}))}catch{u.close()}},3e4);o.set(u,{pingInterval:l,lastPong:Date.now()});try{u.send(JSON.stringify({type:"connected",connectionId:c}))}catch{}},message(u,c){try{let l=JSON.parse(c.toString());if(l.type==="pong"){let p=o.get(u);p&&(p.lastPong=Date.now())}else KDe.isMetricsMessage(l)&&n.logFrontendMetrics(l)}catch{}},close(u){let c=o.get(u);c&&(clearInterval(c.pingInterval),o.delete(u))}}});return{sendData:s,stop:u=>a.stop(u)}}function _od(){return globalThis.Bun}Vt();var Lqi=_e(hVi(),1),Iou=_e(Bqi(),1),Ok=require("fs/promises"),wou=require("os"),Cou=_e(yw(),1),xou=_e(Eou(),1),sIn=process.platform==="win32",Mqi=be.cyan("[docs]:"),rld="etag",nld=23,vou=e=>e.padEnd(nld," "),ild="preview",old="app-preview",sld="bundle",ald=".next",uld="standalone",cld=".fern",lld="packages/fern-docs/bundle/.next/server/instrumentation.js",pld=".npmrc",fld=".pnpmfile.cjs",dld="pnpm-workspace.yaml",mld='Cannot find matching keyid: {"signatures":';function hld(){return We(Ut.of((0,wou.homedir)()),Se.of(cld))}function fnt({app:e=!1}){return We(hld(),Se.of(e?old:ild))}function Mve({app:e=!1}){return We(fnt({app:e}),Se.of(e?ald:sld))}function WBt({app:e=!1}){return We(Mve({app:e}),Se.of(uld))}function gld({app:e=!1}){return We(WBt({app:e}),Se.of(lld))}function Ald({app:e=!1}){return We(WBt({app:e}),Se.of(dld))}function yld({app:e=!1}){return We(WBt({app:e}),Se.of(fld))}function bld({app:e=!1}){return We(WBt({app:e}),Se.of(pld))}function iRe(e){return new Error(`${e}. Please reach out to support@buildwithfern.com.`)}function Eld({app:e=!1}){return We(fnt({app:e}),Se.of(rld))}var vld=`module.exports = {
2169
2169
  hooks: {
@@ -2204,7 +2204,7 @@ Please ensure you have membership at https://dashboard.buildwithfern.com, and as
2204
2204
 
2205
2205
  Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`);case"UnavailableError":return t.failAndThrow("Failed to publish docs. Please try again later or reach out to Fern support at support@buildwithfern.com.");default:return t.failAndThrow("Failed to publish docs.",e)}}function fdd(e,t){let n=e?.content;if(n?.reason==="status-code"){let i=n.statusCode;if(i===401||i===403)return`${`You do not have permission to publish docs to organization '${t}'. Please run 'fern login' to ensure you are logged in with the correct account.`}
2206
2206
 
2207
- Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`}}function ddd(e){try{return new URL(BT(e)).pathname}catch{return}}async function mdd({fdr:e,workspace:t,organization:r,context:n,snippetsConfig:i}){if(!t)return;let o=await hdd({fdr:e,workspace:t,snippetsConfig:i,context:n});if(Object.keys(o).length===0){n.logger.debug("[SDK Dynamic IR] No snippet configs found, skipping S3 check");return}try{let s=await e.api.v1.register.checkSdkDynamicIrExists({orgId:Cr.OrgId(r),snippetConfiguration:o});if(!s.ok||!s.body){n.logger.debug("[SDK Dynamic IR] API call failed or returned empty body");return}let a=s.body.existingDynamicIrs;if(Object.keys(a).length===0){n.logger.debug("[SDK Dynamic IR] No existing SDK dynamic IRs found in S3");return}let u={};for(let[c,l]of Object.entries(a))try{n.logger.debug(`Downloading existing SDK dynamic IR for ${c}...`);let p=await fetch(l.downloadUrl);if(p.ok){let d=await p.json();u[c]={dynamicIR:d},n.logger.debug(`Successfully downloaded SDK dynamic IR for ${c}`)}else n.logger.warn(`Failed to download SDK dynamic IR for ${c}: ${p.status}`)}catch(p){n.logger.warn(`Error downloading SDK dynamic IR for ${c}: ${p}`)}return Object.keys(u).length>0?u:void 0}catch(s){n.logger.debug(`Error checking for existing SDK dynamic IRs: ${s}`);return}}function pau(e){return e.replace(/^https:\/\//,"")}async function hdd({fdr:e,workspace:t,snippetsConfig:r,context:n}){let i={},o=[{language:"typescript",snippetName:r.typescriptSdk?.package,explicitVersion:r.typescriptSdk?.version},{language:"python",snippetName:r.pythonSdk?.package,explicitVersion:r.pythonSdk?.version},{language:"java",snippetName:r.javaSdk?.coordinate,explicitVersion:r.javaSdk?.version},{language:"go",snippetName:r.goSdk?.githubRepo&&pau(r.goSdk?.githubRepo),explicitVersion:r.goSdk?.version},{language:"csharp",snippetName:r.csharpSdk?.package,explicitVersion:r.csharpSdk?.version},{language:"ruby",snippetName:r.rubySdk?.gem,explicitVersion:r.rubySdk?.version},{language:"php",snippetName:r.phpSdk?.package,explicitVersion:r.phpSdk?.version},{language:"swift",snippetName:r.swiftSdk?.package,explicitVersion:r.swiftSdk?.version},{language:"rust",snippetName:r.rustSdk?.package,explicitVersion:r.rustSdk?.version}];for(let s of o){if(!s.snippetName)continue;let a=s.explicitVersion;a||(a=(await gdd({fdr:e,workspace:t,language:s.language,snippetName:s.snippetName,context:n}))?.version),i[s.language]={packageName:s.snippetName,version:a},a||n.logger.debug(`[SDK Dynamic IR] ${s.language}: no version specified, will use latest`)}return i}async function gdd({fdr:e,workspace:t,language:r,snippetName:n,context:i}){let o;switch(r){case"csharp":o="Csharp";break;case"go":o="Go";break;case"java":o="Java";break;case"python":o="Python";break;case"ruby":o="Ruby";break;case"typescript":o="TypeScript";break;case"php":o="Php";break;case"swift":o="Swift";break;default:return}let s,a,u;if(t.generatorsConfiguration?.groups){let c=[];for(let l of t.generatorsConfiguration.groups)for(let p of l.generators)if(p.language===r){let d=bn.getPackageName({generatorInvocation:p});d&&c.push(d),!a&&d&&(a=d,u=p.name,p.outputMode.type==="githubV2"&&(s=`${p.outputMode.githubV2.owner}/${p.outputMode.githubV2.repo}`))}}if(!a){i.logger.debug(`[SDK Dynamic IR] ${r}: no generator found with a package name`);return}try{let c=await e.sdks.versions.computeSemanticVersion({githubRepository:s,language:o,package:a});if(!c.ok){i.logger.debug(`[SDK Dynamic IR] ${r}: version computation failed for package "${a}"`);return}return i.logger.debug(`[SDK Dynamic IR] ${r}: computed version ${c.body.version} for package "${a}"`),{version:c.body.version,generatorPackage:a}}catch(c){i.logger.debug(`[SDK Dynamic IR] ${r}: error computing version: ${c}`);return}}async function Add({workspace:e,organization:t,context:r,snippetsConfig:n,skipLanguages:i=new Set}){let o={};if(!e)return;let s={typescript:n.typescriptSdk?.package,python:n.pythonSdk?.package,java:n.javaSdk?.coordinate,go:n.goSdk?.githubRepo&&pau(n.goSdk?.githubRepo),csharp:n.csharpSdk?.package,ruby:n.rubySdk?.gem,php:n.phpSdk?.package,swift:n.swiftSdk?.package,rust:n.rustSdk?.package};if(e.generatorsConfiguration?.groups)for(let a of e.generatorsConfiguration.groups)for(let u of a.generators){let c=oRe({apiName:e.workspaceName??"",organization:t,generatorInvocation:u}),l="";if(c?.outputConfig.type==="publish")switch(c.outputConfig.value.type){case"npm":case"nuget":case"pypi":case"rubygems":l=c.outputConfig.value.packageName;break;case"maven":l=c.outputConfig.value.coordinate;break;case"go":l=c.outputConfig.value.repoUrl;break;case"swift":l=c.outputConfig.value.repoUrl;break;case"crates":l=c.outputConfig.value.packageName;break}if(u.language==="php"&&u.config&&typeof u.config=="object"&&"packageName"in u.config&&(l=u.config.packageName??""),!!u.language){if(i.has(u.language)){r.logger.debug(`Skipping dynamic IR generation for ${u.language} (using existing SDK dynamic IR)`);continue}if(u.language&&s[u.language]===l){let p=Zm({workspace:e,generationLanguage:u.language,keywords:void 0,smartCasing:u.smartCasing,exampleGeneration:{disabled:!0,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!0},audiences:{type:"all"},readme:void 0,packageName:l,version:void 0,context:r,sourceResolver:new tm(r,e),dynamicGeneratorConfig:c}),d=JBe({ir:p,disableExamples:!0,smartCasing:u.smartCasing,generationLanguage:u.language,generatorConfig:c});d?o[u.language]={dynamicIR:d}:r.logger.debug(`Failed to create dynamic IR for ${u.language}`)}}}for(let[a,u]of Object.entries(s))a&&u&&!Object.keys(o).includes(a)&&!i.has(a)&&(r.logger.warn(),r.logger.warn(`Failed to upload ${a} SDK snippets because of unknown package \`${u}\`.`),r.logger.warn(`Please make sure your ${e.workspaceName?`${e.workspaceName}/`:""}generators.yml has a generator that publishes a ${u} package.`),r.logger.warn());if(Object.keys(o).length>0)return o}async function ydd({dynamicIRs:e,dynamicIRUploadUrls:t,context:r,apiId:n}){if(Object.keys(t).length>0)for(let[i,o]of Object.entries(t)){let s=e[i]?.dynamicIR;if(s){let a=JSON.stringify(s);(await fetch(o.uploadUrl,{method:"PUT",body:a,headers:{"Content-Type":"application/octet-stream","Content-Length":Buffer.byteLength(a,"utf8").toString()}})).ok?r.logger.debug(`Uploaded dynamic IR for ${n}:${i}`):r.logger.warn(`Failed to upload dynamic IR for ${n}:${i}`)}else r.logger.warn(`Could not find matching dynamic IR to upload for ${n}:${i}`)}}async function bdd({docsDefinition:e,isPreview:t,context:r}){e.config.aiChatConfig==null||t||r.logger.warn(be.yellow("Enabling Ask Fern from docs.yml is deprecated. Please enable it from the Fern dashboard instead."))}function Edd(e,t){if(e)return{enabled:!0,model:process.env.FERN_AI_MODEL||"gpt-4o-mini",maxRetries:parseInt(process.env.FERN_AI_MAX_RETRIES||"3"),requestTimeoutMs:parseInt(process.env.FERN_AI_TIMEOUT_MS||"25000"),styleInstructions:t}}function vdd(e){let t=e,r=t?.content;return{errorType:t?.error,statusCode:t?.statusCode??r?.statusCode,reason:r?.reason,errorMessage:r?.errorMessage??r?.message,body:r?.body,cause:r?.cause,rawError:e}}var eOt=[60*1e3,300*1e3,300*1e3];async function tOt({organization:e,apiWorkspaces:t,ossWorkspaces:r,docsWorkspace:n,context:i,token:o,instanceUrl:s,preview:a,disableTemplates:u,skipUpload:c,cliVersion:l}){let p=a&&!n.config.settings?.substituteEnvVars;n.config=$y(n.config,{onError:g=>i.failAndThrow(g)},{substituteAsEmpty:p});let d=n.config.instances;if(d.length===0){i.failAndThrow("No instances specified in docs.yml! Cannot register docs.");return}if(d.length>1&&s==null){i.failAndThrow(`More than one docs instances. Please specify one (e.g. --instance ${d[0]?.url})`);return}let f=d.find(g=>g.url===s)??d[0];if(f==null){i.failAndThrow(`No docs instance with url ${s}. Failed to register.`);return}let m=[];f.customDomain!=null&&(typeof f.customDomain=="string"?m.push(f.customDomain):Array.isArray(f.customDomain)&&m.push(...f.customDomain)),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${f.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let h;return await i.runInteractiveTask({name:f.url},async()=>{let g=performance.now(),A=()=>lau({docsWorkspace:n,customDomains:m,domain:f.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,editThisPage:f.editThisPage,isPrivate:f.private,disableTemplates:u,skipUpload:c,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:f.audiences?Array.isArray(f.audiences)?f.audiences:[f.audiences]:void 0,docsUrl:f.url,cliVersion:l});for(let v=0;;v++)try{h=await A();break}catch(b){if(!(b instanceof gnt)||v>=eOt.length){if(b instanceof gnt)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.");throw b}let I=eOt[v]??eOt[eOt.length-1]??6e4,w=I/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${w} minute${w===1?"":"s"} (attempt ${v+1}/${eOt.length})...`),await new Promise(x=>setTimeout(x,I))}let E=performance.now()-g;i.logger.debug(`Docs publishing completed in ${E.toFixed(0)}ms`)}),h}var rwn=class{context;task;project;docsWorkspace;ossWorkspaces;token;constructor({context:t,task:r,project:n,docsWorkspace:i,ossWorkspaces:o,token:s}){this.context=t,this.task=r,this.project=n,this.docsWorkspace=i,this.ossWorkspaces=o,this.token=s}async publish({instanceUrl:t,preview:r,skipUpload:n}){let i=new ih({context:this.context,task:this.task});try{let o=await tOt({organization:this.project.config.organization,apiWorkspaces:this.project.apiWorkspaces,ossWorkspaces:this.ossWorkspaces,docsWorkspace:this.docsWorkspace,context:i,token:this.token,instanceUrl:t,preview:r,disableTemplates:void 0,skipUpload:n,cliVersion:"4.32.1"});return i.getResult()===Pp.Failure?{success:!1}:{success:!0,url:o}}catch(o){return{success:!1,error:o instanceof Error?o.message:String(o)}}}};Rt();var Ant=class e{static MAX_DISPLAYED_LOGS_TTY=10;static URL_PATTERN=/https?:\/\/[^\s]+/;context;stream;tasks={};taskOrder=[];startTime;isRegistered=!1;constructor(t){this.context=t.context,this.stream=t.stream??process.stderr}addTask(t){let r={...t,status:t.status??"pending"};return this.tasks[t.id]=r,this.taskOrder.push(t.id),this}async start(t){return this.startTime=Date.now(),t!=null&&await this.context.ttyAwareLogger.takeOverTerminal(()=>{this.stream.write(`
2207
+ Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`}}function ddd(e){try{return new URL(BT(e)).pathname}catch{return}}async function mdd({fdr:e,workspace:t,organization:r,context:n,snippetsConfig:i}){if(!t)return;let o=await hdd({fdr:e,workspace:t,snippetsConfig:i,context:n});if(Object.keys(o).length===0){n.logger.debug("[SDK Dynamic IR] No snippet configs found, skipping S3 check");return}try{let s=await e.api.v1.register.checkSdkDynamicIrExists({orgId:Cr.OrgId(r),snippetConfiguration:o});if(!s.ok||!s.body){n.logger.debug("[SDK Dynamic IR] API call failed or returned empty body");return}let a=s.body.existingDynamicIrs;if(Object.keys(a).length===0){n.logger.debug("[SDK Dynamic IR] No existing SDK dynamic IRs found in S3");return}let u={};for(let[c,l]of Object.entries(a))try{n.logger.debug(`Downloading existing SDK dynamic IR for ${c}...`);let p=await fetch(l.downloadUrl);if(p.ok){let d=await p.json();u[c]={dynamicIR:d},n.logger.debug(`Successfully downloaded SDK dynamic IR for ${c}`)}else n.logger.warn(`Failed to download SDK dynamic IR for ${c}: ${p.status}`)}catch(p){n.logger.warn(`Error downloading SDK dynamic IR for ${c}: ${p}`)}return Object.keys(u).length>0?u:void 0}catch(s){n.logger.debug(`Error checking for existing SDK dynamic IRs: ${s}`);return}}function pau(e){return e.replace(/^https:\/\//,"")}async function hdd({fdr:e,workspace:t,snippetsConfig:r,context:n}){let i={},o=[{language:"typescript",snippetName:r.typescriptSdk?.package,explicitVersion:r.typescriptSdk?.version},{language:"python",snippetName:r.pythonSdk?.package,explicitVersion:r.pythonSdk?.version},{language:"java",snippetName:r.javaSdk?.coordinate,explicitVersion:r.javaSdk?.version},{language:"go",snippetName:r.goSdk?.githubRepo&&pau(r.goSdk?.githubRepo),explicitVersion:r.goSdk?.version},{language:"csharp",snippetName:r.csharpSdk?.package,explicitVersion:r.csharpSdk?.version},{language:"ruby",snippetName:r.rubySdk?.gem,explicitVersion:r.rubySdk?.version},{language:"php",snippetName:r.phpSdk?.package,explicitVersion:r.phpSdk?.version},{language:"swift",snippetName:r.swiftSdk?.package,explicitVersion:r.swiftSdk?.version},{language:"rust",snippetName:r.rustSdk?.package,explicitVersion:r.rustSdk?.version}];for(let s of o){if(!s.snippetName)continue;let a=s.explicitVersion;a||(a=(await gdd({fdr:e,workspace:t,language:s.language,snippetName:s.snippetName,context:n}))?.version),i[s.language]={packageName:s.snippetName,version:a},a||n.logger.debug(`[SDK Dynamic IR] ${s.language}: no version specified, will use latest`)}return i}async function gdd({fdr:e,workspace:t,language:r,snippetName:n,context:i}){let o;switch(r){case"csharp":o="Csharp";break;case"go":o="Go";break;case"java":o="Java";break;case"python":o="Python";break;case"ruby":o="Ruby";break;case"typescript":o="TypeScript";break;case"php":o="Php";break;case"swift":o="Swift";break;default:return}let s,a,u;if(t.generatorsConfiguration?.groups){let c=[];for(let l of t.generatorsConfiguration.groups)for(let p of l.generators)if(p.language===r){let d=bn.getPackageName({generatorInvocation:p});d&&c.push(d),!a&&d&&(a=d,u=p.name,p.outputMode.type==="githubV2"&&(s=`${p.outputMode.githubV2.owner}/${p.outputMode.githubV2.repo}`))}}if(!a){i.logger.debug(`[SDK Dynamic IR] ${r}: no generator found with a package name`);return}try{let c=await e.sdks.versions.computeSemanticVersion({githubRepository:s,language:o,package:a});if(!c.ok){i.logger.debug(`[SDK Dynamic IR] ${r}: version computation failed for package "${a}"`);return}return i.logger.debug(`[SDK Dynamic IR] ${r}: computed version ${c.body.version} for package "${a}"`),{version:c.body.version,generatorPackage:a}}catch(c){i.logger.debug(`[SDK Dynamic IR] ${r}: error computing version: ${c}`);return}}async function Add({workspace:e,organization:t,context:r,snippetsConfig:n,skipLanguages:i=new Set}){let o={};if(!e)return;let s={typescript:n.typescriptSdk?.package,python:n.pythonSdk?.package,java:n.javaSdk?.coordinate,go:n.goSdk?.githubRepo&&pau(n.goSdk?.githubRepo),csharp:n.csharpSdk?.package,ruby:n.rubySdk?.gem,php:n.phpSdk?.package,swift:n.swiftSdk?.package,rust:n.rustSdk?.package};if(e.generatorsConfiguration?.groups)for(let a of e.generatorsConfiguration.groups)for(let u of a.generators){let c=oRe({apiName:e.workspaceName??"",organization:t,generatorInvocation:u}),l="";if(c?.outputConfig.type==="publish")switch(c.outputConfig.value.type){case"npm":case"nuget":case"pypi":case"rubygems":l=c.outputConfig.value.packageName;break;case"maven":l=c.outputConfig.value.coordinate;break;case"go":l=c.outputConfig.value.repoUrl;break;case"swift":l=c.outputConfig.value.repoUrl;break;case"crates":l=c.outputConfig.value.packageName;break}if(u.language==="php"&&u.config&&typeof u.config=="object"&&"packageName"in u.config&&(l=u.config.packageName??""),!!u.language){if(i.has(u.language)){r.logger.debug(`Skipping dynamic IR generation for ${u.language} (using existing SDK dynamic IR)`);continue}if(u.language&&s[u.language]===l){let p=Zm({workspace:e,generationLanguage:u.language,keywords:void 0,smartCasing:u.smartCasing,exampleGeneration:{disabled:!0,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!0},audiences:{type:"all"},readme:void 0,packageName:l,version:void 0,context:r,sourceResolver:new tm(r,e),dynamicGeneratorConfig:c}),d=JBe({ir:p,disableExamples:!0,smartCasing:u.smartCasing,generationLanguage:u.language,generatorConfig:c});d?o[u.language]={dynamicIR:d}:r.logger.debug(`Failed to create dynamic IR for ${u.language}`)}}}for(let[a,u]of Object.entries(s))a&&u&&!Object.keys(o).includes(a)&&!i.has(a)&&(r.logger.warn(),r.logger.warn(`Failed to upload ${a} SDK snippets because of unknown package \`${u}\`.`),r.logger.warn(`Please make sure your ${e.workspaceName?`${e.workspaceName}/`:""}generators.yml has a generator that publishes a ${u} package.`),r.logger.warn());if(Object.keys(o).length>0)return o}async function ydd({dynamicIRs:e,dynamicIRUploadUrls:t,context:r,apiId:n}){if(Object.keys(t).length>0)for(let[i,o]of Object.entries(t)){let s=e[i]?.dynamicIR;if(s){let a=JSON.stringify(s);(await fetch(o.uploadUrl,{method:"PUT",body:a,headers:{"Content-Type":"application/octet-stream","Content-Length":Buffer.byteLength(a,"utf8").toString()}})).ok?r.logger.debug(`Uploaded dynamic IR for ${n}:${i}`):r.logger.warn(`Failed to upload dynamic IR for ${n}:${i}`)}else r.logger.warn(`Could not find matching dynamic IR to upload for ${n}:${i}`)}}async function bdd({docsDefinition:e,isPreview:t,context:r}){e.config.aiChatConfig==null||t||r.logger.warn(be.yellow("Enabling Ask Fern from docs.yml is deprecated. Please enable it from the Fern dashboard instead."))}function Edd(e,t){if(e)return{enabled:!0,model:process.env.FERN_AI_MODEL||"gpt-4o-mini",maxRetries:parseInt(process.env.FERN_AI_MAX_RETRIES||"3"),requestTimeoutMs:parseInt(process.env.FERN_AI_TIMEOUT_MS||"25000"),styleInstructions:t}}function vdd(e){let t=e,r=t?.content;return{errorType:t?.error,statusCode:t?.statusCode??r?.statusCode,reason:r?.reason,errorMessage:r?.errorMessage??r?.message,body:r?.body,cause:r?.cause,rawError:e}}var eOt=[60*1e3,300*1e3,300*1e3];async function tOt({organization:e,apiWorkspaces:t,ossWorkspaces:r,docsWorkspace:n,context:i,token:o,instanceUrl:s,preview:a,disableTemplates:u,skipUpload:c,cliVersion:l}){let p=a&&!n.config.settings?.substituteEnvVars;n.config=$y(n.config,{onError:g=>i.failAndThrow(g)},{substituteAsEmpty:p});let d=n.config.instances;if(d.length===0){i.failAndThrow("No instances specified in docs.yml! Cannot register docs.");return}if(d.length>1&&s==null){i.failAndThrow(`More than one docs instances. Please specify one (e.g. --instance ${d[0]?.url})`);return}let f=d.find(g=>g.url===s)??d[0];if(f==null){i.failAndThrow(`No docs instance with url ${s}. Failed to register.`);return}let m=[];f.customDomain!=null&&(typeof f.customDomain=="string"?m.push(f.customDomain):Array.isArray(f.customDomain)&&m.push(...f.customDomain)),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${f.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let h;return await i.runInteractiveTask({name:f.url},async()=>{let g=performance.now(),A=()=>lau({docsWorkspace:n,customDomains:m,domain:f.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,editThisPage:f.editThisPage,isPrivate:f.private,disableTemplates:u,skipUpload:c,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:f.audiences?Array.isArray(f.audiences)?f.audiences:[f.audiences]:void 0,docsUrl:f.url,cliVersion:l});for(let v=0;;v++)try{h=await A();break}catch(b){if(!(b instanceof gnt)||v>=eOt.length){if(b instanceof gnt)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.");throw b}let I=eOt[v]??eOt[eOt.length-1]??6e4,w=I/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${w} minute${w===1?"":"s"} (attempt ${v+1}/${eOt.length})...`),await new Promise(x=>setTimeout(x,I))}let E=performance.now()-g;i.logger.debug(`Docs publishing completed in ${E.toFixed(0)}ms`)}),h}var rwn=class{context;task;project;docsWorkspace;ossWorkspaces;token;constructor({context:t,task:r,project:n,docsWorkspace:i,ossWorkspaces:o,token:s}){this.context=t,this.task=r,this.project=n,this.docsWorkspace=i,this.ossWorkspaces=o,this.token=s}async publish({instanceUrl:t,preview:r,skipUpload:n}){let i=new ih({context:this.context,task:this.task});try{let o=await tOt({organization:this.project.config.organization,apiWorkspaces:this.project.apiWorkspaces,ossWorkspaces:this.ossWorkspaces,docsWorkspace:this.docsWorkspace,context:i,token:this.token,instanceUrl:t,preview:r,disableTemplates:void 0,skipUpload:n,cliVersion:"4.32.2"});return i.getResult()===Pp.Failure?{success:!1}:{success:!0,url:o}}catch(o){return{success:!1,error:o instanceof Error?o.message:String(o)}}}};Rt();var Ant=class e{static MAX_DISPLAYED_LOGS_TTY=10;static URL_PATTERN=/https?:\/\/[^\s]+/;context;stream;tasks={};taskOrder=[];startTime;isRegistered=!1;constructor(t){this.context=t.context,this.stream=t.stream??process.stderr}addTask(t){let r={...t,status:t.status??"pending"};return this.tasks[t.id]=r,this.taskOrder.push(t.id),this}async start(t){return this.startTime=Date.now(),t!=null&&await this.context.ttyAwareLogger.takeOverTerminal(()=>{this.stream.write(`
2208
2208
  `),this.stream.write(`${be.cyan("\u25C6")} ${be.bold(t.title)}
2209
2209
  `),t.subtitle!=null&&this.stream.write(` ${be.dim(t.subtitle)}
2210
2210
  `),this.stream.write(`
@@ -3309,7 +3309,7 @@ generators:
3309
3309
  uri: your-org/your-sdk-repo
3310
3310
  token: \${GITHUB_TOKEN}
3311
3311
  mode: pull-request
3312
- `),z!=null){await tOn.rm(q,{recursive:!0,force:!0}),await tOn.mkdir(q,{recursive:!0}),E.logger.debug(`Self-hosted GitHub mode: cloning ${z.uri} to ${q}`);try{let{execSync:H}=await import("child_process"),ge=H("which git 2>/dev/null || echo 'not found'",{encoding:"utf-8"}).trim(),me=H("git --version 2>/dev/null || echo 'unknown'",{encoding:"utf-8"}).trim();E.logger.debug(`Git environment: path=${ge}, version=${me}, PATH=${process.env.PATH??"unset"}`)}catch{E.logger.debug(`Git environment: unable to determine git info, PATH=${process.env.PATH??"unset"}`)}try{let H=await vVt({githubRepository:z.uri,installationToken:z.token,targetDirectory:q,timeoutMs:3e4}),ge=z.mode??"push";if((ge==="push"||ge==="pull-request")&&z.branch!=null){if(E.logger.debug(`Checking out branch ${z.branch} before generation`),ge==="pull-request"&&!await H.remoteBranchExists(z.branch)){let we=qO(z.uri);E.failAndThrow(`Branch ${z.branch} does not exist in repository ${we.owner}/${we.repo}`)}await H.checkoutRemoteBranch(z.branch)}}catch(H){E.failAndThrow(`Failed to clone GitHub repository ${z.uri}: ${H instanceof Error?H.message:String(H)}`)}}let Z;A.raw?.snippets?.path!=null&&(Z=Ut.of(We(r.absoluteFilePath,Se.of(A.raw.snippets.path)))),Z==null&&z!=null&&(Z=Ut.of((await ZBn()).path+"/snippet.json"));let oe=await ZBn(),{shouldCommit:V,autoVersioningCommitMessage:K,autoVersioningChangelogEntry:Ee,autoVersioningPrDescription:Ce,autoVersioningVersionBumpReason:J}=await Z_n({organization:t.organization,absolutePathToFernConfig:t._absolutePath,workspace:b,generatorInvocation:A,absolutePathToLocalOutput:q,absolutePathToLocalSnippetJSON:Z,absolutePathToLocalSnippetTemplateJSON:void 0,version:i,audiences:n.audiences,workspaceTempDir:oe,keepDocker:o,context:E,irVersionOverride:A.irVersionOverride,outputVersionOverride:i,writeUnitTests:!0,generateOauthClients:_.ok?_?.body.oauthClientEnabled??!1:!1,generatePaginatedClients:_.ok?_?.body.paginationEnabled??!1:!1,includeOptionalRequestPropertyExamples:!1,inspect:s,executionEnvironment:void 0,ir:x,whiteLabel:_.ok?_.body.isWhitelabled:!1,runner:c,ai:l,autoVersioningCache:h,absolutePathToSpecRepo:An(r.absoluteFilePath)});if(E.logger.info(be.green("Wrote files to "+q)),z!=null&&V){let H={debug:we=>E.logger.debug(we),info:we=>E.logger.info(we),warn:we=>E.logger.warn(we),error:we=>E.logger.error(we)},me=await new eOn.PostGenerationPipeline({outputDir:q,replay:{enabled:p?.enabled===!0,skipApplication:d,stageOnly:!1},github:{enabled:!0,uri:z.uri,token:z.token,mode:z.mode??"push",branch:z.branch,commitMessage:K,changelogEntry:Ee,prDescription:Ce,versionBumpReason:J,previewMode:z.previewMode,generatorName:A.name},cliVersion:r.cliVersion??"unknown",generatorVersions:{[A.name]:A.version},generatorName:A.name},H).run();me.steps.replay!=null&&(0,eOn.logReplaySummary)(me.steps.replay,{debug:we=>E.logger.debug(we),info:we=>E.logger.info(be.cyan(we)),warn:we=>E.logger.warn(be.yellow(we)),error:we=>E.logger.error(be.red(we))}),me.success||E.failAndThrow(`Post-generation pipeline failed: ${me.errors?.join(", ")}`)}})))).some(A=>!A)&&a.failAndThrow()}function Rum(e,t){if(e==null)return;let n=(t.name.split("/").pop()??"sdk").replace(/[^a-zA-Z0-9-_]/g,"_");return e?We(e,Se.of(n)):void 0}async function ZBn(){return zco.default.dir({tmpdir:Uco.default.platform()==="darwin"?U1u.default.join("/private",Uco.default.tmpdir()):void 0,prefix:"fern"})}function Fum({generatorInvocation:e,org:t,version:r,packageName:n,context:i}){if(e.raw?.github!=null&&z1u(e.raw.github)){let[o,s]=e.raw.github.uri.split("/");if(o==null||s==null)return i.failAndThrow(`Invalid GitHub repository URI: ${e.raw.github.uri}. Expected format: owner/repo`);let a=e.raw.github.mode==="pull-request"?"pull-request":void 0;return qt.PublishingConfig.github({owner:o,repo:s,uri:e.raw.github.uri,token:e.raw.github.token,mode:a,branch:e.raw.github.branch,target:kum({outputSchema:e.raw.output,version:r,packageName:n})})}if(e.raw?.output?.location==="local-file-system"){let o;if(e.language==="python")o=D0.pypi({version:r,packageName:n}),i.logger.debug(`Created PyPiPublishTarget: version ${r} package name: ${n}`);else if(e.language==="rust")o=D0.crates({version:r,packageName:n}),i.logger.debug(`Created CratesPublishTarget: version ${r} package name: ${n}`);else if(e.language==="java"){let s=e.raw?.config,a=(()=>{if(!s||typeof s!="object"||s===null)return;let c=s;if(typeof c.group=="string"&&typeof c.artifact=="string")return{groupId:c.group,artifactId:c.artifact};if(typeof c["package-prefix"]=="string"&&n)return{groupId:c["package-prefix"],artifactId:n};typeof c["package-prefix"]=="string"&&!n&&i.logger.warn("Java generator has package-prefix configured but packageName is missing")})(),u=a?`${a.groupId}:${a.artifactId}`:void 0;if(u){let c=r??"0.0.0";o=D0.maven({coordinate:u,version:c,usernameEnvironmentVariable:"MAVEN_USERNAME",passwordEnvironmentVariable:"MAVEN_PASSWORD",mavenUrlEnvironmentVariable:"MAVEN_PUBLISH_REGISTRY_URL"}),i.logger.debug(`Created MavenPublishTarget: coordinate ${u} version ${c}`)}else s&&typeof s=="object"&&i.logger.debug("Java generator config provided but could not construct Maven coordinate. Expected either 'group' and 'artifact' or 'package-prefix' with packageName.")}return qt.PublishingConfig.filesystem({generateFullProject:t?.selfHostedSdKs??!1,publishTarget:o})}return e.outputMode._visit({downloadFiles:()=>qt.PublishingConfig.filesystem({generateFullProject:t?.selfHostedSdKs??!1,publishTarget:void 0}),github:()=>{},githubV2:()=>{},publish:()=>{},publishV2:()=>{},_other:()=>{}})}function kum({outputSchema:e,version:t,packageName:r}){let n=qt.PublishTarget.postman({apiKey:"",workspaceId:"",collectionId:void 0});if(e==null)return n;if(e.location==="npm"){let i=(e.token||"${NPM_TOKEN}").trim(),o=i==="<USE_OIDC>"||i==="OIDC";return D0.npm({packageName:e["package-name"],version:t??"0.0.0",tokenEnvironmentVariable:o?"<USE_OIDC>":i.startsWith("${")&&i.endsWith("}")?i.slice(2,-1).trim():""})}else return e.location==="maven"?D0.maven({version:t??"0.0.0",coordinate:e.coordinate,usernameEnvironmentVariable:e.username||"MAVEN_USERNAME",passwordEnvironmentVariable:e.password||"MAVEN_PASSWORD",mavenUrlEnvironmentVariable:e.url||"MAVEN_PUBLISH_REGISTRY_URL"}):e.location==="pypi"?D0.pypi({version:t,packageName:r}):n}function z1u(e){return e==null?!1:"uri"in e&&"token"in e}var Qum={defaultEndpoint:void 0,bannerLink:void 0,introduction:void 0,apiReferenceLink:void 0,apiName:void 0,disabledFeatures:void 0,whiteLabel:void 0,customSections:void 0,features:void 0,exampleStyle:void 0};function Num(e,t){if(e.raw?.github!=null&&z1u(e.raw.github))return{...e.raw.github,previewMode:t}}var pDt=class{executionEnvironment;constructor(t){this.executionEnvironment=t}async run({organization:t,absolutePathToFernConfig:r,workspace:n,generatorGroup:i,context:o,irVersionOverride:s,outputVersionOverride:a,shouldGenerateDynamicSnippetTests:u,skipUnstableDynamicSnippetTests:c,inspect:l}){let p=await Promise.all(i.generators.map(async d=>o.runInteractiveTask({name:d.name},async f=>{if(d.absolutePathToLocalOutput==null){f.failWithoutThrowing("Cannot generate because output location is not local-file-system");return}try{let{ir:m,generatorConfig:h}=await this.executeGenerator({generatorGroup:i,generatorInvocation:d,context:f,workspace:n,organization:t,irVersionOverride:s,outputVersionOverride:a,absolutePathToFernConfig:r,inspect:l});f.logger.info(be.green("Wrote files to "+d.absolutePathToLocalOutput)),u&&d.language!=null?(f.logger.info(`Generating dynamic snippet tests for ${d.language}...`),await Dgu({context:f,ir:m,config:h,language:d.language,outputDir:d.absolutePathToLocalOutput,skipUnstable:c})):f.logger.info(`Skipping dynamic snippet tests; shouldGenerateDynamicSnippetTests: ${u}, language: ${d.language}`)}catch(m){m instanceof pm||(m instanceof m8?f.failWithoutThrowing(`Generation failed: ${m.log}`,m):f.failWithoutThrowing(`Generation failed: ${m instanceof Error?m.message:"Unknown error"}`,m))}})))}async executeGenerator({generatorGroup:t,generatorInvocation:r,context:n,workspace:i,organization:o,irVersionOverride:s,outputVersionOverride:a,absolutePathToFernConfig:u,inspect:c}){if(n.logger.info(`Starting generation for ${r.name}`),r.absolutePathToLocalOutput==null)throw new Error("Output path is required for generation");let l=Zm({workspace:i,audiences:t.audiences,generationLanguage:r.language,keywords:r.keywords,smartCasing:r.smartCasing,exampleGeneration:{includeOptionalRequestPropertyExamples:!0,disabled:r.disableExamples},readme:r.readme,version:a,packageName:bn.getPackageName({generatorInvocation:r}),context:n,sourceResolver:new tm(n,i),generationMetadata:{cliVersion:i.cliVersion,generatorName:r.name,generatorVersion:r.version,generatorConfig:r.config,originGitCommit:k9()}}),p=await ZBn();return Z_n({organization:o,absolutePathToFernConfig:u,workspace:i,generatorInvocation:r,absolutePathToLocalOutput:r.absolutePathToLocalOutput,absolutePathToLocalSnippetJSON:r.absolutePathToLocalOutput?Ut.of(We(r.absolutePathToLocalOutput,Se.of(pqt))):void 0,absolutePathToLocalSnippetTemplateJSON:void 0,audiences:t.audiences,workspaceTempDir:p,version:a,keepDocker:!1,context:n,irVersionOverride:s,outputVersionOverride:a,writeUnitTests:!0,generateOauthClients:!0,generatePaginatedClients:!0,includeOptionalRequestPropertyExamples:!0,inspect:c,executionEnvironment:this.executionEnvironment,ir:l,runner:void 0,ai:i.generatorsConfiguration?.ai,absolutePathToSpecRepo:void 0})}};var q1u=require("fs/promises");Rt();Vt();zre();var HA=_e(foe(),1),V1u=require("fs/promises"),bst=class{context;constructor(t){this.context=t.context}async adapt(t){return{raw:this.buildRaw(t),name:t.image,version:t.version,config:t.config,language:this.mapLanguage(t.lang),outputMode:await this.buildOutputMode(t),absolutePathToLocalOutput:this.context.resolveOutputFilePath(t.output.path),smartCasing:t.smartCasing??!0,readme:this.buildReadme(t),absolutePathToLocalSnippets:void 0,disableExamples:!1,irVersionOverride:void 0,keywords:void 0,publishMetadata:void 0,settings:void 0}}buildRaw(t){let r=t.output.git;if(!(r==null||!oE.isGitOutputSelfHosted(r)))return{name:t.image,version:t.version,github:{uri:r.uri,token:r.token,mode:this.mapSelfHostedMode(r.mode),branch:r.branch}}}mapSelfHostedMode(t){if(t==null)return bn.GithubSelfhostedMode.PullRequest;switch(t){case"pr":return bn.GithubSelfhostedMode.PullRequest;case"push":return bn.GithubSelfhostedMode.Push;default:xe(t)}}async buildOutputMode(t){if(t.output.git!=null){let r=t.output.git;return oE.isGitOutputSelfHosted(r)?await this.buildGitSelfHostedOutputMode({target:t,git:r}):await this.buildGitHubRepositoryOutputMode({target:t,git:r})}return HA.FernFiddle.remoteGen.OutputMode.downloadFiles({})}async buildGitHubRepositoryOutputMode({target:t,git:r}){let n=qO(r.repository),i=r.license!=null?await this.convertLicense(r.license):void 0,o=t.publish!=null?this.buildPublishInfo(t.publish):void 0,s=this.buildReviewers(r.reviewers),a=r.mode??"pr";switch(a){case"pr":return HA.FernFiddle.remoteGen.OutputMode.githubV2(HA.FernFiddle.GithubOutputModeV2.pullRequest({owner:n.owner,repo:n.repo,license:i,publishInfo:o,reviewers:s,downloadSnippets:void 0}));case"release":return HA.FernFiddle.remoteGen.OutputMode.githubV2(HA.FernFiddle.GithubOutputModeV2.commitAndRelease({owner:n.owner,repo:n.repo,license:i,publishInfo:o,downloadSnippets:void 0}));case"push":return HA.FernFiddle.remoteGen.OutputMode.githubV2(HA.FernFiddle.GithubOutputModeV2.push({owner:n.owner,repo:n.repo,branch:r.branch,license:i,publishInfo:o,downloadSnippets:void 0}));default:xe(a)}}async buildGitSelfHostedOutputMode({target:t,git:r}){let n=qO(r.uri),i=r.license!=null?await this.convertLicense(r.license):void 0,o=t.publish!=null?this.buildPublishInfo(t.publish):void 0,s=r.mode??"pr";switch(s){case"pr":return HA.FernFiddle.remoteGen.OutputMode.githubV2(HA.FernFiddle.GithubOutputModeV2.pullRequest({owner:n.owner,repo:n.repo,branch:r.branch,license:i,publishInfo:o}));case"push":return HA.FernFiddle.remoteGen.OutputMode.githubV2(HA.FernFiddle.GithubOutputModeV2.push({owner:n.owner,repo:n.repo,branch:r.branch,license:i,publishInfo:o}));default:xe(s)}}buildPublishInfo(t){if(t.npm!=null)return this.buildNpmPublishInfo(t.npm);if(t.pypi!=null)return this.buildPypiPublishInfo(t.pypi);if(t.maven!=null)return this.buildMavenPublishInfo(t.maven);if(t.nuget!=null)return this.buildNugetPublishInfo(t.nuget);if(t.rubygems!=null)return this.buildRubygemsPublishInfo(t.rubygems);if(t.crates!=null)return this.buildCratesPublishInfo(t.crates)}buildNpmPublishInfo(t){return HA.FernFiddle.GithubPublishInfo.npm({registryUrl:t.url??"https://registry.npmjs.org",packageName:t.packageName,token:t.token})}buildPypiPublishInfo(t){return HA.FernFiddle.GithubPublishInfo.pypi({registryUrl:t.url??"https://upload.pypi.org/legacy/",packageName:t.packageName,credentials:t.token!=null?{username:"__token__",password:t.token}:t.username!=null&&t.password!=null?{username:t.username,password:t.password}:void 0,pypiMetadata:t.metadata!=null?{keywords:t.metadata.keywords,documentationLink:t.metadata.documentationLink,homepageLink:t.metadata.homepageLink}:void 0})}buildMavenPublishInfo(t){return HA.FernFiddle.GithubPublishInfo.maven({registryUrl:t.url??"https://s01.oss.sonatype.org/content/repositories/releases/",coordinate:t.coordinate,credentials:t.username!=null&&t.password!=null?{username:t.username,password:t.password}:void 0,signature:t.signature!=null?{keyId:t.signature.keyId,password:t.signature.password,secretKey:t.signature.secretKey}:void 0})}buildNugetPublishInfo(t){return HA.FernFiddle.GithubPublishInfo.nuget({registryUrl:t.url??"https://nuget.org/",packageName:t.packageName,apiKey:t.apiKey})}buildRubygemsPublishInfo(t){return HA.FernFiddle.GithubPublishInfo.rubygems({registryUrl:t.url??"https://rubygems.org/",packageName:t.packageName,apiKey:t.apiKey})}buildCratesPublishInfo(t){return HA.FernFiddle.GithubPublishInfo.crates({registryUrl:t.url??"https://crates.io/api/v1/crates",packageName:t.packageName,token:t.token})}buildReviewers(t){if(t==null)return;let r=[];if(t.teams!=null)for(let n of t.teams)r.push(HA.FernFiddle.GithubPullRequestReviewer.team({name:n}));if(t.users!=null)for(let n of t.users)r.push(HA.FernFiddle.GithubPullRequestReviewer.user({name:n}));return r.length>0?r:void 0}async convertLicense(t){if(t==="MIT")return HA.FernFiddle.GithubLicense.basic({id:HA.FernFiddle.GithubLicenseId.Mit});if(t==="Apache-2.0")return HA.FernFiddle.GithubLicense.basic({id:HA.FernFiddle.GithubLicenseId.Apache});let r=We(this.context.cwd,Se.of(t));if(!await Xt(r,"file"))throw new Error(`Custom license file "${r}" does not exist; did you mean to use either MIT or Apache-2.0?`);let n=await(0,V1u.readFile)(r,"utf-8");return HA.FernFiddle.GithubLicense.custom({contents:n})}buildReadme(t){let r=t.readme;if(r==null)return;let n={};return r.bannerLink!=null&&(n.bannerLink=r.bannerLink),r.introduction!=null&&(n.introduction=r.introduction),r.apiReferenceLink!=null&&(n.apiReferenceLink=r.apiReferenceLink),r.apiName!=null&&(n.apiName=r.apiName),r.disabledSections!=null&&(n.disabledSections=r.disabledSections),r.defaultEndpoint!=null&&(n.defaultEndpoint=r.defaultEndpoint),r.features!=null&&(n.features=r.features),r.customSections!=null&&(n.customSections=r.customSections.map(i=>({title:i.title,language:i.language??t.lang,content:i.content}))),r.exampleStyle!=null&&(n.exampleStyle=r.exampleStyle),n}mapLanguage(t){return{typescript:bn.GenerationLanguage.TYPESCRIPT,python:bn.GenerationLanguage.PYTHON,java:bn.GenerationLanguage.JAVA,go:bn.GenerationLanguage.GO,ruby:bn.GenerationLanguage.RUBY,csharp:bn.GenerationLanguage.CSHARP,swift:bn.GenerationLanguage.SWIFT,php:bn.GenerationLanguage.PHP,rust:bn.GenerationLanguage.RUST}[t.toLowerCase()]}};Vt();var nOn=require("path");function iOn({context:e,task:t,target:r,preview:n,outputPath:i}){if(n)return[(i!=null?(0,nOn.resolve)(e.cwd,i):(0,nOn.join)(e.cwd,Se.of(".fern/preview"))).toString()];let o=jum(t);if(o!=null){if(o.pullRequestUrl!=null)return[o.pullRequestUrl];if(o.releaseUrl!=null)return[o.releaseUrl];if(o.branchUrl!=null)return[o.branchUrl]}return e.resolveTargetOutputs(r)}function jum(e){let t={};for(let r of e.logs??[]){let n=r.message.match(/Created pull request: (.+)/);n!=null&&(t.pullRequestUrl=n[1]);let i=r.message.match(/Created commit (\w+)/);i!=null&&(t.commitHash=i[1]);let o=r.message.match(/Pushed branch: (.+)/);o!=null&&(t.branchUrl=o[1]);let s=r.message.match(/Release tagged\. View here: (.+)/);s!=null&&(t.releaseUrl=s[1])}return Object.keys(t).length>0?t:void 0}var oOn=class{context;cliVersion;invocationAdapter;constructor(t){this.context=t.context,this.cliVersion=t.cliVersion,this.invocationAdapter=new bst({context:this.context})}async run(t){let r=new ih({context:this.context,task:t.task,logLevel:zn.Info});try{let n=await this.invocationAdapter.adapt(t.target),i={groupName:t.target.name,audiences:t.audiences??{type:"all"},generators:[n],reviewers:void 0},s=await new QEe({context:this.context,cliVersion:this.cliVersion,task:t.task}).adapt(t.apiDefinition);return t.target.output.git!=null&&oE.isGitOutputSelfHosted(t.target.output.git)?await this.runSelfHostedGeneration({args:t,taskContext:r,fernWorkspace:s,generatorGroup:i}):await this.runLocalGeneration({args:t,taskContext:r,fernWorkspace:s,generatorGroup:i,generatorInvocation:n})}catch(n){return r.getResult()===Pp.Failure?{success:!1}:{success:!1,error:n instanceof Error?n.message:String(n)}}}async runSelfHostedGeneration({args:t,taskContext:r,fernWorkspace:n,generatorGroup:i}){let o={_absolutePath:We(this.context.cwd,Se.of("fern.config.json")),rawConfig:{organization:t.organization,version:this.cliVersion},organization:t.organization,version:this.cliVersion};return await rOn({token:t.token,projectConfig:o,workspace:n,generatorGroup:i,version:t.version,keepDocker:t.keepContainer??!1,context:r,runner:t.containerEngine,absolutePathToPreview:void 0,inspect:!1,ai:void 0}),r.getResult()===Pp.Failure?{success:!1}:{success:!0,output:iOn({context:this.context,task:t.task,target:t.target,preview:t.preview,outputPath:t.outputPath})}}async runLocalGeneration({args:t,taskContext:r,fernWorkspace:n,generatorGroup:i,generatorInvocation:o}){let s=`${t.target.image}:${t.target.version}`,a=new pRe({containerImage:s,keepContainer:t.keepContainer??!1,runner:t.containerEngine});if(await new pDt(a).run({organization:t.organization,workspace:n,generatorGroup:i,context:r,outputVersionOverride:t.version,ai:t.ai,absolutePathToFernConfig:void 0,irVersionOverride:void 0,shouldGenerateDynamicSnippetTests:!1,skipUnstableDynamicSnippetTests:!0,inspect:!1}),t.target.output.path!=null&&o.absolutePathToLocalOutput!=null){let c=We(o.absolutePathToLocalOutput,Se.of(pqt));await(0,q1u.rm)(c,{force:!0})}return r.getResult()===Pp.Failure?{success:!1}:{success:!0,output:this.context.resolveTargetOutputs(t.target)}}};Vt();var xke=require("fs/promises"),G1u=require("os");var sOn=class{context;cliVersion;invocationAdapter;constructor(t){this.context=t.context,this.cliVersion=t.cliVersion,this.invocationAdapter=new bst({context:this.context})}async run(t){let r=new ih({context:this.context,task:t.task,logLevel:zn.Info});try{let n=await this.invocationAdapter.adapt(t.target),i={groupName:t.target.name,audiences:t.audiences??{type:"all"},generators:[n],reviewers:void 0},s=await new QEe({context:this.context,cliVersion:this.cliVersion,task:t.task}).adapt(t.apiDefinition),a=await this.getAbsolutePathToPreview(t);if(await YBt({projectConfig:this.getProjectConfig(t),organization:t.organization,workspace:s,context:r,generatorGroup:i,version:t.version,shouldLogS3Url:t.shouldLogS3Url??!1,token:t.token,mode:this.mapMode(t.target),fernignorePath:t.fernignorePath,absolutePathToPreview:a,whitelabel:void 0,dynamicIrOnly:!1,retryRateLimited:!1}),this.isLocalGitCombo(t)&&a!=null){let u=K1(n.name),c=We(a,Se.of(u)),l=n.absolutePathToLocalOutput;l!=null&&(await(0,xke.cp)(c,l,{recursive:!0}),await(0,xke.rm)(We(l,Se.of(".git")),{recursive:!0,force:!0})),await(0,xke.rm)(a,{recursive:!0,force:!0})}return r.getResult()===Pp.Failure?{success:!1}:{success:!0,output:iOn({context:this.context,task:t.task,target:t.target,preview:t.preview,outputPath:t.outputPath})}}catch(n){return r.getResult()===Pp.Failure?{success:!1}:{success:!1,error:n instanceof Error?n.message:String(n)}}}async getAbsolutePathToPreview(t){if(this.isLocalGitCombo(t)){let r=await(0,xke.mkdtemp)(We(Ut.of((0,G1u.tmpdir)()),Se.of("fern-preview-")));return Ut.of(r)}if(t.preview)return t.outputPath!=null?Yi(this.context.cwd,t.outputPath):We(this.context.cwd,Se.of(".fern/preview"))}getProjectConfig(t){return{_absolutePath:We(this.context.cwd,Se.of("fern.config.json")),rawConfig:{organization:t.organization,version:this.cliVersion},organization:t.organization,version:this.cliVersion}}mapMode(t){if(t.output.git!=null)return t.output.git.mode==="pr"?"pull-request":void 0}isLocalGitCombo(t){return t.target.output.path!=null&&t.target.output.git!=null&&!t.preview}};var aOn=class{context;cliVersion;constructor(t){this.context=t.context,this.cliVersion=t.cliVersion}async run(t){try{return this.isLocalGeneration(t)?await this.runLocalGeneration(t):await this.runRemoteGeneration(t)}catch(r){let n=r instanceof Error?r.message:String(r);return{success:!1,target:t.target,error:n}}}async runLocalGeneration(t){let n=await new oOn({context:this.context,cliVersion:this.cliVersion}).run({task:t.task,target:t.target,apiDefinition:t.apiDefinition,organization:t.organization,ai:t.ai,audiences:t.audiences,version:t.version,keepContainer:t.keepContainer,preview:t.preview,outputPath:t.outputPath,containerEngine:t.containerEngine,token:t.token});return n.success?{success:!0,target:t.target,output:n.output}:{success:!1,target:t.target,error:n.error}}async runRemoteGeneration(t){if(t.token==null)throw Kr.authRequired();let n=await new sOn({context:this.context,cliVersion:this.cliVersion}).run({target:t.target,apiDefinition:t.apiDefinition,organization:t.organization,token:t.token,task:t.task,ai:t.ai,audiences:t.audiences,version:t.version,shouldLogS3Url:t.shouldLogS3Url,preview:t.preview,outputPath:t.outputPath,fernignorePath:t.fernignorePath});return n.success?{success:!0,target:t.target,output:n.output}:{success:!1,target:t.target,error:n.error}}isLocalGeneration(t){return t.runtime==="local"||t.target.output.git!=null&&oE.isGitOutputSelfHosted(t.target.output.git)}};var uOn=class{id;taskGroup;stage;constructor({id:t,taskGroup:r}){this.id=t,this.taskGroup=r,this.stage={validation:new Fae({taskId:t,taskGroup:r,stageId:"validation"}),generator:new Fae({taskId:t,taskGroup:r,stageId:"generator"}),output:new Fae({taskId:t,taskGroup:r,stageId:"output"})}}getTask(){let t=this.taskGroup.getTask(this.id);if(t==null)throw new Error(`Internal error; task '${this.id}' does not exist`);return t}start(t){this.taskGroup.updateTask({id:this.id,update:{status:"running",currentStep:t}})}complete(t){this.taskGroup.updateTask({id:this.id,update:{status:"success",output:t}})}fail(t){this.taskGroup.updateTask({id:this.id,update:{status:"error",error:t}})}};var cOn=class{taskGroup;tasks={};defaultStages=[{id:"validation",labels:{pending:"Validate API",running:"Validating API...",success:"Validated API"}},{id:"generator",labels:{pending:"Run generator",running:"Running generator...",success:"Generator completed"}},{id:"output",labels:{pending:"Write output",running:"Writing output...",success:"Wrote output"}}];constructor({context:t}){this.tasks={},this.taskGroup=new Ant({context:t})}addTask({id:t,name:r,stageOverrides:n}){let i=r??t;this.taskGroup.addTask({id:t,name:i});let o=this.buildStages(n);this.taskGroup.setStages(t,o);let s=new uOn({taskGroup:this.taskGroup,id:t});return this.tasks[t]=s,s}getTask(t){return this.tasks[t]}async start(t){await this.taskGroup.start(t)}finish({successMessage:t,errorMessage:r}){return this.taskGroup.complete({successMessage:t,errorMessage:r})}buildStages(t){return t==null?this.defaultStages:this.defaultStages.map(r=>{let n=t[r.id];return n==null?r:{...r,labels:{...r.labels,...n}}})}};Vt();var lOn=class{context;constructor({context:t}){this.context=t}async build({org:t,lang:r,resolvedSpec:n,output:i,targetVersion:o}){let s=cIr({lang:r,version:o}),a=Se.of(ha(this.context.cwd,n.absoluteFilePath)),u=new uL({absoluteFilePath:n.absoluteFilePath,relativeFilePath:a,line:1,column:1}),c={name:r,api:sGe,image:s.image,lang:r,version:s.tag,sourceLocation:u,output:oE.resolveOutputObjectSchema(i)};return{apis:{[sGe]:{specs:[n.spec]}},cliVersion:"*",org:t,sdks:{org:t,targets:[c]}}}};var fDt=class{async handle(t,r){let n=await t.loadWorkspace();if(n==null)return this.handleWithFlags(t,r);if(!n.success)throw new W4(n.issues);return this.handleWithWorkspace(t,n.workspace,r)}async handleWithWorkspace(t,r,n){let i=r;if(n.api!=null){let a=await new oOt({context:t}).resolve({reference:n.api}),u={};for(let c of Object.keys(i.apis))u[c]={specs:[a.spec]};i={...i,apis:u}}n.org!=null&&(i={...i,org:n.org});let o=this.getTargets({workspace:i,args:n,groupName:n.target!=null?void 0:n.group??i.sdks?.defaultGroup});this.validateArgs({workspace:i,args:n,targets:o}),await this.runGeneration({context:t,workspace:i,targets:o,args:n,forceLocal:!1})}async handleWithFlags(t,r){let n=[];if(r.api==null&&n.push("--api <path|url> Path or URL to an API spec file (e.g. ./openapi.yaml)"),r.target==null&&n.push("--target <language> The SDK language to generate (e.g. typescript)"),r.org==null&&n.push("--org <name> Your organization name (e.g. acme)"),r.output==null&&n.push("--output <path|url> Output path or git URL (e.g. ./my-sdk)"),r.group!=null&&n.push("remove --group Groups are not supported without a fern.yml"),n.length>0)throw new Kr({message:`No fern.yml found, either run 'fern init' or specify all of the required flags:
3312
+ `),z!=null){await tOn.rm(q,{recursive:!0,force:!0}),await tOn.mkdir(q,{recursive:!0}),E.logger.debug(`Self-hosted GitHub mode: cloning ${z.uri} to ${q}`);try{let{execSync:H}=await import("child_process"),ge=H("which git 2>/dev/null || echo 'not found'",{encoding:"utf-8"}).trim(),me=H("git --version 2>/dev/null || echo 'unknown'",{encoding:"utf-8"}).trim();E.logger.debug(`Git environment: path=${ge}, version=${me}, PATH=${process.env.PATH??"unset"}`)}catch{E.logger.debug(`Git environment: unable to determine git info, PATH=${process.env.PATH??"unset"}`)}try{let H=await vVt({githubRepository:z.uri,installationToken:z.token,targetDirectory:q,timeoutMs:3e4}),ge=z.mode??"push";if((ge==="push"||ge==="pull-request")&&z.branch!=null){if(E.logger.debug(`Checking out branch ${z.branch} before generation`),ge==="pull-request"&&!await H.remoteBranchExists(z.branch)){let we=qO(z.uri);E.failAndThrow(`Branch ${z.branch} does not exist in repository ${we.owner}/${we.repo}`)}await H.checkoutRemoteBranch(z.branch)}}catch(H){E.failAndThrow(`Failed to clone GitHub repository ${z.uri}: ${H instanceof Error?H.message:String(H)}`)}}let Z;A.raw?.snippets?.path!=null&&(Z=Ut.of(We(r.absoluteFilePath,Se.of(A.raw.snippets.path)))),Z==null&&z!=null&&(Z=Ut.of((await ZBn()).path+"/snippet.json"));let oe=await ZBn(),{shouldCommit:V,autoVersioningCommitMessage:K,autoVersioningChangelogEntry:Ee,autoVersioningPrDescription:Ce,autoVersioningVersionBumpReason:J}=await Z_n({organization:t.organization,absolutePathToFernConfig:r.generatorsConfiguration?.absolutePathToConfiguration??t._absolutePath,workspace:b,generatorInvocation:A,absolutePathToLocalOutput:q,absolutePathToLocalSnippetJSON:Z,absolutePathToLocalSnippetTemplateJSON:void 0,version:i,audiences:n.audiences,workspaceTempDir:oe,keepDocker:o,context:E,irVersionOverride:A.irVersionOverride,outputVersionOverride:i,writeUnitTests:!0,generateOauthClients:_.ok?_?.body.oauthClientEnabled??!1:!1,generatePaginatedClients:_.ok?_?.body.paginationEnabled??!1:!1,includeOptionalRequestPropertyExamples:!1,inspect:s,executionEnvironment:void 0,ir:x,whiteLabel:_.ok?_.body.isWhitelabled:!1,runner:c,ai:l,autoVersioningCache:h,absolutePathToSpecRepo:An(r.absoluteFilePath)});if(E.logger.info(be.green("Wrote files to "+q)),z!=null&&V){let H={debug:we=>E.logger.debug(we),info:we=>E.logger.info(we),warn:we=>E.logger.warn(we),error:we=>E.logger.error(we)},me=await new eOn.PostGenerationPipeline({outputDir:q,replay:{enabled:p?.enabled===!0,skipApplication:d,stageOnly:!1},github:{enabled:!0,uri:z.uri,token:z.token,mode:z.mode??"push",branch:z.branch,commitMessage:K,changelogEntry:Ee,prDescription:Ce,versionBumpReason:J,previewMode:z.previewMode,generatorName:A.name},cliVersion:r.cliVersion??"unknown",generatorVersions:{[A.name]:A.version},generatorName:A.name},H).run();me.steps.replay!=null&&(0,eOn.logReplaySummary)(me.steps.replay,{debug:we=>E.logger.debug(we),info:we=>E.logger.info(be.cyan(we)),warn:we=>E.logger.warn(be.yellow(we)),error:we=>E.logger.error(be.red(we))}),me.success||E.failAndThrow(`Post-generation pipeline failed: ${me.errors?.join(", ")}`)}})))).some(A=>!A)&&a.failAndThrow()}function Rum(e,t){if(e==null)return;let n=(t.name.split("/").pop()??"sdk").replace(/[^a-zA-Z0-9-_]/g,"_");return e?We(e,Se.of(n)):void 0}async function ZBn(){return zco.default.dir({tmpdir:Uco.default.platform()==="darwin"?U1u.default.join("/private",Uco.default.tmpdir()):void 0,prefix:"fern"})}function Fum({generatorInvocation:e,org:t,version:r,packageName:n,context:i}){if(e.raw?.github!=null&&z1u(e.raw.github)){let[o,s]=e.raw.github.uri.split("/");if(o==null||s==null)return i.failAndThrow(`Invalid GitHub repository URI: ${e.raw.github.uri}. Expected format: owner/repo`);let a=e.raw.github.mode==="pull-request"?"pull-request":void 0;return qt.PublishingConfig.github({owner:o,repo:s,uri:e.raw.github.uri,token:e.raw.github.token,mode:a,branch:e.raw.github.branch,target:kum({outputSchema:e.raw.output,version:r,packageName:n})})}if(e.raw?.output?.location==="local-file-system"){let o;if(e.language==="python")o=D0.pypi({version:r,packageName:n}),i.logger.debug(`Created PyPiPublishTarget: version ${r} package name: ${n}`);else if(e.language==="rust")o=D0.crates({version:r,packageName:n}),i.logger.debug(`Created CratesPublishTarget: version ${r} package name: ${n}`);else if(e.language==="java"){let s=e.raw?.config,a=(()=>{if(!s||typeof s!="object"||s===null)return;let c=s;if(typeof c.group=="string"&&typeof c.artifact=="string")return{groupId:c.group,artifactId:c.artifact};if(typeof c["package-prefix"]=="string"&&n)return{groupId:c["package-prefix"],artifactId:n};typeof c["package-prefix"]=="string"&&!n&&i.logger.warn("Java generator has package-prefix configured but packageName is missing")})(),u=a?`${a.groupId}:${a.artifactId}`:void 0;if(u){let c=r??"0.0.0";o=D0.maven({coordinate:u,version:c,usernameEnvironmentVariable:"MAVEN_USERNAME",passwordEnvironmentVariable:"MAVEN_PASSWORD",mavenUrlEnvironmentVariable:"MAVEN_PUBLISH_REGISTRY_URL"}),i.logger.debug(`Created MavenPublishTarget: coordinate ${u} version ${c}`)}else s&&typeof s=="object"&&i.logger.debug("Java generator config provided but could not construct Maven coordinate. Expected either 'group' and 'artifact' or 'package-prefix' with packageName.")}return qt.PublishingConfig.filesystem({generateFullProject:t?.selfHostedSdKs??!1,publishTarget:o})}return e.outputMode._visit({downloadFiles:()=>qt.PublishingConfig.filesystem({generateFullProject:t?.selfHostedSdKs??!1,publishTarget:void 0}),github:()=>{},githubV2:()=>{},publish:()=>{},publishV2:()=>{},_other:()=>{}})}function kum({outputSchema:e,version:t,packageName:r}){let n=qt.PublishTarget.postman({apiKey:"",workspaceId:"",collectionId:void 0});if(e==null)return n;if(e.location==="npm"){let i=(e.token||"${NPM_TOKEN}").trim(),o=i==="<USE_OIDC>"||i==="OIDC";return D0.npm({packageName:e["package-name"],version:t??"0.0.0",tokenEnvironmentVariable:o?"<USE_OIDC>":i.startsWith("${")&&i.endsWith("}")?i.slice(2,-1).trim():""})}else return e.location==="maven"?D0.maven({version:t??"0.0.0",coordinate:e.coordinate,usernameEnvironmentVariable:e.username||"MAVEN_USERNAME",passwordEnvironmentVariable:e.password||"MAVEN_PASSWORD",mavenUrlEnvironmentVariable:e.url||"MAVEN_PUBLISH_REGISTRY_URL"}):e.location==="pypi"?D0.pypi({version:t,packageName:r}):n}function z1u(e){return e==null?!1:"uri"in e&&"token"in e}var Qum={defaultEndpoint:void 0,bannerLink:void 0,introduction:void 0,apiReferenceLink:void 0,apiName:void 0,disabledFeatures:void 0,whiteLabel:void 0,customSections:void 0,features:void 0,exampleStyle:void 0};function Num(e,t){if(e.raw?.github!=null&&z1u(e.raw.github))return{...e.raw.github,previewMode:t}}var pDt=class{executionEnvironment;constructor(t){this.executionEnvironment=t}async run({organization:t,absolutePathToFernConfig:r,workspace:n,generatorGroup:i,context:o,irVersionOverride:s,outputVersionOverride:a,shouldGenerateDynamicSnippetTests:u,skipUnstableDynamicSnippetTests:c,inspect:l}){let p=await Promise.all(i.generators.map(async d=>o.runInteractiveTask({name:d.name},async f=>{if(d.absolutePathToLocalOutput==null){f.failWithoutThrowing("Cannot generate because output location is not local-file-system");return}try{let{ir:m,generatorConfig:h}=await this.executeGenerator({generatorGroup:i,generatorInvocation:d,context:f,workspace:n,organization:t,irVersionOverride:s,outputVersionOverride:a,absolutePathToFernConfig:r,inspect:l});f.logger.info(be.green("Wrote files to "+d.absolutePathToLocalOutput)),u&&d.language!=null?(f.logger.info(`Generating dynamic snippet tests for ${d.language}...`),await Dgu({context:f,ir:m,config:h,language:d.language,outputDir:d.absolutePathToLocalOutput,skipUnstable:c})):f.logger.info(`Skipping dynamic snippet tests; shouldGenerateDynamicSnippetTests: ${u}, language: ${d.language}`)}catch(m){m instanceof pm||(m instanceof m8?f.failWithoutThrowing(`Generation failed: ${m.log}`,m):f.failWithoutThrowing(`Generation failed: ${m instanceof Error?m.message:"Unknown error"}`,m))}})))}async executeGenerator({generatorGroup:t,generatorInvocation:r,context:n,workspace:i,organization:o,irVersionOverride:s,outputVersionOverride:a,absolutePathToFernConfig:u,inspect:c}){if(n.logger.info(`Starting generation for ${r.name}`),r.absolutePathToLocalOutput==null)throw new Error("Output path is required for generation");let l=Zm({workspace:i,audiences:t.audiences,generationLanguage:r.language,keywords:r.keywords,smartCasing:r.smartCasing,exampleGeneration:{includeOptionalRequestPropertyExamples:!0,disabled:r.disableExamples},readme:r.readme,version:a,packageName:bn.getPackageName({generatorInvocation:r}),context:n,sourceResolver:new tm(n,i),generationMetadata:{cliVersion:i.cliVersion,generatorName:r.name,generatorVersion:r.version,generatorConfig:r.config,originGitCommit:k9()}}),p=await ZBn();return Z_n({organization:o,absolutePathToFernConfig:u,workspace:i,generatorInvocation:r,absolutePathToLocalOutput:r.absolutePathToLocalOutput,absolutePathToLocalSnippetJSON:r.absolutePathToLocalOutput?Ut.of(We(r.absolutePathToLocalOutput,Se.of(pqt))):void 0,absolutePathToLocalSnippetTemplateJSON:void 0,audiences:t.audiences,workspaceTempDir:p,version:a,keepDocker:!1,context:n,irVersionOverride:s,outputVersionOverride:a,writeUnitTests:!0,generateOauthClients:!0,generatePaginatedClients:!0,includeOptionalRequestPropertyExamples:!0,inspect:c,executionEnvironment:this.executionEnvironment,ir:l,runner:void 0,ai:i.generatorsConfiguration?.ai,absolutePathToSpecRepo:void 0})}};var q1u=require("fs/promises");Rt();Vt();zre();var HA=_e(foe(),1),V1u=require("fs/promises"),bst=class{context;constructor(t){this.context=t.context}async adapt(t){return{raw:this.buildRaw(t),name:t.image,version:t.version,config:t.config,language:this.mapLanguage(t.lang),outputMode:await this.buildOutputMode(t),absolutePathToLocalOutput:this.context.resolveOutputFilePath(t.output.path),smartCasing:t.smartCasing??!0,readme:this.buildReadme(t),absolutePathToLocalSnippets:void 0,disableExamples:!1,irVersionOverride:void 0,keywords:void 0,publishMetadata:void 0,settings:void 0}}buildRaw(t){let r=t.output.git;if(!(r==null||!oE.isGitOutputSelfHosted(r)))return{name:t.image,version:t.version,github:{uri:r.uri,token:r.token,mode:this.mapSelfHostedMode(r.mode),branch:r.branch}}}mapSelfHostedMode(t){if(t==null)return bn.GithubSelfhostedMode.PullRequest;switch(t){case"pr":return bn.GithubSelfhostedMode.PullRequest;case"push":return bn.GithubSelfhostedMode.Push;default:xe(t)}}async buildOutputMode(t){if(t.output.git!=null){let r=t.output.git;return oE.isGitOutputSelfHosted(r)?await this.buildGitSelfHostedOutputMode({target:t,git:r}):await this.buildGitHubRepositoryOutputMode({target:t,git:r})}return HA.FernFiddle.remoteGen.OutputMode.downloadFiles({})}async buildGitHubRepositoryOutputMode({target:t,git:r}){let n=qO(r.repository),i=r.license!=null?await this.convertLicense(r.license):void 0,o=t.publish!=null?this.buildPublishInfo(t.publish):void 0,s=this.buildReviewers(r.reviewers),a=r.mode??"pr";switch(a){case"pr":return HA.FernFiddle.remoteGen.OutputMode.githubV2(HA.FernFiddle.GithubOutputModeV2.pullRequest({owner:n.owner,repo:n.repo,license:i,publishInfo:o,reviewers:s,downloadSnippets:void 0}));case"release":return HA.FernFiddle.remoteGen.OutputMode.githubV2(HA.FernFiddle.GithubOutputModeV2.commitAndRelease({owner:n.owner,repo:n.repo,license:i,publishInfo:o,downloadSnippets:void 0}));case"push":return HA.FernFiddle.remoteGen.OutputMode.githubV2(HA.FernFiddle.GithubOutputModeV2.push({owner:n.owner,repo:n.repo,branch:r.branch,license:i,publishInfo:o,downloadSnippets:void 0}));default:xe(a)}}async buildGitSelfHostedOutputMode({target:t,git:r}){let n=qO(r.uri),i=r.license!=null?await this.convertLicense(r.license):void 0,o=t.publish!=null?this.buildPublishInfo(t.publish):void 0,s=r.mode??"pr";switch(s){case"pr":return HA.FernFiddle.remoteGen.OutputMode.githubV2(HA.FernFiddle.GithubOutputModeV2.pullRequest({owner:n.owner,repo:n.repo,branch:r.branch,license:i,publishInfo:o}));case"push":return HA.FernFiddle.remoteGen.OutputMode.githubV2(HA.FernFiddle.GithubOutputModeV2.push({owner:n.owner,repo:n.repo,branch:r.branch,license:i,publishInfo:o}));default:xe(s)}}buildPublishInfo(t){if(t.npm!=null)return this.buildNpmPublishInfo(t.npm);if(t.pypi!=null)return this.buildPypiPublishInfo(t.pypi);if(t.maven!=null)return this.buildMavenPublishInfo(t.maven);if(t.nuget!=null)return this.buildNugetPublishInfo(t.nuget);if(t.rubygems!=null)return this.buildRubygemsPublishInfo(t.rubygems);if(t.crates!=null)return this.buildCratesPublishInfo(t.crates)}buildNpmPublishInfo(t){return HA.FernFiddle.GithubPublishInfo.npm({registryUrl:t.url??"https://registry.npmjs.org",packageName:t.packageName,token:t.token})}buildPypiPublishInfo(t){return HA.FernFiddle.GithubPublishInfo.pypi({registryUrl:t.url??"https://upload.pypi.org/legacy/",packageName:t.packageName,credentials:t.token!=null?{username:"__token__",password:t.token}:t.username!=null&&t.password!=null?{username:t.username,password:t.password}:void 0,pypiMetadata:t.metadata!=null?{keywords:t.metadata.keywords,documentationLink:t.metadata.documentationLink,homepageLink:t.metadata.homepageLink}:void 0})}buildMavenPublishInfo(t){return HA.FernFiddle.GithubPublishInfo.maven({registryUrl:t.url??"https://s01.oss.sonatype.org/content/repositories/releases/",coordinate:t.coordinate,credentials:t.username!=null&&t.password!=null?{username:t.username,password:t.password}:void 0,signature:t.signature!=null?{keyId:t.signature.keyId,password:t.signature.password,secretKey:t.signature.secretKey}:void 0})}buildNugetPublishInfo(t){return HA.FernFiddle.GithubPublishInfo.nuget({registryUrl:t.url??"https://nuget.org/",packageName:t.packageName,apiKey:t.apiKey})}buildRubygemsPublishInfo(t){return HA.FernFiddle.GithubPublishInfo.rubygems({registryUrl:t.url??"https://rubygems.org/",packageName:t.packageName,apiKey:t.apiKey})}buildCratesPublishInfo(t){return HA.FernFiddle.GithubPublishInfo.crates({registryUrl:t.url??"https://crates.io/api/v1/crates",packageName:t.packageName,token:t.token})}buildReviewers(t){if(t==null)return;let r=[];if(t.teams!=null)for(let n of t.teams)r.push(HA.FernFiddle.GithubPullRequestReviewer.team({name:n}));if(t.users!=null)for(let n of t.users)r.push(HA.FernFiddle.GithubPullRequestReviewer.user({name:n}));return r.length>0?r:void 0}async convertLicense(t){if(t==="MIT")return HA.FernFiddle.GithubLicense.basic({id:HA.FernFiddle.GithubLicenseId.Mit});if(t==="Apache-2.0")return HA.FernFiddle.GithubLicense.basic({id:HA.FernFiddle.GithubLicenseId.Apache});let r=We(this.context.cwd,Se.of(t));if(!await Xt(r,"file"))throw new Error(`Custom license file "${r}" does not exist; did you mean to use either MIT or Apache-2.0?`);let n=await(0,V1u.readFile)(r,"utf-8");return HA.FernFiddle.GithubLicense.custom({contents:n})}buildReadme(t){let r=t.readme;if(r==null)return;let n={};return r.bannerLink!=null&&(n.bannerLink=r.bannerLink),r.introduction!=null&&(n.introduction=r.introduction),r.apiReferenceLink!=null&&(n.apiReferenceLink=r.apiReferenceLink),r.apiName!=null&&(n.apiName=r.apiName),r.disabledSections!=null&&(n.disabledSections=r.disabledSections),r.defaultEndpoint!=null&&(n.defaultEndpoint=r.defaultEndpoint),r.features!=null&&(n.features=r.features),r.customSections!=null&&(n.customSections=r.customSections.map(i=>({title:i.title,language:i.language??t.lang,content:i.content}))),r.exampleStyle!=null&&(n.exampleStyle=r.exampleStyle),n}mapLanguage(t){return{typescript:bn.GenerationLanguage.TYPESCRIPT,python:bn.GenerationLanguage.PYTHON,java:bn.GenerationLanguage.JAVA,go:bn.GenerationLanguage.GO,ruby:bn.GenerationLanguage.RUBY,csharp:bn.GenerationLanguage.CSHARP,swift:bn.GenerationLanguage.SWIFT,php:bn.GenerationLanguage.PHP,rust:bn.GenerationLanguage.RUST}[t.toLowerCase()]}};Vt();var nOn=require("path");function iOn({context:e,task:t,target:r,preview:n,outputPath:i}){if(n)return[(i!=null?(0,nOn.resolve)(e.cwd,i):(0,nOn.join)(e.cwd,Se.of(".fern/preview"))).toString()];let o=jum(t);if(o!=null){if(o.pullRequestUrl!=null)return[o.pullRequestUrl];if(o.releaseUrl!=null)return[o.releaseUrl];if(o.branchUrl!=null)return[o.branchUrl]}return e.resolveTargetOutputs(r)}function jum(e){let t={};for(let r of e.logs??[]){let n=r.message.match(/Created pull request: (.+)/);n!=null&&(t.pullRequestUrl=n[1]);let i=r.message.match(/Created commit (\w+)/);i!=null&&(t.commitHash=i[1]);let o=r.message.match(/Pushed branch: (.+)/);o!=null&&(t.branchUrl=o[1]);let s=r.message.match(/Release tagged\. View here: (.+)/);s!=null&&(t.releaseUrl=s[1])}return Object.keys(t).length>0?t:void 0}var oOn=class{context;cliVersion;invocationAdapter;constructor(t){this.context=t.context,this.cliVersion=t.cliVersion,this.invocationAdapter=new bst({context:this.context})}async run(t){let r=new ih({context:this.context,task:t.task,logLevel:zn.Info});try{let n=await this.invocationAdapter.adapt(t.target),i={groupName:t.target.name,audiences:t.audiences??{type:"all"},generators:[n],reviewers:void 0},s=await new QEe({context:this.context,cliVersion:this.cliVersion,task:t.task}).adapt(t.apiDefinition);return t.target.output.git!=null&&oE.isGitOutputSelfHosted(t.target.output.git)?await this.runSelfHostedGeneration({args:t,taskContext:r,fernWorkspace:s,generatorGroup:i}):await this.runLocalGeneration({args:t,taskContext:r,fernWorkspace:s,generatorGroup:i,generatorInvocation:n})}catch(n){return r.getResult()===Pp.Failure?{success:!1}:{success:!1,error:n instanceof Error?n.message:String(n)}}}async runSelfHostedGeneration({args:t,taskContext:r,fernWorkspace:n,generatorGroup:i}){let o={_absolutePath:We(this.context.cwd,Se.of("fern.config.json")),rawConfig:{organization:t.organization,version:this.cliVersion},organization:t.organization,version:this.cliVersion};return await rOn({token:t.token,projectConfig:o,workspace:n,generatorGroup:i,version:t.version,keepDocker:t.keepContainer??!1,context:r,runner:t.containerEngine,absolutePathToPreview:void 0,inspect:!1,ai:void 0}),r.getResult()===Pp.Failure?{success:!1}:{success:!0,output:iOn({context:this.context,task:t.task,target:t.target,preview:t.preview,outputPath:t.outputPath})}}async runLocalGeneration({args:t,taskContext:r,fernWorkspace:n,generatorGroup:i,generatorInvocation:o}){let s=`${t.target.image}:${t.target.version}`,a=new pRe({containerImage:s,keepContainer:t.keepContainer??!1,runner:t.containerEngine});if(await new pDt(a).run({organization:t.organization,workspace:n,generatorGroup:i,context:r,outputVersionOverride:t.version,ai:t.ai,absolutePathToFernConfig:void 0,irVersionOverride:void 0,shouldGenerateDynamicSnippetTests:!1,skipUnstableDynamicSnippetTests:!0,inspect:!1}),t.target.output.path!=null&&o.absolutePathToLocalOutput!=null){let c=We(o.absolutePathToLocalOutput,Se.of(pqt));await(0,q1u.rm)(c,{force:!0})}return r.getResult()===Pp.Failure?{success:!1}:{success:!0,output:this.context.resolveTargetOutputs(t.target)}}};Vt();var xke=require("fs/promises"),G1u=require("os");var sOn=class{context;cliVersion;invocationAdapter;constructor(t){this.context=t.context,this.cliVersion=t.cliVersion,this.invocationAdapter=new bst({context:this.context})}async run(t){let r=new ih({context:this.context,task:t.task,logLevel:zn.Info});try{let n=await this.invocationAdapter.adapt(t.target),i={groupName:t.target.name,audiences:t.audiences??{type:"all"},generators:[n],reviewers:void 0},s=await new QEe({context:this.context,cliVersion:this.cliVersion,task:t.task}).adapt(t.apiDefinition),a=await this.getAbsolutePathToPreview(t);if(await YBt({projectConfig:this.getProjectConfig(t),organization:t.organization,workspace:s,context:r,generatorGroup:i,version:t.version,shouldLogS3Url:t.shouldLogS3Url??!1,token:t.token,mode:this.mapMode(t.target),fernignorePath:t.fernignorePath,absolutePathToPreview:a,whitelabel:void 0,dynamicIrOnly:!1,retryRateLimited:!1}),this.isLocalGitCombo(t)&&a!=null){let u=K1(n.name),c=We(a,Se.of(u)),l=n.absolutePathToLocalOutput;l!=null&&(await(0,xke.cp)(c,l,{recursive:!0}),await(0,xke.rm)(We(l,Se.of(".git")),{recursive:!0,force:!0})),await(0,xke.rm)(a,{recursive:!0,force:!0})}return r.getResult()===Pp.Failure?{success:!1}:{success:!0,output:iOn({context:this.context,task:t.task,target:t.target,preview:t.preview,outputPath:t.outputPath})}}catch(n){return r.getResult()===Pp.Failure?{success:!1}:{success:!1,error:n instanceof Error?n.message:String(n)}}}async getAbsolutePathToPreview(t){if(this.isLocalGitCombo(t)){let r=await(0,xke.mkdtemp)(We(Ut.of((0,G1u.tmpdir)()),Se.of("fern-preview-")));return Ut.of(r)}if(t.preview)return t.outputPath!=null?Yi(this.context.cwd,t.outputPath):We(this.context.cwd,Se.of(".fern/preview"))}getProjectConfig(t){return{_absolutePath:We(this.context.cwd,Se.of("fern.config.json")),rawConfig:{organization:t.organization,version:this.cliVersion},organization:t.organization,version:this.cliVersion}}mapMode(t){if(t.output.git!=null)return t.output.git.mode==="pr"?"pull-request":void 0}isLocalGitCombo(t){return t.target.output.path!=null&&t.target.output.git!=null&&!t.preview}};var aOn=class{context;cliVersion;constructor(t){this.context=t.context,this.cliVersion=t.cliVersion}async run(t){try{return this.isLocalGeneration(t)?await this.runLocalGeneration(t):await this.runRemoteGeneration(t)}catch(r){let n=r instanceof Error?r.message:String(r);return{success:!1,target:t.target,error:n}}}async runLocalGeneration(t){let n=await new oOn({context:this.context,cliVersion:this.cliVersion}).run({task:t.task,target:t.target,apiDefinition:t.apiDefinition,organization:t.organization,ai:t.ai,audiences:t.audiences,version:t.version,keepContainer:t.keepContainer,preview:t.preview,outputPath:t.outputPath,containerEngine:t.containerEngine,token:t.token});return n.success?{success:!0,target:t.target,output:n.output}:{success:!1,target:t.target,error:n.error}}async runRemoteGeneration(t){if(t.token==null)throw Kr.authRequired();let n=await new sOn({context:this.context,cliVersion:this.cliVersion}).run({target:t.target,apiDefinition:t.apiDefinition,organization:t.organization,token:t.token,task:t.task,ai:t.ai,audiences:t.audiences,version:t.version,shouldLogS3Url:t.shouldLogS3Url,preview:t.preview,outputPath:t.outputPath,fernignorePath:t.fernignorePath});return n.success?{success:!0,target:t.target,output:n.output}:{success:!1,target:t.target,error:n.error}}isLocalGeneration(t){return t.runtime==="local"||t.target.output.git!=null&&oE.isGitOutputSelfHosted(t.target.output.git)}};var uOn=class{id;taskGroup;stage;constructor({id:t,taskGroup:r}){this.id=t,this.taskGroup=r,this.stage={validation:new Fae({taskId:t,taskGroup:r,stageId:"validation"}),generator:new Fae({taskId:t,taskGroup:r,stageId:"generator"}),output:new Fae({taskId:t,taskGroup:r,stageId:"output"})}}getTask(){let t=this.taskGroup.getTask(this.id);if(t==null)throw new Error(`Internal error; task '${this.id}' does not exist`);return t}start(t){this.taskGroup.updateTask({id:this.id,update:{status:"running",currentStep:t}})}complete(t){this.taskGroup.updateTask({id:this.id,update:{status:"success",output:t}})}fail(t){this.taskGroup.updateTask({id:this.id,update:{status:"error",error:t}})}};var cOn=class{taskGroup;tasks={};defaultStages=[{id:"validation",labels:{pending:"Validate API",running:"Validating API...",success:"Validated API"}},{id:"generator",labels:{pending:"Run generator",running:"Running generator...",success:"Generator completed"}},{id:"output",labels:{pending:"Write output",running:"Writing output...",success:"Wrote output"}}];constructor({context:t}){this.tasks={},this.taskGroup=new Ant({context:t})}addTask({id:t,name:r,stageOverrides:n}){let i=r??t;this.taskGroup.addTask({id:t,name:i});let o=this.buildStages(n);this.taskGroup.setStages(t,o);let s=new uOn({taskGroup:this.taskGroup,id:t});return this.tasks[t]=s,s}getTask(t){return this.tasks[t]}async start(t){await this.taskGroup.start(t)}finish({successMessage:t,errorMessage:r}){return this.taskGroup.complete({successMessage:t,errorMessage:r})}buildStages(t){return t==null?this.defaultStages:this.defaultStages.map(r=>{let n=t[r.id];return n==null?r:{...r,labels:{...r.labels,...n}}})}};Vt();var lOn=class{context;constructor({context:t}){this.context=t}async build({org:t,lang:r,resolvedSpec:n,output:i,targetVersion:o}){let s=cIr({lang:r,version:o}),a=Se.of(ha(this.context.cwd,n.absoluteFilePath)),u=new uL({absoluteFilePath:n.absoluteFilePath,relativeFilePath:a,line:1,column:1}),c={name:r,api:sGe,image:s.image,lang:r,version:s.tag,sourceLocation:u,output:oE.resolveOutputObjectSchema(i)};return{apis:{[sGe]:{specs:[n.spec]}},cliVersion:"*",org:t,sdks:{org:t,targets:[c]}}}};var fDt=class{async handle(t,r){let n=await t.loadWorkspace();if(n==null)return this.handleWithFlags(t,r);if(!n.success)throw new W4(n.issues);return this.handleWithWorkspace(t,n.workspace,r)}async handleWithWorkspace(t,r,n){let i=r;if(n.api!=null){let a=await new oOt({context:t}).resolve({reference:n.api}),u={};for(let c of Object.keys(i.apis))u[c]={specs:[a.spec]};i={...i,apis:u}}n.org!=null&&(i={...i,org:n.org});let o=this.getTargets({workspace:i,args:n,groupName:n.target!=null?void 0:n.group??i.sdks?.defaultGroup});this.validateArgs({workspace:i,args:n,targets:o}),await this.runGeneration({context:t,workspace:i,targets:o,args:n,forceLocal:!1})}async handleWithFlags(t,r){let n=[];if(r.api==null&&n.push("--api <path|url> Path or URL to an API spec file (e.g. ./openapi.yaml)"),r.target==null&&n.push("--target <language> The SDK language to generate (e.g. typescript)"),r.org==null&&n.push("--org <name> Your organization name (e.g. acme)"),r.output==null&&n.push("--output <path|url> Output path or git URL (e.g. ./my-sdk)"),r.group!=null&&n.push("remove --group Groups are not supported without a fern.yml"),n.length>0)throw new Kr({message:`No fern.yml found, either run 'fern init' or specify all of the required flags:
3313
3313
 
3314
3314
  `+n.map(f=>` ${f}`).join(`
3315
3315
  `)});let i=r.api,o=r.target,s=r.org,a=r.output,c=await new oOt({context:t}).resolve({reference:i}),p=await new lOn({context:t}).build({org:s,lang:this.resolveLanguage(o),resolvedSpec:c,output:this.parseTargetOutput({...r,output:a}),targetVersion:r["target-version"]}),d=p.sdks?.targets??[];await this.runGeneration({context:t,workspace:p,targets:d,args:r,forceLocal:!0})}async runGeneration({context:t,workspace:r,targets:n,args:i,forceLocal:o}){if(r.sdks==null)throw new Error("No SDKs configured");let s=[...new Set(n.map(A=>A.api))],u=await new UH({context:t,cliVersion:r.cliVersion}).check({workspace:r,apiNames:s});if(u.violations.length>0)for(let A of u.violations)process.stderr.write(`${be.red(`${A.displayRelativeFilepath}:${A.line}:${A.column}: ${A.message}`)}
@@ -3596,7 +3596,7 @@ For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides
3596
3596
  Run ${be.cyan("fern generator upgrade")} to upgrade your generators.`),i.length>2&&(r+=`
3597
3597
  Run ${be.cyan("fern generator upgrade --list")} to see the full list of generator upgrades available.`),W9e(r,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"})}async function zbo({generatorUpgradeInfo:e,header:t,limit:r,includeBoxen:n=!0}){if(!R3u(e))return;let i=t??"",o=e.filter(a=>a.isUpgradeAvailable);r!=null&&(o=o.slice(0,r+1));let s=o.sort((a,u)=>a.generatorName.localeCompare(u.generatorName)||a.currentVersion.localeCompare(u.currentVersion));for(let a of s)i+=`
3598
3598
  ${await oOm(a.generatorName)} (${a.apiName!=null?"API: "+a.apiName+", ":""}Group: ${a.generatorGroup}) `+be.dim(a.currentVersion)+be.reset(" \u2192 ")+be.green(a.latestVersion);return i+=`
3599
- `,n?W9e(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function oOm(e){let r=await new D3u.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new Error(`Generator ${e} not found`);return r.body.displayName}async function sOm({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await k3u({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(u,c,l,p)=>{a.versions[c]==null&&(a.versions[c]={});let d=lBe(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await jS({generatorName:d,cliVersion:e.environment.packageVersion,currentGeneratorVersion:l.version,channel:i,includeMajor:o,context:p});f!=null&&(a.versions[c][l.name]={previousVersion:l.version,latestVersion:f})},generatorFilter:r,groupFilter:n}),a}let s={type:"multiApi",versions:{}};return await k3u({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(a,u,c,l)=>{if(a==null)return;s.versions[a]==null&&(s.versions[a]={}),s.versions[a][u]==null&&(s.versions[a][u]={});let p=lBe(c.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${c.name}`);return}let d=await jS({generatorName:p,cliVersion:e.environment.packageVersion,currentGeneratorVersion:c.version,channel:i,includeMajor:o,context:l});d!=null&&(s.versions[a][u][c.name]={previousVersion:c.version,latestVersion:d})},generatorFilter:r,groupFilter:n}),s}async function k3u({cliContext:e,apiWorkspaces:t,perGeneratorAction:r,generatorFilter:n,groupFilter:i}){await Promise.all(t.map(async o=>{await e.runTaskForWorkspace(o,async s=>{let a=await bQ({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let u=n!=null?sC(n):void 0;for(let c of a.groups)if(!(i!=null&&c.groupName!==i))for(let l of c.generators)u!=null&&l.name!==u||await r(o.workspaceName,c.groupName,l,s)})}))}function Q3u(e,t,r){let n=[];for(let[i,o]of Object.entries(e))for(let[s,a]of Object.entries(o)){r.debug(`Checking if ${s} in group ${i} has an upgrade available...`);let u=XR(a.latestVersion,a.previousVersion);r.debug(`Latest version: ${a.latestVersion}. `+(u?"Upgrade available.":"No upgrade available.")),n.push({generatorName:s,generatorGroup:i,apiName:t,isUpgradeAvailable:u,currentVersion:a.previousVersion,latestVersion:a.latestVersion})}return n}async function o2n({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await sOm({cliContext:t,project:e,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o});if(a.type==="multiApi")for(let[u,c]of Object.entries(a.versions))s.push(...Q3u(c,u,t.logger));else s.push(...Q3u(a.versions,void 0,t.logger))}return s}async function oce({cliEnvironment:e,includePreReleases:t=!1}){return e.packageName!=="fern-api"?e.packageVersion:Sdt(e.packageName,{version:t?"prerelease":"latest"})}var N3u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],s2n=class{environment;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=zn.Info;isLocal;stdoutRedirector=new i2n;jsonMode=!1;constructor(t,r,{isLocal:n}){this.ttyAwareLogger=new pOe(t,r),this.isLocal=n??!1;let i=this.getPackageName(),o=this.getPackageVersion(),s=this.getCliName();(i==null||o==null||s==null)&&this.exitProgram(),this.environment={packageName:i,packageVersion:o,cliName:s}}getPackageName(){return"fern-api"}getPackageVersion(){return"4.32.1"}getCliName(){return"fern"}setLogLevel(t){this.logLevel=t}logFernVersionDebug(){this.logger.debug(`Running ${be.bold(`${this.environment.cliName}`)} (${this.environment.packageName}@${this.environment.packageVersion})`)}failAndThrow(t,r){throw this.failWithoutThrowing(t,r),new pm}failWithoutThrowing(t,r){this.didSucceed=!1,gEt({message:t,error:r,logger:this.logger})}enableJsonMode(){this.jsonMode||(this.jsonMode=!0,this.stdoutRedirector.redirect())}get isJsonMode(){return this.jsonMode}writeJsonToStdout(t){this.stdoutRedirector.restore(),process.stdout.write(JSON.stringify(t,null,2)+`
3599
+ `,n?W9e(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function oOm(e){let r=await new D3u.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new Error(`Generator ${e} not found`);return r.body.displayName}async function sOm({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await k3u({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(u,c,l,p)=>{a.versions[c]==null&&(a.versions[c]={});let d=lBe(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await jS({generatorName:d,cliVersion:e.environment.packageVersion,currentGeneratorVersion:l.version,channel:i,includeMajor:o,context:p});f!=null&&(a.versions[c][l.name]={previousVersion:l.version,latestVersion:f})},generatorFilter:r,groupFilter:n}),a}let s={type:"multiApi",versions:{}};return await k3u({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(a,u,c,l)=>{if(a==null)return;s.versions[a]==null&&(s.versions[a]={}),s.versions[a][u]==null&&(s.versions[a][u]={});let p=lBe(c.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${c.name}`);return}let d=await jS({generatorName:p,cliVersion:e.environment.packageVersion,currentGeneratorVersion:c.version,channel:i,includeMajor:o,context:l});d!=null&&(s.versions[a][u][c.name]={previousVersion:c.version,latestVersion:d})},generatorFilter:r,groupFilter:n}),s}async function k3u({cliContext:e,apiWorkspaces:t,perGeneratorAction:r,generatorFilter:n,groupFilter:i}){await Promise.all(t.map(async o=>{await e.runTaskForWorkspace(o,async s=>{let a=await bQ({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let u=n!=null?sC(n):void 0;for(let c of a.groups)if(!(i!=null&&c.groupName!==i))for(let l of c.generators)u!=null&&l.name!==u||await r(o.workspaceName,c.groupName,l,s)})}))}function Q3u(e,t,r){let n=[];for(let[i,o]of Object.entries(e))for(let[s,a]of Object.entries(o)){r.debug(`Checking if ${s} in group ${i} has an upgrade available...`);let u=XR(a.latestVersion,a.previousVersion);r.debug(`Latest version: ${a.latestVersion}. `+(u?"Upgrade available.":"No upgrade available.")),n.push({generatorName:s,generatorGroup:i,apiName:t,isUpgradeAvailable:u,currentVersion:a.previousVersion,latestVersion:a.latestVersion})}return n}async function o2n({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await sOm({cliContext:t,project:e,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o});if(a.type==="multiApi")for(let[u,c]of Object.entries(a.versions))s.push(...Q3u(c,u,t.logger));else s.push(...Q3u(a.versions,void 0,t.logger))}return s}async function oce({cliEnvironment:e,includePreReleases:t=!1}){return e.packageName!=="fern-api"?e.packageVersion:Sdt(e.packageName,{version:t?"prerelease":"latest"})}var N3u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],s2n=class{environment;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=zn.Info;isLocal;stdoutRedirector=new i2n;jsonMode=!1;constructor(t,r,{isLocal:n}){this.ttyAwareLogger=new pOe(t,r),this.isLocal=n??!1;let i=this.getPackageName(),o=this.getPackageVersion(),s=this.getCliName();(i==null||o==null||s==null)&&this.exitProgram(),this.environment={packageName:i,packageVersion:o,cliName:s}}getPackageName(){return"fern-api"}getPackageVersion(){return"4.32.2"}getCliName(){return"fern"}setLogLevel(t){this.logLevel=t}logFernVersionDebug(){this.logger.debug(`Running ${be.bold(`${this.environment.cliName}`)} (${this.environment.packageName}@${this.environment.packageVersion})`)}failAndThrow(t,r){throw this.failWithoutThrowing(t,r),new pm}failWithoutThrowing(t,r){this.didSucceed=!1,gEt({message:t,error:r,logger:this.logger})}enableJsonMode(){this.jsonMode||(this.jsonMode=!0,this.stdoutRedirector.redirect())}get isJsonMode(){return this.jsonMode}writeJsonToStdout(t){this.stdoutRedirector.restore(),process.stdout.write(JSON.stringify(t,null,2)+`
3600
3600
  `),this.jsonMode&&this.stdoutRedirector.redirect()}async exit({code:t}={}){!this._suppressUpgradeMessage&&!this.isLocal&&await this.nudgeUpgradeIfAvailable(),this.ttyAwareLogger.finish(),await(await G9e()).flush(),this.exitProgram({code:t})}async nudgeUpgradeIfAvailable(){try{let t=await Promise.race([this.isUpgradeAvailable(),new Promise((n,i)=>setTimeout(()=>i("Request timed out"),300))]),r=await F3u({cliEnvironment:this.environment,upgradeInfo:t});r!=null&&(r.endsWith(`
3601
3601
  `)||(r+=`
3602
3602
  `),this.stderr.info(r))}catch{}}async exitIfFailed(){this.didSucceed||await this.exit()}exitProgram({code:t}={}){process.exit(t??(this.didSucceed?0:1))}longestWorkspaceName;registerWorkspaces(t){let r=jLn(t.map(n=>n.type==="docs"?"docs":n.workspaceName??"api"),n=>n.length);r!=null&&(this.longestWorkspaceName=r)}project;registerProject(t){this.project=t}runTask(t){return this.runTaskWithInit(this.constructTaskInit(),t)}addTask(){return this.addTaskWithInit(this.constructTaskInit())}async runTaskForWorkspace(t,r){await this.runTaskWithInit(this.constructTaskInitForWorkspace(t),r)}addTaskWithInit(t){let r=new qFt(t);return this.ttyAwareLogger.registerTask(r),r}USE_NODE_18_OR_ABOVE_MESSAGE="The Fern CLI requires Node 18+ or above.";async runTaskWithInit(t,r){let n=this.addTaskWithInit(t).start(),i;try{i=await r(n)}catch(o){throw o.message.includes("globalThis")?(n.logger.error(this.USE_NODE_18_OR_ABOVE_MESSAGE),n.failWithoutThrowing()):n.failWithoutThrowing(void 0,o),new pm}finally{n.finish()}return i}async instrumentPostHogEvent(t){this.isLocal||(await G9e()).sendEvent(t)}logger=aP((t,...r)=>this.log(t,...r));stderr=aP((t,...r)=>this.logStderr(t,...r));constructTaskInitForWorkspace(t){let r=j3u(t.type==="docs"?"docs":t.workspaceName??"api"),n=1+(this.longestWorkspaceName!=null?j3u(this.longestWorkspaceName):r).length,i=r.padEnd(n),o=N3u[this.numTasks++%N3u.length],s=be.hex(o)(i);return{...this.constructTaskInit(),logPrefix:s}}constructTaskInit(){return{logImmediately:t=>this.logImmediately(t),takeOverTerminal:t=>this.ttyAwareLogger.takeOverTerminal(t),onResult:t=>{t===Pp.Failure&&(this.didSucceed=!1)},instrumentPostHogEvent:async t=>{await this.instrumentPostHogEvent(t)},shouldBufferLogs:!1}}log(t,...r){this.logImmediately([{parts:r,level:t,time:new Date}])}logStderr(t,...r){this.logImmediately([{parts:r,level:t,time:new Date}],{stderr:!0})}logImmediately(t,{stderr:r=!1}={}){let n=t.filter(i=>E_.indexOf(i.level)>=E_.indexOf(this.logLevel));this.ttyAwareLogger.log(n,{includeDebugInfo:this.logLevel===zn.Debug,stderr:r||this.jsonMode})}_suppressUpgradeMessage=!1;suppressUpgradeMessage(){this._suppressUpgradeMessage=!0}_isUpgradeAvailable;async isUpgradeAvailable({includePreReleases:t=!1}={}){if(this._isUpgradeAvailable==null){this.logger.debug(`Checking if ${this.environment.packageName} upgrade is available...`);let r=await oce({cliEnvironment:this.environment,includePreReleases:t}),n=XR(r,this.environment.packageVersion);this.logger.debug(`Latest version: ${r}. `+(n?"Upgrade available.":"No upgrade available."));let i={isUpgradeAvailable:n,latestVersion:r},o=await o2n({project:this.project,cliContext:this});this._isUpgradeAvailable={cliUpgradeInfo:i,generatorUpgradeInfo:o}}return this._isUpgradeAvailable}async confirmPrompt(t,r=!1){try{return await Lbo({message:t,choices:[{name:"No",value:!1},{name:"Yes",value:!0}],default:r,theme:{prefix:be.yellow("?"),style:{answer:i=>be.cyan(i),message:i=>be.bold(i),highlight:i=>be.cyan(i)}}})}catch(n){throw n?.name==="ExitPromptError"?(this.logger.info(`
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.32.1",
2
+ "version": "4.32.2",
3
3
  "repository": {
4
4
  "type": "git",
5
5
  "url": "git+https://github.com/fern-api/fern.git",